Skip to content

API reference

Base URL

EnvironmentURL
Productionhttps://api.powsoo.com
Staginghttps://api-staging.powsoo.com

Authentication

Powsoo uses two complementary mechanisms — no bearer tokens in the embed snippet itself.

Origin allowlist — on POST /v1/voice-tokens and GET /v1/embed/:widgetId/config, the API validates the Origin request header against the widget’s allowed origins list. A mismatch returns 404 before any credentials are accessed. This is the primary access gate.

Session token — after minting a token, the API returns a sessionToken (sst_*). This authenticates the per-call SSE stream and result POST. Pass it via:

  • Header: x-powsoo-session-token: sst_...
  • Query param: ?token=sst_... (useful for EventSource which doesn’t support custom headers)

Common request headers

HeaderDescription
Content-Type: application/jsonRequired for POST requests with a body.
x-powsoo-session-tokenSession token for per-call endpoints.
x-request-idOptional client-supplied request ID for tracing. Echoed in the response.

Error format

All errors return JSON:

{
"code": "widget_unavailable",
"message": "Widget not found, origin not allowed, or voice platform not configured."
}

Error codes

CodeHTTPDescription
widget_unavailable404Catch-all — check API logs for the specific sub-reason.
origin_not_allowed404Origin header not in the widget’s allowed origins list.
widget_not_found404widget-id does not exist.
voice_platform_not_connected404No voice platform account connected to this widget.
retell_agent_not_configured404Widget has no Retell agent selected.
decryption_failed404API key decryption failed (key/secret mismatch).
retell_auth_failed502Retell rejected the decrypted API key.
plan_limit_exceeded402Monthly call cap reached.
invalid_session_token401Missing or invalid x-powsoo-session-token.
session_not_found404callId has no active session.

Endpoints

The full endpoint reference — including request/response schemas, code snippets, and error details — is auto-generated from the OpenAPI spec. Browse it in the Endpoints sidebar group below this page, or open the interactive Swagger UI: