AurionAI Docs

Conversations

Manage omnichannel conversations — email, chat, WhatsApp, and voice — via the Aurion API.

⚠️ Preview — not yet in the public API

The endpoints on this page are part of the AurionAI helpdesk and are currently accessible only through an authenticated dashboard session. They are not yet exposed through public API keys — a request authenticated with X-API-Key returns 403. Public API-key access is planned. The reference below documents the intended contract.

Conversations

The Conversations API (v2) provides a unified interface for managing support conversations across all channels — email, chat, WhatsApp, and voice. This is the primary API for the Aurion CS helpdesk platform.

List Conversations

cURL
curl "https://apps.aurionai.net/api/v2/conversations?status=open&limit=10" \
  -H "X-API-Key: itsm_sk_live_xxxx"
Python
import requests

response = requests.get(
    "https://apps.aurionai.net/api/v2/conversations",
    headers={"X-API-Key": "itsm_sk_live_xxxx"},
    params={"status": "open", "limit": 10},
)
conversations = response.json()
TypeScript
const response = await fetch(
  "https://apps.aurionai.net/api/v2/conversations?status=open&limit=10",
  {
    headers: { "X-API-Key": "itsm_sk_live_xxxx" },
  }
);
const conversations = await response.json();

Response:

{
  "items": [
    {
      "id": "3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34",
      "ticket_number": 142,
      "subject": "Cannot access email",
      "status": "open",
      "priority": "high",
      "channel": "email",
      "contact_id": "7c1e9a44-2f8b-4d63-9e10-3a5c8b7d6e21",
      "contact_name": "Jane Smith",
      "assignee_team_id": "b21d4f60-7a3c-49e8-8f1d-2c6b9e4a0d57",
      "assignee_user_id": "9e4a0d57-1b2c-4d3e-8a6f-7c0b5e2d1a48",
      "assignee_team_name": "IT Support",
      "assignee_user_name": "John Doe",
      "last_message_snippet": "Thanks, that worked!",
      "is_read": false,
      "tags": ["email", "access"],
      "created_at": "2026-03-08T09:15:00Z",
      "updated_at": "2026-03-08T10:30:00Z"
    }
  ],
  "total": 48,
  "limit": 10,
  "offset": 0
}

Query Parameters:

ParameterTypeDescription
statusstringopen, pending, resolved, closed
prioritystringlow, medium, high, urgent
channelstringemail, chat, whatsapp, voice, widget
assignee_team_idstringFilter by team (UUID)
assignee_user_idstringFilter by assigned agent (UUID)
contact_idstringFilter by contact (UUID)
tagsstringComma-separated tag filter
searchstringFull-text search in subject and messages (min 2 characters)
limitintegerResults per page (default: 50, max: 100)
offsetintegerNumber of results to skip

Get Conversation

curl "https://apps.aurionai.net/api/v2/conversations/3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34" \
  -H "X-API-Key: itsm_sk_live_xxxx"

Query Parameters:

ParameterTypeDescription
include_deletedbooleanInclude soft-deleted conversations in the lookup (default: false)

Create Conversation

Creates a new conversation. There is no nested message object — the first message body is taken from the top-level description field. Returns 201 Created.

curl -X POST "https://apps.aurionai.net/api/v2/conversations" \
  -H "X-API-Key: itsm_sk_live_xxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "contact_id": "7c1e9a44-2f8b-4d63-9e10-3a5c8b7d6e21",
    "subject": "Password reset request",
    "description": "I need help resetting my corporate email password.",
    "channel": "agent_created",
    "priority": "medium"
  }'

Request Body:

FieldTypeDescription
contact_idstringAurionAI contact UUID (required)
channelstringSource channel (default: agent_created)
subjectstringConversation subject (max 500)
descriptionstringFirst message body (max 5000)
prioritystringlow, medium, high, urgent
categorystringCategory (max 120)
form_idstringCustom form id to validate against
form_dataobjectStructured form field values
custom_attrsobjectArbitrary custom attributes
assignee_user_idstringAssign to an agent on create (UUID)
assignee_team_idstringAssign to a team on create (UUID)

Response: AgentConversationCreateResponse{ id, ticket_number, status, priority, subject, created_at, assignee_user_id, assignee_team_id }.

Add Message

Post a message (public reply, internal note, or forward) to a conversation. Returns 201 Created. There is no /reply endpoint — use POST /{id}/messages. The optional Idempotency-Key header makes retries safe.

curl -X POST "https://apps.aurionai.net/api/v2/conversations/3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34/messages" \
  -H "X-API-Key: itsm_sk_live_xxxx" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 5f0a1e8c-3b2d-4a91-8c7e-1d6f0b3a9e25" \
  -d '{
    "body": "I have reset your password. Please check your email for the new credentials.",
    "content_type": "text",
    "is_internal": false
  }'

Request Body:

FieldTypeDescription
bodystringMessage text (0-4000; may be empty only when a template is referenced via metadata.template_id)
body_htmlstringOptional HTML body
content_typestringOne of text, note_public, note_private, forward (default: text)
is_internalbooleanWhether the message is an internal note hidden from the contact (default: false)
versionintegerOptional optimistic-concurrency version of the conversation
metadataobjectArbitrary metadata (e.g. template_id for template sends)
attachment_idsarrayPre-uploaded attachment UUIDs to attach
to / cc / bccarrayExplicit recipient lists for reply / forward
next_statusstringOptional status to move the conversation to with this reply: open, pending, waiting, resolved (ignored when is_internal=true)

Message Content Types:

content_typeDescription
textPublic reply visible to the contact
note_publicNote visible to the contact
note_privatePrivate internal note (not visible to the contact)
forwardForward the conversation to an external recipient

Public vs. private is expressed by content_type together with is_internal — there are no reply/note content types.

Update Conversation

curl -X PATCH "https://apps.aurionai.net/api/v2/conversations/3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34" \
  -H "X-API-Key: itsm_sk_live_xxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "resolved",
    "priority": "low",
    "tags": ["resolved", "password"]
  }'

Assign Conversation

curl -X POST "https://apps.aurionai.net/api/v2/conversations/3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34/assign" \
  -H "X-API-Key: itsm_sk_live_xxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": "9e4a0d57-1b2c-4d3e-8a6f-7c0b5e2d1a48",
    "team_id": "b21d4f60-7a3c-49e8-8f1d-2c6b9e4a0d57"
  }'

Request Body:

FieldTypeDescription
user_idstringTarget agent UUID (optional)
team_idstringTarget team UUID (optional)
required_skillsarraySkills the assignee must have for routing (optional)

Conversation Lifecycle

open → pending → resolved → closed
  ↑                           |
  └───── reopen ──────────────┘

Channels

ChannelDescription
emailConversations from email channels
chatLive chat widget conversations
whatsappWhatsApp Business conversations
voiceVoice call conversations (linked to call records)
widgetWeb widget conversations

Conversation vs Ticket

  • Conversations are the v2 API for the Aurion CS helpdesk — omnichannel, real-time, with rich threading
  • Tickets are the v1 API that maps to your external ITSM provider (Freshservice, HaloITSM, ServiceNow, JSM)

Both can coexist. Voice calls can create either tickets (ITSM flow) or conversations (CS flow) depending on your configuration.

Search & Filter

Search Conversations

Use the search endpoint for advanced filtering with conditions-based queries.

curl -X POST "https://apps.aurionai.net/api/v2/conversations/search" \
  -H "X-API-Key: itsm_sk_live_xxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "match": "all",
    "conditions": [
      { "field": "status", "operator": "is", "value": "open" },
      { "field": "priority", "operator": "includes", "values": ["high", "urgent"] }
    ],
    "search": "email access",
    "sort_by": "updated_at",
    "sort_order": "desc",
    "limit": 25,
    "offset": 0
  }'

Request Body:

FieldTypeDescription
matchstringall (AND) or any (OR) for combining conditions (default: all)
conditionsarrayFilter conditions (see below)
searchstringFull-text search in subject and messages
sort_bystringSort field (default: updated_at)
sort_orderstringasc or desc (default: desc)
limitintegerResults per page (1-100, default: 50)
offsetintegerNumber of results to skip (default: 0)

Filter Condition:

FieldTypeDescription
fieldstringField to filter on (e.g., status, priority, channel, assignee_user_id)
operatorstringis, is_not, includes, excludes, contains, does_not_contain, in_the_last, before, after, between
valuestringSingle value for is, is_not, contains, does_not_contain operators
valuesarrayMultiple values for includes, excludes operators

Response: Same format as List Conversations.

Get Filter Options

Returns available filter options for the inbox (statuses, priorities, channels, teams, agents, tags).

curl "https://apps.aurionai.net/api/v2/conversations/filter-options" \
  -H "X-API-Key: itsm_sk_live_xxxx"
{
  "statuses": ["open", "pending", "resolved", "closed"],
  "priorities": ["low", "medium", "high", "urgent"],
  "channels": ["email", "chat", "whatsapp", "voice", "widget"],
  "teams": [{ "id": "b21d4f60-7a3c-49e8-8f1d-2c6b9e4a0d57", "name": "IT Support" }],
  "agents": [{ "id": "9e4a0d57-1b2c-4d3e-8a6f-7c0b5e2d1a48", "name": "John Doe" }],
  "tags": ["email", "access", "password"]
}

Search Tags

Search for existing conversation tags by prefix.

curl "https://apps.aurionai.net/api/v2/conversations/tags/search?q=pass&limit=10" \
  -H "X-API-Key: itsm_sk_live_xxxx"

Query Parameters:

ParameterTypeDescription
qstringSearch query (max 120 characters)
limitintegerMax results (1-50, default: 15)
{
  "items": ["password", "password-reset", "passthrough"]
}

Assignment

Unassign Conversation

Remove the current assignee from a conversation.

curl -X POST "https://apps.aurionai.net/api/v2/conversations/3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34/unassign" \
  -H "X-API-Key: itsm_sk_live_xxxx"
{
  "status": "unassigned"
}

Reassign Conversation

Reassign a conversation to a different agent or team. If only team_id is provided, the system automatically picks an eligible agent via round-robin routing.

curl -X POST "https://apps.aurionai.net/api/v2/conversations/3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34/reassign" \
  -H "X-API-Key: itsm_sk_live_xxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": "2d1a4807-9e4a-4d3e-8a6f-7c0b5e2d1b9c",
    "team_id": "b21d4f60-7a3c-49e8-8f1d-2c6b9e4a0d57"
  }'

Request Body:

FieldTypeDescription
user_idstringTarget agent ID (optional; auto-assigned if omitted)
team_idstringTarget team ID (optional)
{
  "assignee_user_id": "2d1a4807-9e4a-4d3e-8a6f-7c0b5e2d1b9c",
  "assignee_team_id": "b21d4f60-7a3c-49e8-8f1d-2c6b9e4a0d57",
  "routing_reason": "manual_reassignment"
}

Parent-Child Relationships

List Child Conversations

Get all child conversations linked to a parent.

curl "https://apps.aurionai.net/api/v2/conversations/3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34/children" \
  -H "X-API-Key: itsm_sk_live_xxxx"
[
  {
    "id": "6b5e0d1f-2a34-4c7f-8a21-3f8c2b1a9d4e",
    "subject": "Follow-up: Email access",
    "status": "open",
    "priority": "medium",
    "channel": "email",
    "contact_name": "Jane Smith",
    "created_at": "2026-03-09T14:00:00Z",
    "updated_at": "2026-03-09T15:30:00Z"
  }
]

Set Parent Conversation

Link a conversation as a child of another conversation.

curl -X POST "https://apps.aurionai.net/api/v2/conversations/6b5e0d1f-2a34-4c7f-8a21-3f8c2b1a9d4e/parent" \
  -H "X-API-Key: itsm_sk_live_xxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "parent_id": "3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34"
  }'

Response: Returns the updated conversation detail.

Activity Export

Export Conversation Activities

Export the full activity log for a conversation as CSV or JSON.

curl "https://apps.aurionai.net/api/v2/conversations/3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34/activities/export?format=csv" \
  -H "X-API-Key: itsm_sk_live_xxxx" \
  -o activities.csv

Query Parameters:

ParameterTypeDescription
formatstringcsv or json (default: csv)

Returns a file download with Content-Disposition: attachment.

Linking & Relationships

Get Linked Items

List all conversations linked to this conversation.

curl "https://apps.aurionai.net/api/v2/conversations/3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34/links" \
  -H "X-API-Key: itsm_sk_live_xxxx"
[
  {
    "id": "4c5d6e7f-8a9b-4c0d-1e2f-3a4b5c6d7e8f",
    "linked_conversation_id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
    "link_type": "related",
    "subject": "Printer not working",
    "status": "open",
    "priority": "medium",
    "created_at": "2026-03-08T11:00:00Z"
  }
]

Link Types: related, parent, child, duplicate

Delete a link between two conversations.

curl -X DELETE "https://apps.aurionai.net/api/v2/conversations/3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34/links/4c5d6e7f-8a9b-4c0d-1e2f-3a4b5c6d7e8f" \
  -H "X-API-Key: itsm_sk_live_xxxx"
{
  "status": "deleted",
  "id": "4c5d6e7f-8a9b-4c0d-1e2f-3a4b5c6d7e8f"
}

Attachments

Download Attachment

Download an attachment file directly. For S3-stored files, returns a 302 redirect to a presigned URL.

curl "https://apps.aurionai.net/api/v2/conversations/3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34/attachments/0e1f2a3b-4c5d-4e6f-8a9b-0c1d2e3f4a5b/download" \
  -H "X-API-Key: itsm_sk_live_xxxx" \
  -o attachment.pdf

Returns the file contents with appropriate Content-Type header. If malware scanning is enabled, files pending scan return 202 Accepted with a Retry-After header, and quarantined files return 410 Gone.

Delete Attachment

Remove an attachment from a conversation. Also deletes the file from storage (S3 or local).

curl -X DELETE "https://apps.aurionai.net/api/v2/conversations/3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34/attachments/0e1f2a3b-4c5d-4e6f-8a9b-0c1d2e3f4a5b" \
  -H "X-API-Key: itsm_sk_live_xxxx"
{
  "status": "deleted",
  "id": "0e1f2a3b-4c5d-4e6f-8a9b-0c1d2e3f4a5b"
}

Resolution

Get Resolution

Retrieve the resolution details for a conversation.

curl "https://apps.aurionai.net/api/v2/conversations/3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34/resolution" \
  -H "X-API-Key: itsm_sk_live_xxxx"
{
  "id": "8a9b0c1d-2e3f-4a5b-6c7d-8e9f0a1b2c3d",
  "conversation_id": "3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34",
  "root_cause": "Expired Active Directory password",
  "actions_taken": "Reset password and updated group policy",
  "resolution": "User can now access email normally",
  "ai_generated": false
}

Set Resolution

Create or update the resolution for a conversation.

curl -X PUT "https://apps.aurionai.net/api/v2/conversations/3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34/resolution" \
  -H "X-API-Key: itsm_sk_live_xxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "root_cause": "Expired Active Directory password",
    "actions_taken": "Reset password and updated group policy",
    "resolution": "User can now access email normally",
    "ai_generated": false
  }'

Request Body:

FieldTypeDescription
root_causestringRoot cause of the issue
actions_takenstringActions taken to resolve
resolutionstringResolution summary
ai_generatedbooleanWhether the resolution was AI-generated (default: false)

Response: Returns the saved resolution object.

Lifecycle Operations

Mark as Spam

Flag a conversation as spam. Removes it from the active inbox.

curl -X POST "https://apps.aurionai.net/api/v2/conversations/3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34/spam" \
  -H "X-API-Key: itsm_sk_live_xxxx"
{
  "status": "spam_marked"
}

Unmark Spam

Restore a conversation that was previously flagged as spam.

curl -X POST "https://apps.aurionai.net/api/v2/conversations/3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34/unspam" \
  -H "X-API-Key: itsm_sk_live_xxxx"
{
  "status": "spam_unmarked"
}

Delete Conversation

Soft-delete a conversation. Can be restored later.

curl -X DELETE "https://apps.aurionai.net/api/v2/conversations/3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34" \
  -H "X-API-Key: itsm_sk_live_xxxx"
{
  "status": "deleted"
}

Restore Conversation

Restore a previously soft-deleted conversation.

curl -X POST "https://apps.aurionai.net/api/v2/conversations/3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34/restore" \
  -H "X-API-Key: itsm_sk_live_xxxx"
{
  "status": "restored"
}

Archive Conversation

Move a conversation to the archive. Only conversations that are not already archived, deleted, or spam can be archived.

curl -X POST "https://apps.aurionai.net/api/v2/conversations/3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34/archive" \
  -H "X-API-Key: itsm_sk_live_xxxx"
{
  "status": "archived"
}

Unarchive Conversation

Restore a conversation from the archive back to the active inbox.

curl -X POST "https://apps.aurionai.net/api/v2/conversations/3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34/unarchive" \
  -H "X-API-Key: itsm_sk_live_xxxx"
{
  "status": "unarchived"
}

Mark as Read

Mark a conversation as read for the current user.

curl -X PATCH "https://apps.aurionai.net/api/v2/conversations/3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34/read" \
  -H "X-API-Key: itsm_sk_live_xxxx"
{
  "status": "read"
}

Sharing

Get Shared Conversation

Retrieve a conversation via a share token. No authentication required — the token acts as the access credential.

curl "https://apps.aurionai.net/api/v2/conversations/share/sh_4f9a2c7e8b1d6e0a"
{
  "id": "3f8c2b1a-9d4e-4c7f-8a21-6b5e0d1f2a34",
  "subject": "Cannot access email",
  "channel": "email",
  "status": "open",
  "messages": [
    {
      "id": "c3d4e5f6-7a8b-4c9d-0e1f-2a3b4c5d6e7f",
      "body": "I need help with my email access.",
      "sender_type": "contact",
      "created_at": "2026-03-08T09:15:00Z"
    }
  ],
  "resolution": null,
  "attachments": [],
  "expires_at": "2026-04-08T09:15:00Z",
  "permission": "view_only"
}

Permissions: view_only (read-only access) or view_and_comment (can add comments).

Returns 410 Gone if the share link has expired, or 404 if the conversation no longer exists.

Add Comment on Shared Conversation

Add a comment to a shared conversation. Only available when the share link permission is view_and_comment.

curl -X POST "https://apps.aurionai.net/api/v2/conversations/share/sh_4f9a2c7e8b1d6e0a/comments" \
  -H "Content-Type: application/json" \
  -d '{
    "body": "I tried the suggested fix and it worked.",
    "author_name": "Jane Smith"
  }'

Request Body:

FieldTypeDescription
bodystringComment text (1-5000 characters)
author_namestringDisplay name of the commenter (default: Anonymous, max 200 characters)
{
  "id": "d7e8f9a0-1b2c-4d3e-5f6a-7b8c9d0e1f2a",
  "body": "I tried the suggested fix and it worked.",
  "author_name": "Jane Smith",
  "created_at": "2026-03-08T12:00:00Z"
}

Returns 403 Forbidden if the share link is view-only.

Required Permissions

Each endpoint is gated by a dashboard-session permission. The four permissions used by this router are conversations:read, conversations:write, conversations:delete, and conversations:archive, plus a role check on activity export.

PermissionEndpoints
conversations:readGET /v2/conversations, GET /v2/conversations/:id, GET /v2/conversations/:id/children, GET /v2/conversations/:id/links, GET /v2/conversations/:id/resolution, GET /v2/conversations/:id/attachments/:id/download, GET /v2/conversations/filter-options, GET /v2/conversations/tags/search, POST /v2/conversations/search, PATCH /v2/conversations/:id/read
conversations:writePOST /v2/conversations, PATCH /v2/conversations/:id, POST /v2/conversations/:id/messages, POST /v2/conversations/:id/assign, POST /v2/conversations/:id/reassign, POST /v2/conversations/:id/unassign, POST /v2/conversations/:id/parent, PUT /v2/conversations/:id/resolution, POST /v2/conversations/:id/spam, POST /v2/conversations/:id/unspam, DELETE /v2/conversations/:id/links/:id, DELETE /v2/conversations/:id/attachments/:id
conversations:deleteDELETE /v2/conversations/:id, POST /v2/conversations/:id/restore
conversations:archivePOST /v2/conversations/:id/archive, POST /v2/conversations/:id/unarchive
admin / owner roleGET /v2/conversations/:id/activities/export (requires super_admin, tenant_owner, or tenant_admin — not a scope)

When public API-key access ships, the allowlist only ever derives {resource}:read and {resource}:write from the request path — so conversations:delete and conversations:archive are dashboard-session permissions that would not be reachable as API-key scopes, and the export endpoint is role-gated rather than scope-gated.

On this page