Skip to main content

The developer surface

The developer surface is the programmatic mirror of the dashboard’s developer hub: governance and budgets for your API keys, event-stream sinks and inbound sources, API analytics, contract downloads (AsyncAPI, GraphQL SDL, Postman), SDK and connector catalogs, and OAuth marketplace metadata. It is what to hit first when provisioning an integration — everything below is read-mostly config and observability, never outbound message origination.
Sandbox routing for every operation on this page rides on the X-Test-Mode request header the auto-generated sections annotate: a sandbox opt-in for Clerk-session-authenticated calls that routes through the test-mode pipeline (no provider delivery, no credits deducted, meta.test_mode: true). Live API keys (dv_live_sk_*) ignore it; server-to-server clients exercise sandbox with a test-prefixed key (dv_test_sk_*), which enables sandbox unconditionally. The per-request pin is the same one the sandbox test-mode guide covers.
Samples below show the real success envelope a 200 returns — data plus a meta block carrying request_id and timestamp. On the download-style endpoints (contracts, blueprints, SDK sources) the body is the artifact itself rather than an envelope; those shots are quoted verbatim per the console. Errors follow the { error, meta } shape spelt out under Errors worth branching on and the tables at the bottom. For SDK walkthroughs in your language, start from the Node.js guide — the catalog endpoint below (GET /api/v1/developer/sdks) is how you discover the published coordinates programmatically, and the /api/v1/developers/cdp-sdk/* endpoints below download tenant-wired tracking SDK sources. The guides that pair with this page: developer hub overview, API governance console, developer API playground, and error handling examples for the decision matrix.

Response envelopes for the generated shells

The operations below all return a 200 whose JSON body the generated sections render as the empty "data": {} shell. Each block ships the real { data, meta } envelope the route returns — copy it as the parsing target, then pull the fields your integration actually branches on. Download operations (AsyncAPI, GraphQL SDL, Postman, connector blueprints, SDK sources, OAuth manifest) wrap a download pointer or the artifact payload inside the same envelope.

1. List dated API versions and deprecation lifecycle

GET /api/v1/developer/api-versions

2. View per-API-key spend budgets

GET /api/v1/developer/budgets

3. Get the event-streaming sink config for one kind

GET /api/v1/developer/event-sinks/{kind}

4. Get the inbound event-source config for one kind

GET /api/v1/developer/event-sources/{kind}

5. View API rate-limit & quota governance

GET /api/v1/developer/governance

6. Download the developer GraphQL schema (SDL)

GET /api/v1/developer/graphql/schema

7. List received inbound webhooks

GET /api/v1/developer/inbound-webhooks

8. Get an inbound webhook by id

GET /api/v1/developer/inbound-webhooks/{id}

9. List official SDK libraries

GET /api/v1/developer/sdks

10. Get API usage statistics for the current tenant

GET /api/v1/developer/usage-stats

11. API analytics by API key

GET /api/v1/developers/api-analytics/by-key

12. API analytics by endpoint

GET /api/v1/developers/api-analytics/endpoints

13. API analytics overview

GET /api/v1/developers/api-analytics/overview

14. API analytics rate-limit usage

GET /api/v1/developers/api-analytics/rate-limits

15. API analytics time series

GET /api/v1/developers/api-analytics/timeseries

16. Download the AsyncAPI contract for platform events

GET /api/v1/developers/asyncapi.json

17. List available CDP client tracking SDKs

GET /api/v1/developers/cdp-sdk/catalog

18. Download a CDP client SDK source for a platform

GET /api/v1/developers/cdp-sdk/source/{platform}

19. List connector triggers and actions

GET /api/v1/developers/connector/catalog

20. Download the Make (Integromat) app blueprint

GET /api/v1/developers/connector/make

21. Download the n8n node-pack definition

GET /api/v1/developers/connector/n8n

22. Download the Zapier app definition

GET /api/v1/developers/connector/zapier
GET /api/v1/developers/oauth/consent-preview

24. Download the OAuth app-registration manifest

GET /api/v1/developers/oauth/manifest

25. List grantable OAuth scopes

GET /api/v1/developers/oauth/scopes

26. Download a Postman collection for this workspace

GET /api/v1/developers/postman-collection

27. Download a Postman environment for this workspace

GET /api/v1/developers/postman-environment

28. Dry-run one polled batch through the inbound consume core

POST /api/v1/developer/event-sources/{kind}/consume-batch

29. Run a GraphQL query over CPaaS/CDP resources

POST /api/v1/developer/graphql

30. Register interest in the Network APIs early-access program

POST /api/v1/developer/network-apis/early-access

31. Proxy an API request from the try-it console

POST /api/v1/developer/try-it

32. Ask-Orbit — natural-language API analytics

POST /api/v1/developers/api-analytics/ask

33. Set per-API-key spend budget

PUT /api/v1/developer/budgets/{keyId}

34. Set per-API-key rate-limit & spend override

PUT /api/v1/developer/governance/keys/{keyId}

35. Set org-wide API rate-limit & spend governance default

PUT /api/v1/developer/governance/org

36. Update the event-streaming sink config for one kind

PATCH /api/v1/developer/event-sinks/{kind}

37. Update the inbound event-source config for one kind

PATCH /api/v1/developer/event-sources/{kind}

Errors worth branching on

These five failures cover the webhook register + test-fire (POST /api/v1/developer/webhooks, POST /api/v1/developer/webhooks//test), which connect-checks every save. Each block below is a full { error, meta } envelope as the API returns it, and the matrix at the bottom answers retry vs surface for the same five classes. For the platform-wide decision table these branches plug into, see the error handling guide.

401 — Unauthorized

A 401 on this page is the bearer key failing before the route ran — it never means the resource is wrong. Rotate the key or re-mint the scoped token; retrying the same request changes nothing.

403 — Forbidden

A 403 means the key authenticated but the operation is gated by scope — check the key’s scopes on the developer page; a 403 is never a data-not-found shape.

422 — Schema

A 422 means the payload did not match the request schema — branch on error.details.field and resend with a publicly reachable https:// webhook URL instead of blind-retrying the same body.

429 — Rate

The Retry-After header and error.details.retry_after are both set on every 429 — resend the SAME request after the lower of the two.

402 — Feature gate

Back off for window_seconds — same-class calls keep 402ing until the window opens.

60-second retry matrix

Worked request and response samples

Copy the request as written, substitute your own ids, and compare the response envelope — a success in the same shape the numbered error sections spell out.

List inbound webhooks

GET /api/v1/developer/inbound-webhooks
The registered sinks that receive provider callbacks — each row announces the subscribed event kinds it accepts. Request

Read one inbound webhook in full

GET /api/v1/developer/inbound-webhooks/{id}
The raw body (base64), headers, and the provider’s parsed event from the received log — the payload the webhook debugging guide walks through. A row owned by another organization is a 404, not a 403. Request

Inspect dated API versions

GET /api/v1/developer/api-versions
The lifecycle registry: which versions exist, which is current, what version your request resolved to from the X-Api-Version pin header, and where the migration guide lives. Pin a dated version with the X-Api-Version request header. Request

View per-API-key spend budgets

GET /api/v1/developer/budgets
Every active key with its monthly spend ceiling (minor currency units), alert thresholds, the last-notified-per-percent watermark, and live request usage. Keys with no budget return budget: null. Request

Set a per-key spend budget

PUT /api/v1/developer/budgets/{keyId}
Caps the monthly spend on one key; clearing (limit_minor: null) removes the cap and re-arms the alert watermark. Only the fields you send change. Request

View the event-streaming sink config

GET /api/v1/developer/event-sinks/{kind}
The platform-event sink configuration — how the message.* / call.* taxonomy streams to your Kafka topic or batch HTTP collector. Credentials never leave storage encrypted; the response carries only a credentials_configured flag. Request

Update the event-streaming sink config

PATCH /api/v1/developer/event-sinks/{kind}
Merge the fields you send; the destination’s kind discriminator must match the path segment. last_run_* fields are worker-owned and never accepted through this route. Request

Read the inbound event-source config

GET /api/v1/developer/event-sources/{kind}
The inbound mirror of the sink surface — a subscription-shaping config (topic, consumer group, type path) over your own Kafka source, ingested INTO Orbit. transport_enabled tells you whether the managed consumer is armed. Request

Update the inbound event-source config

PATCH /api/v1/developer/event-sources/{kind}
Same merge-only-fields semantics as the sink surface; run the dry-run below against your patched subscription before the transport worker polls. Request

Dry-run one polled batch through the inbound consume core

POST /api/v1/developer/event-sources/{kind}/consume-batch
Pipes one batch of raw Kafka messages through the deterministic consume engine and returns per-message disposition (landable / duplicate / filtered / dead_letter) plus per-partition commit offsets. Side-effect-free: no persist, no broker connection. Request

View org-wide rate-limit & quota governance

GET /api/v1/developer/governance
The governance console: the org default, every key’s effective limits (org default as overridden), and live usage with monthly headroom + alert flags. Request

Set the org-wide governance default

PUT /api/v1/developer/governance/org
Sets the org-wide defaults applied to every key without an override. Send null on a field to clear it; only the fields you send change. Request

Set a per-API-key governance override

PUT /api/v1/developer/governance/keys/{keyId}
Tightens (or raises within platform bounds) a key’s limits over the org default. All-null clears the override. Request

List official SDK libraries

GET /api/v1/developer/sdks
The SDK coordinate machine-readable catalog — each entry carries a published flag, the registry install command, and docs_url / source_url only where they resolve. Every pre-launch coordinate comes back published: false. This is the programmatic surface the SDK catalog guide and Node.js SDK page point back to. Request

Get API usage statistics for the current tenant

GET /api/v1/developer/usage-stats
Per-channel messaging totals and a daily series over the chosen window, scoped to terminal outbound statuses (delivered + failed) so the error rate is computed on the same denominator the dashboard does. The query uses the tenant’s own message store. Request

API analytics overview

GET /api/v1/developers/api-analytics/overview
The developer hub’s headline figures: all-traffic volume, api-key-scoped traffic, success/error split, and percentiles. Quality ratios (error_rate, p50_latency_ms, p95_latency_ms) are scoped to genuine api-key traffic and are null (not 0) when the key-scoped scope has no rows in the window — render an explicit unavailable placeholder, as they do on the dashboard. Request

API analytics by endpoint

GET /api/v1/developers/api-analytics/endpoints
Per-endpoint breakdown — request count, error rate, and latency percentiles for every method+path driven by API keys. Request

API analytics time series

GET /api/v1/developers/api-analytics/timeseries
A gap-filled series the dashboard charts over: bucket boundaries, request volume, and error count for plotting. Request

API analytics rate-limit usage

GET /api/v1/developers/api-analytics/rate-limits
How close the tenant is running to configured per-bucket limits — the same guard the governance console writes feed. Request

API analytics by API key

GET /api/v1/developers/api-analytics/by-key
Per-key attribution: rolling counts joined to the key’s human-readable name, last-used-at, and last-used-ip — with total_keys revealing when the view is truncated. Sentinel ids mark unattributed (Clerk session) or deleted keys. Request

Ask-Orbit — natural-language API analytics

POST /api/v1/developers/api-analytics/ask
A plain-English question over your own telemetry, parsed deterministically into a metric + window — no LLM round-trip. The response carries the one-line answer, the resolved metric, the telemetry snapshot, and understood: false when the question fell back to the default request-volume metric. Request

Run a GraphQL query over CPaaS/CDP resources

POST /api/v1/developer/graphql
A read-only shaped-round-trip surface over contacts, conversations, messages, and segments. Returns the standard GraphQL { data, errors } envelope (not the REST envelope) — a well-formed request whose query fails to parse still 200s with an errors array. The SDL below is served at GET /developer/graphql/schema. Request

Download the GraphQL schema (SDL)

GET /api/v1/developer/graphql/schema
The SDL document the query surface validates against. Content-Type: text/plain so a browser / codegen tool reads it directly. Request

Download the AsyncAPI contract for platform events

GET /api/v1/developers/asyncapi.json
AsyncAPI 2.6.0 document for the platform event taxonomy — one JSON-Schema envelope per event type, declarable download alongside OpenAPI / Postman. Request

List available CDP client tracking SDKs

GET /api/v1/developers/cdp-sdk/catalog
The dashboard picker surface — which client SDK artifacts the next endpoint downloads per platform, with the Segment-compatible method set each ships. Request

Download a CDP client SDK source for a platform

GET /api/v1/developers/cdp-sdk/source/{platform}
The drop-in tracking SDK source for web | ios | android, pre-wired to this tenant’s public ingest host — sent as a file attachment. Request

List connector triggers and actions

GET /api/v1/developers/connector/catalog
The “what can I automate?” preview — every trigger (subscribed webhook event) and action (routed REST endpoint) the Zapier / Make / n8n blueprints below expose. Request

Download the Zapier app definition

GET /api/v1/developers/connector/zapier
A Zapier Platform app definition pre-wired to this tenant’s base URL — sent as an attachment. Request

Download the Make blueprint

GET /api/v1/developers/connector/make
A Make (Integromat) custom-app blueprint pre-wired to this tenant’s base URL — sent as an attachment. Request

Download the n8n node-pack definition

GET /api/v1/developers/connector/n8n
The n8n-nodes-orbit community node-pack definition, pre-wired to this tenant’s base URL — sent as an attachment. Request

List grantable OAuth scopes

GET /api/v1/developers/oauth/scopes
The closed set of scopes a marketplace app may request — the same taxonomy the API-key middleware enforces; admin, the * wildcard, and billing are never grantable. Request
GET /api/v1/developers/oauth/consent-preview
Renders the install/consent rows for a space-delimited scope request and flags any scopes outside the grantable catalog. Request

Download the OAuth app-registration manifest

GET /api/v1/developers/oauth/manifest
The deterministic RFC 7591-shaped client-registration manifest — pre-wired to this tenant’s API host, with the authorization-code + PKCE flow metadata and the scope catalog. Request

Download a Postman collection

GET /api/v1/developers/postman-collection
A Postman v2.1 collection with every public endpoint pre-configured for your organization — sent as an attachment. Request

Download a Postman environment

GET /api/v1/developers/postman-environment
A Postman environment pre-filled with the base URL and org id — the API-key variable is secret and deliberately blank. Request

Proxy an API request from the try-it console

POST /api/v1/developer/try-it
The network proxy the dashboard’s try-it console runs through. Key-prefix validity is checked (dv_live_sk_, dv_test_sk_, dv_live_pk_, dv_test_pk_), and for GETs a body object becomes query-string parameters. The upstream response is echoed verbatim — the status_code + parsed headers + body are the live API’s. Request

Register interest in Network APIs early access

POST /api/v1/developer/network-apis/early-access
Capture a lead for the GSMA Open Gateway / CAMARA Network APIs roadmap — number-verification, SIM-swap, KYC-match, device-location — with no provider routing pre-launch. Request

Error shapes worth branching on

The developer surface returns the same { error, meta } envelope across every endpoint — the fields the webhooks register + 402/429 matrix at the top uses, extended to the config writes below. The retry decision comes from error.code (and, for RATE_LIMITED, error.details.retry_after). For the webhooks register + test-fire envelope ({ error, meta } and the retry matrix), see Errors worth branching on at the top of this page. The error handling guide covers the same decision table for every pillar.