Dstny Conversational Intelligence 2.0 REST API (v1)

Download OpenAPI specification:

External, token-authenticated API for customer integrations.

Authentication

Send an API token in every request:

Authorization: Bearer mt_...

Manage tokens

Create/revoke tokens and configure webhooks in the app: Settings → REST API

Scopes

  • conversations: list/get conversations
  • transcripts: per-conversation transcript
  • insights: per-conversation insights/topics
  • recordings: per-conversation recording URL (also requires token setting include_recordings=true)
  • users, teams, departments: reference endpoints

Rate limits & quotas (defaults)

  • 60 requests/minute per token (configurable).
  • 1000 unique conversations/day per token (configurable).

Limits

  • Conversation list endpoints return up to the last 30 days.
  • Cursor pagination (max 25/page).
  • Transcripts and insights are retrieved per conversation.

Webhooks

We send conversation.completed webhooks when a conversation is fully processed. Requests are HMAC-SHA256 signed using your webhook secret.

Headers

  • X-Webhook-Signature: sha256=<HMAC-SHA256 of raw request body>
  • X-Webhook-Event: conversation.completed
  • X-Webhook-Delivery-Id: <uuid>
  • X-Webhook-Timestamp: <unix timestamp>

Payload (example)

{
  "event": "conversation.completed",
  "timestamp": "2026-02-08T00:00:00.000Z",
  "data": {
    "conversation": {
      "id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
      "title": "Discovery call — Acme",
      "company": "Acme",
      "date": "2026-02-07T09:00:00.000Z",
      "duration": 1800,
      "medium": "call",
      "sentiment": "positive",
      "conversation_type": "sales",
      "summary": "Summary text...",
      "department": { "id": "11111111-0000-0000-0000-000000000001", "name": "B2B Sales" },
      "user": { "id": "67c869eb-30b1-4eb3-bd2c-be8c912a9827", "name": "Erik Lindström", "email": "erik.lindstrom@telco-demo.test" },
      "participants": [{ "name": "Jane Doe", "email": "jane@acme.com", "role": "customer" }]
    }
  },
  "_meta": {
    "token_prefix": "mt_ab12cd34",
    "delivery_id": "bbbbbbbb-cccc-dddd-eeee-ffffffffffff"
  }
}

REST API

Get account

Returns basic account info and branding fields. Useful for verifying token/account context.

Authorizations:
apiToken

Responses

Response samples

Content type
application/json
{
  • "id": "fb1919a3-3ba7-4427-b04e-b49a592804fc",
  • "name": "Telco Demo",
  • "created_at": "2026-01-10T17:31:07.548Z",
  • "updated_at": "2026-02-07T12:00:00.000Z",
  • "brand_name": "Dstny",
  • "brand_logo_url": null,
  • "_meta": {
    }
}

List users

Lists active users in the account. Requires scope: users.

Authorizations:
apiToken

Responses

Response samples

Content type
application/json
{
  • "users": [
    ],
  • "_meta": {
    }
}

List teams

Lists teams with members. Requires scope: teams.

Authorizations:
apiToken

Responses

Response samples

Content type
application/json
{
  • "teams": [
    ],
  • "_meta": {
    }
}

List departments

Lists enabled departments. Requires scope: departments.

Authorizations:
apiToken

Responses

Response samples

Content type
application/json
{
  • "departments": [
    ],
  • "_meta": {
    }
}

List conversations

Lists conversations in the last 30 days. Cursor pagination, max 25/page. Requires scope: conversations.

Authorizations:
apiToken
query Parameters
cursor
string

Pagination cursor (ISO timestamp). Use pagination.next_cursor from the previous response.

limit
string

Results per page (max 25). Default: 25.

department_id
string

Filter by department UUID.

medium
string

Filter by medium. One of: call, video, email, chat, live.

date_from
string

Filter from date (ISO timestamp).

date_to
string

Filter to date (ISO timestamp).

user_id
string

Filter by user UUID.

Responses

Response samples

Content type
application/json
{
  • "conversations": [
    ],
  • "pagination": {
    },
  • "_meta": {
    }
}

Get conversation

Returns conversation detail (summary, participants). Optionally includes transcript/insights if requested and the token has those scopes.

Authorizations:
apiToken
path Parameters
id
required
string

Conversation UUID.

query Parameters
include_transcript
string

When true, include transcript data (requires scope: transcripts).

include_insights
string

When true, include insights/topics (requires scope: insights).

Responses

Response samples

Content type
application/json
{
  • "id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  • "title": "Discovery call — Acme",
  • "company": "Acme",
  • "date": "2026-02-07T09:00:00.000Z",
  • "duration": 1800,
  • "medium": "call",
  • "sentiment": "positive",
  • "conversation_type": "sales",
  • "summary": "Summary text...",
  • "department": {
    },
  • "user": {
    },
  • "participants": [
    ],
  • "_meta": {
    }
}

Get transcript

Returns transcript data for a single conversation. Requires scope: transcripts.

Authorizations:
apiToken
path Parameters
id
required
string

Conversation UUID.

Responses

Response samples

Content type
application/json
{
  • "conversation_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  • "transcript": {
    },
  • "_meta": {
    }
}

Get insights/topics

Returns extracted insights for a single conversation. Requires scope: insights.

Authorizations:
apiToken
path Parameters
id
required
string

Conversation UUID.

Responses

Response samples

Content type
application/json
{
  • "conversation_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  • "insights": [
    ],
  • "_meta": {
    }
}

Get recording URL

Returns a recording URL if available. Requires scope: recordings and token setting include_recordings=true.

Authorizations:
apiToken
path Parameters
id
required
string

Conversation UUID.

Responses

Response samples

Content type
application/json
{
  • "conversation_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  • "has_recording": true,
  • "_meta": {
    }
}

Get summary

Returns the stored AI summary for a single conversation. Requires scope: conversations.

Authorizations:
apiToken
path Parameters
id
required
string

Conversation UUID.

Responses

Response samples

Content type
application/json
{
  • "conversation_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  • "summary": "Customer wants a follow-up on pricing and onboarding timeline.",
  • "created_at": "2026-02-07T09:04:50.000Z",
  • "updated_at": "2026-02-07T09:05:10.000Z",
  • "_meta": {
    }
}

Request notetaker

Requests a notetaker to join an ad-hoc Zoom, Microsoft Teams, or Google Meet URL immediately. Requires scope: notetaker.

Authorizations:
apiToken
Request Body schema: application/json
required
meeting_url
required
string

Zoom, Microsoft Teams, or Google Meet URL.

meeting_title
string

Optional title stored with the notetaker request.

meeting_start_time
string <date-time>

Optional scheduled start time if this is not an immediate join.

meeting_end_time
string <date-time>

Optional scheduled end time.

meeting_platform
string

Optional platform hint. The backend also infers this from the URL.

Responses

Request samples

Content type
application/json
{
  • "meeting_title": "Customer sync",
  • "meeting_start_time": "2019-08-24T14:15:22Z",
  • "meeting_end_time": "2019-08-24T14:15:22Z",
  • "meeting_platform": "google_meet"
}

Response samples

Content type
application/json
{
  • "id": "cccccccc-dddd-eeee-ffff-111111111111",
  • "provider_bot_id": "bot_123",
  • "meeting_platform": "google_meet",
  • "meeting_title": null,
  • "meeting_start_time": null,
  • "status": "joining",
  • "status_message": null,
  • "conversation_id": null,
  • "created_at": "2026-02-07T09:04:50.000Z",
  • "_meta": {
    }
}

List webhook deliveries

Lists recent webhook deliveries (last 7 days).

Authorizations:
apiToken
query Parameters
token_id
string

Filter by API token UUID.

Responses

Response samples

Content type
application/json
{
  • "deliveries": [
    ],
  • "_meta": {
    }
}