How Orbit authenticates inbound events from HubSpot, Salesforce, Shopify, Calendly, Segment, Slack, Intercom, and the Nango umbrella — pre-Clerk receivers where the HMAC signature is the credential, fail-closed secrets, org-resolution recovery, and where verified events land.
When you connect a provider to Orbit — HubSpot, Salesforce, Shopify, Calendly, Segment, Slack, Intercom, or anything under the Nango umbrella — events travel inbound to Orbit as webhooks. Those deliveries reach Orbit before any session auth is checked, so a single question decides whether each one is processed: does its cryptographic signature verify against the secret for that connection? This page documents that shared pipeline so you know what to configure, what Orbit enforces, and what happens when something is wrong. For the CRM-specific mapping and transport guarantees, see the CRM integration model; for outcomes once an event is verified, see the CDP event model and Webhook delivery semantics.
1. Why inbound receivers mount before session auth
Orbit’s connector webhook endpoints are reachable without an Orbit account session. Interactive Orbit sessions (your dashboard login) are the wrong credential for a provider datacenter: HubSpot’s or Calendly’s servers will never hold one. Instead, the endpoint’s credential is the HMAC signature on each request — the provider signs the payload with a shared secret, and Orbit verifies it before touching the payload.This is the same authentication model as signing outbound webhooks to your own endpoints, just in the opposite direction: for inbound connector events the provider is the sender and Orbit is the receiving party. The check runs before anything touches tenant state, so an unsigned or mis-signed delivery is rejected with no side effects.One practical consequence: you complete the connect flow from within your Orbit account, but the inbound event path afterwards requires no session — the signature secret provisioned at connect time is all that matters.
2. Per-provider signature schemes, with the HubSpot v3 worked example
All schemes are symmetric HMAC over the raw request content, but the details differ per provider. Getting any piece wrong — the wrong field ordering, the wrong encoding, a proxy that re-serialized the JSON — produces a 401, so it helps to see one full example.HubSpot (v3). HubSpot’s header X-HubSpot-Signature-v3 carries a base64 digest of an HMAC-SHA256 over four concatenated inputs:
X-HubSpot-Signature-v3 = base64(HMAC-SHA256(client_secret, method + uri + body + timestamp))
method — the uppercase HTTP method (POST).
uri — the absolute URL you configured in your HubSpot app settings, exactly as HubSpot signed it; Orbit reconstructs this from the protocol and host headers on the incoming request.
body — the raw request bytes, not a re-parsed JSON object.
timestamp — the value of the X-HubSpot-Request-Timestamp header.
Orbit also enforces a 5-minute replay window on that timestamp and compares digests in constant time. The secret comes from the HubSpot app’s client secret; you register it once when you connect HubSpot to Orbit.Salesforce. A tenant-provisioned HMAC key rather than a provider-issued secret:
Because Orbit provisions this key for your tenant at connect time, you can rotate it without any provider-side coordination. The receiver accepts Salesforce Outbound Messages (SOAP envelopes translated to JSON by your Apex or Flow) as well as direct Apex callout or Flow HTTP actions — all three use the same signature over the same formula.Shopify. Shopify signs with a per-tenant HMAC over the raw body in the X-Shopify-Hmac-Sha256 header, base64-encoded.Calendly. Calendly’s header Calendly-Webhook-Signature carries two values, t=<unix_timestamp>,v1=<hex_digest>, where the digest is HMAC-SHA256 over t + "." + raw_body with a 3-minute replay window. The signing key is provisioned at connect time and stored against your tenant’s connection state, so the receiver resolves it per tenant on every delivery.Segment. A plain x-signature header carries an HMAC-SHA1 hex digest of the raw body, signed with the source secret you set up on the Segment side during connect.Slack, Intercom, and the Nango umbrella. Slack and Intercom receive their events through the shared Nango webhook receiver, as do a number of other providers Orbit connects through Nango (including HubSpot, Salesforce, Calendly, and Shopify lifecycle events when routed that way). The Nango receiver performs the same pre-auth HMAC check before processing auth (connection lifecycle) and sync (data refresh) events.The rule across all schemes: signature math runs over the raw body. Anything that re-serializes the payload (an intermediate proxy rewriting JSON whitespace, a body parser the request passed through) breaks verification. If a receiver returns 401 to your provider’s test delivery, check the raw-body path before anything else.
A receiver treats a missing secret as “receiver disabled,” not “signature optional.” When the required secret is unset — for example, a deployment-time operator hasn’t pasted the HubSpot client secret — the endpoint answers every delivery with 503 and logs the configuration gap until it’s fixed. A missing secret is not a reason to skip verification; it is a reason to reject.When a secret is present, any delivery whose signature does not verify is rejected with 401. Both failure modes close the gate, but the distinct status codes let operator tooling tell the difference between “we are misconfigured” (503) and “the sender sent a bad signature” (401).
The same fail-closed rule applies to every connector receiver. A 503 on a provider’s first test delivery means the connect flow — for that provider — hasn’t finished; it answers only once the secret is provisioned.
Verification answers “did the right provider send this?” The next question is “which Orbit organization owns this connection?” — because every receiver is multi-tenant and every event must land in exactly one tenant’s data.HubSpot portal lookup. HubSpot deliveries carry a portalId (the HubSpot account id). At connect time Orbit stamps a reverse map from portal id to tenant, so the receiver resolves the tenant with a single indexed lookup. For connections that predate the reverse map, a batched scan across provisioned tenants remains as the correctness floor; the scan never back-fills the reverse map (only the OAuth connect flow does).Calendly’s ?org= hint. When Calendly’s subscription was registered, the webhook URL captured your organization id as a query parameter (?org=<orgId>). Calendly preserves query strings on delivery, so the receiver can resolve the tenant from the URL itself instead of searching.Nango’s org-id recovery ladder. The Nango receiver handles auth and sync events for many providers, and each delivery names a connectionId. Resolution proceeds down a ladder:
Cached resolution. The first successful resolution for a connection is cached in memory, so later deliveries on the same connection resolve without any lookup or network round trip.
Legacy id match. The connectionId is looked up directly against organizations — for connections created before Nango Connect UI, the connection id is the org id.
End-user hint from the envelope. Orbit passes your organization id as Nango’s end_user.id when it creates the connection, and Nango echoes it back on the webhook envelope. The receiver tries that hint before any network call.
Live getConnection retry. If all the above fail, the receiver queries Nango for the connection record, reads its end-user id, and retries the organization lookup with that value.
A delivery that survives verification but resolves no tenant (an abandoned OAuth attempt, a since-deleted connection) is acknowledged without side effects so the provider stops retrying — dropping it entirely would only postpone the same outcome.
Once signature and tenant resolution both pass, events are written into your tenant’s environment — never a shared, cross-tenant table:
CRM events (HubSpot, Salesforce) mirror contacts, deals, and lifecycle changes into your Orbit contact book — creating, updating, or soft-deleting contact rows keyed on the provider’s external id.
Scheduling events (Calendly) match invitees to contacts by email or phone and persist a typed event row for triggers.
Commerce events (Shopify), profile events (Segment), and messaging events (Slack, Intercom) land in their corresponding tenant pipelines.
Every event also persists a deduplicated event row keyed on the provider’s event identifiers, so provider retries (HubSpot retries up to 10 times over 24 hours; Calendly for up to 24 hours on 5xx) are absorbed idempotently. Campaign and flow triggers read from these mirrored rows — see the CDP event model for how verified events become actionable within your org.
Segment — profile and audience events (x-signature HMAC-SHA1).
Slack — workspace events via the Nango receiver.
Intercom — conversation and contact events via the Nango receiver.
Nango umbrella — shared receiver for auth (connection lifecycle) and sync (data refresh) events across Nango-routed providers.
New receivers follow this same shape: mount pre-auth, verify HMAC over the raw body, fail closed on missing secrets, resolve the tenant, write typed rows, and dedupe deliveries.
Constant-time comparison. Signature comparison uses a constant-time digest compare, so response time never reveals how much of a forged digest was correct.
Raw-body capture before parsing. The raw request bytes are captured before any JSON parsing, and signature math runs against those exact bytes. Parsing happens only after verification passes.
Replay windows. Providers that timestamp their signatures (HubSpot’s 5 minutes, Calendly’s 3 minutes) have that window enforced against Orbit’s clock; a re-sent delivery with a stale timestamp is rejected like a bad signature.
Idempotent persistence. Every event row is keyed by the provider’s event identifiers and inserted with conflict-no-op semantics, so provider retry storms replay harmlessly.
Retry-friendly status codes. A transient internal failure returns a 5xx so the provider retries; a definitive rejection (bad signature, unconfigured receiver, unknown tenant) returns a 4xx or a clean acknowledgement so retries stop.
CRM integration model — sync directions, object mapping, and per-provider delivery guarantees for HubSpot and Salesforce.
Webhook delivery semantics — Orbit’s outbound event delivery, retries, and ordering (the mirror image of this page).
CDP event model — how verified inbound events become contact and event state in your organization.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Devotel Orbit Documentation","colors":{"primary":"#325FEC","light":"#6E8BF2","dark":"#1E3FB0"},"logo":{"light":"https://mintcdn.com/zeelaltd/MGUsS3FF5JAMebgK/logo/light.svg?fit=max\u0026auto=format\u0026n=MGUsS3FF5JAMebgK\u0026q=85\u0026s=379027fc60301d5269699b31297af81f","dark":"https://mintcdn.com/zeelaltd/MGUsS3FF5JAMebgK/logo/dark.svg?fit=max\u0026auto=format\u0026n=MGUsS3FF5JAMebgK\u0026q=85\u0026s=67a70e8b7c67a32ef24574aa908f98ae"},"favicon":"https://mintcdn.com/zeelaltd/MGUsS3FF5JAMebgK/favicon.svg?fit=max\u0026auto=format\u0026n=MGUsS3FF5JAMebgK\u0026q=85\u0026s=d92b46f00c590bc9435ef6eb4504b678","api":{"openapi":["openapi.yaml"],"mdx":{"server":"https://api.orbit.devotel.io"}},"navbar":{"links":[{"href":"https://orbit.devotel.io","label":"Dashboard"},{"href":"https://status.orbit.devotel.io","label":"Status"},{"href":"https://orbit.devotel.io/pricing","label":"Pricing"}],"primary":{"type":"button","label":"Sign Up","href":"https://orbit.devotel.io/en/signup"}},"footer":{"socials":{"twitter":"https://twitter.com/devotel","github":"https://github.com/devotel","linkedin":"https://www.linkedin.com/company/devotel"}},"search":{"prompt":"Search Orbit docs"},"seo":{"metatags":{"canonical":"https://docs.orbit.devotel.io"},"indexing":"all"},"integrations":{"posthog":{"apiKey":"phc_XtdzTPv9Crueb9iavWKvJv1W2ctvKVt4EMHHQJ01o57","apiHost":"https://us.i.posthog.com"}},"errors":{"404":{"redirect":false}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"zeelaltd","hasAudioNarration":false,"actualSubdomain":"zeelaltd","customDomains":["docs.orbit.devotel.io"],"gitSource":{"type":"github","owner":"dddfedddddd","repo":"devotel-cpaas","deployBranch":"main","contentDirectory":"apps/docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af59c5c043c55511fa5a065","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"API Reference","count":4532},{"language":"default","tag":"All Endpoints","count":4164},{"language":"default","tag":"Guides","count":1574},{"language":"default","tag":"Documentation","count":858},{"language":"default","tag":"Voice","count":577},{"language":"default","tag":"Reference","count":512},{"language":"default","tag":"Compliance","count":500},{"language":"default","tag":"Concepts","count":383},{"language":"default","tag":"Agents","count":328},{"language":"default","tag":"CDP","count":316}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"concepts/inbound-connector-webhook-auth-model","slug":"/concepts/inbound-connector-webhook-auth-model","pageMetadata":{"title":"Inbound connector webhook authentication model","description":"How Orbit authenticates inbound events from HubSpot, Salesforce, Shopify, Calendly, Segment, Slack, Intercom, and the Nango umbrella — pre-Clerk receivers where the HMAC signature is the credential, fail-closed secrets, org-resolution recovery, and where verified events land.","href":"/concepts/inbound-connector-webhook-auth-model"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"How Orbit authenticates inbound events from HubSpot, Salesforce, Shopify, Calendly, Segment, Slack, Intercom, and the Nango umbrella — pre-Clerk receivers where the HMAC signature is the credential, fail-closed secrets, org-resolution recovery, and where verified events land.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`1`,id:`inbound-connector-webhook-authentication-model`,children:`Inbound connector webhook authentication model`}),`\n`,_jsxs(_components.p,{children:[`When you connect a provider to Orbit — HubSpot, Salesforce, Shopify, Calendly, Segment, Slack, Intercom, or anything under the Nango umbrella — events travel inbound to Orbit as webhooks. Those deliveries reach Orbit `,_jsx(_components.strong,{children:`before any session auth is checked`}),`, so a single question decides whether each one is processed: does its cryptographic signature verify against the secret for that connection? This page documents that shared pipeline so you know what to configure, what Orbit enforces, and what happens when something is wrong. For the CRM-specific mapping and transport guarantees, see the `,_jsx(_components.a,{href:`/concepts/crm-integration-model`,children:`CRM integration model`}),`; for outcomes once an event is verified, see the `,_jsx(_components.a,{href:`/concepts/cdp-event-model`,children:`CDP event model`}),` and `,_jsx(_components.a,{href:`/concepts/webhook-delivery-semantics`,children:`Webhook delivery semantics`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`1-why-inbound-receivers-mount-before-session-auth`,children:`1. Why inbound receivers mount before session auth`}),`\n`,_jsxs(_components.p,{children:[`Orbit’s connector webhook endpoints are reachable `,_jsx(_components.strong,{children:`without an Orbit account session`}),`. Interactive Orbit sessions (your dashboard login) are the wrong credential for a provider datacenter: HubSpot’s or Calendly’s servers will never hold one. Instead, the endpoint’s credential is the `,_jsx(_components.strong,{children:`HMAC signature on each request`}),` — the provider signs the payload with a shared secret, and Orbit verifies it before touching the payload.`]}),`\n`,_jsx(_components.p,{children:`This is the same authentication model as signing outbound webhooks to your own endpoints, just in the opposite direction: for inbound connector events the provider is the sender and Orbit is the receiving party. The check runs before anything touches tenant state, so an unsigned or mis-signed delivery is rejected with no side effects.`}),`\n`,_jsx(_components.p,{children:`One practical consequence: you complete the connect flow from within your Orbit account, but the inbound event path afterwards requires no session — the signature secret provisioned at connect time is all that matters.`}),`\n`,_jsx(Heading,{level:`2`,id:`2-per-provider-signature-schemes-with-the-hubspot-v3-worked-example`,children:`2. Per-provider signature schemes, with the HubSpot v3 worked example`}),`\n`,_jsx(_components.p,{children:`All schemes are symmetric HMAC over the raw request content, but the details differ per provider. Getting any piece wrong — the wrong field ordering, the wrong encoding, a proxy that re-serialized the JSON — produces a 401, so it helps to see one full example.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`HubSpot (v3).`}),` HubSpot’s header `,_jsx(_components.code,{children:`X-HubSpot-Signature-v3`}),` carries a base64 digest of an HMAC-SHA256 over four concatenated inputs:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`X-HubSpot-Signature-v3 = base64(HMAC-SHA256(client_secret, method + uri + body + timestamp))`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`method`}),` — the uppercase HTTP method (`,_jsx(_components.code,{children:`POST`}),`).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`uri`}),` — the absolute URL you configured in your HubSpot app settings, exactly as HubSpot signed it; Orbit reconstructs this from the protocol and host headers on the incoming request.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`body`}),` — the `,_jsx(_components.strong,{children:`raw request bytes`}),`, not a re-parsed JSON object.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`timestamp`}),` — the value of the `,_jsx(_components.code,{children:`X-HubSpot-Request-Timestamp`}),` header.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Orbit also enforces a `,_jsx(_components.strong,{children:`5-minute replay window`}),` on that timestamp and compares digests in constant time. The secret comes from the HubSpot app’s client secret; you register it once when you connect HubSpot to Orbit.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Salesforce.`}),` A tenant-provisioned HMAC key rather than a provider-issued secret:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`X-Devotel-Sf-Signature = base64(HMAC-SHA256(hmac_secret, timestamp + \".\" + raw_body))`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`Because Orbit provisions this key for your tenant at connect time, you can rotate it without any provider-side coordination. The receiver accepts Salesforce Outbound Messages (SOAP envelopes translated to JSON by your Apex or Flow) as well as direct Apex callout or Flow HTTP actions — all three use the same signature over the same formula.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Shopify.`}),` Shopify signs with a per-tenant HMAC over the raw body in the `,_jsx(_components.code,{children:`X-Shopify-Hmac-Sha256`}),` header, base64-encoded.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Calendly.`}),` Calendly’s header `,_jsx(_components.code,{children:`Calendly-Webhook-Signature`}),` carries two values, `,_jsx(_components.code,{children:`t=\u003cunix_timestamp>,v1=\u003chex_digest>`}),`, where the digest is HMAC-SHA256 over `,_jsx(_components.code,{children:`t + \".\" + raw_body`}),` with a `,_jsx(_components.strong,{children:`3-minute replay window`}),`. The signing key is provisioned at connect time and stored against your tenant’s connection state, so the receiver resolves it per tenant on every delivery.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Segment.`}),` A plain `,_jsx(_components.code,{children:`x-signature`}),` header carries an HMAC-SHA1 hex digest of the raw body, signed with the source secret you set up on the Segment side during connect.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Slack, Intercom, and the Nango umbrella.`}),` Slack and Intercom receive their events through the shared `,_jsx(_components.strong,{children:`Nango webhook receiver`}),`, as do a number of other providers Orbit connects through Nango (including HubSpot, Salesforce, Calendly, and Shopify lifecycle events when routed that way). The Nango receiver performs the same pre-auth HMAC check before processing `,_jsx(_components.code,{children:`auth`}),` (connection lifecycle) and `,_jsx(_components.code,{children:`sync`}),` (data refresh) events.`]}),`\n`,_jsxs(_components.p,{children:[`The rule across all schemes: signature math runs over the `,_jsx(_components.strong,{children:`raw body`}),`. Anything that re-serializes the payload (an intermediate proxy rewriting JSON whitespace, a body parser the request passed through) breaks verification. If a receiver returns 401 to your provider’s test delivery, check the raw-body path before anything else.`]}),`\n`,_jsx(Heading,{level:`2`,id:`3-fail-closed-secret-posture`,children:`3. Fail-closed secret posture`}),`\n`,_jsxs(_components.p,{children:[`A receiver treats a missing secret as “receiver disabled,” not “signature optional.” When the required secret is unset — for example, a deployment-time operator hasn’t pasted the HubSpot client secret — the endpoint answers every delivery with `,_jsx(_components.strong,{children:`503`}),` and logs the configuration gap until it’s fixed. A missing secret is not a reason to skip verification; it is a reason to reject.`]}),`\n`,_jsxs(_components.p,{children:[`When a secret is present, any delivery whose signature does not verify is rejected with `,_jsx(_components.strong,{children:`401`}),`. Both failure modes close the gate, but the distinct status codes let operator tooling tell the difference between “we are misconfigured” (503) and “the sender sent a bad signature” (401).`]}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`The same fail-closed rule applies to every connector receiver. A 503 on a provider’s first test delivery means the connect flow — for that provider — hasn’t finished; it answers only once the secret is provisioned.`})}),`\n`,_jsx(Heading,{level:`2`,id:`4-org-resolution-from-a-delivery-to-a-tenant`,children:`4. Org resolution: from a delivery to a tenant`}),`\n`,_jsxs(_components.p,{children:[`Verification answers `,_jsx(_components.em,{children:`“did the right provider send this?”`}),` The next question is `,_jsx(_components.em,{children:`“which Orbit organization owns this connection?”`}),` — because every receiver is multi-tenant and every event must land in exactly one tenant’s data.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`HubSpot portal lookup.`}),` HubSpot deliveries carry a `,_jsx(_components.code,{children:`portalId`}),` (the HubSpot account id). At connect time Orbit stamps a reverse map from portal id to tenant, so the receiver resolves the tenant with a single indexed lookup. For connections that predate the reverse map, a batched scan across provisioned tenants remains as the correctness floor; the scan never back-fills the reverse map (only the OAuth connect flow does).`]}),`\n`,_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Calendly’s `,_jsx(_components.code,{children:`?org=`}),` hint.`]}),` When Calendly’s subscription was registered, the webhook URL captured your organization id as a query parameter (`,_jsx(_components.code,{children:`?org=\u003corgId>`}),`). Calendly preserves query strings on delivery, so the receiver can resolve the tenant from the URL itself instead of searching.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Nango’s org-id recovery ladder.`}),` The Nango receiver handles `,_jsx(_components.code,{children:`auth`}),` and `,_jsx(_components.code,{children:`sync`}),` events for many providers, and each delivery names a `,_jsx(_components.code,{children:`connectionId`}),`. Resolution proceeds down a ladder:`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Cached resolution.`}),` The first successful resolution for a connection is cached in memory, so later deliveries on the same connection resolve without any lookup or network round trip.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Legacy id match.`}),` The `,_jsx(_components.code,{children:`connectionId`}),` is looked up directly against organizations — for connections created before Nango Connect UI, the connection id `,_jsx(_components.em,{children:`is`}),` the org id.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`End-user hint from the envelope.`}),` Orbit passes your organization id as Nango’s `,_jsx(_components.code,{children:`end_user.id`}),` when it creates the connection, and Nango echoes it back on the webhook envelope. The receiver tries that hint before any network call.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Live `,_jsx(_components.code,{children:`getConnection`}),` retry.`]}),` If all the above fail, the receiver queries Nango for the connection record, reads its end-user id, and retries the organization lookup with that value.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`A delivery that survives verification but resolves no tenant (an abandoned OAuth attempt, a since-deleted connection) is acknowledged without side effects so the provider stops retrying — dropping it entirely would only postpone the same outcome.`}),`\n`,_jsx(Heading,{level:`2`,id:`5-where-verified-events-land`,children:`5. Where verified events land`}),`\n`,_jsxs(_components.p,{children:[`Once signature and tenant resolution both pass, events are written into `,_jsx(_components.strong,{children:`your tenant’s`}),` environment — never a shared, cross-tenant table:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`CRM events (HubSpot, Salesforce) mirror contacts, deals, and lifecycle changes into your Orbit contact book — creating, updating, or soft-deleting contact rows keyed on the provider’s external id.`}),`\n`,_jsx(_components.li,{children:`Scheduling events (Calendly) match invitees to contacts by email or phone and persist a typed event row for triggers.`}),`\n`,_jsx(_components.li,{children:`Commerce events (Shopify), profile events (Segment), and messaging events (Slack, Intercom) land in their corresponding tenant pipelines.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Every event also persists a `,_jsx(_components.strong,{children:`deduplicated event row`}),` keyed on the provider’s event identifiers, so provider retries (HubSpot retries up to 10 times over 24 hours; Calendly for up to 24 hours on 5xx) are absorbed idempotently. Campaign and flow triggers read from these mirrored rows — see the `,_jsx(_components.a,{href:`/concepts/cdp-event-model`,children:`CDP event model`}),` for how verified events become actionable within your org.`]}),`\n`,_jsx(Heading,{level:`2`,id:`6-which-providers-ship-receivers`,children:`6. Which providers ship receivers`}),`\n`,_jsx(_components.p,{children:`Orbit ships pre-auth inbound receivers for:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`HubSpot`}),` — CRM contact, deal, and ticket events (HMAC-SHA256 v3).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Salesforce`}),` — CRM object and task events via Outbound Messages, Apex callout, or Flow HTTP actions (tenant-provisioned HMAC).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Shopify`}),` — commerce events (`,_jsx(_components.code,{children:`X-Shopify-Hmac-Sha256`}),`).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Calendly`}),` — scheduling events (`,_jsx(_components.code,{children:`Calendly-Webhook-Signature`}),`, 3-minute window).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Segment`}),` — profile and audience events (`,_jsx(_components.code,{children:`x-signature`}),` HMAC-SHA1).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Slack`}),` — workspace events via the Nango receiver.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Intercom`}),` — conversation and contact events via the Nango receiver.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Nango umbrella`}),` — shared receiver for `,_jsx(_components.code,{children:`auth`}),` (connection lifecycle) and `,_jsx(_components.code,{children:`sync`}),` (data refresh) events across Nango-routed providers.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`New receivers follow this same shape: mount pre-auth, verify HMAC over the raw body, fail closed on missing secrets, resolve the tenant, write typed rows, and dedupe deliveries.`}),`\n`,_jsx(Heading,{level:`2`,id:`7-operational-guards-in-every-receiver`,children:`7. Operational guards in every receiver`}),`\n`,_jsx(_components.p,{children:`All receivers share the same hardening rules:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Constant-time comparison.`}),` Signature comparison uses a constant-time digest compare, so response time never reveals how much of a forged digest was correct.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Raw-body capture before parsing.`}),` The raw request bytes are captured before any JSON parsing, and signature math runs against those exact bytes. Parsing happens only after verification passes.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Replay windows.`}),` Providers that timestamp their signatures (HubSpot’s 5 minutes, Calendly’s 3 minutes) have that window enforced against Orbit’s clock; a re-sent delivery with a stale timestamp is rejected like a bad signature.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Idempotent persistence.`}),` Every event row is keyed by the provider’s event identifiers and inserted with conflict-no-op semantics, so provider retry storms replay harmlessly.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Retry-friendly status codes.`}),` A transient internal failure returns a 5xx so the provider retries; a definitive rejection (bad signature, unconfigured receiver, unknown tenant) returns a 4xx or a clean acknowledgement so retries stop.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`cross-links`,children:`Cross-links`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/concepts/crm-integration-model`,children:`CRM integration model`}),` — sync directions, object mapping, and per-provider delivery guarantees for HubSpot and Salesforce.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/concepts/webhook-delivery-semantics`,children:`Webhook delivery semantics`}),` — Orbit’s outbound event delivery, retries, and ordering (the mirror image of this page).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/concepts/cdp-event-model`,children:`CDP event model`}),` — how verified inbound events become contact and event state in your organization.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Inbound connector webhook authentication model","description":"How Orbit authenticates inbound events from HubSpot, Salesforce, Shopify, Calendly, Segment, Slack, Intercom, and the Nango umbrella — pre-Clerk receivers where the HMAC signature is the credential, fail-closed secrets, org-resolution recovery, and where verified events land.","href":"/concepts/inbound-connector-webhook-auth-model"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Inbound connector webhook authentication model","slug":"inbound-connector-webhook-authentication-model","depth":1,"children":[]},{"title":"1. Why inbound receivers mount before session auth","slug":"1-why-inbound-receivers-mount-before-session-auth","depth":2,"children":[]},{"title":"2. Per-provider signature schemes, with the HubSpot v3 worked example","slug":"2-per-provider-signature-schemes-with-the-hubspot-v3-worked-example","depth":2,"children":[]},{"title":"3. Fail-closed secret posture","slug":"3-fail-closed-secret-posture","depth":2,"children":[]},{"title":"4. Org resolution: from a delivery to a tenant","slug":"4-org-resolution-from-a-delivery-to-a-tenant","depth":2,"children":[]},{"title":"5. Where verified events land","slug":"5-where-verified-events-land","depth":2,"children":[]},{"title":"6. Which providers ship receivers","slug":"6-which-providers-ship-receivers","depth":2,"children":[]},{"title":"7. Operational guards in every receiver","slug":"7-operational-guards-in-every-receiver","depth":2,"children":[]},{"title":"Cross-links","slug":"cross-links","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"zeelaltd","siteName":"Devotel Orbit Documentation","title":"Inbound connector webhook authentication model - Devotel Orbit Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-24T06:39:00.056Z","originalFileLocation":"concepts/inbound-connector-webhook-auth-model.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"How Orbit authenticates inbound events from HubSpot, Salesforce, Shopify, Calendly, Segment, Slack, Intercom, and the Nango umbrella — pre-Clerk receivers where the HMAC signature is the credential, fail-closed secrets, org-resolution recovery, and where verified events land.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Devotel Orbit Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/zeelaltd/OZczcmQ6pFioqvBy/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/zeelaltd/OZczcmQ6pFioqvBy/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/zeelaltd/OZczcmQ6pFioqvBy/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/zeelaltd/OZczcmQ6pFioqvBy/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/zeelaltd/OZczcmQ6pFioqvBy/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/zeelaltd/OZczcmQ6pFioqvBy/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/zeelaltd/OZczcmQ6pFioqvBy/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/zeelaltd/OZczcmQ6pFioqvBy/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/zeelaltd/OZczcmQ6pFioqvBy/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Inbound connector webhook authentication model - Devotel Orbit Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"How Orbit authenticates inbound events from HubSpot, Salesforce, Shopify, Calendly, Segment, Slack, Intercom, and the Nango umbrella — pre-Clerk receivers where the HMAC signature is the credential, fail-closed secrets, org-resolution recovery, and where verified events land.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Devotel Orbit Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.orbit.devotel.io/concepts/inbound-connector-webhook-auth-model\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://zeelaltd.mintlify.site/_mintlify/api/og/v2?division=Webhooks+%26+Platform+Models\u0026amp;title=Inbound+connector+webhook+authentication+model\u0026amp;description=How+Orbit+authenticates+inbound+events+from+HubSpot%2C+Salesforce%2C+Shopify%2C+Calendly%2C+Segment%2C+Slack%2C+Intercom%2C+and+the+Nango+umbrella+%E2%80%94+pre-Clerk+receivers+where\u0026amp;theme=29bab8e0d7863b46c147a277\u0026amp;signature=7580bcf8d328f84a6479b672c62446e809b7989c6988468ab674c633faaff375\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Inbound connector webhook authentication model - Devotel Orbit Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"How Orbit authenticates inbound events from HubSpot, Salesforce, Shopify, Calendly, Segment, Slack, Intercom, and the Nango umbrella — pre-Clerk receivers where the HMAC signature is the credential, fail-closed secrets, org-resolution recovery, and where verified events land.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://zeelaltd.mintlify.site/_mintlify/api/og/v2?division=Webhooks+%26+Platform+Models\u0026amp;title=Inbound+connector+webhook+authentication+model\u0026amp;description=How+Orbit+authenticates+inbound+events+from+HubSpot%2C+Salesforce%2C+Shopify%2C+Calendly%2C+Segment%2C+Slack%2C+Intercom%2C+and+the+Nango+umbrella+%E2%80%94+pre-Clerk+receivers+where\u0026amp;theme=29bab8e0d7863b46c147a277\u0026amp;signature=7580bcf8d328f84a6479b672c62446e809b7989c6988468ab674c633faaff375\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/zeelaltd/OZczcmQ6pFioqvBy/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Devotel Orbit Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#325FEC\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.orbit.devotel.io/concepts/inbound-connector-webhook-auth-model\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/concepts/inbound-connector-webhook-auth-model.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.orbit.devotel.io/#organization\",\"name\":\"Devotel Orbit Documentation\",\"url\":\"https://docs.orbit.devotel.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/zeelaltd/MGUsS3FF5JAMebgK/logo/light.svg?fit=max\u0026auto=format\u0026n=MGUsS3FF5JAMebgK\u0026q=85\u0026s=379027fc60301d5269699b31297af81f\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.orbit.devotel.io#website\",\"name\":\"Devotel Orbit Documentation\",\"url\":\"https://docs.orbit.devotel.io\",\"publisher\":{\"@id\":\"https://docs.orbit.devotel.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.orbit.devotel.io/concepts/inbound-connector-webhook-auth-model#webpage\",\"url\":\"https://docs.orbit.devotel.io/concepts/inbound-connector-webhook-auth-model\",\"name\":\"Inbound connector webhook authentication model\",\"description\":\"How Orbit authenticates inbound events from HubSpot, Salesforce, Shopify, Calendly, Segment, Slack, Intercom, and the Nango umbrella — pre-Clerk receivers where the HMAC signature is the credential, fail-closed secrets, org-resolution recovery, and where verified events land.\",\"dateModified\":\"2026-09-24T06:39:00.056Z\",\"isPartOf\":{\"@id\":\"https://docs.orbit.devotel.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.orbit.devotel.io/concepts/inbound-connector-webhook-auth-model#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.orbit.devotel.io/concepts/inbound-connector-webhook-auth-model#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Concepts\",\"item\":\"https://docs.orbit.devotel.io/concepts\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Webhooks \u0026 Platform Models\",\"item\":\"https://docs.orbit.devotel.io/concepts/webhook-delivery-semantics\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Inbound connector webhook authentication model\",\"item\":\"https://docs.orbit.devotel.io/concepts/inbound-connector-webhook-auth-model\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.orbit.devotel.io/concepts/inbound-connector-webhook-auth-model#article\",\"headline\":\"Inbound connector webhook authentication model\",\"name\":\"Inbound connector webhook authentication model\",\"description\":\"How Orbit authenticates inbound events from HubSpot, Salesforce, Shopify, Calendly, Segment, Slack, Intercom, and the Nango umbrella — pre-Clerk receivers where the HMAC signature is the credential, fail-closed secrets, org-resolution recovery, and where verified events land.\",\"url\":\"https://docs.orbit.devotel.io/concepts/inbound-connector-webhook-auth-model\",\"mainEntityOfPage\":{\"@id\":\"https://docs.orbit.devotel.io/concepts/inbound-connector-webhook-auth-model#webpage\"},\"dateModified\":\"2026-09-24T06:39:00.056Z\",\"publisher\":{\"@id\":\"https://docs.orbit.devotel.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.orbit.devotel.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Devotel Orbit Documentation\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Devotel Orbit Documentation\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/concepts/inbound-connector-webhook-auth-model.md","siteName":"Devotel Orbit Documentation","nav":{"global":null,"tabs":[{"tab":"Documentation","groups":[{"group":"Getting Started","pages":[{"title":"Introduction to Orbit by Devotel","href":"/introduction"},{"title":"Quickstart: send your first SMS, call, or email","href":"/quickstart"},{"title":"Voice quickstart: place your first AI voice call","href":"/voice/quickstart"},{"title":"Outbound calls with an AI voice agent","href":"/voice/ai-agent-outbound-calls"},{"title":"Return an escalated call to the AI agent (handback)","href":"/voice/ai-agent-handback"},{"title":"Emergency Calling (911 / 112 / 999 / 000)","href":"/voice/emergency-calling"},{"title":"Hot-desking (shared-device sign-in)","href":"/voice/hot-desking"},{"title":"Per-user call forwarding (Find Me / Follow Me)","href":"/voice/call-forwarding"},{"title":"Browser softphone network requirements for corporate networks","href":"/voice/network-requirements"},{"title":"Hold and pause reason codes: tagging why agents hold a call or step away","href":"/voice/hold-reason-codes"},{"title":"IVR intents: NLU routing for inbound voice callers","href":"/voice/ivr-intents"},{"title":"Paging groups, ring groups \u0026 call park","href":"/voice/paging-ring-groups-call-park"},{"title":"Inbound queue SLA forecast: pre-suggest callback before breach","href":"/voice/sla-breach-forecast-callbacks"},{"title":"Inbound queue SLA forecast + virtual callback gate","href":"/voice/queue-sla-forecast-callback"},{"title":"Voice queue callbacks with SLA policies and scheduling","href":"/voice/callbacks-scheduling"},{"title":"Per-queue SLA breach alerting and escalation policies","href":"/voice/queue-sla-escalation-policies"},{"title":"Queue SLA breach: worked SDK samples","href":"/voice/queue-sla-breach-samples"},{"title":"Dialer dispositions: outbound call outcome routing","href":"/voice/dialer-dispositions"},{"title":"Wrap-up codes: disposition capture on every conversation","href":"/voice/wrap-up-codes"},{"title":"Call disposition tags: tenant-wide call labeling","href":"/voice/call-disposition-tags"},{"title":"Call QA scorecards: rubric grading, trends, and auto-scoring","href":"/voice/call-qa-scorecards"},{"title":"Voice Agent Quality Index (VAQI): latency, turn-taking, and barge-in","href":"/voice/vaqi"},{"title":"Searchable recording and transcript library (QA)","href":"/voice/recording-library"},{"title":"Secure payment capture: take card numbers in a live call","href":"/voice/secure-payment-capture"},{"title":"Attendant console: run a front desk from one screen","href":"/voice/attendant-console"},{"title":"Agent hand-raise: request assistance on a live call","href":"/voice/agent-hand-raise"},{"title":"Colleagues: live presence and click-to-call","href":"/voice/colleagues"},{"title":"BLF presence: live extension state over REST and SSE","href":"/voice/blf-presence"},{"title":"Voice extensions (SIP credentials)","href":"/voice/extensions"},{"title":"Voice conferences: create, manage, and end conference bridges","href":"/voice/conferences"},{"title":"Conference failure-attribution analytics","href":"/voice/conferences-failure-analytics"},{"title":"Live call transcription","href":"/voice/live-call-transcription"},{"title":"Live transcript streaming","href":"/voice/transcript-stream"},{"title":"Transcription operations","href":"/voice/transcription-operations"},{"title":"Bring your own speech credentials (STT/TTS)","href":"/guides/voice-byo-speech-credentials"},{"title":"Live-call speech failover on Classic and outbound calls","href":"/voice/live-call-stt-failover"},{"title":"Supervisor live speech analytics stream","href":"/guides/supervisor-live-speech-analytics-stream"},{"title":"Authenticate Orbit API requests with keys and tokens","href":"/authentication"},{"title":"Docs languages and translations","href":"/docs-languages"},{"title":"Docs contribution guide","href":"/docs-contribution-guide"},{"title":"Settings hub: map and posture","href":"/settings/overview"},{"title":"Org security posture operations: sessions, 2FA enforcement, support access, and PII redaction","href":"/guides/org-security-posture-operations"},{"title":"Settings: CSAT console walkthrough","href":"/guides/settings-csat-console"},{"title":"Settings → Integrations: OAuth and credential connections","href":"/guides/settings-integrations-console"},{"title":"Settings: Native Chat channel toggles","href":"/guides/settings-channels-native-chat"},{"title":"Settings: Telegram channel connection and toggles","href":"/guides/settings-channels-telegram"}]},{"group":"Channels","pages":[{"title":"Send and receive SMS messages worldwide","href":"/channels/sms"},{"title":"Send picture and multimedia messages over MMS","href":"/channels/mms"},{"title":"Send and receive WhatsApp Business messages","href":"/channels/whatsapp"},{"title":"Apple Messages for Business","href":"/channels/apple-messages"},{"title":"RCS Business Messaging: rich cards, carousels, branding","href":"/channels/rcs"},{"title":"Send Viber business and SMPP-tier messages","href":"/channels/viber"},{"title":"Send and receive Telegram bot messages","href":"/channels/telegram"},{"title":"USSD channel for 2G and feature-phone menu sessions","href":"/channels/ussd"},{"title":"Send and receive LINE messages through Orbit","href":"/channels/line"},{"title":"Send KakaoTalk Alimtalk and Friendtalk messages","href":"/channels/kakao"},{"title":"Send Zalo ZNS template messages in Vietnam","href":"/channels/zalo"},{"title":"Send WeChat Official Account template messages","href":"/channels/wechat"},{"title":"Send and receive Instagram Direct Messages","href":"/channels/instagram"},{"title":"Send and receive Facebook Messenger conversations","href":"/channels/messenger"},{"title":"Install Orbit into a Slack workspace via OAuth","href":"/channels/slack"},{"title":"Send transactional and marketing email with Orbit","href":"/channels/email"},{"title":"Reading the email message status ladder","href":"/guides/email-message-status-ladder"},{"title":"Send email through the SMTP relay","href":"/channels/email-smtp-relay"},{"title":"Programmable voice calls, SIP trunks, and IVR flows","href":"/channels/voice"},{"title":"STIR/SHAKEN attestation on Orbit voice","href":"/channels/voice/stir-shaken"},{"title":"Troubleshooting: SIP trunk down or calls failing","href":"/channels/voice/sip-trunks-troubleshooting"},{"title":"SIP trunk health and connectivity diagnostics","href":"/voice/sip-trunk-health-and-diagnostics"},{"title":"Video: rooms, embeds, recording, and broadcast","href":"/channels/video"},{"title":"Send and receive faxes on Orbit fax numbers","href":"/channels/fax"},{"title":"Mobile and web push notifications via APNs and FCM","href":"/channels/push"},{"title":"Issue Apple and Google Wallet passes","href":"/channels/wallet-passes"},{"title":"Native Chat setup and styling","href":"/guides/native-chat-widget-channel-config"},{"title":"Cross-channel delivery and engagement analytics","href":"/channels/analytics"}]},{"group":"Channels (Voice)","pages":[{"title":"Choose the right voice product","href":"/guides/voice-choose-product"},{"title":"Voice calendars","href":"/guides/voice-calendars"},{"title":"Voice teams: create, staff, and route to them","href":"/guides/voice-teams"},{"title":"Agent first-week onboarding journey","href":"/guides/agent-first-week-onboarding-journey"},{"title":"Pull a packet capture (pcap) for a voice call","href":"/guides/voice-packet-capture"}]},{"group":"AI Agents","pages":[{"title":"AI agents on Orbit: build, deploy, and monitor","href":"/agents/overview"},{"title":"Your first AI agent in 20 minutes","href":"/agents/getting-started"},{"title":"The Agents workspace map","href":"/guides/agents-hub-overview"},{"title":"Introduction to voice AI agents","href":"/agents/intro-to-voice-ai-agents"},{"title":"Cross-channel agent memory plane","href":"/agents/memory-plane"},{"title":"Agent memory administration","href":"/agents/memory-administration"},{"title":"Creating AI agents: prompts, tools, and deployment","href":"/agents/creating-agents"},{"title":"Config assistant: propose changes in plain language","href":"/agents/config-assistant"},{"title":"Prompt Template Library: browse, fork, and seed a new agent","href":"/agents/prompt-templates"},{"title":"Conversation flows: route every agent turn through a versioned node graph","href":"/agents/conversation-flows"},{"title":"Agent squads: route inbound to the right specialist","href":"/agents/squads"},{"title":"Ambient agents: proactive outreach from segments","href":"/agents/ambient-outreach"},{"title":"Ambient sound bed for voice agents","href":"/agents/ambient-sound-bed"},{"title":"Agent model selection: LLM resolution order","href":"/agents/model-selection"},{"title":"Fine-tuning: dataset export to deployed custom model","href":"/agents/fine-tuning"},{"title":"Agent handoff targets: allowlist downstream routing","href":"/agents/handoff-targets"},{"title":"Human-in-the-loop oversight","href":"/agents/human-in-the-loop-oversight"},{"title":"Live conversation monitor","href":"/agents/live-monitor"},{"title":"Agent cost controls: run, token, and iteration limits","href":"/agents/cost-controls"},{"title":"Automation Opportunity Miner: what the surface shows and what scaffold creates","href":"/agents/automation-opportunities"},{"title":"Guardrail effectiveness monitoring: read firing rates and tune policies","href":"/agents/guardrail-effectiveness"},{"title":"Agent governance policies: guardrails, budget caps, model allowlists, approval gates","href":"/agents/agent-governance-policies"},{"title":"Sensitive words guardrail: redact operator-defined terms from agent output","href":"/agents/sensitive-words-guardrail"},{"title":"Per-turn grounding citations: audit what an agent grounded a reply on","href":"/agents/grounding-citations"},{"title":"Inspect a knowledge document's chunks","href":"/agents/kb-document-inspector"},{"title":"Agent versions: snapshot, stage, and roll back prompt configurations","href":"/agents/agent-versions"},{"title":"Persona-simulation harness — live callers vs scripted regression mode","href":"/agents/persona-simulation"},{"title":"Simulation \u0026 Regression Eval Suite","href":"/agents/simulation-eval-suite"},{"title":"Tool-call trajectory grading","href":"/agents/tool-call-trajectory-grading"},{"title":"Adversarial red-team testing: grade your agent against attack probes","href":"/agents/red-team"},{"title":"Computer-Use Browser Tools","href":"/agents/computer-use"},{"title":"Operate governed computer-use agents from the console","href":"/guides/agent-computer-use-console"},{"title":"Read a voice-eval run in the dashboard","href":"/agents/voice-eval-runs"},{"title":"Continuous production-call eval sampling for AI voice agents","href":"/agents/continuous-production-evals"},{"title":"A2A federation: task remote agents across peers","href":"/agents/a2a-federation"},{"title":"Set up A2A federation between tenants","href":"/guides/a2a-federation-setup"},{"title":"A2A push notifications — subscribe to task lifecycle updates","href":"/guides/a2a-push-notifications"},{"title":"Bridge native-chat conversations to an A2A agent","href":"/guides/native-chat-a2a-agent-bridge"},{"title":"Authorization mandates: scoped, revocable agent authority","href":"/agents/authorization-mandates"},{"title":"The complete_checkout tool for end-to-end agentic checkout","href":"/guides/agents-complete-checkout-tool"},{"title":"Agent marketplace: pre-built AI agent templates","href":"/agents/marketplace"},{"title":"Choose and prepare an agent marketplace template","href":"/guides/ai-agent-marketplace-buyer-guide"},{"title":"Outbound country coverage matrix for agents","href":"/guides/agent-outbound-country-coverage"}]},{"group":"Campaigns","pages":[{"title":"Campaigns hub","href":"/campaigns/overview"},{"title":"Cross-schedule planner: operator walkthrough","href":"/guides/cross-schedule-planner-walkthrough"},{"title":"Campaign journeys: build, validate, simulate, and launch","href":"/campaigns/journey"},{"title":"Inspect a campaign journey simulation step by step","href":"/guides/campaign-journey-simulation-inspection"},{"title":"Build a blast or drip campaign with the create wizard","href":"/guides/campaign-create-wizard"},{"title":"Campaign cost controls walkthrough","href":"/guides/campaign-cost-controls-walkthrough"},{"title":"Generate a campaign draft from a brief","href":"/guides/campaigns-from-brief"},{"title":"Build, simulate, and launch a campaign journey (canvas, nodes, goals)","href":"/guides/campaign-journey-builder"},{"title":"Consume journey webhook node calls","href":"/guides/journey-webhook-node-consumer"},{"title":"Send a campaign end-to-end: draft, audience, dry-run, launch, analytics","href":"/guides/campaign-end-to-end"},{"title":"A/B test a campaign: variants, splits, and picking a winner","href":"/guides/campaign-ab-testing"},{"title":"Smart-send timing playbook: per-contact schedules, send-time experiments, and next-best-channel","href":"/guides/campaign-smart-send-timing-playbook"},{"title":"Outbound campaigns canonical entry","href":"/guides/outbound-campaigns-canonical-entry"},{"title":"Peak-season capacity rehearsal: rate limits, pacing, caps, and the launch-day runbook","href":"/guides/peak-season-capacity-rehearsal"}]},{"group":"Flows","pages":[{"title":"Visual workflow automation with Orbit Flows","href":"/flows/overview"},{"title":"Flow Builder: drag-and-drop workflow designer","href":"/flows/builder"},{"title":"Flow starter templates: clone a working flow into your tenant","href":"/flows/templates"},{"title":"Flow Executions: debug and audit individual flow runs","href":"/flows/executions"},{"title":"Flow templates catalog: the 12 built-in starter flows","href":"/guides/flow-templates-catalog"},{"title":"Build a 7-day multichannel welcome series","href":"/guides/welcome-series-multichannel"},{"title":"Reading flow analytics: funnel drop-off and A/B results","href":"/guides/flows-analytics-reading"}]},{"group":"Numbers \u0026 Verify","pages":[{"title":"Phone numbers: search, buy, and provision inventory","href":"/numbers/overview"},{"title":"Buy, bulk, and orders: the number-buying walkthrough","href":"/numbers/buy-and-provision-operations"},{"title":"Number assignments, applications, and routing","href":"/numbers/assignments-and-applications"},{"title":"Number inventory export and low-stock alerts","href":"/numbers/inventory-export"},{"title":"Country capabilities: check number stock before search","href":"/numbers/country-capabilities"},{"title":"Regulatory preview: country requirements before purchase","href":"/numbers/regulatory-preview"},{"title":"Regulated number-purchase compliance packets","href":"/guides/regulated-number-purchase-packets"},{"title":"Number lifecycle: renew, release, and reassign numbers","href":"/numbers/lifecycle"},{"title":"Number porting: LOA upload, FOC scheduling, status timeline, and bulk CSV","href":"/numbers/porting"},{"title":"E911 emergency address registration for Orbit numbers","href":"/numbers/emergency-address"},{"title":"CNAM and caller ID branding for outbound Orbit calls","href":"/numbers/cnam"},{"title":"Number health, warming, and carrier reputation tracking","href":"/numbers/health"},{"title":"Number Lookup: validate and enrich phone numbers","href":"/numbers/lookup"},{"title":"Number masking: keep two parties' real numbers private","href":"/numbers/masking"},{"title":"Numbers console: pools, porting, subscriptions, and validation","href":"/guides/numbers-console"},{"title":"Numbers cookbook","href":"/guides/numbers-cookbook"},{"title":"Number Intelligence dashboard: console, metering, and spend caps","href":"/guides/number-intelligence-dashboard"},{"title":"Number health diagnostics console walkthrough","href":"/guides/number-health-diagnostics"},{"title":"Number backorder waitlist: get notified when an exhausted area code restocks","href":"/guides/number-backorder-waitlist"},{"title":"Provision and operate eSIM / IoT (M2M) SIMs","href":"/guides/connectivity-sim-lifecycle"},{"title":"Resell travel eSIMs to your customers","href":"/guides/esim-reseller-surface"},{"title":"Orbit Verify: OTP auth for SMS, WhatsApp, email, and voice","href":"/verify/overview"},{"title":"Verification profiles: templates, expiry, attempts, rate limits, webhooks","href":"/verify/configuration"},{"title":"MFA factor lifecycle: TOTP, passkey, push, and backup-code enrollment, verification, and lockout","href":"/verify/factor-lifecycle"},{"title":"OTP approvals: two-person sign-off for templates and resend bursts","href":"/verify/otp-approvals"},{"title":"Add SMS + TOTP 2FA to your app's login flow","href":"/guides/verify-2fa-login-recipe"},{"title":"Verify console: fraud gate, fraud score, and fallback forensics","href":"/guides/verify-console"}]},{"group":"Concepts","pages":[{"group":"Concepts overview","pages":[{"title":"Concepts hub","href":"/concepts/index"},{"title":"Dashboard map — the top navigation and where each hub lands","href":"/concepts/dashboard-map"},{"title":"Concepts overview","href":"/concepts/overview"},{"title":"UCaaS, CCaaS, and CPaaS","href":"/concepts/ucaas-ccaas-cpaas"},{"title":"Data model: envelope, identifiers, idempotency, pagination","href":"/concepts/data-model"},{"title":"API request guard pipeline: the ordered guard chain every request walks","href":"/concepts/api-request-guard-pipeline"},{"title":"The developer GraphQL shaped-read model","href":"/concepts/graphql-shaped-read-model"},{"title":"Terraform model — Orbit resources as infrastructure","href":"/concepts/terraform-provider-model"},{"title":"Operator observability: dashboards, logs, and audit — what to look at when","href":"/concepts/operator-observability-map"},{"title":"The stats surface map: dashboard workbench vs the analytics pipeline","href":"/concepts/observability-stats-surface"},{"title":"Sms overview kpi picker model","href":"/concepts/sms-overview-kpi-picker-model"},{"title":"Live tail streaming model: what the live request-log stream guarantees","href":"/concepts/live-tail-streaming-model"},{"title":"The SLA attestation and report backfill model","href":"/concepts/sla-attestation-model"},{"title":"The org-scoped status model: one incident feed, three waypoints","href":"/concepts/org-scoped-status-model"},{"title":"Public feedback and trust surfaces: idea board, community, help center, sub-processor notices","href":"/concepts/public-feedback-and-trust-surfaces"},{"title":"Sandbox, test mode, and the provisioning model","href":"/concepts/provisioning-and-test-mode"},{"title":"Sandbox model: the boundary, the synthetic providers, and promotion","href":"/concepts/sandbox-model"},{"title":"The channel test-account model: per-channel shared ladders","href":"/concepts/channel-test-account-model"},{"title":"Telegram bot dispatch and demo-account model","href":"/concepts/telegram-bot-model"},{"title":"The Sync real-time shared-state model","href":"/concepts/sync-realtime-state-model"},{"title":"Sync: WebSocket claim, spin-down, and the flush window","href":"/concepts/sync-ws-claim-and-flush-window"}]},{"group":"Messaging \u0026 Routing","pages":[{"title":"Unified termination routing","href":"/concepts/unified-termination-routing"},{"title":"The MT termination model: how outbound calls and messages leave Orbit","href":"/concepts/mt-termination-model"},{"title":"The five fallback planes: one map and how to pick one","href":"/concepts/fallback-and-cascade-planes"},{"title":"Fallback configuration worked samples: notify waterfall and cascade policy","href":"/concepts/fallback-endpoint-worked-samples"},{"title":"Choosing a sender construct — pools vs services vs inline senders","href":"/concepts/sender-identity-decision-model"},{"title":"How routing picks a sender — and where a reply lands","href":"/concepts/sender-and-routing"},{"title":"Least-cost routing (LCR) policy","href":"/concepts/least-cost-routing"},{"title":"Route preview — the pre-send what-if estimator","href":"/concepts/route-preview-model"},{"title":"TelQ live-number testing model — the sender-ID deliverability probe","href":"/concepts/telq-live-number-testing-model"},{"title":"BYO SMPP carrier lifecycle","href":"/concepts/byo-carrier-lifecycle"},{"title":"Sender resolution — which sender an outbound message goes out from","href":"/concepts/sender-resolution"},{"title":"Sender pool selection — how a pool picks one sender and stays healthy","href":"/concepts/sender-pool-selection-model"},{"title":"Number Lookup model — which data package answers which question","href":"/concepts/number-lookup-model"},{"title":"Line type and reachability classification model","href":"/concepts/line-type-and-reachability"},{"title":"The E.164 phone number format","href":"/concepts/e164-format"},{"title":"Sender identity classification model","href":"/concepts/sender-identity-classification-model"},{"title":"Toll-Free Verification and RespOrg lifecycle","href":"/concepts/toll-free-verification-resporg"},{"title":"Per-contact channel optimization: engagement-ranked dispatch","href":"/concepts/channel-optimization-model"},{"title":"Messaging services — one named bundle of sending defaults","href":"/concepts/messaging-services-model"},{"title":"Message status transition rules: the DAG every consumer must agree on","href":"/concepts/message-status-dag"},{"title":"The single message-status map: four owners, one answer","href":"/concepts/message-status-map"},{"title":"DLR and MO gateway pipeline","href":"/concepts/dlr-and-mo-pipeline"},{"title":"Inbound email parse pipeline","href":"/concepts/inbound-email-parse-model"},{"title":"Fallback on terminal DLR: per-request auto-escalation after delivery fails","href":"/concepts/multi-channel-dlr-fallback"},{"title":"The push channel model: device registry, fan-out, delivery, and VoIP call push","href":"/concepts/push-channel-model"},{"title":"The in-app channel model: pull delivery, two render classes, segment targeting, and engagement receipts","href":"/concepts/in-app-channel-model"},{"title":"The Web Chat delivery model: the owned loopback channel, zero carrier hops, persist-then-poll","href":"/concepts/web-chat-delivery-model"},{"title":"Push delivery versus inbox pull: choosing a delivery surface","href":"/concepts/push-delivery-vs-inbox-pull"},{"title":"Inbound message routing","href":"/concepts/inbound-message-routing"},{"title":"Keyword auto-reply and opt-out: the matching model","href":"/concepts/keyword-rules-model"},{"title":"Wording regions: what Orbit injects into your outbound copy","href":"/concepts/wording-templates-model"},{"title":"Social listening: mentions, queues, and supervisor controls","href":"/concepts/social-listening-model"},{"title":"Canned responses and macros — the reply library model","href":"/concepts/canned-responses-macros-model"},{"title":"Inbound message resolution","href":"/concepts/inbound-message-resolution"},{"title":"Inbound media threat scan and quarantine model","href":"/concepts/inbound-media-threat-scan-model"},{"title":"Inbound AI enrichment: detect language + auto-translate","href":"/concepts/inbound-ai-enrichment"},{"title":"Inbound attachment threat scan","href":"/concepts/inbound-attachment-threat-scan"},{"title":"The media attach pipeline: upload, scan, and per-channel delivery","href":"/concepts/media-attach-pipeline-model"},{"title":"Cross-channel fallback: the ordered chain that retries a failed send on the next channel","href":"/concepts/cross-channel-fallback"},{"title":"RCS capability check and SMS fallback: deciding whether a recipient gets rich content","href":"/concepts/rcs-fallback-and-capability"},{"title":"RCS brand and bot approval lifecycle","href":"/concepts/rcs-brand-lifecycle"},{"title":"RCS billing and metering model: what an RCS message costs, when the charge lands, and how to read it back","href":"/concepts/rcs-billing-and-metering-model"},{"title":"Channel capability coverage matrix: which channels do what, and which slot into your fallback chain","href":"/concepts/channel-capability-coverage-matrix"},{"title":"Regional OTT channel model: follower-gated delivery in KakaoTalk, Zalo, WeChat, and LINE","href":"/concepts/regional-ott-channel-model"},{"title":"Cascade failover policy and one logical message ID across legs","href":"/concepts/message-cascade-groups"},{"title":"Notify cascade cost model: per-hop price bounds and the cumulative waterfall cap","href":"/concepts/notify-cascade-cost-model"},{"title":"What omnichannel means on Orbit","href":"/concepts/what-is-omnichannel"},{"title":"Message envelope model: the canonical envelope, per-channel overrides, and the channel_chain declaration","href":"/concepts/message-envelope-model"},{"title":"Messaging windows and off-window sends: Meta DM, WhatsApp, and the no-window channels","href":"/concepts/messaging-window-model"},{"title":"Group messaging versus labeling — group flow, thread, claim, and label disambiguated","href":"/concepts/group-messaging-model"},{"title":"The routing-claim election lifecycle — destination side of a routed conversation","href":"/concepts/routing-claim-election-model"},{"title":"Batch-send model — persist-then-attempt per-recipient pipeline","href":"/concepts/batch-send-model"},{"title":"Outbound route quality and circuit breakers","href":"/concepts/outbound-route-quality-and-circuit-breakers"},{"title":"Message priority and traffic lanes: keep OTP traffic ahead of campaign bursts","href":"/concepts/message-priority-traffic-lanes"},{"title":"Outbound send-pacing architecture: how the four rate controls compose","href":"/concepts/outbound-pacing-architecture-model"},{"title":"SMPP edge model","href":"/concepts/smpp-edge-model"},{"title":"Viber termination model","href":"/concepts/viber-termination-model"},{"title":"SMTP relay ingress model","href":"/concepts/smtp-relay-ingress-model"},{"title":"Send-side DLR model: the canonical vocabulary and absorbed-traffic receipts","href":"/concepts/send-side-dlr-model"},{"title":"The DLR model: two planes, one vocabulary","href":"/concepts/dlr-model-two-planes"},{"title":"The per-provider DLR webhook fleet and the shared status pipeline","href":"/concepts/dlr-provider-webhook-fleet"},{"title":"The per-message route-trace timeline","href":"/concepts/message-route-trace"},{"title":"Message send request lifecycle: one send from POST to provider","href":"/concepts/message-send-request-lifecycle"},{"title":"The three success statuses: delivered vs submitted_no_receipt vs sent","href":"/concepts/submitted-vs-delivered-three-successes"},{"title":"SMS segments and encoding: why one character can double the cost","href":"/concepts/sms-segments-and-encoding"},{"title":"MMS composition model","href":"/concepts/mms-composition-model"},{"title":"Proxy session (number masking) model","href":"/concepts/proxy-session-model"},{"title":"Fax: delivery \u0026 inbound-routing model","href":"/concepts/fax-delivery-model"},{"title":"Messaging data residency","href":"/concepts/messaging-data-residency"},{"title":"Number rental and your wallet: renewal, suspend, and prevent-default posture","href":"/concepts/billing-and-numbers-renewal-model"},{"title":"WhatsApp conversation cost attribution and optimization model","href":"/concepts/whatsapp-cost-attribution-model"}]},{"group":"Voice \u0026 Telephony","pages":[{"title":"Voice call lifecycle: initiated to completed, and the states in between","href":"/concepts/voice-call-lifecycle"},{"title":"Browser softphone: the client-side call lifecycle","href":"/concepts/softphone-client-lifecycle"},{"title":"The voice-broadcast model — one-to-many voice calls over the campaigns backbone","href":"/concepts/voice-broadcast-model"},{"title":"Inbound voice routing","href":"/concepts/inbound-voice-routing"},{"title":"Inbound voice routing: why the tables are shared","href":"/concepts/inbound-voice-routing-shared-catalog"},{"title":"IVR flow model and simulator","href":"/concepts/ivr-flow-model"},{"title":"Hunt and ring topologies: ring groups, paging, and find-me/follow-me","href":"/concepts/hunt-and-ring-topologies"},{"title":"The STIR/SHAKEN attestation model","href":"/concepts/stir-shaken-attestation-model"},{"title":"The PASSporT token model","href":"/concepts/passport-token-model"},{"title":"ANS Trust Card and trust registry","href":"/concepts/ans-trust-card-registry"},{"title":"Jambonz softswitch model","href":"/concepts/jambonz-softswitch"},{"title":"Jambonz verb extensions in Devotel Orbit: what the platform layers on","href":"/concepts/jambonz-extension-verbs"},{"title":"SIP credential lifecycle","href":"/concepts/sip-credential-lifecycle"},{"title":"SIP digest verification model","href":"/concepts/sip-digest-verification-model"},{"title":"Extension identity: one user endpoint spanning voice, SMS, and appearance","href":"/concepts/extension-identity-model"},{"title":"The voicemail and MWI (Message-Waiting Indicator) model","href":"/concepts/voicemail-mwi-model"},{"title":"The ACD queue model: presence, skills, dispatch, and overflow","href":"/concepts/acd-queue-model"},{"title":"Disposition and ACW model: reason codes, wrap-up timers, callbacks, suggestions, and analytics","href":"/concepts/disposition-and-acw-model"},{"title":"Agent distress alert model: the panic button, its fail-open sequence, and the audit chain","href":"/concepts/agent-distress-alert-model"},{"title":"The voice supervisor plane: monitor, whisper, takeover, and announce","href":"/concepts/voice-supervisor-plane-model"},{"title":"Call park and the lobby: the slot aliasing model","href":"/concepts/voice-call-park-lobby"},{"title":"Call flip and call pickup: the handoff-token and ringing-registry models","href":"/concepts/call-flip-and-pickup-model"},{"title":"Voice conference model: rooms, participants, and recordings","href":"/concepts/voice-conference-model"},{"title":"Wallboards and SLA telemetry: metric families, threshold alarms, and SLA policy","href":"/concepts/wallboard-and-sla-telemetry"},{"title":"Agent shrinkage: reading the per-agent state-history timeline","href":"/concepts/agent-shrinkage-and-state-history"},{"title":"The queue callback model: virtual hold, dispatch, and outcomes","href":"/concepts/queue-callbacks-model"},{"title":"The public appointment self-booking model: opt-in gate, payload, and abuse posture","href":"/concepts/public-appointment-self-booking"},{"title":"Dialer pacing: claim modes, enrollment ordering, best-time-to-dial, and the abandon ceiling","href":"/concepts/dialer-pacing-model"},{"title":"Number status map: from purchase to release","href":"/concepts/number-lifecycle"},{"title":"Number dormancy and rental spend","href":"/concepts/number-dormancy-model"},{"title":"Low DID inventory alerts and the auto-replenishment loop","href":"/concepts/number-inventory-low-stock-and-replenishment"},{"title":"Bulk Reserve model: the reservation state machine","href":"/concepts/number-bulk-reservation-model"},{"title":"Number portability: one model for port-in and port-out","href":"/concepts/number-portability-model"},{"title":"Hosted messaging: SMS enablement without porting","href":"/concepts/hosted-messaging-model"},{"title":"Number reuse, aging, and post-release posture","href":"/concepts/number-reuse-and-aging"},{"title":"Trial \u0026 shared-pool number model","href":"/concepts/number-trial-pool-model"},{"title":"Port-out lifecycle and the ownership model","href":"/concepts/number-port-out-model"},{"title":"Port-out PIN protection lifecycle","href":"/concepts/port-out-pin-protection-model"},{"title":"Connectivity SIM model: the eSIM / IoT data-line state machine","href":"/concepts/connectivity-sim-model"},{"title":"Call recording pipeline: from call end to a playable recording","href":"/concepts/call-recording-pipeline"},{"title":"Recording lifecycle: capture to retention purge, and the states in between","href":"/concepts/recording-lifecycle"},{"title":"Media planes","href":"/concepts/media-planes"},{"title":"Voice gateway: the realtime AI-voice media edge","href":"/concepts/voice-gateway-realtime-edge"},{"title":"Transport architecture","href":"/concepts/transport-architecture"},{"title":"Platform runtime map","href":"/concepts/platform-runtime-map"},{"title":"Multi-region media routing","href":"/concepts/media-region-routing"},{"title":"The video room model","href":"/concepts/video-room-model"},{"title":"The video registrant lifecycle","href":"/concepts/video-registrants-model"},{"title":"Video room templates and the background library","href":"/concepts/video-room-templates"},{"title":"Video live interpretation model","href":"/concepts/video-live-interpretation-model"},{"title":"Transcript-verified video-only gate","href":"/concepts/video-transcript-verified-gate"},{"title":"Broadcast captions and the translation model","href":"/concepts/video-caption-translation-model"},{"title":"Broadcast analytics model: live audience, in-room participation, recurring themes","href":"/concepts/broadcast-analytics-model"},{"title":"Video room engagement \u0026 chapter analytics pipeline","href":"/concepts/video-analytics-pipeline"},{"title":"Avatar bot dispatch queue","href":"/concepts/avatar-bot-dispatch-queue"},{"title":"Avatar video render lifecycle","href":"/concepts/avatar-video-render-lifecycle"}]},{"group":"Delivery \u0026 Schedulers","pages":[{"title":"Queued to sent: the outbound status primer","href":"/concepts/queued-to-sent-the-four-owner-map"},{"title":"Delivery lifecycle: queued to delivered, and the states in between","href":"/concepts/delivery-lifecycle"},{"title":"Message validity period: how long the carrier keeps retrying","href":"/concepts/message-validity-period"},{"title":"Email delivery lifecycle: bounces, complaints, and the retry queue","href":"/concepts/email-delivery-lifecycle"},{"title":"Email authoring and the seed lab: compose, compile, then measure where it lands","href":"/concepts/email-authoring-and-seed-lab"},{"title":"Email transport security: MTA-STS and TLS-RPT","href":"/concepts/email-transport-security-model"},{"title":"DMARC aggregate reports (RUA): ingest and analysis","href":"/concepts/dmarc-aggregate-ingest"},{"title":"The scheduled-sending model: how queue-park, quiet-hours gating, and fire-time form one contract","href":"/concepts/scheduled-sending-model"},{"title":"The scheduled-send lifecycle: from a future send_at to dispatch","href":"/concepts/send-at-scheduled-sends"},{"title":"Outbound send gating: the tenant-owned controls that decide whether a message dispatches","href":"/concepts/send-gating-and-quiet-hours"},{"title":"Recipient timezone resolution for quiet hours","href":"/concepts/recipient-timezone-resolution"},{"title":"NANP area-code and state resolution — inventory boundaries","href":"/concepts/nanp-area-code-and-state-resolution"},{"title":"Email quiet hours vs the marketing/lifecycle classification: where timezone restraint stops and consent starts","href":"/concepts/email-quiet-hours-and-marketing-classification"},{"title":"Deliverability Lab: pre-send content-risk lint and per-carrier delivery prediction","href":"/concepts/deliverability-lab-pre-send-scoring"},{"title":"Messaging deliverability alerting: thresholds, evaluation, and notification fan-out","href":"/concepts/messaging-deliverability-alerting"},{"title":"The cross-campaign send allocator: how concurrent campaigns share one budget","href":"/concepts/campaign-allocator-model"},{"title":"How Orbit processes work asynchronously","href":"/concepts/async-processing-model"},{"title":"Scheduler fleet model","href":"/concepts/scheduler-fleet-model"},{"title":"Operational sentinels: the status values that aren't deliveries","href":"/concepts/operational-sentinels"},{"title":"On-call and escalation policy model: rotation, timeline, and incident state","href":"/concepts/oncall-escalation-model"},{"title":"Omnichannel capacity and reservation model","href":"/concepts/omnichannel-capacity-reservation"}]},{"group":"Identity, Tenancy \u0026 Access","pages":[{"title":"Tenant isolation","href":"/concepts/tenant-isolation"},{"title":"Tenant isolation at a glance","href":"/concepts/tenant-isolation-at-a-glance"},{"title":"Tenant schema migration and evolution","href":"/concepts/tenant-schema-migration-model"},{"title":"The public catalog: a closed set of shared tables","href":"/concepts/public-catalog-tables"},{"title":"Tenant provisioning lifecycle","href":"/concepts/tenant-provisioning-lifecycle"},{"title":"Organization suspension and deletion lifecycle","href":"/concepts/org-suspension-deletion-lifecycle"},{"title":"Org and subaccount model: one vocabulary","href":"/concepts/org-and-subaccount-model"},{"title":"The subaccount organization model","href":"/concepts/subaccount-organization-model"},{"title":"Authentication and session model","href":"/concepts/authentication-model"},{"title":"Current-user preferences model","href":"/concepts/me-preferences-model"},{"title":"Signed-token public share plane: sharing with recipients who have no account","href":"/concepts/signed-token-public-share-plane"},{"title":"Account security model","href":"/concepts/account-security-model"},{"title":"Destructive-operation re-auth challenge","href":"/concepts/re-auth-challenge-model"},{"title":"The issuer-challenge model","href":"/concepts/issuer-challenges-model"},{"title":"Onboarding wizard lifecycle","href":"/concepts/onboarding-wizard-lifecycle"},{"title":"Operator plane vs tenant plane — admin APIs and their audit model","href":"/concepts/admin-tenant-plane-model"},{"title":"API key lifecycle and rotation: grace versus immediate","href":"/concepts/api-key-rotation-lifecycle"},{"title":"Identity federation: SAML and SCIM","href":"/concepts/identity-federation-saml-scim"},{"title":"Tenant config portability: the export/import bundle","href":"/concepts/tenant-config-portability-model"},{"title":"Roles, teams, and permissions","href":"/concepts/roles-teams-permissions"},{"title":"Team seat quota and invite enforcement","href":"/concepts/team-seat-quota-model"},{"title":"Custom fields: the definition model and the dependency-scan lifecycle","href":"/concepts/custom-fields-model"},{"title":"The contact record model","href":"/concepts/contact-record-model"},{"title":"Contact merge policy: the per-field survivorship decision tree","href":"/concepts/contact-merge-policy"},{"title":"Custom domains and managed SSL","href":"/concepts/custom-domains-and-ssl"},{"title":"The branding and theming console model","href":"/concepts/branding-and-theming-model"},{"title":"CSPaaS white-label operations","href":"/concepts/cspaas-white-label-operations"},{"title":"The composite pre-send risk verdict: four detectors, one score","href":"/concepts/risk-verdict-model"},{"title":"Synthetic-media provenance","href":"/concepts/synthetic-media-provenance"},{"title":"Redaction vault: a compliance-safe copy of every call transcript, with an audit of what was removed","href":"/concepts/redaction-vault"},{"title":"Encryption at rest: the platform envelope, and how BYOK fits on top","href":"/concepts/encryption-at-rest-model"}]},{"group":"Billing \u0026 Wallet","pages":[{"title":"The billing model map: four wallet/usage pages, one index","href":"/concepts/billing-model-map"},{"title":"Wallet spend-channel attribution: how each debit gets its channel","href":"/concepts/wallet-spend-channel-attribution-model"},{"title":"How billing meters your usage: wallet, rating, and the ledger","href":"/concepts/billing-and-wallet"},{"title":"Committed-use drawdown: the enterprise monthly commit meter","href":"/concepts/committed-use-drawdown-model"},{"title":"The outbound pause gate and the free-channel exemption","href":"/concepts/outbound-pause-and-free-channel-exemption"},{"title":"Outbound pause and the resume propagation loop","href":"/concepts/outbound-pause-recovery"},{"title":"The dunning lifecycle: a three-strike pause with a counter you cannot reset","href":"/concepts/dunning-lifecycle-model"},{"title":"Wallets, credits, and charges: how usage metering works","href":"/concepts/wallets-credits-and-charges"},{"title":"The reseller wallet funding model: one wallet per org, funded parent-down","href":"/concepts/reseller-wallet-funding-model"},{"title":"The two-phase authorize lifecycle: authorize, capture, release","href":"/concepts/two-phase-billing-lifecycle"},{"title":"eSIM reseller billing model: wallet charges and refunds on travel eSIMs","href":"/concepts/esim-reseller-billing-model"},{"title":"The outbound billing gate chain: what every send walks, in order","href":"/concepts/billing-gate-chain-model"},{"title":"Channel charge trigger model","href":"/concepts/channel-charge-trigger-model"},{"title":"RCS billing and metering model: what an RCS message costs, when the charge lands, and how to read it back","href":"/concepts/rcs-billing-and-metering-model"},{"title":"Spend alerts, burn rate, and the velocity-anomaly model","href":"/concepts/spend-anomaly-and-alert-model"},{"title":"Anomaly insights: detector shapes, baselines, and the alert handoff","href":"/concepts/anomaly-insights-model"},{"title":"Usage records: the per-record billing feed","href":"/concepts/usage-records-model"},{"title":"The usage metering pipeline: from a sent message to the wallet ledger","href":"/concepts/usage-metering-pipeline"},{"title":"Inbound cost metering: received traffic is reported, not debited","href":"/concepts/inbound-cost-metering-model"},{"title":"LLM spend attribution: feature × model × conversation, and the reconciliation behind it","href":"/concepts/llm-spend-cost-attribution-model"},{"title":"Channel cost rollup vs the billing ledger model","href":"/concepts/cost-channel-rollup-model"},{"title":"Pricing and rate resolution: how a per-operator price is attributed","href":"/concepts/pricing-rate-resolution"},{"title":"Volume-tier pricing auto-resolution: graduated rates that apply themselves","href":"/concepts/volume-tier-resolution-model"},{"title":"MCC/MNC override model — how per-operator overrides layer onto rate resolution","href":"/concepts/mccmnc-override-model"},{"title":"All-in pricing: the base rate plus the surcharge schedule","href":"/concepts/pricing-all-in-surcharges"},{"title":"What-if pricing model: rate preview over your real usage lanes","href":"/concepts/whatif-pricing-preview-model"},{"title":"FX-rate resolution: the four-source pipeline behind converted top-ups","href":"/concepts/fx-rate-resolution-pipeline"},{"title":"Reseller margin and the tax pipeline: marking up a rated amount, correctly ordered","href":"/concepts/reseller-margin-and-tax-pipeline"}]},{"group":"CDP \u0026 Intelligence","pages":[{"title":"What a Customer Data Platform (CDP) is on Orbit","href":"/concepts/what-is-a-customer-data-platform"},{"title":"The CDP event model","href":"/concepts/cdp-event-model"},{"title":"CDP streaming destinations: Kafka and Kinesis real-time egress","href":"/concepts/cdp-streaming-destinations"},{"title":"The media asset store","href":"/concepts/cdn-assets-model"},{"title":"The event-ledger projection model","href":"/concepts/event-ledger-projection-model"},{"title":"B2B accounts: golden records and hierarchy","href":"/concepts/cdp-accounts"},{"title":"Identity resolution and merge semantics","href":"/concepts/cdp-identity-resolution"},{"title":"Identity graph and device graph","href":"/concepts/cdp-identity-graph-and-device-graph"},{"title":"The contact scoring pipeline: daily cadence, batch execution, and the auditable scorer","href":"/concepts/cdp-scoring-pipeline"},{"title":"How CDP segments recompute: real-time evaluation, re-enrichment, and staleness","href":"/concepts/cdp-segment-recompute-model"},{"title":"Lists vs segments: the two membership models","href":"/concepts/list-vs-segment-membership-models"},{"title":"Three ways to materialize an audience at send time","href":"/concepts/audience-autosuggest-and-cohort-export"},{"title":"Predictive activation schedules: cadence-driven audience refresh","href":"/concepts/predictive-activation-schedule"},{"title":"CDP clean rooms: shared analytics without data egress","href":"/concepts/cdp-clean-room-model"},{"title":"CDP retention windows: per-data-class TTL governance","href":"/concepts/retention-policy-governance"},{"title":"The reverse-ETL destination model","href":"/concepts/reverse-etl-destination-model"},{"title":"The survey lifecycle: instrument, token, dispatch, scoring, and benchmark","href":"/concepts/survey-lifecycle-model"},{"title":"Conversations: the omnichannel thread model","href":"/concepts/conversations"},{"title":"Interactions: the unified cross-channel read model","href":"/concepts/interactions-unified-model"},{"title":"Interactions CSV export: the bulk-pull contract and its RBAC split","href":"/concepts/interactions-export-model"},{"title":"The team chat model: channels, huddles, presence, reactions, and attachments","href":"/concepts/team-chat-model"},{"title":"Conversation Intelligence","href":"/concepts/conversation-intelligence"},{"title":"Conversation and Call Intelligence Landscape","href":"/concepts/conversation-and-call-intelligence-landscape"},{"title":"Automation opportunities: turning conversation P\u0026L into agentable work","href":"/concepts/automation-opportunities-model"},{"title":"Session replay and search analytics","href":"/concepts/session-search-analytics"},{"title":"Global search fan-out","href":"/concepts/global-search-fan-out"},{"title":"Session replay model: recording lifecycle, two-tier storage, and playback","href":"/concepts/session-replay"},{"title":"Co-browse session model: consent postures and the privacy-masking contract","href":"/concepts/cobrowse-session-model"},{"title":"Widget flow model: runtime, web-call context, WebMCP guardrails, and trust policy","href":"/concepts/widget-flow-model"},{"title":"Next-best-product recommendations","href":"/concepts/recommendations"},{"title":"Next-best-action decisioning","href":"/concepts/decisioning"},{"title":"Analytics pipeline: from raw events to an aggregate read surface","href":"/concepts/analytics-pipeline"},{"title":"Per-tenant request metrics: how the Developer API analytics feed works","href":"/concepts/request-metrics-and-analytics-pipeline"},{"title":"Request-metrics reader gates: four bounded surfaces","href":"/concepts/request-metrics-reader-gates"},{"title":"Request Logs model: Cloud Logging under a deadline-backed read","href":"/concepts/request-logs-model"},{"title":"The insights rollup model: read-time derivations over existing events","href":"/concepts/insights-rollup-model"},{"title":"Ask-your-data copilot: how a question becomes a governed answer","href":"/concepts/ask-your-data-copilot-model"},{"title":"The carbon emissions and ESG footprint model","href":"/concepts/carbon-emissions-model"},{"title":"The personalization slots model: slot scoping, variant resolution, and lift semantics","href":"/concepts/personalization-slots-model"},{"title":"Customer-360 snapshot aggregation model: parallel fan-out, error isolation, and caching","href":"/concepts/customer-360-snapshot-model"},{"title":"CRM integration model: sync directions, object mapping, and verification","href":"/concepts/crm-integration-model"},{"title":"Import and migration lifecycle: connect → preview → run → reconcile","href":"/concepts/imports-migration-model"},{"title":"Ads attribution and lead ingestion","href":"/concepts/ads-attribution-lead-ingestion"},{"title":"CDP ad-audience incrementality","href":"/concepts/cdp-ad-audience-incrementality"}]},{"group":"AI \u0026 Automation","pages":[{"title":"AI agent architecture: flows, retrieval, tools, and the run lifecycle end to end","href":"/concepts/ai-agent-architecture"},{"title":"Canary rollout \u0026 shadow dispatch: taking a new agent version live safely","href":"/concepts/canary-and-shadow-rollout-model"},{"title":"Outcome-based AI-agent billing: pay per resolved conversation, not per token","href":"/concepts/outcome-pricing-model"},{"title":"AI-disclosure ledger: concept","href":"/concepts/ai-disclosure-ledger"},{"title":"Prompt template lifecycle: concept","href":"/concepts/prompt-template-lifecycle"},{"title":"Outbound channel templates lifecycle: concept","href":"/concepts/outbound-channel-templates"},{"title":"Orby operator assistant architecture: sessions, turns, tools, and the approval gate","href":"/concepts/orby-operator-assistant"},{"title":"Action approvals: the human-in-the-loop gate","href":"/concepts/action-approvals-model"},{"title":"PII egress guard: the last-pass scrub on agent tool arguments","href":"/concepts/pii-egress-guard-model"},{"title":"Guardrail policies and red-team gates: how agents are governed","href":"/concepts/guardrails-and-red-team-pipeline"},{"title":"Runtime turn classifiers and eval rubrics: how agent turns are judged","href":"/concepts/agent-turn-classifiers-and-eval-rubrics"},{"title":"Agent versioning and the change-log audit trail","href":"/concepts/agent-versioning-and-change-log"},{"title":"Agent run lifecycle: queued to completed, and the states in between","href":"/concepts/agent-run-lifecycle"},{"title":"The proactive outreach evaluation model: one trigger, one decision, one audit row","href":"/concepts/proactive-outreach-evaluation-model"},{"title":"Agent memory model","href":"/concepts/agent-memory-model"},{"title":"Agent presence and aux-code lifecycle: the five states dispatch checks before it rings","href":"/concepts/agent-presence-lifecycle"},{"title":"The knowledge-base ingestion pipeline: from upload to retrieval-ready","href":"/concepts/knowledge-pipeline"},{"title":"Retrieval scoping and grounding integrity: how agent retrieval stays inside your data","href":"/concepts/retrieval-scoping-and-grounding-integrity"},{"title":"The no-match miner → KB auto-draft loop: unanswered questions become reviewable articles","href":"/concepts/kb-auto-draft-loop"},{"title":"How flow executions run: states, branching, async waits, and webhook hand-off","href":"/concepts/flow-execution-model"},{"title":"The branch-decision contract: from CDP to flows","href":"/concepts/cdp-and-flown-each-other-branch-decision"},{"title":"What a flow template is, and how cloning detaches it","href":"/concepts/flow-templates-model"},{"title":"BYO MCP servers for AI agents","href":"/concepts/byo-mcp-servers"},{"title":"Hosted MCP server","href":"/concepts/mcp-hosted-server"},{"title":"A2A federation model","href":"/concepts/a2a-federation-model"},{"title":"Agentic commerce authorization and checkout model","href":"/concepts/agentic-commerce-model"},{"title":"MPP metered payment sessions","href":"/concepts/mpp-metered-payment-sessions"},{"title":"Cross-app access: Identity Assertion JWT Authorization Grant (ID-JAG)","href":"/concepts/cross-app-access-id-jag"},{"title":"The skill catalog: the canonical list of skills routing accepts","href":"/concepts/skill-catalog"},{"title":"QA evaluations and the performance leaderboard","href":"/concepts/qa-leaderboard-and-evaluations"},{"title":"Practice Studio: stateless simulated-customer roleplay sessions","href":"/concepts/practice-studio-model"},{"title":"The call-quality evaluation lifecycle","href":"/concepts/quality-evaluation-lifecycle"},{"title":"The LLM-judged evaluation ledger","href":"/concepts/llm-judged-evaluation-ledger"},{"title":"Pick a testing harness: the decision table","href":"/concepts/agent-testing-harness-picker"},{"title":"Agent A/B experiments: assignment, lift attribution, and promotion","href":"/concepts/agent-experiment-model"},{"title":"Agent playbooks: trigger-driven live guidance","href":"/concepts/voice-playbooks-model"},{"title":"Predictive routing: the trained agent-match model","href":"/concepts/predictive-routing-model"},{"title":"The squad routing model: classifier agents, handoff packets, and fallback","href":"/concepts/squad-routing-model"},{"title":"Inbox conversation push-routing (auto-assignment)","href":"/concepts/inbox-push-routing"},{"title":"Semantic response cache: serving near-duplicate first questions without a model round-trip","href":"/concepts/semantic-response-cache-model"}]},{"group":"Compliance, Send Controls \u0026 Rates","pages":[{"title":"Data placement and residency","href":"/concepts/data-placement-and-residency"},{"title":"Retention windows and deletion: the stores map","href":"/concepts/retention-windows-and-deletion"},{"title":"Consent, opt-out, and suppression: the recipient-state model","href":"/concepts/consent-and-suppression-model"},{"title":"The DSAR intake model","href":"/concepts/dsar-concept"},{"title":"Frequency-cap model: slot claims, counters, and gate order","href":"/concepts/frequency-caps-model"},{"title":"Message suppression model: the duplicate-content guard, and the two mechanisms it is not","href":"/concepts/message-suppression-model"},{"title":"Outbound gate chain: the interaction, campaign-preflight, keyword-rules, frequency-caps, and message-suppression stack","href":"/concepts/messages-gate-chain-and-suppression"},{"title":"The policy-scan pipeline model","href":"/concepts/policy-scan-pipeline-model"},{"title":"The DLP scanner model","href":"/concepts/dlp-scanner-concept"},{"title":"Outbound URL reputation and the smishing scan","href":"/concepts/url-reputation-smishing-scan"},{"title":"TCPA federal voice guard: the one 422 you can't unset","href":"/concepts/tcpa-federal-voice-guard"},{"title":"Voice pre-send gate chain: the order outbound calls are evaluated","href":"/concepts/voice-pre-send-gate-chain"},{"title":"TCPA quiet hours: federal, state, and tenant gates as one stack","href":"/concepts/federal-vs-state-vs-tenant-voice-gates"},{"title":"Omnichannel fallback compliance matrix — TCPA vs DNC vs registration per channel","href":"/concepts/omnichannel-compliance-matrix"},{"title":"The Reassigned Numbers Database (RND): how the safe-harbor scrub works end to end","href":"/concepts/reassigned-numbers-database"},{"title":"CTIA Messaging Principles as an ordered schema","href":"/concepts/ctia-messaging-principles"},{"title":"The US SMS Regulatory Model: Three Rule Books, One Control Plane","href":"/concepts/us-sms-regulatory-model"},{"title":"Tenant posture audit map — planes, ownership, and where the evidence lands","href":"/concepts/tenancy-posture-audit-map"},{"title":"The audit ledger model","href":"/concepts/audit-ledger-model"},{"title":"Tenant compliance defaults — the opt-in envelope","href":"/concepts/tenant-compliance-defaults-model"},{"title":"The tenant-owned compliance model: one page, every gate","href":"/concepts/compliance-tenant-owned-model"},{"title":"Outbound country allowlist — a tenant-owned opt-in gate","href":"/concepts/country-allowlist-gate-model"},{"title":"Country rules enumeration model: one row per country per channel","href":"/concepts/country-rules-enumeration-model"},{"title":"10DLC error taxonomy: registry rejections vs. delivery errors","href":"/concepts/tcr-vs-carrier-error-taxonomy"},{"title":"10dlc concept","href":"/concepts/10dlc-concept"},{"title":"Rate-limit and cooldown taxonomy: which limiter fired when a send returns 429","href":"/concepts/rate-limit-and-cooldown-taxonomy"},{"title":"API governance model: the org default + per-key override self-serve model","href":"/concepts/api-governance-model"},{"title":"Rate-limit and cooldown collector: how the API request boundary maps every bucket","href":"/concepts/rate-limit-cooldown-collector"},{"title":"Sender warming and reputation: how the ramp and trust kernels work","href":"/concepts/sender-warming-and-reputation"},{"title":"SMS complaint feedback loop: ingest, rollup, and auto-suppression","href":"/concepts/sms-complaint-feedback-loop"},{"title":"Spam-likelihood prediction: the score, its factors, and the remediation playbook","href":"/concepts/spam-likelihood-prediction"},{"title":"Template lifecycle and approval semantics","href":"/concepts/template-lifecycle"},{"title":"The WhatsApp WABA lifecycle — connect, register, migrate, disconnect","href":"/concepts/whatsapp-waba-lifecycle"},{"title":"WhatsApp quality and health model","href":"/concepts/whatsapp-quality-and-health"},{"title":"WhatsApp Flows and form submissions","href":"/concepts/whatsapp-flows-and-forms"},{"title":"WhatsApp Business Calling model","href":"/concepts/whatsapp-business-calling-model"},{"title":"WhatsApp Business Calling media relay","href":"/concepts/whatsapp-business-calling-media-relay"},{"title":"Verification session lifecycle: sent, checked, approved or failed","href":"/concepts/verification-lifecycle"},{"title":"The Verify fraud gate: score, verdict, and the fallback-constrained channel chain","href":"/concepts/verify-fraud-gate-timeline-model"},{"title":"The Verify dashboard: history surface, filters, and the role-access guard","href":"/concepts/verify-history-and-role-access"},{"title":"Identity risk gate: fused signals — port-event recency, SIM swap, and Silent Auth","href":"/concepts/identity-risk-gate-signals"},{"title":"Brand identity and trust score: the cross-channel verification rollup","href":"/concepts/brand-identity-trust-score"},{"title":"Fraud reputation: the shared cross-tenant network feed","href":"/concepts/network-signals-fraud-reputation"},{"title":"Network APIs and the CIBA silent-auth flow","href":"/concepts/network-apis-ciba"}]},{"group":"Webhooks \u0026 Platform Models","pages":[{"title":"Webhook delivery semantics: retries, ordering, and the dead-letter queue","href":"/concepts/webhook-delivery-semantics"},{"title":"The devotel CLI model: install, auth, profiles, and the webhook-forwarding loop","href":"/concepts/devotel-cli-model"},{"title":"Webhook fan-out: one event, many destinations","href":"/concepts/webhook-fan-out-and-event-sinks"},{"title":"Webhook subscription lifecycle: register through disable and re-enable","href":"/concepts/webhook-subscription-lifecycle"},{"title":"The SDK surface model: tiers, shared contract, and codegen","description":"How Orbit's twelve SDKs are organized — the three tiers (GA server, core-scope server, client-scope), the shared auth/retry/idempotency contract, the OpenAPI codegen mapping, the publishable-vs-secret key split, and the cross-language error hierarchy.","href":"/concepts/sdks-model"},{"title":"Inbound connector webhook authentication model","href":"/concepts/inbound-connector-webhook-auth-model"},{"title":"Inbound webhook debug log","href":"/concepts/inbound-webhook-debug-log"},{"title":"Idempotency and safe retries","href":"/concepts/idempotency-and-safe-retries"},{"title":"Public pixels, redirects, and short links","href":"/concepts/public-pixels-redirects"},{"title":"Web SDK and the public-key identify/track model","href":"/concepts/web-sdk-public-key-model"},{"title":"The notification model: event fan-out, categories, channels, and digests","href":"/concepts/notification-model"},{"title":"Short links, landing pages, and the publish lifecycle","href":"/concepts/short-links"},{"title":"QR code generation model","href":"/concepts/qr-code-generation-model"},{"title":"Marketplace listing lifecycle and trust model","href":"/concepts/marketplace-listing-lifecycle"},{"title":"Campaign lifecycle: draft to completed, blast vs drip vs journey","href":"/concepts/campaign-lifecycle"},{"title":"Campaign journey pipeline: enroll to funnel measurement","href":"/concepts/campaign-journey-pipeline"},{"title":"Journey enrollment fan-out: three routers, one entry chain","href":"/concepts/journey-enrollment-fan-out"},{"title":"The export families model","href":"/concepts/export-families-model"},{"title":"Event sources: the inbound consumer model","href":"/concepts/event-sources-inbound-model"},{"title":"Event consumer groups: managed offsets over the platform event stream","href":"/concepts/event-consumer-groups"},{"title":"USSD session model and the stateless menu engine","href":"/concepts/ussd-session-model"},{"title":"The WFM model: forecasting, scheduling, adherence, and the labor market","href":"/concepts/wfm-model"},{"title":"How voice biometrics verification works","href":"/concepts/voice-biometrics"},{"title":"Operate voice biometrics: thresholds, step-up, and the verification console","href":"/concepts/voice-biometrics-console"},{"title":"KBA caller verification: knowledge-based challenges on a live call","href":"/concepts/caller-verification-kba"},{"title":"MCID — the malicious-call trace model","href":"/concepts/mcid-call-trace-model"},{"title":"Voice Agent Quality Index (VAQI)","href":"/concepts/voice-agent-quality-vaq"},{"title":"Commerce checkout spine","href":"/concepts/commerce-checkout-spine"}]},{"group":"Files \u0026 Object Storage","pages":[{"title":"The media asset store","href":"/concepts/cdn-assets-model"},{"title":"Media file upload and the presign lifecycle","href":"/concepts/file-upload-and-presign-lifecycle"},{"title":"RCS demo videos: permanent share links","href":"/guides/file-video-share-link"}]},{"group":"Outbound","pages":[{"title":"Marketing hub model: wallet passes, loyalty, and referrals behind one redirect","href":"/concepts/marketing-hub-model"},{"title":"Referral program model: program → code → conversion → reward","href":"/concepts/referral-program-model"}]}]},{"group":"Features","pages":[{"title":"CXaaS: the four arcs of customer experience","href":"/guides/cxaas-four-arcs"},{"title":"Loyalty API: points, tiers, and redemption endpoints","href":"/api-reference/loyalty"},{"title":"Incentives: catalog, ledger, and fulfillment","href":"/concepts/incentives"},{"title":"Loyalty program model: points, tiers, and the CDP ledger","href":"/concepts/loyalty-program-model"},{"title":"Wallet pass lifecycle: issue, update, void","href":"/concepts/wallet-pass-lifecycle"}]},{"group":"Billing","pages":[{"title":"Billing overview","href":"/billing/overview"},{"title":"Revenue recognition","href":"/billing/revenue-recognition"},{"title":"Spend caps, budget alerts, and auto-cutoff","href":"/billing/spend-caps"},{"title":"Usage \u0026 delivery anomaly alerts","href":"/billing/usage-anomaly-alerts"},{"title":"Burn rate and wallet runway","href":"/concepts/billing-burn-rate"},{"title":"Spend caps on the dashboard","href":"/guides/spend-cap-console"},{"title":"Pricing calculator: estimate messaging, RTC, AI, and reseller payouts","href":"/billing/pricing-calculator"},{"title":"Billing Calculator: the presale cost-estimation walkthrough","href":"/guides/billing-cost-calculator"},{"title":"Inbound traffic cost metering: see what received calls and messages cost","href":"/guides/inbound-traffic-cost-metering"},{"title":"CDR export \u0026 billing reconciliation feed","href":"/billing/cdr-export-billing-reconciliation"},{"title":"CDR usage export for billing reconciliation","href":"/guides/cdr-usage-export-billing-reconciliation"},{"title":"Billing → Records: the usage record export console","href":"/guides/billing-records-export-console"},{"title":"Cryptocurrency payments","href":"/billing/crypto-payments"},{"title":"Crypto top-up API lifecycle","href":"/billing/crypto-topup-api-samples"},{"title":"Process NOWPayments crypto refunds in Orbit","href":"/billing/crypto-refunds"},{"title":"Credit refund lifecycle: lot eligibility, partial refunds, and two-leg settlement","href":"/concepts/credit-refund-lifecycle-model"},{"title":"Refunding unused card top-up credits: the owner's self-serve walkthrough","href":"/guides/credit-refund-self-serve-walkthrough"},{"title":"Wallet top-up currency conversion","href":"/billing/wallet-currency-conversion"},{"title":"Authorize wallet holds for multi-step purchases","href":"/guides/wallet-hold-capture"},{"title":"Rate cards: persisted price books you assign to subaccounts","href":"/billing/rate-cards"},{"title":"Cost-center chargeback: attribute spend to a department","href":"/guides/cost-center-chargeback"},{"title":"AI usage breakdown: attribute LLM spend per agent, model, and channel","href":"/guides/billing-ai-usage-split"},{"title":"What-if pricing simulator: back-test a rate card against your own traffic","href":"/guides/whatif-pricing-simulator"},{"title":"Committed-use discounts: decide, forecast, and enroll","href":"/guides/billing-committed-use-enrollment"},{"title":"Volume tiers and revenue recognition: the finance-ops workflow","href":"/guides/billing-revenue-and-volume-tiers"},{"title":"Revenue recognition: read deferred vs recognized schedules","href":"/guides/billing-revenue-recognition"},{"title":"Billing ops: invoices, statements, pay-by-link, and the price calculator","href":"/guides/billing-invoices-statements-and-pay-by-link"},{"title":"Run and download reseller invoices for subaccounts","href":"/guides/subaccounts-reseller-invoice-run"},{"title":"The invoice, statement, and subscription model","href":"/concepts/billing-documents-model"},{"title":"The pricing-preview pipeline: projected margin and payout before close","href":"/concepts/billing-pricing-preview-model"},{"title":"MCCMNC overrides: per-carrier rate overrides over the default rate card","href":"/guides/billing-mccmnc-overrides"},{"title":"Admin: Voice Destinations dial-code deck","href":"/guides/admin-voice-destinations-dial-code-deck"},{"title":"Per-operator SMS rates: maintain MCC/MNC rates per country","href":"/guides/billing-mccmnc-per-operator-rates"},{"title":"Configure wallet auto-top-up","href":"/guides/billing-auto-topup"},{"title":"Billing → Payment: methods, subscription, tax, outcome pricing","href":"/guides/billing-payment-surface"},{"title":"Notification digest vs. per-user preferences","href":"/guides/digest-and-notification-channels-faq"}]},{"group":"Webhooks","pages":[{"title":"Webhooks overview: receive real-time Orbit events","href":"/webhooks/overview"},{"title":"Build your first webhook receiver","href":"/webhooks/first-receiver"},{"title":"Webhook events: catalog of every event Orbit dispatches","href":"/webhooks/events"},{"title":"Webhook event payloads: envelope, headers, and metadata","href":"/webhooks/event-payloads"},{"title":"Inbound event catalog: every inbound status folded to its canonical webhook event","href":"/webhooks/inbound-event-catalog"},{"title":"Normalized inbound event envelope","href":"/webhooks/normalized-inbound-envelope"},{"title":"Inspect webhook deliveries and replay failures","href":"/webhooks/inspecting-deliveries"},{"title":"Webhook security: verify HMAC-SHA256 signatures","href":"/webhooks/security"},{"title":"Troubleshooting: webhook signature verification failures","href":"/webhooks/troubleshooting-signature-failures"}]},{"group":"Security \u0026 SSO","pages":[{"title":"Enroll SAML SSO: Okta and Microsoft Entra ID","href":"/guides/saml-sso-enrollment"},{"title":"SCIM 2.0 provisioning (Okta, Entra ID, generic IdPs)","href":"/compliance/scim-provisioning"},{"title":"Wire SCIM provisioning: Okta, Microsoft Entra ID, and OneLogin","href":"/guides/scim-provisioning"},{"title":"Password reset and API-key revocation","href":"/guides/auth-password-reset-and-key-revocation"}]},{"group":"Compliance","pages":[{"title":"Your Tenant Compliance Posture: The Toggle Map","href":"/compliance/posture-overview"},{"title":"TCPA State-by-State Map for 2026","href":"/compliance/tcpa-state-map-2026"},{"title":"Compliance hub route map","href":"/compliance/compliance-hub-route-map"},{"title":"Compliance hub console FAQ","href":"/compliance/console-compliance-hub-faq"},{"title":"Compliance hub by role: where each persona starts","href":"/compliance/persona-guide-compliance-officer"},{"title":"Accessibility in business messaging","href":"/compliance/accessibility-business-messaging"},{"title":"Compliance Glossary","href":"/compliance/glossary"},{"title":"Compliance Posture FAQ","href":"/compliance/posture-faq"},{"title":"Quiet Hours FAQ: Org Gate vs. Campaign Fallback vs. Preview","href":"/compliance/quiet-hours-faq"},{"title":"Voice Traffic-Lane and Voice-Classification FAQ","href":"/compliance/voice-lane-and-classification-faq"},{"title":"Compliance FAQ: sends, calls, and registration gates","href":"/compliance/faq"},{"title":"Compliance Approval Timelines \u0026 Trigger Runbooks","href":"/compliance/topic-faq"},{"title":"One Educated Customer, Ten Laws: Which Regulatory Family Owns Which Customer-Data Gate","href":"/compliance/ten-vs-educate-customer-data"},{"title":"Vertical Compliance Bundles","href":"/compliance/vertical-bundles"},{"title":"Vertical bundles console walkthrough","href":"/guides/compliance-vertical-bundles-walkthrough"},{"title":"Vertical bundles by industry: a decision guide for regulated buyers","href":"/compliance/vertical-bundle-industry-guides"},{"title":"Assembling a Debt-Collection and Receivables Compliance Posture End to End","href":"/compliance/debt-collection-compliance-posture"},{"title":"Industry landing pages: the buyer surface for each vertical","href":"/guides/industries-overview"},{"title":"Automotive recall service walkthrough","href":"/guides/automotive-recall-service-walkthrough"},{"title":"Staffing shift coverage and candidate pipeline: an end-to-end walkthrough","href":"/guides/staffing-shift-coverage-candidates-walkthrough"},{"title":"Real estate showing, listing, and closing notifications end to end","href":"/guides/real-estate-showing-closing-walkthrough"},{"title":"Build an end-to-end FNOL and claims lifecycle program","href":"/guides/insurance-claims-fnol-walkthrough"},{"title":"Configure Your Tenant's Compliance Posture Before the First Send","href":"/compliance/tenant-posture-first-run"},{"title":"Assembling a GDPR Posture End to End","href":"/compliance/gdpr-posture-guide"},{"title":"GDPR International Transfers","href":"/compliance/gdpr-international-transfers"},{"title":"CCPA/CPRA Posture: Consumer Rights on Orbit","href":"/compliance/ccpa-cpra-posture"},{"title":"US State Privacy Posture: The 2026 Map Beyond California","href":"/compliance/us-state-privacy-posture"},{"title":"COPPA and minor contacts posture","href":"/compliance/coppa-minors-posture"},{"title":"Assembling a US Marketing-SMS Posture End to End","href":"/compliance/tcpa-posture-guide"},{"title":"TCPA Consent-Record Defense Runbook","href":"/compliance/tcpa-consent-record-defense"},{"title":"Assembling a STIR/SHAKEN Outbound Posture End to End","href":"/compliance/stir-shaken-posture-guide"},{"title":"STIR/SHAKEN evidence-to-posture crosswalk","href":"/compliance/stir-shaken-evidence-crosswalk"},{"title":"Assembling a HIPAA Posture End to End","href":"/compliance/hipaa-posture-guide"},{"title":"Voice biometrics privacy posture: consent, retention, and deletion under BIPA, CUBI, MHMDA, and GDPR","href":"/compliance/voice-biometrics-bipa-posture"},{"title":"HIPAA compliance controls for healthcare messaging","href":"/compliance/hipaa"},{"title":"Business Associate Agreement (BAA) flow","href":"/compliance/baa"},{"title":"HIPAA BAA gate evaluation guide","href":"/compliance/baa-gate-guide"},{"title":"HIPAA tenant BAA attestation checklist — first run","href":"/compliance/hipaa-first-run-checklist"},{"title":"PHI-adjacent audience designations","href":"/compliance/phi-audiences"},{"title":"AI Turn Audit: Verbatim AI Decision Records","href":"/compliance/ai-turn-audit"},{"title":"Agent Identity Governance: NHI Inventory + Bulk Decommission","href":"/compliance/agent-identity-governance"},{"title":"Set up agent identity governance: inventory, sponsors, and bulk decommission","href":"/guides/agent-identity-governance-setup"},{"title":"Plan per-agent channel concurrency caps","href":"/guides/agent-channel-concurrency-caps"},{"title":"HIPAA onboarding: from BAA to audit-ready","href":"/guides/hipaa-onboarding"},{"title":"HIPAA first-enablement runbook","href":"/guides/hipaa-first-enablement"},{"title":"HIPAA readiness checklist — pre-go-live runbook","href":"/compliance/hipaa-checklist-runbook"},{"title":"Register PHI-adjacent audiences","href":"/guides/hipaa-phi-audiences"},{"title":"Build a HIPAA-postured patient engagement program","href":"/guides/healthcare-patient-engagement-walkthrough"},{"title":"Free Tool: STIR/SHAKEN Attestation Checklist","href":"/guides/stir-shaken-checklist-tool"},{"title":"EU AI Act Article 50 transparency for AI agents","href":"/compliance/eu-ai-act"},{"title":"EU AI Act deployer checklist for AI voice agents","href":"/compliance/eu-ai-act-deployer-checklist-communications-platforms-2026"},{"title":"Configure AI disclosure before you publish an agent","href":"/compliance/ai-disclosure-settings"},{"title":"AI disclosure pre-publish setup and evidence","href":"/guides/ai-disclosure-setup"},{"title":"Always-on live compliance monitoring for disclosure queues","href":"/guides/live-compliance-monitoring"},{"title":"Queue call-disclosure posture","href":"/compliance/queue-call-disclosure-posture"},{"title":"FCC 24-17 — written consent for AI voices","href":"/compliance/fcc-ai-voice-consent-guard"},{"title":"AI outbound voice compliance checklist for 2026 buyers","href":"/compliance/ai-voice-buyer-compliance-checklist-2026"},{"title":"SOC 2 Controls Mapping","href":"/compliance/soc2-controls"},{"title":"Assembling an ISO 27001 Posture End to End","href":"/compliance/iso-27001-posture-guide"},{"title":"Access lifecycle audit evidence (SCIM join / move / leave)","href":"/compliance/access-control-audit-evidence"},{"title":"PCI DSS compliance posture and SAQ A scope for Orbit","href":"/compliance/pci-dss"},{"title":"Call Recording Consent","href":"/compliance/recording-consent"},{"title":"Consent-Receipt Integrity Binding","href":"/compliance/consent-receipt-integrity"},{"title":"Voice Signatures (Verbal Contracts)","href":"/compliance/voice-signatures"},{"title":"STIR/SHAKEN attestation posture","href":"/compliance/attestation"},{"title":"Request a STIR/SHAKEN attestation letter","href":"/guides/compliance-attestation-request-runbook"},{"title":"Posture-History Rollups for the Audit Ledger","href":"/compliance/audit-ledger-posture-rollup"},{"title":"Do-Not-Originate (DNO) Caller-ID Blocking","href":"/compliance/do-not-originate"},{"title":"CALEA Lawful-Intercept Provisioning","href":"/compliance/calea-intercept"},{"title":"Voice Data Residency \u0026 Retention","href":"/compliance/voice-data-residency"},{"title":"Data Residency Overview","href":"/compliance/data-residency-overview"},{"title":"Pin, lock, and run a governed data-residency migration","href":"/guides/data-residency-pin-lock-migrate"},{"title":"Reading the subprocessor registry","href":"/compliance/subprocessor-registry"},{"title":"Immutable Archival Export (WORM)","href":"/compliance/archival-export"},{"title":"Trust Center vs Compliance Center — which surface serves which audience","href":"/compliance/trust-center-vs-workspace"},{"title":"Trust Center evidence pack","href":"/compliance/trust-center-evidence-pack"},{"title":"Stream audit logs to your SIEM","href":"/compliance/siem-sinks"},{"title":"Audit log export, chain verification, and refresh workflow","href":"/compliance/audit-export"},{"title":"Legal Holds on Messaging Conversations","href":"/compliance/legal-hold"},{"title":"Per-Domain Data Retention Policy","href":"/compliance/data-retention-policy"},{"title":"WhatsApp Restricted \u0026 Prohibited Content Policy","href":"/compliance/whatsapp-content-policy"},{"title":"WhatsApp Meta Policy Cadence \u0026 Tenant-Owned Posture","href":"/compliance/whatsapp-meta-policy-cadence"},{"title":"Data Subject Access Requests (DSAR)","href":"/compliance/dsar"},{"title":"Proof-of-Deletion Certificate Runbook","href":"/guides/compliance-dsar-erasure-certificate-runbook"},{"title":"On-demand message redaction","href":"/guides/on-demand-message-redaction"},{"title":"Data Processing Agreement (GDPR Article 28)","href":"/compliance/data-processing-agreement"},{"title":"GDPR Processing Register (ROPA + DPIA)","href":"/compliance/privacy-register"},{"title":"Breach incident register (GDPR Art. 33/34)","href":"/compliance/breach-incident-register"},{"title":"Operate the GDPR breach-incident register","href":"/compliance/breach-incidents-gdpr-register"},{"title":"DPO \u0026 EU/UK Representative Designation (GDPR Art.37 / Art.27)","href":"/compliance/dpo-representative"},{"title":"Consent Management \u0026 Receipts","href":"/compliance/consent-management"},{"title":"The Affirmative Opt-In Gate (consent_required)","href":"/compliance/consent-required-gate"},{"title":"Confirmed Consent (Double Opt-In) Handshakes","href":"/compliance/double-opt-in"},{"title":"Opt-in disclosure templates that clear 10DLC vetting","href":"/compliance/opt-in-disclosure-templates"},{"title":"Consent Posture: The Unknown-Consent Policies","href":"/compliance/consent-default-policy"},{"title":"Ad Consent Signals: TCF, GPP, GPC \u0026 us_privacy","href":"/compliance/ad-consent-signals"},{"title":"Opt-Out \u0026 Suppression Lists","href":"/compliance/opt-out-suppression"},{"title":"Bulk-import a suppression list from CSV","href":"/guides/suppression-csv-bulk-import"},{"title":"Opt-Out Keyword Alias Table","href":"/compliance/opt-out-keyword-alias-table"},{"title":"Opt-Out Entry Points by Channel","href":"/compliance/opt-out-entry-points-by-channel"},{"title":"Preference center: tenant controls and contract","href":"/compliance/preference-center"},{"title":"Suppression vs Consent Precedence Model","href":"/compliance/consent-vs-suppression-model"},{"title":"TCPA Reasonable Revocation (2025): One-to-One Consent Vacatur and the Reasonable-Revocation Era","href":"/compliance/tcpa-reasonable-revocation-2025"},{"title":"Keyword opt-outs on WhatsApp, RCS \u0026 Viber","href":"/guides/opt-out-rules-whatsapp-rcs"},{"title":"Fraud Shield — Tenant Triage \u0026 Chargeback Evidence","href":"/compliance/fraud-shield"},{"title":"Fraud Review Triage — Run the Response Loop","href":"/compliance/fraud-review-triage"},{"title":"Inbound Country Gate — Block or Flag Inbound Origins by Country","href":"/compliance/inbound-country-gate"},{"title":"Contact PII Vault (Tokenize + Detokenize)","href":"/compliance/pii-vault"},{"title":"Brand impersonation watchlist, scan \u0026 takedown cases","href":"/compliance/brand-impersonation-takedown"},{"title":"Wire a brand-identity watchlist and run smishing takedown cases","href":"/guides/brand-impersonation-takedown"},{"title":"Branded Calling (Rich Call Data) Configuration","href":"/compliance/branded-calling"},{"title":"Voice Destination Auto-Blocks (Traffic Pumping \u0026 Wangiri)","href":"/compliance/voice-destination-auto-blocks"},{"title":"Per-channel rate overrides","href":"/compliance/channel-rate-overrides"},{"title":"Fraud caps","href":"/compliance/fraud-caps"},{"title":"Frequency Caps as a TCPA Litigation-Risk Control","href":"/compliance/frequency-caps-compliance-posture"},{"title":"View and clear spend-anomaly auto-mitigations","href":"/guides/compliance-spend-anomaly-mitigations-self-serve"},{"title":"Export Consent \u0026 Suppression Records","href":"/compliance/consent-suppression-export"},{"title":"Compliance health","href":"/compliance/compliance-health"},{"title":"Compliance Readiness Summary","href":"/compliance/compliance-readiness-summary"},{"title":"Restricted \u0026 Prohibited Industries","href":"/compliance/restricted-industries"},{"title":"Political Campaign and GOTV Messaging for the 2026 US Cycle","href":"/compliance/political-campaign-gotv-messaging-2026"},{"title":"Country Compliance Requirements","href":"/compliance/country-requirements"},{"title":"Regional Posture Hub — Per-Country Rules Index","href":"/compliance/country-rules-directory"},{"title":"Sender-ID Decision Tree by Market","href":"/compliance/sender-id-by-market-decision-tree"},{"title":"Argentina CCM/AFIP Rules","href":"/compliance/argentina-enacom-rules"},{"title":"Country Rules Auto-Refresh Feeds","href":"/compliance/country-rule-feeds"},{"title":"CPNI (FCC U.S. Telecommunications)","href":"/compliance/cpni"},{"title":"Customer-Managed Keys (BYOK)","href":"/compliance/byok-customer-managed-keys"},{"title":"BYOK: register, activate, rotate, and revoke customer-managed keys","href":"/guides/compliance-byok-keys"},{"title":"BYOK rotation and lifecycle runbook","href":"/guides/compliance-byok-rotation-runbook"},{"title":"KYC Documents \u0026 the Compliance-Profile Lifecycle","href":"/compliance/documents-kyc"},{"title":"The KYC identity model: documents, profiles, and destinations","href":"/compliance/kyc-identity-model"},{"title":"Tenant-side KYC submission and renewal runbook","href":"/compliance/kyc-profile-submission-runbook"},{"title":"Regulated number-purchase compliance packets","href":"/guides/regulated-number-purchase-packets"},{"title":"KYC Submissions \u0026 Documents: Troubleshooting","href":"/troubleshooting/kyc-submission-and-documents"},{"title":"Assemble a Shared Compliance Profile Across Gated Surfaces","href":"/compliance/compliance-profile-assembly"},{"title":"10DLC brand \u0026 campaign compliance profiles","href":"/compliance/10dlc-brand-campaign-profiles"},{"title":"10DLC preflight: score, verdict, and finding codes","href":"/compliance/10dlc-preflight-linter"},{"title":"WhatsApp Business verification as a compliance profile","href":"/compliance/whatsapp-business-verification"},{"title":"Create a compliance profile with the wizard","href":"/guides/compliance-profile-wizard"},{"title":"Compliance-profile use cases and the surface each one opens","href":"/compliance/compliance-profile-use-cases"},{"title":"Sender-ID Registration","href":"/compliance/sender-id-registration"},{"title":"Sender-ID pre-registration: the market-choosing matrix","href":"/guides/sender-id-country-matrix"},{"title":"Sender-ID registration by market: the per-market walkthrough","href":"/guides/sender-id-registration-by-market"},{"title":"Country rules console: the per-country regulation map","href":"/guides/compliance-country-rules-console"},{"title":"Country-Gate Posture Playbook","href":"/guides/country-rules-posture-playbook"},{"title":"US CAN-SPAM Compliance for Email","href":"/compliance/can-spam"},{"title":"US TCPA Junk Fax Prevention Act Compliance for Fax","href":"/compliance/tcpa-junk-fax-posture"},{"title":"Gmail \u0026 Yahoo Bulk-Sender Requirements as a Compliance Posture","href":"/compliance/email-bulk-sender-requirements"},{"title":"List-Unsubscribe Header Posture for Email Deliverability","href":"/compliance/email-list-unsubscribe-posture"},{"title":"Canada PIPEDA Posture Guide","href":"/compliance/pipeda-canada"},{"title":"Quebec Law 25 Posture Guide","href":"/compliance/quebec-law-25-posture"},{"title":"CASL (Canada's Anti-Spam Legislation) for Commercial Email","href":"/compliance/casl-canada-anti-spam"},{"title":"Australia: Spam Act 2003 and the Do Not Call Register","href":"/compliance/au-spam-act"},{"title":"New Zealand: Unsolicited Electronic Messages Act 2007","href":"/compliance/nz-uem-act-sender-rules"},{"title":"DLT-India Onboarding","href":"/compliance/dlt-india"},{"title":"India DPDP Act 2023 Posture Guide","href":"/compliance/dpdp-india"},{"title":"Philippines NTC Sender Rules","href":"/compliance/philippines-sender-rules"},{"title":"Vietnam MIC Sender Registration + Marketing Rules","href":"/compliance/vietnam-mic-sender-rules"},{"title":"Mexico NOM-184 Consent Posture","href":"/compliance/mx-nom-184-consent"},{"title":"Mexico LFPDPPP Data-Protection Posture","href":"/compliance/mexico-lfpdppp-posture"},{"title":"Colombia Habeas Data + CRC Sender Rules","href":"/compliance/colombia-habeas-data-rules"},{"title":"Chile Ley 21.719 Data-Protection Rules","href":"/compliance/chile-ley-21719-data-protection"},{"title":"Peru Ley 29733 Data-Protection Rules","href":"/compliance/peru-ley-29733-data-protection"},{"title":"UK PECR and ePrivacy for Marketing Sends and Calls","href":"/compliance/uk-pecr-eprivacy"},{"title":"Brazil LGPD + Anatel Sender Posture","href":"/compliance/lgpd-brazil"},{"title":"Brazil Anatel Sender-ID Registration Rules","href":"/compliance/brazil-anatel-sender-rules"},{"title":"Brazil A2P Messaging: Anatel, LGPD and WhatsApp","href":"/compliance/brazil-a2p-sms-anatel-lgpd-2026"},{"title":"France Marketing SMS Rules","href":"/compliance/fr-marketing-sms-rules"},{"title":"Spain AEPD + LGT Marketing Rules","href":"/compliance/spain-aepd-lgt-rules"},{"title":"Japan APPI (Act on Protection of Personal Information)","href":"/compliance/japan-appi"},{"title":"Singapore and Thailand PDPA Posture","href":"/compliance/pdpa-singapore-thailand"},{"title":"Singapore PDPA (PDPC SG + DNC Register)","href":"/compliance/singapore-pdpa"},{"title":"Thailand PDPA (PDPA B.E. 2562 + PDPC Thailand)","href":"/compliance/thailand-pdpa"},{"title":"South Korea PIPA + KISA Opt-Out Posture","href":"/compliance/south-korea-pipa"},{"title":"Germany SMS \u0026 Voice Marketing Rules (UWG + BNetzA)","href":"/compliance/germany-uwg-bnetza"},{"title":"Austria TKG 2021 + RTR/DSB Sender Rules","href":"/compliance/austria-tkg-rtr-dsb-sender-rules"},{"title":"Switzerland Revised FADP + UCA Sender Rules","href":"/compliance/switzerland-fadp-ucw-sender-rules"},{"title":"Poland UKE + RODO Sender Rules","href":"/compliance/poland-uke-rodo-sender-rules"},{"title":"Netherlands Number \u0026 Sender Rules (ACM)","href":"/compliance/netherlands-acm-rules"},{"title":"Belgium BIPT + GBA Sender Rules","href":"/compliance/belgium-bipt-gba-sender-rules"},{"title":"Ireland Number \u0026 Sender Rules (ComReg + DPC)","href":"/compliance/ireland-comreg-dpc-sender-rules"},{"title":"Finland Number \u0026 Sender Rules (Traficom, formerly FICORA)","href":"/compliance/finland-ficora-rules"},{"title":"Sweden Number \u0026 Sender Rules (PTS)","href":"/compliance/sweden-pts-rules"},{"title":"Denmark Marketing Act Sender Rules (Markedsføringsloven, Datatilsynet)","href":"/compliance/denmark-marketing-act-sender-rules"},{"title":"Norway Marketing Act Sender Rules (Markedsføringsloven, Nkom)","href":"/compliance/norway-marketing-act-sender-rules"},{"title":"Portugal ePrivacy + CNPD Sender Rules (Lei 41/2004)","href":"/compliance/portugal-eprivacy-cnpd-sender-rules"},{"title":"Indonesia KOMDIGI Sender \u0026 Marketing Rules","href":"/compliance/indonesia-komdigi-sender-rules"},{"title":"Italy AGCOM + GDPR Sender Rules","href":"/compliance/italy-agcom-sender-rules"},{"title":"South Africa POPIA Posture","href":"/compliance/south-africa-popia"},{"title":"Turkey: KVVK and BTK Sender-ID Rules","href":"/compliance/turkey-kvkk-btk"},{"title":"Uae tdra sender rules","href":"/compliance/uae-tdra-sender-rules"},{"title":"Saudi Arabia CST Sender \u0026 Marketing Rules","href":"/compliance/saudi-arabia-cst-sender-rules"},{"title":"Malaysia MCMC Sender \u0026 Marketing Rules","href":"/compliance/malaysia-mcmc-sender-rules"},{"title":"Egypt NTRA Sender \u0026 Marketing Rules","href":"/compliance/egypt-ntra-sender-rules"},{"title":"Nigeria NCC Sender \u0026 Marketing Rules","href":"/compliance/nigeria-ncc-sender-rules"},{"title":"Kenya CA Sender \u0026 Marketing Rules","href":"/compliance/kenya-ca-sender-rules"},{"title":"Israel Sender \u0026 Marketing Rules (Spam Law 2008)","href":"/compliance/israel-isa-sender-rules"},{"title":"Singapore SGNIC Sender-ID Registration Rules","href":"/compliance/singapore-sgnic-sender-rules"},{"title":"Hong Kong PCPD + OFCA Sender Rules","href":"/compliance/hong-kong-pcpd-ofca-sender-rules"},{"title":"Long-Tail Market FAQ: KVVK, PIPA, APPI, POPIA, PDPA","href":"/compliance/long-tail-market-faq"},{"title":"Compliance evidence binder","href":"/compliance/evidence-binder"},{"title":"TCPA Evidence Pack in the Binder","href":"/compliance/tcpa-evidence-binder"},{"title":"Compliance activation bundles","href":"/compliance/plugin-marketplace"},{"title":"Vertical bundles: activation lifecycle semantics","href":"/compliance/vertical-bundles-activation-semantics"},{"title":"Troubleshooting: vertical-bundle activations duplicated, checklist stuck, or version-frozen","href":"/troubleshooting/vertical-bundle-activation-duplicates"},{"title":"Compliance endpoint permissions: the role matrix","href":"/troubleshooting/compliance-endpoint-permissions"},{"title":"TCPA Known-Litigator Gate","href":"/compliance/tcpa-known-litigator"},{"title":"Send Gates: BAA, Quiet Hours, DNC, RND, RMD, Emergency Codes, DNO \u0026 Country Rate","href":"/compliance/send-gates"},{"title":"Emergency Stop: The Org-Wide Outbound Halt","href":"/compliance/emergency-stop"},{"title":"Quiet-Hours Preview: Channel-by-Channel Semantics","href":"/compliance/quiet-hours-preview"},{"title":"Emergency Stop Runbook: The Org-Wide Kill Switch","href":"/guides/compliance-emergency-stop"},{"title":"Preference center: the public opt-in/opt-out page","href":"/guides/preference-center-opt-out-page"},{"title":"Choose your suppression entry point: CSV import, Consent API, or Preference Center","href":"/guides/suppression-three-entry-points"},{"title":"Reconcile suppression across email and phone","href":"/guides/compliance-multi-address-suppression-reconciliation"},{"title":"Pre-Send Policy Scanner \u0026 DLP","href":"/compliance/policy-scanner"},{"title":"Spam-Keyword Deliverability Classifier","href":"/compliance/spam-keywords"},{"title":"AI Brand-Safety Scan","href":"/compliance/ai-brand-safety-scan"},{"title":"DLP scanner — data classes \u0026 strict mode","href":"/compliance/dlp-scanner"},{"title":"Inbox AI privacy — keep message content off the LLM","href":"/compliance/inbox-ai-privacy"},{"title":"FCC Robocall Mitigation Database (RMD): Filing Lifecycle","href":"/compliance/rmd-registration"},{"title":"FCC Robocall Mitigation Database (RMD) certification","href":"/guides/compliance-rmd-robocall-mitigation"},{"title":"Honeypot trap DIDs and the caller-reputation feed","href":"/guides/honeypot-registry-operations"},{"title":"ITG Traceback: Handling Requests for Originating Numbers","href":"/compliance/itg-traceback"},{"title":"DNC Scrubbing: Sources, Freshness, and the Check Endpoint","href":"/compliance/dnc-scrub"},{"title":"Short-code preflight: checks and remediation","href":"/compliance/shortcode-preflight"},{"title":"Carrier Deactivation (Churn) Scrub: List Hygiene Against Carrier Disconnects","href":"/compliance/deactivation-scrub"},{"title":"Finalize-and-purge runbook: the 24-hour recording lifecycle after deactivation","href":"/guides/deactivation-scrub-minimization-runbook"},{"title":"Recycled-Number Complaint Hygiene: Deactivation, RND, and the List Scrub Working Together","href":"/guides/compliance-recycled-number-hygiene-runbook"},{"title":"RCS Universal Profile 3.0 rich deep-link guardrails","href":"/compliance/rcs-up3-guardrails"},{"title":"Report apparent CSAM to the NCMEC CyberTipline","href":"/guides/media-csam-reporting-runbook"},{"title":"Batch DNC Pre-Flight Scrubbing","href":"/guides/dnc-preflight-scrub"},{"title":"List-Hygiene Projection: DNC Suppression on the Pre-Flight Preview","href":"/guides/campaign-list-hygiene-projection"},{"title":"RND Safe-Harbor Pre-Contact Number Scrubbing","href":"/guides/rnd-safe-harbor-preflight"},{"title":"RND Scrub: FCC Reassigned Numbers Database Reference","href":"/compliance/rnd-scrub"},{"title":"US Calling Windows: Federal TCPA + State Overlays","href":"/compliance/state-calling-windows"},{"title":"Number Timezone and State Resolution","href":"/compliance/number-timezone-resolution"},{"title":"Emergency Calling: Kari's Law and RAY BAUM'S Act Posture","href":"/compliance/emergency-calling-and-karis-ray-baums-posture"},{"title":"Voice Guard: the Federal Dialing-Window Decision Check","href":"/compliance/voice-guard"},{"title":"The sole platform-global compliance guard (invariant #68)","href":"/compliance/invariant-68-explainer"},{"title":"Voice Guard Sentinel: the Observability Contract","href":"/compliance/voice-guard-sentinel-observability"},{"title":"Voice Guard Observability: the Deep-Dive Runbook","href":"/compliance/voice-guard-observability-deep-dive"},{"title":"Voice traffic-lane resolution at the federal dial gate","href":"/compliance/voice-traffic-lane-resolution"},{"title":"Dialer Abandoned-Call Safe Harbor","href":"/compliance/dialer-abandoned-call-safe-harbor"},{"title":"UK Ofcom Dropped-Call Posture","href":"/compliance/uk-ofcom-abandoned-call-posture"},{"title":"Troubleshoot a pending number or Sender ID","href":"/compliance/troubleshooting-pending-gated-surfaces"},{"title":"Troubleshoot a 'blocked' send — map the code to the gate","href":"/compliance/troubleshooting-blocked-class-errors"},{"title":"Compliance profile lifecycle errors — INCOMPLETE, REQUIRED, NOT_APPROVED, LOCKED, IN_USE","href":"/compliance/compliance-profile-lifecycle-errors"},{"title":"Carrier rejection feedback: reading your rejection reason and fixing it","href":"/compliance/carrier-rejection-feedback"},{"title":"Compliance send-gate error codes — decide the gate, own the fix, re-verify","href":"/compliance/troubleshooting-compliance-error-codes"},{"title":"Sends blocked by consent gates — 403 consent_required","href":"/troubleshooting/consent-required-blocked-sends"},{"title":"Compliance-gate error codes FAQ","href":"/compliance/compliance-gate-error-codes-faq"},{"title":"Send-gate decision fork — which check rejected your send","href":"/compliance/send-gate-decision-fork"},{"title":"The send-gate evaluation chain — which gate fires, in which order","href":"/compliance/send-gate-evaluation-chain"},{"title":"Run a quarterly compliance posture review","href":"/guides/compliance-posture-quarterly-review"},{"title":"Operating Compliance-Health Scores as an Early-Warning Signal","href":"/guides/compliance-health-alerting-runbook"},{"title":"Your first compliance posture, end to end: from tenant-owned controls to a sealed evidence binder","href":"/guides/compliance-first-evidence-binder-walkthrough"},{"title":"Assemble and seal an evidence binder, read gated surface verdicts","href":"/guides/compliance-evidence-binder"},{"title":"Fulfill a DSAR and operate the breach-incident register","href":"/guides/compliance-dsar-breach-register"},{"title":"Run the privacy register — ROPA intake, DPIA screening, and the Art.30 export","href":"/guides/compliance-privacy-register"},{"title":"Work a Fraud Shield alert end to end","href":"/guides/compliance-fraud-shield"},{"title":"Deploy the public self-service DSAR intake portal","href":"/guides/self-service-dsar-portal"},{"title":"DSAR Self-Service Portal End-to-End","href":"/guides/dsar-portal-setup"},{"title":"Execute the DPA and BAA, then manage per-call recording consent","href":"/guides/compliance-dpa-baa-recording-consent"},{"title":"Legal holds: preserve recordings and message threads from retention sweeps","href":"/guides/compliance-legal-hold"},{"title":"Third-party archive connectors: deliver records to Smarsh, Global Relay, or Bloomberg Vault","href":"/guides/compliance-archive-connectors"},{"title":"Navigating the Settings → Compliance Hub","href":"/guides/compliance-hub-navigation"},{"title":"Upload and manage compliance documents","href":"/guides/settings-compliance-documents-console"},{"title":"Compliance Translation Parity Tracker","href":"/translation-parity-compliance"}]},{"group":"Legal","pages":[{"title":"Legal index","href":"/legal/index"},{"title":"Open source attribution","href":"/legal/attribution"}]},{"group":"Brand \u0026 press","pages":[{"title":"Press and brand resources","href":"/press-kit"},{"title":"How to use the press kit","href":"/press-kit-usage-guide"}]},{"group":"Tutorials","pages":[{"title":"Compliance integration recipes","href":"/tutorials/compliance-integration-recipes"}]},{"group":"Changelog","pages":[{"title":"Orbit changelog: product updates and API changes","href":"/changelog"}]}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides/whatsapp/getting-started"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/overview"}]},{"tab":"SDKs","pages":[{"title":"SDKs","href":"/sdks"}]},{"tab":"Reference","pages":[{"title":"Reference","href":"/reference/programmable-voice-dsl"}]}]},"basePath":"","title":"Inbound connector webhook authentication model - Devotel Orbit Documentation","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":[],"chunks":[]}