Where the time went in each turn of one call. Every time is in milliseconds from the moment the caller stopped speaking, so a turn reads as a row of steps: the recogniser’s wait and the caller’s final words, Ear’s check, the turn being decided, the model being asked, the first words of the answer leaving the model, the first sound of any kind, and the answer being heard. split adds up the pieces a team works on: the wait before the turn was decided, the recogniser, Ear’s check, the model’s first sentence and the voice.
answerAudioMs is the time to the first word of the ACTUAL answer. quality.responseMs stops at the first sound of any kind, so a thinking line that plays first ends it; here firstAudioKind says what spoke first (answer, filler or other) and answerAudioEstimated is true when a filler spoke first and the answer’s start is worked out from the audio queued behind it rather than heard directly. A step that did not happen on a turn is null, never zero. A negative modelAskedMs is real: with earlyAnswers the model is asked before the turn is decided.
timeline is null for a call that has none: a call from before this existed, or one on a call type that does not record it. It holds times only, no words, so it stays when a call’s content is deleted. Any id List Calls hands out works.
Your API key (ta_live_…) from Settings → API keys, sent as Authorization: Bearer <key>. Keep it on a server: it can message every customer you have. A key is full, build or read-only; a request its level does not allow is refused with 403.
Developers only: the customer workspace this request acts in — its org_… id from POST /customers. Leave it out to act in your own workspace. Refused with 404 (Workspace not found.) when the id is unknown, is not one of your customers, or is not an org_… id; 410 when that customer was deleted (restore it with POST /customers/{id}/restore until it is erased); 403 when the key belongs to one customer workspace (it cannot act as another); 400 when your workspace is not a developer workspace. /customers/* and GET /customers/usage are your own workspace's and refuse the header with 400: call them without it.
Null for a call that has none: from before this existed, or on a call type that does not record it.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"ThinnestAI","description":"One AI agent that answers on your website, WhatsApp and Telegram — and remembers the same customer across all of them.","colors":{"primary":"#ff4e01","light":"#ff7a3d","dark":"#e64600"},"logo":{"light":"https://mintcdn.com/thinnestai/v8t9Y30dpMuNl6ae/logo/light.svg?fit=max\u0026auto=format\u0026n=v8t9Y30dpMuNl6ae\u0026q=85\u0026s=b9c83749f4bae8ed15285bc7d2b3dec4","dark":"https://mintcdn.com/thinnestai/v8t9Y30dpMuNl6ae/logo/dark.svg?fit=max\u0026auto=format\u0026n=v8t9Y30dpMuNl6ae\u0026q=85\u0026s=e25aa9f9221cebcb813fa71c39f72037"},"favicon":"https://mintcdn.com/thinnestai/v8t9Y30dpMuNl6ae/favicon.png?fit=max\u0026auto=format\u0026n=v8t9Y30dpMuNl6ae\u0026q=85\u0026s=71b74c45d3942ee0cf5d5fec76b24991","api":{"playground":{"display":"interactive"},"examples":{"languages":["curl","javascript","python"]}},"navbar":{"primary":{"type":"button","label":"Open the console","href":"https://thinnest.ai/app"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"thinnestai","hasAudioNarration":false,"actualSubdomain":"thinnestai","customDomains":["docs.thinnest.ai"],"gitSource":{"type":"github","owner":"ashutoshkaremore","repo":"thin-agents-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae0bb0e8f66b62075da5c88","collectionId":"1e653aa9-cda2-4447-9f8f-366f7431bf79","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae0bb0e8f66b62075da5c88"},"entitlements":{},"buildId":"6ae0c1b3f01d62d53392d113","clientVersion":"0.0.3971","searchFilterCounts":[{"language":"default","tag":"API reference","count":209},{"language":"default","tag":"Documentation","count":55},{"language":"default","tag":"Guides","count":15},{"language":"default","tag":"Tools","count":15},{"language":"default","tag":"Channels","count":13},{"language":"default","tag":"Phone numbers","count":13},{"language":"default","tag":"Reaching out","count":10},{"language":"default","tag":"Agents","count":10},{"language":"default","tag":"Your agent","count":9},{"language":"default","tag":"Customers","count":9}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/calls/get-call-timeline","slug":"/api-reference/calls/get-call-timeline","pageMetadata":{"title":"Get Call Timeline","description":"Where the time went in each turn of one call. Every time is in milliseconds from the moment the caller stopped speaking, so a turn reads as a row of steps: the recogniser's wait and the caller's final words, Ear's check, the turn being decided, the model being asked, the first words of the answer leaving the model, the first sound of any kind, and the answer being heard. `split` adds up the pieces a team works on: the wait before the turn was decided, the recogniser, Ear's check, the model's first sentence and the voice.\n\n`answerAudioMs` is the time to the first word of the ACTUAL answer. `quality.responseMs` stops at the first sound of any kind, so a thinking line that plays first ends it; here `firstAudioKind` says what spoke first (`answer`, `filler` or `other`) and `answerAudioEstimated` is true when a filler spoke first and the answer's start is worked out from the audio queued behind it rather than heard directly. A step that did not happen on a turn is null, never zero. A negative `modelAskedMs` is real: with `earlyAnswers` the model is asked before the turn is decided.\n\n`timeline` is null for a call that has none: a call from before this existed, or one on a call type that does not record it. It holds times only, no words, so it stays when a call's content is deleted. Any id List Calls hands out works.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /calls/{id}/timeline","href":"/api-reference/calls/get-call-timeline","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Where the time went in each turn of one call. Every time is in milliseconds from the moment the caller stopped speaking, so a turn reads as a row of steps: the recogniser’s wait and the caller’s final words, Ear’s check, the turn being decided, the model being asked, the first words of the answer leaving the model, the first sound of any kind, and the answer being heard. \", _jsx(_components.code, {\n children: \"split\"\n }), \" adds up the pieces a team works on: the wait before the turn was decided, the recogniser, Ear’s check, the model’s first sentence and the voice.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"answerAudioMs\"\n }), \" is the time to the first word of the ACTUAL answer. \", _jsx(_components.code, {\n children: \"quality.responseMs\"\n }), \" stops at the first sound of any kind, so a thinking line that plays first ends it; here \", _jsx(_components.code, {\n children: \"firstAudioKind\"\n }), \" says what spoke first (\", _jsx(_components.code, {\n children: \"answer\"\n }), \", \", _jsx(_components.code, {\n children: \"filler\"\n }), \" or \", _jsx(_components.code, {\n children: \"other\"\n }), \") and \", _jsx(_components.code, {\n children: \"answerAudioEstimated\"\n }), \" is true when a filler spoke first and the answer’s start is worked out from the audio queued behind it rather than heard directly. A step that did not happen on a turn is null, never zero. A negative \", _jsx(_components.code, {\n children: \"modelAskedMs\"\n }), \" is real: with \", _jsx(_components.code, {\n children: \"earlyAnswers\"\n }), \" the model is asked before the turn is decided.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"timeline\"\n }), \" is null for a call that has none: a call from before this existed, or one on a call type that does not record it. It holds times only, no words, so it stays when a call’s content is deleted. Any id List Calls hands out works.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Get Call Timeline","description":"Where the time went in each turn of one call. Every time is in milliseconds from the moment the caller stopped speaking, so a turn reads as a row of steps: the recogniser's wait and the caller's final words, Ear's check, the turn being decided, the model being asked, the first words of the answer leaving the model, the first sound of any kind, and the answer being heard. `split` adds up the pieces a team works on: the wait before the turn was decided, the recogniser, Ear's check, the model's first sentence and the voice.\n\n`answerAudioMs` is the time to the first word of the ACTUAL answer. `quality.responseMs` stops at the first sound of any kind, so a thinking line that plays first ends it; here `firstAudioKind` says what spoke first (`answer`, `filler` or `other`) and `answerAudioEstimated` is true when a filler spoke first and the answer's start is worked out from the audio queued behind it rather than heard directly. A step that did not happen on a turn is null, never zero. A negative `modelAskedMs` is real: with `earlyAnswers` the model is asked before the turn is decided.\n\n`timeline` is null for a call that has none: a call from before this existed, or one on a call type that does not record it. It holds times only, no words, so it stays when a call's content is deleted. Any id List Calls hands out works.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /calls/{id}/timeline","href":"/api-reference/calls/get-call-timeline","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"Get Call Timeline","operationId":"getCallTimeline","tags":["Calls"],"description":"Where the time went in each turn of one call. Every time is in milliseconds from the moment the caller stopped speaking, so a turn reads as a row of steps: the recogniser's wait and the caller's final words, Ear's check, the turn being decided, the model being asked, the first words of the answer leaving the model, the first sound of any kind, and the answer being heard. `split` adds up the pieces a team works on: the wait before the turn was decided, the recogniser, Ear's check, the model's first sentence and the voice.\n\n`answerAudioMs` is the time to the first word of the ACTUAL answer. `quality.responseMs` stops at the first sound of any kind, so a thinking line that plays first ends it; here `firstAudioKind` says what spoke first (`answer`, `filler` or `other`) and `answerAudioEstimated` is true when a filler spoke first and the answer's start is worked out from the audio queued behind it rather than heard directly. A step that did not happen on a turn is null, never zero. A negative `modelAskedMs` is real: with `earlyAnswers` the model is asked before the turn is decided.\n\n`timeline` is null for a call that has none: a call from before this existed, or one on a call type that does not record it. It holds times only, no words, so it stays when a call's content is deleted. Any id List Calls hands out works.","parameters":["fe0d795e-3f65-493e-9b68-f59e7469f817","aeb8e4d4-fac5-47b1-b1a6-15e786c46d7b"],"responses":{"200":"ce072a62-f843-4e98-a055-6089f3b3459b","400":"69021b86-40fc-4ce1-8bd1-de29b1a9d97e","401":"6a86d524-a254-4091-ae28-2abd98d5fd58","403":"be14bf63-0c18-48ff-bd01-7c621d647a12","404":"0dce4ca5-324c-4f7a-a51a-6555dc7ebf70","410":"c9c65f4f-4303-46b6-a505-1cfd5db79b5a","429":"a4c79700-e28e-4b58-a77f-7616facb67e0"},"method":"get","type":"path","servers":["8bef4ea2-42e1-468e-99b1-9a0762535e3d"],"security":["653c2468-ecf3-4efb-ae19-5e5c80ee6295"],"path":"/calls/{id}/timeline","baseUrlOptions":["https://app.thinnest.ai/api/v1"],"title":"Get Call Timeline","codeSamples":[],"requestExampleLanguages":["bash","javascript","python"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"fe0d795e-3f65-493e-9b68-f59e7469f817":{"name":"id","in":"path","required":true,"description":"The call's `id` as Place Call or List Calls gave it: `out_…` or `sch_…` for a call you placed, the call reference for any other.","schema":{"type":"string","example":"out_9f2c1a44-6b0e-4c1d-8a7f-2e5b3c9d1f60","isRequired":true,"description":"The call's `id` as Place Call or List Calls gave it: `out_…` or `sch_…` for a call you placed, the call reference for any other.","uniqueKey":"","typeLabel":"string"}},"aeb8e4d4-fac5-47b1-b1a6-15e786c46d7b":{"name":"Thinnest-Workspace","in":"header","required":false,"description":"Developers only: the customer workspace this request acts in — its `org_…` id from `POST /customers`. Leave it out to act in your own workspace. Refused with `404` (`Workspace not found.`) when the id is unknown, is not one of your customers, or is not an `org_…` id; `410` when that customer was deleted (restore it with `POST /customers/{id}/restore` until it is erased); `403` when the key belongs to one customer workspace (it cannot act as another); `400` when your workspace is not a developer workspace. `/customers/*` and `GET /customers/usage` are your own workspace's and refuse the header with `400`: call them without it.","schema":{"type":"string","example":"org_3fKq9TzQ1mN8vB2xR7cLpA","isRequired":false,"description":"Developers only: the customer workspace this request acts in — its `org_…` id from `POST /customers`. Leave it out to act in your own workspace. Refused with `404` (`Workspace not found.`) when the id is unknown, is not one of your customers, or is not an `org_…` id; `410` when that customer was deleted (restore it with `POST /customers/{id}/restore` until it is erased); `403` when the key belongs to one customer workspace (it cannot act as another); `400` when your workspace is not a developer workspace. `/customers/*` and `GET /customers/usage` are your own workspace's and refuse the header with `400`: call them without it.","uniqueKey":"","typeLabel":"string"}}},"responses":{"ce072a62-f843-4e98-a055-6089f3b3459b":{"description":"The call's timeline.","content":{"application/json":{"schema":{"type":"object","required":["id","callRef","status","agent","startedAt","endedAt","timeline"],"properties":{"id":{"type":"string","description":"The call's id, as List Calls hands it out.","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"callRef":{"type":"string","description":"The call reference.","isRequired":true,"uniqueKey":"callRef","typeLabel":"string"},"status":{"type":"string","description":"The call's status.","isRequired":true,"uniqueKey":"status","typeLabel":"string"},"agent":{"oneOf":[{"type":"object","description":"The agent that took the call.","properties":{"id":{"type":"string","uniqueKey":"agent.oneOf.0.id","typeLabel":"string"},"name":{"oneOf":[{"type":"string","uniqueKey":"agent.oneOf.0.name.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"agent.oneOf.0.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.name","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"agent.oneOf.0","typeLabel":"object"},{"type":"null","description":"The agent that took the call.","properties":{"id":{"type":"string"},"name":{"oneOf":[{"type":"string"},{"type":"null"}]}},"isRequired":true,"uniqueKey":"agent.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"agent","typeLabel":"object | null"},"startedAt":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"startedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"startedAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"startedAt","typeLabel":"string\u003cdate-time> | null"},"endedAt":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"endedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"endedAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"endedAt","typeLabel":"string\u003cdate-time> | null"},"timeline":{"oneOf":[{"type":"object","description":"Null for a call that has none: from before this existed, or on a call type that does not record it.","required":["v","turns"],"properties":{"v":{"type":"integer","description":"The shape's version; 1.","isRequired":true,"uniqueKey":"timeline.oneOf.0.v","typeLabel":"integer"},"turns":{"type":"array","items":{"type":"object","description":"One turn: the moments recorded, in milliseconds from the moment the caller stopped speaking (null where a step did not happen), and their split.","required":["turn","callerStoppedAtMs","earPausedMs","transcriptMs","judgeDecidedMs","turnDecidedMs","modelAskedMs","answerTextMs","firstAudioMs","firstAudioKind","answerAudioMs","answerAudioEstimated","split"],"properties":{"turn":{"type":"integer","minimum":1,"description":"The turn's number, from 1.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].turn","typeLabel":"integer"},"callerStoppedAtMs":{"type":"integer","minimum":0,"description":"When the caller stopped speaking, in milliseconds from the start of the call.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].callerStoppedAtMs","typeLabel":"integer"},"earPausedMs":{"oneOf":[{"type":"integer","description":"The recogniser called the pause (the last one before the turn was decided). Null off Ear.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].earPausedMs.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The recogniser called the pause (the last one before the turn was decided). Null off Ear.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].earPausedMs.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].earPausedMs","typeLabel":"integer | null"},"transcriptMs":{"oneOf":[{"type":"integer","description":"The caller's final words arrived. Null off Ear.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].transcriptMs.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The caller's final words arrived. Null off Ear.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].transcriptMs.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].transcriptMs","typeLabel":"integer | null"},"judgeDecidedMs":{"oneOf":[{"type":"integer","description":"Ear's check gave its verdict that the turn was over. Null off Ear.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].judgeDecidedMs.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Ear's check gave its verdict that the turn was over. Null off Ear.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].judgeDecidedMs.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].judgeDecidedMs","typeLabel":"integer | null"},"turnDecidedMs":{"oneOf":[{"type":"integer","description":"The turn was decided and an answer was wanted.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].turnDecidedMs.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The turn was decided and an answer was wanted.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].turnDecidedMs.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].turnDecidedMs","typeLabel":"integer | null"},"modelAskedMs":{"oneOf":[{"type":"integer","description":"The model was asked. Negative when it was asked before the turn was decided (`earlyAnswers`).","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].modelAskedMs.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The model was asked. Negative when it was asked before the turn was decided (`earlyAnswers`).","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].modelAskedMs.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].modelAskedMs","typeLabel":"integer | null"},"answerTextMs":{"oneOf":[{"type":"integer","description":"The first words of the answer left the model. A thinking line is not the answer.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].answerTextMs.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The first words of the answer left the model. A thinking line is not the answer.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].answerTextMs.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].answerTextMs","typeLabel":"integer | null"},"firstAudioMs":{"oneOf":[{"type":"integer","description":"The first sound of any kind: a thinking line, an acknowledgement or the answer. This is what `quality.responseMs` measures.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].firstAudioMs.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The first sound of any kind: a thinking line, an acknowledgement or the answer. This is what `quality.responseMs` measures.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].firstAudioMs.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].firstAudioMs","typeLabel":"integer | null"},"firstAudioKind":{"oneOf":[{"type":"string","enum":["answer","filler","other",null],"description":"What the first sound was: `answer`, `filler` (a thinking line or an acknowledgement spoke before the answer) or `other` (the turn had no answer words of its own). Null when nothing was said.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].firstAudioKind.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["answer","filler","other",null],"description":"What the first sound was: `answer`, `filler` (a thinking line or an acknowledgement spoke before the answer) or `other` (the turn had no answer words of its own). Null when nothing was said.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].firstAudioKind.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].firstAudioKind","typeLabel":"enum\u003cstring> | null"},"answerAudioMs":{"oneOf":[{"type":"integer","description":"The first word of the actual answer being heard. The number to judge a reply-time target on.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].answerAudioMs.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The first word of the actual answer being heard. The number to judge a reply-time target on.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].answerAudioMs.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].answerAudioMs","typeLabel":"integer | null"},"answerAudioEstimated":{"type":"boolean","description":"True when a filler spoke first and the answer's start is worked out from the audio queued behind it, not heard directly.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].answerAudioEstimated","typeLabel":"boolean"},"split":{"type":"object","description":"The pieces of a turn's wait, each in milliseconds, null where either end of it was not recorded.","required":["waitBeforeDecisionMs","recogniserMs","earCheckMs","modelFirstSentenceMs","voiceMs"],"properties":{"waitBeforeDecisionMs":{"oneOf":[{"type":"integer","description":"Caller stopped speaking to the turn being decided: the recogniser's wait, the final words and Ear's check together.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].split.waitBeforeDecisionMs.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Caller stopped speaking to the turn being decided: the recogniser's wait, the final words and Ear's check together.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].split.waitBeforeDecisionMs.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].split.waitBeforeDecisionMs","typeLabel":"integer | null"},"recogniserMs":{"oneOf":[{"type":"integer","description":"Caller stopped speaking to their final words arriving.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].split.recogniserMs.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Caller stopped speaking to their final words arriving.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].split.recogniserMs.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].split.recogniserMs","typeLabel":"integer | null"},"earCheckMs":{"oneOf":[{"type":"integer","description":"Their final words arriving to Ear's verdict that the turn was over.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].split.earCheckMs.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Their final words arriving to Ear's verdict that the turn was over.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].split.earCheckMs.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].split.earCheckMs","typeLabel":"integer | null"},"modelFirstSentenceMs":{"oneOf":[{"type":"integer","description":"The model being asked to the first words of the answer leaving it (a thinking line does not count).","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].split.modelFirstSentenceMs.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The model being asked to the first words of the answer leaving it (a thinking line does not count).","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].split.modelFirstSentenceMs.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].split.modelFirstSentenceMs","typeLabel":"integer | null"},"voiceMs":{"oneOf":[{"type":"integer","description":"The first words of the answer leaving the model to the answer being heard: the voice starting, plus any wait behind a thinking line still speaking.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].split.voiceMs.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The first words of the answer leaving the model to the answer being heard: the voice starting, plus any wait behind a thinking line still speaking.","isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].split.voiceMs.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].split.voiceMs","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX].split","typeLabel":"object"}},"uniqueKey":"timeline.oneOf.0.turns.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"timeline.oneOf.0.turns","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"timeline.oneOf.0","typeLabel":"object"},{"type":"null","description":"Null for a call that has none: from before this existed, or on a call type that does not record it.","required":["v","turns"],"properties":{"v":{"type":"integer","description":"The shape's version; 1."},"turns":{"type":"array","items":{"type":"object","description":"One turn: the moments recorded, in milliseconds from the moment the caller stopped speaking (null where a step did not happen), and their split.","required":["turn","callerStoppedAtMs","earPausedMs","transcriptMs","judgeDecidedMs","turnDecidedMs","modelAskedMs","answerTextMs","firstAudioMs","firstAudioKind","answerAudioMs","answerAudioEstimated","split"],"properties":{"turn":{"type":"integer","minimum":1,"description":"The turn's number, from 1."},"callerStoppedAtMs":{"type":"integer","minimum":0,"description":"When the caller stopped speaking, in milliseconds from the start of the call."},"earPausedMs":{"oneOf":[{"type":"integer","description":"The recogniser called the pause (the last one before the turn was decided). Null off Ear."},{"type":"null","description":"The recogniser called the pause (the last one before the turn was decided). Null off Ear."}]},"transcriptMs":{"oneOf":[{"type":"integer","description":"The caller's final words arrived. Null off Ear."},{"type":"null","description":"The caller's final words arrived. Null off Ear."}]},"judgeDecidedMs":{"oneOf":[{"type":"integer","description":"Ear's check gave its verdict that the turn was over. Null off Ear."},{"type":"null","description":"Ear's check gave its verdict that the turn was over. Null off Ear."}]},"turnDecidedMs":{"oneOf":[{"type":"integer","description":"The turn was decided and an answer was wanted."},{"type":"null","description":"The turn was decided and an answer was wanted."}]},"modelAskedMs":{"oneOf":[{"type":"integer","description":"The model was asked. Negative when it was asked before the turn was decided (`earlyAnswers`)."},{"type":"null","description":"The model was asked. Negative when it was asked before the turn was decided (`earlyAnswers`)."}]},"answerTextMs":{"oneOf":[{"type":"integer","description":"The first words of the answer left the model. A thinking line is not the answer."},{"type":"null","description":"The first words of the answer left the model. A thinking line is not the answer."}]},"firstAudioMs":{"oneOf":[{"type":"integer","description":"The first sound of any kind: a thinking line, an acknowledgement or the answer. This is what `quality.responseMs` measures."},{"type":"null","description":"The first sound of any kind: a thinking line, an acknowledgement or the answer. This is what `quality.responseMs` measures."}]},"firstAudioKind":{"oneOf":[{"type":"string","enum":["answer","filler","other",null],"description":"What the first sound was: `answer`, `filler` (a thinking line or an acknowledgement spoke before the answer) or `other` (the turn had no answer words of its own). Null when nothing was said."},{"type":"null","enum":["answer","filler","other",null],"description":"What the first sound was: `answer`, `filler` (a thinking line or an acknowledgement spoke before the answer) or `other` (the turn had no answer words of its own). Null when nothing was said."}]},"answerAudioMs":{"oneOf":[{"type":"integer","description":"The first word of the actual answer being heard. The number to judge a reply-time target on."},{"type":"null","description":"The first word of the actual answer being heard. The number to judge a reply-time target on."}]},"answerAudioEstimated":{"type":"boolean","description":"True when a filler spoke first and the answer's start is worked out from the audio queued behind it, not heard directly."},"split":{"type":"object","description":"The pieces of a turn's wait, each in milliseconds, null where either end of it was not recorded.","required":["waitBeforeDecisionMs","recogniserMs","earCheckMs","modelFirstSentenceMs","voiceMs"],"properties":{"waitBeforeDecisionMs":{"oneOf":[{"type":"integer","description":"Caller stopped speaking to the turn being decided: the recogniser's wait, the final words and Ear's check together."},{"type":"null","description":"Caller stopped speaking to the turn being decided: the recogniser's wait, the final words and Ear's check together."}]},"recogniserMs":{"oneOf":[{"type":"integer","description":"Caller stopped speaking to their final words arriving."},{"type":"null","description":"Caller stopped speaking to their final words arriving."}]},"earCheckMs":{"oneOf":[{"type":"integer","description":"Their final words arriving to Ear's verdict that the turn was over."},{"type":"null","description":"Their final words arriving to Ear's verdict that the turn was over."}]},"modelFirstSentenceMs":{"oneOf":[{"type":"integer","description":"The model being asked to the first words of the answer leaving it (a thinking line does not count)."},{"type":"null","description":"The model being asked to the first words of the answer leaving it (a thinking line does not count)."}]},"voiceMs":{"oneOf":[{"type":"integer","description":"The first words of the answer leaving the model to the answer being heard: the voice starting, plus any wait behind a thinking line still speaking."},{"type":"null","description":"The first words of the answer leaving the model to the answer being heard: the voice starting, plus any wait behind a thinking line still speaking."}]}}}}}}},"isRequired":true,"uniqueKey":"timeline.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"timeline","typeLabel":"object | null"}},"uniqueKey":"","typeLabel":"object"},"example":{"id":"out_9f2c1a44-6b0e-4c1d-8a7f-2e5b3c9d1f60","callRef":"out_9f2c1a44-6b0e-4c1d-8a7f-2e5b3c9d1f60","status":"completed","agent":{"id":"ag_5c4a5f93-2b1e-4d7a-9f60-8e2d1c3b4a71","name":"Skyline Sales"},"startedAt":"2026-10-06T04:30:02.118Z","endedAt":"2026-10-06T04:33:11.902Z","timeline":{"v":1,"turns":[{"turn":1,"callerStoppedAtMs":12400,"earPausedMs":520,"transcriptMs":710,"judgeDecidedMs":905,"turnDecidedMs":910,"modelAskedMs":40,"answerTextMs":1850,"firstAudioMs":1330,"firstAudioKind":"filler","answerAudioMs":2310,"answerAudioEstimated":true,"split":{"waitBeforeDecisionMs":910,"recogniserMs":710,"earCheckMs":195,"modelFirstSentenceMs":1810,"voiceMs":460}}]}},"examples":{"Example":{"title":"Example","value":{"id":"out_9f2c1a44-6b0e-4c1d-8a7f-2e5b3c9d1f60","callRef":"out_9f2c1a44-6b0e-4c1d-8a7f-2e5b3c9d1f60","status":"completed","agent":{"id":"ag_5c4a5f93-2b1e-4d7a-9f60-8e2d1c3b4a71","name":"Skyline Sales"},"startedAt":"2026-10-06T04:30:02.118Z","endedAt":"2026-10-06T04:33:11.902Z","timeline":{"v":1,"turns":[{"turn":1,"callerStoppedAtMs":12400,"earPausedMs":520,"transcriptMs":710,"judgeDecidedMs":905,"turnDecidedMs":910,"modelAskedMs":40,"answerTextMs":1850,"firstAudioMs":1330,"firstAudioKind":"filler","answerAudioMs":2310,"answerAudioEstimated":true,"split":{"waitBeforeDecisionMs":910,"recogniserMs":710,"earCheckMs":195,"modelFirstSentenceMs":1810,"voiceMs":460}}]}}}},"exampleType":"examples"}},"exampleType":"examples"},"69021b86-40fc-4ce1-8bd1-de29b1a9d97e":{"description":"`Thinnest-Workspace` was sent from a workspace that is not a developer workspace.","content":{"application/json":{"schema":{"type":"object","required":["error","code"],"properties":{"error":{"type":"string","description":"What went wrong, in a sentence you can show a person.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","enum":["unauthorized","key_scope_read","key_scope_build","workspace_not_found","workspace_deleted","workspace_not_developer","workspace_header_forbidden","rate_limit_resources","rate_limit_family","rate_limit_calls","rate_limit_messages","rate_limit_codes","rate_limit_code_recipient","concurrent_calls","number_daily_limit","rate_limited","opted_out","do_not_call","stop_list_unknown","insufficient_balance","outside_calling_hours","number_never_callable","call_in_progress","call_already_scheduled","calling_not_set_up","carrier_unavailable","agent_not_found","agent_ambiguous","from_number_invalid","agent_on_live_call","phone_number_required","signing_unavailable","invalid_number","number_required","number_claimed_elsewhere","needs_own_carrier_keys","number_move_needs_developer","number_move_same_workspace","number_on_live_call","number_move_needs_business_details","number_move_carrier_account","number_move_unavailable","number_move_in_progress","number_move_legacy_number","number_cannot_forward","forward_destination_not_allowed","forward_loop","template_not_found","template_not_approved","template_language_missing","template_unsendable","code_template_not_found","code_template_ambiguous","whatsapp_not_connected","whatsapp_blocked","whatsapp_not_configured","free_allowance_used","send_failed","plan_required","plan_limit","payment_required","idempotency_in_progress","validation_failed","forbidden","not_found","conflict","gone","unprocessable","internal_error","service_unavailable"],"description":"A stable machine-readable code. Two refusals that share a status are told apart by it (a `403` for an opted-out customer, for the do-not-call list and for a key that is not a full key). See the table in the API reference under Errors.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"limit":{"type":"object","description":"On a `429` that hit one of our limits: which one and how big it is. `perMinute` for a per-minute limit; `max` (and `windowSeconds`) for the others.","required":["name"],"properties":{"name":{"type":"string","description":"Which limit: `resources`, `family`, `calls`, `messages`, `codes`, `code_recipient`, `concurrent_calls` or `number_daily`.","isRequired":true,"uniqueKey":"limit.name","typeLabel":"string"},"perMinute":{"type":"integer","description":"Requests allowed a minute.","uniqueKey":"limit.perMinute","typeLabel":"integer"},"max":{"type":"integer","description":"The most allowed, for a limit that is not per minute.","uniqueKey":"limit.max","typeLabel":"integer"},"windowSeconds":{"type":"integer","description":"The window `max` is counted over, when it has one.","uniqueKey":"limit.windowSeconds","typeLabel":"integer"}},"uniqueKey":"limit","typeLabel":"object"}},"example":{"error":"That agent was not found.","code":"not_found"},"description":"Every error body. Branch on `code`, never on the sentence in `error`: the sentence may be reworded, the code does not change.","uniqueKey":"","typeLabel":"object"},"example":{"error":"Thinnest-Workspace needs a developer workspace. Create a customer first with POST /v1/customers.","code":"workspace_not_developer"},"examples":{"Example":{"title":"Example","value":{"error":"Thinnest-Workspace needs a developer workspace. Create a customer first with POST /v1/customers.","code":"workspace_not_developer"}}},"exampleType":"examples"}},"exampleType":"examples"},"6a86d524-a254-4091-ae28-2abd98d5fd58":{"description":"The key is missing, wrong or revoked. The answer is always the same, whichever it is.","content":{"application/json":{"schema":{"type":"object","required":["error","code"],"properties":{"error":{"type":"string","description":"What went wrong, in a sentence you can show a person.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","enum":["unauthorized","key_scope_read","key_scope_build","workspace_not_found","workspace_deleted","workspace_not_developer","workspace_header_forbidden","rate_limit_resources","rate_limit_family","rate_limit_calls","rate_limit_messages","rate_limit_codes","rate_limit_code_recipient","concurrent_calls","number_daily_limit","rate_limited","opted_out","do_not_call","stop_list_unknown","insufficient_balance","outside_calling_hours","number_never_callable","call_in_progress","call_already_scheduled","calling_not_set_up","carrier_unavailable","agent_not_found","agent_ambiguous","from_number_invalid","agent_on_live_call","phone_number_required","signing_unavailable","invalid_number","number_required","number_claimed_elsewhere","needs_own_carrier_keys","number_move_needs_developer","number_move_same_workspace","number_on_live_call","number_move_needs_business_details","number_move_carrier_account","number_move_unavailable","number_move_in_progress","number_move_legacy_number","number_cannot_forward","forward_destination_not_allowed","forward_loop","template_not_found","template_not_approved","template_language_missing","template_unsendable","code_template_not_found","code_template_ambiguous","whatsapp_not_connected","whatsapp_blocked","whatsapp_not_configured","free_allowance_used","send_failed","plan_required","plan_limit","payment_required","idempotency_in_progress","validation_failed","forbidden","not_found","conflict","gone","unprocessable","internal_error","service_unavailable"],"description":"A stable machine-readable code. Two refusals that share a status are told apart by it (a `403` for an opted-out customer, for the do-not-call list and for a key that is not a full key). See the table in the API reference under Errors.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"limit":{"type":"object","description":"On a `429` that hit one of our limits: which one and how big it is. `perMinute` for a per-minute limit; `max` (and `windowSeconds`) for the others.","required":["name"],"properties":{"name":{"type":"string","description":"Which limit: `resources`, `family`, `calls`, `messages`, `codes`, `code_recipient`, `concurrent_calls` or `number_daily`.","isRequired":true,"uniqueKey":"limit.name","typeLabel":"string"},"perMinute":{"type":"integer","description":"Requests allowed a minute.","uniqueKey":"limit.perMinute","typeLabel":"integer"},"max":{"type":"integer","description":"The most allowed, for a limit that is not per minute.","uniqueKey":"limit.max","typeLabel":"integer"},"windowSeconds":{"type":"integer","description":"The window `max` is counted over, when it has one.","uniqueKey":"limit.windowSeconds","typeLabel":"integer"}},"uniqueKey":"limit","typeLabel":"object"}},"example":{"error":"That agent was not found.","code":"not_found"},"description":"Every error body. Branch on `code`, never on the sentence in `error`: the sentence may be reworded, the code does not change.","uniqueKey":"","typeLabel":"object"},"example":{"error":"Unauthorized","code":"unauthorized"},"examples":{"Example":{"title":"Example","value":{"error":"Unauthorized","code":"unauthorized"}}},"exampleType":"examples"}},"exampleType":"examples"},"be14bf63-0c18-48ff-bd01-7c621d647a12":{"description":"The key's access level (read-only or build) does not allow this request, the plan does not include it, or a customer's key named another workspace in `Thinnest-Workspace`. `code` says which: `key_scope_read`, `key_scope_build`, `workspace_header_forbidden`, or `forbidden`.","content":{"application/json":{"schema":{"type":"object","required":["error","code"],"properties":{"error":{"type":"string","description":"What went wrong, in a sentence you can show a person.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","enum":["unauthorized","key_scope_read","key_scope_build","workspace_not_found","workspace_deleted","workspace_not_developer","workspace_header_forbidden","rate_limit_resources","rate_limit_family","rate_limit_calls","rate_limit_messages","rate_limit_codes","rate_limit_code_recipient","concurrent_calls","number_daily_limit","rate_limited","opted_out","do_not_call","stop_list_unknown","insufficient_balance","outside_calling_hours","number_never_callable","call_in_progress","call_already_scheduled","calling_not_set_up","carrier_unavailable","agent_not_found","agent_ambiguous","from_number_invalid","agent_on_live_call","phone_number_required","signing_unavailable","invalid_number","number_required","number_claimed_elsewhere","needs_own_carrier_keys","number_move_needs_developer","number_move_same_workspace","number_on_live_call","number_move_needs_business_details","number_move_carrier_account","number_move_unavailable","number_move_in_progress","number_move_legacy_number","number_cannot_forward","forward_destination_not_allowed","forward_loop","template_not_found","template_not_approved","template_language_missing","template_unsendable","code_template_not_found","code_template_ambiguous","whatsapp_not_connected","whatsapp_blocked","whatsapp_not_configured","free_allowance_used","send_failed","plan_required","plan_limit","payment_required","idempotency_in_progress","validation_failed","forbidden","not_found","conflict","gone","unprocessable","internal_error","service_unavailable"],"description":"A stable machine-readable code. Two refusals that share a status are told apart by it (a `403` for an opted-out customer, for the do-not-call list and for a key that is not a full key). See the table in the API reference under Errors.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"limit":{"type":"object","description":"On a `429` that hit one of our limits: which one and how big it is. `perMinute` for a per-minute limit; `max` (and `windowSeconds`) for the others.","required":["name"],"properties":{"name":{"type":"string","description":"Which limit: `resources`, `family`, `calls`, `messages`, `codes`, `code_recipient`, `concurrent_calls` or `number_daily`.","isRequired":true,"uniqueKey":"limit.name","typeLabel":"string"},"perMinute":{"type":"integer","description":"Requests allowed a minute.","uniqueKey":"limit.perMinute","typeLabel":"integer"},"max":{"type":"integer","description":"The most allowed, for a limit that is not per minute.","uniqueKey":"limit.max","typeLabel":"integer"},"windowSeconds":{"type":"integer","description":"The window `max` is counted over, when it has one.","uniqueKey":"limit.windowSeconds","typeLabel":"integer"}},"uniqueKey":"limit","typeLabel":"object"}},"example":{"error":"That agent was not found.","code":"not_found"},"description":"Every error body. Branch on `code`, never on the sentence in `error`: the sentence may be reworded, the code does not change.","uniqueKey":"","typeLabel":"object"},"examples":{"readOnlyKey":{"title":"readOnlyKey","value":{"error":"This API key is read-only. Use a build or full key to change anything.","code":"key_scope_read"}},"buildKey":{"title":"buildKey","value":{"error":"This API key is a build key: it can set up agents, actions, contacts and webhooks, but not message customers, send codes or place calls. Use a full key for that.","code":"key_scope_build"}},"customerKey":{"title":"customerKey","value":{"error":"This key belongs to one customer workspace and cannot act as another.","code":"workspace_header_forbidden"}}},"exampleType":"examples"}},"exampleType":"examples"},"0dce4ca5-324c-4f7a-a51a-6555dc7ebf70":{"description":"No call with that id in this workspace.","content":{"application/json":{"schema":{"type":"object","required":["error","code"],"properties":{"error":{"type":"string","description":"What went wrong, in a sentence you can show a person.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","enum":["unauthorized","key_scope_read","key_scope_build","workspace_not_found","workspace_deleted","workspace_not_developer","workspace_header_forbidden","rate_limit_resources","rate_limit_family","rate_limit_calls","rate_limit_messages","rate_limit_codes","rate_limit_code_recipient","concurrent_calls","number_daily_limit","rate_limited","opted_out","do_not_call","stop_list_unknown","insufficient_balance","outside_calling_hours","number_never_callable","call_in_progress","call_already_scheduled","calling_not_set_up","carrier_unavailable","agent_not_found","agent_ambiguous","from_number_invalid","agent_on_live_call","phone_number_required","signing_unavailable","invalid_number","number_required","number_claimed_elsewhere","needs_own_carrier_keys","number_move_needs_developer","number_move_same_workspace","number_on_live_call","number_move_needs_business_details","number_move_carrier_account","number_move_unavailable","number_move_in_progress","number_move_legacy_number","number_cannot_forward","forward_destination_not_allowed","forward_loop","template_not_found","template_not_approved","template_language_missing","template_unsendable","code_template_not_found","code_template_ambiguous","whatsapp_not_connected","whatsapp_blocked","whatsapp_not_configured","free_allowance_used","send_failed","plan_required","plan_limit","payment_required","idempotency_in_progress","validation_failed","forbidden","not_found","conflict","gone","unprocessable","internal_error","service_unavailable"],"description":"A stable machine-readable code. Two refusals that share a status are told apart by it (a `403` for an opted-out customer, for the do-not-call list and for a key that is not a full key). See the table in the API reference under Errors.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"limit":{"type":"object","description":"On a `429` that hit one of our limits: which one and how big it is. `perMinute` for a per-minute limit; `max` (and `windowSeconds`) for the others.","required":["name"],"properties":{"name":{"type":"string","description":"Which limit: `resources`, `family`, `calls`, `messages`, `codes`, `code_recipient`, `concurrent_calls` or `number_daily`.","isRequired":true,"uniqueKey":"limit.name","typeLabel":"string"},"perMinute":{"type":"integer","description":"Requests allowed a minute.","uniqueKey":"limit.perMinute","typeLabel":"integer"},"max":{"type":"integer","description":"The most allowed, for a limit that is not per minute.","uniqueKey":"limit.max","typeLabel":"integer"},"windowSeconds":{"type":"integer","description":"The window `max` is counted over, when it has one.","uniqueKey":"limit.windowSeconds","typeLabel":"integer"}},"uniqueKey":"limit","typeLabel":"object"}},"example":{"error":"That agent was not found.","code":"not_found"},"description":"Every error body. Branch on `code`, never on the sentence in `error`: the sentence may be reworded, the code does not change.","uniqueKey":"","typeLabel":"object"},"example":{"error":"No call with that id."},"examples":{"Example":{"title":"Example","value":{"error":"No call with that id."}}},"exampleType":"examples"}},"exampleType":"examples"},"c9c65f4f-4303-46b6-a505-1cfd5db79b5a":{"description":"The customer named in `Thinnest-Workspace` was deleted. `POST /customers/{id}/restore` brings it back until its erase date.","content":{"application/json":{"schema":{"type":"object","required":["error","code"],"properties":{"error":{"type":"string","description":"What went wrong, in a sentence you can show a person.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","enum":["unauthorized","key_scope_read","key_scope_build","workspace_not_found","workspace_deleted","workspace_not_developer","workspace_header_forbidden","rate_limit_resources","rate_limit_family","rate_limit_calls","rate_limit_messages","rate_limit_codes","rate_limit_code_recipient","concurrent_calls","number_daily_limit","rate_limited","opted_out","do_not_call","stop_list_unknown","insufficient_balance","outside_calling_hours","number_never_callable","call_in_progress","call_already_scheduled","calling_not_set_up","carrier_unavailable","agent_not_found","agent_ambiguous","from_number_invalid","agent_on_live_call","phone_number_required","signing_unavailable","invalid_number","number_required","number_claimed_elsewhere","needs_own_carrier_keys","number_move_needs_developer","number_move_same_workspace","number_on_live_call","number_move_needs_business_details","number_move_carrier_account","number_move_unavailable","number_move_in_progress","number_move_legacy_number","number_cannot_forward","forward_destination_not_allowed","forward_loop","template_not_found","template_not_approved","template_language_missing","template_unsendable","code_template_not_found","code_template_ambiguous","whatsapp_not_connected","whatsapp_blocked","whatsapp_not_configured","free_allowance_used","send_failed","plan_required","plan_limit","payment_required","idempotency_in_progress","validation_failed","forbidden","not_found","conflict","gone","unprocessable","internal_error","service_unavailable"],"description":"A stable machine-readable code. Two refusals that share a status are told apart by it (a `403` for an opted-out customer, for the do-not-call list and for a key that is not a full key). See the table in the API reference under Errors.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"limit":{"type":"object","description":"On a `429` that hit one of our limits: which one and how big it is. `perMinute` for a per-minute limit; `max` (and `windowSeconds`) for the others.","required":["name"],"properties":{"name":{"type":"string","description":"Which limit: `resources`, `family`, `calls`, `messages`, `codes`, `code_recipient`, `concurrent_calls` or `number_daily`.","isRequired":true,"uniqueKey":"limit.name","typeLabel":"string"},"perMinute":{"type":"integer","description":"Requests allowed a minute.","uniqueKey":"limit.perMinute","typeLabel":"integer"},"max":{"type":"integer","description":"The most allowed, for a limit that is not per minute.","uniqueKey":"limit.max","typeLabel":"integer"},"windowSeconds":{"type":"integer","description":"The window `max` is counted over, when it has one.","uniqueKey":"limit.windowSeconds","typeLabel":"integer"}},"uniqueKey":"limit","typeLabel":"object"}},"example":{"error":"That agent was not found.","code":"not_found"},"description":"Every error body. Branch on `code`, never on the sentence in `error`: the sentence may be reworded, the code does not change.","uniqueKey":"","typeLabel":"object"},"example":{"error":"This workspace was deleted on 2026-10-06 and is erased on 2026-11-05. POST /v1/customers/{id}/restore brings it back until then.","code":"workspace_deleted"},"examples":{"Example":{"title":"Example","value":{"error":"This workspace was deleted on 2026-10-06 and is erased on 2026-11-05. POST /v1/customers/{id}/restore brings it back until then.","code":"workspace_deleted"}}},"exampleType":"examples"}},"exampleType":"examples"},"a4c79700-e28e-4b58-a77f-7616facb67e0":{"description":"Over a per-minute limit. Wait for `Retry-After` seconds. `code` and `limit` say which limit: `rate_limit_resources` (240 requests a minute for the workspace), `rate_limit_family` (2,400 across a developer's customers), `rate_limit_calls`, `rate_limit_messages`, `rate_limit_codes`, `rate_limit_code_recipient`, `concurrent_calls` or `number_daily_limit`.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait."}},"content":{"application/json":{"schema":{"type":"object","required":["error","code"],"properties":{"error":{"type":"string","description":"What went wrong, in a sentence you can show a person.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","enum":["unauthorized","key_scope_read","key_scope_build","workspace_not_found","workspace_deleted","workspace_not_developer","workspace_header_forbidden","rate_limit_resources","rate_limit_family","rate_limit_calls","rate_limit_messages","rate_limit_codes","rate_limit_code_recipient","concurrent_calls","number_daily_limit","rate_limited","opted_out","do_not_call","stop_list_unknown","insufficient_balance","outside_calling_hours","number_never_callable","call_in_progress","call_already_scheduled","calling_not_set_up","carrier_unavailable","agent_not_found","agent_ambiguous","from_number_invalid","agent_on_live_call","phone_number_required","signing_unavailable","invalid_number","number_required","number_claimed_elsewhere","needs_own_carrier_keys","number_move_needs_developer","number_move_same_workspace","number_on_live_call","number_move_needs_business_details","number_move_carrier_account","number_move_unavailable","number_move_in_progress","number_move_legacy_number","number_cannot_forward","forward_destination_not_allowed","forward_loop","template_not_found","template_not_approved","template_language_missing","template_unsendable","code_template_not_found","code_template_ambiguous","whatsapp_not_connected","whatsapp_blocked","whatsapp_not_configured","free_allowance_used","send_failed","plan_required","plan_limit","payment_required","idempotency_in_progress","validation_failed","forbidden","not_found","conflict","gone","unprocessable","internal_error","service_unavailable"],"description":"A stable machine-readable code. Two refusals that share a status are told apart by it (a `403` for an opted-out customer, for the do-not-call list and for a key that is not a full key). See the table in the API reference under Errors.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"limit":{"type":"object","description":"On a `429` that hit one of our limits: which one and how big it is. `perMinute` for a per-minute limit; `max` (and `windowSeconds`) for the others.","required":["name"],"properties":{"name":{"type":"string","description":"Which limit: `resources`, `family`, `calls`, `messages`, `codes`, `code_recipient`, `concurrent_calls` or `number_daily`.","isRequired":true,"uniqueKey":"limit.name","typeLabel":"string"},"perMinute":{"type":"integer","description":"Requests allowed a minute.","uniqueKey":"limit.perMinute","typeLabel":"integer"},"max":{"type":"integer","description":"The most allowed, for a limit that is not per minute.","uniqueKey":"limit.max","typeLabel":"integer"},"windowSeconds":{"type":"integer","description":"The window `max` is counted over, when it has one.","uniqueKey":"limit.windowSeconds","typeLabel":"integer"}},"uniqueKey":"limit","typeLabel":"object"}},"example":{"error":"That agent was not found.","code":"not_found"},"description":"Every error body. Branch on `code`, never on the sentence in `error`: the sentence may be reworded, the code does not change.","uniqueKey":"","typeLabel":"object"},"example":{"error":"Over 240 requests a minute. Slow down and retry.","code":"rate_limit_resources","limit":{"name":"resources","perMinute":240}},"examples":{"Example":{"title":"Example","value":{"error":"Over 240 requests a minute. Slow down and retry.","code":"rate_limit_resources","limit":{"name":"resources","perMinute":240}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"653c2468-ecf3-4efb-ae19-5e5c80ee6295":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Your API key (`ta_live_…`) from **Settings → API keys**, sent as `Authorization: Bearer \u003ckey>`. Keep it on a server: it can message every customer you have. A key is full, build or read-only; a request its level does not allow is refused with `403`.","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"8bef4ea2-42e1-468e-99b1-9a0762535e3d":{"url":"https://app.thinnest.ai/api/v1","description":"Every workspace, in every country"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Your API key (`ta_live_…`) from **Settings → API keys**, sent as `Authorization: Bearer \u003ckey>`. Keep it on a server: it can message every customer you have. A key is full, build or read-only; a request its level does not allow is refused with `403`.","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Your API key (`ta_live_…`) from **Settings → API keys**, sent as `Authorization: Bearer \u003ckey>`. Keep it on a server: it can message every customer you have. A key is full, build or read-only; a request its level does not allow is refused with `403`.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"thinnestai","siteName":"ThinnestAI","title":"Get Call Timeline - ThinnestAI","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-27T14:54:14.036Z","originalFileLocation":"api-reference/calls/get-call-timeline.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Where the time went in each turn of one call. Every time is in milliseconds from the moment the caller stopped speaking, so a turn reads as a row of steps: the recogniser\u0026#x27;s wait and the caller\u0026#x27;s final words, Ear\u0026#x27;s check, the turn being decided, the model being asked, the first words of the answer leaving the model, the first sound of any kind, and the answer being heard. split adds up the pieces a team works on: the wait before the turn was decided, the recogniser, Ear\u0026#x27;s check, the model\u0026#x27;s first sentence and the voice. answerAudioMs is the time to the first word of the ACTUAL answer. quality.responseMs stops at the first sound of any kind, so a thinking line that plays first ends it; here firstAudioKind says what spoke first (answer, filler or other) and answerAudioEstimated is true when a filler spoke first and the answer\u0026#x27;s start is worked out from the audio queued behind it rather than heard directly. A step that did not happen on a turn is null, never zero. A negative modelAskedMs is real: with earlyAnswers the model is asked before the turn is decided. timeline is null for a call that has none: a call from before this existed, or one on a call type that does not record it. It holds times only, no words, so it stays when a call\u0026#x27;s content is deleted. Any id List Calls hands out works.\">\u003cmeta data-mint-head name=\"application-name\" content=\"ThinnestAI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/thinnestai/5DqVrbKlNMbN0dXk/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/thinnestai/5DqVrbKlNMbN0dXk/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/thinnestai/5DqVrbKlNMbN0dXk/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/thinnestai/5DqVrbKlNMbN0dXk/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/thinnestai/5DqVrbKlNMbN0dXk/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/thinnestai/5DqVrbKlNMbN0dXk/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/thinnestai/5DqVrbKlNMbN0dXk/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/thinnestai/5DqVrbKlNMbN0dXk/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/thinnestai/5DqVrbKlNMbN0dXk/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Get Call Timeline - ThinnestAI\">\u003cmeta data-mint-head property=\"og:description\" content=\"Where the time went in each turn of one call. Every time is in milliseconds from the moment the caller stopped speaking, so a turn reads as a row of steps: the recogniser\u0026#x27;s wait and the caller\u0026#x27;s final words, Ear\u0026#x27;s check, the turn being decided, the model being asked, the first words of the answer leaving the model, the first sound of any kind, and the answer being heard. split adds up the pieces a team works on: the wait before the turn was decided, the recogniser, Ear\u0026#x27;s check, the model\u0026#x27;s first sentence and the voice. answerAudioMs is the time to the first word of the ACTUAL answer. quality.responseMs stops at the first sound of any kind, so a thinking line that plays first ends it; here firstAudioKind says what spoke first (answer, filler or other) and answerAudioEstimated is true when a filler spoke first and the answer\u0026#x27;s start is worked out from the audio queued behind it rather than heard directly. A step that did not happen on a turn is null, never zero. A negative modelAskedMs is real: with earlyAnswers the model is asked before the turn is decided. timeline is null for a call that has none: a call from before this existed, or one on a call type that does not record it. It holds times only, no words, so it stays when a call\u0026#x27;s content is deleted. Any id List Calls hands out works.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ThinnestAI\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.thinnest.ai/api-reference/calls/get-call-timeline\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://thinnestai.mintlify.app/_mintlify/api/og/v2?division=Calls\u0026amp;title=Get+Call+Timeline\u0026amp;description=Where+the+time+went+in+each+turn+of+one+call.+Every+time+is+in+milliseconds+from+the+moment+the+caller+stopped+speaking%2C+so+a+turn+reads+as+a+row+of+steps%3A+the+\u0026amp;theme=55a958cd82a3f8f5bd748d45\u0026amp;signature=5c4f857993c0dbe154d4924ecc1e90b163c1d2ccf1533a47351b0c82d9b051a0\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Get Call Timeline - ThinnestAI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Where the time went in each turn of one call. Every time is in milliseconds from the moment the caller stopped speaking, so a turn reads as a row of steps: the recogniser\u0026#x27;s wait and the caller\u0026#x27;s final words, Ear\u0026#x27;s check, the turn being decided, the model being asked, the first words of the answer leaving the model, the first sound of any kind, and the answer being heard. split adds up the pieces a team works on: the wait before the turn was decided, the recogniser, Ear\u0026#x27;s check, the model\u0026#x27;s first sentence and the voice. answerAudioMs is the time to the first word of the ACTUAL answer. quality.responseMs stops at the first sound of any kind, so a thinking line that plays first ends it; here firstAudioKind says what spoke first (answer, filler or other) and answerAudioEstimated is true when a filler spoke first and the answer\u0026#x27;s start is worked out from the audio queued behind it rather than heard directly. A step that did not happen on a turn is null, never zero. A negative modelAskedMs is real: with earlyAnswers the model is asked before the turn is decided. timeline is null for a call that has none: a call from before this existed, or one on a call type that does not record it. It holds times only, no words, so it stays when a call\u0026#x27;s content is deleted. Any id List Calls hands out works.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://thinnestai.mintlify.app/_mintlify/api/og/v2?division=Calls\u0026amp;title=Get+Call+Timeline\u0026amp;description=Where+the+time+went+in+each+turn+of+one+call.+Every+time+is+in+milliseconds+from+the+moment+the+caller+stopped+speaking%2C+so+a+turn+reads+as+a+row+of+steps%3A+the+\u0026amp;theme=55a958cd82a3f8f5bd748d45\u0026amp;signature=5c4f857993c0dbe154d4924ecc1e90b163c1d2ccf1533a47351b0c82d9b051a0\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/thinnestai/5DqVrbKlNMbN0dXk/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"ThinnestAI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#ff4e01\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.thinnest.ai/api-reference/calls/get-call-timeline\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/calls/get-call-timeline.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.thinnest.ai/#organization\",\"name\":\"ThinnestAI\",\"url\":\"https://docs.thinnest.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/thinnestai/v8t9Y30dpMuNl6ae/logo/light.svg?fit=max\u0026auto=format\u0026n=v8t9Y30dpMuNl6ae\u0026q=85\u0026s=b9c83749f4bae8ed15285bc7d2b3dec4\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.thinnest.ai#website\",\"name\":\"ThinnestAI\",\"url\":\"https://docs.thinnest.ai\",\"publisher\":{\"@id\":\"https://docs.thinnest.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.thinnest.ai/api-reference/calls/get-call-timeline#webpage\",\"url\":\"https://docs.thinnest.ai/api-reference/calls/get-call-timeline\",\"name\":\"Get Call Timeline\",\"description\":\"Where the time went in each turn of one call. Every time is in milliseconds from the moment the caller stopped speaking, so a turn reads as a row of steps: the recogniser's wait and the caller's final words, Ear's check, the turn being decided, the model being asked, the first words of the answer leaving the model, the first sound of any kind, and the answer being heard. split adds up the pieces a team works on: the wait before the turn was decided, the recogniser, Ear's check, the model's first sentence and the voice. answerAudioMs is the time to the first word of the ACTUAL answer. quality.responseMs stops at the first sound of any kind, so a thinking line that plays first ends it; here firstAudioKind says what spoke first (answer, filler or other) and answerAudioEstimated is true when a filler spoke first and the answer's start is worked out from the audio queued behind it rather than heard directly. A step that did not happen on a turn is null, never zero. A negative modelAskedMs is real: with earlyAnswers the model is asked before the turn is decided. timeline is null for a call that has none: a call from before this existed, or one on a call type that does not record it. It holds times only, no words, so it stays when a call's content is deleted. Any id List Calls hands out works.\",\"dateModified\":\"2026-10-27T14:54:14.036Z\",\"isPartOf\":{\"@id\":\"https://docs.thinnest.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.thinnest.ai/api-reference/calls/get-call-timeline#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.thinnest.ai/api-reference/calls/get-call-timeline#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Calls\",\"item\":\"https://docs.thinnest.ai/api-reference/calls/list-calls\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Get Call Timeline\",\"item\":\"https://docs.thinnest.ai/api-reference/calls/get-call-timeline\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.thinnest.ai/api-reference/calls/get-call-timeline#apireference\",\"headline\":\"Get Call Timeline\",\"name\":\"Get Call Timeline\",\"description\":\"Where the time went in each turn of one call. Every time is in milliseconds from the moment the caller stopped speaking, so a turn reads as a row of steps: the recogniser's wait and the caller's final words, Ear's check, the turn being decided, the model being asked, the first words of the answer leaving the model, the first sound of any kind, and the answer being heard. split adds up the pieces a team works on: the wait before the turn was decided, the recogniser, Ear's check, the model's first sentence and the voice. answerAudioMs is the time to the first word of the ACTUAL answer. quality.responseMs stops at the first sound of any kind, so a thinking line that plays first ends it; here firstAudioKind says what spoke first (answer, filler or other) and answerAudioEstimated is true when a filler spoke first and the answer's start is worked out from the audio queued behind it rather than heard directly. A step that did not happen on a turn is null, never zero. A negative modelAskedMs is real: with earlyAnswers the model is asked before the turn is decided. timeline is null for a call that has none: a call from before this existed, or one on a call type that does not record it. It holds times only, no words, so it stays when a call's content is deleted. Any id List Calls hands out works.\",\"url\":\"https://docs.thinnest.ai/api-reference/calls/get-call-timeline\",\"mainEntityOfPage\":{\"@id\":\"https://docs.thinnest.ai/api-reference/calls/get-call-timeline#webpage\"},\"dateModified\":\"2026-10-27T14:54:14.036Z\",\"publisher\":{\"@id\":\"https://docs.thinnest.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.thinnest.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"ThinnestAI\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"ThinnestAI","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides/overview"}]},{"tab":"MCP","pages":[{"title":"MCP","href":"/mcp/overview"}]},{"tab":"API reference","groups":[{"group":"Get started","pages":[{"title":"API reference","href":"/api-reference/introduction"},{"title":"Authentication","href":"/api-reference/authentication"},{"title":"Errors","href":"/api-reference/errors"},{"title":"SDKs","href":"/api-reference/sdks"},{"title":"Customers","href":"/api-reference/customers"},{"title":"Bring your own keys","href":"/api-reference/bring-your-own-keys"},{"title":"Webhooks","href":"/api-reference/webhooks"}]},{"group":"Agents","pages":[{"title":"List Agents","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents","href":"/api-reference/agents/list-agents"},{"title":"Create Agent","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agents","href":"/api-reference/agents/create-agent"},{"title":"Get Agent","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents/{id}","href":"/api-reference/agents/get-agent"},{"title":"Update Agent","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /agents/{id}","href":"/api-reference/agents/update-agent"},{"title":"Delete Agent","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /agents/{id}","href":"/api-reference/agents/delete-agent"},{"title":"Get Agent BYOK Model","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents/{id}/byok-model","href":"/api-reference/agents/get-agent-byok-model"},{"title":"Set Agent BYOK Model","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json put /agents/{id}/byok-model","href":"/api-reference/agents/set-agent-byok-model"},{"title":"Get Agent BYOK Voice","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents/{id}/byok-voice","href":"/api-reference/agents/get-agent-byok-voice"},{"title":"Set Agent BYOK Voice","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json put /agents/{id}/byok-voice","href":"/api-reference/agents/set-agent-byok-voice"},{"title":"Test Chat","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agents/{id}/test-chat","href":"/api-reference/agents/test-chat"}]},{"group":"Knowledge","pages":[{"title":"List Knowledge Documents","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents/{id}/knowledge","href":"/api-reference/knowledge/list-knowledge-documents"},{"title":"Add Knowledge Document","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agents/{id}/knowledge","href":"/api-reference/knowledge/add-knowledge-document"},{"title":"Delete Knowledge Document","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /agents/{id}/knowledge/{documentId}","href":"/api-reference/knowledge/delete-knowledge-document"}]},{"group":"Actions","pages":[{"title":"List Actions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents/{id}/actions","href":"/api-reference/actions/list-actions"},{"title":"Create Action","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agents/{id}/actions","href":"/api-reference/actions/create-action"},{"title":"Get Action","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents/{id}/actions/{actionId}","href":"/api-reference/actions/get-action"},{"title":"Update Action","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /agents/{id}/actions/{actionId}","href":"/api-reference/actions/update-action"},{"title":"Delete Action","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /agents/{id}/actions/{actionId}","href":"/api-reference/actions/delete-action"},{"title":"Test Action","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agents/{id}/actions/{actionId}/test","href":"/api-reference/actions/test-action"}]},{"group":"Tools","pages":[{"title":"List Built-in Tools","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents/{id}/tools","href":"/api-reference/tools/list-built-in-tools"},{"title":"Update Built-in Tools","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /agents/{id}/tools","href":"/api-reference/tools/update-built-in-tools"},{"title":"List Tool Servers","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents/{id}/mcp-servers","href":"/api-reference/tools/list-tool-servers"},{"title":"Connect Tool Server","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agents/{id}/mcp-servers","href":"/api-reference/tools/connect-tool-server"},{"title":"Get Tool Server","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents/{id}/mcp-servers/{serverId}","href":"/api-reference/tools/get-tool-server"},{"title":"Disconnect Tool Server","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /agents/{id}/mcp-servers/{serverId}","href":"/api-reference/tools/disconnect-tool-server"},{"title":"Sync Tool Server","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agents/{id}/mcp-servers/{serverId}/sync","href":"/api-reference/tools/sync-tool-server"},{"title":"Update Tool Server Tool","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /agents/{id}/mcp-servers/{serverId}/tools/{toolId}","href":"/api-reference/tools/update-tool-server-tool"},{"title":"List Connections","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents/{id}/connections","href":"/api-reference/tools/list-connections"},{"title":"Get Connection","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents/{id}/connections/{kind}","href":"/api-reference/tools/get-connection"},{"title":"Connect Account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agents/{id}/connections/{kind}","href":"/api-reference/tools/connect-account"},{"title":"Configure Connection","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /agents/{id}/connections/{kind}","href":"/api-reference/tools/configure-connection"},{"title":"Disconnect Account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /agents/{id}/connections/{kind}","href":"/api-reference/tools/disconnect-account"},{"title":"List Connection Options","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents/{id}/connections/{kind}/options","href":"/api-reference/tools/list-connection-options"},{"title":"Replace Records Link","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agents/{id}/connections/records/link","href":"/api-reference/tools/replace-records-link"}]},{"group":"Channels","pages":[{"title":"Get Agent Channels","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents/{id}/channels","href":"/api-reference/channels/get-agent-channels"},{"title":"Connect Telegram Bot","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agents/{id}/channels/telegram","href":"/api-reference/channels/connect-telegram-bot"},{"title":"Disconnect Telegram Bot","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /agents/{id}/channels/telegram","href":"/api-reference/channels/disconnect-telegram-bot"}]},{"group":"Calls","pages":[{"title":"List Calls","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /calls","href":"/api-reference/calls/list-calls"},{"title":"Place Call","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /calls","href":"/api-reference/calls/place-call"},{"title":"Place Batch Calls","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /calls/batch","href":"/api-reference/calls/place-batch-calls"},{"title":"Get Call","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /calls/{id}","href":"/api-reference/calls/get-call"},{"title":"Cancel Call","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /calls/{id}","href":"/api-reference/calls/cancel-call"},{"title":"Get Call Transcript","description":"What was said on one call, oldest first: this call's spoken turns only, internal notes left out — the same words `call.analysed` delivers. `?format=txt` returns a plain-text file to save (`call-{id}.txt`, one `[mm:ss] Who: what` line per turn). A turn's `offset` is when it was written down, not where it falls in the audio, so it suits ordering and rough position but not subtitles.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /calls/{id}/transcript","href":"/api-reference/calls/get-call-transcript"},{"title":"Get Call Timeline","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /calls/{id}/timeline","href":"/api-reference/calls/get-call-timeline"}]},{"group":"Post-call","pages":[{"title":"Get Call Analysis","description":"What one call came to, without the transcript: the outcome as the console's call log shows it (\"Answered\", \"Line busy\", \"Answering machine\"), the summary and the collected fields. `outcome` is null until the call has ended; `analysedAt` null means the summary and fields may still arrive, and `call.analysed` is sent the moment they do. Any id List Calls hands out works.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /calls/{id}/analysis","href":"/api-reference/post-call/get-call-analysis"},{"title":"Delete Call Content","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /calls/{id}/content","href":"/api-reference/post-call/delete-call-content"},{"title":"Get Post-call Settings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents/{id}/post-call","href":"/api-reference/post-call/get-post-call-settings"},{"title":"Update Post-call Settings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /agents/{id}/post-call","href":"/api-reference/post-call/update-post-call-settings"}]},{"group":"Recordings","pages":[{"title":"Get Call Recording","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /calls/{id}/recording","href":"/api-reference/recordings/get-call-recording"},{"title":"Get Recording By Signed Link","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /recordings/{callId}","href":"/api-reference/recordings/get-recording-by-signed-link"}]},{"group":"Conversations","pages":[{"title":"List Conversations","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /conversations","href":"/api-reference/conversations/list-conversations"},{"title":"List Conversation Messages","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /conversations/{id}/messages","href":"/api-reference/conversations/list-conversation-messages"},{"title":"Reply to Conversation","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /conversations/{id}/reply","href":"/api-reference/conversations/reply-to-conversation"},{"title":"Update Conversation Status","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /conversations/{id}/status","href":"/api-reference/conversations/update-conversation-status"},{"title":"Assign Conversation","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /conversations/{id}/assign","href":"/api-reference/conversations/assign-conversation"}]},{"group":"Messages","pages":[{"title":"Send Message","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /messages","href":"/api-reference/messages/send-message"}]},{"group":"One-time codes","pages":[{"title":"Send One-Time Code","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /codes","href":"/api-reference/one-time-codes/send-one-time-code"},{"title":"List Code Templates","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /codes/templates","href":"/api-reference/one-time-codes/list-code-templates"},{"title":"Create Code Template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /codes/templates","href":"/api-reference/one-time-codes/create-code-template"},{"title":"Get Code Template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /codes/templates/{id}","href":"/api-reference/one-time-codes/get-code-template"},{"title":"Update Code Template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /codes/templates/{id}","href":"/api-reference/one-time-codes/update-code-template"},{"title":"Delete Code Template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /codes/templates/{id}","href":"/api-reference/one-time-codes/delete-code-template"},{"title":"Submit Code Template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /codes/templates/{id}/submit","href":"/api-reference/one-time-codes/submit-code-template"}]},{"group":"Contacts","pages":[{"title":"List Contacts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /contacts","href":"/api-reference/contacts/list-contacts"},{"title":"Create Contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /contacts","href":"/api-reference/contacts/create-contact"},{"title":"Get Contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /contacts/{id}","href":"/api-reference/contacts/get-contact"},{"title":"Update Contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /contacts/{id}","href":"/api-reference/contacts/update-contact"},{"title":"Delete Contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /contacts/{id}","href":"/api-reference/contacts/delete-contact"}]},{"group":"Do not call","pages":[{"title":"List Do-Not-Call Numbers","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /do-not-call","href":"/api-reference/do-not-call/list-do-not-call-numbers"},{"title":"Add Do-Not-Call Number","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /do-not-call","href":"/api-reference/do-not-call/add-do-not-call-number"},{"title":"Get Do-Not-Call Number","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /do-not-call/{phone}","href":"/api-reference/do-not-call/get-do-not-call-number"},{"title":"Remove Do-Not-Call Number","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /do-not-call/{phone}","href":"/api-reference/do-not-call/remove-do-not-call-number"}]},{"group":"Events","pages":[{"title":"Report Event","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /events","href":"/api-reference/events/report-event"}]},{"group":"Templates","pages":[{"title":"List Templates","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /templates","href":"/api-reference/templates/list-templates"},{"title":"Create Template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /templates","href":"/api-reference/templates/create-template"},{"title":"Get Template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /templates/{name}","href":"/api-reference/templates/get-template"},{"title":"Update Template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /templates/{name}","href":"/api-reference/templates/update-template"},{"title":"Delete Template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /templates/{name}","href":"/api-reference/templates/delete-template"},{"title":"Submit Template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /templates/{name}/submit","href":"/api-reference/templates/submit-template"}]},{"group":"Campaigns","pages":[{"title":"List Campaigns","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /campaigns","href":"/api-reference/campaigns/list-campaigns"},{"title":"Create Campaign","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /campaigns","href":"/api-reference/campaigns/create-campaign"},{"title":"Get Campaign","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /campaigns/{id}","href":"/api-reference/campaigns/get-campaign"},{"title":"Launch Campaign","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /campaigns/{id}/launch","href":"/api-reference/campaigns/launch-campaign"},{"title":"Pause Campaign","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /campaigns/{id}/pause","href":"/api-reference/campaigns/pause-campaign"},{"title":"Resume Campaign","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /campaigns/{id}/resume","href":"/api-reference/campaigns/resume-campaign"},{"title":"Cancel Campaign","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /campaigns/{id}/cancel","href":"/api-reference/campaigns/cancel-campaign"}]},{"group":"Sequences","pages":[{"title":"List Sequences","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /sequences","href":"/api-reference/sequences/list-sequences"},{"title":"Create Sequence","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /sequences","href":"/api-reference/sequences/create-sequence"},{"title":"Get Sequence","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /sequences/{sequenceId}","href":"/api-reference/sequences/get-sequence"},{"title":"Update Sequence","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /sequences/{sequenceId}","href":"/api-reference/sequences/update-sequence"},{"title":"Delete Sequence","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /sequences/{sequenceId}","href":"/api-reference/sequences/delete-sequence"},{"title":"Add Sequence Step","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /sequences/{sequenceId}/steps","href":"/api-reference/sequences/add-sequence-step"},{"title":"Activate Sequence","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /sequences/{sequenceId}/activate","href":"/api-reference/sequences/activate-sequence"},{"title":"Pause Sequence","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /sequences/{sequenceId}/pause","href":"/api-reference/sequences/pause-sequence"},{"title":"Enrol in Sequence","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /sequences/{sequenceId}/enrolments","href":"/api-reference/sequences/enrol-in-sequence"}]},{"group":"Forms","pages":[{"title":"List Forms","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /forms","href":"/api-reference/forms/list-forms"},{"title":"Create Form","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /forms","href":"/api-reference/forms/create-form"},{"title":"Get Form","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /forms/{id}","href":"/api-reference/forms/get-form"},{"title":"Update Form","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /forms/{id}","href":"/api-reference/forms/update-form"},{"title":"Delete Form","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /forms/{id}","href":"/api-reference/forms/delete-form"},{"title":"Publish Form","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /forms/{id}/publish","href":"/api-reference/forms/publish-form"}]},{"group":"Phone numbers","pages":[{"title":"List Phone Numbers","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /phone-numbers","href":"/api-reference/phone-numbers/list-phone-numbers"},{"title":"Rent Phone Number","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /phone-numbers","href":"/api-reference/phone-numbers/rent-phone-number"},{"title":"Get Phone Number","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /phone-numbers/{number}","href":"/api-reference/phone-numbers/get-phone-number"},{"title":"Update Phone Number","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /phone-numbers/{number}","href":"/api-reference/phone-numbers/update-phone-number"},{"title":"Release Phone Number","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /phone-numbers/{number}","href":"/api-reference/phone-numbers/release-phone-number"},{"title":"Move Phone Number","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /phone-numbers/{number}/move","href":"/api-reference/phone-numbers/move-phone-number"},{"title":"Get Business Details","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /phone-numbers/business-details","href":"/api-reference/phone-numbers/get-business-details"},{"title":"Send Business Details","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json put /phone-numbers/business-details","href":"/api-reference/phone-numbers/send-business-details"},{"title":"Search Available Phone Numbers","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /phone-numbers/available","href":"/api-reference/phone-numbers/search-available-phone-numbers"},{"title":"List Available Cities","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /phone-numbers/available/cities","href":"/api-reference/phone-numbers/list-available-cities"},{"title":"Import Phone Number","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /phone-numbers/import","href":"/api-reference/phone-numbers/import-phone-number"},{"title":"List Carrier Accounts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /phone-numbers/carrier-accounts","href":"/api-reference/phone-numbers/list-carrier-accounts"},{"title":"Save Carrier Account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json put /phone-numbers/carrier-accounts/{provider}","href":"/api-reference/phone-numbers/save-carrier-account"}]},{"group":"SMS","pages":[{"title":"Get SMS Provider","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /sms/provider","href":"/api-reference/sms/get-sms-provider"},{"title":"Connect SMS Provider","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json put /sms/provider","href":"/api-reference/sms/connect-sms-provider"},{"title":"Disconnect SMS Provider","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /sms/provider","href":"/api-reference/sms/disconnect-sms-provider"},{"title":"List SMS Templates","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /sms/templates","href":"/api-reference/sms/list-sms-templates"},{"title":"Add SMS Template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /sms/templates","href":"/api-reference/sms/add-sms-template"},{"title":"Update SMS Template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /sms/templates/{id}","href":"/api-reference/sms/update-sms-template"},{"title":"Delete SMS Template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /sms/templates/{id}","href":"/api-reference/sms/delete-sms-template"},{"title":"Send Test SMS","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /sms/test","href":"/api-reference/sms/send-test-sms"}]},{"group":"Voices","pages":[{"title":"List Voices","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /voices","href":"/api-reference/voices/list-voices"}]},{"group":"Voice clones","pages":[{"title":"List Voice Clones","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /voice-clones","href":"/api-reference/voice-clones/list-voice-clones"},{"title":"Create Voice Clone","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /voice-clones","href":"/api-reference/voice-clones/create-voice-clone"},{"title":"Get Voice Clone","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /voice-clones/{id}","href":"/api-reference/voice-clones/get-voice-clone"},{"title":"Update Voice Clone","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /voice-clones/{id}","href":"/api-reference/voice-clones/update-voice-clone"},{"title":"Delete Voice Clone","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /voice-clones/{id}","href":"/api-reference/voice-clones/delete-voice-clone"}]},{"group":"Models","pages":[{"title":"List Models","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /models","href":"/api-reference/models/list-models"}]},{"group":"Bring your own keys","pages":[{"title":"Get BYOK Status","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /byok","href":"/api-reference/bring-your-own-keys/get-byok-status"},{"title":"Turn BYOK On or Off","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /byok","href":"/api-reference/bring-your-own-keys/turn-byok-on-or-off"},{"title":"List BYOK Keys","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /byok/credentials","href":"/api-reference/bring-your-own-keys/list-byok-keys"},{"title":"Add BYOK Key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json put /byok/credentials","href":"/api-reference/bring-your-own-keys/add-byok-key"},{"title":"Update BYOK Key Model","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /byok/credentials/{kind}","href":"/api-reference/bring-your-own-keys/update-byok-key-model"},{"title":"Delete BYOK Key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /byok/credentials/{kind}","href":"/api-reference/bring-your-own-keys/delete-byok-key"},{"title":"List BYOK Voices","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /byok/voices","href":"/api-reference/bring-your-own-keys/list-byok-voices"},{"title":"Preview BYOK Voice","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /byok/voices/preview","href":"/api-reference/bring-your-own-keys/preview-byok-voice"}]},{"group":"Webhooks","pages":[{"title":"List Webhooks","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /webhooks","href":"/api-reference/webhooks/list-webhooks"},{"title":"Create Webhook","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /webhooks","href":"/api-reference/webhooks/create-webhook"},{"title":"Get Webhook","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /webhooks/{id}","href":"/api-reference/webhooks/get-webhook"},{"title":"Update Webhook","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /webhooks/{id}","href":"/api-reference/webhooks/update-webhook"},{"title":"Delete Webhook","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /webhooks/{id}","href":"/api-reference/webhooks/delete-webhook"},{"title":"List Webhook Deliveries","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /webhooks/{id}/deliveries","href":"/api-reference/webhooks/list-webhook-deliveries"},{"title":"Test Webhook","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /webhooks/{id}/test","href":"/api-reference/webhooks/test-webhook"},{"title":"Redeliver Webhook Events","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /webhooks/{id}/redeliver","href":"/api-reference/webhooks/redeliver-webhook-events"}]},{"group":"Usage","pages":[{"title":"Get Usage","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /usage","href":"/api-reference/usage/get-usage"},{"title":"Get Daily Usage","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /usage/daily","href":"/api-reference/usage/get-daily-usage"},{"title":"List Call Log","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /usage/calls","href":"/api-reference/usage/list-call-log"},{"title":"List Wallet Ledger","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /wallet/ledger","href":"/api-reference/usage/list-wallet-ledger"},{"title":"List Invoices","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /invoices","href":"/api-reference/usage/list-invoices"},{"title":"Get Customers Usage","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /customers/usage","href":"/api-reference/usage/get-customers-usage"},{"title":"Get Calls Summary","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /calls/summary","href":"/api-reference/usage/get-calls-summary"},{"title":"Get WhatsApp Summary","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /whatsapp/summary","href":"/api-reference/usage/get-whatsapp-summary"}]},{"group":"Analytics","pages":[{"title":"Get Dashboard","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /dashboard","href":"/api-reference/analytics/get-dashboard"},{"title":"Get Agent Analytics","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents/{id}/analytics","href":"/api-reference/analytics/get-agent-analytics"}]},{"group":"Customers","pages":[{"title":"List Customers","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /customers","href":"/api-reference/customers/list-customers"},{"title":"Create Customer","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /customers","href":"/api-reference/customers/create-customer"},{"title":"Get Customer","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /customers/{id}","href":"/api-reference/customers/get-customer"},{"title":"Update Customer","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /customers/{id}","href":"/api-reference/customers/update-customer"},{"title":"Delete Customer","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /customers/{id}","href":"/api-reference/customers/delete-customer"},{"title":"Restore Customer","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /customers/{id}/restore","href":"/api-reference/customers/restore-customer"},{"title":"List Customer Keys","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /customers/{id}/keys","href":"/api-reference/customers/list-customer-keys"},{"title":"Create Customer Key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /customers/{id}/keys","href":"/api-reference/customers/create-customer-key"},{"title":"Revoke Customer Key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /customers/{id}/keys/{keyId}","href":"/api-reference/customers/revoke-customer-key"}]},{"group":"Workspace","pages":[{"title":"Get Workspace","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /workspace","href":"/api-reference/workspace/get-workspace"},{"title":"Update Workspace","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /workspace","href":"/api-reference/workspace/update-workspace"}]},{"group":"Projects","pages":[{"title":"List Projects","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects","href":"/api-reference/projects/list-projects"},{"title":"Create Project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects","href":"/api-reference/projects/create-project"},{"title":"Get Project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{id}","href":"/api-reference/projects/get-project"},{"title":"Update Project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /projects/{id}","href":"/api-reference/projects/update-project"},{"title":"Delete Project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /projects/{id}","href":"/api-reference/projects/delete-project"}]},{"group":"Teams","pages":[{"title":"List Teams","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /teams","href":"/api-reference/teams/list-teams"},{"title":"Create Team","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /teams","href":"/api-reference/teams/create-team"},{"title":"Get Team","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /teams/{id}","href":"/api-reference/teams/get-team"},{"title":"Update Team","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /teams/{id}","href":"/api-reference/teams/update-team"},{"title":"Delete Team","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /teams/{id}","href":"/api-reference/teams/delete-team"},{"title":"Add Team Member","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json put /teams/{id}/members/{memberId}","href":"/api-reference/teams/add-team-member"},{"title":"Remove Team Member","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /teams/{id}/members/{memberId}","href":"/api-reference/teams/remove-team-member"},{"title":"Grant Team Project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json put /teams/{id}/projects/{projectId}","href":"/api-reference/teams/grant-team-project"},{"title":"Revoke Team Project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /teams/{id}/projects/{projectId}","href":"/api-reference/teams/revoke-team-project"}]},{"group":"Members","pages":[{"title":"List Members","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /members","href":"/api-reference/members/list-members"},{"title":"Get Member","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /members/{id}","href":"/api-reference/members/get-member"},{"title":"Update Member","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /members/{id}","href":"/api-reference/members/update-member"},{"title":"Remove Member","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /members/{id}","href":"/api-reference/members/remove-member"}]},{"group":"Invitations","pages":[{"title":"List Invitations","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /invitations","href":"/api-reference/invitations/list-invitations"},{"title":"Create Invitation","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /invitations","href":"/api-reference/invitations/create-invitation"},{"title":"Get Invitation","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /invitations/{id}","href":"/api-reference/invitations/get-invitation"},{"title":"Revoke Invitation","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /invitations/{id}","href":"/api-reference/invitations/revoke-invitation"}]},{"group":"Notifications","pages":[{"title":"Get Notification Preferences","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /notification-preferences","href":"/api-reference/notifications/get-notification-preferences"},{"title":"Update Notification Preferences","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /notification-preferences","href":"/api-reference/notifications/update-notification-preferences"}]},{"group":"Saved replies","pages":[{"title":"List Saved Replies","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /saved-replies","href":"/api-reference/saved-replies/list-saved-replies"},{"title":"Create Saved Reply","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /saved-replies","href":"/api-reference/saved-replies/create-saved-reply"},{"title":"Get Saved Reply","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /saved-replies/{id}","href":"/api-reference/saved-replies/get-saved-reply"},{"title":"Update Saved Reply","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /saved-replies/{id}","href":"/api-reference/saved-replies/update-saved-reply"},{"title":"Delete Saved Reply","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /saved-replies/{id}","href":"/api-reference/saved-replies/delete-saved-reply"}]},{"group":"Contact groups","pages":[{"title":"List Contact Groups","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /contact-groups","href":"/api-reference/contact-groups/list-contact-groups"},{"title":"Create Contact Group","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /contact-groups","href":"/api-reference/contact-groups/create-contact-group"},{"title":"Get Contact Group","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /contact-groups/{id}","href":"/api-reference/contact-groups/get-contact-group"},{"title":"Rename Contact Group","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /contact-groups/{id}","href":"/api-reference/contact-groups/rename-contact-group"},{"title":"Delete Contact Group","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /contact-groups/{id}","href":"/api-reference/contact-groups/delete-contact-group"},{"title":"Add Contacts To Group","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /contact-groups/{id}/members","href":"/api-reference/contact-groups/add-contacts-to-group"},{"title":"Remove Contacts From Group","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /contact-groups/{id}/members","href":"/api-reference/contact-groups/remove-contacts-from-group"}]}]},{"tab":"What's New","pages":[{"title":"What's New","href":"/whats-new"}]}]},"title":"Get Call Timeline - ThinnestAI","buildId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","deploymentId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-rfhihCWU.js","utils-BmH1XFxk.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BcNsxPKB.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BAES3tkd.js","snippetPresets-DCMQBKLP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-D6l_bzE9.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BOktbnNh.js","shallow-BCs8SgM7.js","getApiPlaygroundDisplay-DEmW5bJB.js","CodeSnippet-CpZOpB9C.js","CodeSnippets-BOBDqibl.js","Page-D5fEM6aW.js","getPastedJson-DH2JBvmr.js","icon-BBJH-kKh.js","MethodPill-D2Sd5NLC.js","DuplicateIcon-CGgfL2qN.js","createIcon-BKudBBzi.js","DynamicMarkdown-85clUA0i.js","SectionHeading-D0JiMgDx.js","axios-vUo_bRtp.js","Markdown-Cfiy0xZO.js","clsx-rL8ZCCw4.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-aeztFa9U.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BywkCr5C.js"]}