Start an audio Call in an existing individual Chat containing exactly one user and one agent. The caller comes from authentication. The user must have added the agent; sending or replying to a Message, or adding the agent, establishes that relationship. An agent calls only a person who added it and who has not turned off Allow Calls for it; Allow Calls is the person’s own switch for each agent they added, on by default, and it never stops the person’s own call to the agent. A block in either direction prevents the call. A group Chat is rejected even when it has only two current members. Reuse the same Idempotency-Key and body after an uncertain response. Relay emits call.created through the agent’s configured event transport. Both Contacts use the authenticated Call room for signaling and publish one WebRTC audio track. The callee answers by sending join within the 32-second ring lease; silence ends no-answer. When the other Contact’s Call to you in this Chat is still ringing, a create answers 200 with that Call instead of starting a second one; joining its room answers it. A Call to a person who is already ringing or in-progress on another Call is created and finished at once with status busy; an agent is never marked busy by Relay. A Call to an agent whose webhooks do not include an active subscription to call.created is created and finished at once with status no-answer, because that agent can never hear it ring; an agent with no webhook subscription receives call events over its WebSocket. An answered Call has no duration limit. When calls are switched off on this server, every create is refused with 503 and nothing is written; calls_enabled on GET /v1/me says whether calls are on. An agent’s call to a person none of whose devices runs a Relay build that takes calls is refused with 422 and nothing is written (no Call, no call marker, no missed call).
Nothing was created. Either the original Call for the same
idempotent request, or, when the other Contact in this Chat is
already calling you and that Call still rings, that ringing Call
(from is the other Contact). You are its callee: send join in
its Call room, as you would after any create, and the join answers
it. Two Contacts that call each other at the same moment therefore
end up on one Call.
{"docsConfig":{"theme":"luma","$schema":"https://mintlify.com/docs.json","name":"Relay","description":"Relay API v1 documentation.","colors":{"primary":"#006BE6","light":"#4DA3FF","dark":"#007EFF"},"logo":{"light":"https://mintcdn.com/relay-staging/fjL9_TNOlSXF6Cqt/logo/light.png?fit=max\u0026auto=format\u0026n=fjL9_TNOlSXF6Cqt\u0026q=85\u0026s=66c2d390ee2afe0b0d1d99bc84b1ca0d","dark":"https://mintcdn.com/relay-staging/YFXuCpEIcllu8dZZ/logo/dark.png?fit=max\u0026auto=format\u0026n=YFXuCpEIcllu8dZZ\u0026q=85\u0026s=7c2ce728bd59af19440a86a1e1235c16","href":"/"},"favicon":"https://mintcdn.com/relay-staging/ACSI-_boGHGW-2RY/favicon-staging.png?fit=max\u0026auto=format\u0026n=ACSI-_boGHGW-2RY\u0026q=85\u0026s=55869334cfb76b3c7e5ff51626edddb8","api":{"params":{"expanded":"closed"},"playground":{"display":"simple"},"examples":{"defaults":"required","languages":["curl"]}},"appearance":{"default":"system","strict":false},"navbar":{"links":[{"icon":"copy","href":"/integrations/agent-prompt#relay-agent-prompt","label":"Copy agent prompt"}],"primary":{"type":"button","label":"Console","href":"https://console.staging.relayapp.im"}},"footer":{"socials":{"website":"https://relayapp.im","github":"https://github.com/relaymessenger"}},"seo":{"metatags":{"og:image":"https://docs.staging.relayapp.im/images/og-image.png","twitter:image":"https://docs.staging.relayapp.im/images/og-image.png","twitter:card":"summary_large_image"}},"fonts":{"family":"Figtree"},"contextual":{"options":["copy","view"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"relay-staging","hasAudioNarration":false,"actualSubdomain":"relay-staging","customDomains":["docs.staging.relayapp.im"],"gitSource":{"type":"github","owner":"relaymessenger","repo":"relay-docs","deployBranch":"staging","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ad9bfcb9679105657d485cb","collectionId":"6736b8e2-1e01-4508-8c21-19c70f62684f","liveDeploymentHistoryId":"6ad9bfcb9679105657d485cb","schemaVersion":"v3"},"entitlements":{},"buildId":"6ad9bfcb9679105657d485cb","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"default","tag":"Guides","count":102},{"language":"default","tag":"CLI","count":92},{"language":"default","tag":"API Reference","count":68},{"language":"default","tag":"Chats","count":54},{"language":"default","tag":"Agents","count":28},{"language":"default","tag":"Webhook Events","count":28},{"language":"default","tag":"Error Codes","count":23},{"language":"default","tag":"Calls","count":20},{"language":"default","tag":"2xxx — Resource errors","count":19},{"language":"default","tag":"Webhooks","count":18}]},"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":true},"customCss":[{"filePath":"style.css","content":"@keyframes buttons-browser-rise{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes selection-appear{0%{opacity:0}to{opacity:1}}@keyframes selection-rise{0%{transform:translateY(12px);opacity:0}to{transform:translateY(0);opacity:1}}:root{--relay-brand-blue:#0b75ff}html.dark img[src*=\"/images/brands/cline.svg\"],html.dark img[src*=\"/images/brands/elevenlabs.svg\"],html.dark img[src*=\"/images/brands/openai.svg\"],html.dark img[src*=\"/images/brands/opencode.svg\"],html.dark img[src*=\"/images/brands/pipecat.svg\"],html.dark img[src*=\"/images/brands/vercel.svg\"]{filter:invert(1)}html.dark img[src*=\"/images/brands/livekit.svg\"]{background:#fff;border-radius:3px}@media (min-width:600px){#navbar div.flex-1:has(>a>img.nav-logo){flex:0 0 auto!important}#navbar nav[aria-label=Main]{justify-content:flex-start!important}}#navbar div.absolute.w-full.h-full.border-b,#navbar>div.border-b{border-bottom-width:0}[data-component-part=scroll-area-scrollbar]{background-color:transparent}html{scrollbar-width:thin;scrollbar-color:#d4d4d4 transparent}html.dark{scrollbar-color:#525252 transparent}.hero-art{display:block}.hero-art>svg{display:block;width:100%;height:auto}.dark .hero-art-light,.hero-art-dark{display:none}.dark .hero-art-dark{display:block}.frame:has(>.relay-preview){padding:0;background:0 0;border:0;box-shadow:none;border-radius:12px}.frame:has(>.relay-preview)>.absolute.inset-0{display:none}.frame:has(>.relay-preview)>figcaption{margin-top:8px;padding:0 8px;color:rgb(var(--gray-500))}.dark .frame:has(>.relay-preview)>figcaption{color:rgb(var(--gray-400))}.relay-preview{position:relative;background:#fff;color:#000}.dark .relay-preview{background:#000;color:#fff}.relay-preview>*{width:100%;min-width:0}.relay-preview-reset{position:absolute;top:8px;right:8px;z-index:3;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;margin:0;padding:0;border:0;border-radius:8px;background:0 0;color:rgb(var(--gray-400));cursor:pointer;transition:color .15s ease-in-out,background-color .15s ease-in-out}.relay-preview-reset:hover{color:rgb(var(--gray-600));background:rgb(var(--gray-100))}.dark .relay-preview-reset{color:rgb(var(--gray-500))}.dark .relay-preview-reset:hover{color:rgb(var(--gray-300));background:rgb(255 255 255/.1)}.relay-preview-reset:focus-visible{outline:2px solid currentColor;outline-offset:2px}.relay-preview-reset svg.icon{background-color:currentColor}.relay-preview-bar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px;padding:0 12px 16px}.relay-preview-seg{display:inline-flex;flex-wrap:wrap;justify-content:center;padding:2px;border-radius:9px;background:rgb(var(--gray-100))}.dark .relay-preview-seg{background:rgb(255 255 255/.08)}.relay-preview-seg button{margin:0;padding:3px 10px;border:0;border-radius:7px;background:0 0;color:rgb(var(--gray-500));font:inherit;font-size:12px;font-weight:500;line-height:18px;white-space:nowrap;cursor:pointer;transition:color .15s ease-in-out,background-color .15s ease-in-out}.relay-preview-seg button:hover{color:rgb(var(--gray-800))}.relay-preview-seg button[aria-pressed=true]{background:#fff;color:rgb(var(--gray-900));box-shadow:0 1px 2px rgb(0 0 0/.1),0 0 0 .5px rgb(0 0 0/.06)}.dark .relay-preview-hint,.dark .relay-preview-seg button{color:rgb(var(--gray-400))}.dark .relay-preview-seg button:hover{color:rgb(var(--gray-200))}.dark .relay-preview-seg button[aria-pressed=true]{background:rgb(255 255 255/.16);color:#fff;box-shadow:none}.relay-preview-seg button:focus-visible{outline:2px solid currentColor;outline-offset:1px}.relay-preview-hint{color:rgb(var(--gray-500));font-size:12px;line-height:18px}.buttons-preview-frame{position:relative;overflow:hidden}.buttons-preview-stage{display:flex;flex-direction:column;box-sizing:border-box;max-width:402px;margin:0 auto;padding:16px}.buttons-preview-message{display:flex;flex-direction:column;align-self:flex-start;gap:8px;width:260px;max-width:100%}.selection-preview .buttons-preview-message{align-self:stretch;width:auto}.buttons-preview-text{isolation:isolate;padding:10px 14px;border-radius:20px;background:#f1f3f5;color:#111827;font-size:17px;line-height:1.35;white-space:pre-wrap;overflow-wrap:anywhere}.dark .buttons-preview-text{background:#242b36;color:#f3f4f6}.buttons-preview-text.has-tail{position:relative;margin-bottom:7px}.buttons-preview-text-tail{position:absolute;left:0;top:calc(100% - 16px);z-index:-1;fill:#f1f3f5}.dark .buttons-preview-text-tail{fill:#242b36}.buttons-preview-stack{display:flex;flex-direction:column;align-self:flex-start;gap:4px;width:75%;max-width:75%}.buttons-preview-pill{box-sizing:border-box;display:flex;justify-content:space-between;align-items:center;gap:5px;width:100%;min-height:48px;padding:12px 16px 12px 20px;border-radius:24px;background:#eef5ff;color:#0b75ff;font-weight:600;font-size:17px;line-height:24px;font-family:-apple-system,BlinkMacSystemFont,\"SF Pro Text\",system-ui,sans-serif}.dark .buttons-preview-pill{background:#101e33;color:#6fb0ff}.buttons-preview-action{border:0;text-align:left;cursor:pointer;transition:background-color .2s ease-in-out,transform .15s ease-out}.buttons-preview-action:active{transform:scale(.97);opacity:1}.buttons-preview-action:focus-visible{outline:2px solid currentColor;outline-offset:3px}.buttons-reply{margin-top:8px;animation:selection-appear .2s ease-in-out}.buttons-reply svg{max-width:100%;height:auto}.buttons-preview-own,.buttons-reply{align-self:flex-end;max-width:100%}.buttons-preview-arrow{flex:none;width:1em;height:1em;font-size:.72em;line-height:1}.buttons-preview-tap path{fill:#0b75ff}.buttons-preview-tap text,.buttons-url-preview{font-family:-apple-system,BlinkMacSystemFont,\"SF Pro Text\",\"Inter\",system-ui,sans-serif}.buttons-preview-tap text{fill:#fff;font-size:17px}.buttons-preview.is-browser-open .buttons-preview-frame{min-height:440px}.buttons-url-preview{position:absolute;inset:0;display:flex;flex-direction:column;background:#fff;color:#111827;animation:buttons-browser-rise .28s ease-out}.dark .buttons-url-preview{background:#000;color:#f3f4f6}.buttons-browser-bar{flex:none;display:grid;grid-template-columns:44px 1fr 44px;align-items:center;gap:4px;padding:10px 8px;background:#f2f2f7;border-bottom:1px solid #e5e5ea}.dark .buttons-browser-bar{background:#1c1c1e;border-bottom-color:#2c2c2e}.buttons-url-close{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;margin:0 auto;padding:0;border:0;border-radius:16px;background:#e3e3e8;color:#3c3c43;cursor:pointer;transition:transform .15s ease-out}.dark .buttons-url-close{background:#2c2c2e;color:#ebebf5}.buttons-url-close:active{transform:scale(.94)}.buttons-url-close:focus-visible{outline:2px solid #0b75ff;outline-offset:2px}.buttons-url-close svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round}.buttons-browser-address{display:flex;align-items:center;justify-content:center;gap:5px;min-width:0;height:34px;padding:0 12px;border-radius:12px;background:#e3e3e8;font-size:14px;font-weight:500}.dark .buttons-browser-address{background:#2c2c2e}.buttons-browser-address span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.buttons-browser-address svg{flex:none;width:10px;height:12px;fill:none;stroke:currentColor;stroke-width:1.4}.buttons-browser-reload,.buttons-browser-toolbar svg{fill:none;stroke:#0b75ff;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.buttons-browser-reload{justify-self:center;width:16px;height:16px}.buttons-browser-page{flex:1 1 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:24px;text-align:center}.buttons-url-caption{font-size:12px;color:#68717e}.dark .buttons-browser-note,.dark .buttons-url-caption{color:#a0a7b2}.buttons-url-address{font-size:15px;font-weight:600;overflow-wrap:anywhere}.buttons-browser-note{max-width:240px;font-size:13px;color:#68717e}.buttons-browser-toolbar{flex:none;display:flex;justify-content:space-around;padding:10px 8px 14px;background:#f2f2f7;border-top:1px solid #e5e5ea}.dark .buttons-browser-toolbar{background:#1c1c1e;border-top-color:#2c2c2e}.buttons-browser-toolbar svg{width:22px;height:22px}.buttons-browser-toolbar svg.is-disabled{stroke:#c7c7cc}.dark .buttons-browser-toolbar svg.is-disabled{stroke:#48484a}.selection-preview.is-sheet-open .buttons-preview-frame{min-height:400px}.selection-answer,.selection-prompt{display:block;align-self:flex-start;max-width:100%;margin:0;padding:0;border:0;background:0 0;cursor:pointer;transition:transform .15s ease-out}.selection-answer{align-self:flex-end;animation:selection-appear .2s ease-in-out}.selection-answer:active,.selection-prompt:active{transform:scale(.97);opacity:1}.selection-answer:focus-visible,.selection-prompt:focus-visible,.selection-send:focus-visible,.selection-sheet-grabber:focus-visible,.selection-sheet-option:focus-visible{outline:2px solid #0b75ff;outline-offset:3px}.dark .selection-answer:focus-visible,.dark .selection-prompt:focus-visible,.dark .selection-send:focus-visible,.dark .selection-sheet-grabber:focus-visible,.dark .selection-sheet-option:focus-visible{outline-color:#6fb0ff}.selection-card{display:block;max-width:100%;height:auto;font-family:-apple-system,BlinkMacSystemFont,\"SF Pro Text\",\"Inter\",system-ui,sans-serif}.selection-card-leading .selection-card-shape{fill:#f1f3f5}.dark .selection-card-leading .selection-card-shape{fill:#242b36}.selection-card-trailing .selection-card-shape{fill:#0b75ff}.selection-card-title{font-size:15px;font-weight:600}.selection-card-subtitle{font-size:13px}.selection-card-label{font-size:15px}.selection-card-leading .selection-card-label,.selection-card-leading .selection-card-title{fill:#111827}.selection-card-leading .selection-card-subtitle{fill:#68717e}.selection-card-leading .selection-card-mark{stroke:#111827}.selection-card-leading .selection-card-chevron{stroke:#68717e}.dark .selection-card-leading .selection-card-label,.dark .selection-card-leading .selection-card-title{fill:#f3f4f6}.dark .selection-card-leading .selection-card-subtitle{fill:#a0a7b2}.dark .selection-card-leading .selection-card-mark{stroke:#f3f4f6}.dark .selection-card-leading .selection-card-chevron{stroke:#a0a7b2}.selection-card-trailing .selection-card-label,.selection-card-trailing .selection-card-title{fill:#fff}.selection-card-trailing .selection-card-mark{stroke:#fff}.selection-card-trailing .selection-card-chevron{stroke:rgba(255,255,255,.75)}.selection-card-chevron,.selection-card-mark{fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}.selection-sheet-layer,.selection-sheet-scrim{position:absolute;inset:0}.selection-sheet-scrim{background:rgba(15,23,42,.38)}.selection-sheet{position:absolute;left:0;right:0;bottom:0;display:flex;flex-direction:column;max-height:100%;border-radius:16px 16px 11px 11px;background:#fff;color:#111827;font-family:-apple-system,BlinkMacSystemFont,\"SF Pro Text\",\"Inter\",system-ui,sans-serif;animation:selection-rise .22s ease-out}.dark .selection-sheet{background:#151a23;color:#f3f4f6}.selection-sheet-grabber{flex:none;align-self:center;width:56px;height:20px;margin:0;padding:0;border:0;background:0 0;cursor:pointer}.selection-sheet-grabber::before{content:\"\";display:block;width:36px;height:5px;margin:7px auto 0;border-radius:3px;background:#c7c7cc}.dark .selection-sheet-grabber::before{background:#48484a}.selection-sheet-title{flex:none;padding:12px 24px;font-size:22px;font-weight:700;line-height:1.2}.selection-sheet-list{flex:1 1 auto;min-height:0;max-height:260px;overflow-y:auto;padding-bottom:76px;-webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 14px,#000 calc(100% - 56px),transparent 100%);mask-image:linear-gradient(to bottom,transparent 0,#000 14px,#000 calc(100% - 56px),transparent 100%)}.selection-sheet.is-read-only .selection-sheet-list{padding-bottom:26px;-webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 14px);mask-image:linear-gradient(to bottom,transparent 0,#000 14px)}.selection-sheet-option{position:relative;box-sizing:border-box;display:flex;align-items:center;gap:12px;width:100%;margin:0;padding:14px 20px;border:0;background:0 0;color:inherit;font:inherit;font-size:16px;text-align:left;cursor:pointer}.selection-sheet-option+.selection-sheet-option::before{content:\"\";position:absolute;top:0;left:52px;right:0;height:1px;background:#e5e7eb}.dark .selection-sheet-option+.selection-sheet-option::before{background:#2b323d}.selection-sheet-option:disabled{cursor:default}.selection-sheet-label{overflow-wrap:anywhere;font-weight:600}.selection-box{flex:none;width:22px;height:22px}.selection-box circle{fill:transparent;stroke:#b9bec7;stroke-width:1.5;transition:fill .2s ease-in-out,stroke .2s ease-in-out}.dark .selection-box circle{stroke:#6b7280}.selection-box path{fill:none;stroke:#fff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;opacity:0;transition:opacity .2s ease-in-out}.selection-sheet-option[aria-checked=true] .selection-box circle{fill:#0b75ff;stroke:#0b75ff}.selection-sheet-option[aria-checked=true] .selection-box path{opacity:1}.selection-sheet-footer{position:absolute;left:0;right:0;bottom:0;display:flex;justify-content:center;padding:0 0 16px;pointer-events:none}.selection-send{box-sizing:border-box;display:block;width:calc(50% + 16px);height:48px;margin:0;padding:0;border:0;border-radius:24px;background:#0b75ff;color:#fff;box-shadow:0 6px 18px rgba(15,23,42,.16),inset 0 1px 0 rgba(255,255,255,.35);pointer-events:auto;font-family:inherit;font-size:17px;font-weight:600;opacity:1;cursor:pointer;transition:background-color .2s ease-in-out,color .2s ease-in-out,transform .15s ease-out}.selection-send:active:not(:disabled){transform:scale(.96);opacity:1}.selection-send:disabled{background:#eceef1;color:rgba(60,60,67,.3);opacity:1;cursor:default}.dark .selection-send:disabled{background:#2c2c2e;color:rgba(235,235,245,.3)}.native-dialog,.native-preview{--app-blue:var(--relay-brand-blue);--app-incoming:#e9e9e9;--app-ink:#000;--app-secondary:rgba(60,60,67,.6);--app-group:#f2f2f7;--app-field:#fff;--app-line:rgba(60,60,67,.18);color:var(--app-ink);font:17px/1.3 -apple-system,BlinkMacSystemFont,\"SF Pro Text\",system-ui,sans-serif}.dark .native-dialog,.dark .native-preview{--app-blue:#007eff;--app-incoming:#2c2c2e;--app-ink:#fff;--app-secondary:rgba(235,235,245,.6);--app-group:#000;--app-field:#1c1c1e;--app-line:rgba(84,84,88,.65)}.native-dialog *,.native-preview *{box-sizing:border-box}.native-dialog button,.native-preview button{font:inherit;cursor:pointer}.native-dialog :focus-visible,.native-preview button:focus-visible{outline:2px solid var(--app-blue);outline-offset:3px}.native-preview{position:relative}.native-transcript{display:flex;flex-direction:column;gap:8px;max-width:402px;margin:0 auto;padding:16px;box-sizing:border-box}.native-text{align-self:flex-start;max-width:calc(100% - 94px);border-radius:20px;padding:10px 14px;background:var(--app-incoming);overflow-wrap:anywhere}.native-capsule{border:0;border-radius:999px;padding:8px 12px;min-height:40px;width:100%;background:color-mix(in srgb,var(--app-blue) 15%,transparent);color:var(--app-blue);font-weight:600!important;line-height:22px}.form-calendar-grid button[aria-pressed=true],.native-capsule.is-primary{background:var(--app-blue);color:#fff}.native-capsule:active{opacity:.7;transform:scale(.97)}.native-capsule:disabled{opacity:.35;cursor:default}.rich-shelf{display:flex;align-items:stretch;gap:8px;padding-bottom:7px}.rich-shelf.is-carousel{scroll-behavior:smooth;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scrollbar-width:thin}.rich-balloon{position:relative;isolation:isolate;flex:0 0 min(350px,calc(100% - 94px));min-width:0;scroll-snap-align:start}.rich-balloon.is-small{flex-basis:min(180px,calc(100% - 94px))}.rich-card,.rich-media{background:var(--app-incoming)}.rich-card{display:flex;flex-direction:column;height:100%;overflow:hidden;border-radius:18px}.rich-media{display:block;flex-shrink:0;width:100%;padding:0;border:0}.rich-media:focus-visible{outline-offset:-3px}.rich-media img{display:block;width:100%;height:100%;object-fit:cover;margin:0;border-radius:0}.rich-copy{padding:16px 16px 0}.rich-media+.rich-copy{padding-top:12px}.rich-title{font-size:17px;font-weight:600;overflow-wrap:anywhere}.rich-description{margin-top:2px;color:var(--app-secondary);overflow-wrap:anywhere}.rich-suggestions{display:flex;flex-direction:column;gap:8px;padding:12px 16px 16px;margin-top:auto}.native-tail{position:absolute;left:0;bottom:-7px;width:23px;height:24px;fill:var(--app-incoming);z-index:-1}.rich-followups{display:flex;flex-direction:column;gap:4px;width:calc((100% - 94px)*.75)}.rich-followups .native-capsule{min-height:48px;text-align:left;padding:12px 16px 12px 20px}.rich-scroll-controls{display:flex;justify-content:center;gap:12px}.rich-scroll-controls button{background:0 0;border:0;color:var(--app-blue);width:32px;height:28px;border-radius:8px;font-size:24px}.native-replies{display:flex;flex-direction:column;gap:8px}.native-replies:empty{display:none}.native-preview .buttons-preview-tap path,.native-preview .selection-card-trailing .selection-card-shape{fill:var(--app-blue)}.native-preview .selection-card-leading .selection-card-shape{fill:var(--app-incoming)}.native-preview .selection-card-leading .selection-card-title{fill:var(--app-ink)}.native-preview .selection-card-leading .selection-card-subtitle{fill:var(--app-secondary)}.native-preview .selection-card-leading .selection-card-chevron{stroke:var(--app-secondary)}.form-preview .selection-card-leading .selection-card-subtitle{fill:rgba(60,60,67,.72)}.dark .form-preview .selection-card-leading .selection-card-subtitle{fill:rgba(235,235,245,.7)}.form-preview .selection-card-trailing .selection-card-subtitle{fill:rgba(255,255,255,.8)}.dark .form-preview .selection-card-trailing .selection-card-subtitle{fill:rgba(255,255,255,.6)}.rich-followups .native-capsule{background:#eef5ff;color:#0b75ff}.dark .rich-followups .native-capsule{background:#101e33;color:#6fb0ff}.native-form-answer,.native-form-prompt{display:block;width:fit-content;max-width:100%;background:0 0;border:0;padding:0}.native-form-prompt{align-self:flex-start}.native-form-answer{align-self:flex-end}.native-form-answer svg,.native-form-prompt svg{display:block;max-width:100%;height:auto}.native-response{padding:8px 16px;font-size:13px}.native-response summary{cursor:pointer;color:var(--app-secondary)}.native-response pre{font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere;max-height:220px;overflow:auto}.native-dialog{width:min(402px,calc(100vw - 24px));max-height:min(680px,90dvh);padding:0;border:0;border-radius:28px;background:var(--app-field);margin:auto;box-shadow:0 20px 80px #0003}.native-dialog::backdrop{background:#0006}.native-dialog[open]{display:flex;flex-direction:column}.native-sheet-bar{flex-shrink:0;display:grid;grid-template-columns:1fr 32px;align-items:center;gap:8px;padding:12px 16px;font-size:17px}.native-sheet-bar button{width:32px;height:32px;padding:0;border:0;border-radius:50%;background:var(--app-incoming);color:var(--app-ink);font-size:24px;line-height:1}.native-sheet-bar .native-back{color:var(--app-blue);background:0 0;font-size:32px}.rich-photo{width:100%;min-height:0;object-fit:contain;margin:0}.rich-url{padding:24px;overflow-wrap:anywhere}.native-form-content h3,.rich-url p{color:var(--app-secondary);font-size:15px}.native-form-sheet{background:var(--app-group);height:min(620px,90dvh)}.native-form-sheet .native-sheet-bar{grid-template-columns:32px 1fr 32px;text-align:center}.native-grabber{flex-shrink:0;width:36px;height:5px;border-radius:3px;background:var(--app-line);margin:8px auto 0}.native-form-content{overflow-y:auto;flex:1;min-height:0;padding:8px 20px 20px}.native-form-content section{margin:16px 0 24px}.native-form-content h3{display:flex;justify-content:space-between;gap:8px;margin:0 16px 7px;font-size:13px;font-weight:400;text-transform:uppercase}.native-form-content h3 span:last-child:not(:first-child){text-transform:none}.native-field-group{background:var(--app-field);border-radius:12px;overflow:hidden}.native-field-group input,.native-field-group textarea{display:block;width:100%;border:0;border-radius:0;padding:12px 16px;margin:0;background:0 0;color:var(--app-ink);font:inherit;resize:vertical}.native-field-group input::placeholder,.native-field-group textarea::placeholder{color:var(--app-secondary)}.native-field-group:focus-within{outline:2px solid var(--app-blue);outline-offset:2px}.native-field-group :focus-visible{outline-offset:-3px}.form-choice,.form-date,.form-picker{display:flex;width:100%;min-height:44px;gap:8px;align-items:center;justify-content:space-between;border:0;padding:10px 16px;background:0 0;color:var(--app-ink);text-align:left}.form-choice+.form-choice{border-top:.5px solid var(--app-line)}.form-check{color:var(--app-blue);font-weight:600}.form-switch{display:flex;align-items:center;width:51px;height:31px;flex-shrink:0;border-radius:16px;padding:2px;background:var(--app-line)}.form-switch>span{display:block;width:27px;height:27px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #0003}.form-switch.is-on{background:var(--app-blue);justify-content:flex-end}.form-picker select{max-width:60%;min-width:64px;border:0;color:var(--app-blue);background:0 0;font:inherit}.form-date>span:last-child{padding:6px 11px;border-radius:999px;background:var(--app-incoming);color:var(--app-blue)}.form-calendar{padding:12px 16px}.form-calendar-heading{display:flex;align-items:center;gap:12px}.form-calendar-heading strong{flex:1;font-size:17px}.form-calendar-heading button{background:0 0;color:var(--app-blue);border:0;font-size:28px}.form-calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;text-align:center;margin-top:12px}.form-calendar-grid>span{font-size:12px;color:var(--app-secondary)}.form-calendar-grid button{aspect-ratio:1;padding:0;border:0;border-radius:50%;color:var(--app-ink);background:0 0}.form-calendar button:disabled{opacity:.25;cursor:default}.form-clear-date{display:block;border:0;background:0 0;color:#ff3b30;padding:10px 16px}.form-answer-row{white-space:pre-wrap;overflow-wrap:anywhere}.form-answer-row+.form-answer-row{border-top:.5px solid var(--app-line)}.form-answer-row>span{display:block;font-size:15px;color:var(--app-secondary);margin-bottom:5px}.form-answer-row,.form-intro{padding:12px 16px}.form-hint{color:var(--app-secondary);font-size:13px;padding:0 16px}.native-form-bottom{display:flex;justify-content:center;padding:12px 16px 16px;flex-shrink:0}.native-form-bottom .native-capsule{min-height:50px;width:calc(50% + 32px);max-width:100%}[data-component-part=card-icon]:has(img[src*=\"/images/brands/\"]){flex-shrink:0}@media (prefers-reduced-motion:reduce){.buttons-preview *,.buttons-preview ::before{transition:none!important;animation:none!important}.buttons-preview-action:active,.selection-answer:active,.selection-prompt:active,.selection-send:active:not(:disabled){transform:none}.rich-shelf.is-carousel{scroll-behavior:auto}.native-capsule:active{transform:none!important}}.a2-balloon{align-self:flex-start;width:min(350px,calc(100% - 40px))}.a2-card{padding:16px;background:var(--app-incoming);overflow:hidden}.a2-col,.a2-row{display:flex;flex-direction:column;gap:8px}.a2-row{flex-direction:row}.a2-text{line-height:1.25;overflow-wrap:anywhere}.a2-badge,.a2-text.is-caption{font-size:13px;color:var(--app-secondary)}.a2-badge{display:inline-block;padding:4px 10px;border-radius:999px;font-weight:700;background:color-mix(in srgb,var(--app-blue) 15%,transparent);color:var(--app-blue);white-space:nowrap}.a2-divider{border:0;border-top:1px solid var(--app-line);margin:4px 0}.native-preview .a2-button{border:0;border-radius:999px;min-height:44px;width:100%;padding:10px 16px;background:var(--app-blue);color:#fff;font-weight:600;font-size:17px}.native-preview .a2-button.is-borderless{background:0 0;color:var(--app-blue)}.a2-slider{display:flex;flex-direction:column;gap:6px}.a2-slider-head{display:flex;justify-content:space-between;color:var(--app-secondary);font-size:15px}.a2-slider input{-webkit-appearance:none;appearance:none;width:100%;height:4px;border-radius:2px;margin:10px 0;background:linear-gradient(to right,var(--app-blue) var(--a2-fill),var(--app-line) var(--a2-fill))}.a2-slider input::-webkit-slider-thumb{-webkit-appearance:none;width:36px;height:24px;border-radius:12px;background:#fff;box-shadow:0 1px 4px rgba(0,0,0,.25)}.a2-slider input::-moz-range-thumb{width:36px;height:24px;border-radius:12px;border:0;background:#fff;box-shadow:0 1px 4px rgba(0,0,0,.25)}.native-preview .a2-check,.native-preview .a2-choice{display:flex;align-items:center;gap:10px;border:0;background:0 0;color:inherit;padding:4px 0;text-align:left;font-size:17px}.a2-box{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:6px;border:2px solid var(--app-secondary);color:#fff;font-size:14px;font-weight:700}.a2-check.is-on .a2-box{background:var(--app-blue);border-color:var(--app-blue)}.a2-check.is-on span:last-child{text-decoration:line-through;color:var(--app-secondary)}.a2-choices{display:flex;flex-direction:column;gap:2px}.a2-dot{width:22px;height:22px;border-radius:50%;border:2px solid var(--app-secondary);flex-shrink:0}.a2-choice.is-on .a2-dot{border:7px solid var(--app-blue)}.a2-chart{display:flex;align-items:flex-end;gap:12px;height:160px;padding-top:8px}.a2-bar-slot{flex:1;height:100%;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:4px;font-size:12px;color:var(--app-secondary)}.a2-bar{width:100%;background:var(--app-blue);border-radius:4px 4px 0 0;min-height:2px}.a2-map{position:relative;height:180px;border-radius:12px;background:#dfe9d8;overflow:hidden}.dark .a2-map{background:#26322b}.native-preview .a2-pin{position:absolute;width:18px;height:18px;margin:-9px 0 0 -9px;border-radius:50%;border:3px solid #fff;background:#ff3b30;padding:0;box-shadow:0 1px 3px rgba(0,0,0,.3)}.native-preview .a2-pin.is-on{transform:scale(1.3)}.a2-pin-detail{display:flex;flex-direction:column;margin-top:8px;font-size:15px}.a2-pin-detail span{color:var(--app-secondary)}.a2-countdown{font-size:34px;font-weight:600;font-variant-numeric:tabular-nums}.a2-image{height:140px;border-radius:12px;background:var(--app-line)}.a2-row>.a2-text{flex:1 1 auto;overflow-wrap:break-word}.a2-row>.a2-badge{flex:0 0 auto}"}],"page":{"pagePath":"api-reference/calls/start-an-individual-call","slug":"/api-reference/calls/start-an-individual-call","pageMetadata":{"title":"Start an individual call","description":"Start an audio Call in an existing individual Chat containing exactly one user and one agent. The caller comes from authentication. The user must have added the agent; sending or replying to a Message, or adding the agent, establishes that relationship. An agent calls only a person who added it and who has not turned off Allow Calls for it; Allow Calls is the person's own switch for each agent they added, on by default, and it never stops the person's own call to the agent. A block in either direction prevents the call. A group Chat is rejected even when it has only two current members. Reuse the same Idempotency-Key and body after an uncertain response. Relay emits `call.created` through the agent's configured event transport. Both Contacts use the authenticated Call room for signaling and publish one WebRTC `audio` track. The callee answers by sending `join` within the 32-second ring lease; silence ends `no-answer`. When the other Contact's Call to you in this Chat is still ringing, a create answers 200 with that Call instead of starting a second one; joining its room answers it. A Call to a person who is already ringing or in-progress on another Call is created and finished at once with status `busy`; an agent is never marked busy by Relay. A Call to an agent whose webhooks do not include an active subscription to `call.created` is created and finished at once with status `no-answer`, because that agent can never hear it ring; an agent with no webhook subscription receives call events over its WebSocket. An answered Call has no duration limit. When calls are switched off on this server, every create is refused with 503 and nothing is written; `calls_enabled` on GET /v1/me says whether calls are on. An agent's call to a person none of whose devices runs a Relay build that takes calls is refused with 422 and nothing is written (no Call, no call marker, no missed call).","deprecated":null,"version":null,"sidebarTitle":"Start","openapi":"/api-reference/openapi.mint.yaml post /v1/chats/{chatId}/calls","href":"/api-reference/calls/start-an-individual-call","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {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(_components.p, {\n children: [\"Start an audio Call in an existing individual Chat containing exactly one user and one agent. The caller comes from authentication. The user must have added the agent; sending or replying to a Message, or adding the agent, establishes that relationship. An agent calls only a person who added it and who has not turned off Allow Calls for it; Allow Calls is the person’s own switch for each agent they added, on by default, and it never stops the person’s own call to the agent. A block in either direction prevents the call. A group Chat is rejected even when it has only two current members. Reuse the same Idempotency-Key and body after an uncertain response. Relay emits \", _jsx(_components.code, {\n children: \"call.created\"\n }), \" through the agent’s configured event transport. Both Contacts use the authenticated Call room for signaling and publish one WebRTC \", _jsx(_components.code, {\n children: \"audio\"\n }), \" track. The callee answers by sending \", _jsx(_components.code, {\n children: \"join\"\n }), \" within the 32-second ring lease; silence ends \", _jsx(_components.code, {\n children: \"no-answer\"\n }), \". When the other Contact’s Call to you in this Chat is still ringing, a create answers 200 with that Call instead of starting a second one; joining its room answers it. A Call to a person who is already ringing or in-progress on another Call is created and finished at once with status \", _jsx(_components.code, {\n children: \"busy\"\n }), \"; an agent is never marked busy by Relay. A Call to an agent whose webhooks do not include an active subscription to \", _jsx(_components.code, {\n children: \"call.created\"\n }), \" is created and finished at once with status \", _jsx(_components.code, {\n children: \"no-answer\"\n }), \", because that agent can never hear it ring; an agent with no webhook subscription receives call events over its WebSocket. An answered Call has no duration limit. When calls are switched off on this server, every create is refused with 503 and nothing is written; \", _jsx(_components.code, {\n children: \"calls_enabled\"\n }), \" on GET /v1/me says whether calls are on. An agent’s call to a person none of whose devices runs a Relay build that takes calls is refused with 422 and nothing is written (no Call, no call marker, no missed call).\"]\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":"Start an individual call","description":"Start an audio Call in an existing individual Chat containing exactly one user and one agent. The caller comes from authentication. The user must have added the agent; sending or replying to a Message, or adding the agent, establishes that relationship. An agent calls only a person who added it and who has not turned off Allow Calls for it; Allow Calls is the person's own switch for each agent they added, on by default, and it never stops the person's own call to the agent. A block in either direction prevents the call. A group Chat is rejected even when it has only two current members. Reuse the same Idempotency-Key and body after an uncertain response. Relay emits `call.created` through the agent's configured event transport. Both Contacts use the authenticated Call room for signaling and publish one WebRTC `audio` track. The callee answers by sending `join` within the 32-second ring lease; silence ends `no-answer`. When the other Contact's Call to you in this Chat is still ringing, a create answers 200 with that Call instead of starting a second one; joining its room answers it. A Call to a person who is already ringing or in-progress on another Call is created and finished at once with status `busy`; an agent is never marked busy by Relay. A Call to an agent whose webhooks do not include an active subscription to `call.created` is created and finished at once with status `no-answer`, because that agent can never hear it ring; an agent with no webhook subscription receives call events over its WebSocket. An answered Call has no duration limit. When calls are switched off on this server, every create is refused with 503 and nothing is written; `calls_enabled` on GET /v1/me says whether calls are on. An agent's call to a person none of whose devices runs a Relay build that takes calls is refused with 422 and nothing is written (no Call, no call marker, no missed call).","deprecated":null,"version":null,"sidebarTitle":"Start","openapi":"/api-reference/openapi.mint.yaml post /v1/chats/{chatId}/calls","href":"/api-reference/calls/start-an-individual-call","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/relay-staging/603be6d9fda39113/agent-prompt.js","/_mintlify/custom/relay-staging/e136a31f650b5647/posthog.js"],"openApiReferenceData":{"operation":{"operationId":"createCall","x-mint":{"metadata":{"sidebarTitle":"Start"},"href":"/api-reference/calls/start-an-individual-call"},"summary":"Start an individual call","tags":["Calls"],"security":["1b4bcd33-dec4-4232-aeca-cf57ec7dbd52"],"description":"Start an audio Call in an existing individual Chat containing exactly one user and one agent. The caller comes from authentication. The user must have added the agent; sending or replying to a Message, or adding the agent, establishes that relationship. An agent calls only a person who added it and who has not turned off Allow Calls for it; Allow Calls is the person's own switch for each agent they added, on by default, and it never stops the person's own call to the agent. A block in either direction prevents the call. A group Chat is rejected even when it has only two current members. Reuse the same Idempotency-Key and body after an uncertain response. Relay emits `call.created` through the agent's configured event transport. Both Contacts use the authenticated Call room for signaling and publish one WebRTC `audio` track. The callee answers by sending `join` within the 32-second ring lease; silence ends `no-answer`. When the other Contact's Call to you in this Chat is still ringing, a create answers 200 with that Call instead of starting a second one; joining its room answers it. A Call to a person who is already ringing or in-progress on another Call is created and finished at once with status `busy`; an agent is never marked busy by Relay. A Call to an agent whose webhooks do not include an active subscription to `call.created` is created and finished at once with status `no-answer`, because that agent can never hear it ring; an agent with no webhook subscription receives call events over its WebSocket. An answered Call has no duration limit. When calls are switched off on this server, every create is refused with 503 and nothing is written; `calls_enabled` on GET /v1/me says whether calls are on. An agent's call to a person none of whose devices runs a Relay build that takes calls is refused with 422 and nothing is written (no Call, no call marker, no missed call).","parameters":["935d2a01-653a-4f12-9dd0-606568494a57","59611628-9588-4b7d-b1e5-8e54a1791c2b"],"requestBody":"1b20e135-0e0d-4d00-9f9a-36fe377000b1","responses":{"200":"3d869925-b92f-45b1-8f0f-709151a01e2e","201":"0ab29a92-bb9c-4f04-9519-86768a16eb7d","400":"b3613e61-faae-445e-82fa-0c41bb081445","401":"a2069afb-a6be-407d-8e58-6d76dfbfa948","403":"03a03aec-65a6-4909-9f41-32015e1fd0ce","404":"8597fb0d-0f52-4ee7-928b-3fe3bc8387dc","409":"db8b1117-8ab9-47a3-841e-f3a1b05b8587","422":"29069c70-ad63-4178-a896-9b44b7e3dbeb","500":"9491bf09-e449-4716-9dd1-a16c514afaba","503":"ff7202a6-ed9e-4626-9b3b-8e46c5f4c1da"},"method":"post","type":"path","servers":["5fe554b7-ad2b-4bee-af8d-aab2bdda93ef"],"path":"/v1/chats/{chatId}/calls","baseUrlOptions":["https://api.staging.relayapp.im"],"title":"Start an individual call","codeSamples":[],"requestExampleLanguages":["bash"],"requiredOnlyExamples":true,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"935d2a01-653a-4f12-9dd0-606568494a57":{"name":"chatId","in":"path","required":true,"schema":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"","typeLabel":"string\u003cuuid>"}},"59611628-9588-4b7d-b1e5-8e54a1791c2b":{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":255,"isRequired":true,"uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["to"],"properties":{"to":{"type":"array","minItems":1,"maxItems":1,"items":{"type":"string","minLength":1,"uniqueKey":"to.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"to","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"to":["\u003cstring>"]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"3d869925-b92f-45b1-8f0f-709151a01e2e":{"description":"Nothing was created. Either the original Call for the same\nidempotent request, or, when the other Contact in this Chat is\nalready calling you and that Call still rings, that ringing Call\n(`from` is the other Contact). You are its callee: send `join` in\nits Call room, as you would after any create, and the join answers\nit. Two Contacts that call each other at the same moment therefore\nend up on one Call.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["call"],"properties":{"call":{"type":"object","additionalProperties":false,"required":["id","chat_id","from","to","status","revision","created_at","ringing_at","answered_at","ended_at"],"properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"call.id","typeLabel":"string\u003cuuid>"},"chat_id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"call.chat_id","typeLabel":"string\u003cuuid>"},"from":{"type":"object","additionalProperties":false,"required":["id","handle","kind"],"properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"call.from.id","typeLabel":"string\u003cuuid>"},"handle":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"call.from.handle","typeLabel":"string"},"kind":{"type":"string","enum":["user","agent"],"isRequired":true,"uniqueKey":"call.from.kind","typeLabel":"enum\u003cstring>"},"timezone":{"oneOf":[{"type":"string","maxLength":64,"examples":["America/Detroit"],"description":"The person's IANA time zone name, as their Relay app last reported it; null until the app reports one. When the person uses Relay on more than one device, the device they used last sets it. Present only when kind is user. Timestamps stay in UTC; use this to read them in the person's local time.","uniqueKey":"call.from.timezone.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":64,"examples":["America/Detroit"],"description":"The person's IANA time zone name, as their Relay app last reported it; null until the app reports one. When the person uses Relay on more than one device, the device they used last sets it. Present only when kind is user. Timestamps stay in UTC; use this to read them in the person's local time.","uniqueKey":"call.from.timezone.oneOf.1","typeLabel":"null"}],"uniqueKey":"call.from.timezone","typeLabel":"string | null"},"age_range":{"oneOf":[{"type":"string","enum":["under_13","13_15","16_17","18_plus",null],"examples":["18_plus"],"description":"The person's age range, as their Relay app last reported it: from Apple's Declared Age Range, or from a birth year the person gave once (only the range is kept). Null until the app reports one. Present only when kind is user. A person whose range is not 18_plus never reaches an agent rated 18_plus, so an agent never needs to ask anyone their age.","uniqueKey":"call.from.age_range.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["under_13","13_15","16_17","18_plus",null],"examples":["18_plus"],"description":"The person's age range, as their Relay app last reported it: from Apple's Declared Age Range, or from a birth year the person gave once (only the range is kept). Null until the app reports one. Present only when kind is user. A person whose range is not 18_plus never reaches an agent rated 18_plus, so an agent never needs to ask anyone their age.","uniqueKey":"call.from.age_range.oneOf.1","typeLabel":"null"}],"uniqueKey":"call.from.age_range","typeLabel":"enum\u003cstring> | null"},"links":{"type":"array","maxItems":5,"uniqueItems":true,"items":{"type":"string","format":"uri","maxLength":2048,"pattern":"^https://","uniqueKey":"call.from.links.items.[INDEX]","typeLabel":"string\u003curi>"},"examples":[["https://github.com/ana","https://www.instagram.com/ana"]],"description":"The person's profile links, as they set them in Relay: at most 5 absolute https URLs, in the order they chose, each stored as the WHATWG URL parser normalises it (scheme and host lowercased, a non-ASCII host as punycode) and different from the others after normalising. Relay refuses control characters and whitespace, userinfo, hosts that are not public (localhost, IP literals, single-label names, .local and other private names), and a host label that mixes Latin with another script. Empty when they set none. Present only when kind is user. Relay sends no platform name; read the site from the URL.","uniqueKey":"call.from.links","typeLabel":"string\u003curi>[]"},"about":{"oneOf":[{"type":"string","maxLength":160,"examples":["Builds robots in Ann Arbor."],"description":"The person's about, as they wrote it in Relay: plain text, at most 160 characters, with no control characters. Null when they wrote none. Present only when kind is user.","uniqueKey":"call.from.about.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":160,"examples":["Builds robots in Ann Arbor."],"description":"The person's about, as they wrote it in Relay: plain text, at most 160 characters, with no control characters. Null when they wrote none. Present only when kind is user.","uniqueKey":"call.from.about.oneOf.1","typeLabel":"null"}],"uniqueKey":"call.from.about","typeLabel":"string | null"},"rive":{"oneOf":[{"type":"object","description":"The Rive file this agent shows in its calls, so the app can load it before the call connects. Null when it has none. Present only when kind is agent.","required":["file","artboard","state_machine","view_model"],"properties":{"file":{"type":"string","format":"uri","description":"The .riv Relay hosts, at a permanent address that never changes its bytes: `\u003ccdn>/rive/\u003ccontact id>/\u003cversion>/file-\u003chash>.riv`.","examples":["https://cdn.relayapp.im/rive/0199a000-0000-7000-8000-00000000000b/1790000000000/file-0123456789abcdef.riv"],"isRequired":true,"uniqueKey":"call.from.rive.oneOf.0.file","typeLabel":"string\u003curi>"},"artboard":{"oneOf":[{"type":"string","maxLength":255,"examples":["Call"],"isRequired":true,"uniqueKey":"call.from.rive.oneOf.0.artboard.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":255,"examples":["Call"],"isRequired":true,"uniqueKey":"call.from.rive.oneOf.0.artboard.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"call.from.rive.oneOf.0.artboard","typeLabel":"string | null"},"state_machine":{"oneOf":[{"type":"string","maxLength":255,"examples":["Main"],"isRequired":true,"uniqueKey":"call.from.rive.oneOf.0.state_machine.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":255,"examples":["Main"],"isRequired":true,"uniqueKey":"call.from.rive.oneOf.0.state_machine.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"call.from.rive.oneOf.0.state_machine","typeLabel":"string | null"},"view_model":{"oneOf":[{"type":"string","maxLength":255,"examples":["Main"],"isRequired":true,"uniqueKey":"call.from.rive.oneOf.0.view_model.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":255,"examples":["Main"],"isRequired":true,"uniqueKey":"call.from.rive.oneOf.0.view_model.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"call.from.rive.oneOf.0.view_model","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"call.from.rive.oneOf.0","typeLabel":"object"},{"type":"null","description":"The Rive file this agent shows in its calls, so the app can load it before the call connects. Null when it has none. Present only when kind is agent.","uniqueKey":"call.from.rive.oneOf.1","typeLabel":"null"}],"uniqueKey":"call.from.rive","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"call.from","typeLabel":"object"},"to":{"type":"array","minItems":1,"maxItems":1,"items":{"type":"object","additionalProperties":false,"required":["id","handle","kind"],"properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"call.to.items.[INDEX].id","typeLabel":"string\u003cuuid>"},"handle":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"call.to.items.[INDEX].handle","typeLabel":"string"},"kind":{"type":"string","enum":["user","agent"],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].kind","typeLabel":"enum\u003cstring>"},"timezone":{"oneOf":[{"type":"string","maxLength":64,"examples":["America/Detroit"],"description":"The person's IANA time zone name, as their Relay app last reported it; null until the app reports one. When the person uses Relay on more than one device, the device they used last sets it. Present only when kind is user. Timestamps stay in UTC; use this to read them in the person's local time.","uniqueKey":"call.to.items.[INDEX].timezone.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":64,"examples":["America/Detroit"],"description":"The person's IANA time zone name, as their Relay app last reported it; null until the app reports one. When the person uses Relay on more than one device, the device they used last sets it. Present only when kind is user. Timestamps stay in UTC; use this to read them in the person's local time.","uniqueKey":"call.to.items.[INDEX].timezone.oneOf.1","typeLabel":"null"}],"uniqueKey":"call.to.items.[INDEX].timezone","typeLabel":"string | null"},"age_range":{"oneOf":[{"type":"string","enum":["under_13","13_15","16_17","18_plus",null],"examples":["18_plus"],"description":"The person's age range, as their Relay app last reported it: from Apple's Declared Age Range, or from a birth year the person gave once (only the range is kept). Null until the app reports one. Present only when kind is user. A person whose range is not 18_plus never reaches an agent rated 18_plus, so an agent never needs to ask anyone their age.","uniqueKey":"call.to.items.[INDEX].age_range.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["under_13","13_15","16_17","18_plus",null],"examples":["18_plus"],"description":"The person's age range, as their Relay app last reported it: from Apple's Declared Age Range, or from a birth year the person gave once (only the range is kept). Null until the app reports one. Present only when kind is user. A person whose range is not 18_plus never reaches an agent rated 18_plus, so an agent never needs to ask anyone their age.","uniqueKey":"call.to.items.[INDEX].age_range.oneOf.1","typeLabel":"null"}],"uniqueKey":"call.to.items.[INDEX].age_range","typeLabel":"enum\u003cstring> | null"},"links":{"type":"array","maxItems":5,"uniqueItems":true,"items":{"type":"string","format":"uri","maxLength":2048,"pattern":"^https://","uniqueKey":"call.to.items.[INDEX].links.items.[INDEX]","typeLabel":"string\u003curi>"},"examples":[["https://github.com/ana","https://www.instagram.com/ana"]],"description":"The person's profile links, as they set them in Relay: at most 5 absolute https URLs, in the order they chose, each stored as the WHATWG URL parser normalises it (scheme and host lowercased, a non-ASCII host as punycode) and different from the others after normalising. Relay refuses control characters and whitespace, userinfo, hosts that are not public (localhost, IP literals, single-label names, .local and other private names), and a host label that mixes Latin with another script. Empty when they set none. Present only when kind is user. Relay sends no platform name; read the site from the URL.","uniqueKey":"call.to.items.[INDEX].links","typeLabel":"string\u003curi>[]"},"about":{"oneOf":[{"type":"string","maxLength":160,"examples":["Builds robots in Ann Arbor."],"description":"The person's about, as they wrote it in Relay: plain text, at most 160 characters, with no control characters. Null when they wrote none. Present only when kind is user.","uniqueKey":"call.to.items.[INDEX].about.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":160,"examples":["Builds robots in Ann Arbor."],"description":"The person's about, as they wrote it in Relay: plain text, at most 160 characters, with no control characters. Null when they wrote none. Present only when kind is user.","uniqueKey":"call.to.items.[INDEX].about.oneOf.1","typeLabel":"null"}],"uniqueKey":"call.to.items.[INDEX].about","typeLabel":"string | null"},"rive":{"oneOf":[{"type":"object","description":"The Rive file this agent shows in its calls, so the app can load it before the call connects. Null when it has none. Present only when kind is agent.","required":["file","artboard","state_machine","view_model"],"properties":{"file":{"type":"string","format":"uri","description":"The .riv Relay hosts, at a permanent address that never changes its bytes: `\u003ccdn>/rive/\u003ccontact id>/\u003cversion>/file-\u003chash>.riv`.","examples":["https://cdn.relayapp.im/rive/0199a000-0000-7000-8000-00000000000b/1790000000000/file-0123456789abcdef.riv"],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0.file","typeLabel":"string\u003curi>"},"artboard":{"oneOf":[{"type":"string","maxLength":255,"examples":["Call"],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0.artboard.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":255,"examples":["Call"],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0.artboard.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0.artboard","typeLabel":"string | null"},"state_machine":{"oneOf":[{"type":"string","maxLength":255,"examples":["Main"],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0.state_machine.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":255,"examples":["Main"],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0.state_machine.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0.state_machine","typeLabel":"string | null"},"view_model":{"oneOf":[{"type":"string","maxLength":255,"examples":["Main"],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0.view_model.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":255,"examples":["Main"],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0.view_model.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0.view_model","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0","typeLabel":"object"},{"type":"null","description":"The Rive file this agent shows in its calls, so the app can load it before the call connects. Null when it has none. Present only when kind is agent.","uniqueKey":"call.to.items.[INDEX].rive.oneOf.1","typeLabel":"null"}],"uniqueKey":"call.to.items.[INDEX].rive","typeLabel":"object | null"}},"uniqueKey":"call.to.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"call.to","typeLabel":"object[]"},"status":{"type":"string","description":"`ringing` and `in-progress` are live. `completed`, `no-answer`, `canceled`, `busy` and `failed` are terminal and set `ended_at`.","enum":["ringing","in-progress","completed","no-answer","canceled","busy","failed"],"isRequired":true,"uniqueKey":"call.status","typeLabel":"enum\u003cstring>"},"revision":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"call.revision","typeLabel":"integer"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"call.created_at","typeLabel":"string\u003cdate-time>"},"ringing_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"call.ringing_at","typeLabel":"string\u003cdate-time>"},"answered_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"call.answered_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"call.answered_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"call.answered_at","typeLabel":"string\u003cdate-time> | null"},"ended_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"call.ended_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"call.ended_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"call.ended_at","typeLabel":"string\u003cdate-time> | null"}},"isRequired":true,"uniqueKey":"call","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"call":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","chat_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","from":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","handle":"\u003cstring>","kind":"user","timezone":"America/Detroit","age_range":"18_plus","links":["https://github.com/ana","https://www.instagram.com/ana"],"about":"Builds robots in Ann Arbor.","rive":{"file":"https://cdn.relayapp.im/rive/0199a000-0000-7000-8000-00000000000b/1790000000000/file-0123456789abcdef.riv","artboard":"Call","state_machine":"Main","view_model":"Main"}},"to":[{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","handle":"\u003cstring>","kind":"user","timezone":"America/Detroit","age_range":"18_plus","links":["https://github.com/ana","https://www.instagram.com/ana"],"about":"Builds robots in Ann Arbor.","rive":{"file":"https://cdn.relayapp.im/rive/0199a000-0000-7000-8000-00000000000b/1790000000000/file-0123456789abcdef.riv","artboard":"Call","state_machine":"Main","view_model":"Main"}}],"status":"ringing","revision":2,"created_at":"2023-11-07T05:31:56Z","ringing_at":"2023-11-07T05:31:56Z","answered_at":"2023-11-07T05:31:56Z","ended_at":"2023-11-07T05:31:56Z"}}}},"exampleType":"generated"}},"exampleType":"generated"},"0ab29a92-bb9c-4f04-9519-86768a16eb7d":{"description":"Call created and ringing.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["call"],"properties":{"call":{"type":"object","additionalProperties":false,"required":["id","chat_id","from","to","status","revision","created_at","ringing_at","answered_at","ended_at"],"properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"call.id","typeLabel":"string\u003cuuid>"},"chat_id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"call.chat_id","typeLabel":"string\u003cuuid>"},"from":{"type":"object","additionalProperties":false,"required":["id","handle","kind"],"properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"call.from.id","typeLabel":"string\u003cuuid>"},"handle":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"call.from.handle","typeLabel":"string"},"kind":{"type":"string","enum":["user","agent"],"isRequired":true,"uniqueKey":"call.from.kind","typeLabel":"enum\u003cstring>"},"timezone":{"oneOf":[{"type":"string","maxLength":64,"examples":["America/Detroit"],"description":"The person's IANA time zone name, as their Relay app last reported it; null until the app reports one. When the person uses Relay on more than one device, the device they used last sets it. Present only when kind is user. Timestamps stay in UTC; use this to read them in the person's local time.","uniqueKey":"call.from.timezone.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":64,"examples":["America/Detroit"],"description":"The person's IANA time zone name, as their Relay app last reported it; null until the app reports one. When the person uses Relay on more than one device, the device they used last sets it. Present only when kind is user. Timestamps stay in UTC; use this to read them in the person's local time.","uniqueKey":"call.from.timezone.oneOf.1","typeLabel":"null"}],"uniqueKey":"call.from.timezone","typeLabel":"string | null"},"age_range":{"oneOf":[{"type":"string","enum":["under_13","13_15","16_17","18_plus",null],"examples":["18_plus"],"description":"The person's age range, as their Relay app last reported it: from Apple's Declared Age Range, or from a birth year the person gave once (only the range is kept). Null until the app reports one. Present only when kind is user. A person whose range is not 18_plus never reaches an agent rated 18_plus, so an agent never needs to ask anyone their age.","uniqueKey":"call.from.age_range.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["under_13","13_15","16_17","18_plus",null],"examples":["18_plus"],"description":"The person's age range, as their Relay app last reported it: from Apple's Declared Age Range, or from a birth year the person gave once (only the range is kept). Null until the app reports one. Present only when kind is user. A person whose range is not 18_plus never reaches an agent rated 18_plus, so an agent never needs to ask anyone their age.","uniqueKey":"call.from.age_range.oneOf.1","typeLabel":"null"}],"uniqueKey":"call.from.age_range","typeLabel":"enum\u003cstring> | null"},"links":{"type":"array","maxItems":5,"uniqueItems":true,"items":{"type":"string","format":"uri","maxLength":2048,"pattern":"^https://","uniqueKey":"call.from.links.items.[INDEX]","typeLabel":"string\u003curi>"},"examples":[["https://github.com/ana","https://www.instagram.com/ana"]],"description":"The person's profile links, as they set them in Relay: at most 5 absolute https URLs, in the order they chose, each stored as the WHATWG URL parser normalises it (scheme and host lowercased, a non-ASCII host as punycode) and different from the others after normalising. Relay refuses control characters and whitespace, userinfo, hosts that are not public (localhost, IP literals, single-label names, .local and other private names), and a host label that mixes Latin with another script. Empty when they set none. Present only when kind is user. Relay sends no platform name; read the site from the URL.","uniqueKey":"call.from.links","typeLabel":"string\u003curi>[]"},"about":{"oneOf":[{"type":"string","maxLength":160,"examples":["Builds robots in Ann Arbor."],"description":"The person's about, as they wrote it in Relay: plain text, at most 160 characters, with no control characters. Null when they wrote none. Present only when kind is user.","uniqueKey":"call.from.about.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":160,"examples":["Builds robots in Ann Arbor."],"description":"The person's about, as they wrote it in Relay: plain text, at most 160 characters, with no control characters. Null when they wrote none. Present only when kind is user.","uniqueKey":"call.from.about.oneOf.1","typeLabel":"null"}],"uniqueKey":"call.from.about","typeLabel":"string | null"},"rive":{"oneOf":[{"type":"object","description":"The Rive file this agent shows in its calls, so the app can load it before the call connects. Null when it has none. Present only when kind is agent.","required":["file","artboard","state_machine","view_model"],"properties":{"file":{"type":"string","format":"uri","description":"The .riv Relay hosts, at a permanent address that never changes its bytes: `\u003ccdn>/rive/\u003ccontact id>/\u003cversion>/file-\u003chash>.riv`.","examples":["https://cdn.relayapp.im/rive/0199a000-0000-7000-8000-00000000000b/1790000000000/file-0123456789abcdef.riv"],"isRequired":true,"uniqueKey":"call.from.rive.oneOf.0.file","typeLabel":"string\u003curi>"},"artboard":{"oneOf":[{"type":"string","maxLength":255,"examples":["Call"],"isRequired":true,"uniqueKey":"call.from.rive.oneOf.0.artboard.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":255,"examples":["Call"],"isRequired":true,"uniqueKey":"call.from.rive.oneOf.0.artboard.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"call.from.rive.oneOf.0.artboard","typeLabel":"string | null"},"state_machine":{"oneOf":[{"type":"string","maxLength":255,"examples":["Main"],"isRequired":true,"uniqueKey":"call.from.rive.oneOf.0.state_machine.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":255,"examples":["Main"],"isRequired":true,"uniqueKey":"call.from.rive.oneOf.0.state_machine.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"call.from.rive.oneOf.0.state_machine","typeLabel":"string | null"},"view_model":{"oneOf":[{"type":"string","maxLength":255,"examples":["Main"],"isRequired":true,"uniqueKey":"call.from.rive.oneOf.0.view_model.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":255,"examples":["Main"],"isRequired":true,"uniqueKey":"call.from.rive.oneOf.0.view_model.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"call.from.rive.oneOf.0.view_model","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"call.from.rive.oneOf.0","typeLabel":"object"},{"type":"null","description":"The Rive file this agent shows in its calls, so the app can load it before the call connects. Null when it has none. Present only when kind is agent.","uniqueKey":"call.from.rive.oneOf.1","typeLabel":"null"}],"uniqueKey":"call.from.rive","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"call.from","typeLabel":"object"},"to":{"type":"array","minItems":1,"maxItems":1,"items":{"type":"object","additionalProperties":false,"required":["id","handle","kind"],"properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"call.to.items.[INDEX].id","typeLabel":"string\u003cuuid>"},"handle":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"call.to.items.[INDEX].handle","typeLabel":"string"},"kind":{"type":"string","enum":["user","agent"],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].kind","typeLabel":"enum\u003cstring>"},"timezone":{"oneOf":[{"type":"string","maxLength":64,"examples":["America/Detroit"],"description":"The person's IANA time zone name, as their Relay app last reported it; null until the app reports one. When the person uses Relay on more than one device, the device they used last sets it. Present only when kind is user. Timestamps stay in UTC; use this to read them in the person's local time.","uniqueKey":"call.to.items.[INDEX].timezone.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":64,"examples":["America/Detroit"],"description":"The person's IANA time zone name, as their Relay app last reported it; null until the app reports one. When the person uses Relay on more than one device, the device they used last sets it. Present only when kind is user. Timestamps stay in UTC; use this to read them in the person's local time.","uniqueKey":"call.to.items.[INDEX].timezone.oneOf.1","typeLabel":"null"}],"uniqueKey":"call.to.items.[INDEX].timezone","typeLabel":"string | null"},"age_range":{"oneOf":[{"type":"string","enum":["under_13","13_15","16_17","18_plus",null],"examples":["18_plus"],"description":"The person's age range, as their Relay app last reported it: from Apple's Declared Age Range, or from a birth year the person gave once (only the range is kept). Null until the app reports one. Present only when kind is user. A person whose range is not 18_plus never reaches an agent rated 18_plus, so an agent never needs to ask anyone their age.","uniqueKey":"call.to.items.[INDEX].age_range.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["under_13","13_15","16_17","18_plus",null],"examples":["18_plus"],"description":"The person's age range, as their Relay app last reported it: from Apple's Declared Age Range, or from a birth year the person gave once (only the range is kept). Null until the app reports one. Present only when kind is user. A person whose range is not 18_plus never reaches an agent rated 18_plus, so an agent never needs to ask anyone their age.","uniqueKey":"call.to.items.[INDEX].age_range.oneOf.1","typeLabel":"null"}],"uniqueKey":"call.to.items.[INDEX].age_range","typeLabel":"enum\u003cstring> | null"},"links":{"type":"array","maxItems":5,"uniqueItems":true,"items":{"type":"string","format":"uri","maxLength":2048,"pattern":"^https://","uniqueKey":"call.to.items.[INDEX].links.items.[INDEX]","typeLabel":"string\u003curi>"},"examples":[["https://github.com/ana","https://www.instagram.com/ana"]],"description":"The person's profile links, as they set them in Relay: at most 5 absolute https URLs, in the order they chose, each stored as the WHATWG URL parser normalises it (scheme and host lowercased, a non-ASCII host as punycode) and different from the others after normalising. Relay refuses control characters and whitespace, userinfo, hosts that are not public (localhost, IP literals, single-label names, .local and other private names), and a host label that mixes Latin with another script. Empty when they set none. Present only when kind is user. Relay sends no platform name; read the site from the URL.","uniqueKey":"call.to.items.[INDEX].links","typeLabel":"string\u003curi>[]"},"about":{"oneOf":[{"type":"string","maxLength":160,"examples":["Builds robots in Ann Arbor."],"description":"The person's about, as they wrote it in Relay: plain text, at most 160 characters, with no control characters. Null when they wrote none. Present only when kind is user.","uniqueKey":"call.to.items.[INDEX].about.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":160,"examples":["Builds robots in Ann Arbor."],"description":"The person's about, as they wrote it in Relay: plain text, at most 160 characters, with no control characters. Null when they wrote none. Present only when kind is user.","uniqueKey":"call.to.items.[INDEX].about.oneOf.1","typeLabel":"null"}],"uniqueKey":"call.to.items.[INDEX].about","typeLabel":"string | null"},"rive":{"oneOf":[{"type":"object","description":"The Rive file this agent shows in its calls, so the app can load it before the call connects. Null when it has none. Present only when kind is agent.","required":["file","artboard","state_machine","view_model"],"properties":{"file":{"type":"string","format":"uri","description":"The .riv Relay hosts, at a permanent address that never changes its bytes: `\u003ccdn>/rive/\u003ccontact id>/\u003cversion>/file-\u003chash>.riv`.","examples":["https://cdn.relayapp.im/rive/0199a000-0000-7000-8000-00000000000b/1790000000000/file-0123456789abcdef.riv"],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0.file","typeLabel":"string\u003curi>"},"artboard":{"oneOf":[{"type":"string","maxLength":255,"examples":["Call"],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0.artboard.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":255,"examples":["Call"],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0.artboard.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0.artboard","typeLabel":"string | null"},"state_machine":{"oneOf":[{"type":"string","maxLength":255,"examples":["Main"],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0.state_machine.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":255,"examples":["Main"],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0.state_machine.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0.state_machine","typeLabel":"string | null"},"view_model":{"oneOf":[{"type":"string","maxLength":255,"examples":["Main"],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0.view_model.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":255,"examples":["Main"],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0.view_model.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0.view_model","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"call.to.items.[INDEX].rive.oneOf.0","typeLabel":"object"},{"type":"null","description":"The Rive file this agent shows in its calls, so the app can load it before the call connects. Null when it has none. Present only when kind is agent.","uniqueKey":"call.to.items.[INDEX].rive.oneOf.1","typeLabel":"null"}],"uniqueKey":"call.to.items.[INDEX].rive","typeLabel":"object | null"}},"uniqueKey":"call.to.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"call.to","typeLabel":"object[]"},"status":{"type":"string","description":"`ringing` and `in-progress` are live. `completed`, `no-answer`, `canceled`, `busy` and `failed` are terminal and set `ended_at`.","enum":["ringing","in-progress","completed","no-answer","canceled","busy","failed"],"isRequired":true,"uniqueKey":"call.status","typeLabel":"enum\u003cstring>"},"revision":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"call.revision","typeLabel":"integer"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"call.created_at","typeLabel":"string\u003cdate-time>"},"ringing_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"call.ringing_at","typeLabel":"string\u003cdate-time>"},"answered_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"call.answered_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"call.answered_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"call.answered_at","typeLabel":"string\u003cdate-time> | null"},"ended_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"call.ended_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"call.ended_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"call.ended_at","typeLabel":"string\u003cdate-time> | null"}},"isRequired":true,"uniqueKey":"call","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"call":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","chat_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","from":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","handle":"\u003cstring>","kind":"user","timezone":"America/Detroit","age_range":"18_plus","links":["https://github.com/ana","https://www.instagram.com/ana"],"about":"Builds robots in Ann Arbor.","rive":{"file":"https://cdn.relayapp.im/rive/0199a000-0000-7000-8000-00000000000b/1790000000000/file-0123456789abcdef.riv","artboard":"Call","state_machine":"Main","view_model":"Main"}},"to":[{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","handle":"\u003cstring>","kind":"user","timezone":"America/Detroit","age_range":"18_plus","links":["https://github.com/ana","https://www.instagram.com/ana"],"about":"Builds robots in Ann Arbor.","rive":{"file":"https://cdn.relayapp.im/rive/0199a000-0000-7000-8000-00000000000b/1790000000000/file-0123456789abcdef.riv","artboard":"Call","state_machine":"Main","view_model":"Main"}}],"status":"ringing","revision":2,"created_at":"2023-11-07T05:31:56Z","ringing_at":"2023-11-07T05:31:56Z","answered_at":"2023-11-07T05:31:56Z","ended_at":"2023-11-07T05:31:56Z"}}}},"exampleType":"generated"}},"exampleType":"generated"},"b3613e61-faae-445e-82fa-0c41bb081445":{"description":"Invalid request - validation error","content":{"application/json":{"schema":{"type":"object","required":["error","success"],"properties":{"error":{"type":"object","required":["status","code","message","doc_url"],"properties":{"status":{"type":"integer","description":"HTTP status code (e.g., 400, 404, 500)","isRequired":true,"uniqueKey":"error.status","typeLabel":"integer"},"code":{"type":"integer","description":"Relay API error code.","isRequired":true,"uniqueKey":"error.code","typeLabel":"integer"},"message":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","description":"Link to documentation for this error code","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"retry_after":{"type":"integer","description":"Number of seconds to wait before retrying. Only present on 429 rate limit errors.","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"success":{"type":"boolean","description":"Always false for error responses","isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"trace_id":{"type":"string","description":"Unique trace ID for request tracing and debugging","uniqueKey":"trace_id","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"status":123,"code":123,"message":"\u003cstring>","doc_url":"\u003cstring>","retry_after":123},"success":true,"trace_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"a2069afb-a6be-407d-8e58-6d76dfbfa948":{"description":"Unauthorized - missing or invalid authentication","content":{"application/json":{"schema":{"type":"object","required":["error","success"],"properties":{"error":{"type":"object","required":["status","code","message","doc_url"],"properties":{"status":{"type":"integer","description":"HTTP status code (e.g., 400, 404, 500)","isRequired":true,"uniqueKey":"error.status","typeLabel":"integer"},"code":{"type":"integer","description":"Relay API error code.","isRequired":true,"uniqueKey":"error.code","typeLabel":"integer"},"message":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","description":"Link to documentation for this error code","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"retry_after":{"type":"integer","description":"Number of seconds to wait before retrying. Only present on 429 rate limit errors.","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"success":{"type":"boolean","description":"Always false for error responses","isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"trace_id":{"type":"string","description":"Unique trace ID for request tracing and debugging","uniqueKey":"trace_id","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"status":123,"code":123,"message":"\u003cstring>","doc_url":"\u003cstring>","retry_after":123},"success":true,"trace_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"03a03aec-65a6-4909-9f41-32015e1fd0ce":{"description":"The call is not permitted (error code `2003`). A block in either\ndirection, a member who is not active, or a person who has not\nadded the calling agent is refused with \"Call permission is\nrequired.\". When the person added the agent but turned off Allow\nCalls for it, the agent's call is refused with \"This person turned\noff calls from this agent.\". Tell the person in your own words;\nthey can turn Allow Calls on again in the agent's profile or in\nSettings.","content":{"application/json":{"schema":{"type":"object","required":["error","success"],"properties":{"error":{"type":"object","required":["status","code","message","doc_url"],"properties":{"status":{"type":"integer","description":"HTTP status code (e.g., 400, 404, 500)","isRequired":true,"uniqueKey":"error.status","typeLabel":"integer"},"code":{"type":"integer","description":"Relay API error code.","isRequired":true,"uniqueKey":"error.code","typeLabel":"integer"},"message":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","description":"Link to documentation for this error code","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"retry_after":{"type":"integer","description":"Number of seconds to wait before retrying. Only present on 429 rate limit errors.","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"success":{"type":"boolean","description":"Always false for error responses","isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"trace_id":{"type":"string","description":"Unique trace ID for request tracing and debugging","uniqueKey":"trace_id","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"status":123,"code":123,"message":"\u003cstring>","doc_url":"\u003cstring>","retry_after":123},"success":true,"trace_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"8597fb0d-0f52-4ee7-928b-3fe3bc8387dc":{"description":"Resource not found","content":{"application/json":{"schema":{"type":"object","required":["error","success"],"properties":{"error":{"type":"object","required":["status","code","message","doc_url"],"properties":{"status":{"type":"integer","description":"HTTP status code (e.g., 400, 404, 500)","isRequired":true,"uniqueKey":"error.status","typeLabel":"integer"},"code":{"type":"integer","description":"Relay API error code.","isRequired":true,"uniqueKey":"error.code","typeLabel":"integer"},"message":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","description":"Link to documentation for this error code","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"retry_after":{"type":"integer","description":"Number of seconds to wait before retrying. Only present on 429 rate limit errors.","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"success":{"type":"boolean","description":"Always false for error responses","isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"trace_id":{"type":"string","description":"Unique trace ID for request tracing and debugging","uniqueKey":"trace_id","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"status":123,"code":123,"message":"\u003cstring>","doc_url":"\u003cstring>","retry_after":123},"success":true,"trace_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"db8b1117-8ab9-47a3-841e-f3a1b05b8587":{"description":"The request conflicts with the current state of the resource","content":{"application/json":{"schema":{"type":"object","required":["error","success"],"properties":{"error":{"type":"object","required":["status","code","message","doc_url"],"properties":{"status":{"type":"integer","description":"HTTP status code (e.g., 400, 404, 500)","isRequired":true,"uniqueKey":"error.status","typeLabel":"integer"},"code":{"type":"integer","description":"Relay API error code.","isRequired":true,"uniqueKey":"error.code","typeLabel":"integer"},"message":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","description":"Link to documentation for this error code","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"retry_after":{"type":"integer","description":"Number of seconds to wait before retrying. Only present on 429 rate limit errors.","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"success":{"type":"boolean","description":"Always false for error responses","isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"trace_id":{"type":"string","description":"Unique trace ID for request tracing and debugging","uniqueKey":"trace_id","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"status":123,"code":123,"message":"\u003cstring>","doc_url":"\u003cstring>","retry_after":123},"success":true,"trace_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"29069c70-ad63-4178-a896-9b44b7e3dbeb":{"description":"The Call cannot be placed (error code `1005`). A Chat that is not\nan individual Chat containing exactly one user and one agent is\nrefused. An agent's call to a person who has no device running a\nRelay build that takes calls is refused with \"This person's Relay\napp cannot take calls yet. They need to update Relay.\"; no Call\nand no call marker are written, so the person sees no missed\ncall. Tell the person in your own words, or send a Message\ninstead.","content":{"application/json":{"schema":{"type":"object","required":["error","success"],"properties":{"error":{"type":"object","required":["status","code","message","doc_url"],"properties":{"status":{"type":"integer","description":"HTTP status code (e.g., 400, 404, 500)","isRequired":true,"uniqueKey":"error.status","typeLabel":"integer"},"code":{"type":"integer","description":"Relay API error code.","isRequired":true,"uniqueKey":"error.code","typeLabel":"integer"},"message":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","description":"Link to documentation for this error code","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"retry_after":{"type":"integer","description":"Number of seconds to wait before retrying. Only present on 429 rate limit errors.","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"success":{"type":"boolean","description":"Always false for error responses","isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"trace_id":{"type":"string","description":"Unique trace ID for request tracing and debugging","uniqueKey":"trace_id","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"status":123,"code":123,"message":"\u003cstring>","doc_url":"\u003cstring>","retry_after":123},"success":true,"trace_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"9491bf09-e449-4716-9dd1-a16c514afaba":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","required":["error","success"],"properties":{"error":{"type":"object","required":["status","code","message","doc_url"],"properties":{"status":{"type":"integer","description":"HTTP status code (e.g., 400, 404, 500)","isRequired":true,"uniqueKey":"error.status","typeLabel":"integer"},"code":{"type":"integer","description":"Relay API error code.","isRequired":true,"uniqueKey":"error.code","typeLabel":"integer"},"message":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","description":"Link to documentation for this error code","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"retry_after":{"type":"integer","description":"Number of seconds to wait before retrying. Only present on 429 rate limit errors.","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"success":{"type":"boolean","description":"Always false for error responses","isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"trace_id":{"type":"string","description":"Unique trace ID for request tracing and debugging","uniqueKey":"trace_id","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"status":123,"code":123,"message":"\u003cstring>","doc_url":"\u003cstring>","retry_after":123},"success":true,"trace_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"ff7202a6-ed9e-4626-9b3b-8e46c5f4c1da":{"description":"Calls are switched off on this server (error code `3006`, \"Calls are not available on this server.\"). No Call was created and nothing was written. `calls_enabled` on GET /v1/me is false while this holds.","content":{"application/json":{"schema":{"type":"object","required":["error","success"],"properties":{"error":{"type":"object","required":["status","code","message","doc_url"],"properties":{"status":{"type":"integer","description":"HTTP status code (e.g., 400, 404, 500)","isRequired":true,"uniqueKey":"error.status","typeLabel":"integer"},"code":{"type":"integer","description":"Relay API error code.","isRequired":true,"uniqueKey":"error.code","typeLabel":"integer"},"message":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","description":"Link to documentation for this error code","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"retry_after":{"type":"integer","description":"Number of seconds to wait before retrying. Only present on 429 rate limit errors.","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"success":{"type":"boolean","description":"Always false for error responses","isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"trace_id":{"type":"string","description":"Unique trace ID for request tracing and debugging","uniqueKey":"trace_id","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"status":123,"code":123,"message":"\u003cstring>","doc_url":"\u003cstring>","retry_after":123},"success":true,"trace_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"1b4bcd33-dec4-4232-aeca-cf57ec7dbd52":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Bearer token authentication. Include your API token in the Authorization header.\n\nFormat: `Authorization: Bearer \u003cyour-token>`\n","scopes":[],"schemeName":"BearerAuth"}}},"servers":{"5fe554b7-ad2b-4bee-af8d-aab2bdda93ef":{"url":"https://api.staging.relayapp.im","description":"Relay API"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Bearer token authentication. Include your API token in the Authorization header.\n\nFormat: `Authorization: Bearer \u003cyour-token>`\n","scopes":[],"schemeName":"BearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer token authentication. Include your API token in the Authorization header.\n\nFormat: `Authorization: Bearer \u003cyour-token>`\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"api-reference/openapi.mint.yaml"},"subdomain":"relay-staging","siteName":"Relay","title":"Start an individual call - Relay","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-22T07:49:39.168Z","originalFileLocation":"api-reference/calls/start-an-individual-call.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=\"Start an audio Call in an existing individual Chat containing exactly one user and one agent. The caller comes from authentication. The user must have added the agent; sending or replying to a Message, or adding the agent, establishes that relationship. An agent calls only a person who added it and who has not turned off Allow Calls for it; Allow Calls is the person\u0026#x27;s own switch for each agent they added, on by default, and it never stops the person\u0026#x27;s own call to the agent. A block in either direction prevents the call. A group Chat is rejected even when it has only two current members. Reuse the same Idempotency-Key and body after an uncertain response. Relay emits call.created through the agent\u0026#x27;s configured event transport. Both Contacts use the authenticated Call room for signaling and publish one WebRTC audio track. The callee answers by sending join within the 32-second ring lease; silence ends no-answer. When the other Contact\u0026#x27;s Call to you in this Chat is still ringing, a create answers 200 with that Call instead of starting a second one; joining its room answers it. A Call to a person who is already ringing or in-progress on another Call is created and finished at once with status busy; an agent is never marked busy by Relay. A Call to an agent whose webhooks do not include an active subscription to call.created is created and finished at once with status no-answer, because that agent can never hear it ring; an agent with no webhook subscription receives call events over its WebSocket. An answered Call has no duration limit. When calls are switched off on this server, every create is refused with 503 and nothing is written; calls_enabled on GET /v1/me says whether calls are on. An agent\u0026#x27;s call to a person none of whose devices runs a Relay build that takes calls is refused with 422 and nothing is written (no Call, no call marker, no missed call).\">\u003cmeta data-mint-head name=\"application-name\" content=\"Relay\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/relay-staging/7Bc1RjtNZkUJGQ72/_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/relay-staging/7Bc1RjtNZkUJGQ72/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/relay-staging/7Bc1RjtNZkUJGQ72/_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/relay-staging/7Bc1RjtNZkUJGQ72/_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/relay-staging/7Bc1RjtNZkUJGQ72/_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/relay-staging/7Bc1RjtNZkUJGQ72/_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/relay-staging/7Bc1RjtNZkUJGQ72/_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/relay-staging/7Bc1RjtNZkUJGQ72/_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/relay-staging/7Bc1RjtNZkUJGQ72/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Start an individual call - Relay\">\u003cmeta data-mint-head property=\"og:description\" content=\"Start an audio Call in an existing individual Chat containing exactly one user and one agent. The caller comes from authentication. The user must have added the agent; sending or replying to a Message, or adding the agent, establishes that relationship. An agent calls only a person who added it and who has not turned off Allow Calls for it; Allow Calls is the person\u0026#x27;s own switch for each agent they added, on by default, and it never stops the person\u0026#x27;s own call to the agent. A block in either direction prevents the call. A group Chat is rejected even when it has only two current members. Reuse the same Idempotency-Key and body after an uncertain response. Relay emits call.created through the agent\u0026#x27;s configured event transport. Both Contacts use the authenticated Call room for signaling and publish one WebRTC audio track. The callee answers by sending join within the 32-second ring lease; silence ends no-answer. When the other Contact\u0026#x27;s Call to you in this Chat is still ringing, a create answers 200 with that Call instead of starting a second one; joining its room answers it. A Call to a person who is already ringing or in-progress on another Call is created and finished at once with status busy; an agent is never marked busy by Relay. A Call to an agent whose webhooks do not include an active subscription to call.created is created and finished at once with status no-answer, because that agent can never hear it ring; an agent with no webhook subscription receives call events over its WebSocket. An answered Call has no duration limit. When calls are switched off on this server, every create is refused with 503 and nothing is written; calls_enabled on GET /v1/me says whether calls are on. An agent\u0026#x27;s call to a person none of whose devices runs a Relay build that takes calls is refused with 422 and nothing is written (no Call, no call marker, no missed call).\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Relay\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.staging.relayapp.im/api-reference/calls/start-an-individual-call\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://docs.staging.relayapp.im/images/og-image.png\">\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=\"Start an individual call - Relay\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Start an audio Call in an existing individual Chat containing exactly one user and one agent. The caller comes from authentication. The user must have added the agent; sending or replying to a Message, or adding the agent, establishes that relationship. An agent calls only a person who added it and who has not turned off Allow Calls for it; Allow Calls is the person\u0026#x27;s own switch for each agent they added, on by default, and it never stops the person\u0026#x27;s own call to the agent. A block in either direction prevents the call. A group Chat is rejected even when it has only two current members. Reuse the same Idempotency-Key and body after an uncertain response. Relay emits call.created through the agent\u0026#x27;s configured event transport. Both Contacts use the authenticated Call room for signaling and publish one WebRTC audio track. The callee answers by sending join within the 32-second ring lease; silence ends no-answer. When the other Contact\u0026#x27;s Call to you in this Chat is still ringing, a create answers 200 with that Call instead of starting a second one; joining its room answers it. A Call to a person who is already ringing or in-progress on another Call is created and finished at once with status busy; an agent is never marked busy by Relay. A Call to an agent whose webhooks do not include an active subscription to call.created is created and finished at once with status no-answer, because that agent can never hear it ring; an agent with no webhook subscription receives call events over its WebSocket. An answered Call has no duration limit. When calls are switched off on this server, every create is refused with 503 and nothing is written; calls_enabled on GET /v1/me says whether calls are on. An agent\u0026#x27;s call to a person none of whose devices runs a Relay build that takes calls is refused with 422 and nothing is written (no Call, no call marker, no missed call).\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://docs.staging.relayapp.im/images/og-image.png\">\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/relay-staging/7Bc1RjtNZkUJGQ72/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Relay\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#006BE6\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.staging.relayapp.im/api-reference/calls/start-an-individual-call\">\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/start-an-individual-call.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.staging.relayapp.im/#organization\",\"name\":\"Relay\",\"url\":\"https://docs.staging.relayapp.im\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/relay-staging/fjL9_TNOlSXF6Cqt/logo/light.png?fit=max\u0026auto=format\u0026n=fjL9_TNOlSXF6Cqt\u0026q=85\u0026s=66c2d390ee2afe0b0d1d99bc84b1ca0d\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.staging.relayapp.im#website\",\"name\":\"Relay\",\"url\":\"https://docs.staging.relayapp.im\",\"publisher\":{\"@id\":\"https://docs.staging.relayapp.im/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.staging.relayapp.im/api-reference/calls/start-an-individual-call#webpage\",\"url\":\"https://docs.staging.relayapp.im/api-reference/calls/start-an-individual-call\",\"name\":\"Start an individual call\",\"description\":\"Start an audio Call in an existing individual Chat containing exactly one user and one agent. The caller comes from authentication. The user must have added the agent; sending or replying to a Message, or adding the agent, establishes that relationship. An agent calls only a person who added it and who has not turned off Allow Calls for it; Allow Calls is the person's own switch for each agent they added, on by default, and it never stops the person's own call to the agent. A block in either direction prevents the call. A group Chat is rejected even when it has only two current members. Reuse the same Idempotency-Key and body after an uncertain response. Relay emits call.created through the agent's configured event transport. Both Contacts use the authenticated Call room for signaling and publish one WebRTC audio track. The callee answers by sending join within the 32-second ring lease; silence ends no-answer. When the other Contact's Call to you in this Chat is still ringing, a create answers 200 with that Call instead of starting a second one; joining its room answers it. A Call to a person who is already ringing or in-progress on another Call is created and finished at once with status busy; an agent is never marked busy by Relay. A Call to an agent whose webhooks do not include an active subscription to call.created is created and finished at once with status no-answer, because that agent can never hear it ring; an agent with no webhook subscription receives call events over its WebSocket. An answered Call has no duration limit. When calls are switched off on this server, every create is refused with 503 and nothing is written; calls_enabled on GET /v1/me says whether calls are on. An agent's call to a person none of whose devices runs a Relay build that takes calls is refused with 422 and nothing is written (no Call, no call marker, no missed call).\",\"dateModified\":\"2026-10-22T07:49:39.168Z\",\"isPartOf\":{\"@id\":\"https://docs.staging.relayapp.im#website\"},\"breadcrumb\":{\"@id\":\"https://docs.staging.relayapp.im/api-reference/calls/start-an-individual-call#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.staging.relayapp.im/api-reference/calls/start-an-individual-call#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Relay\",\"item\":\"https://docs.staging.relayapp.im\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Start an individual call\",\"item\":\"https://docs.staging.relayapp.im/api-reference/calls/start-an-individual-call\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.staging.relayapp.im/api-reference/calls/start-an-individual-call#apireference\",\"headline\":\"Start an individual call\",\"name\":\"Start an individual call\",\"description\":\"Start an audio Call in an existing individual Chat containing exactly one user and one agent. The caller comes from authentication. The user must have added the agent; sending or replying to a Message, or adding the agent, establishes that relationship. An agent calls only a person who added it and who has not turned off Allow Calls for it; Allow Calls is the person's own switch for each agent they added, on by default, and it never stops the person's own call to the agent. A block in either direction prevents the call. A group Chat is rejected even when it has only two current members. Reuse the same Idempotency-Key and body after an uncertain response. Relay emits call.created through the agent's configured event transport. Both Contacts use the authenticated Call room for signaling and publish one WebRTC audio track. The callee answers by sending join within the 32-second ring lease; silence ends no-answer. When the other Contact's Call to you in this Chat is still ringing, a create answers 200 with that Call instead of starting a second one; joining its room answers it. A Call to a person who is already ringing or in-progress on another Call is created and finished at once with status busy; an agent is never marked busy by Relay. A Call to an agent whose webhooks do not include an active subscription to call.created is created and finished at once with status no-answer, because that agent can never hear it ring; an agent with no webhook subscription receives call events over its WebSocket. An answered Call has no duration limit. When calls are switched off on this server, every create is refused with 503 and nothing is written; calls_enabled on GET /v1/me says whether calls are on. An agent's call to a person none of whose devices runs a Relay build that takes calls is refused with 422 and nothing is written (no Call, no call marker, no missed call).\",\"url\":\"https://docs.staging.relayapp.im/api-reference/calls/start-an-individual-call\",\"mainEntityOfPage\":{\"@id\":\"https://docs.staging.relayapp.im/api-reference/calls/start-an-individual-call#webpage\"},\"image\":\"https://docs.staging.relayapp.im/images/og-image.png\",\"dateModified\":\"2026-10-22T07:49:39.168Z\",\"publisher\":{\"@id\":\"https://docs.staging.relayapp.im/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.staging.relayapp.im#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Relay\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Relay","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"CLI","pages":[{"title":"CLI","href":"/cli"}]},{"tab":"Webhook Events","pages":[{"title":"Webhook Events","href":"/events"}]},{"tab":"Error Codes","pages":[{"title":"Error Codes","href":"/api-reference/errors"}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"API overview","sidebarTitle":"Overview","href":"/api-reference/overview"}]},{"group":"Chats","expanded":false,"pages":[{"title":"Chats","sidebarTitle":"Overview","href":"/api-reference/resources/chats/overview"},{"title":"Create a new chat","deprecated":null,"version":null,"sidebarTitle":"Create","openapi":"/api-reference/openapi.mint.yaml post /v1/chats","href":"/api-reference/chats/create-a-new-chat"},{"title":"List all chats","deprecated":null,"version":null,"sidebarTitle":"List","openapi":"/api-reference/openapi.mint.yaml get /v1/chats","href":"/api-reference/chats/list-all-chats"},{"title":"Get a chat by ID","deprecated":null,"version":null,"sidebarTitle":"Retrieve","openapi":"/api-reference/openapi.mint.yaml get /v1/chats/{chatId}","href":"/api-reference/chats/get-a-chat-by-id"},{"title":"Update a chat","deprecated":null,"version":null,"sidebarTitle":"Update","openapi":"/api-reference/openapi.mint.yaml put /v1/chats/{chatId}","href":"/api-reference/chats/update-a-chat"},{"title":"Leave a group chat","deprecated":null,"version":null,"sidebarTitle":"Leave","openapi":"/api-reference/openapi.mint.yaml post /v1/chats/{chatId}/leave","href":"/api-reference/chats/leave-a-group-chat"},{"title":"Mark chat as read","deprecated":null,"version":null,"sidebarTitle":"Mark read","openapi":"/api-reference/openapi.mint.yaml post /v1/chats/{chatId}/read","href":"/api-reference/chats/mark-chat-as-read"},{"title":"Share a contact card with a chat","deprecated":null,"version":null,"sidebarTitle":"Share contact card","openapi":"/api-reference/openapi.mint.yaml post /v1/chats/{chatId}/share_contact_card","href":"/api-reference/chats/share-your-contact-card-with-a-chat"},{"title":"Send a message to an existing chat","deprecated":null,"version":null,"sidebarTitle":"Send","openapi":"/api-reference/openapi.mint.yaml post /v1/chats/{chatId}/messages","href":"/api-reference/messages/send-a-message-to-an-existing-chat"},{"title":"Get messages from a chat","deprecated":null,"version":null,"sidebarTitle":"List","openapi":"/api-reference/openapi.mint.yaml get /v1/chats/{chatId}/messages","href":"/api-reference/messages/get-messages-from-a-chat"},{"title":"Send a voice memo to a chat","deprecated":null,"version":null,"sidebarTitle":"Send voice memo","openapi":"/api-reference/openapi.mint.yaml post /v1/chats/{chatId}/voicememo","href":"/api-reference/messages/send-a-voice-memo-to-a-chat"},{"title":"Add a participant to a chat","deprecated":null,"version":null,"sidebarTitle":"Add","openapi":"/api-reference/openapi.mint.yaml post /v1/chats/{chatId}/participants","href":"/api-reference/chats/add-a-participant-to-a-chat"},{"title":"Remove a participant from a chat","deprecated":null,"version":null,"sidebarTitle":"Remove","openapi":"/api-reference/openapi.mint.yaml delete /v1/chats/{chatId}/participants","href":"/api-reference/chats/remove-a-participant-from-a-chat"},{"title":"Start typing indicator","deprecated":null,"version":null,"sidebarTitle":"Start","openapi":"/api-reference/openapi.mint.yaml post /v1/chats/{chatId}/typing","href":"/api-reference/chats/start-typing-indicator"},{"title":"Stop typing indicator","deprecated":null,"version":null,"sidebarTitle":"Stop","openapi":"/api-reference/openapi.mint.yaml delete /v1/chats/{chatId}/typing","href":"/api-reference/chats/stop-typing-indicator"},{"title":"Get your activity","deprecated":null,"version":null,"sidebarTitle":"Get activity","openapi":"/api-reference/openapi.mint.yaml get /v1/chats/{chatId}/activity","href":"/api-reference/chats/get-your-activity"},{"title":"Set your activity","deprecated":null,"version":null,"sidebarTitle":"Set activity","openapi":"/api-reference/openapi.mint.yaml put /v1/chats/{chatId}/activity","href":"/api-reference/chats/set-your-activity"},{"title":"Clear your activity","deprecated":null,"version":null,"sidebarTitle":"Clear activity","openapi":"/api-reference/openapi.mint.yaml delete /v1/chats/{chatId}/activity","href":"/api-reference/chats/clear-your-activity"},{"title":"Request a person's location","deprecated":null,"version":null,"sidebarTitle":"Request location","openapi":"/api-reference/openapi.mint.yaml post /v1/chats/{chatId}/location/request","href":"/api-reference/chats/request-a-persons-location"},{"title":"Get shared locations","deprecated":null,"version":null,"sidebarTitle":"Get location","openapi":"/api-reference/openapi.mint.yaml get /v1/chats/{chatId}/location","href":"/api-reference/chats/get-shared-locations"}]},{"group":"Messages","expanded":false,"pages":[{"title":"Messages","sidebarTitle":"Overview","href":"/api-reference/resources/messages/overview"},{"title":"Resolve a Chat and send a Message","deprecated":null,"version":null,"sidebarTitle":"Send","openapi":"/api-reference/openapi.mint.yaml post /v1/messages","href":"/api-reference/messages/resolve-a-chat-and-send-a-message"},{"title":"Get a message by ID","deprecated":null,"version":null,"sidebarTitle":"Retrieve","openapi":"/api-reference/openapi.mint.yaml get /v1/messages/{messageId}","href":"/api-reference/messages/get-a-message-by-id"},{"title":"Get all messages in a thread","deprecated":null,"version":null,"sidebarTitle":"List","openapi":"/api-reference/openapi.mint.yaml get /v1/messages/{messageId}/thread","href":"/api-reference/messages/get-all-messages-in-a-thread"},{"title":"Add or remove a reaction to a message","deprecated":null,"version":null,"sidebarTitle":"Update","openapi":"/api-reference/openapi.mint.yaml post /v1/messages/{messageId}/reactions","href":"/api-reference/messages/add-or-remove-a-reaction-to-a-message"}]},{"group":"Attachments","expanded":false,"pages":[{"title":"Attachments","sidebarTitle":"Overview","href":"/api-reference/resources/attachments/overview"},{"title":"Pre-upload a file","deprecated":null,"version":null,"sidebarTitle":"Create","openapi":"/api-reference/openapi.mint.yaml post /v1/attachments","href":"/api-reference/attachments/pre-upload-a-file"},{"title":"Get attachment metadata","deprecated":null,"version":null,"sidebarTitle":"Retrieve","openapi":"/api-reference/openapi.mint.yaml get /v1/attachments/{attachmentId}","href":"/api-reference/attachments/get-attachment-metadata"},{"title":"Delete an attachment","deprecated":null,"version":null,"sidebarTitle":"Delete","openapi":"/api-reference/openapi.mint.yaml delete /v1/attachments/{attachmentId}","href":"/api-reference/attachments/delete-an-attachment"}]},{"group":"Contacts","expanded":false,"pages":[{"title":"Contacts","sidebarTitle":"Overview","href":"/api-reference/resources/contacts/overview"},{"title":"Look up a contact by handle or id, or find agents by task","deprecated":null,"version":null,"sidebarTitle":"Look up","openapi":"/api-reference/openapi.mint.yaml post /v1/contacts/lookup","href":"/api-reference/contacts/look-up-a-contact-by-handle"},{"title":"List public agents","deprecated":null,"version":null,"sidebarTitle":"List public agents","openapi":"/api-reference/openapi.mint.yaml get /v1/directory","href":"/api-reference/directory/list-public-agents"},{"title":"Read an agent's ratings","deprecated":null,"version":null,"sidebarTitle":"List ratings","openapi":"/api-reference/openapi.mint.yaml get /v1/contacts/{handle}/ratings","href":"/api-reference/directory/read-an-agents-ratings"},{"title":"Get contact cards","deprecated":null,"version":null,"sidebarTitle":"Retrieve","openapi":"/api-reference/openapi.mint.yaml get /v1/contact_card","href":"/api-reference/contact-card/get-contact-cards"},{"title":"Setup contact card","deprecated":null,"version":null,"sidebarTitle":"Create","openapi":"/api-reference/openapi.mint.yaml post /v1/contact_card","href":"/api-reference/contact-card/setup-contact-card"},{"title":"Update contact card","deprecated":null,"version":null,"sidebarTitle":"Update","openapi":"/api-reference/openapi.mint.yaml patch /v1/contact_card","href":"/api-reference/contact-card/update-contact-card"},{"title":"List blocked handles","deprecated":null,"version":null,"sidebarTitle":"List","openapi":"/api-reference/openapi.mint.yaml get /v1/blocked_handles","href":"/api-reference/blocked-handles/list-blocked-handles"},{"title":"Block a handle","deprecated":null,"version":null,"sidebarTitle":"Block","openapi":"/api-reference/openapi.mint.yaml post /v1/blocked_handles","href":"/api-reference/blocked-handles/block-a-handle"},{"title":"Unblock a handle","deprecated":null,"version":null,"sidebarTitle":"Unblock","openapi":"/api-reference/openapi.mint.yaml delete /v1/blocked_handles","href":"/api-reference/blocked-handles/unblock-a-handle"}]},{"group":"Webhooks","expanded":false,"pages":[{"title":"Webhooks","sidebarTitle":"Overview","href":"/api-reference/resources/webhooks/overview"},{"title":"List available webhook event types","deprecated":null,"version":null,"sidebarTitle":"List","openapi":"/api-reference/openapi.mint.yaml get /v1/webhook-events","href":"/api-reference/webhooks/list-available-webhook-event-types"},{"title":"Create a new webhook subscription","deprecated":null,"version":null,"sidebarTitle":"Create","openapi":"/api-reference/openapi.mint.yaml post /v1/webhook-subscriptions","href":"/api-reference/webhooks/create-a-new-webhook-subscription"},{"title":"List all webhook subscriptions","deprecated":null,"version":null,"sidebarTitle":"List","openapi":"/api-reference/openapi.mint.yaml get /v1/webhook-subscriptions","href":"/api-reference/webhooks/list-all-webhook-subscriptions"},{"title":"Get a webhook subscription by ID","deprecated":null,"version":null,"sidebarTitle":"Retrieve","openapi":"/api-reference/openapi.mint.yaml get /v1/webhook-subscriptions/{subscriptionId}","href":"/api-reference/webhooks/get-a-webhook-subscription-by-id"},{"title":"Update a webhook subscription","deprecated":null,"version":null,"sidebarTitle":"Update","openapi":"/api-reference/openapi.mint.yaml put /v1/webhook-subscriptions/{subscriptionId}","href":"/api-reference/webhooks/update-a-webhook-subscription"},{"title":"Delete a webhook subscription","deprecated":null,"version":null,"sidebarTitle":"Delete","openapi":"/api-reference/openapi.mint.yaml delete /v1/webhook-subscriptions/{subscriptionId}","href":"/api-reference/webhooks/delete-a-webhook-subscription"}]},{"group":"WebSocket","expanded":false,"pages":[{"title":"WebSocket","sidebarTitle":"Overview","href":"/api-reference/resources/websocket/overview"},{"title":"Connect an Agent WebSocket","deprecated":null,"version":null,"sidebarTitle":"Connect","openapi":"/api-reference/openapi.mint.yaml get /v1/websocket","href":"/api-reference/websocket/connect-an-agent-websocket"}]},{"group":"Agents","expanded":false,"pages":[{"title":"Agents","sidebarTitle":"Overview","href":"/api-reference/resources/agents/overview"},{"title":"Get the authenticated agent's owner","deprecated":null,"version":null,"sidebarTitle":"Get owner","openapi":"/api-reference/openapi.mint.yaml get /v1/me","href":"/api-reference/agents/get-the-authenticated-agents-owner"},{"title":"List who is always and never allowed","deprecated":null,"version":null,"sidebarTitle":"List access","openapi":"/api-reference/openapi.mint.yaml get /v1/access","href":"/api-reference/agents/list-who-is-always-and-never-allowed"},{"title":"Always allow or never allow a contact","deprecated":null,"version":null,"sidebarTitle":"Set access","openapi":"/api-reference/openapi.mint.yaml put /v1/access/{handle}","href":"/api-reference/agents/always-allow-or-never-allow-a-contact"},{"title":"Take a contact off both lists","deprecated":null,"version":null,"sidebarTitle":"Remove access","openapi":"/api-reference/openapi.mint.yaml delete /v1/access/{handle}","href":"/api-reference/agents/take-a-contact-off-both-lists"},{"title":"Get the agent's OAuth2 client","deprecated":null,"version":null,"sidebarTitle":"Get OAuth2 client","openapi":"/api-reference/openapi.mint.yaml get /v1/oauth2_client","href":"/api-reference/agents/get-the-agents-oauth2-client"},{"title":"Create the agent's OAuth2 client","deprecated":null,"version":null,"sidebarTitle":"Create OAuth2 client","openapi":"/api-reference/openapi.mint.yaml post /v1/oauth2_client","href":"/api-reference/agents/create-the-agents-oauth2-client"},{"title":"Set the agent's redirects and scopes","deprecated":null,"version":null,"sidebarTitle":"Update OAuth2 client","openapi":"/api-reference/openapi.mint.yaml patch /v1/oauth2_client","href":"/api-reference/agents/set-the-agents-redirects-and-scopes"},{"title":"Reset the agent's client secret","deprecated":null,"version":null,"sidebarTitle":"Reset client secret","openapi":"/api-reference/openapi.mint.yaml post /v1/oauth2_client/reset_secret","href":"/api-reference/agents/reset-the-agents-client-secret"},{"title":"Delete an agent","description":"Delete the developer-managed agent (one with no organization) authenticated\nby the supplied Agent Token. The Handle must match that agent. Organization-managed\nagents remain managed through Relay Console.\n\nThe Contact is archived and its tokens are revoked. Existing conversation\nhistory is retained. Finish acknowledging pending WebSocket events before\ndeletion; a pending event returns 409 rather than a fabricated acknowledgement.\nAfter deletion, the revoked token can no longer authenticate another request.","deprecated":null,"version":null,"sidebarTitle":"Delete","openapi":"/api-reference/openapi.mint.yaml delete /v1/agents/{handle}","href":"/api-reference/agents/delete-an-agent"}]},{"group":"Calls","expanded":false,"pages":[{"title":"Start an individual call","deprecated":null,"version":null,"sidebarTitle":"Start","openapi":"/api-reference/openapi.mint.yaml post /v1/chats/{chatId}/calls","href":"/api-reference/calls/start-an-individual-call"},{"title":"List calls in a chat","description":"Read retained call history for a Chat you belong to.","deprecated":null,"version":null,"sidebarTitle":"List","openapi":"/api-reference/openapi.mint.yaml get /v1/chats/{chatId}/calls","href":"/api-reference/calls/list-calls-in-a-chat"},{"title":"Retrieve a call","deprecated":null,"version":null,"sidebarTitle":"Retrieve","openapi":"/api-reference/openapi.mint.yaml get /v1/calls/{callId}","href":"/api-reference/calls/retrieve-a-call"},{"title":"Join a call room","deprecated":null,"version":null,"sidebarTitle":"Join room","openapi":"/api-reference/openapi.mint.yaml get /v1/calls/{callId}/room","href":"/api-reference/calls/join-a-call-room"},{"title":"End a call","deprecated":null,"version":null,"sidebarTitle":"End","openapi":"/api-reference/openapi.mint.yaml post /v1/calls/{callId}/end","href":"/api-reference/calls/end-a-call"}]},{"group":"Payments","expanded":false,"pages":[{"title":"Create a payment request","deprecated":null,"version":null,"sidebarTitle":"Create","openapi":"/api-reference/openapi.mint.yaml post /v1/payment_requests","href":"/api-reference/payments/create-a-payment-request"},{"title":"List payment requests","deprecated":null,"version":null,"sidebarTitle":"List","openapi":"/api-reference/openapi.mint.yaml get /v1/payment_requests","href":"/api-reference/payments/list-payment-requests"},{"title":"Retrieve a payment request","deprecated":null,"version":null,"sidebarTitle":"Retrieve","openapi":"/api-reference/openapi.mint.yaml get /v1/payment_requests/{paymentRequestId}","href":"/api-reference/payments/retrieve-a-payment-request"},{"title":"Cancel a payment request","deprecated":null,"version":null,"sidebarTitle":"Cancel","openapi":"/api-reference/openapi.mint.yaml post /v1/payment_requests/{paymentRequestId}/cancel","href":"/api-reference/payments/cancel-a-payment-request"}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"title":"Start an individual call - Relay","buildId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","deploymentId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","dynamics":["c2aa737661","b0f84f53ff","a9bb46feb3","2b790eda92"],"chunks":["OpenApiReferenceProvider-WRhTSUDL.js","utils-ChMov4Kr.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-_REmC2bI.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp6nVRCu.js","snippetPresets-DZadmXoU.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","Page-R3M_BF4L.js","ApiExamples-CY2WdoTl.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-DwYG-Q4l.js","shallow-BXQIGwv4.js","getApiPlaygroundDisplay-CK5nK5B9.js","CodeSnippet-TH4a2aGW.js","CodeSnippets-DwsQiOFS.js","getPastedJson-DD7kUzi_.js","icon-holE3QoJ.js","MethodPill-DUW0T8us.js","DuplicateIcon-CI_p4be-.js","createIcon-BdbRvavb.js","DynamicMarkdown-DN96a4Ur.js","SectionHeading-SCu36A9d.js","axios-vUo_bRtp.js","Markdown-CCeGv-zI.js","clsx-BGBGWFTt.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-Cv_O2fky.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-2C5OB2eV.js"]}