Skip to main content

Base URL


Endpoint


Authentication

Pass the per-number outbound webhook token via one of these headers:
or
Generate the token in the Partner Portal under the phone number’s Outbound Settings. Tokens are:
  • Scoped to a single phone number — the from_number in the request must match the number the token belongs to.
  • Shown once at generation time; only a secure hash is stored.
  • Revocable at any time from the portal.
Brute-force protection: after 10 failed auth attempts from the same IP within 5 minutes, that IP is blocked for 15 minutes.

Request body

Standard format

Phone numbers are auto-normalised to E.164 — a leading + is added if missing and non-digit characters are stripped.

GHL native format (auto-detected)

GoHighLevel workflows send a flat customData envelope. The integration gateway detects this automatically — no configuration needed.
Normalisation rules: A body is treated as GHL format when it has no top-level from_number but has a customData.from_number.

Dynamic variables

Any key in dynamic_variables (or GHL dynamicdata_<name>) becomes a {{key}} substitution in the agent’s system prompt and greeting message. Example: Agent system prompt:
Request:
Agent receives:
Keys not present in dynamic_variables are left as {{key}} — no error is thrown, but the agent will speak the literal placeholder.

Rate limiting

Rate limit headers are included on every response:
When the limit is exceeded:

Response

Success (200 OK)

trunk_mode is either "byo" (partner’s own Twilio/Telnyx trunk) or "shared" (Knotie’s shared trunk).

Error


Error codes

The call-related failures (NO_OUTBOUND_TRUNK, DISPATCH_FAILED, CALL_REJECTED, CALL_NO_ANSWER, SIP_TRUNK_FAILURE) all return HTTP 422 with a JSON body — rather than a 5xx status — so your integration always receives a machine-readable error you can act on.

Full example — curl

Expected response:

Compatibility note

The Knova response envelope is intentionally identical to the Retell outbound response shape. If you already handle Retell outbound call responses in your integration, you do not need to update your response-handling code when switching a number to a Knova agent.