POSThttps://core-api.heysadie.ai/calls/{id}/monitor-session
id actorLabel url token expiresAt agentIdentity monitorIdentity success error code message details field metadata timestamp version path reason retryAfterSecondsCreate calls monitor session
Try it in the API ExplorerExample request
curl -X POST "https://core-api.heysadie.ai/calls/CALL_ID/monitor-session" \
-H "Authorization: ApiKey YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"actorLabel": "string"
}'Authentication
Authenticate with an API key in the Authorization header using the ApiKey scheme. See Authentication for how keys work and where to get them.
AuthorizationstringrequiredAPI key in the ApiKey scheme: ApiKey YOUR_API_KEY. Tenant keys authorize their own tenant; organization keys can act on any tenant in the organization.
X-Tenant-Idstring (uuid)optionalRequired when authenticating with an organization key: it selects the tenant the request acts on. Omit with tenant keys.
Request
Path parameters
idstringrequiredThe resource's UUID.
Body application/json · required
actorLabelstringoptionalOpaque label naming whoever you hold responsible for this session. Recorded verbatim in the audit trail and never interpreted: we cannot authenticate a person behind an API key.
Responses
idstringrequired`calls.id`, echoing the path.
urlstringrequiredLiveKit project URL the browser SDK connects to.
tokenstringrequiredShort-lived, subscribe-only LiveKit access token scoped to this call's room. Publishing is denied until you call takeover.
expiresAtstringrequiredWhen the token stops being accepted at connect. LiveKit checks a token only at connect, so a monitor already in the room stays in it past this time.
agentIdentitystringrequiredThe agent's LiveKit participant identity, which the SDK keys the agent's audio and state off.
monitorIdentitystringrequiredThe identity minted for this session. Pass it back to takeover and end.
400The request is invalid. `details` lists each field that failed
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 3 child properties
codeenumrequiredA parameter or body field broke a rule
"VALIDATION_ERROR"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
detailsobject[]optionalOne entry per field that failed
Show 2 item properties
fieldstringrequiredThe offending field
messagestringrequiredThe rule it broke
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
401Missing or invalid credentials
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 2 child properties
codeenumrequiredNo valid credentials
"UNAUTHORIZED"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
403The credentials are valid but may not use this route
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 2 child properties
codeenumrequiredThe credentials may not use this route
"FORBIDDEN"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
404
errorenumrequired"not_found"409
errorenumrequired"conflict"reasonenumrequired`not_live`: the call has ended, or is older than the liveness bound (never retry. `agent_absent`: the call is live but no agent is in the room right now, usually because one is reconnecting) retry once or twice after a short delay. `not_monitorable`: no room name, no control secret, or not a phone call. `monitor_cap_reached`: the per-call cap is met. `session_closed`: the named session is closed or unknown. `held_by_other_monitor`: another session holds the call and its holder is still in the room. `transfer_in_progress`: the caller's leg is leaving the room: refused by the agent, not by this API.
"not_live""agent_absent""not_monitorable""monitor_cap_reached""session_closed""held_by_other_monitor""not_taken_over""transfer_in_progress"429
errorenumrequired"rate_limited"retryAfterSecondsnumberrequired500An unexpected server error
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 2 child properties
codeenumrequiredAn unexpected server failure
"INTERNAL_SERVER_ERROR"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested