API reference

Calls

Calls, transcripts, recordings and callbacks

MethodPathSummary
GET/v1/account/bookingsMeetings the agent booked: upcoming soonest first, or past most recent first. No caller details
GET/v1/account/callbacksCallbacks captured by the agent, oldest due first
POST/v1/account/callbacks/{callbackId}/doneMark a callback as done, with an optional note
GET/v1/account/callsCalls and chats, newest first, filtered by group, playbook, version, outcome, channel and date. Test calls are left out unless includeTests=true (both kinds) or isTest=true (test calls only)
GET/v1/account/calls/{callId}One call: record, transcript, tool calls, guardrail hits, rule fired, booking and callback (audited; sensitive answers withheld)
GET/v1/account/calls/{callId}/debug-traceWhat code decided on a call, in order: path moves, rules checked and why, tools run with their arguments and results (audited; sensitive answers withheld)
POST/v1/account/calls/{callId}/debug-trace/revealThe call debugger trace with its sensitive answers, recorded separately in the audit log (rate limited)
GET/v1/account/calls/{callId}/follow-upThe follow-up page for a call: its state, the texts sent and where they got to, what the caller did on the page, and why there is no page when there is none. The page's link is never returned
GET/v1/account/calls/{callId}/follow-up/pageThe call's follow-up page as the caller sees it now, for staff to look at. Read-only: no link, no booking actions, and viewing it is not recorded as the caller opening it
POST/v1/account/calls/{callId}/follow-up/resendText the follow-up link again. A fresh link is minted, so the earlier one stops working, and the send goes through the normal consent and quiet-hours checks
POST/v1/account/calls/{callId}/follow-up/revokeTurn off a caller's follow-up link. The page then shows only the group's name and number, and nothing personal
GET/v1/account/calls/{callId}/promptsWhat the model was sent on each step of a call, whole and unmasked (kept on test calls and when prompt capture is on; recorded in the audit log as a reveal; rate limited)
GET/v1/account/calls/{callId}/question-mapThe lines of questioning of the playbook a call ran, to draw its path on: pinned, so lines a group added and rules since deleted are there
GET/v1/account/calls/{callId}/recording-linkA signed link to the recording, valid for 5 minutes (only when consent was given)
POST/v1/account/calls/{callId}/revealShow the sensitive answers a call collected: the full values, recorded separately in the audit log (rate limited)

Meetings the agent booked: upcoming soonest first, or past most recent first. No caller details#

GET /v1/account/bookings

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token). Bearer token: Authorization: Bearer <token> (An API token (ans_pat_ or ans_svc_). Only routes that list a scope here accept one, and only with that scope.).

Query parameters

NameTypeRequiredDescription
groupIdstring (grp_… ID)NoID (grp_…)
whenenumNoOne of: "upcoming", "past". Default: "upcoming".
limitintegerNoBetween 1 and 200. Default: 50.

Response 200

FieldTypeRequiredDescription
bookingsarray<Booking>Yes—
bookings[].assigneestring | nullYes—
bookings[].callIdstring (call_… ID) | nullYes—
bookings[].confirmationIdstringYes—
bookings[].groupIdstring (grp_… ID)YesID (grp_…)
bookings[].idstring (bkg_… ID)YesID (bkg_…)
bookings[].meetingTypestring | nullYes—
bookings[].outcomestring | nullYes—
bookings[].providerstringYes—
bookings[].slotEndstring (date-time) | nullYes—
bookings[].slotStartstring (date-time)Yes—
bookings[].statusenumYesOne of: "confirmed", "cancelled".
bookings[].timeZonestring | nullYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X GET "$ANSWERSTACK_API_URL/v1/account/bookings" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Callbacks captured by the agent, oldest due first#

GET /v1/account/callbacks

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token). Bearer token: Authorization: Bearer <token> (An API token (ans_pat_ or ans_svc_). Only routes that list a scope here accept one, and only with that scope.).

Query parameters

NameTypeRequiredDescription
statusenumNoOne of: "open", "done", "escalated", "dismissed".
groupIdstring (grp_… ID)NoID (grp_…)
limitintegerNoBetween 1 and 200. Default: 100.

Response 200

FieldTypeRequiredDescription
callbacksarray<Callback>Yes—
callbacks[].callIdstring (call_… ID) | nullYes—
callbacks[].callerNamestring | nullYes—
callbacks[].createdAtstring (date-time)Yes—
callbacks[].doneAtstring (date-time) | nullYes—
callbacks[].doneBystring (usr_… ID) | string (svc_… ID) | nullYes—
callbacks[].doneNotestring | nullYes—
callbacks[].dueAtstring (date-time) | nullYes—
callbacks[].groupIdstring (grp_… ID)YesID (grp_…)
callbacks[].idstring (cbk_… ID)YesID (cbk_…)
callbacks[].phonestring | nullYes—
callbacks[].preferredWindowstring | nullYes—
callbacks[].reasonstring | nullYes—
callbacks[].statusenumYesOne of: "open", "done", "escalated", "dismissed".

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X GET "$ANSWERSTACK_API_URL/v1/account/callbacks" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Mark a callback as done, with an optional note#

POST /v1/account/callbacks/{callbackId}/done

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token). Bearer token: Authorization: Bearer <token> (An API token (ans_pat_ or ans_svc_). Only routes that list a scope here accept one, and only with that scope.).

Path parameters

NameTypeRequiredDescription
callbackIdstring (cbk_… ID)YesID (cbk_…)

Request body

application/json, required.

FieldTypeRequiredDescription
notestringNo1–1000 characters.

Response 200

FieldTypeRequiredDescription
callIdstring (call_… ID) | nullYes—
callerNamestring | nullYes—
createdAtstring (date-time)Yes—
doneAtstring (date-time) | nullYes—
doneBystring (usr_… ID) | string (svc_… ID) | nullYes—
doneNotestring | nullYes—
dueAtstring (date-time) | nullYes—
groupIdstring (grp_… ID)YesID (grp_…)
idstring (cbk_… ID)YesID (cbk_…)
phonestring | nullYes—
preferredWindowstring | nullYes—
reasonstring | nullYes—
statusenumYesOne of: "open", "done", "escalated", "dismissed".

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X POST "$ANSWERSTACK_API_URL/v1/account/callbacks/{callbackId}/done" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "note": "string"
}'

Calls and chats, newest first, filtered by group, playbook, version, outcome, channel and date. Test calls are left out unless includeTests=true (both kinds) or isTest=true (test calls only)#

GET /v1/account/calls

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token). Bearer token: Authorization: Bearer <token> (An API token (ans_pat_ or ans_svc_). Only routes that list a scope here accept one, and only with that scope.).

Query parameters

NameTypeRequiredDescription
groupIdstring (grp_… ID)NoID (grp_…)
playbookIdstring (pb_… ID)NoID (pb_…)
playbookVersionIdstring (pbv_… ID)NoID (pbv_…)
versionintegerNoMinimum 1.
outcomeenumNoOne of: "booked", "callback", "transferred", "not_fit", "declined", "abandoned", "booking_failed", "redirected", "error".
ruleFiredstringNo1–200 characters.
recordedenumNoOne of: "true", "false".
fromstringNoUp to 40 characters.
tostringNoUp to 40 characters.
isTestenumNoOne of: "true", "false".
includeTestsenumNoOne of: "true", "false".
channelenumNoOne of: "phone", "site_chat", "page_chat", "web_voice".
limitintegerNoBetween 1 and 200. Default: 50.
cursorstringNoUp to 500 characters.

Response 200

FieldTypeRequiredDescription
callsarray<CallSummary>Yes—
calls[].answeredByenum | nullYesOne of: "agent", "rep", "nobody".
calls[].callerNumberMaskedstring | nullYes—
calls[].channelenumYesOne of: "phone", "web_chat", "web_voice".
calls[].channelKindenumYesOne of: "phone", "site_chat", "page_chat", "web_voice".
calls[].continuesCallIdstring (call_… ID) | nullYes—
calls[].durationSecondsinteger | nullYes—
calls[].endedAtstring (date-time) | nullYes—
calls[].groupIdstring (grp_… ID)YesID (grp_…)
calls[].groupNamestringYes—
calls[].guardrailHitCountintegerYes—
calls[].handoffReasonstring | nullYes—
calls[].idstring (call_… ID)YesID (call_…)
calls[].isTestbooleanYes—
calls[].outcomeenum | nullYesOne of: "booked", "callback", "transferred", "not_fit", "declined", "abandoned", "booking_failed", "redirected", "error".
calls[].phoneNumberIdstring (pn_… ID) | nullYes—
calls[].playbookIdstring (pb_… ID) | nullYes—
calls[].playbookNamestring | nullYes—
calls[].playbookVersioninteger | nullYes—
calls[].playbookVersionIdstring (pbv_… ID) | nullYes—
calls[].recordedbooleanYes—
calls[].recordingStatusenum | nullYesOne of: "disabled", "unavailable", "recording", "stored", "declined", "failed".
calls[].ruleFiredstring | nullYes—
calls[].sourcePageIdstring (fup_… ID) | nullYes—
calls[].startedAtstring (date-time)Yes—
calls[].statusenumYesOne of: "ringing", "in_progress", "completed", "failed".
calls[].widgetKeyIdstring (wk_… ID) | nullYes—
calls[].widgetVisitorIdstring (wvis_… ID) | nullYes—
nextCursorstring | nullYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X GET "$ANSWERSTACK_API_URL/v1/account/calls" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

One call: record, transcript, tool calls, guardrail hits, rule fired, booking and callback (audited; sensitive answers withheld)#

GET /v1/account/calls/{callId}

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token). Bearer token: Authorization: Bearer <token> (An API token (ans_pat_ or ans_svc_). Only routes that list a scope here accept one, and only with that scope.).

Path parameters

NameTypeRequiredDescription
callIdstring (call_… ID)YesID (call_…)

Response 200

FieldTypeRequiredDescription
answeredAtstring (date-time) | nullYes—
answeredByenum | nullYesOne of: "agent", "rep", "nobody".
bookingFactsmapYes—
bookingFacts.{key}anyNoAny key.
bookingsarray<object>Yes—
bookings[].assigneestring | nullYes—
bookings[].confirmationIdstringYes—
bookings[].idstring (bkg_… ID)YesID (bkg_…)
bookings[].meetingTypestring | nullYes—
bookings[].providerstringYes—
bookings[].slotEndstring (date-time) | nullYes—
bookings[].slotStartstring (date-time)Yes—
bookings[].statusenumYesOne of: "confirmed", "cancelled".
bookings[].timeZonestring | nullYes—
callbacksarray<Callback>Yes—
callbacks[].callIdstring (call_… ID) | nullYes—
callbacks[].callerNamestring | nullYes—
callbacks[].createdAtstring (date-time)Yes—
callbacks[].doneAtstring (date-time) | nullYes—
callbacks[].doneBystring (usr_… ID) | string (svc_… ID) | nullYes—
callbacks[].doneNotestring | nullYes—
callbacks[].dueAtstring (date-time) | nullYes—
callbacks[].groupIdstring (grp_… ID)YesID (grp_…)
callbacks[].idstring (cbk_… ID)YesID (cbk_…)
callbacks[].phonestring | nullYes—
callbacks[].preferredWindowstring | nullYes—
callbacks[].reasonstring | nullYes—
callbacks[].statusenumYesOne of: "open", "done", "escalated", "dismissed".
callerNumberstring | nullYes—
callerNumberMaskedstring | nullYes—
channelenumYesOne of: "phone", "web_chat", "web_voice".
channelKindenumYesOne of: "phone", "site_chat", "page_chat", "web_voice".
collectedFieldsmapYes—
collectedFields.{key}anyNoAny key.
connectedSecondsinteger | nullYes—
continuesCallIdstring (call_… ID) | nullYes—
dialedNumberstring | nullYes—
durationSecondsinteger | nullYes—
effectiveHashstring | nullYes—
endedAtstring (date-time) | nullYes—
errorCodestring | nullYes—
fieldSensitivitymapYes—
fieldSensitivity.{key}enumNoAny key. One of: "standard", "sensitive".
flowPatharray<object | object | object | object | object | object | object | object | object>Yes—
flowPath[].flowIdstringYes(variant 1) 1–64 characters.
flowPath[].kindconstantYes(variant 1) Always "enter".
flowPath[].tnumberYes(variant 1) Minimum 0.
flowPath[].viaenumYes(variant 1) One of: "default", "reason".
flowPath[].afterFieldstringNo(variant 2) 1–64 characters.
flowPath[].fromstringYes(variant 2) 1–64 characters.
flowPath[].kindconstantYes(variant 2) Always "skip".
flowPath[].ruleIdstringYes(variant 2) 1–64 characters.
flowPath[].tnumberYes(variant 2) Minimum 0.
flowPath[].tostringYes(variant 2) 1–64 characters.
flowPath[].actionenumYes(variant 3) One of: "offer_nurture", "offer_referral", "end_politely".
flowPath[].afterFieldstringNo(variant 3) 1–64 characters.
flowPath[].flowIdstringYes(variant 3) 1–64 characters.
flowPath[].kindconstantYes(variant 3) Always "not_a_fit".
flowPath[].ruleIdstringYes(variant 3) 1–64 characters.
flowPath[].tnumberYes(variant 3) Minimum 0.
flowPath[].afterFieldstringNo(variant 4) 1–64 characters.
flowPath[].flowIdstringYes(variant 4) 1–64 characters.
flowPath[].kindconstantYes(variant 4) Always "fit_again".
flowPath[].ruleIdstringYes(variant 4) 1–64 characters.
flowPath[].tnumberYes(variant 4) Minimum 0.
flowPath[].fieldIdstringYes(variant 5) 1–64 characters.
flowPath[].flowIdstringYes(variant 5) 1–64 characters.
flowPath[].kindconstantYes(variant 5) Always "gated".
flowPath[].tnumberYes(variant 5) Minimum 0.
flowPath[].flowIdstringYes(variant 6) 1–64 characters.
flowPath[].kindconstantYes(variant 6) Always "complete".
flowPath[].tnumberYes(variant 6) Minimum 0.
flowPath[].asWrittenbooleanNo(variant 7)
flowPath[].flowIdstringYes(variant 7) 1–64 characters.
flowPath[].kindconstantYes(variant 7) Always "talking_point".
flowPath[].missingarray<string>No(variant 7) Up to 20 items.
flowPath[].pointIdstringYes(variant 7) 1–64 characters.
flowPath[].saidbooleanYes(variant 7)
flowPath[].tnumberYes(variant 7) Minimum 0.
flowPath[].kindconstantYes(variant 8) Always "booking".
flowPath[].ruleIdstring | nullYes(variant 8) 1–64 characters.
flowPath[].tnumberYes(variant 8) Minimum 0.
flowPath[].flowIdstring | nullYes(variant 9) 1–64 characters.
flowPath[].kindconstantYes(variant 9) Always "transfer".
flowPath[].tnumberYes(variant 9) Minimum 0.
flowPathWithheldbooleanYes—
flowsUsedarray<string>Yes—
groupIdstring (grp_… ID)YesID (grp_…)
groupNamestringYes—
guardrailHitCountintegerYes—
guardrailHitsarray<object>Yes—
guardrailHits[].actionTakenstring | nullYes—
guardrailHits[].createdAtstring (date-time)Yes—
guardrailHits[].detailstring | nullYes—
guardrailHits[].idstring (grd_… ID)YesID (grd_…)
guardrailHits[].layerstringYes—
guardrailHits[].rulestringYes—
handoffReasonstring | nullYes—
handoffRingarray<CallRingAttempt> | nullYes—
handoffRing[].answeredAtstring (date-time) | nullYes—
handoffRing[].attemptintegerYes—
handoffRing[].dialedAtstring (date-time)Yes—
handoffRing[].endedAtstring (date-time)Yes—
handoffRing[].namestringYes—
handoffRing[].numberstring | nullYes—
handoffRing[].outcomeenumYesOne of: "accepted", "declined", "no_accept", "no_answer", "busy", "failed", "cancelled", "lost_race".
handoffRing[].sipStatusinteger | nullYes—
handoffRing[].userIdstring (usr_… ID) | nullYes—
hasRecordingbooleanYes—
idstring (call_… ID)YesID (call_…)
isTestbooleanYes—
maskedFieldsarray<string>Yes—
modelsCallModelsYes—
models.llmstring | nullYes—
models.llmFallbackUsedbooleanYes—
models.sttstring | nullYes—
models.ttsstring | nullYes—
objectionTagsarray<string>Yes—
outcomeenum | nullYesOne of: "booked", "callback", "transferred", "not_fit", "declined", "abandoned", "booking_failed", "redirected", "error".
phoneNumberIdstring (pn_… ID) | nullYes—
playbookIdstring (pb_… ID) | nullYes—
playbookNamestring | nullYes—
playbookVersioninteger | nullYes—
playbookVersionIdstring (pbv_… ID) | nullYes—
provisionalFieldsmapYes—
provisionalFields.{key}anyNoAny key.
recordedbooleanYes—
recordingobject | nullYes—
recording.durationMsinteger | nullYes—
recording.expiredbooleanYes—
recording.handoverAtstring (date-time) | nullYes—
recording.startedAtstring (date-time) | nullYes—
recording.statusenumYesOne of: "disabled", "unavailable", "recording", "stored", "declined", "failed".
recordingConsentboolean | nullYes—
recordingStatusenum | nullYesOne of: "disabled", "unavailable", "recording", "stored", "declined", "failed".
ringany | nullYes—
ruleActionmap | nullYes—
ruleAction.{key}anyNoAny key.
ruleFiredstring | nullYes—
sourceobject | nullYes—
source.pageCallIdstring (call_… ID) | nullYes—
source.sitestring | nullYes—
source.widgetKeyNamestring | nullYes—
sourcePageIdstring (fup_… ID) | nullYes—
startedAtstring (date-time)Yes—
statusenumYesOne of: "ringing", "in_progress", "completed", "failed".
summarystring | nullYes—
timingsmapYes—
timings.{key}anyNoAny key.
toolCallsarray<object>Yes—
toolCalls[].endedAtstring (date-time) | nullYes—
toolCalls[].latencymap | nullYes—
toolCalls[].latency.{key}numberNoAny key.
toolCalls[].redactedbooleanYes—
toolCalls[].roleenumYesOne of: "agent", "caller", "tool", "system", "rep".
toolCalls[].seqintegerYes—
toolCalls[].startedAtstring (date-time) | nullYes—
toolCalls[].textstring | nullYes—
toolCalls[].toolArgsmap | nullYes—
toolCalls[].toolArgs.{key}anyNoAny key.
toolCalls[].toolNamestring | nullYes—
toolCalls[].toolResultanyYes—
transcriptStoredbooleanYes—
transferResultstring | nullYes—
turnsarray<object>Yes—
turns[].endedAtstring (date-time) | nullYes—
turns[].latencymap | nullYes—
turns[].latency.{key}numberNoAny key.
turns[].redactedbooleanYes—
turns[].roleenumYesOne of: "agent", "caller", "tool", "system", "rep".
turns[].seqintegerYes—
turns[].startedAtstring (date-time) | nullYes—
turns[].textstring | nullYes—
turns[].toolArgsmap | nullYes—
turns[].toolArgs.{key}anyNoAny key.
turns[].toolNamestring | nullYes—
turns[].toolResultanyYes—
widgetKeyIdstring (wk_… ID) | nullYes—
widgetVisitorIdstring (wvis_… ID) | nullYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X GET "$ANSWERSTACK_API_URL/v1/account/calls/{callId}" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

What code decided on a call, in order: path moves, rules checked and why, tools run with their arguments and results (audited; sensitive answers withheld)#

GET /v1/account/calls/{callId}/debug-trace

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token). Bearer token: Authorization: Bearer <token> (An API token (ans_pat_ or ans_svc_). Only routes that list a scope here accept one, and only with that scope.).

Path parameters

NameTypeRequiredDescription
callIdstring (call_… ID)YesID (call_…)

Response 200

FieldTypeRequiredDescription
callIdstring (call_… ID)YesID (call_…)
isTestbooleanYes—
pathWithheldbooleanYes—
startedAtstring (date-time)Yes—
traceany | nullYes—
transcriptStoredbooleanYes—
withheldbooleanYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X GET "$ANSWERSTACK_API_URL/v1/account/calls/{callId}/debug-trace" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

The call debugger trace with its sensitive answers, recorded separately in the audit log (rate limited)#

POST /v1/account/calls/{callId}/debug-trace/reveal

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).

Path parameters

NameTypeRequiredDescription
callIdstring (call_… ID)YesID (call_…)

Response 200

FieldTypeRequiredDescription
callIdstring (call_… ID)YesID (call_…)
isTestbooleanYes—
pathWithheldbooleanYes—
startedAtstring (date-time)Yes—
traceany | nullYes—
transcriptStoredbooleanYes—
withheldbooleanYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X POST "$ANSWERSTACK_API_URL/v1/account/calls/{callId}/debug-trace/reveal" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

The follow-up page for a call: its state, the texts sent and where they got to, what the caller did on the page, and why there is no page when there is none. The page's link is never returned#

GET /v1/account/calls/{callId}/follow-up

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).

Path parameters

NameTypeRequiredDescription
callIdstring (call_… ID)YesID (call_…)

Response 200

FieldTypeRequiredDescription
consentobject | nullYes—
consent.askedAtstring (date-time)Yes—
consent.grantedbooleanYes—
consent.resubscribeSourceenum | nullYesOne of: "caller_start".
consent.resubscribedAtstring (date-time) | nullYes—
consent.revokeSourceenum | nullYesOne of: "caller_stop", "staff", "crm", "system", "unsubscribe".
consent.revokedAtstring (date-time) | nullYes—
eventsarray<FollowUpEvent>Yes—
events[].moduleIdstring | nullYes—
events[].occurredAtstring (date-time)Yes—
events[].typeenumYesOne of: "opened", "module_viewed", "link_clicked", "calendar_added", "video_played", "form_submitted", "shared", "booked", "rescheduled", "cancelled", "visit_photos_viewed", "visit_photo_downloaded".
messagesarray<FollowUpMessage>Yes—
messages[].bodystringYes—
messages[].channelenumYesOne of: "sms", "email".
messages[].createdAtstring (date-time)Yes—
messages[].idstring (msg_… ID)YesID (msg_…)
messages[].reasonstring | nullYes—
messages[].recipientMaskedstring | nullYes—
messages[].scheduledForstring (date-time) | nullYes—
messages[].sentAtstring (date-time) | nullYes—
messages[].statusenumYesOne of: "queued", "sent", "delivered", "failed", "skipped".
messages[].templateKeystringYes—
pageobject | nullYes—
page.createdAtstring (date-time)Yes—
page.expiresAtstring (date-time)Yes—
page.firstOpenedAtstring (date-time) | nullYes—
page.formAnswersarray<object>Yes—
page.formAnswers[].labelstringYes—
page.formAnswers[].valuestringYes—
page.formSubmittedAtstring (date-time) | nullYes—
page.hasBookingbooleanYes—
page.idstring (fup_… ID)YesID (fup_…)
page.openCountintegerYes—
page.readinessReadinessYes—
page.readiness.basePointsnumberYes—
page.readiness.pointsnumberYes—
page.readiness.reasonsarray<object>Yes—
page.readiness.reasons[].keystringYes—
page.readiness.reasons[].pointsnumberYes—
page.readiness.reasons[].wordsstringYes—
page.readiness.sentencestringYes—
page.readiness.silentDaysinteger | nullYes—
page.readiness.sourceenumYesOne of: "lead", "call".
page.readiness.tierenumYesOne of: "cold", "warm", "hot", "not_a_fit".
page.readiness.versionstringYes—
page.revokedAtstring (date-time) | nullYes—
page.revokedBystring (usr_… ID) | string (svc_… ID) | nullYes—
page.stateenumYesOne of: "upcoming", "day_of", "after_visit", "no_booking", "cancelled", "expired", "revoked".
reasonstring | nullYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X GET "$ANSWERSTACK_API_URL/v1/account/calls/{callId}/follow-up" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

The call's follow-up page as the caller sees it now, for staff to look at. Read-only: no link, no booking actions, and viewing it is not recorded as the caller opening it#

GET /v1/account/calls/{callId}/follow-up/page

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).

Path parameters

NameTypeRequiredDescription
callIdstring (call_… ID)YesID (call_…)

Response 200

FieldTypeRequiredDescription
bookingPageUrlstringNo(variant 1)
canobjectYes(variant 1)
can.bookbooleanYes(variant 1)
can.cancelbooleanYes(variant 1)
can.reschedulebooleanYes(variant 1)
chatbooleanYes(variant 1)
firstNamestring | nullYes(variant 1)
groupNamestringYes(variant 1)
leadstring | nullYes(variant 1)
modulesarray<object | object | object | object | object | object | object | object | object | object | object | object | object | object | object | object | object>Yes(variant 1)
modules[].dayLabelstringYes(variant 1) (variant 1)
modules[].durationLabelstring | nullYes(variant 1) (variant 1)
modules[].endAtstringYes(variant 1) (variant 1)
modules[].headingstringYes(variant 1) (variant 1)
modules[].idconstantYes(variant 1) (variant 1) Always "meeting_card".
modules[].locationstring | nullYes(variant 1) (variant 1)
modules[].staffNamestring | nullYes(variant 1) (variant 1)
modules[].startAtstringYes(variant 1) (variant 1)
modules[].statusenumYes(variant 1) (variant 1) One of: "confirmed", "cancelled".
modules[].timeLabelstringYes(variant 1) (variant 1)
modules[].whenstringYes(variant 1) (variant 1)
modules[].biostring | nullYes(variant 1) (variant 2)
modules[].headingstringYes(variant 1) (variant 2)
modules[].idconstantYes(variant 1) (variant 2) Always "staff_intro".
modules[].namestringYes(variant 1) (variant 2)
modules[].photoUrlstring (uri) | nullYes(variant 1) (variant 2)
modules[].titlestring | nullYes(variant 1) (variant 2)
modules[].videoobject | nullYes(variant 1) (variant 2)
modules[].video.captionsUrlstring (uri) | nullYes(variant 1) (variant 2)
modules[].video.kindenumYes(variant 1) (variant 2) One of: "upload", "youtube", "vimeo", "loom".
modules[].video.urlstring (uri)Yes(variant 1) (variant 2)
modules[].headingstringYes(variant 1) (variant 3)
modules[].idconstantYes(variant 1) (variant 3) Always "recap".
modules[].notedarray<object>Yes(variant 1) (variant 3)
modules[].noted[].labelstringYes(variant 1) (variant 3)
modules[].noted[].valuestringYes(variant 1) (variant 3)
modules[].summarystringYes(variant 1) (variant 3)
modules[].headingstringYes(variant 1) (variant 4)
modules[].idconstantYes(variant 1) (variant 4) Always "open_questions".
modules[].questionsarray<string>Yes(variant 1) (variant 4)
modules[].headingstringYes(variant 1) (variant 5)
modules[].idconstantYes(variant 1) (variant 5) Always "pricing".
modules[].servicesarray<object>Yes(variant 1) (variant 5)
modules[].services[].askedbooleanYes(variant 1) (variant 5)
modules[].services[].linestringYes(variant 1) (variant 5)
modules[].services[].namestringYes(variant 1) (variant 5)
modules[].specialsarray<object>Yes(variant 1) (variant 5)
modules[].specials[].endsOnstring | nullYes(variant 1) (variant 5)
modules[].specials[].itemsarray<object>No(variant 1) (variant 5)
modules[].specials[].items[].altTextstringYes(variant 1) (variant 5)
modules[].specials[].items[].captionstring | nullYes(variant 1) (variant 5)
modules[].specials[].items[].detailsstring | nullYes(variant 1) (variant 5)
modules[].specials[].items[].kindenumYes(variant 1) (variant 5) One of: "photo", "floor_plan", "brochure", "video", "tour", "document", "logo".
modules[].specials[].items[].previewUrlstring (uri) | nullYes(variant 1) (variant 5)
modules[].specials[].items[].titlestringYes(variant 1) (variant 5)
modules[].specials[].items[].urlstring (uri)Yes(variant 1) (variant 5)
modules[].specials[].linestringYes(variant 1) (variant 5)
modules[].specials[].titlestringYes(variant 1) (variant 5)
modules[].headingstringYes(variant 1) (variant 6)
modules[].idconstantYes(variant 1) (variant 6) Always "service_media".
modules[].servicesarray<object>Yes(variant 1) (variant 6)
modules[].services[].itemsarray<object>Yes(variant 1) (variant 6)
modules[].services[].items[].altTextstringYes(variant 1) (variant 6)
modules[].services[].items[].captionstring | nullYes(variant 1) (variant 6)
modules[].services[].items[].detailsstring | nullYes(variant 1) (variant 6)
modules[].services[].items[].kindenumYes(variant 1) (variant 6) One of: "photo", "floor_plan", "brochure", "video", "tour", "document", "logo".
modules[].services[].items[].previewUrlstring (uri) | nullYes(variant 1) (variant 6)
modules[].services[].items[].titlestringYes(variant 1) (variant 6)
modules[].services[].items[].urlstring (uri)Yes(variant 1) (variant 6)
modules[].services[].namestringYes(variant 1) (variant 6)
modules[].cardsarray<object>Yes(variant 1) (variant 7)
modules[].cards[].bodystringYes(variant 1) (variant 7)
modules[].cards[].buttonobject | nullYes(variant 1) (variant 7)
modules[].cards[].button.labelstringYes(variant 1) (variant 7)
modules[].cards[].button.urlstring (uri)Yes(variant 1) (variant 7)
modules[].cards[].idstringYes(variant 1) (variant 7)
modules[].cards[].imageUrlstring (uri) | nullYes(variant 1) (variant 7)
modules[].cards[].titlestringYes(variant 1) (variant 7)
modules[].headingstringYes(variant 1) (variant 7)
modules[].idconstantYes(variant 1) (variant 7) Always "content_cards".
modules[].accessibilitystring | nullYes(variant 1) (variant 8)
modules[].addressstring | nullYes(variant 1) (variant 8)
modules[].entrancestring | nullYes(variant 1) (variant 8)
modules[].headingstringYes(variant 1) (variant 8)
modules[].idconstantYes(variant 1) (variant 8) Always "getting_here".
modules[].mapUrlstring (uri) | nullYes(variant 1) (variant 8)
modules[].nearbystring | nullYes(variant 1) (variant 8)
modules[].parkingstring | nullYes(variant 1) (variant 8)
modules[].bodystring | nullYes(variant 1) (variant 9)
modules[].checklistarray<string>Yes(variant 1) (variant 9)
modules[].headingstringYes(variant 1) (variant 9)
modules[].idconstantYes(variant 1) (variant 9) Always "prep".
modules[].answersmapYes(variant 1) (variant 10)
modules[].answers.{key}string | booleanNo(variant 1) (variant 10) Any key.
modules[].fieldsarray<object>Yes(variant 1) (variant 10)
modules[].fields[].idstringYes(variant 1) (variant 10)
modules[].fields[].labelstringYes(variant 1) (variant 10)
modules[].fields[].optionsarray<string>Yes(variant 1) (variant 10)
modules[].fields[].typeenumYes(variant 1) (variant 10) One of: "text", "choice", "boolean".
modules[].headingstringYes(variant 1) (variant 10)
modules[].idconstantYes(variant 1) (variant 10) Always "pre_visit_form".
modules[].introstring | nullYes(variant 1) (variant 10)
modules[].headingstringYes(variant 1) (variant 11)
modules[].idconstantYes(variant 1) (variant 11) Always "gallery".
modules[].photosarray<object>Yes(variant 1) (variant 11)
modules[].photos[].altTextstringNo(variant 1) (variant 11)
modules[].photos[].captionstring | nullYes(variant 1) (variant 11)
modules[].photos[].urlstring (uri)Yes(variant 1) (variant 11)
modules[].tourUrlstring (uri) | nullYes(variant 1) (variant 11)
modules[].headingstringYes(variant 1) (variant 12)
modules[].idconstantYes(variant 1) (variant 12) Always "reviews".
modules[].reviewsarray<object>Yes(variant 1) (variant 12)
modules[].reviews[].attributionstring | nullYes(variant 1) (variant 12)
modules[].reviews[].idstringYes(variant 1) (variant 12)
modules[].reviews[].quotestringYes(variant 1) (variant 12)
modules[].headingstringYes(variant 1) (variant 13)
modules[].idconstantYes(variant 1) (variant 13) Always "resources".
modules[].resourcesarray<object>Yes(variant 1) (variant 13)
modules[].resources[].descriptionstring | nullYes(variant 1) (variant 13)
modules[].resources[].idstringYes(variant 1) (variant 13)
modules[].resources[].labelstringYes(variant 1) (variant 13)
modules[].resources[].urlstring (uri)Yes(variant 1) (variant 13)
modules[].blockIdstringYes(variant 1) (variant 14)
modules[].bodystring | nullYes(variant 1) (variant 14)
modules[].buttonobject | nullYes(variant 1) (variant 14)
modules[].button.labelstringYes(variant 1) (variant 14)
modules[].button.urlstring (uri)Yes(variant 1) (variant 14)
modules[].headingstringYes(variant 1) (variant 14)
modules[].idconstantYes(variant 1) (variant 14) Always "custom_block".
modules[].imageUrlstring (uri) | nullYes(variant 1) (variant 14)
modules[].videoobject | nullYes(variant 1) (variant 14)
modules[].video.captionsUrlstring (uri) | nullYes(variant 1) (variant 14)
modules[].video.kindenumYes(variant 1) (variant 14) One of: "upload", "youtube", "vimeo", "loom".
modules[].video.urlstring (uri)Yes(variant 1) (variant 14)
modules[].headingstringYes(variant 1) (variant 15)
modules[].idconstantYes(variant 1) (variant 15) Always "share".
modules[].notestringYes(variant 1) (variant 15)
modules[].groupNamestringYes(variant 1) (variant 16)
modules[].headingstringYes(variant 1) (variant 16)
modules[].hoursstring | nullYes(variant 1) (variant 16)
modules[].idconstantYes(variant 1) (variant 16) Always "contact".
modules[].phonestring | nullYes(variant 1) (variant 16)
modules[].headingstringYes(variant 1) (variant 17)
modules[].idconstantYes(variant 1) (variant 17) Always "visit_photos".
modules[].photosarray<object>Yes(variant 1) (variant 17)
modules[].photos[].altTextstringYes(variant 1) (variant 17)
modules[].photos[].captionstring | nullYes(variant 1) (variant 17)
modules[].photos[].downloadUrlstring (uri)Yes(variant 1) (variant 17)
modules[].photos[].heightinteger | nullYes(variant 1) (variant 17)
modules[].photos[].largeUrlstring (uri)Yes(variant 1) (variant 17)
modules[].photos[].thumbUrlstring (uri)Yes(variant 1) (variant 17)
modules[].photos[].widthinteger | nullYes(variant 1) (variant 17)
stateenumYes(variant 1) One of: "upcoming", "day_of", "after_visit", "no_booking", "cancelled".
themeobjectYes(variant 1)
theme.accentstringYes(variant 1)
theme.backgroundstringYes(variant 1)
theme.fontenumYes(variant 1) One of: "system", "serif_warm", "sans_modern".
theme.logoUrlstring (uri) | nullYes(variant 1)
theme.primarystringYes(variant 1)
timeZonestringYes(variant 1)
groupNamestringYes(variant 2)
modulesarray<object | object | object | object | object | object | object | object | object | object>Yes(variant 2)
modules[].dayLabelstringYes(variant 2) (variant 1)
modules[].durationLabelstring | nullYes(variant 2) (variant 1)
modules[].headingstringYes(variant 2) (variant 1)
modules[].idconstantYes(variant 2) (variant 1) Always "meeting_card".
modules[].statusenumYes(variant 2) (variant 1) One of: "confirmed", "cancelled".
modules[].timeLabelstringYes(variant 2) (variant 1)
modules[].whenstringYes(variant 2) (variant 1)
modules[].biostring | nullYes(variant 2) (variant 2)
modules[].headingstringYes(variant 2) (variant 2)
modules[].idconstantYes(variant 2) (variant 2) Always "staff_intro".
modules[].namestringYes(variant 2) (variant 2)
modules[].photoUrlstring (uri) | nullYes(variant 2) (variant 2)
modules[].titlestring | nullYes(variant 2) (variant 2)
modules[].videoobject | nullYes(variant 2) (variant 2)
modules[].video.captionsUrlstring (uri) | nullYes(variant 2) (variant 2)
modules[].video.kindenumYes(variant 2) (variant 2) One of: "upload", "youtube", "vimeo", "loom".
modules[].video.urlstring (uri)Yes(variant 2) (variant 2)
modules[].cardsarray<object>Yes(variant 2) (variant 3)
modules[].cards[].bodystringYes(variant 2) (variant 3)
modules[].cards[].buttonobject | nullYes(variant 2) (variant 3)
modules[].cards[].button.labelstringYes(variant 2) (variant 3)
modules[].cards[].button.urlstring (uri)Yes(variant 2) (variant 3)
modules[].cards[].idstringYes(variant 2) (variant 3)
modules[].cards[].imageUrlstring (uri) | nullYes(variant 2) (variant 3)
modules[].cards[].titlestringYes(variant 2) (variant 3)
modules[].headingstringYes(variant 2) (variant 3)
modules[].idconstantYes(variant 2) (variant 3) Always "content_cards".
modules[].accessibilitystring | nullYes(variant 2) (variant 4)
modules[].addressstring | nullYes(variant 2) (variant 4)
modules[].entrancestring | nullYes(variant 2) (variant 4)
modules[].headingstringYes(variant 2) (variant 4)
modules[].idconstantYes(variant 2) (variant 4) Always "getting_here".
modules[].mapUrlstring (uri) | nullYes(variant 2) (variant 4)
modules[].nearbystring | nullYes(variant 2) (variant 4)
modules[].parkingstring | nullYes(variant 2) (variant 4)
modules[].headingstringYes(variant 2) (variant 5)
modules[].idconstantYes(variant 2) (variant 5) Always "gallery".
modules[].photosarray<object>Yes(variant 2) (variant 5)
modules[].photos[].altTextstringNo(variant 2) (variant 5)
modules[].photos[].captionstring | nullYes(variant 2) (variant 5)
modules[].photos[].urlstring (uri)Yes(variant 2) (variant 5)
modules[].tourUrlstring (uri) | nullYes(variant 2) (variant 5)
modules[].headingstringYes(variant 2) (variant 6)
modules[].idconstantYes(variant 2) (variant 6) Always "reviews".
modules[].reviewsarray<object>Yes(variant 2) (variant 6)
modules[].reviews[].attributionstring | nullYes(variant 2) (variant 6)
modules[].reviews[].idstringYes(variant 2) (variant 6)
modules[].reviews[].quotestringYes(variant 2) (variant 6)
modules[].headingstringYes(variant 2) (variant 7)
modules[].idconstantYes(variant 2) (variant 7) Always "resources".
modules[].resourcesarray<object>Yes(variant 2) (variant 7)
modules[].resources[].descriptionstring | nullYes(variant 2) (variant 7)
modules[].resources[].idstringYes(variant 2) (variant 7)
modules[].resources[].labelstringYes(variant 2) (variant 7)
modules[].resources[].urlstring (uri)Yes(variant 2) (variant 7)
modules[].blockIdstringYes(variant 2) (variant 8)
modules[].bodystring | nullYes(variant 2) (variant 8)
modules[].buttonobject | nullYes(variant 2) (variant 8)
modules[].button.labelstringYes(variant 2) (variant 8)
modules[].button.urlstring (uri)Yes(variant 2) (variant 8)
modules[].headingstringYes(variant 2) (variant 8)
modules[].idconstantYes(variant 2) (variant 8) Always "custom_block".
modules[].imageUrlstring (uri) | nullYes(variant 2) (variant 8)
modules[].videoobject | nullYes(variant 2) (variant 8)
modules[].video.captionsUrlstring (uri) | nullYes(variant 2) (variant 8)
modules[].video.kindenumYes(variant 2) (variant 8) One of: "upload", "youtube", "vimeo", "loom".
modules[].video.urlstring (uri)Yes(variant 2) (variant 8)
modules[].groupNamestringYes(variant 2) (variant 9)
modules[].headingstringYes(variant 2) (variant 9)
modules[].hoursstring | nullYes(variant 2) (variant 9)
modules[].idconstantYes(variant 2) (variant 9) Always "contact".
modules[].phonestring | nullYes(variant 2) (variant 9)
modules[].headingstringYes(variant 2) (variant 10)
modules[].idconstantYes(variant 2) (variant 10) Always "visit_photos".
modules[].photosarray<object>Yes(variant 2) (variant 10)
modules[].photos[].altTextstringYes(variant 2) (variant 10)
modules[].photos[].captionstring | nullYes(variant 2) (variant 10)
modules[].photos[].downloadUrlstring (uri)Yes(variant 2) (variant 10)
modules[].photos[].heightinteger | nullYes(variant 2) (variant 10)
modules[].photos[].largeUrlstring (uri)Yes(variant 2) (variant 10)
modules[].photos[].thumbUrlstring (uri)Yes(variant 2) (variant 10)
modules[].photos[].widthinteger | nullYes(variant 2) (variant 10)
stateconstantYes(variant 2) Always "shared".
themeobjectYes(variant 2)
theme.accentstringYes(variant 2)
theme.backgroundstringYes(variant 2)
theme.fontenumYes(variant 2) One of: "system", "serif_warm", "sans_modern".
theme.logoUrlstring (uri) | nullYes(variant 2)
theme.primarystringYes(variant 2)
groupNamestringYes(variant 3)
phonestring | nullYes(variant 3)
stateenumYes(variant 3) One of: "expired", "revoked".

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X GET "$ANSWERSTACK_API_URL/v1/account/calls/{callId}/follow-up/page" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Text the follow-up link again. A fresh link is minted, so the earlier one stops working, and the send goes through the normal consent and quiet-hours checks#

POST /v1/account/calls/{callId}/follow-up/resend

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).

Path parameters

NameTypeRequiredDescription
callIdstring (call_… ID)YesID (call_…)

Response 200

FieldTypeRequiredDescription
queuedconstantYesAlways true.

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X POST "$ANSWERSTACK_API_URL/v1/account/calls/{callId}/follow-up/resend" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Turn off a caller's follow-up link. The page then shows only the group's name and number, and nothing personal#

POST /v1/account/calls/{callId}/follow-up/revoke

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).

Path parameters

NameTypeRequiredDescription
callIdstring (call_… ID)YesID (call_…)

Response 200

FieldTypeRequiredDescription
revokedAtstring (date-time)Yes—
revokedBystring (usr_… ID) | string (svc_… ID) | nullYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X POST "$ANSWERSTACK_API_URL/v1/account/calls/{callId}/follow-up/revoke" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

What the model was sent on each step of a call, whole and unmasked (kept on test calls and when prompt capture is on; recorded in the audit log as a reveal; rate limited)#

GET /v1/account/calls/{callId}/prompts

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).

Path parameters

NameTypeRequiredDescription
callIdstring (call_… ID)YesID (call_…)

Response 200

FieldTypeRequiredDescription
callIdstring (call_… ID)YesID (call_…)
isTestbooleanYes—
promptsarray<object>Yes—
prompts[].atstring (date-time)Yes—
prompts[].promptPromptRecordYes—
prompts[].prompt.clippedbooleanYes—
prompts[].prompt.forMessagestring | nullYes—
prompts[].prompt.itemsarray<object | object | object>Yes—
prompts[].prompt.items[].roleenumYes(variant 1) One of: "system", "developer", "user", "assistant".
prompts[].prompt.items[].textstringYes(variant 1)
prompts[].prompt.items[].typeconstantYes(variant 1) Always "message".
prompts[].prompt.items[].argsstringYes(variant 2)
prompts[].prompt.items[].namestringYes(variant 2)
prompts[].prompt.items[].typeconstantYes(variant 2) Always "function_call".
prompts[].prompt.items[].isErrorbooleanYes(variant 3)
prompts[].prompt.items[].namestringYes(variant 3)
prompts[].prompt.items[].outputstringYes(variant 3)
prompts[].prompt.items[].typeconstantYes(variant 3) Always "function_call_output".
prompts[].prompt.modelstring | nullNo—
prompts[].prompt.stepintegerYesMinimum 0.
prompts[].prompt.toolsarray<string>Yes—
prompts[].prompt.vconstantYesAlways 1.
prompts[].seqintegerYes—
prompts[].tnumberYes—
startedAtstring (date-time)Yes—
transcriptStoredbooleanYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X GET "$ANSWERSTACK_API_URL/v1/account/calls/{callId}/prompts" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

The lines of questioning of the playbook a call ran, to draw its path on: pinned, so lines a group added and rules since deleted are there#

GET /v1/account/calls/{callId}/question-map

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).

Path parameters

NameTypeRequiredDescription
callIdstring (call_… ID)YesID (call_…)

Response 200

FieldTypeRequiredDescription
questionMapobject | nullYes—
questionMap.allowUnqualifiedbooleanYes—
questionMap.defaultFlowIdstringYes—
questionMap.flowsarray<map>Yes—
questionMap.flows[].{key}anyNoAny key.

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X GET "$ANSWERSTACK_API_URL/v1/account/calls/{callId}/question-map" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

GET /v1/account/calls/{callId}/recording-link

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token). Bearer token: Authorization: Bearer <token> (An API token (ans_pat_ or ans_svc_). Only routes that list a scope here accept one, and only with that scope.).

NameTypeRequiredDescription
callIdstring (call_… ID)YesID (call_…)
NameTypeRequiredDescription
downloadenumNoOne of: "true", "false".
FieldTypeRequiredDescription
expiresInSecondsintegerYes—
urlstringYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

bash
curl -X GET "$ANSWERSTACK_API_URL/v1/account/calls/{callId}/recording-link" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Show the sensitive answers a call collected: the full values, recorded separately in the audit log (rate limited)#

POST /v1/account/calls/{callId}/reveal

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).

Path parameters

NameTypeRequiredDescription
callIdstring (call_… ID)YesID (call_…)

Response 200

FieldTypeRequiredDescription
bookingFactsmapYes—
bookingFacts.{key}anyNoAny key.
collectedFieldsmapYes—
collectedFields.{key}anyNoAny key.
fieldSensitivitymapYes—
fieldSensitivity.{key}enumNoAny key. One of: "standard", "sensitive".
flowPatharray<object | object | object | object | object | object | object | object | object>Yes—
flowPath[].flowIdstringYes(variant 1) 1–64 characters.
flowPath[].kindconstantYes(variant 1) Always "enter".
flowPath[].tnumberYes(variant 1) Minimum 0.
flowPath[].viaenumYes(variant 1) One of: "default", "reason".
flowPath[].afterFieldstringNo(variant 2) 1–64 characters.
flowPath[].fromstringYes(variant 2) 1–64 characters.
flowPath[].kindconstantYes(variant 2) Always "skip".
flowPath[].ruleIdstringYes(variant 2) 1–64 characters.
flowPath[].tnumberYes(variant 2) Minimum 0.
flowPath[].tostringYes(variant 2) 1–64 characters.
flowPath[].actionenumYes(variant 3) One of: "offer_nurture", "offer_referral", "end_politely".
flowPath[].afterFieldstringNo(variant 3) 1–64 characters.
flowPath[].flowIdstringYes(variant 3) 1–64 characters.
flowPath[].kindconstantYes(variant 3) Always "not_a_fit".
flowPath[].ruleIdstringYes(variant 3) 1–64 characters.
flowPath[].tnumberYes(variant 3) Minimum 0.
flowPath[].afterFieldstringNo(variant 4) 1–64 characters.
flowPath[].flowIdstringYes(variant 4) 1–64 characters.
flowPath[].kindconstantYes(variant 4) Always "fit_again".
flowPath[].ruleIdstringYes(variant 4) 1–64 characters.
flowPath[].tnumberYes(variant 4) Minimum 0.
flowPath[].fieldIdstringYes(variant 5) 1–64 characters.
flowPath[].flowIdstringYes(variant 5) 1–64 characters.
flowPath[].kindconstantYes(variant 5) Always "gated".
flowPath[].tnumberYes(variant 5) Minimum 0.
flowPath[].flowIdstringYes(variant 6) 1–64 characters.
flowPath[].kindconstantYes(variant 6) Always "complete".
flowPath[].tnumberYes(variant 6) Minimum 0.
flowPath[].asWrittenbooleanNo(variant 7)
flowPath[].flowIdstringYes(variant 7) 1–64 characters.
flowPath[].kindconstantYes(variant 7) Always "talking_point".
flowPath[].missingarray<string>No(variant 7) Up to 20 items.
flowPath[].pointIdstringYes(variant 7) 1–64 characters.
flowPath[].saidbooleanYes(variant 7)
flowPath[].tnumberYes(variant 7) Minimum 0.
flowPath[].kindconstantYes(variant 8) Always "booking".
flowPath[].ruleIdstring | nullYes(variant 8) 1–64 characters.
flowPath[].tnumberYes(variant 8) Minimum 0.
flowPath[].flowIdstring | nullYes(variant 9) 1–64 characters.
flowPath[].kindconstantYes(variant 9) Always "transfer".
flowPath[].tnumberYes(variant 9) Minimum 0.
provisionalFieldsmapYes—
provisionalFields.{key}anyNoAny key.
turnsarray<object>Yes—
turns[].seqintegerYes—
turns[].toolArgsmap | nullYes—
turns[].toolArgs.{key}anyNoAny key.

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X POST "$ANSWERSTACK_API_URL/v1/account/calls/{callId}/reveal" \
  -H "Authorization: Bearer $ACCESS_TOKEN"