Generated API reference

Customer REST operations generated deterministically from the checked-in canonical OpenAPI snapshot.

This page is the customer-facing operation index generated from the checked-in OpenAPI snapshot. The running API's live OpenAPI document is canonical for exact request and response schemas, and the Skysay API Postman workspace syncs from it. Handwritten guides explain the product model: Integrations, customer applications, and post-call results.

Snapshot: Skysay API v0.1.0. This generated index includes only customer SDK operations; the live document publishes only operations a sky_ key can call.

Customer REST operations

MethodPathSummaryRequired scope
POST/mcpHosted MCP endpointSee the live OpenAPI operation
POST/mcp/openaiUse the OpenAI MCP connectorSee the live OpenAPI operation
POST/mcp/read-onlyUse the read-only MCP connectorSee the live OpenAPI operation
GET/v1/activation-stateGet live customer activation checklist and next actionSee the live OpenAPI operation
GET/v1/agent-catalogList runnable agent stack entriesSee the live OpenAPI operation
GET/v1/agent-endpointsList agent webhook/audio endpointsSee the live OpenAPI operation
POST/v1/agent-endpointsConnect an agentSee the live OpenAPI operation
DELETE/v1/agent-endpoints/{agent_endpoint_id}Delete a webhook endpoint (soft: stops every delivery)agents:write
PATCH/v1/agent-endpoints/{agent_endpoint_id}Change which events this endpoint receivesSee the live OpenAPI operation
POST/v1/agent-endpoints/{agent_endpoint_id}/pausePause webhook deliveries to this endpointSee the live OpenAPI operation
POST/v1/agent-endpoints/{agent_endpoint_id}/resumeResume a paused or auto-disabled webhook endpointSee the live OpenAPI operation
POST/v1/agent-endpoints/{agent_endpoint_id}/test-eventDispatch a signed test event through the real delivery pipelineSee the live OpenAPI operation
POST/v1/agent/onboarding/headless/paymentsApprove a wallet top-up with hosted checkout or a shared payment tokenwallet:write
GET/v1/agentsList first-class agentsSee the live OpenAPI operation
POST/v1/agentsCreate an external or hosted agentSee the live OpenAPI operation
DELETE/v1/agents/{agent_id}Delete one unused AI agentagents:write
GET/v1/agents/{agent_id}Get one agentagents:read
PATCH/v1/agents/{agent_id}Update one agentagents:write
POST/v1/agents/{agent_id}/browser-sessionsCreate an authenticated LiveKit browser-test session for one hosted agentagents:write, calls:write
POST/v1/agents/{agent_id}/browser-sessions/{session_id}/settleSettle one workspace browser-test reservationagents:write, calls:write
POST/v1/agents/{agent_id}/chat-turnsSend one text turn to a prompt-driven hosted agent that has no conversation flowagents:write
GET/v1/agents/{agent_id}/deletion-checkCheck dependencies before deleting one AI agentagents:read
POST/v1/agents/{agent_id}/duplicateDuplicate the latest saved AI agent configurationagents:write
GET/v1/agents/{agent_id}/handoffGet generated agent setup handoffSee the live OpenAPI operation
GET/v1/agents/{agent_id}/knowledge-basesList active knowledge bases attached to one hosted agentSee the live OpenAPI operation
PATCH/v1/agents/{agent_id}/knowledge-basesReplace the knowledge bases attached to one hosted agentSee the live OpenAPI operation
POST/v1/agents/{agent_id}/messagesSend one of an agent's published SMS templatessms:send, agents:read
GET/v1/agents/{agent_id}/post-call-extractionRead the optional advisory post-call extraction configurationagents:read
PATCH/v1/agents/{agent_id}/post-call-extractionConfigure or disable bounded advisory post-call extractionagents:write
GET/v1/agents/{agent_id}/simulation-suite-runs/{run_id}Fetch one run with a bounded page of attempt resultsagents:read
POST/v1/agents/{agent_id}/simulation-suite-runs/{run_id}/cancelStop the attempts of this run that have not startedagents:write
POST/v1/agents/{agent_id}/simulation-suite-runs/{run_id}/cases/{case_result_id}/evidenceLink an existing Talk or Phone session to this attempt as human evidenceagents:write
POST/v1/agents/{agent_id}/simulation-suite-runs/{run_id}/cases/{case_result_id}/save-as-regressionPromote one attempt into a permanent scenarioagents:write
POST/v1/agents/{agent_id}/simulation-suite-runs/{run_id}/rerun-failedQueue a child run over this run's failed casesagents:write
GET/v1/agents/{agent_id}/simulation-suite-runs/{run_id}/resultsRead one run's verdicts in a stable, versioned shapesimulation_suites:read
GET/v1/agents/{agent_id}/simulation-suitesList this agent's simulation suites with their latest healthagents:read
POST/v1/agents/{agent_id}/simulation-suitesCreate a simulation suite for this agentagents:write
DELETE/v1/agents/{agent_id}/simulation-suites/{suite_id}Delete a simulation suite that has never runagents:write
GET/v1/agents/{agent_id}/simulation-suites/{suite_id}Fetch one suite with its authored scenarios and bounded run historyagents:read
PATCH/v1/agents/{agent_id}/simulation-suites/{suite_id}Edit a suite under optimistic revision controlagents:write
POST/v1/agents/{agent_id}/simulation-suites/{suite_id}/duplicateCopy a suite's authored content into a new suiteagents:write
POST/v1/agents/{agent_id}/simulation-suites/{suite_id}/runsQueue a run of this suiteagents:write
GET/v1/agents/{agent_id}/variablesRead an agent's call variables, SMS templates and caller lookupagents:read
PUT/v1/agents/{agent_id}/variablesReplace an agent's call variables, SMS templates and caller lookupagents:write
GET/v1/agents/{agent_id}/voice-stackRead a hosted agent's safe STT, model, and TTS configurationagents:read
PATCH/v1/agents/{agent_id}/voice-stackValidate and update a hosted agent's STT, model, and TTS selectionsagents:write
GET/v1/agents/{agent_id}/workflowRead an agent's editable workflow draft and bounded published-version summaryagents:read
PATCH/v1/agents/{agent_id}/workflowUpdate the agent's workflow draftagents:write
POST/v1/agents/{agent_id}/workflowCreate the one editable workflow draft for a hosted agentagents:write
POST/v1/agents/{agent_id}/workflow/ai-editPropose a bounded AI edit to the agent's workflow draftagents:write
GET/v1/agents/{agent_id}/workflow/phone-pinRead this agent's current Phone pin statusagents:read
POST/v1/agents/{agent_id}/workflow/phone-pinArm Phone testing: pin one declared caller number to the workflowagents:write
POST/v1/agents/{agent_id}/workflow/phone-pin/disarmCancel this agent's active Phone pin earlyagents:write
POST/v1/agents/{agent_id}/workflow/publishPublish the current draft as a new immutable workflow versionagents:write
POST/v1/agents/{agent_id}/workflow/runsStart a Chat or Simulations test run of the agent's workflowagents:write
GET/v1/agents/{agent_id}/workflow/runs/{run_id}Fetch one test run and its turn evidenceagents:read
POST/v1/agents/{agent_id}/workflow/runs/{run_id}/turnsAdvance one turn of a Chat test runagents:write
POST/v1/agents/{agent_id}/workflow/simulationsRun a batch of scripted-persona Simulations to completionagents:write
POST/v1/agents/{agent_id}/workflow/versions/{version}/restoreRestore a published version's content into the editable draftagents:write
GET/v1/api-keysList scoped API keysSee the live OpenAPI operation
POST/v1/api-keysCreate a scoped API keySee the live OpenAPI operation
GET/v1/api-keys/scopesRead the grantable scope catalogue and bundlesSee the live OpenAPI operation
GET/v1/api-keys/{key_id}Get one API keySee the live OpenAPI operation
POST/v1/api-keys/{key_id}/revokeRevoke an API keySee the live OpenAPI operation
GET/v1/audio-environmentsList immutable audio-environment presetsaccount:read
GET/v1/audit-eventsList audit eventsSee the live OpenAPI operation
GET/v1/available-numbersList the exact numbers currently loaded for purchase. Each row is an availability snapshot, not a reservation: availability and price are rechecked with the carrier before the number is ordered, so a row past its expires_at can still be chosenSee the live OpenAPI operation
POST/v1/available-numbers/searchLoad exact numbers from the carrier for one country and number type, optionally narrowed by area code or region. A safe read: nothing is reserved, ordered or charged. A recent identical search is answered from the loaded snapshot or its cooldown instead of reading the carrier againSee the live OpenAPI operation
GET/v1/billing/invoicesList wallet top-ups with their receipt and invoice linksSee the live OpenAPI operation
GET/v1/billing/settingsRead wallet billing settings and auto-recharge readinessSee the live OpenAPI operation
PATCH/v1/billing/settingsUpdate safe auto-recharge settings without triggering a live chargeSee the live OpenAPI operation
POST/v1/billing/stripe/topup-sessionsCreate a Stripe checkout topup session when enabledSee the live OpenAPI operation
POST/v1/byo/sip-trunk/didsList owned DIDLogic or DIDWW numbers using a transient customer API key; discovery never changes routingSee the live OpenAPI operation
POST/v1/byo/sip-trunk/importConnect a selected customer-owned voice number after confirmation, or disconnect its local runtime access; carrier bills rental and trafficSee the live OpenAPI operation
POST/v1/byo/sip-trunk/setup-checksPreview one DIDWW routing change and issue a scoped confirmation token, or check existing DIDLogic SIP readinessSee the live OpenAPI operation
POST/v1/calendars/{connection_id}/appointments/{appointment_id}/resolveRecord account-verified outcome of an uncertain appointmentSee the live OpenAPI operation
POST/v1/calendars/{connection_id}/configureChoose calendar destination and booking policySee the live OpenAPI operation
POST/v1/calendars/{connection_id}/disableDisconnect a calendar and erase locally stored tokensSee the live OpenAPI operation
POST/v1/calendars/{connection_id}/selectionsFetch account calendar or event-type choicesSee the live OpenAPI operation
GET/v1/call-resultsRead one bounded factual post-call result groupcalls:read, recordings:read
GET/v1/callsList callsSee the live OpenAPI operation
POST/v1/callsPlace one policy-gated, idempotent outbound callSee the live OpenAPI operation
GET/v1/calls/statsAggregate call volume, talk time, and spend over one or more date windowscalls:read
GET/v1/calls/{call_id}Get one callcalls:read
GET/v1/calls/{call_id}/actions/{action_id}Read a business action and its receiptcalls:read, recordings:read
GET/v1/calls/{call_id}/artifactsList call artifactsSee the live OpenAPI operation
POST/v1/calls/{call_id}/cancelCancel an outbound call before originationSee the live OpenAPI operation
GET/v1/calls/{call_id}/eventsGet one call's full lifecycle event logcalls:read
POST/v1/calls/{call_id}/hangupAsk a live call to hang upcalls:write
GET/v1/calls/{call_id}/observabilityGet one call's observability bundleSee the live OpenAPI operation
GET/v1/calls/{call_id}/post-call-extractionRead an optional advisory extraction result for one callrecordings:read
DELETE/v1/calls/{call_id}/recordingDelete the active call recording metadata and audit the actionSee the live OpenAPI operation
GET/v1/calls/{call_id}/recordingGet call recording metadata and disclosure staterecordings:read
GET/v1/calls/{call_id}/recording/contentStream call recording audiorecordings:read
GET/v1/calls/{call_id}/summaryRead the AI summary of one callrecordings:read
GET/v1/calls/{call_id}/transcriptGet call transcript turnsrecordings:read
GET/v1/calls/{call_id}/transcript/streamGet transcript stream eventsrecordings:read
GET/v1/calls/{call_id}/transcript/translationsRead cached call translationsrecordings:read
POST/v1/calls/{call_id}/transcript/translationsRequest paid call translationrecordings:read, translations:write
GET/v1/calls/{call_id}/waveformGet waveform peaks for playbackSee the live OpenAPI operation
GET/v1/campaignsList campaigns (bounded page)calls:read
POST/v1/campaignsCreate a draft outbound campaigncalls:write
DELETE/v1/campaigns/{campaign_id}Delete a campaign that can no longer place callscalls:write
GET/v1/campaigns/{campaign_id}Read one campaign with its latest run and contact counterscalls:read
PATCH/v1/campaigns/{campaign_id}Edit a campaign's settingscalls:write
POST/v1/campaigns/{campaign_id}/cancelCancel a campaign: queued calls are cancelled, remaining contacts skippedcalls:write
GET/v1/campaigns/{campaign_id}/contactsList the latest run's contacts with status, disposition, attempts and next attempt (bounded page)calls:read
POST/v1/campaigns/{campaign_id}/duplicateCopy a campaign's configuration into a new draftcalls:write
GET/v1/campaigns/{campaign_id}/exportExport the latest run's results as CSVcalls:read
POST/v1/campaigns/{campaign_id}/launchAuthorize and start a draft campaigncalls:write
POST/v1/campaigns/{campaign_id}/pausePause a running campaigncalls:write
GET/v1/campaigns/{campaign_id}/resultsList the latest run's contacts with each contact's last-call business outcome (bounded page)calls:read
POST/v1/campaigns/{campaign_id}/resumeResume a paused campaigncalls:write
GET/v1/campaigns/{campaign_id}/reviewsThe campaign's review inbox: attempts whose workflow landed on a review_candidate outcome (bounded page)calls:read
GET/v1/campaigns/{campaign_id}/reviews/exportExport the review inbox (resolved by default) as CSVcalls:read
POST/v1/campaigns/{campaign_id}/reviews/{attempt_id}/resolveResolve one review candidate with a reviewer notecalls:write
POST/v1/campaigns/{campaign_id}/test-callPlace one test call for one contact of a draft campaigncalls:write
GET/v1/contact-listsList contact lists in the workspace (bounded page)calls:read
POST/v1/contact-listsCreate a contact list, optionally importing rows in the same requestcalls:write
DELETE/v1/contact-lists/{contact_list_id}Delete a contact listcalls:write
GET/v1/contact-lists/{contact_list_id}Read one contact listcalls:read
PATCH/v1/contact-lists/{contact_list_id}Rename a contact listcalls:write
GET/v1/contact-lists/{contact_list_id}/contactsList contacts in a list (bounded page in import order)calls:read
POST/v1/contact-lists/{contact_list_id}/contactsAppend rows to a contact listcalls:write
DELETE/v1/contact-lists/{contact_list_id}/contacts/{contact_id}Delete one contactcalls:write
PATCH/v1/contact-lists/{contact_list_id}/contacts/{contact_id}Edit one contactcalls:write
GET/v1/contact-lists/{contact_list_id}/exportDownload a contact list as CSVcalls:read
GET/v1/contactsFind contacts by number or name across every list (bounded page)calls:read
GET/v1/conversationsList SMS conversationsSee the live OpenAPI operation
GET/v1/conversations/{conversation_id}Get one SMS conversationSee the live OpenAPI operation
GET/v1/coverage-matrixList country coverage, messaging, simple onboarding terms, and safe activation speedSee the live OpenAPI operation
GET/v1/customer-onboardingList business onboarding recordsSee the live OpenAPI operation
POST/v1/customer-onboardingSubmit business onboarding detailsSee the live OpenAPI operation
GET/v1/do-not-callList the workspace do-not-call register (bounded page)calls:read
POST/v1/do-not-callAdd numbers to the do-not-call registercalls:write
DELETE/v1/do-not-call/{phone_number}Remove one number from the do-not-call registercalls:write
GET/v1/end-usersList end-user verification profilesSee the live OpenAPI operation
GET/v1/end-users/{end_user_profile_id}/registration-statusKYC + carrier identity + per-number registration status with derived customer status, and a headline naming how many number registrations Skysay has submitted to the carrier (empty when none is currently submitted, and also when the profile is rejected or needs more information)See the live OpenAPI operation
POST/v1/end-users/{end_user_profile_id}/submit-registrationSubmit the end-user registration (identity/address/proofs/verification) for review: every eligible step is queued, so resubmit once its prerequisites complete; identity is org-level and reusedSee the live OpenAPI operation
GET/v1/gateway-deploymentsList media gatewaysSee the live OpenAPI operation
POST/v1/gateway-deploymentsCreate a deploymentSee the live OpenAPI operation
PATCH/v1/gateway-deployments/{gateway_id}/outbound-execution-modeChoose whether this deployment dials its own outbound callsgateways:write
GET/v1/gateway-deployments/{gateway_id}/tokensList a gateway's machine tokens, masked to their prefixesSee the live OpenAPI operation
POST/v1/gateway-deployments/{gateway_id}/tokens/{gateway_token_id}/revokeRevoke one gateway machine token immediatelySee the live OpenAPI operation
GET/v1/healthRead shallow public API livenessSee the live OpenAPI operation
GET/v1/hosted-ai-credentialsList bounded metadata for hosted AI BYOK credentialsagents:read
POST/v1/hosted-ai-credentialsStore a write-only hosted AI provider credentialagents:write
POST/v1/hosted-ai-credentials/{credential_id}/revokeRevoke a hosted AI credentialagents:write
POST/v1/hosted-ai-credentials/{credential_id}/validateRun a non-billable validation probe for a hosted AI credentialagents:write
GET/v1/integrationsList bounded metadata for reusable customer Integrationsagents:read
POST/v1/integrationsCreate one reusable encrypted Integration and its first read actionagents:write
GET/v1/integrations/{integration_id}/actionsList typed actions on one reusable Integrationagents:read
POST/v1/integrations/{integration_id}/actionsAdd an allowlisted typed action to an Integrationagents:write
POST/v1/integrations/{integration_id}/disableDisable an Integration and remove its actions from the active worker allowlistagents:write
GET/v1/knowledge-basesList bounded active knowledge bases for the authenticated projectSee the live OpenAPI operation
POST/v1/knowledge-basesCreate a private knowledge base in the authenticated workspaceSee the live OpenAPI operation
DELETE/v1/knowledge-bases/{knowledge_base_id}Hide and asynchronously delete one knowledge base and its private sourcesSee the live OpenAPI operation
GET/v1/knowledge-bases/{knowledge_base_id}Read one knowledge baseSee the live OpenAPI operation
PATCH/v1/knowledge-bases/{knowledge_base_id}Rename one knowledge baseSee the live OpenAPI operation
GET/v1/knowledge-bases/{knowledge_base_id}/documentsList bounded document lifecycle state for one knowledge baseSee the live OpenAPI operation
POST/v1/knowledge-bases/{knowledge_base_id}/documentsDirect-upload one private TXT, Markdown, PDF, or DOCX sourceSee the live OpenAPI operation
POST/v1/knowledge-bases/{knowledge_base_id}/testTest one grounded answer against a private knowledge baseknowledge:read
DELETE/v1/knowledge-documents/{document_id}Hide and asynchronously delete one private source documentSee the live OpenAPI operation
POST/v1/knowledge-documents/{document_id}/replaceReplace one permanently unreadable private source documentknowledge:write
POST/v1/knowledge-documents/{document_id}/retryRetry a recoverable knowledge document ingestionSee the live OpenAPI operation
GET/v1/knowledge-documents/{document_id}/textRead a bounded page of normalized extracted text for one ready documentknowledge:read
POST/v1/kyc/sessionsStart a didit.me KYC (individual) or KYB (business) verification session for an end-user profileSee the live OpenAPI operation
GET/v1/kyc/sessions/{end_user_profile_id}Read KYC/KYB status and the extracted decision summary (no raw document URLs)See the live OpenAPI operation
GET/v1/messagesList SMS messagesSee the live OpenAPI operation
POST/v1/messagesSend a policy-gated outbound SMSSee the live OpenAPI operation
GET/v1/messages/{message_id}/delivery-eventsList SMS provider delivery events for one messageSee the live OpenAPI operation
GET/v1/messages/{message_id}/translationsRead cached message translationssms:read
POST/v1/messages/{message_id}/translationsRequest paid message translationsms:read, translations:write
GET/v1/number-catalogSearch the stored number catalog with customer setup/monthly prices, capabilities, and onboarding termsSee the live OpenAPI operation
GET/v1/number-requestsList managed phone-number requestsSee the live OpenAPI operation
POST/v1/number-requestsRequest a managed Skysay phone numberSee the live OpenAPI operation
GET/v1/number-requests/{request_id}Get one managed phone-number requestSee the live OpenAPI operation
PATCH/v1/number-requests/{request_id}Update managed phone-number request status or notesSee the live OpenAPI operation
GET/v1/numbersList phone numbersSee the live OpenAPI operation
GET/v1/numbers/requirementsResolve honest activation requirements for a country/number-type/profile-type (override > live did_groups flag > dataset prefix flag; requirement text only documents fields)See the live OpenAPI operation
GET/v1/numbers/{number_id}/activationCustomer-facing number activation state: instant | pending_verification | approved | needs_info | rejected with blocking itemsSee the live OpenAPI operation
POST/v1/numbers/{number_id}/detach-agentCompatibility alias for detaching a phone number from its agentnumbers:write
GET/v1/numbers/{number_id}/number-rulesCompatibility alias for phone-number Number rulesSee the live OpenAPI operation
PATCH/v1/numbers/{number_id}/number-rulesCompatibility alias for updating phone-number Number rulesSee the live OpenAPI operation
POST/v1/organizationsCreate a sandbox customer workspace when signup mode allows itSee the live OpenAPI operation
GET/v1/organizations/{organization_id}/capabilitiesRead the workspace's capabilities record, the selectable use-case profiles, and live usage against its capsonboarding:read
POST/v1/organizations/{organization_id}/capabilitiesRequest or change the workspace's capabilitiesonboarding:write
POST/v1/organizations/{organization_id}/capabilities/accept-policyRecord acceptance of the outbound policy without changing the capabilities selectiononboarding:write
POST/v1/organizations/{organization_id}/capabilities/destination-restrictionsSet optional workspace destination restrictionsonboarding:write
POST/v1/organizations/{organization_id}/capabilities/limit-requestsRequest higher limits without changing current permissions or buying a planonboarding:write
POST/v1/phone-numbers/{number_id}/detach-agentDetach a phone number from the agent that answers itnumbers:write
GET/v1/phone-numbers/{number_id}/number-rulesGet customer-facing Number rules for a phone numberSee the live OpenAPI operation
PATCH/v1/phone-numbers/{number_id}/number-rulesUpdate customer-facing Number rules for a phone numberSee the live OpenAPI operation
GET/v1/phone-serversList customer phone serversSee the live OpenAPI operation
POST/v1/phone-serversCreate a customer phone server for self-hosted call mediaSee the live OpenAPI operation
GET/v1/phone-servers/{phone_server_id}Get one customer phone serverSee the live OpenAPI operation
PATCH/v1/phone-servers/{phone_server_id}Update one customer phone serverSee the live OpenAPI operation
POST/v1/phone-servers/{phone_server_id}/testDry-run verify a customer phone server before assigning Number rulesSee the live OpenAPI operation
POST/v1/policies/authorize-outboundPreflight an outbound call or SMS against the pre-dial gates, persisting nothingSee the live OpenAPI operation
POST/v1/policies/evaluateEvaluate outbound policySee the live OpenAPI operation
GET/v1/pricing/catalogList pricing plansSee the live OpenAPI operation
POST/v1/pricing/estimateEstimate monthly platform cost on the public price book (public_launch_pricing_v1)See the live OpenAPI operation
GET/v1/regulatory-requirementsList supported country and number-type requirements with simple onboarding terms and cache metadataSee the live OpenAPI operation
GET/v1/self-hosted/install-planFetch a mode-specific self-hosted or customer-hosted gateway install planSee the live OpenAPI operation
POST/v1/sms-conversations/{conversation_id}/actionsPrepare an SMS-confirmed business actionagents:write, sms:read, sms:send
GET/v1/sms-conversations/{conversation_id}/actions/{action_id}Read a business action and its receiptsms:read, agents:read
POST/v1/sms-conversations/{conversation_id}/tool-readsRun a configured read tool in an SMS conversationagents:read, sms:read
GET/v1/trial-callsList historical and offline trial fixturesSee the live OpenAPI operation
POST/v1/trial-callsCreate an offline synthetic trial fixtureSee the live OpenAPI operation
GET/v1/usageGet usage summarySee the live OpenAPI operation
GET/v1/usage-recordsList usage recordsSee the live OpenAPI operation
GET/v1/usage/dailyGet daily usage summarySee the live OpenAPI operation
GET/v1/usage/monthlyGet monthly usage summarySee the live OpenAPI operation
GET/v1/verification/requirement-summariesResolve batched per-number-type verification deltas for one country and optional reusable profileSee the live OpenAPI operation
POST/v1/voice-previewsRender one bounded managed voice-selector previewagents:write
GET/v1/walletRead wallet balance and low-balance readiness against recurring and reserved costsSee the live OpenAPI operation
GET/v1/wallet/ledgerList the most recent org-level wallet ledger entries and linked usage/call refsSee the live OpenAPI operation
POST/v1/web-callsCreate a non-PSTN browser web-call test sessionSee the live OpenAPI operation
GET/v1/webhook-deliveriesList real webhook delivery attempts (status, attempts, last error, next retry)See the live OpenAPI operation
GET/v1/workspace-contextDiscover the bearer API key's own organization and bounded projectsaccount:read

Regeneration contract

The API repository generates /openapi.json from its canonical schema. This docs repository checks in a snapshot so builds and reviews do not depend on the network. One command, run in the API checkout of the commit this documentation describes, rewrites the snapshot, its coverage list and this page together:

PYTHONPATH=src:packages/skysay-common:packages/skysay-gateway \
  .venv/bin/python scripts/export_openapi.py \
  | python3 <docs>/scripts/refresh_openapi_snapshot.py --from - \
      --coverage docs/public-api-coverage.json

CI runs python3 scripts/generate_openapi_reference.py --check and fails when this page no longer matches the snapshot.

If the snapshot contains a new customer route, update the conceptual guide that explains its product model as well. Do not hand-copy request schemas into prose.