Conversations

Anonymize conversation

PATCH
/beta/conversations/{conversationId}/anonymize

Request the anonymization of a conversation.

Authorization

ApiKeyAuth anonymization
headerAuthorization<token>

Scope: anonymization

Path Parameters

conversationId*integer

the id of the conversation to anonymize

Formatint64

Query Parameters

force?boolean

Whether to force close the conversation if it is found in a non closed state.

Defaultfalse

Response Body

The conversation's anonymization request status

application/json
  1. response
data*
Example Request
curl -X PATCH 'https://dev.dixa.io/beta/conversations/{conversationId}/anonymize' \  -H 'Authorization: <API token>'
{
"data": {
"id": "87bac308-e49f-4134-84cc-96b868f1e1e4",
"entityType": "ConversationAnonymizationType",
"_type": "Conversation",
"initiatedAt": "2021-12-01T12:46:36.581Z[GMT]",
"targetEntityId": "10749",
"requestedBy": "b165fdaa-51d6-44b0-bfcd-5f431d623fa7"
}
}

Anonymize message

PATCH
/beta/conversations/{conversationId}/messages/{messageId}/anonymize

Request the anonymization of a single message in a conversation.

Authorization

ApiKeyAuth anonymization
headerAuthorization<token>

Scope: anonymization

Path Parameters

conversationId*integer

the id of the conversation in which the message belongs

Formatint64
messageId*string

the id of the message to anonymize

Formatuuid

Response Body

The message's anonymization request status

application/json
  1. response
data*
Example Request
curl -X PATCH 'https://dev.dixa.io/beta/conversations/{conversationId}/messages/{messageId}/anonymize' \  -H 'Authorization: <API token>'
{
"data": {
"id": "b165fdaa-51d6-44b0-bfcd-5f431d623fa7",
"entityType": "MessageAnonymizationType",
"_type": "Message",
"initiatedAt": "2021-12-01T12:46:36.581Z[GMT]",
"targetEntityId": "10749_1b9adc49-62f7-4056-a9c0-c18c1f25afdb",
"requestedBy": "4c7af391-b7fd-4560-9d82-b3464eef8776"
}
}

Close conversation

PUT
/beta/conversations/{conversationId}/close

Mark a conversation as closed by providing its id.

Authorization

ApiKeyAuth conversation.reply
headerAuthorization<token>

Scope: conversation.reply

Path Parameters

conversationId*integer
Formatint64

Request Body

Specify the acting user for the close

application/json
  1. body
userId?string

An optional agent/admin/AI agent to close the conversation. If not provided, the System User will be used.

Formatuuid

Response Body

The conversation was successfully closed

Example Request
curl -X PUT 'https://dev.dixa.io/beta/conversations/{conversationId}/close' \  -H 'Authorization: <API token>' \  -H 'Content-Type: application/json' \  -d '{  "userId": "5a556159-9c21-4f3e-a44f-d323deb80d16"}'

Empty

Followup conversation

PUT
/beta/conversations/{conversationId}/followup

Follow up a conversation by providing its id and expiration timestamp.

Authorization

ApiKeyAuth conversation.reply
headerAuthorization<token>

Scope: conversation.reply

Path Parameters

conversationId*integer
Formatint64

Request Body

Specify the follow-up timestamp and acting user

application/json
  1. body
timestamp*string

A timestamp for when the followup should expire

Formatdate-time
userId?string

An optional agent/admin/AI agent to followup the conversation. If not provided, the System User will be used.

Formatuuid

Response Body

The conversation was successfully followed up

Example Request
curl -X PUT 'https://dev.dixa.io/beta/conversations/{conversationId}/followup' \  -H 'Authorization: <API token>' \  -H 'Content-Type: application/json' \  -d '{  "timestamp": "2025-01-08T08:31:25Z",  "userId": "5a556159-9c21-4f3e-a44f-d323deb80d16"}'

Empty

Reopen conversation

PUT
/beta/conversations/{conversationId}/reopen

Reopen a conversation and offer it in the same queue. Falls back to the default organization queue if the conversation has no target queue.

Authorization

ApiKeyAuth conversation.reply
headerAuthorization<token>

Scope: conversation.reply

Path Parameters

conversationId*integer
Formatint64

Request Body

Specify the acting user for the reopen

application/json
  1. body
userId?string

An optional agent/admin/AI agent to reopen the conversation. If not provided, the System User will be used.

Formatuuid

Response Body

The conversation was successfully reopened and offered in the same queue

Example Request
curl -X PUT 'https://dev.dixa.io/beta/conversations/{conversationId}/reopen' \  -H 'Authorization: <API token>' \  -H 'Content-Type: application/json' \  -d '{  "userId": "a53b25da-f676-4c52-acac-58c9280aa23d"}'

Empty

Transfer conversation

PUT
/beta/conversations/{conversationId}/transfer/queue

Transfer a conversation to a target queue.

Authorization

ApiKeyAuth conversation.reply
headerAuthorization<token>

Scope: conversation.reply

Path Parameters

conversationId*integer
Formatint64

Request Body

Specify the target queue and acting user

application/json
  1. body
queueId*string

The target queue for the conversation transfer

Formatuuid
userId?string

An optional agent/admin/AI agent to originate the transfer of the conversation. If not provided, the System User will be used.

Formatuuid

Response Body

The conversation was successfully transferred to the target queue

Example Request
curl -X PUT 'https://dev.dixa.io/beta/conversations/{conversationId}/transfer/queue' \  -H 'Authorization: <API token>' \  -H 'Content-Type: application/json' \  -d '{  "queueId": "92f8d193-b26f-4a62-86a3-bb03ee0915e9",  "userId": "a53b25da-f676-4c52-acac-58c9280aa23d"}'

Empty

Add internal notes

POST
/beta/conversations/{conversationId}/notes/bulk

Create internal notes in a conversation by providing the conversation id.

Authorization

ApiKeyAuth conversation.reply
headerAuthorization<token>

Scope: conversation.reply

Path Parameters

conversationId*integer
Formatint64

Request Body

The list of internal notes to create for a conversation

application/json
  1. body
data?array<>

Response Body

The created internal notes

application/json
  1. response
data?array<|>
Example Request
curl -X POST 'https://dev.dixa.io/beta/conversations/{conversationId}/notes/bulk' \  -H 'Authorization: <API token>' \  -H 'Content-Type: application/json' \  -d '{  "data": [    {      "message": "A sample note",      "agentId": "a53b25da-f676-4c52-acac-58c9280aa23d",      "createdAt": "2021-12-01T12:46:36.581Z[GMT]"    },    {      "message": "Another sample note"    }  ]}'
{
"data": [
{
"data": {
"id": "eb31acbb-13f9-4ce7-abd3-44dd86266741",
"authorId": "5e8a300e-787e-47cd-af53-fc1ccc37933d",
"createdAt": "2021-12-01T12:46:36.581Z[GMT]",
"csid": 9456,
"message": "A sample note"
},
"_type": "BulkActionSuccess"
},
{
"error": {
"message": "An agent with id:... cannot be found in org."
},
"_type": "BulkActionFailure"
}
]
}

List internal notes

GET
/beta/conversations/{conversationId}/notes

Get all internal notes for a particular conversation by providing the conversation id.

Authorization

ApiKeyAuth
headerAuthorization<token>

Path Parameters

conversationId*integer
Formatint64

Response Body

List of internal notes for a conversation sorted from oldest to newest

application/json
  1. response
data?array<>
Example Request
curl -X GET 'https://dev.dixa.io/beta/conversations/{conversationId}/notes' \  -H 'Authorization: <API token>'
{
"data": [
{
"id": "3346b99c-8128-4276-ac40-5f30c959e5e7",
"authorId": "c68f42a5-1453-497a-940f-ff36ed4f1631",
"createdAt": "2021-01-20T09:00:00Z",
"csid": 7392,
"message": "A note to remember"
},
{
"id": "22b8e6b6-4576-4dc0-ab05-60f81e8b0708",
"authorId": "124d54bb-92d6-41c9-a675-788d6a8c821e",
"createdAt": "2021-01-22T12:00:00Z",
"csid": 7392,
"message": "A note to forget"
}
]
}

Add internal note

POST
/beta/conversations/{conversationId}/notes

Create an internal note in a conversation by providing the conversation id.

Authorization

ApiKeyAuth conversation.reply
headerAuthorization<token>

Scope: conversation.reply

Path Parameters

conversationId*integer
Formatint64

Request Body

The internal note to create for a conversation

application/json
  1. body
message*string
agentId?string
Formatuuid
createdAt?string
Formatdate-time

Response Body

The created internal note

application/json
  1. response
data*
curl -X POST 'https://dev.dixa.io/beta/conversations/{conversationId}/notes' \  -H 'Authorization: <API token>' \  -H 'Content-Type: application/json' \  -d '{  "message": "A sample note",  "agentId": "a53b25da-f676-4c52-acac-58c9280aa23d",  "createdAt": "2021-12-01T12:46:36.581Z[GMT]"}'
{
"data": {
"id": "eb31acbb-13f9-4ce7-abd3-44dd86266741",
"authorId": "5e8a300e-787e-47cd-af53-fc1ccc37933d",
"createdAt": "2021-12-01T12:46:36.581Z[GMT]",
"csid": 9456,
"message": "A sample note"
}
}
POST
/beta/conversations/{conversationId}/ratings/{ratingId}/submit

Create a rating result for a specific conversation.

Authorization

ApiKeyAuth conversation.satisfaction
headerAuthorization<token>

Scope: conversation.satisfaction

Path Parameters

conversationId*integer
Formatint64
ratingId*string

The ratingId parameter has to be the ID of the offer created via invoking the /conversations/{conversationId}/ratings/offer endpoint.

Request Body

The rating result to be created for a conversation

application/json
  1. body
userId?stringDeprecated

The userId property is no longer used so it's made optional to keep backwards compatibility. A null value can be provided instead of an actual ID.

ratingResult*||
comment?string
submittedAt?string
Formatdate-time

Response Body

The created conversation rating result

application/json
  1. response
data*
Example Request
curl -X POST 'https://dev.dixa.io/beta/conversations/{conversationId}/ratings/{ratingId}/submit' \  -H 'Authorization: <API token>' \  -H 'Content-Type: application/json' \  -d '{  "userId": "d3cf6f15-1497-4e71-92f2-9b3b228352bd",  "ratingResult": {    "value": 4,    "_type": "Csat"  },  "comment": "Best customer service ever!",  "submittedAt": "2024-03-11T16:39:30Z"}'
{
"data": {
"ratingId": "33cf4e5e-9ce9-461c-b668-be9b712b717c",
"userId": "4c5f7efa-0822-4b75-bdf5-907fa7336e0c",
"ratingResult": {
"value": 5,
"_type": "Csat"
},
"comment": "Excellent customer service!",
"submittedAt": "2024-03-11T16:39:30Z"
}
}
POST
/beta/conversations/{conversationId}/ratings/offer

Create a rating offer for a specific conversation.

Authorization

ApiKeyAuth conversation.satisfaction
headerAuthorization<token>

Scope: conversation.satisfaction

Path Parameters

conversationId*integer
Formatint64

Request Body

The rating offer to be created for a conversation

application/json
  1. body
userId?string

If userId is not provided, the conversation requester will be picked.

agentId?string

If an agentId is not provided, the agent that is most likely to be the target will be picked. Please note that providing an agentId that is not part of the conversation may skew metrics in Intelligence.

ratingType*string

The type of numeric rating. E.g.: 'Csat', 'ThumbsUpOrDown', 'Nps'.

offeredAt?string
Formatdate-time

Response Body

The created conversation rating offer

application/json
  1. response
data*
Example Request
curl -X POST 'https://dev.dixa.io/beta/conversations/{conversationId}/ratings/offer' \  -H 'Authorization: <API token>' \  -H 'Content-Type: application/json' \  -d '{  "userId": "b0323b42-c428-4afa-970e-20bf5bdeeec4",  "agentId": "eeb3bbe5-0355-4ac1-8af5-20d42a3db24b",  "ratingType": "Csat",  "offeredAt": "2024-03-11T16:39:30Z"}'
{
"data": {
"id": "2f0122db-0824-44d7-b39a-e1f722b8c38c",
"userId": "7a65c963-b3ca-4bd4-996e-bdbcaa620219",
"agentId": "db7f0b41-b779-4726-a673-07b2a59a550d",
"ratingType": "Csat",
"offeredAt": "2024-03-11T16:39:30Z"
}
}

List rating

Deprecated
GET
/beta/conversations/{conversationId}/rating

Deprecated rating endpoint. Use '/ratings'.

Authorization

ApiKeyAuth
headerAuthorization<token>

Path Parameters

conversationId*integer
Formatint64

Response Body

List of ratings for a conversation

application/json
  1. response
data?array<>
Example Request
curl -X GET 'https://dev.dixa.io/beta/conversations/{conversationId}/rating' \  -H 'Authorization: <API token>'
{
"data": [
{
"id": "33cf4e5e-9ce9-461c-b668-be9b712b717c",
"ratingScore": 4,
"ratingType": "Csat",
"ratingComment": "Super good!",
"conversationChannel": "PstnPhone",
"agentId": "a53b25da-f676-4c52-acac-58c9280aa23d",
"userId": "6d0c5791-e40a-46d4-bba1-1364ce4578ed",
"ratingStatus": "Offered",
"language": "English",
"timestamps": {}
}
]
}
GET
/beta/conversations/{conversationId}/ratings

Lists latest ratings statuses for a particular conversation by providing the conversation ID. For surveys with multiple questions, rating status will be reported for each individual question of the survey. For example, a response for a 3 question survey that was answered will be 3 elements with status "Rated". Additionally, a multiple question survey can be partially answered, therefore a response of such case will be a mix of "Offered" and "Rated" statuses. Note that the IDs of multiple questions response elements will be the same, because they are part of the same survey.

Authorization

ApiKeyAuth
headerAuthorization<token>

Path Parameters

conversationId*integer
Formatint64

Response Body

List of ratings for a conversation

application/json
  1. response
data?array<>
Example Request
curl -X GET 'https://dev.dixa.io/beta/conversations/{conversationId}/ratings' \  -H 'Authorization: <API token>'
{
"data": [
{
"id": "33cf4e5e-9ce9-461c-b668-be9b712b717c",
"ratingScore": 5,
"ratingType": "Csat",
"ratingComment": "Super good!",
"conversationChannel": "PstnPhone",
"agentId": "a53b25da-f676-4c52-acac-58c9280aa23d",
"userId": "6d0c5791-e40a-46d4-bba1-1364ce4578ed",
"ratingStatus": "Offered",
"language": "en",
"timestamps": {
"offered_at": "2025-09-25T14:35:53Z",
"modified_at": "2025-09-25T14:36:27Z",
"scheduled_for": "2025-09-25T14:35:52Z",
"created_at": "2025-09-25T14:34:52Z",
"scheduled_at": "2025-09-25T14:34:52Z"
}
}
]
}
GET
/beta/conversations/activitylog

List all activity logs for an organization.

Authorization

ApiKeyAuth
headerAuthorization<token>

Query Parameters

pageLimit?integer

Maximum number of results per page. May be used in combination with pageKey to change the number of results in between page requests.

Formatint32
pageKey?string

Base64 encoded form of pagination query parameters. Do not try to construct or change programmatically as the internal structure may change without notice.

fromDatetime?string

Starting date-time filter with ISO 8601 format: yyyy-MM-dd'T'HH:mm:ss.SSS'Z'

Formatdate-time
toDatetime?string

Ending date-time filter with ISO 8601 format: yyyy-MM-dd'T'HH:mm:ss.SSS'Z'

Formatdate-time

Response Body

The full list of activity logs for an organization with pagination

application/json
  1. response
data?array<>
meta?
Example Request
curl -X GET 'https://dev.dixa.io/beta/conversations/activitylog' \  -H 'Authorization: <API token>'
{
"data": [
{
"id": "d85a7bd7-79da-4f10-b021-12e4c2c20024",
"conversationId": 1,
"activityTimestamp": "2021-12-01T12:46:36.581Z[GMT]",
"activityType": "ConversationAssignedActivityType",
"_type": "ConversationAssigned",
"author": {
"id": "a53b25da-f676-4c52-acac-58c9280aa23d",
"name": "Dale Cooper",
"email": "dc@dixa.com",
"phoneNumber": "+4534343434"
}
},
{
"id": "324d0108-31b7-4678-8862-c8780a297f8f",
"conversationId": 2,
"activityTimestamp": "2021-12-01T12:46:36.581Z[GMT]",
"activityType": "ConversationAssignedActivityType",
"_type": "ConversationAssigned",
"author": {
"id": "67ff39b6-b1ee-4d5f-91ee-168d4668c4ba",
"name": "Bob Ross",
"email": "br@dixa.com",
"phoneNumber": "+4532323232"
}
}
]
}

List flows

GET
/beta/conversations/flows

List all conversations flows in an organization.

Authorization

ApiKeyAuth
headerAuthorization<token>

Query Parameters

channel?string

An optional ConversationChannel can be specified to filter the flows. If not provided, the default channel is PstnPhone. Possible values: [WhatsApp, Voicemail, WidgetChat, FacebookMessenger, Email, ContactForm, Callback, PstnPhone, Messenger]

Response Body

The list of conversation flows

application/json
  1. response
data?array<>
Example Request
curl -X GET 'https://dev.dixa.io/beta/conversations/flows' \  -H 'Authorization: <API token>'
{
"data": [
{
"id": "d546e9a8-82c2-409f-b688-e9199ea69f83",
"name": "Default call flow",
"channel": "PstnPhone",
"contactEndpointId": "+559912443333"
}
]
}

Tag conversation

PUT
/beta/conversations/{conversationId}/tags/{tagId}

Tag a conversation. You may only use active tags to tag conversations.

Authorization

ApiKeyAuth conversation.tag
headerAuthorization<token>

Scope: conversation.tag

Path Parameters

conversationId*integer
Formatint64
tagId*string
Formatuuid

Response Body

The conversation was successfully tagged

Example Request
curl -X PUT 'https://dev.dixa.io/beta/conversations/{conversationId}/tags/{tagId}' \  -H 'Authorization: <API token>'

Empty

Untag conversation

DELETE
/beta/conversations/{conversationId}/tags/{tagId}

Untag a conversation. You may remove active or inactive tags from a conversation.

Authorization

ApiKeyAuth conversation.tag
headerAuthorization<token>

Scope: conversation.tag

Path Parameters

conversationId*integer
Formatint64
tagId*string
Formatuuid

Response Body

The conversation was successfully untagged

Example Request
curl -X DELETE 'https://dev.dixa.io/beta/conversations/{conversationId}/tags/{tagId}' \  -H 'Authorization: <API token>'

Empty

Bulk tag conversation

POST
/beta/conversations/{conversationId}/tags/bulk

Initiate bulk tag of a conversation and process it asynchronously. If a tag with corresponding name does not exist it will be created.

Authorization

ApiKeyAuth conversation.tag
headerAuthorization<token>

Scope: conversation.tag

Path Parameters

conversationId*integer
Formatint64

Request Body

The list of tags to add to a conversation

application/json
  1. body
data?array<>

Response Body

The conversation bulk tag was initiated

Example Request
curl -X POST 'https://dev.dixa.io/beta/conversations/{conversationId}/tags/bulk' \  -H 'Authorization: <API token>' \  -H 'Content-Type: application/json' \  -d '{  "data": [    {      "name": "Example #1"    },    {      "name": "Example #2"    }  ]}'

Empty

List tags

GET
/beta/conversations/{conversationId}/tags

Get the tags for a particular conversation by providing the conversation id.

Authorization

ApiKeyAuth
headerAuthorization<token>

Path Parameters

conversationId*integer
Formatint64

Response Body

List of tags for a conversation

application/json
  1. response
data?array<>
Example Request
curl -X GET 'https://dev.dixa.io/beta/conversations/{conversationId}/tags' \  -H 'Authorization: <API token>'
{
"data": [
{
"id": "b794a74a-625b-4303-8237-9b11668a9605",
"name": "example",
"state": "Active"
},
{
"id": "b794a74a-625b-4303-8237-9b11668a9605",
"name": "example",
"state": "Active"
},
{
"id": "b794a74a-625b-4303-8237-9b11668a9605",
"name": "example",
"state": "Active"
},
{
"id": "b794a74a-625b-4303-8237-9b11668a9605",
"name": "example",
"state": "Active"
}
]
}

List messages

GET
/beta/conversations/{conversationId}/messages

Get all messages for a particular conversation by providing the conversation id. Note that messages in ContactForm conversations can have attributes of "_type": "EmailAttributes" if they are created through a webform, or "_type": "ContactFormAttributes" when created through a chat widget.

Authorization

ApiKeyAuth
headerAuthorization<token>

Path Parameters

conversationId*integer
Formatint64

Response Body

List of messages for a conversation sorted from oldest to newest

application/json
  1. response
data?array<>
Example Request
curl -X GET 'https://dev.dixa.io/beta/conversations/{conversationId}/messages' \  -H 'Authorization: <API token>'
{
"data": [
{
"id": "11b95893-0514-4606-a5d8-1880172b3a55",
"authorId": "41646d42-edc0-493e-ac7b-814d9ff40a2e",
"externalId": "13244",
"createdAt": "2021-12-01T12:46:36.581Z[GMT]",
"attributes": {
"emailContent": {
"content": {
"value": "Hello, this is a regular email content",
"_type": "Text"
},
"_type": "Regular"
},
"from": {
"email": "some-help@email.dixa.io",
"name": "Help"
},
"to": [
{
"email": "someone@somecompany.com",
"name": "Some One"
}
],
"cc": [],
"bcc": [],
"isAutoReply": false,
"inlineImages": [
{
"url": "https://files.dixa.io/public/something/attachment/inline-image-1",
"prettyName": "image001.png"
}
],
"attachments": [
{
"url": "https://files.dixa.io/private/something/attachment/attachment-1",
"prettyName": "Picture"
}
],
"direction": "Outbound",
"originalContentUrl": {
"url": "https://files.dixa.io/private/something/email_original_data/a1b2c3d4"
},
"_type": "EmailAttributes"
}
},
{
"id": "12c95893-0514-4606-a5d8-1880172b3a56",
"authorId": "41646d42-edc0-493e-ac7b-814d9ff40a2e",
"externalId": "13245",
"createdAt": "2021-12-01T12:47:36.581Z[GMT]",
"attributes": {
"emailContent": {
"file": {
"url": "https://files.dixa.io/private/something/email_stripped_content/large-email-content",
"prettyName": "Large Email Content"
},
"_type": "TooLarge"
},
"from": {
"email": "some-help@email.dixa.io",
"name": "Help"
},
"to": [
{
"email": "someone@somecompany.com",
"name": "Some One"
}
],
"cc": [
{
"email": "manager@somecompany.com",
"name": "Manager"
}
],
"bcc": [
{
"email": "archive@somecompany.com"
}
],
"isAutoReply": false,
"inlineImages": [],
"attachments": [
{
"url": "https://files.dixa.io/private/something/attachment/attachment-2",
"prettyName": "Large Document"
},
{
"url": "https://files.dixa.io/private/something/attachment/attachment-3",
"prettyName": "Spreadsheet"
}
],
"direction": "Inbound",
"originalContentUrl": {
"url": "https://files.dixa.io/private/something/email_original_data/b2c3d4e5"
},
"_type": "EmailAttributes"
}
}
]
}

Add message

POST
/beta/conversations/{conversationId}/messages

Add a message to a conversation. For inbound messages the author is assumed to be the requester of the conversation (end user). For outbound messages the author is specified using the agentId field.
If attachments are added to the message, they will be copied and stored in Dixa.
Content in outbound message is required except for Whatsapp messages.
Supported channels are Chat, Messenger, Contact Form, Email, Sms (outbound only), Whatsapp (outbound and Markdown only).

Supported Markdown syntax for Markdown content: bold **text**, italic *text*, bold & italic ***text***, strikethrough ~text~, blockquote > Quoted text. \n Message about quoted text, ordered list List:\n1. Item\n2. Item\n3. Item, unordered list List:\n* Item\n* Item\n* Item, inline code This is code``.

Whatsapp channel:
Only one attachment is allowed per WhatsApp message.
Supports adding a message with attachment only (no content).
Supports the following file types for attachments: .jpg, .jpeg, .png, .pdf, .doc, .docx, .pptx, .xlsx

Authorization

ApiKeyAuth conversation.reply
headerAuthorization<token>

Scope: conversation.reply

Path Parameters

conversationId*integer
Formatint64

Request Body

The message to be added to a conversation

application/json
  1. body

Only Outbound messages are supported for Sms and Whatsapp.

content*||
attachments?array<>
integrationEmail?string

Internal email address registered for the integration with format: <email-address>@email.dixa.io

externalId?string

Client generated identifier for external reference

Response Body

The added message

application/json
  1. response
data*
curl -X POST 'https://dev.dixa.io/beta/conversations/{conversationId}/messages' \  -H 'Authorization: <API token>' \  -H 'Content-Type: application/json' \  -d '{  "content": {    "value": "I need some help!",    "_type": "Html"  },  "attachments": [    {      "url": "http://attachment.url",      "prettyName": "Filename"    }  ],  "_type": "Inbound"}'
{
"data": {
"content": {
"value": "An amazing message",
"_type": "Html"
},
"direction": "Outbound",
"authorId": "bac5a02c-15b3-44da-ae1e-ab7b9db4aa89",
"messageId": "87bac308-e49f-4134-84cc-96b868f1e1e4",
"createdAt": "2021-06-09T08:18:37.284Z"
}
}

Create conversation

POST
/beta/conversations

Create a conversation. For inbound messages the author is assumed to be the requester of the conversation (end user). For outbound messages the author is specified using the agentId field.

Authorization

ApiKeyAuth conversation.reply
headerAuthorization<token>

Scope: conversation.reply

Request Body

The conversation to create

application/json
  1. body
requesterId*string

The end user's userId

Formatuuid
direction*string

values: [Inbound, Outbound]

contactEndpointId*string
queueId*string
Formatuuid

Response Body

The id of the created conversation

application/json
  1. response
data*
curl -X POST 'https://dev.dixa.io/beta/conversations' \  -H 'Authorization: <API token>' \  -H 'Content-Type: application/json' \  -d '{  "requesterId": "9c2a2cce-699f-4a72-89d9-fda5bc8dec8b",  "emailIntegrationId": "my-integration@email.dixa.io",  "subject": "order #123",  "message": {    "content": {      "value": "My order hasn'\''t shipped",      "_type": "Text"    },    "attachments": [],    "_type": "Inbound"  },  "language": "en",  "_type": "Email"}'
{
"data": {
"id": 100
}
}

Import conversation

POST
/beta/conversations/import

Import a previously created conversation into Dixa. For inbound messages the author is assumed to be the requester of the conversation (end user), unless the specific channel supports overriding the message author through its attributes. For outbound messages the author is specified using the agentId field.

Authorization

ApiKeyAuth conversation.import
headerAuthorization<token>

Scope: conversation.import

Request Body

The type of conversation to import

application/json
  1. body
genericChannelName*string

The conversation channel. Currently supported values are 'email' and 'genericapimessaging'. See payload examples for each case.

requesterId*string
Formatuuid
requesterConnectionStatus?string

values: [Connected, Disconnected]

direction*string

values: [Inbound, Outbound]

messages?array<|>
createdAt*string
Formatdate-time
assignment?
externalId?string
closing?

Triggers the closing of the conversation

attributes?unknown

A set of dynamic attributes that are specific to the conversation channel, but not limited to it. See channel specific examples for your use case.

Response Body

The id of the imported conversation

application/json
  1. response
data*
curl -X POST 'https://dev.dixa.io/beta/conversations/import' \  -H 'Authorization: <API token>' \  -H 'Content-Type: application/json' \  -d '{  "genericChannelName": "genericapimessaging",  "requesterId": "9c2a2cce-699f-4a72-89d9-fda5bc8dec8b",  "requesterConnectionStatus": "Connected",  "direction": "Inbound",  "messages": [    {      "content": {        "value": "Hi, I need help with my order",        "_type": "Text"      },      "attachments": [],      "createdAt": "2021-12-01T13:00:00.003Z",      "_type": "InboundImport"    },    {      "content": {        "value": "Sure — what seems to be the problem?",        "_type": "Text"      },      "agentId": "cd4ceb58-bb3a-443c-9cd8-4f088feafe5b",      "attachments": [],      "createdAt": "2021-12-01T14:00:00.004Z",      "_type": "OutboundImport"    }  ],  "createdAt": "2021-12-01T11:00:00.001Z",  "assignment": {    "agentId": "cd4ceb58-bb3a-443c-9cd8-4f088feafe5b",    "assignedAt": "2021-12-01T12:00:00.002Z"  },  "_type": "GenericConversationImport"}'
{
"data": {
"id": 100,
"partialErrors": [
{
"message": "The conversation could not be assigned"
},
{
"message": "Invalid attachment url in message. externalId: 42"
}
]
}
}
PATCH
/beta/conversations/{conversationId}/custom-attributes

Patch custom attributes of a conversation

Authorization

ApiKeyAuth conversation.custom_attribute
headerAuthorization<token>

Scope: conversation.custom_attribute

Path Parameters

conversationId*integer
Formatint64

Request Body

The custom attributes of an conversation to be patched. This should map the custom attribute id to the desired attribute value. Format: Map[UUID, Option[AttributeValue].

application/json
  1. body
[key: string]?array<string>|

AttributeValue values: String[] if the type of the custom attribute is Select or String if the type of the custom attribute is Text

Response Body

The patched conversation attributes

application/json
  1. response
data?array<>
Example Request
curl -X PATCH 'https://dev.dixa.io/beta/conversations/{conversationId}/custom-attributes' \  -H 'Authorization: <API token>' \  -H 'Content-Type: application/json' \  -d '{  "2f5515b6-7e98-4f4d-9010-bfd2a27d4f35": "012345",  "e14708a6-eed9-495c-9d88-c72331e9e247": [    "str1",    "str2"  ]}'
{
"data": [
{
"id": "2f5515b6-7e98-4f4d-9010-bfd2a27d4f35",
"name": "Conversation attribute",
"identifier": "conversation_attribute",
"value": "012345"
},
{
"id": "e14708a6-eed9-495c-9d88-c72331e9e247",
"name": "Conversation attribute 2",
"identifier": "conversation_attribute_2",
"value": [
"str1",
"str2"
]
}
]
}

Claim conversation

PUT
/beta/conversations/{conversationId}/claim

Claim a conversation for a given agent. To avoid taking over assigned conversations, set the force paremeter to false

Authorization

ApiKeyAuth conversation.claim
headerAuthorization<token>

Scope: conversation.claim

Path Parameters

conversationId*integer
Formatint64

Request Body

application/json
  1. body
agentId*string

The id of the agent who is claiming the conversation

Formatuuid
force?boolean

Set as false to avoid taking over the conversation if it is already assigned to an agent

Response Body

The conversation was successfully claimed

Example Request
curl -X PUT 'https://dev.dixa.io/beta/conversations/{conversationId}/claim' \  -H 'Authorization: <API token>' \  -H 'Content-Type: application/json' \  -d '{  "agentId": "5a556159-9c21-4f3e-a44f-d323deb80d16",  "force": false}'

Empty

List activity log

GET
/beta/conversations/{conversationId}/activitylog

Get the activity log for a conversation by providing the conversation id.

Authorization

ApiKeyAuth
headerAuthorization<token>

Path Parameters

conversationId*integer
Formatint64

Response Body

Activity log entries for a conversation

application/json
  1. response
data?array<>
Example Request
curl -X GET 'https://dev.dixa.io/beta/conversations/{conversationId}/activitylog' \  -H 'Authorization: <API token>'
{
"data": [
{
"id": "fca291e5-8670-41bd-b502-842fd9542e27",
"conversationId": 1,
"activityTimestamp": "2021-12-01T12:46:36.581Z[GMT]",
"activityType": "ConversationAssignedActivityType",
"_type": "ConversationAssigned",
"author": {
"id": "a53b25da-f676-4c52-acac-58c9280aa23d",
"name": "Dale Cooper",
"email": "dc@dixa.com",
"phoneNumber": "+4534343434"
}
}
]
}

Get conversation

GET
/beta/conversations/{conversationId}

Get a conversation by id.

Authorization

ApiKeyAuth
headerAuthorization<token>

Path Parameters

conversationId*integer
Formatint64

Response Body

The conversation

application/json
  1. response
data*||||||||||
Example Request
curl -X GET 'https://dev.dixa.io/beta/conversations/{conversationId}' \  -H 'Authorization: <API token>'
{
"data": {
"id": 1,
"requesterId": "d58c8b1c-85ad-4678-a6c8-7442945f3836",
"channel": "WidgetChat",
"createdAt": "2020-12-16T09:41:43Z",
"direction": "Outbound",
"state": "Open",
"stateUpdatedAt": "2020-12-16T09:41:43Z",
"assignment": {
"agentId": "0e4d0ead-dc69-470a-9b3a-e7eb16a56453",
"assignedAt": "2020-12-16T11:00:34Z"
},
"queue": {
"id": "cd87b232-64c8-4ad5-b81a-6f9233352d97",
"queuedAt": "2020-12-16T10:40:40Z"
},
"browserInfo": {
"name": "Chrome 9",
"version": "91.0.4472.114",
"ipAddress": "127.0.0.1",
"originatingUrl": "http://localhost:3000/"
},
"language": "en",
"link": {
"parentId": 1234,
"_type": "SideConversation"
},
"customAttributes": [
{
"id": "e14708a6-eed9-495c-9d88-c72331e9e247",
"name": "My Attribute",
"identifier": "my_attribute",
"value": "My Attribute Value"
}
],
"_type": "ChatConversation"
}
}
PUT
/beta/conversations/{conversationId}/link

Links the specified conversation to a parent conversation with the specified link type.

Limitations:

  • Maximum of 100 child conversations per parent
  • Only 1 parent per child conversation
  • A child conversation cannot have its own child conversations

Authorization

ApiKeyAuth conversation.reply
headerAuthorization<token>

Scope: conversation.reply

Path Parameters

conversationId*integer
Formatint64

Request Body

The parent conversation ID and link type

application/json
  1. body
parentId*integer
Formatint64
linkType*string

values: [Related, SideConversation]

Response Body

Example Request
curl -X PUT 'https://dev.dixa.io/beta/conversations/{conversationId}/link' \  -H 'Authorization: <API token>' \  -H 'Content-Type: application/json' \  -d '{  "parentId": 12345,  "linkType": "SideConversation"}'

Empty

GET
/beta/conversations/{conversationId}/linked

Lists all linked child conversations for the given conversation ID, such as transcripts and side conversations.

Authorization

ApiKeyAuth
headerAuthorization<token>

Path Parameters

conversationId*integer
Formatint64

Response Body

The list of conversations requested by an EndUser

application/json
  1. response
data?array<||||||||||>
Example Request
curl -X GET 'https://dev.dixa.io/beta/conversations/{conversationId}/linked' \  -H 'Authorization: <API token>'
{
"data": [
{
"id": 12341,
"requesterId": "7bcf1f2d-70c0-4f87-8c5b-bed2c8b247e9",
"channel": "WidgetChat",
"createdAt": "2022-07-26T12:09:21Z",
"direction": "Inbound",
"state": "Open",
"stateUpdatedAt": "2022-07-26T12:12:53Z",
"assignment": {
"agentId": "01107a2e-4ff0-4a87-bb48-a19af298394d",
"assignedAt": "2022-07-26T12:12:53Z"
},
"queue": {
"id": "6b9087b3-9ab7-4af4-936d-3290996faedb",
"queuedAt": "2022-07-26T12:09:54Z"
},
"toEmail": "something@email.dixa.com",
"fromEmail": "some.one@somewhere.com",
"integrationEmail": "something@email.dixa.com",
"language": "en",
"subject": "Important Request",
"link": {
"parentId": 1234,
"_type": "SideConversation"
},
"_type": "EmailConversation"
}
]
}

Search conversations

Deprecated
GET
/beta/search/conversations

NOTE: This endpoint is deprecated and is replaced with POST /search/conversations. Search for conversations containing a particular text.

Authorization

ApiKeyAuth
headerAuthorization<token>

Query Parameters

pageLimit?integer

Maximum number of results per page. May be used in combination with pageKey to change the number of results in between page requests.

Formatint32
pageKey?string

Base64 encoded form of pagination query parameters. Do not try to construct or change programmatically as the internal structure may change without notice.

query*string

The text by which to search conversations

Length1 <= length
exactMatch?boolean

Return only exact matches. This value is false by default.

Response Body

The search results for the searched parameters

application/json
  1. response
data?array<>
meta?
Example Request
curl -X GET 'https://dev.dixa.io/beta/search/conversations?query=cancel+my+order' \  -H 'Authorization: <API token>'
{
"data": [
{
"id": 1234,
"highlights": {
"subject": [
"<em class=\"highlight\">Cancel my order</em>"
]
},
"innerHits": []
}
]
}
POST
/beta/search/conversations

Search for conversations containing a particular text or by filter or combine them both

Authorization

ApiKeyAuth
headerAuthorization<token>

Query Parameters

pageLimit?integer

Maximum number of results per page. May be used in combination with pageKey to change the number of results in between page requests.

Formatint32
pageKey?string

Base64 encoded form of pagination query parameters. Do not try to construct or change programmatically as the internal structure may change without notice.

Request Body

The filters to apply to the search

application/json
  1. body
query?
filters?

Response Body

The search results for the searched parameters

application/json
  1. response
data?array<>
meta?
curl -X POST 'https://dev.dixa.io/beta/search/conversations' \  -H 'Authorization: <API token>' \  -H 'Content-Type: application/json' \  -d '{  "filters": {    "strategy": "All",    "conditions": [      {        "field": {          "operator": {            "values": [              "177e7564-6434-4177-a25a-8530089196ad",              "7729e7564-9876-a637-b46b-8530038196b3"            ],            "_type": "IncludesOne"          },          "_type": "TagId"        }      }    ]  }}'
{
"data": [
{
"id": 1234,
"highlights": {}
},
{
"id": 2345,
"highlights": {}
},
{
"id": 3456,
"highlights": {}
}
],
"meta": {
"next": "/<api-version>/search/conversations/?pageKey=cGFnZUxpbWl0PTUwJnBhZ2U9MQ%3D%3D:"
}
}