Download OpenAPI specification:
You can use the EvaluAgent API to access and update information within your EvaluAgent account. The Evaluagent API is organised around REST. REST stands for Representational State Transfer. This is an architectural pattern that describes how distributed systems can expose a consistent interface. When people use the term 'REST API', they are generally referring to an API accessed using the HTTP protocol at a predefined set of URLs.
These URLs represent various resources which can be returned as JSON, HTML or audio files. Often resources have one or more methods that can be performed on them over HTTP, like GET, POST, PUT and DELETE. These actions action represent the verbs Fetch, Create, Update and Delete respectively for those resources. The Evaluagent API is structured using the JSON:API specification and described using the OpenAPI specification.
In order to maintain data sovereignty our API can only be accessed regionally by cluster.
For customers on our European cluster (eu-west-1) the API URL is api.evaluagent.com.
For customers on our North America cluster (us-east) the API URL is api.us-east.evaluagent.com.
For customers on our Australian cluster (aus) the API URL is api.aus.evaluagent.com.
Context Engine is only as good as the content behind it. The Knowledge Vault endpoints let you sync documents from wherever they actually live — Confluence, Zendesk Guide, Salesforce Knowledge, SharePoint — on a schedule, instead of re-uploading files by hand as they change.
Describe what your source currently holds, and let the Vault work out the difference:
PUT /context-engine/knowledge-vault/documents with mode=replace, a
source, and one entry per document — its external_id, a title, and a SHA-256
content_hash of the text. No file content: this call is a reconciliation, not an upload.
Start with dry_run=true, which writes nothing at all and returns exactly the plan the real
call would apply.unchanged needs nothing. deleted has
already happened. create and update are yours to action. skipped is a removal that was
refused because the document is attached to a live line item topic — deleting it would leave
that scorecard with nothing to assess against, so it was left alone and the topics are named
for a human to detach.POST /context-engine/knowledge-vault/documents for
each create, and PUT /context-engine/knowledge-vault/documents/{id}/file for each update.
Pass the same external_id, external_version and content_hash on those calls: that is what
tells the Vault the document is now in sync, and stops the next manifest asking for it again.
Replacing a file keeps the document's ID, title, tags and every line item attachment — a naive
delete-and-reupload would silently unhook your scorecards.filter[indexing_status]=failed to catch anything that could not be read — a PDF of scanned
images, for example — rather than assuming a 201 means it is searchable.Matching is on external_id, so renaming a page at the source updates the document you already
have instead of creating a duplicate. And everything is scoped to source, so a sync can never
reach documents uploaded by hand, or documents belonging to a different source.
Two things worth building in from the start. Treat 409 on a delete as an expected outcome to
report, not an error to retry, because retrying can never succeed until someone detaches the
document. And prefer filter[updated_from] over re-reading everything once your vault is large.
Writes are rate limited to 20 requests per minute per API key, separately from the standard tier, because each upload costs a file write, a parse and an embedding run. A 500-article knowledge base still loads in well under an hour.
deleted_at field to the /quality/evaluations and /quality/evaluations/{id} resources, holding the UTC timestamp of the deletion and null for every evaluation that has not been deletedfilter[deleted_at;between] to /quality/evaluations, so deletions can be synced incrementally instead of re-fetching every deleted evaluation on each run. Asking for a range returns deleted evaluations without having to name deleted in filter[status]; naming a filter[status] that leaves deleted out is rejected with a 400deleted_at to the sort values accepted by /quality/evaluationsfilter[status] to /quality/evaluations, accepting a comma-separated list of published, published_edited, published_hidden, calibration_session_published and deleteddeleted is named in filter[status], so omitting the filter keeps the existing behaviour and no change is needed to existing integrations/quality/evaluations/{id} accepts the same filter[status] and will return a deleted evaluation when deleted is named; without it a deleted evaluation still returns 404analytics_state field to the /analytics/conversations and /analytics/conversations/{id} resources, reporting whether a conversation was analysed or the reason it was skippedfilter[analytics_state] to /analytics/conversations. Omitting it keeps the existing behaviour of returning only analysed conversations, so no change is needed to existing integrationscreated_to / updated_to on /context-engine/knowledge-vault/documents now include the whole of a date-only end day, instead of cutting off at midnight and excluding everything created during itduplicate_document_title 409 as a sequential duplicate/context-engine/knowledge-vault for managing the documents and tags that ground Context EngineGET, POST /documents; GET, PATCH, DELETE /documents/{id}; PUT /documents/{id}/file; POST /documents/bulk-delete; POST /documents/tagsGET, POST /tags; PATCH, DELETE /tags/{id}PUT /documents/{id}/file replaces a file while preserving the document's ID, title, description, tags and line item attachments409 and the blocking line items listed under errors[0].meta.line_itemssection object (id, name) to each entry in scores on the /reports/calibrations endpoint, matching the section already present on /quality/evaluations/{id}. section is null when the scorecard has only one section.section is now null for any scorecard with a single section on both endpoints, not only when that section is named "General". A scorecard with one section is rendered without a section heading in the app, so it is reported as having no sections here too.section object (id, name) to each line item on the /quality/evaluations/{id} endpoint. section is null when the scorecard does not use sections./feedback and /feedback/{id} endpoints to list and fetch quality and general (peer-to-peer) feedback in a single consistent shape, distinguished by a type fieldfilter[mode] parameter to /quality/evaluations to filter evaluations by evaluation mode name (case-insensitive exact match, supports a comma-separated list)filter[agent_id] parameter to /quality/evaluations to filter evaluations by the evaluated agent's user UUID (supports a comma-separated list)xcsat_result and xcsat_reasoning fields to the /analytics/conversations resource for xCSAT scores (1-5)xces_result and xces_reasoning fields to the /analytics/conversations resource for xCES results (easy, neutral, difficult)xces_driver_result and xces_driver_reasoning fields to the /analytics/conversations resource for xCES Driver results/quality/actions endpoints for listing, creating, viewing, updating (completing), and deleting actions/quality/actions/{id}/messages endpoints for listing and creating messages on an action/quality/messages/{id} endpoints for updating and deleting messages/quality/disputes endpoint to list evaluation disputes with filtering by status, dates, users, and scorecards/quality/disputes/{id} endpoint to view a single dispute/quality/evaluations/{id}/disputes endpoint to view disputes for a specific evaluationGET /quality/calibration-sessions - List calibration sessions with filtering, sorting, and paginationGET /quality/calibration-sessions/{id} - Fetch a single calibration session by ID/analytics/conversations/{id}/transcript endpoint to retrieve conversation transcripts with speaker labelsfilter[scorecard_id] parameter to filter evaluations by scorecard UUIDfilter[scorecard] parameter to filter evaluations by scorecard name (supports prefix matching)/quality/evaluations/ now includes the contact's contact_date.updated_at property to line item feedbackreasons_for_contact field from conversationalAnalyticsrfc_primary_reason field to conversationalAnalyticsrfc_primary_reason_reasoning field to conversationalAnalyticsrfc_secondary_reason field to conversationalAnalyticsrfc_secondary_reason_reasoning field to conversationalAnalyticsrfc_primary_intent field to conversationalAnalyticsrfc_primary_intent_reasoning field to conversationalAnalyticsrfc_secondary_intent field to conversationalAnalyticsrfc_secondary_intent_reasoning field to conversationalAnalytics/quality/evaluations/{id} endpoint to include parent line items, which include an array of child line items.include parameter to analytics/conversations to allowing the inclusion of metadataanalytics/conversations/{id} endpointintegration as a required query parameter to the analytics/conversations endpoint/quality/contacts endpoint.third_party_id property to the users endpointsLearn how to get started with the Evaluagent API. This article describes how to quickly get started with the Evaluagent API using curl and Basic Authentication.
curl if it isn't already installed on your machine. To check if curl is installed, execute curl --version in the command line. If the output is information about the version of curl, it is installed. If you get a message similar to command not found: curl, you need to download and install curl. More information can be found here.curl command to make your request. Pass your token in an Authorization header. Replace YOUR-ACCESS-KEY-ID and YOU-SECRET-KEY with your Access Key ID and Secret Key respectively. curl –request GET --url "https://YOUR-CLUSTER-REGION/v1/org/users" -u "YOUR-ACCESS-KEY-ID:YOUR-SECRET-KEY"All API access is over HTTPS and via regional clusters
All data is sent and received as JSON.
Blank fields are included as null instead of being omitted.
All timestamps return as a String in UTC time, ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ
When you make a request to the REST API, you will specify an HTTP method and a path. Additionally, you might also specify request headers and path, query, or body parameters. The API will return the response status code, response headers, and potentially a response body. The REST API reference documentation describes the HTTP method, path, and parameters for every operation. It also displays example requests and responses for each operation.
To make a request, first find the HTTP method and the path for the operation that you want to use. For example, the "List users" operation uses the GET method and the /org/users path. Prepend the base URL for the Evaluagent API region (for example: https://api.evaluagent.com in Europe) and then the version (currently v1) to the path to get the full URL. For example: https://api.evaluagent.com/v1/org/users in Europe.
Evaluagent supports HTTP Basic authentication. API keys can be provisioned in the Evaluagent platform under Conversations>>Integrations>>API. These are needed to authenticate requests against the API.
You must pass your Access Key ID and Secret Key in an Authorization header with every request to the API in the format "Basic YOUR-ACCESS-KEY-ID:YOUR-SECRET-KEY", where YOUR-ACCESS-KEY-ID:YOUR-SECRET-KEY are Base64 encoded. Many HTTP clients will automatically format in this way for you.
Alternatively, you can use the details above to generate a Bearer Token. These expire every 24 hours (+15 minutes) unless they are refreshed, providing a new token and invaliding the existing token. Once a token has been generated, Basic Authentication will be disabled for those credentials. Please note that you must use your Bearer Token when you request to refresh, and this must be done before the current Bearer Token expires. Once a Bearer Token has expired it cannot be used to gain a refreshed token, and Basic Authentication will not be available. After expiration (without refresh), you will need to generate new credentials.
Invalidate the bearer token used for authentication. Please be aware that the basic authentication details that worked to create this token will continue to be unusable. This is a destructive action which will prevent future API requests associated with this key
This will issue a new bearer token associated with this API key, the bearer token used for authentication will be invalidated upon issue of the new token
{- "token": "string",
- "expiration": "2024-01-01 00:00:00"
}Use this endpoint to add a new user to your Evaluagent org.
Add a user to your Evaluagent org.
Define the Roles for this User using the Roles relationship. This can include making the user an Agent, Quality Analyst or Administrator as well as granting login access to the EvaluAgent app. A list of role ids can be found in the Roles endpoint.
If the created user is an Agent then the optional 'agent-team' relationship can be used to specify the id of the Group that they belong to. The list of Groups can be fetched using the Groups endpoint.
object |
{- "data": {
- "type": "users",
- "attributes": {
- "forename": "John",
- "surname": "Smith",
- "email": "john.smith@example.com",
- "username": "john.smith@example.com",
- "active": true,
- "allow_login": true,
- "reporting_access_id": "ec1cf0c7-d90e-4988-b6f2-f9624eb4a5b5",
- "third_party_id": 12345
}, - "relationships": {
- "agent-team": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "groups"
}
}, - "roles": {
- "data": [
- {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "roles"
}
]
}
}
}
}{- "data": {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "users",
- "attributes": {
- "forename": "John",
- "surname": "Smith",
- "email": "john.smith@example.com",
- "username": "john.smith@example.com",
- "start_date": "2019-08-24T14:15:22Z",
- "active": true,
- "allow_login": true,
- "reporting_access_id": "ec1cf0c7-d90e-4988-b6f2-f9624eb4a5b5",
- "third_party_id": "someOtherId"
}, - "relationships": {
- "agent-team": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "groups"
}
}, - "roles": {
- "data": [
- {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "roles"
}
]
}
}
}
}Fetch a list of all the users in this org. Filter by email address to search for a specific user.
| filter[email] | string <string> Example: filter[email]=user@company.com Return a specific user by their email address. |
| filter[username] | string <string> Example: filter[username]=user@company.com Return a specific user by their username. |
{- "data": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "users",
- "attributes": {
- "forename": "John",
- "surname": "Smith",
- "email": "john.smith@example.com",
- "username": "john.smith@example.com",
- "start_date": "2019-08-24T14:15:22Z",
- "active": true,
- "allow_login": true,
- "reporting_access_id": "ec1cf0c7-d90e-4988-b6f2-f9624eb4a5b5",
- "third_party_id": "someOtherId"
}, - "relationships": {
- "agent-team": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "groups"
}
}, - "roles": {
- "data": [
- {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "roles"
}
]
}
}
}
]
}Fetch a specific user by userid
| id required | string The id of the user to retrieve |
{- "data": {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "users",
- "attributes": {
- "forename": "John",
- "surname": "Smith",
- "email": "john.smith@example.com",
- "username": "john.smith@example.com",
- "start_date": "2019-08-24T14:15:22Z",
- "active": true,
- "allow_login": true,
- "reporting_access_id": "ec1cf0c7-d90e-4988-b6f2-f9624eb4a5b5",
- "third_party_id": "someOtherId"
}, - "relationships": {
- "agent-team": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "groups"
}
}, - "roles": {
- "data": [
- {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "roles"
}
]
}
}
}
}Update a user's details
Toggle state between active/deactive setting the 'active' attribute.
Define the Roles for this User using the Roles relationship. This can include making the user an Agent, Quality Analyst or Administrator as well as granting login access to the EvaluAgent app. A list of role ids can be found in the Roles endpoint.
If the user is an Agent then the 'agent-team' relationship can be updated to move the Agent to a different group. The list of groups can be fetched using the Groups endpoint.
| id required | string The id of the user to update |
Updated details for the user
object |
{- "data": {
- "type": "users",
- "attributes": {
- "forename": "John",
- "surname": "Smith",
- "email": "john.smith@example.com",
- "username": "john.smith@example.com",
- "active": true,
- "allow_login": true,
- "reporting_access_id": "ec1cf0c7-d90e-4988-b6f2-f9624eb4a5b5",
- "third_party_id": "idFromExternalSystem"
}, - "relationships": {
- "agent-team": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "groups"
}
}, - "roles": {
- "data": [
- {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "roles"
}
]
}
}
}
}{- "data": {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "users",
- "attributes": {
- "forename": "John",
- "surname": "Smith",
- "email": "john.smith@example.com",
- "username": "john.smith@example.com",
- "start_date": "2019-08-24T14:15:22Z",
- "active": true,
- "allow_login": true,
- "reporting_access_id": "ec1cf0c7-d90e-4988-b6f2-f9624eb4a5b5",
- "third_party_id": "someOtherId"
}, - "relationships": {
- "agent-team": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "groups"
}
}, - "roles": {
- "data": [
- {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "roles"
}
]
}
}
}
}Use this endpoint to add a new group to your Evaluagent org.
Add a group to your Evaluagent org. Levels can be grabbed from the org/levels endpoint.
object |
{- "data": {
- "type": "groups",
- "attributes": {
- "name": "Agent",
- "level": "7e1ff821-b744-417b-a212-58ed46457b31",
- "active": true,
- "parent_group": "8d1ef891-g744-417d-h212-58er47547d81"
}
}
}{- "data": {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "groups",
- "attributes": {
- "name": "Customer Service Department",
- "level": "Department",
- "active": true,
- "is_custom_reporting_group": false,
- "parent": "7e1ff821-b744-417b-a212-58ed46457b31",
- "has_children": true
}
}
}Fetch a list of your groups and their hierarchy within EvaluAgent. Useful for compiling a list of groups and their ids for managing agents.
| show_inactive | boolean Whether inactive groups should be shown. Defaults to false. |
{- "data": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "groups",
- "attributes": {
- "name": "Customer Service Department",
- "level": "Department",
- "active": true,
- "is_custom_reporting_group": false,
- "parent": "7e1ff821-b744-417b-a212-58ed46457b31",
- "has_children": true
}
}
]
}Update a group's details
| id required | string The id of the group to update |
Updated details for the group
object |
{- "data": {
- "type": "groups",
- "attributes": {
- "name": "Agent",
- "level": "7e1ff821-b744-417b-a212-58ed46457b31",
- "active": true,
- "parent_group": "8d1ef891-g744-417d-h212-58er47547d81"
}
}
}{- "data": {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "groups",
- "attributes": {
- "name": "Customer Service Department",
- "level": "Department",
- "active": true,
- "is_custom_reporting_group": false,
- "parent": "7e1ff821-b744-417b-a212-58ed46457b31",
- "has_children": true
}
}
}Use this endpoint to add a new Role to your Evaluagent org.
Add a role to your Evaluagent org. Abilities can be grabbed from the org/abilities endpoint.
object |
{- "data": {
- "type": "roles",
- "attributes": {
- "name": "Agent"
}, - "relationships": {
- "abilities": {
- "data": [
- {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "abilities"
}
]
}
}
}
}{- "data": {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "roles",
- "attributes": {
- "title": "Team Leader",
- "name": "team-leader"
}, - "relationships": {
- "abilities": {
- "data": [
- {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "abilities"
}
]
}
}
}
}Fetch a list of your roles within EvaluAgent. Useful for assigning roles to users.
{- "data": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "roles",
- "attributes": {
- "title": "Team Leader",
- "name": "team-leader"
}, - "relationships": {
- "abilities": {
- "data": [
- {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "abilities"
}
]
}
}
}
]
}Update a role's details
| id required | string The id of the role to update |
Updated details for the role
object |
{- "data": {
- "type": "roles",
- "attributes": {
- "name": "Admin"
}, - "relationships": {
- "abilities": {
- "data": [
- {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "abilities"
}
]
}
}
}
}{- "data": {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "roles",
- "attributes": {
- "title": "Team Leader",
- "name": "team-leader"
}, - "relationships": {
- "abilities": {
- "data": [
- {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "abilities"
}
]
}
}
}
}Fetch a list of your integrations within EvaluAgent.
{- "data": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "integrations",
- "attributes": {
- "type": "integration.zendesk",
- "title": "Zendesk",
- "active": true
}
}
]
}Fetch a list of your abilities within EvaluAgent. Useful for creating roles.
{- "data": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "abilities",
- "attributes": {
- "heading": "User Management Permissions",
- "title": "Manage Users"
}
}
]
}Fetch a list of your completed evaluations and their results.
The request can be filtered by date, scorecard, evaluation mode (filter[mode]), the evaluated agent (filter[agent_id]) and status (filter[status]), and sorted by published_at, date_published, updated_at, deleted_at, reference, score, agent_name, evaluator_name. The endpoint also supports pagination, requests default to the first page. If you also need the related contacts for the evaluations then use
include to also return those contacts with the request.
Deleted evaluations are excluded by default. Ask for them with filter[status]=deleted, or alongside
live ones with filter[status]=published,published_edited,deleted. This is how you reconcile against
the quality CSV export, which has always included them.
To sync deletions incrementally, ask for the window since your last run with
filter[deleted_at;between] rather than pulling every deleted evaluation and comparing
locally. A deletion date range returns deleted evaluations on its own, so naming
filter[status]=deleted as well is optional.
| filter[published_at;between] | string <date-time> Example: filter[published_at;between]=2023-05-01T00:00:00.000Z, 2023-08-01T00:00:00.000Z A date range to filter evaluations on their |
| filter[deleted_at;between] | string <date-time> Example: filter[deleted_at;between]=2026-09-01T00:00:00.000Z, 2026-09-08T00:00:00.000Z A date range to filter deleted evaluations on their |
| sort | string Example: sort=-published_at An option to sort by order of choice. Adding a minus operator to the start of field you wish to sort on will return results descending order. List of sorting options - |
| page[number] | number Example: page[number]=1 When paginated, the page number that you would like to request. Defaults to 1. |
| include | string Example: include=contacts Request that contacts associated with the returned evaluations be included under the "included" key in the response. |
| filter[scorecard_id] | string <uuid> Example: filter[scorecard_id]=e15b67e1-816b-456d-94d4-43d362a2b4a0 Filter evaluations by scorecard UUID. Exact match. |
| filter[scorecard] | string Example: filter[scorecard]=Customer Support Filter evaluations by scorecard name. Supports case-insensitive prefix matching (e.g., "Customer" matches "Customer Support", "Customer Service"). |
| filter[agent_id] | string Example: filter[agent_id]=9d2f1c4e-3b6a-4f81-8c2d-71e0a5b9c3d4 Filter evaluations by the evaluated agent's user UUID. Accepts a single UUID or a comma-separated list of UUIDs to match any of them. |
| filter[mode] | string Example: filter[mode]=Manual,Calibration Filter evaluations by evaluation mode name, as returned in the |
| filter[status] | string Example: filter[status]=published,deleted Filter evaluations by the |
Response when include=contacts parameter is used
{- "meta": {
- "pagination": {
- "total": 5105,
- "pages": 52,
- "size": 100,
- "number": 1
}
}, - "data": [
- {
- "id": "b750207b-750d-4241-8b60-b6b8c11ebcc7",
- "type": "evaluations",
- "attributes": {
- "published_at": "2024-02-12T21:44:14+00:00",
- "updated_at": "2024-06-18T06:46:17+00:00",
- "mode": "Official Evaluation",
- "status": "published",
- "scorecard": "Customer Support New",
- "scorecard_id": "e15b67e1-816b-456d-94d4-43d362a2b4a0",
- "notes": "",
- "outcome": "Pass",
- "outcome_name": "PASS",
- "num_of_autofails": 0,
- "quality_score": "91.6",
- "seconds_elapsed": 468,
- "started_at": "2024-02-12T21:41:20+00:00"
}, - "relationships": {
- "evaluator": {
- "data": {
- "type": "users",
- "id": "8ccc4005-8f69-4d9c-842f-8487991f6fb9"
}
}, - "contact": {
- "data": {
- "type": "quality-contacts",
- "id": "9186e81f-237f-4bbc-bc67-b310a1b4c66a"
}
}, - "agent": {
- "data": {
- "type": "users",
- "id": "fbf565f4-ca94-4a6c-bd21-0e831619237c"
}
}
}
}
], - "included": [
- {
- "id": "9186e81f-237f-4bbc-bc67-b310a1b4c66a",
- "type": "contacts",
- "attributes": {
- "started_at": "2024-02-12T19:02:00+00:00",
- "ended_at": "2024-02-12T19:02:00+00:00",
- "contact_reference": "3v2zz1",
- "case_reference": null,
- "channel": "Telephony",
- "created_at": "2024-02-12T19:02:45+00:00",
- "metadata": {
- "agent_third_party_id": "bsisko"
}, - "source": null,
- "contact_third_party_reference": "3v2zz1",
- "contact_date": "2024-02-12T19:02:00+00:00"
}, - "relationships": {
- "agent": {
- "data": {
- "type": "users",
- "id": "fbf565f4-ca94-4a6c-bd21-0e831619237c"
}
}, - "group": {
- "data": {
- "type": "groups",
- "id": "6a48a590-8522-4fc2-a65d-4e818345d9bb"
}
}, - "evaluation": {
- "data": {
- "type": "evaluations",
- "id": "b750207b-750d-4241-8b60-b6b8c11ebcc7"
}
}
}
}
]
}Fetch a detailed view of an evaluation, including feedback and individual line item scores.
Use include to also return related contacts and evaluators or agents for this specific evaluation.
A deleted evaluation returns 404 unless you ask for it with filter[status]=deleted.
| id required | string The id of the evaluation to retrieve |
| filter[status] | string Example: filter[status]=deleted Naming |
| include | Array of strings Items Enum: "contact" "evaluator" "agent" Example: include=contact&include=evaluator&include=agent A comma-separated list of records associated with the evaluation to be included under the "included" key in the response. Available record types are contact, evaluator, and agent. |
{- "data": {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "evaluations",
- "attributes": {
- "published_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "deleted_at": "2026-09-08T09:15:00+00:00",
- "notes": "string",
- "mode": "Official Evaluation",
- "status": "published",
- "scorecard": "Customer Service Scorecard v1",
- "scorecard_id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "outcome": "Pass",
- "outcome_name": "Fair",
- "num_of_autofails": 0,
- "quality_score": "87.4",
- "seconds_elapsed": 1776,
- "started_at": "2019-08-24T14:15:22Z",
- "category_results": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "name": "Customer Experience",
- "result": "100.0"
}
], - "evaluation_feedback": [
- {
- "type": "Neutral",
- "feedback": "Feedback for agent"
}
], - "line_items": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "name": "Did the agent open the call correctly?",
- "section": {
- "id": "9b2ee1e6-8f43-4a02-bc47-1c4a56ff10c3",
- "name": "Compliance"
}, - "categories": [
- {
- "name": "Customer Experience"
}
], - "weighting": "1",
- "auto_fail_setting": false,
- "score": "0.5",
- "outcome_title": "Exceeds",
- "system_outcome": "Pass",
- "children": [
- {
- "uuid": "43aea3f1-00aa-4b9f-8dc4-9f843788bf42",
- "name": "Did the agent verify customer details?"
}
], - "line_item_feedback": [
- {
- "type": "Neutral",
- "feedback": "Feedback for agent",
- "updated_at": "2025-07-01T10:58:39+00:00"
}
], - "root_cause": "Agent did not get marketing permissions"
}
], - "data_capture_responses": [
- {
- "id": "8c752858-02ce-473a-b1ef-47a5c42c76a5",
- "question_id": "3568d086-f228-4c03-af4b-52bb5c90794b",
- "question_text": "Branch location",
- "answer": "London",
- "is_freetext": false,
- "created_at": "2019-08-24T14:15:22Z"
}
]
}, - "relationships": {
- "evaluator": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "users"
}
}, - "contact": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "contacts"
}
}, - "agent": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "agents"
}
}
}
}
}Retrieve the disputes for a specific evaluation. This is equivalent to calling /quality/disputes/{id} with the evaluation UUID.
Rate limiting: Maximum 100 requests per minute, 10,000 requests per day per API key.
| id required | string <uuid> Example: 43aea3f1-00aa-4b9f-8dc4-9f843788bf41 The evaluation UUID. |
| include | string Example: include=stages,stages.line_items,stages.appealer,stages.reviewer Comma-separated list of related resources to include. |
{- "data": {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "disputes",
- "attributes": {
- "status": "pending",
- "created_at": "2019-08-24T14:15:22Z",
- "resolved_at": "2019-08-24T14:15:22Z",
- "current_stage": 2,
- "total_stages": 2
}, - "relationships": {
- "evaluation": {
- "data": {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "evaluations"
}
}, - "contact": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "contacts"
}
}, - "agent": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "users"
}
}, - "stages": {
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "dispute-stages"
}
]
}
}
}, - "included": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "evaluations",
- "attributes": {
- "published_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "deleted_at": "2026-09-08T09:15:00+00:00",
- "notes": "string",
- "mode": "Official Evaluation",
- "status": "published",
- "scorecard": "Customer Service Scorecard v1",
- "scorecard_id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "outcome": "Pass",
- "outcome_name": "Fair",
- "num_of_autofails": 0,
- "quality_score": "87.4",
- "seconds_elapsed": 1776,
- "started_at": "2019-08-24T14:15:22Z"
}, - "relationships": {
- "evaluator": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "users"
}
}, - "contact": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "contacts"
}
}, - "agent": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "agents"
}
}
}
}
]
}Retrieve the disputes for a specific evaluation. This is equivalent to calling /quality/disputes/{id} with the evaluation UUID.
Rate limiting: Maximum 100 requests per minute, 10,000 requests per day per API key.
| id required | string <uuid> Example: 43aea3f1-00aa-4b9f-8dc4-9f843788bf41 The evaluation UUID. |
| include | string Example: include=stages,stages.line_items,stages.appealer,stages.reviewer Comma-separated list of related resources to include. |
{- "data": {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "disputes",
- "attributes": {
- "status": "pending",
- "created_at": "2019-08-24T14:15:22Z",
- "resolved_at": "2019-08-24T14:15:22Z",
- "current_stage": 2,
- "total_stages": 2
}, - "relationships": {
- "evaluation": {
- "data": {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "evaluations"
}
}, - "contact": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "contacts"
}
}, - "agent": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "users"
}
}, - "stages": {
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "dispute-stages"
}
]
}
}
}, - "included": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "evaluations",
- "attributes": {
- "published_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "deleted_at": "2026-09-08T09:15:00+00:00",
- "notes": "string",
- "mode": "Official Evaluation",
- "status": "published",
- "scorecard": "Customer Service Scorecard v1",
- "scorecard_id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "outcome": "Pass",
- "outcome_name": "Fair",
- "num_of_autofails": 0,
- "quality_score": "87.4",
- "seconds_elapsed": 1776,
- "started_at": "2019-08-24T14:15:22Z"
}, - "relationships": {
- "evaluator": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "users"
}
}, - "contact": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "contacts"
}
}, - "agent": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "agents"
}
}
}
}
]
}Retrieve a paginated list of evaluation disputes with filtering and sorting. Use the include parameter to embed related resources.
The disputes endpoint aggregates disputes by evaluation. Each dispute in the response represents all dispute activity for a single evaluation, with individual dispute stages accessible via the stages relationship.
Rate limiting: Maximum 100 requests per minute, 10,000 requests per day per API key.
| filter[created_at;between] | string <date-time> Example: filter[created_at;between]=2026-01-01T00:00:00.000Z,2026-01-31T23:59:59.000Z Filter by when the first dispute was raised. Comma-separated start and end date in UTC format. |
| filter[resolved_at;between] | string <date-time> Example: filter[resolved_at;between]=2026-01-01T00:00:00.000Z,2026-01-31T23:59:59.000Z Filter by resolution date. Only includes disputes where all stages are resolved. Comma-separated start and end date in UTC format. |
| filter[status] | string Enum: "pending" "changed" "unchanged" Example: filter[status]=pending Filter by overall dispute status. |
| filter[evaluation_id] | string <uuid> Example: filter[evaluation_id]=43aea3f1-00aa-4b9f-8dc4-9f843788bf41 Filter by evaluation UUID. |
| filter[contact_id] | string <uuid> Filter by contact UUID. |
| filter[agent_id] | string <uuid> Filter by agent UUID (the assignee on the evaluation). |
| filter[appealer_id] | string <uuid> Filter by any stage appealer UUID. |
| filter[reviewer_id] | string <uuid> Filter by any stage reviewer UUID. |
| filter[scorecard_id] | string <uuid> Filter by scorecard UUID. |
| filter[scorecard] | string Example: filter[scorecard]=Customer Service Filter by scorecard name (prefix match). |
| sort | string Enum: "created_at" "-created_at" "resolved_at" "-resolved_at" Example: sort=-created_at Sort results. Use |
| page[number] | integer Example: page[number]=1 Page number (default 1). |
| page[size] | integer <= 100 Example: page[size]=50 Results per page (default 50, max 100). |
| include | string Example: include=evaluation,stages,stages.line_items,stages.appealer,stages.reviewer Comma-separated list of related resources to include. |
{- "meta": {
- "pagination": {
- "total": 150,
- "pages": 3,
- "size": 50,
- "number": 1
}
}, - "data": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "disputes",
- "attributes": {
- "status": "pending",
- "created_at": "2019-08-24T14:15:22Z",
- "resolved_at": "2019-08-24T14:15:22Z",
- "current_stage": 2,
- "total_stages": 2
}, - "relationships": {
- "evaluation": {
- "data": {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "evaluations"
}
}, - "contact": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "contacts"
}
}, - "agent": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "users"
}
}, - "stages": {
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "dispute-stages"
}
]
}
}
}
], - "included": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "evaluations",
- "attributes": {
- "published_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "deleted_at": "2026-09-08T09:15:00+00:00",
- "notes": "string",
- "mode": "Official Evaluation",
- "status": "published",
- "scorecard": "Customer Service Scorecard v1",
- "scorecard_id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "outcome": "Pass",
- "outcome_name": "Fair",
- "num_of_autofails": 0,
- "quality_score": "87.4",
- "seconds_elapsed": 1776,
- "started_at": "2019-08-24T14:15:22Z"
}, - "relationships": {
- "evaluator": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "users"
}
}, - "contact": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "contacts"
}
}, - "agent": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "agents"
}
}
}
}
]
}Retrieve a single dispute by its ID (evaluation UUID). Use the include parameter to embed related resources.
Rate limiting: Maximum 100 requests per minute, 10,000 requests per day per API key.
| id required | string <uuid> Example: 43aea3f1-00aa-4b9f-8dc4-9f843788bf41 The dispute ID (same as evaluation UUID). |
| include | string Example: include=evaluation,stages,stages.line_items,stages.appealer,stages.reviewer Comma-separated list of related resources to include. |
{- "data": {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "disputes",
- "attributes": {
- "status": "pending",
- "created_at": "2019-08-24T14:15:22Z",
- "resolved_at": "2019-08-24T14:15:22Z",
- "current_stage": 2,
- "total_stages": 2
}, - "relationships": {
- "evaluation": {
- "data": {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "evaluations"
}
}, - "contact": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "contacts"
}
}, - "agent": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "users"
}
}, - "stages": {
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "dispute-stages"
}
]
}
}
}, - "included": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "evaluations",
- "attributes": {
- "published_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "deleted_at": "2026-09-08T09:15:00+00:00",
- "notes": "string",
- "mode": "Official Evaluation",
- "status": "published",
- "scorecard": "Customer Service Scorecard v1",
- "scorecard_id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "outcome": "Pass",
- "outcome_name": "Fair",
- "num_of_autofails": 0,
- "quality_score": "87.4",
- "seconds_elapsed": 1776,
- "started_at": "2019-08-24T14:15:22Z"
}, - "relationships": {
- "evaluator": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "users"
}
}, - "contact": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "contacts"
}
}, - "agent": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "agents"
}
}
}
}
]
}Fetch a list of calibration sessions with optional filtering, sorting, and pagination.
Use include to return related resources such as facilitator, participants, scorecard, or calibrated evaluation.
| filter[status] | string Enum: "pending" "in_progress" "closed" Example: filter[status]=pending Filter sessions by status |
| filter[start_at;between] | string Example: filter[start_at;between]=2025-01-01,2025-01-31 A date range to filter sessions on their scheduled start date. Consists of a comma-separated start and end date in YYYY-MM-DD format. |
| filter[facilitator] | string <uuid> Example: filter[facilitator]=99abbc05-9535-4e20-84be-0d4e55bcd407 Filter sessions by facilitator user UUID |
| filter[participant] | string <uuid> Example: filter[participant]=99abbc05-9535-4e20-84be-0d4e55bcd407 Filter sessions by participant user UUID |
| filter[scorecard] | string <uuid> Example: filter[scorecard]=25eeba63-ffe8-4f88-aa96-a3ea3e38757f Filter sessions by scorecard/quality form UUID |
| sort | string Enum: "start_at" "-start_at" "reference" "-reference" "status" "-status" Example: sort=-start_at Sort the returned sessions. Adding a minus operator to the start will return results in descending order. Valid options: |
| page[size] | integer [ 1 .. 100 ] Default: 100 Example: page[size]=20 Number of items per page. Maximum 100. |
| page[number] | integer >= 1 Default: 1 Example: page[number]=1 Page number to retrieve. Defaults to 1. |
| include | string Example: include=facilitator,participants,scorecard Comma-separated list of related resources to include. Available: |
{- "meta": {
- "pagination": {
- "total": 42,
- "pages": 3,
- "size": 20,
- "number": 1
}
}, - "data": [
- {
- "id": "550e8400-e29b-41d4-a716-446655440000",
- "type": "quality-calibration-sessions",
- "attributes": {
- "reference": "CAL-00001",
- "start_at": "2025-01-15T10:00:00+00:00",
- "status": "pending",
- "location": "Conference Room A",
- "type": "calibration",
- "mode": "evaluation"
}, - "relationships": {
- "facilitator": {
- "data": {
- "type": "users",
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278"
}
}, - "participants": {
- "data": [
- {
- "type": "users",
- "id": "99abbc05-9535-4e20-84be-0d4e55bcd407"
}
]
}, - "scorecard": {
- "data": {
- "type": "quality-forms",
- "id": "25eeba63-ffe8-4f88-aa96-a3ea3e38757f"
}
}, - "contact": {
- "data": {
- "type": "quality-contacts",
- "id": "9186e81f-237f-4bbc-bc67-b310a1b4c66a"
}
}, - "evaluation": {
- "data": {
- "type": "quality-evaluations",
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41"
}
}
}
}
]
}Fetch details of a single calibration session by its UUID.
Use include to return related resources such as facilitator, participants, scorecard, or calibrated evaluation.
| id required | string <uuid> The UUID of the calibration session to retrieve |
| include | string Example: include=facilitator,participants,scorecard,evaluation Comma-separated list of related resources to include. Available: |
{- "data": {
- "id": "550e8400-e29b-41d4-a716-446655440000",
- "type": "quality-calibration-sessions",
- "attributes": {
- "reference": "CAL-00001",
- "start_at": "2025-01-15T10:00:00+00:00",
- "status": "pending",
- "location": "Conference Room A",
- "type": "calibration",
- "mode": "evaluation"
}, - "relationships": {
- "facilitator": {
- "data": {
- "type": "users",
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278"
}
}, - "participants": {
- "data": [
- {
- "type": "users",
- "id": "99abbc05-9535-4e20-84be-0d4e55bcd407"
}
]
}, - "scorecard": {
- "data": {
- "type": "quality-forms",
- "id": "25eeba63-ffe8-4f88-aa96-a3ea3e38757f"
}
}, - "evaluation": {
- "data": {
- "type": "quality-evaluations",
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41"
}
}
}
}, - "included": [ ]
}Use this endpoint to import conversations from other platforms into Evaluagent.
/quality/imported-contacts/upload-audio endpoint to upload that audio file. Then using the returned path reference use this endpoint to import the related metadata for your conversation.Conversation responses are processed asynchronously after the request returns: a successful response confirms the contact was created and its responses accepted for processing, and the responses will typically be visible on the contact shortly afterwards. A GET for the contact immediately after import may briefly return it without its responses.
Please note there is rate-limiting in place for this endpoint. Maximum 100 requests per-minute, based on API credentials.
Contact to add to EvaluAgent.
object |
{- "data": {
- "reference": "9a0dfef9-1f3b-4c16-b4d6-0c7d5a7db4f1",
- "agent_id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "agent_email": "agent.one@example.com",
- "contact_date": "2022-09-01T09:58:00Z",
- "channel": "Email",
- "assigned_at": "2022-09-01T10:00:00Z",
- "solved_at": "2022-09-01T10:12:00Z",
- "handling_time": 720,
- "audio_file_path": "quality/fb2db7c0-de00-43ed-997d-f587eac8bdbb/55649393-f708-4ebf-a665-a39942c030f1.mp3",
- "customer_telephone_number": "01753 877212",
- "metadata": {
- "Direction": "inbound",
- "Campaign": "new-campaign"
}, - "responses": [
- {
- "speaker_email": "customer.one@example.com",
- "response_id": "515235-1",
- "message": "Hi, I have an issue with my online account.",
- "channel": "Email",
- "message_created_at": "2022-09-01T10:00:00Z",
- "speaker_is_customer": true
}, - {
- "speaker_id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "speaker_email": "agent.one@example.com",
- "response_id": "515235-2",
- "message": "Thanks for reaching out. Can you confirm the email on the account?",
- "channel": "Email",
- "message_created_at": "2022-09-01T10:02:00Z",
- "speaker_is_customer": false
}, - {
- "speaker_email": "customer.one@example.com",
- "response_id": "515235-3",
- "message": "Sure, it is customer.one@example.com.",
- "channel": "Email",
- "message_created_at": "2022-09-01T10:04:00Z",
- "speaker_is_customer": true
}, - {
- "speaker_id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "speaker_email": "agent.one@example.com",
- "response_id": "515235-4",
- "message": "Thanks, I have reset the account and sent you a link.",
- "channel": "Email",
- "message_created_at": "2022-09-01T10:10:00Z",
- "speaker_is_customer": false
}, - {
- "speaker_email": "bot@example.com",
- "response_id": "515235-5",
- "message": "This conversation has been automatically closed after 24 hours of inactivity.",
- "channel": "Email",
- "message_created_at": "2022-09-02T10:10:00Z",
- "speaker_is_bot": true
}, - {
- "speaker_id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "speaker_email": "agent.one@example.com",
- "response_id": "515235-6",
- "message": "Internal: Customer verified via previous ticket #123",
- "channel": "Email",
- "message_created_at": "2022-09-01T10:05:00Z",
- "speaker_is_customer": false,
- "internal_note": true
}
]
}
}{- "status": 200,
- "message": "Success",
- "contact_reference": "a63e026f-50ea-42c8-9fa1-418b4427a10c",
- "3rd_party_reference": "contact001"
}Use this endpoint to correct or add custom metadata fields on a conversation you have already imported, without re-importing it. The conversation is identified by the reference it was imported under.
Only metadata is changed. To change any other attribute of the conversation, or to add responses, re-import it.
Fields you send are merged into the conversation's existing metadata.
null is removed from the conversation.Newly created fields become available as reporting and conversation filters automatically. Updated values are reflected in conversation filtering immediately, and in Conversation Insights reporting once the conversation has been re-aggregated.
Values are stored with the JSON type you send them as. Sending "22" where the field previously held 22 will store the field as text, which excludes it from numeric filters — send numbers as numbers.
Some field names are reserved by Evaluagent and are rejected. These are names we write or read ourselves — the audio and video pointers (audio_url, video_url, sample_rate), the external link (external_url, conversation_url, linkToThirdParty), transcription and analytics fields (transcription_provider, totalWords), fields mirroring a column (channel_name, handling_time), and any name beginning with __. Field names cannot contain a full stop, and metadata must be an object of named fields rather than a list.
If two requests update the same conversation at the same time, changes to different fields are both kept; if both change the same field, the last one to complete wins.
Please note there is rate-limiting in place for this endpoint. Maximum 100 requests per-minute, based on API credentials.
The conversation reference, and the metadata fields to change.
object |
{- "data": {
- "reference": "9a0dfef9-1f3b-4c16-b4d6-0c7d5a7db4f1",
- "metadata": {
- "Campaign": "summer-renewals",
- "Direction": "outbound",
- "Outcome Product": null
}
}
}{- "status": 200,
- "message": "Success",
- "contact_reference": "9a0dfef9-1f3b-4c16-b4d6-0c7d5a7db4f1",
- "metadata": {
- "Campaign": "summer-renewals",
- "Direction": "outbound",
- "Customer Name": "Isabelle Bellamy"
}
}Use this endpoint to import recorded audio file conversations from other platforms into Evaluagent.
Use the path reference in the response from this endpoint when importing the related metadata with the /quality/imported-contacts endpoint.
The Evaluagent platform supports all audio encoded in a format supported by HTML5
| audio_file required | null <binary> The audio file to upload. Must be an MP3, WAV, OGG, M4A, etc. |
{- "status": 200,
- "message": "Audio file uploaded successfully",
- "path": "quality/fb2db7c0-de00-43ed-997d-f587eac8bdbb/55649393-f708-4ebf-a665-a39942c030f1.mp3"
}Fetch conversational analytics for contacts between a specified time period. This endpoint is rate limited to 20 request per minute. This limit is shared with GET :/analytics/conversations/{id}
| filter[integration] required | string Example: filter[integration]=8fa6239b-14a6-4d40-8afe-398312f779f6 The UUID of the integration to return |
| filter[contact_date;between] required | string <date-time> Example: filter[contact_date;between]=2023-05-01T00:00:00.000Z, 2023-05-31T00:00:00.000Z A date range to filter conversations on their |
| filter[insight_topics][] | Array of arrays Example: filter[insight_topics][]=13686037-e52e-470a-966c-843437e7d422 An array of topic UUIDs to filter conversations by |
| filter[analytics_state] | string Example: filter[analytics_state]=audio-too-short,too-few-responses Restricts results by When omitted, only conversations with an |
| sort | string Example: sort=-contact_date An option to sort by order of choice. Adding a minus operator to the start of field you wish to sort on will return results descending order. List of sorting options - |
| page[number] | number Example: page[number]=1 When paginated, the page number that you would like to request. Defaults to 1. |
| include | string Example: include=metadata A comma separated list of additional fields |
{- "data": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "conversational_analytics",
- "attributes": {
- "contact_date": "2019-08-24T14:15:22Z",
- "3rd_party_reference": "ABC123",
- "source_id": 123456,
- "channel": "Salesforce",
- "agent_id": "string",
- "agent_name": "John Smith",
- "handle_time": 306,
- "response_count": 12,
- "has_audio": true,
- "silence_duration": 62,
- "overtalk_instances": 2,
- "xnps_outcome": "string",
- "xrepeat_result": "string",
- "xrepeat_reasoning": "string",
- "xvulnerability_result": "string",
- "xvulnerability_reasoning": "string",
- "xresolution_result": "string",
- "xresolution_reasoning": "string",
- "xcsat_result": "string",
- "xcsat_reasoning": "string",
- "xces_result": "string",
- "xces_reasoning": "string",
- "xces_driver_result": "string",
- "xces_driver_reasoning": "string",
- "rfc_primary_reason": "string",
- "rfc_primary_reasoning": "string",
- "rfc_secondary_reason": "string",
- "rfc_secondary_reasoning": "string",
- "rfc_primary_intent": "string",
- "rfc_primary_intent_reasoning": "string",
- "rfc_secondary_intent": "string",
- "rfc_secondary_intent_reasoning": "string",
- "sentiment": {
- "sentiment_score": 0,
- "agent_sentiment_label": "string",
- "agent_sentiment_score": 0,
- "customer_sentiment_label": "string",
- "customer_sentiment_score": 0
}, - "ai": {
- "ai_opening": "string",
- "ai_requirements": "string",
- "ai_discussion": "string",
- "ai_outcome": "string"
}, - "topics": "{'Topic Name': 'Pass', 'Another Topic': 'Fail', 'Final Topic': ''}",
- "metadata": "{'Date': '01/01/2025', 'Hold Time': 10, 'Ivr Time': 17, 'Park Time': 0, 'Talk Time': 453}",
- "analytics_state": "audio-too-short"
}
}
]
}Fetch conversational analytics for a specific contact. This endpoint is rate limited to 20 request per minute. This limit is shared with GET :/analytics/conversations
| id required | string The id of the conversation to retrieve |
{- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "conversational_analytics",
- "attributes": {
- "contact_date": "2019-08-24T14:15:22Z",
- "3rd_party_reference": "ABC123",
- "source_id": 123456,
- "channel": "Salesforce",
- "agent_id": "string",
- "agent_name": "John Smith",
- "handle_time": 306,
- "response_count": 12,
- "has_audio": true,
- "silence_duration": 62,
- "overtalk_instances": 2,
- "xnps_outcome": "string",
- "xrepeat_result": "string",
- "xrepeat_reasoning": "string",
- "xvulnerability_result": "string",
- "xvulnerability_reasoning": "string",
- "xresolution_result": "string",
- "xresolution_reasoning": "string",
- "xcsat_result": "string",
- "xcsat_reasoning": "string",
- "xces_result": "string",
- "xces_reasoning": "string",
- "xces_driver_result": "string",
- "xces_driver_reasoning": "string",
- "rfc_primary_reason": "string",
- "rfc_primary_reasoning": "string",
- "rfc_secondary_reason": "string",
- "rfc_secondary_reasoning": "string",
- "rfc_primary_intent": "string",
- "rfc_primary_intent_reasoning": "string",
- "rfc_secondary_intent": "string",
- "rfc_secondary_intent_reasoning": "string",
- "sentiment": {
- "sentiment_score": 0,
- "agent_sentiment_label": "string",
- "agent_sentiment_score": 0,
- "customer_sentiment_label": "string",
- "customer_sentiment_score": 0
}, - "ai": {
- "ai_opening": "string",
- "ai_requirements": "string",
- "ai_discussion": "string",
- "ai_outcome": "string"
}, - "topics": "{'Topic Name': 'Pass', 'Another Topic': 'Fail', 'Final Topic': ''}",
- "metadata": "{'Date': '01/01/2025', 'Hold Time': 10, 'Ivr Time': 17, 'Park Time': 0, 'Talk Time': 453}",
- "analytics_state": "audio-too-short"
}
}Fetch the transcript for a specific conversation. Returns all utterances with speaker labels. This endpoint is rate limited to 20 requests per minute. This limit is shared with other analytics/conversations endpoints.
| id required | string The id of the conversation to retrieve the transcript for |
{- "data": {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "transcript",
- "attributes": {
- "transcript": [
- {
- "speaker": "agent",
- "utterance": "Thanks for calling today, how can I help?"
}, - {
- "speaker": "customer",
- "utterance": "I'm calling about an issue with my recent order."
}, - {
- "speaker": "agent",
- "utterance": "I'd be happy to help with that. Can you provide your order number?"
}
]
}, - "links": {
- "self": "/api/v1/analytics/conversations/43aea3f1-00aa-4b9f-8dc4-9f843788bf41/transcript"
}
}
}Manage the documents and tags that ground Context Engine, so AutoQA and GenAI line items assess against your current policies rather than a snapshot someone uploaded by hand. Requires the Context Engine feature.
Fetch the documents in your Knowledge Vault.
Each document carries its line_items — the GenAI line item topics it is attached to — so a
sync job can tell in one request whether a document is safe to delete before attempting it.
Requires the Context Engine feature. Supports pagination and defaults to the first page, 50 per page, most recently updated first.
| filter[title] | string Example: filter[title]=complaints Partial, case-insensitive match on the document title. |
| filter[tag_id] | string <uuid> Only documents carrying this tag. Repeatable, or comma-separated; matches any of them. |
| filter[tag_name] | string Example: filter[tag_name]=Compliance Only documents carrying this tag name. Repeatable, or comma-separated; matches any of them. |
| filter[indexing_status] | string Enum: "pending" "processing" "complete" "failed" Restrict to one or more indexing states. Comma-separated. |
| filter[linked_to_line_items] | boolean
|
| filter[created_from] | string <date-time> Example: filter[created_from]=2026-01-01T00:00:00Z Documents created on or after this point. Accepts |
| filter[created_to] | string <date-time> Documents created on or before this point. Accepts |
| filter[updated_from] | string <date-time> Documents updated on or after this point. Same date handling as |
| filter[updated_to] | string <date-time> Documents updated on or before this point. Same date handling as |
| sort | string Example: sort=title Sort order. Prefix with |
| page[number] | number Example: page[number]=1 When paginated, the page number to request. Defaults to 1. |
| filter[sync_state] | string Enum: "synced" "stale" "failed" "removed_at_source" "orphaned" Example: filter[sync_state]=stale One or more sync states, comma-separated: An unrecognised state is rejected with |
| filter[connection] | string Example: filter[connection]=none,7c9e6679-7425-40de-944b-e07fc1f90ae7 One or more connection ids, comma-separated — the documents belonging to those sources.
A value that is neither |
| page[size] | number Example: page[size]=50 Documents per page. Defaults to 50, maximum 250. |
{- "meta": {
- "pagination": {
- "total": 240,
- "pages": 5,
- "size": 50,
- "number": 1
}
}, - "data": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "knowledge-vault-documents",
- "attributes": {
- "title": "Complaints procedure",
- "description": "How to handle an inbound complaint",
- "file_name": "complaints-procedure-v4.pdf",
- "file_size": 284713,
- "mime_type": "application/pdf",
- "indexing_status": "complete",
- "tags": [
- {
- "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
- "name": "Compliance"
}
], - "line_items": [
- {
- "id": "1a2b3c4d-0000-4b9f-8dc4-9f843788bf41",
- "name": "Vulnerable customer handling"
}
], - "created_at": "2026-08-01T09:15:00+00:00",
- "updated_at": "2026-08-04T11:42:13+00:00",
- "source": {
- "connection": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "confluence",
- "name": "Ops handbook"
}, - "external_id": "393217",
- "external_version": "8",
- "content_hash": "string",
- "sync_state": "synced",
- "last_synced_at": "2019-08-24T14:15:22Z"
}
}
}
]
}Upload a single document to the Knowledge Vault as multipart/form-data.
Accepted formats are PDF, DOC, DOCX, TXT, CSV and HTML (.html or .htm), up to 10 MB per
file, and the file must not be empty. Titles must be
unique within the account.
To attach the document to a source — closing the loop on a create from
PUT /documents — pass connection and external_id together, optionally with
external_version, external_url and content_hash. Omit them for an ordinary upload and
nothing changes.
The document is queued for parsing and embedding on success, so the response returns
indexing_status: pending. Poll the document, or list with
filter[indexing_status]=failed, to confirm it became searchable.
Rate limited to 20 requests per minute per API key, separately from the standard tier, because each upload costs a file write, a parse and an embedding run.
| file required | string <binary> The document itself. PDF, DOC, DOCX, TXT, CSV or HTML ( |
| title required | string <= 255 characters The document's name in the Knowledge Vault. Must be unique within the account. |
| description | string <= 255 characters Optional free-text description. |
| tags | Array of strings Tag IDs or names. A name that does not already exist is created; a name that does exist resolves to the existing tag rather than duplicating it, matched case-insensitively. A value in UUID form is always read as an ID: if no tag in your account has it the request is rejected, rather than a tag being created under the ID as its name. |
| connection | string <uuid> The source this document belongs to, from the |
| external_id | string The document's stable id in your system. This is what the manifest matches on. |
| external_url | string <uri> Deep link back to the document at the source. |
| external_version | string Your version identifier for the content being uploaded. |
| content_hash | string^[a-f0-9]{64}$ Hex SHA-256 of the text you extracted. Recording it here is what marks the document in sync — without it the next manifest asks for the same content again. |
{- "data": {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "knowledge-vault-documents",
- "attributes": {
- "title": "Complaints procedure",
- "description": "How to handle an inbound complaint",
- "file_name": "complaints-procedure-v4.pdf",
- "file_size": 284713,
- "mime_type": "application/pdf",
- "indexing_status": "complete",
- "tags": [
- {
- "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
- "name": "Compliance"
}
], - "line_items": [
- {
- "id": "1a2b3c4d-0000-4b9f-8dc4-9f843788bf41",
- "name": "Vulnerable customer handling"
}
], - "created_at": "2026-08-01T09:15:00+00:00",
- "updated_at": "2026-08-04T11:42:13+00:00",
- "source": {
- "connection": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "confluence",
- "name": "Ops handbook"
}, - "external_id": "393217",
- "external_version": "8",
- "content_hash": "string",
- "sync_state": "synced",
- "last_synced_at": "2019-08-24T14:15:22Z"
}
}
}
}Reconcile one source's documents against a manifest of its desired end state, and get back a plan of what changed.
The manifest carries no file content, by design. A request body is capped well below the
size of a real knowledge base, and a multipart request has an undocumented ceiling on how many
files it may carry — one it enforces by silently discarding the rest. So this endpoint takes
ids and content hashes, works out what needs to happen, and applies the half it can:
reconciling metadata, and removing what the source no longer has. Content for the create and
update buckets is then sent through POST /documents and PUT /documents/{id}/file, which
already validate formats and enforce the size limit.
That split is what makes the endpoint safe to point at a live account. The destructive half —
the part where a mistake costs you documents — is centralised here, behind dry_run.
Everything is scoped to source. "Documents not in the manifest are deleted" applies only
to documents belonging to that source. Documents uploaded by hand, and documents belonging to
another source, are never touched.
Matching is on external_id, never the title. A page renamed at the source updates the
document it already has, rather than creating a second one beside it.
Always returns 207, because the answer is per item: a manifest can legitimately create some
documents, leave others alone, and be blocked on one.
| mode required | string Value: "replace" Only |
| dry_run | boolean Default: false Return the plan without applying any of it. Nothing is written — not the documents, not even the connection itself, if it does not exist yet. |
| on_missing | string Default: "delete" Enum: "delete" "archive" What to do with a document this source holds that the manifest does not mention.
|
required | object The source this manifest describes. Resolved by |
required | Array of objects <= 5000 items The desired end state for this source. An empty array is valid and means the source now holds
nothing — the most destructive request this endpoint accepts, and the reason Note that no file content is carried here. See the endpoint description. |
{- "mode": "replace",
- "dry_run": false,
- "on_missing": "delete",
- "source": {
- "type": "confluence",
- "name": "Ops handbook",
- "external_account_id": "11111111-2222-3333-4444-555555555555"
}, - "documents": [
- {
- "external_id": "393217",
- "title": "Ops / Complaints procedure",
- "content_hash": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb",
- "external_version": "7",
- "description": "string",
- "tags": [
- "string"
]
}
]
}{- "data": {
- "connection": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "exists": true,
- "source_type": "confluence",
- "name": "Ops handbook",
- "external_account_id": "string"
}, - "plan": {
- "create": [
- {
- "external_id": "393217",
- "title": "Ops / Complaints procedure",
- "action": "upload_required"
}
], - "update": [
- {
- "external_id": "393217",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "from_version": "7",
- "to_version": "8",
- "action": "file_replacement_required"
}
], - "unchanged": [
- {
- "external_id": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string"
}
], - "deleted": [
- {
- "external_id": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "disposition": "delete",
- "applied": true
}
], - "skipped": [
- {
- "external_id": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "error": {
- "errors": [
- {
- "status": "409",
- "code": "document_linked_to_line_item",
- "title": "Conflict.",
- "detail": "This document cannot be deleted because it is attached to one or more line item topics. Remove the attachment before deleting.",
- "meta": {
- "line_items": [
- null
]
}
}
]
}
}
]
}, - "warnings": [
- {
- "external_id": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "code": "title_conflict",
- "detail": "The source renamed this document to \"Refunds policy\", but that title is already in use. It kept the title \"Ops / Refunds\"."
}
], - "error": {
- "code": "sync_partially_applied",
- "detail": "string"
}
}, - "meta": {
- "dry_run": false,
- "mode": "replace",
- "on_missing": "delete",
- "requires_follow_up": true,
- "aborted": false,
- "warnings": 0,
- "create": 3,
- "update": 1,
- "unchanged": 112,
- "deleted": 2,
- "skipped": 1
}
}Fetch a single Knowledge Vault document, including its tags and the line item topics it is attached to. Never returns the file's contents.
| id required | string <uuid> The UUID of the document. |
{- "data": {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "knowledge-vault-documents",
- "attributes": {
- "title": "Complaints procedure",
- "description": "How to handle an inbound complaint",
- "file_name": "complaints-procedure-v4.pdf",
- "file_size": 284713,
- "mime_type": "application/pdf",
- "indexing_status": "complete",
- "tags": [
- {
- "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
- "name": "Compliance"
}
], - "line_items": [
- {
- "id": "1a2b3c4d-0000-4b9f-8dc4-9f843788bf41",
- "name": "Vulnerable customer handling"
}
], - "created_at": "2026-08-01T09:15:00+00:00",
- "updated_at": "2026-08-04T11:42:13+00:00",
- "source": {
- "connection": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "confluence",
- "name": "Ops handbook"
}, - "external_id": "393217",
- "external_version": "8",
- "content_hash": "string",
- "sync_state": "synced",
- "last_synced_at": "2019-08-24T14:15:22Z"
}
}
}
}Update a document's title, description or tags. The file itself is replaced through
PUT /context-engine/knowledge-vault/documents/{id}/file, so a title edit can never change the
content by accident.
Line item attachments are unaffected.
| id required | string <uuid> The UUID of the document. |
| title | string <= 255 characters Must be unique within the account. |
| description | string or null <= 255 characters |
| tags | Array of strings Replaces the document's entire tag set. Omit the field to leave tags untouched; pass an empty array to clear them. Names that do not exist are created. |
{- "title": "Complaints procedure v4",
- "description": "string",
- "tags": [
- "Compliance",
- "GDPR"
]
}{- "data": {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "knowledge-vault-documents",
- "attributes": {
- "title": "Complaints procedure",
- "description": "How to handle an inbound complaint",
- "file_name": "complaints-procedure-v4.pdf",
- "file_size": 284713,
- "mime_type": "application/pdf",
- "indexing_status": "complete",
- "tags": [
- {
- "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
- "name": "Compliance"
}
], - "line_items": [
- {
- "id": "1a2b3c4d-0000-4b9f-8dc4-9f843788bf41",
- "name": "Vulnerable customer handling"
}
], - "created_at": "2026-08-01T09:15:00+00:00",
- "updated_at": "2026-08-04T11:42:13+00:00",
- "source": {
- "connection": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "confluence",
- "name": "Ops handbook"
}, - "external_id": "393217",
- "external_version": "8",
- "content_hash": "string",
- "sync_state": "synced",
- "last_synced_at": "2019-08-24T14:15:22Z"
}
}
}
}Delete a document, its embeddings and its tag associations.
A document attached to one or more GenAI line item topics cannot be deleted: deleting it
would strip those line items of the content they assess against. The request is refused with
409 and the blocking line items are listed under errors[0].meta.line_items. Detach the
document in the application first, then retry.
Rate limited to 20 requests per minute per API key, on the same meter as the other write
endpoints: tearing down a document's embeddings costs as much per document as bulk-delete
does. A per-item delete loop will hit this - use
POST /context-engine/knowledge-vault/documents/bulk-delete for more than a handful.
| id required | string <uuid> The UUID of the document. |
{- "errors": [
- {
- "status": "400",
- "title": "Bad request",
- "detail": "Username is a required field"
}
]
}Replace the file behind an existing document as multipart/form-data, keeping the document ID,
title, description, tags and every line item attachment intact. This is how you keep a synced
knowledge base current without breaking the links your scorecards depend on.
The previous embeddings are invalidated, the document is queued for re-indexing, and
indexing_status returns to pending. Pass content_hash (and optionally
external_version) to record which source version this file is — that is what marks the
document back in sync after a manifest reported it as an update. Format and size validation is identical to upload, and
an empty file is refused before anything is replaced - the old file and its embeddings are only
torn down once a valid replacement has been accepted.
Rate limited to 20 requests per minute per API key.
| id required | string <uuid> The UUID of the document. |
| file required | string <binary> The replacement document. PDF, DOC, DOCX, TXT, CSV or HTML ( |
| external_version | string The source version this file is. Optional; recorded against the document. |
| content_hash | string^[a-f0-9]{64}$ Hex SHA-256 of the text in this file. Sending it moves the document's |
{- "data": {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "knowledge-vault-documents",
- "attributes": {
- "title": "Complaints procedure",
- "description": "How to handle an inbound complaint",
- "file_name": "complaints-procedure-v4.pdf",
- "file_size": 284713,
- "mime_type": "application/pdf",
- "indexing_status": "complete",
- "tags": [
- {
- "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
- "name": "Compliance"
}
], - "line_items": [
- {
- "id": "1a2b3c4d-0000-4b9f-8dc4-9f843788bf41",
- "name": "Vulnerable customer handling"
}
], - "created_at": "2026-08-01T09:15:00+00:00",
- "updated_at": "2026-08-04T11:42:13+00:00",
- "source": {
- "connection": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "confluence",
- "name": "Ops handbook"
}, - "external_id": "393217",
- "external_version": "8",
- "content_hash": "string",
- "sync_state": "synced",
- "last_synced_at": "2019-08-24T14:15:22Z"
}
}
}
}Delete up to 200 documents in one request. Always returns 207 with a result per document, so a
single blocked document does not stall the rest: documents attached to a line item topic come
back as 409 while everything else is deleted.
Rate limited to 20 requests per minute per API key.
| ids required | Array of strings <uuid> <= 200 items [ items <uuid > ] Document IDs to delete. Maximum 200 per request. |
{- "ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "status": 204,
- "error": { }
}
], - "meta": {
- "deleted": 18,
- "blocked": 2,
- "failed": 0
}
}Add or remove one or more tags across up to 200 documents in a single request — the API
equivalent of the application's multi-select Apply Tags, plus the removal it has no button
for. Returns 207 with a result per document.
Rate limited to 20 requests per minute per API key.
| action required | string Enum: "apply" "remove" Whether to add the tags to, or remove them from, the given documents. |
| document_ids required | Array of strings <uuid> <= 200 items [ items <uuid > ] Documents to change. Maximum 200 per request. |
| tags required | Array of strings Tag IDs or names. On |
{- "action": "apply",
- "document_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "tags": [
- "Compliance",
- "GDPR"
]
}{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "status": 200,
- "document": {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "knowledge-vault-documents",
- "attributes": {
- "title": "Complaints procedure",
- "description": "How to handle an inbound complaint",
- "file_name": "complaints-procedure-v4.pdf",
- "file_size": 284713,
- "mime_type": "application/pdf",
- "indexing_status": "complete",
- "tags": [
- {
- "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
- "name": "Compliance"
}
], - "line_items": [
- {
- "id": "1a2b3c4d-0000-4b9f-8dc4-9f843788bf41",
- "name": "Vulnerable customer handling"
}
], - "created_at": "2026-08-01T09:15:00+00:00",
- "updated_at": "2026-08-04T11:42:13+00:00",
- "source": {
- "connection": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "confluence",
- "name": "Ops handbook"
}, - "external_id": "393217",
- "external_version": "8",
- "content_hash": "string",
- "sync_state": "synced",
- "last_synced_at": "2019-08-24T14:15:22Z"
}
}
}, - "error": { }
}
]
}Fetch the Knowledge Vault tags in your account, each with the number of documents carrying it and the line item topics reachable through those documents — matching the Tags table in the application.
| page[number] | number Example: page[number]=1 When paginated, the page number to request. Defaults to 1. |
| page[size] | number Example: page[size]=50 Tags per page. Defaults to 50, maximum 250. |
{- "meta": {
- "pagination": {
- "total": 240,
- "pages": 5,
- "size": 50,
- "number": 1
}
}, - "data": [
- {
- "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
- "type": "knowledge-vault-tags",
- "attributes": {
- "name": "Compliance",
- "document_count": 12,
- "line_items": [
- {
- "id": "1a2b3c4d-0000-4b9f-8dc4-9f843788bf41",
- "name": "Vulnerable customer handling"
}
], - "created_at": "2026-08-01T09:15:00+00:00",
- "updated_at": "2026-08-01T09:15:00+00:00"
}
}
]
}Create a standalone tag. Tag names are unique within the account. Tags can also be created implicitly by naming them on upload.
| name required | string <= 255 characters |
{- "name": "Compliance"
}{- "data": {
- "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
- "type": "knowledge-vault-tags",
- "attributes": {
- "name": "Compliance",
- "document_count": 12,
- "line_items": [
- {
- "id": "1a2b3c4d-0000-4b9f-8dc4-9f843788bf41",
- "name": "Vulnerable customer handling"
}
], - "created_at": "2026-08-01T09:15:00+00:00",
- "updated_at": "2026-08-01T09:15:00+00:00"
}
}
}Rename an existing tag. Every document carrying it keeps the tag.
| id required | string <uuid> The UUID of the tag. |
| name required | string <= 255 characters |
{- "name": "Compliance"
}{- "data": {
- "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
- "type": "knowledge-vault-tags",
- "attributes": {
- "name": "Compliance",
- "document_count": 12,
- "line_items": [
- {
- "id": "1a2b3c4d-0000-4b9f-8dc4-9f843788bf41",
- "name": "Vulnerable customer handling"
}
], - "created_at": "2026-08-01T09:15:00+00:00",
- "updated_at": "2026-08-01T09:15:00+00:00"
}
}
}Delete a tag and detach it from every document carrying it. The documents themselves, their files and their embeddings are untouched.
Unlike documents, a tag delete is never blocked by line items. A tag is never itself attached to
a line item topic — the line_items on a tag are reached through its documents — so removing it
takes no content away from any line item.
| id required | string <uuid> The UUID of the tag. |
{- "errors": [
- {
- "status": "400",
- "title": "Bad request",
- "detail": "Username is a required field"
}
]
}Fetch a list of Work Queue Templates in this org.
{- "data": [
- {
- "id": "8cba1b19-4cbb-4247-8ed4-6f94753c56d6",
- "type": "template",
- "attributes": {
- "name": "My Work Queue Template",
- "status": "active",
- "cycle_type": "daily",
- "cycle_value": 1,
- "cycle_month_day": 15,
- "created_at": "2019-08-24T14:15:22Z"
}, - "relationships": {
- "agent": {
- "data": [
- {
- "id": "c98c1599-7f9d-4206-92f5-85e5dd2576e8",
- "type": "users"
}, - {
- "id": "2c63916a-1591-48a8-8584-9efd30dc3178",
- "type": "users"
}
]
}
}
}
]
}Fetch a specific Work Queue Template by ID
| id required | string The ID of the Work Queue Template to retrieve |
{- "data": {
- "id": "8cba1b19-4cbb-4247-8ed4-6f94753c56d6",
- "type": "template",
- "attributes": {
- "name": "My Work Queue Template",
- "status": "active",
- "cycle_type": "daily",
- "cycle_value": 1,
- "cycle_month_day": 15,
- "created_at": "2019-08-24T14:15:22Z"
}, - "relationships": {
- "agent": {
- "data": [
- {
- "id": "c98c1599-7f9d-4206-92f5-85e5dd2576e8",
- "type": "users"
}, - {
- "id": "2c63916a-1591-48a8-8584-9efd30dc3178",
- "type": "users"
}
]
}
}
}
}Fetch a specific Work Queue Template by the given ID
| id required | string The ID of the Work Queue Template to retrieve |
{- "data": [
- {
- "type": "users",
- "id": "154d0f4a-d274-4660-87be-077443297638"
}
]
}Sync Agents assigned to the given Work Queue Template. Agents assigned to the Work Queue Template will be updated to match the given data, removing any assigned agents if not included in the data.
| id required | string The ID of the Work Queue Template to retrieve |
{- "data": [
- {
- "type": "users",
- "id": "154d0f4a-d274-4660-87be-077443297638"
}
]
}Add agents assigned to the Work Queue Template
| id required | string The ID of the Work Queue Template to retrieve |
{- "data": [
- {
- "type": "users",
- "id": "154d0f4a-d274-4660-87be-077443297638"
}
]
}Delete Agents assigned to the given Work Queue Template
| id required | string The ID of the Work Queue Template to retrieve |
{- "data": [
- {
- "type": "users",
- "id": "154d0f4a-d274-4660-87be-077443297638"
}
]
}Fetch a paginated list of actions with optional filtering, sorting, and includes.
Use include to return related resources such as assignee, creator, evaluation, or messages.
Rate limiting: Maximum 100 requests per minute, 10,000 requests per day per API key.
| filter[status] | string Enum: "open" "completed" Example: filter[status]=open Filter actions by status. |
| filter[created_at;between] | string <date-time> Example: filter[created_at;between]=2026-01-01T00:00:00.000Z,2026-01-31T23:59:59.000Z Filter by creation date. Comma-separated start and end date in UTC format. |
| filter[due_at;between] | string <date-time> Example: filter[due_at;between]=2026-01-01T00:00:00.000Z,2026-01-31T23:59:59.000Z Filter by due date. Comma-separated start and end date in UTC format. |
| filter[assignee] | string <uuid> Filter by assignee user UUID. |
| filter[creator] | string <uuid> Filter by creator user UUID. |
| filter[origination] | string Example: filter[origination]=evaluation Filter by origination type (e.g. impromptu, evaluation). |
| sort | string Enum: "due_at" "-due_at" "created_at" "-created_at" "status" "-status" Example: sort=-due_at Sort results. Use |
| page[number] | integer Example: page[number]=1 Page number (default 1). |
| page[size] | integer <= 100 Example: page[size]=50 Results per page (default 50, max 100). |
| include | string Example: include=assignee,creator,messages Comma-separated list of related resources to include. Available: |
{- "meta": {
- "pagination": {
- "total": 0,
- "pages": 0,
- "size": 0,
- "number": 0
}
}, - "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "actions",
- "attributes": {
- "detail": "string",
- "elearning_url": "string",
- "status": "open",
- "origination": "string",
- "due_at": "2019-08-24T14:15:22Z",
- "completed_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "relationships": {
- "creator": {
- "data": {
- "type": "users",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}, - "assignee": {
- "data": {
- "type": "users",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}, - "evaluation": {
- "data": {
- "type": "evaluations",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}, - "messages": {
- "data": [
- {
- "type": "action-messages",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
]
}
}
}
], - "included": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "users",
- "attributes": {
- "forename": "John",
- "surname": "Smith",
- "email": "john.smith@example.com",
- "username": "john.smith@example.com",
- "start_date": "2019-08-24T14:15:22Z",
- "active": true,
- "allow_login": true,
- "reporting_access_id": "ec1cf0c7-d90e-4988-b6f2-f9624eb4a5b5",
- "third_party_id": "someOtherId"
}, - "relationships": {
- "agent-team": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "groups"
}
}, - "roles": {
- "data": [
- {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "roles"
}
]
}
}
}
]
}Create a new action. The authenticated user is set as the creator. An assignee is required. Optionally link an evaluation.
Rate limiting: Maximum 100 requests per minute, 10,000 requests per day per API key.
The action to create
object |
{- "data": {
- "type": "actions",
- "attributes": {
- "detail": "string",
- "elearning_url": "string",
- "due_at": "2019-08-24"
}, - "relationships": {
- "creator": {
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}, - "assignee": {
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}, - "evaluation": {
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}
}
}
}{- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "actions",
- "attributes": {
- "detail": "string",
- "elearning_url": "string",
- "status": "open",
- "origination": "string",
- "due_at": "2019-08-24T14:15:22Z",
- "completed_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "relationships": {
- "creator": {
- "data": {
- "type": "users",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}, - "assignee": {
- "data": {
- "type": "users",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}, - "evaluation": {
- "data": {
- "type": "evaluations",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}, - "messages": {
- "data": [
- {
- "type": "action-messages",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
]
}
}
}, - "included": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "users",
- "attributes": {
- "forename": "John",
- "surname": "Smith",
- "email": "john.smith@example.com",
- "username": "john.smith@example.com",
- "start_date": "2019-08-24T14:15:22Z",
- "active": true,
- "allow_login": true,
- "reporting_access_id": "ec1cf0c7-d90e-4988-b6f2-f9624eb4a5b5",
- "third_party_id": "someOtherId"
}, - "relationships": {
- "agent-team": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "groups"
}
}, - "roles": {
- "data": [
- {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "roles"
}
]
}
}
}
]
}Retrieve a single action by its UUID. Use include to embed related resources.
Rate limiting: Maximum 100 requests per minute, 10,000 requests per day per API key.
| id required | string <uuid> The UUID of the action to retrieve |
| include | string Example: include=assignee,creator,messages Comma-separated list of related resources to include. Available: |
{- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "actions",
- "attributes": {
- "detail": "string",
- "elearning_url": "string",
- "status": "open",
- "origination": "string",
- "due_at": "2019-08-24T14:15:22Z",
- "completed_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "relationships": {
- "creator": {
- "data": {
- "type": "users",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}, - "assignee": {
- "data": {
- "type": "users",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}, - "evaluation": {
- "data": {
- "type": "evaluations",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}, - "messages": {
- "data": [
- {
- "type": "action-messages",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
]
}
}
}, - "included": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "users",
- "attributes": {
- "forename": "John",
- "surname": "Smith",
- "email": "john.smith@example.com",
- "username": "john.smith@example.com",
- "start_date": "2019-08-24T14:15:22Z",
- "active": true,
- "allow_login": true,
- "reporting_access_id": "ec1cf0c7-d90e-4988-b6f2-f9624eb4a5b5",
- "third_party_id": "someOtherId"
}, - "relationships": {
- "agent-team": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "groups"
}
}, - "roles": {
- "data": [
- {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "roles"
}
]
}
}
}
]
}Update an action's status to completed. Once completed, an action cannot be reopened (returns 422).
Rate limiting: Maximum 100 requests per minute, 10,000 requests per day per API key.
| id required | string <uuid> The UUID of the action to update |
Updated action details
object |
{- "data": {
- "type": "actions",
- "attributes": {
- "status": "completed"
}
}
}{- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "actions",
- "attributes": {
- "detail": "string",
- "elearning_url": "string",
- "status": "open",
- "origination": "string",
- "due_at": "2019-08-24T14:15:22Z",
- "completed_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "relationships": {
- "creator": {
- "data": {
- "type": "users",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}, - "assignee": {
- "data": {
- "type": "users",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}, - "evaluation": {
- "data": {
- "type": "evaluations",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}, - "messages": {
- "data": [
- {
- "type": "action-messages",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
]
}
}
}, - "included": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "users",
- "attributes": {
- "forename": "John",
- "surname": "Smith",
- "email": "john.smith@example.com",
- "username": "john.smith@example.com",
- "start_date": "2019-08-24T14:15:22Z",
- "active": true,
- "allow_login": true,
- "reporting_access_id": "ec1cf0c7-d90e-4988-b6f2-f9624eb4a5b5",
- "third_party_id": "someOtherId"
}, - "relationships": {
- "agent-team": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "groups"
}
}, - "roles": {
- "data": [
- {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "roles"
}
]
}
}
}
]
}Delete the specified action.
Rate limiting: Maximum 100 requests per minute, 10,000 requests per day per API key.
| id required | string <uuid> The UUID of the action to delete |
{- "data": null
}Retrieve all messages for a specific action, ordered chronologically.
Rate limiting: Maximum 100 requests per minute, 10,000 requests per day per API key.
| id required | string <uuid> The UUID of the action |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "action-messages",
- "attributes": {
- "body": "string",
- "recipient_present": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "relationships": {
- "author": {
- "data": {
- "type": "users",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}, - "action": {
- "data": {
- "type": "actions",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}
}
}
], - "included": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "users",
- "attributes": {
- "forename": "John",
- "surname": "Smith",
- "email": "john.smith@example.com",
- "username": "john.smith@example.com",
- "start_date": "2019-08-24T14:15:22Z",
- "active": true,
- "allow_login": true,
- "reporting_access_id": "ec1cf0c7-d90e-4988-b6f2-f9624eb4a5b5",
- "third_party_id": "someOtherId"
}, - "relationships": {
- "agent-team": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "groups"
}
}, - "roles": {
- "data": [
- {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "roles"
}
]
}
}
}
]
}Create a new message on an action. The authenticated user is set as the author. The action's assignee is automatically set as the recipient.
Rate limiting: Maximum 100 requests per minute, 10,000 requests per day per API key.
| id required | string <uuid> The UUID of the action |
The message to create
object |
{- "data": {
- "type": "action-messages",
- "attributes": {
- "body": "string",
- "recipient_present": true
}, - "relationships": {
- "author": {
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}
}
}
}{- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "action-messages",
- "attributes": {
- "body": "string",
- "recipient_present": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "relationships": {
- "author": {
- "data": {
- "type": "users",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}, - "action": {
- "data": {
- "type": "actions",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}
}
}, - "included": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "users",
- "attributes": {
- "forename": "John",
- "surname": "Smith",
- "email": "john.smith@example.com",
- "username": "john.smith@example.com",
- "start_date": "2019-08-24T14:15:22Z",
- "active": true,
- "allow_login": true,
- "reporting_access_id": "ec1cf0c7-d90e-4988-b6f2-f9624eb4a5b5",
- "third_party_id": "someOtherId"
}, - "relationships": {
- "agent-team": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "groups"
}
}, - "roles": {
- "data": [
- {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "roles"
}
]
}
}
}
]
}Retrieve all messages for a specific action, ordered chronologically.
Rate limiting: Maximum 100 requests per minute, 10,000 requests per day per API key.
| id required | string <uuid> The UUID of the action |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "action-messages",
- "attributes": {
- "body": "string",
- "recipient_present": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "relationships": {
- "author": {
- "data": {
- "type": "users",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}, - "action": {
- "data": {
- "type": "actions",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}
}
}
], - "included": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "users",
- "attributes": {
- "forename": "John",
- "surname": "Smith",
- "email": "john.smith@example.com",
- "username": "john.smith@example.com",
- "start_date": "2019-08-24T14:15:22Z",
- "active": true,
- "allow_login": true,
- "reporting_access_id": "ec1cf0c7-d90e-4988-b6f2-f9624eb4a5b5",
- "third_party_id": "someOtherId"
}, - "relationships": {
- "agent-team": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "groups"
}
}, - "roles": {
- "data": [
- {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "roles"
}
]
}
}
}
]
}Create a new message on an action. The authenticated user is set as the author. The action's assignee is automatically set as the recipient.
Rate limiting: Maximum 100 requests per minute, 10,000 requests per day per API key.
| id required | string <uuid> The UUID of the action |
The message to create
object |
{- "data": {
- "type": "action-messages",
- "attributes": {
- "body": "string",
- "recipient_present": true
}, - "relationships": {
- "author": {
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}
}
}
}{- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "action-messages",
- "attributes": {
- "body": "string",
- "recipient_present": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "relationships": {
- "author": {
- "data": {
- "type": "users",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}, - "action": {
- "data": {
- "type": "actions",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}
}
}, - "included": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "users",
- "attributes": {
- "forename": "John",
- "surname": "Smith",
- "email": "john.smith@example.com",
- "username": "john.smith@example.com",
- "start_date": "2019-08-24T14:15:22Z",
- "active": true,
- "allow_login": true,
- "reporting_access_id": "ec1cf0c7-d90e-4988-b6f2-f9624eb4a5b5",
- "third_party_id": "someOtherId"
}, - "relationships": {
- "agent-team": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "groups"
}
}, - "roles": {
- "data": [
- {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "roles"
}
]
}
}
}
]
}Update a message's body and/or recipient_present status.
Rate limiting: Maximum 100 requests per minute, 10,000 requests per day per API key.
| id required | string <uuid> The UUID of the message to update |
Updated message details
object |
{- "data": {
- "type": "action-messages",
- "attributes": {
- "body": "string",
- "recipient_present": true
}
}
}{- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "action-messages",
- "attributes": {
- "body": "string",
- "recipient_present": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "relationships": {
- "author": {
- "data": {
- "type": "users",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}, - "action": {
- "data": {
- "type": "actions",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}
}
}, - "included": [
- {
- "id": "43aea3f1-00aa-4b9f-8dc4-9f843788bf41",
- "type": "users",
- "attributes": {
- "forename": "John",
- "surname": "Smith",
- "email": "john.smith@example.com",
- "username": "john.smith@example.com",
- "start_date": "2019-08-24T14:15:22Z",
- "active": true,
- "allow_login": true,
- "reporting_access_id": "ec1cf0c7-d90e-4988-b6f2-f9624eb4a5b5",
- "third_party_id": "someOtherId"
}, - "relationships": {
- "agent-team": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "groups"
}
}, - "roles": {
- "data": [
- {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "roles"
}
]
}
}
}
]
}Delete the specified message.
Rate limiting: Maximum 100 requests per minute, 10,000 requests per day per API key.
| id required | string <uuid> The UUID of the message to delete |
{- "data": null
}Fetch a list of 121 Topics specific to the API Key's contract.
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "one-to-one-topics",
- "attributes": {
- "name": "string",
- "active": true,
- "colour": "string"
}
}
]
}Fetch a list of your 121s and associated details.
The request can be filtered by date and sorted by published_at, date_published, created_at, updated_at, reference, score, agent_name, evaluator_name.
The endpoint also supports pagination, requests default to the first page.
| filter[created_at;between] | string <date-time> Example: filter[created_at;between]=2023-05-01T00:00:00.000Z, 2023-08-01T00:00:00.000Z A date range to filter 121s on their created_at date. Consists of a comma-separated start and end date in UTC format. |
| filter[scheduled_date;between] | string <date-time> Example: filter[scheduled_date;between]=2023-05-01T00:00:00.000Z, 2023-08-01T00:00:00.000Z A date range to filter 121s on their scheduled_date. Consists of a comma-separated start and end date in UTC format. |
| filter[completed_at;between] | string <date-time> Example: filter[completed_at;between]=2023-05-01T00:00:00.000Z, 2023-08-01T00:00:00.000Z A date range to filter 121s on their completed_at date. Consists of a comma-separated start and end date in UTC format. |
| filter[participant] | string Example: filter[participant]=99abbc05-9535-4e20-84be-0d4e55bcd407 Unique user ID to filter 121 participants by |
| filter[facilitator] | string Example: filter[facilitator]=99abbc05-9535-4e20-84be-0d4e55bcd407 Unique user ID to filter 121 facilitators by |
| sort | string Enum: "scheduled_date" "started_at" "completed_at" "topic" "participant" Example: sort=-scheduled_date Sort the returned 121s. Adding a minus operator to the start of field you wish to sort on will return results descending order. |
| page[number] | number Example: page[number]=1 When paginated, the page number that you would like to request. Defaults to 1. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "one-to-ones",
- "attributes": {
- "location": "string",
- "reference": "string",
- "started_at": null,
- "created_at": null,
- "scheduled_date": null,
- "completed_at": null,
- "description": "string",
- "prep_notes": "string",
- "acknowledgement_time": null,
- "facilitator_comments": "string",
- "participant_comments": "string",
- "online_meeting": true,
- "status": "string",
- "private": true,
- "participant_can_view_before": true,
- "duration_hours": 0,
- "duration_minutes": 0,
- "end_datetime_from_duration": null,
- "total_duration_minutes": 0,
- "third_party_id": 0,
- "date": null
}, - "relationships": {
- "facilitator": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "users"
}
}, - "participant": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "users"
}
}, - "topic": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "one_to_one_topics"
}
}, - "actions": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "one_to_one_actions"
}
}
}
}
]
}Create a new 121
Create a new 121
object (BaseOneToOneParameters) |
{- "data": {
- "type": "one-to-ones",
- "attributes": {
- "duration_hours": 0,
- "duration_minutes": 0,
- "duration_location": "string",
- "meeting_config": {
- "meet_now": true
}, - "participant_can_view_before": true,
- "private": true,
- "started_at": null,
- "status": "completed_acknowledged",
- "timezone": "Europe/London",
- "type": "face-to-face"
}, - "relationships": {
- "facilitator": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "users"
}
}, - "participant": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "users"
}
}, - "topic": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "one_to_one_topics"
}
}, - "actions": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "one_to_one_actions"
}
}
}
}
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "one-to-ones",
- "attributes": {
- "location": "string",
- "reference": "string",
- "started_at": null,
- "created_at": null,
- "scheduled_date": null,
- "completed_at": null,
- "description": "string",
- "prep_notes": "string",
- "acknowledgement_time": null,
- "facilitator_comments": "string",
- "participant_comments": "string",
- "online_meeting": true,
- "status": "string",
- "private": true,
- "participant_can_view_before": true,
- "duration_hours": 0,
- "duration_minutes": 0,
- "end_datetime_from_duration": null,
- "total_duration_minutes": 0,
- "third_party_id": 0,
- "date": null
}, - "relationships": {
- "facilitator": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "users"
}
}, - "participant": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "users"
}
}, - "topic": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "one_to_one_topics"
}
}, - "actions": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "one_to_one_actions"
}
}
}
}Retrieve details for a single 121.
| id | string Example: 99abbc05-9535-4e20-84be-0d4e55bcd407 Unique identifier for a single 121 record |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "one-to-ones",
- "attributes": {
- "location": "string",
- "reference": "string",
- "started_at": null,
- "created_at": null,
- "scheduled_date": null,
- "completed_at": null,
- "description": "string",
- "prep_notes": "string",
- "acknowledgement_time": null,
- "facilitator_comments": "string",
- "participant_comments": "string",
- "online_meeting": true,
- "status": "string",
- "private": true,
- "participant_can_view_before": true,
- "duration_hours": 0,
- "duration_minutes": 0,
- "end_datetime_from_duration": null,
- "total_duration_minutes": 0,
- "third_party_id": 0,
- "date": null
}, - "relationships": {
- "facilitator": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "users"
}
}, - "participant": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "users"
}
}, - "topic": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "one_to_one_topics"
}
}, - "actions": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "one_to_one_actions"
}
}
}
}Update the 121 with the specified details
Updated details for the 121
object |
{- "data": {
- "type": "one-to-ones",
- "attributes": {
- "duration_hours": 0,
- "duration_minutes": 0,
- "duration_location": "string",
- "meeting_config": {
- "meet_now": true
}, - "participant_can_view_before": true,
- "private": true,
- "started_at": null,
- "status": "completed_acknowledged",
- "timezone": "Europe/London",
- "type": "face-to-face"
}, - "relationships": {
- "facilitator": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "users"
}
}, - "participant": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "users"
}
}, - "topic": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "one_to_one_topics"
}
}, - "actions": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "one_to_one_actions"
}
}
}, - "id": "string"
}
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "one-to-ones",
- "attributes": {
- "location": "string",
- "reference": "string",
- "started_at": null,
- "created_at": null,
- "scheduled_date": null,
- "completed_at": null,
- "description": "string",
- "prep_notes": "string",
- "acknowledgement_time": null,
- "facilitator_comments": "string",
- "participant_comments": "string",
- "online_meeting": true,
- "status": "string",
- "private": true,
- "participant_can_view_before": true,
- "duration_hours": 0,
- "duration_minutes": 0,
- "end_datetime_from_duration": null,
- "total_duration_minutes": 0,
- "third_party_id": 0,
- "date": null
}, - "relationships": {
- "facilitator": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "users"
}
}, - "participant": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "users"
}
}, - "topic": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "one_to_one_topics"
}
}, - "actions": {
- "data": {
- "id": "ea0c8aab-dc5b-4d7e-b2bc-364250679278",
- "type": "one_to_one_actions"
}
}
}
}Retrieve calibration reports for your organization.
| filter[session_date;between] required | string <date-time> Example: filter[session_date;between]=2025-05-01T00:00:00.000Z, 2025-08-01T00:00:00.000Z A date range to filter calibration reports on their session date. Must be a comma-separated start and end date in UTC format. Date range cannot exceed 1 year (365 days). |
| filter[facilitator] | string Example: filter[facilitator]=99abbc05-9535-4e20-84be-0d4e55bcd407 Unique user ID to filter calibration reports by facilitator |
| filter[scorecard] | string Example: filter[scorecard]=25eeba63-ffe8-4f88-aa96-a3ea3e38757f Unique scorecard ID to filter calibration reports by scorecard |
{- "data": [
- {
- "id": "99abbc05-9535-4e20-84be-0d4e55bcd407",
- "evaluation_id": "99abbc05-9535-4e20-84be-0d4e55bcd407",
- "session_reference": "CAL-12345",
- "contact_reference": "CONTACT-5678",
- "session_type": "calibration",
- "scorecard_name": "Customer Experience Scorecard",
- "facilitator": "Jane Smith",
- "session_date": "01-May-25",
- "scores": [
- {
- "line_item_name": "Greeting",
- "section": {
- "id": "9b2ee1e6-8f43-4a02-bc47-1c4a56ff10c3",
- "name": "Compliance"
}, - "score": "Pass",
- "line_item_feedback": [
- {
- "id": "99abbc05-9535-4e20-84be-0d4e55bcd407",
- "comment": "Customer was greeted appropriately",
- "label": "Positive"
}
], - "root_causes": [
- {
- "id": "99abbc05-9535-4e20-84be-0d4e55bcd407",
- "name": "Training needed"
}
]
}
], - "participants": [
- {
- "user_id": "99abbc05-9535-4e20-84be-0d4e55bcd407",
- "user": "John Doe",
- "attended": true,
- "evaluated": true,
- "participant_is_facilitator": false,
- "scores": [
- {
- "line_item_name": "Greeting",
- "section": {
- "id": "9b2ee1e6-8f43-4a02-bc47-1c4a56ff10c3",
- "name": "Compliance"
}, - "score": "Pass",
- "line_item_feedback": [
- {
- "id": "99abbc05-9535-4e20-84be-0d4e55bcd407",
- "comment": "Customer was greeted professionally",
- "label": "Positive"
}
], - "root_causes": [
- {
- "id": "99abbc05-9535-4e20-84be-0d4e55bcd407",
- "name": "Call handling"
}
]
}
]
}
]
}
], - "meta": {
- "filter": {
- "session_date;between": "2025-05-01T00:00:00.000Z, 2025-08-01T00:00:00.000Z",
- "facilitator": "99abbc05-9535-4e20-84be-0d4e55bcd407",
- "scorecard": "99abbc05-9535-4e20-84be-0d4e55bcd407",
- "type": "calibration"
}
}
}