Intelligence
Get the metrics and records behind analytics in Dixa. Find a metric or record and the filters it accepts with List metrics or List records, and look up the ids to filter on with List filter values. Then send the query to the endpoint for its category: conversations, agents or aiagents. A metric returns values such as a count or an average, and a record returns a page of the events behind it. Read the Intelligence API guide for a walkthrough.
List the metrics you can query, with the filters and aggregates of each metric and the records it is based on. Use the metric id with Query conversation metric, Query agent metric or Query AI agent metric.
ApiKeyAuthAuthorization<token>category?stringOnly list metrics in this category. If not provided, all metrics are listed.
"conversations""agents""aiagents"pageKey?stringThe key of the page to fetch. To page through the results, call the link in meta.next or meta.previous of the previous response, which already carries this key.
pageLimit?integerThe number of entries per page, up to 1000. Defaults to 50, or to the page size of pageKey when one is given.
int3250The list of metrics
application/json- response
data?array<>meta?curl -X GET 'https://dev.dixa.io/beta/intelligence/metrics' \ -H 'Authorization: <API token>'Shortened to two metrics. The real response lists all metrics
List the records you can query, with the fields and filters of each record and the metrics based on it. Use the record id with Query conversation records, Query agent records or Query AI agent records.
ApiKeyAuthAuthorization<token>category?stringOnly list records in this category. If not provided, all records are listed.
"conversations""agents""aiagents"pageKey?stringThe key of the page to fetch. To page through the results, call the link in meta.next or meta.previous of the previous response, which already carries this key.
pageLimit?integerThe number of entries per page, up to 1000. Defaults to 50, or to the page size of pageKey when one is given.
int3250The list of records
application/json- response
data?array<>meta?curl -X GET 'https://dev.dixa.io/beta/intelligence/records' \ -H 'Authorization: <API token>'Shortened to two records. The real response lists all records
Get a metric by id.
ApiKeyAuthAuthorization<token>metricId*stringThe metric id
The metric
application/json- response
data*A metric and how to query it
curl -X GET 'https://dev.dixa.io/beta/intelligence/metrics/{metricId}' \ -H 'Authorization: <API token>'A metric that returns a count
Get a record by id.
ApiKeyAuthAuthorization<token>recordId*stringThe record id
The record
application/json- response
data*A record and how to query it
curl -X GET 'https://dev.dixa.io/beta/intelligence/records/{recordId}' \ -H 'Authorization: <API token>'A record you can query by period or conversation ids, with seven filters and a list of tags
Get the value of a conversation metric for a period or a list of conversations. All aggregates of the metric are returned. If nothing matches, count is 0 and the other aggregates are null.
ApiKeyAuthAuthorization<token>metricId*stringThe id of a conversation metric
The query
application/json- body
A conversation metric query
primaryFilter*|The period or conversations to query, given as either {"period": {...}} or {"conversationIds": [8123456, 8123481]}
filters?array<>The filters to apply. All filters must match
timezone*stringThe timezone presets and days are evaluated in, such as Europe/Copenhagen
The metric values, keyed by aggregate name
application/json- response
data*The metric values, keyed by the name of each of the metric's aggregates. All aggregates are included. If nothing matches, count is 0, min, max, sum, average, stdDev and percentage are null, and an object value is filled with zeros
curl -X POST 'https://dev.dixa.io/beta/intelligence/conversations/metrics/closedConversations' \ -H 'Authorization: <API token>' \ -H 'Content-Type: application/json' \ -d '{ "primaryFilter": { "period": { "interval": { "from": "2026-06-01T00:00:00Z", "to": "2026-07-01T00:00:00Z" } } }, "filters": [ { "attribute": "queue", "values": [ "2f9b6d51-38c4-4a72-9e15-7c8b3f6a2d90" ], "operator": "IsOne" }, { "attribute": "initialDirection", "values": [ "Inbound" ] } ], "timezone": "Europe/Copenhagen"}'The number of closed conversations
Get the value of an agent metric for a period. All aggregates of the metric are returned. If nothing matches, count is 0 and the other aggregates are null, except presence durations, which are 0. Deactivated agents are included.
ApiKeyAuthAuthorization<token>metricId*stringThe id of an agent metric
The query
application/json- body
An agent metric query
primaryFilter*The period to query
filters?array<>The filters to apply. All filters must match
timezone*stringThe timezone presets and days are evaluated in, such as Europe/Copenhagen
The metric values, keyed by aggregate name
application/json- response
data*The metric values, keyed by the name of each of the metric's aggregates. All aggregates are included. If nothing matches, count is 0, min, max, sum, average, stdDev and percentage are null, and an object value is filled with zeros
curl -X POST 'https://dev.dixa.io/beta/intelligence/agents/metrics/agentPresenceDuration' \ -H 'Authorization: <API token>' \ -H 'Content-Type: application/json' \ -d '{ "primaryFilter": { "period": { "interval": { "from": "2026-06-01T00:00:00Z", "to": "2026-07-01T00:00:00Z" } } }, "timezone": "Europe/Copenhagen"}'Time working, per channel the agent was available on, and time away, per away status
Get the value of an AI agent metric for a period. All aggregates of the metric are returned. If nothing matches, the counts are 0. Deleted AI agents are included.
ApiKeyAuthAuthorization<token>metricId*stringThe id of an AI agent metric
The query
application/json- body
An AI agent metric query
primaryFilter*The period to query
filters?array<>The filters to apply. All filters must match
timezone*stringThe timezone presets and days are evaluated in, such as Europe/Copenhagen
The metric values, keyed by aggregate name
application/json- response
data*The metric values, keyed by the name of each of the metric's aggregates. All aggregates are included. If nothing matches, count is 0, min, max, sum, average, stdDev and percentage are null, and an object value is filled with zeros
curl -X POST 'https://dev.dixa.io/beta/intelligence/aiagents/metrics/aiAgentFeedback' \ -H 'Authorization: <API token>' \ -H 'Content-Type: application/json' \ -d '{ "primaryFilter": { "period": { "interval": { "from": "2026-06-01T00:00:00Z", "to": "2026-07-01T00:00:00Z" } } }, "timezone": "Europe/Copenhagen"}'The number of rated answers, and how many were rated thumbs up and thumbs down
Get the rows of a conversation record for a period or a list of conversations. To get the next page, send the same query with meta.next as pagination.pageKey. Columns without a value are left out of the row.
ApiKeyAuthAuthorization<token>recordId*stringThe id of a conversation record
The query
application/json- body
A conversation record query
primaryFilter*|The period or conversations to query, given as either {"period": {...}} or {"conversationIds": [8123456, 8123481]}
filters?array<>The filters to apply. All filters must match
timezone*stringThe timezone presets and days are evaluated in, such as Europe/Copenhagen
pagination?The page to fetch. If not provided, the first page is returned
includeLabels?booleanWhether references include a label. Defaults to true
One page of rows, and the keys of the previous and next pages
application/json- response
data?array<>The rows of the page. The columns a row can contain are listed under fields in the record's catalogue entry
meta*The keys of the previous and next pages, and the page size
curl -X POST 'https://dev.dixa.io/beta/intelligence/conversations/records/closedConversations' \ -H 'Authorization: <API token>' \ -H 'Content-Type: application/json' \ -d '{ "primaryFilter": { "period": { "interval": { "from": "2026-06-01T00:00:00Z", "to": "2026-07-01T00:00:00Z" } } }, "filters": [ { "attribute": "channel", "values": [ "Email", "ContactForm" ], "operator": "IsOne" }, { "attribute": "tag", "values": [ "5e7a9c13-2f84-4b60-9d31-6c8a5e2f7b04", "b3c81f6d-7a95-4e28-8c40-1f6b9d3a5e72" ], "operator": "IsAll" } ], "timezone": "Europe/Copenhagen", "pagination": { "pageLimit": 50 }, "includeLabels": true}'One row per closed conversation. Columns without a value, or a reference to something deleted such as a queue, are left out
Get the rows of an agent record for a period. To get the next page, send the same query with meta.next as pagination.pageKey. Without filters, all agents are included, also deactivated ones.
ApiKeyAuthAuthorization<token>recordId*stringThe id of an agent record
The query
application/json- body
An agent record query
primaryFilter*The period to query
filters?array<>The filters to apply. All filters must match
timezone*stringThe timezone presets and days are evaluated in, such as Europe/Copenhagen
pagination?The page to fetch. If not provided, the first page is returned
includeLabels?booleanWhether references include a label. Defaults to true
One page of rows, and the keys of the previous and next pages
application/json- response
data?array<>The rows of the page. The columns a row can contain are listed under fields in the record's catalogue entry
meta*The keys of the previous and next pages, and the page size
curl -X POST 'https://dev.dixa.io/beta/intelligence/agents/records/agentPresenceDuration' \ -H 'Authorization: <API token>' \ -H 'Content-Type: application/json' \ -d '{ "primaryFilter": { "period": { "interval": { "from": "2026-06-01T00:00:00Z", "to": "2026-07-01T00:00:00Z" } } }, "filters": [ { "attribute": "agent", "values": [ "a4f1c0b2-6d38-4e91-8f27-1b5d9c3e7a04", "c81d4e2a-95b7-4c60-a3f8-2e6a7d09b415" ], "operator": "IsOne" } ], "timezone": "Europe/Copenhagen", "pagination": { "pageLimit": 50 }, "includeLabels": true}'A working interval and an away interval. Only the away interval has a `customAwayStatus`
Get the rows of an AI agent record for a period. To get the next page, send the same query with meta.next as pagination.pageKey. Without filters, all AI agents are included, also deleted ones.
ApiKeyAuthAuthorization<token>recordId*stringThe id of an AI agent record
The query
application/json- body
An AI agent record query
primaryFilter*The period to query
filters?array<>The filters to apply. All filters must match
timezone*stringThe timezone presets and days are evaluated in, such as Europe/Copenhagen
pagination?The page to fetch. If not provided, the first page is returned
includeLabels?booleanWhether references include a label. Defaults to true
One page of rows, and the keys of the previous and next pages
application/json- response
data?array<>The rows of the page. The columns a row can contain are listed under fields in the record's catalogue entry
meta*The keys of the previous and next pages, and the page size
curl -X POST 'https://dev.dixa.io/beta/intelligence/aiagents/records/aiAgentFeedback' \ -H 'Authorization: <API token>' \ -H 'Content-Type: application/json' \ -d '{ "primaryFilter": { "period": { "interval": { "from": "2026-06-01T00:00:00Z", "to": "2026-07-01T00:00:00Z" } } }, "filters": [ { "attribute": "aiAgent", "values": [ "0b7e4c2d-5a91-4f38-b6e2-9d1c3a8f5e47" ], "operator": "IsOne" } ], "timezone": "Europe/Copenhagen", "pagination": { "pageLimit": 50 }, "includeLabels": true}'One row per rating: a thumbs up and a thumbs down. The second conversation was in no queue, so it has no `queue`
List the values you can filter on for an attribute, such as all queues or all tags. Deactivated agents, queues and tags are included and marked with deactivated: true.
ApiKeyAuthAuthorization<token>attribute*stringA filter attribute from List metrics or List records
pageKey?stringThe key of the page to fetch. To page through the results, call the link in meta.next or meta.previous of the previous response, which already carries this key.
pageLimit?integerThe number of entries per page, up to 1000. Defaults to 50, or to the page size of pageKey when one is given.
int3250The values of the filter attribute
application/json- response
data?array<>meta?curl -X GET 'https://dev.dixa.io/beta/intelligence/filters/{attribute}/values' \ -H 'Authorization: <API token>'Agents with their display names. Deactivated agents are included and marked as deactivated