Who can use this feature?
Plan: Call Center AI
Managed from: Admin Portal
User type: Admin
Summary: The Krisp Portal API is a REST API for managing your team programmatically: seats, user and device management, Analytics, Speech Analytics, and Audit Logs. Generate an API key and secret per team under Integrations >>> API, store the secret immediately since it is shown only once, and authenticate with HTTP Basic over HTTPS against https://teams.krisp.ai. The key you use determines whether the calls apply to a device-based or email-based team. Seat, invite, and device endpoints are now on v2, with the v1 equivalents deprecated and a migration table below; Analytics, Speech Analytics, and Audit Logs stay on v1. Requests are rate-limited per IP, and the Postman documentation carries the full parameter and payload reference.
The Krisp Portal API is a REST API that lets you programmatically manage your Krisp team. It is intended for admins managing large deployments where automating seat management, user provisioning, and usage monitoring would reduce manual overhead.
The API works for both device-based and email-based teams. The team type is determined by the API key you generate. No additional configuration is required.
Team management endpoints are on v2. The v1 seat, invite, and device endpoints are deprecated: see Migrating from v1 for the replacement paths. Analytics, Speech Analytics, and Audit Logs endpoints remain on v1 and are unaffected.
Full endpoint reference and example requests are available in the Krisp Portal API Postman documentation.
Get your API key and secret
API credentials are generated per team in the Admin Portal. You need both the API key name and the secret to authenticate requests.
- In the Admin Portal, go to Integrations >>> API.
-
Click on Create new key. A panel opens on the right.
-
Enter a name for the key in the Name of the key field, then click Create.
-
Copy both the API key name and the Secret key and store them securely. The secret is only shown once and cannot be retrieved after you close this panel.
Important
Store the secret key immediately after generation. It will not be shown again. If you lose it, you will need to delete the key and create a new one.
Rename or delete a key
To rename or delete an existing key, click on it in the API list. The edit panel opens on the right, where you can update the name or permanently delete the key.
Hint
Deleting a key immediately invalidates it. Any scripts or integrations using that key will stop working.
Authentication
The API uses HTTP Basic authentication. All requests must include an Authorization header with a Base64-encoded string of your API key name and secret, separated by a colon.
Header format:
Authorization: Basic base64(<api_key>:<secret>)
All requests must be made over HTTPS. Requests over plain HTTP and unauthenticated requests will fail.
Base URL:
https://teams.krisp.ai
Hint
The API supports both application/json and application/x-www-form-urlencoded content types for request bodies.
Available endpoints
Endpoints are grouped into five functional areas: seat management, user and device management, Analytics, Speech Analytics, and Audit Logs. The API key you use determines which team type (device or email) the operations apply to.
Seat management
These endpoints are available for both device-based and email-based teams.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v2/seats | Returns a paginated list of all seats in the team. Supports filtering, sorting, and pagination through the filter, order, orderKey, page, and perPage query parameters. See Filtering, sorting, and pagination. |
| GET | /api/v2/seats/count | Returns the seat usage counts for the team: total, licensed, assigned, and unassigned. Use this instead of paging through the full seat list when you only need utilization numbers. |
| POST | /api/v2/seats | Adds the specified number of seats to the team. Requires a count body parameter. New seats match the team type. For credit card billing, the charge is prorated immediately. Not available for invoice-billed teams unless activity-based billing is enabled. |
| DELETE | /api/v2/seats/:id | Permanently deletes the specified seat. The seat must be unassigned before deletion. Remove the user or block the device first. |
Filtering, sorting, and pagination
GET /api/v2/seats accepts the following query parameters.
| Parameter | Description |
|---|---|
| filter | A JSON object string with at least one key. Supported keys: nickname (any string), email (any string), hostname (any string, device teams only), role (admin or user, case-insensitive), and status (unassigned, logged_in, pending_accept, or pending_login). |
| order | Sort direction: asc or desc. |
| orderKey | The field to sort by, for example email or role. |
| page | The page number to return. Defaults to 1. |
| perPage | The number of results per page. Defaults to 10. |
Example request:
GET /api/v2/seats?page=1&perPage=50&orderKey=email&order=asc&filter={"role":"admin","status":"logged_in"}
The filter value must be URL-encoded. If it cannot be parsed as JSON, or if a key is unknown or its value is invalid, the request returns an error.
User and device management
The endpoints available depend on the team type associated with the API key. Device teams are only supported on Windows.
| Method | Endpoint | Description | Team type |
|---|---|---|---|
| POST | /api/v2/team/invite | Sends an email invitation to a new team member. Requires an email body parameter. If a free seat is available, the user is automatically assigned to it upon accepting. Returns an error if no free seats exist. | |
| DELETE | /api/v2/seats/unassign/:id | Removes the user from a seat, freeing it for reassignment. The seat itself is not deleted. Accepts an optional data body parameter that sets the retention policy for the user's data: keep (default) retains it under Krisp's data management policy, and delete permanently removes the user and their data from Krisp systems. | |
| PUT | /api/v2/seats/block/:id | Blocks the device associated with the specified seat, preventing it from logging in to the team again, even if the team_secret.key file is still present on the device. The seat is automatically unassigned upon blocking. | Device |
| GET | /api/v2/team/block/list | Returns a paginated list of all blocked devices in the team. Supports filtering by device name using the qs query parameter. Accepts page and perPage for pagination. | Device |
| PUT | /api/v2/team/device/unblock/:id | Removes a device from the block list. The :id parameter is the block list entry ID, not the seat ID. Once unblocked, the device can log in again if a seat is available. | Device |
Analytics
These endpoints are available for both team types.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v1/analytics/monitoring | Returns a paginated list of live device events from Live Monitoring, including device state (online, in_call, offline, or unhealthy, unavailable), user info, call status, and metadata. The feed is near real-time and is suitable for polling every 30 to 60 seconds. |
| GET | /api/v1/analytics/usage | Returns usage data broken down by user, username, device, or language over a specified date range and cadence: daily (up to 7 days per request), weekly (up to 6 weeks per request), or monthly (up to 3 months per request). Includes microphone and speaker call durations and feature usage durations. Data is available for the past 4 months. |
| GET | /api/v1/analytics/calls | Returns call-level data for the team for a single calendar day. Each row represents one call and includes user, device, application, feature usage durations (Noise Cancellation, Voice Translation, Accent Conversion), and Krisp version. Supports filtering by group, user email, system username, language pair for Voice Translation, Accent Conversion source language, and client ID. Data is available for the past 30 days. Results for the most recent 48 hours may be incomplete. |
Speech Analytics
These endpoints are available for both team types and require no additional configuration.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v1/speech-analytics/metrics | Returns the list of metrics configured for the team, including each metric's ID, name, key, and possible output values. Use metric IDs when filtering sessions by metric value. |
| GET | /api/v1/speech-analytics/sessions | Returns a paginated list of call sessions for the team. Supports filtering by date range, group, user email, system username, skill queue, compliance status, feature usage, and metric values. Results can be sorted by created_at or duration. Accepts page and per_page for pagination. |
| GET | /api/v1/speech-analytics/sessions/:sessionId | Returns the full details of a single session by its ID, including call metrics, transcript, feature usage, compliance flags, scorecard data, and Auto QA results. |
| GET | /api/v1/speech-analytics/users | Returns a paginated list of users with aggregated call metrics for a given time period. Supports filtering by group, device, last seen date range, and metric value ranges. Accepts page and per_page for pagination. |
Audit Logs
This endpoint is available for both team types and requires no additional configuration.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v1/audit-logs | Returns a paginated list of audit log entries for the team, mirroring the values and filters of the Audit Logs dashboard. Each entry includes timestamp, actor, action, object, an object URL that links to the related item in the Admin Portal, and action details. Supports filtering by date range, actor, action, and object. Accepts page and per_page (1 to 1000, default 100) for pagination. The date range must not exceed 31 days per request. |
Migrating from v1
The v1 seat, invite, and device endpoints have been replaced by their v2 equivalents. The paths and parameters map one to one, so in most cases updating your integration means changing /api/v1/ to /api/v2/ in the request URL.
| Deprecated endpoint | Replacement |
|---|---|
| GET /api/v1/seats | GET /api/v2/seats |
| POST /api/v1/seats | POST /api/v2/seats |
| DELETE /api/v1/seats/:id | DELETE /api/v2/seats/:id |
| POST /api/v1/team/invite | POST /api/v2/team/invite |
| DELETE /api/v1/seats/unassign/:id | DELETE /api/v2/seats/unassign/:id |
| PUT /api/v1/seats/block/:id | PUT /api/v2/seats/block/:id |
| GET /api/v1/team/block/list | GET /api/v2/team/block/list |
| PUT /api/v1/team/device/unblock/:id | PUT /api/v2/team/device/unblock/:id |
Three changes go beyond the path. Review these before switching over:
- Seat filtering changed. In v1, seats were filtered with individual query parameters. In v2, filters are passed as a single URL-encoded JSON object in the filter parameter, and order and orderKey are available for sorting.
- The seat object has new fields. last_activity, has_app_access, and email are returned alongside the existing fields. Existing fields are unchanged.
- Unassigning a seat accepts a retention policy. The data body parameter controls whether the user's data is kept or deleted. If you omit it, the behavior matches v1.
Important
The v1 endpoints listed above are deprecated and will not be updated. Move your integrations to v2 to avoid interruption. If you need help planning the switch, contact support@krisp.ai.
Rate limiting
Rate limiting is applied per IP address. If the request threshold is exceeded, all requests from that IP are blocked for a set period and the API returns HTTP 429. The default configuration is 700 requests per minute, with a 1-hour blocking period.
Response codes
| Code | Meaning | HTTP status |
|---|---|---|
| 0 | Success | 200 |
| 1 | Authentication failure | 401 |
| 1015 | Not found | 400 |
| 1016 | Validation error | 400 |
| 1023 | Forbidden | 400 |
| 1026 | Too many requests | 429 |
| 10000 | Internal server error | 500 |
Error codes
When a request fails, the response body includes an error_code field with additional context on why the request failed.
| Error code | Situation | UI message |
|---|---|---|
| AUTH_HEADER_MISSING | Make sure to include the authorization header in request headers. | Problem during authentication. |
| AUTH_HEADER_WRONG_FORMAT | Only Basic and Bearer tokens are supported. | Problem during authentication. |
| AUTH_BASIC_ONLY | Happens when the authorization header is not Basic. | Problem during authentication. |
| AUTH_BASIC_INVALID_TOKEN | Happens when the Basic auth credentials are wrong. | Problem during authentication. |
| VALIDATION_ERROR | Happens when the API receives inputs from a client that are unexpected or wrong. | Something went wrong. |
| NOT_PERMITTED_ADD_SEATS | Happens when the team payment type is invoice. | Not enough permissions. |
| SEAT_NOT_FOUND | Happens when the seat is not found. | Seat not found. |
| NOT_PERMITTED_CHANGE_SEAT_STATUS | Happens when the seat type is not device. | Not enough permissions. |
| SEAT_IS_EMPTY | Happens when trying to change an empty seat's status. | Seat is empty. |
| SEAT_IS_NOT_EMPTY | Happens when trying to delete a seat that already has a user assigned. | Seat is in use. Remove the assigned user from the seat before deleting it. |
| NOT_PERMITTED_DELETE_SEAT | Happens when the team payment type is invoice. | Not enough permissions. |
| NOT_PERMITTED_INVITE_USER | Happens when access is denied while inviting new members. | Not enough permissions. |
| NOT_EMPTY_SEAT | Happens when trying to log in but there are no empty seats. | You don't have empty seats. |
| ALREADY_MEMBER | User is already assigned to another seat within the same team. | User is already a team member. |
| NOT_PERMITTED_UNASSIGN_LAST_ADMINISTRATOR_SEAT | Happens when you try to unassign the last Admin in the team. | Not enough permissions. |
| ITEM_IN_BLACK_LIST | Happens when the requested block list entry is not found, or the device is not currently blocked. | Item in Blacklist not found. |
| SESSION_NOT_FOUND | Happens when trying to retrieve a session that does not exist. | Session not found. |
Hint
For a full breakdown of query parameters, response fields, possible values, and example payloads for each endpoint, see the Krisp Portal API Postman documentation.
Versioning
The API version is included in the URL path (e.g., /api/v2/). Seat, invite, and device endpoints are currently on v2. Analytics, Speech Analytics, and Audit Logs endpoints are on v1.
A new version is published only for breaking changes: changes to response attribute names or logic, endpoint renames, removal of attributes, or deprecated endpoints. Adding new attributes to existing responses is not considered a breaking change and does not result in a new version.
When a new version is published, the change is announced by email, and the previous version remains available for a 3-month deprecation period before it is retired.