Skip to main content

Pricing API

Pricing endpoints exposed by the Devotel CPaaS API Base path: /api/v1 Endpoint count: 14

List pricing change history

GET /api/v1/pricing/changelog
Returns the pricing change log — when a rate or override was created, updated, or retired, with its value and scope. Super-admins see the full internal audit trail and may filter by organizationId; a tenant developer gets a sanitised view scoped to their own org plus global rate-card changes. Use it to explain a rate change on the billing dashboard. Cap results with limit (default 100, max 500).
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.

Get your effective rate sheet

GET /api/v1/pricing/effective-rates
Returns the effective rates for your organization — the global platform rates plus any per-org overrides, collapsed to the single row the billing resolver would actually charge for each (channel, sub-type, country, direction) lane. Each row shows the base rate, the effective per-unit price in cents, and whether a custom rate applied. Use it to show a tenant the rates they are actually billed.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.

Estimate the cost of a message

GET /api/v1/pricing/estimate
Returns the applicable per-unit rate for a single send. Pass a channel and a destination to phone number in E.164 form; the endpoint resolves the destination country and returns the matching rate, or null when no rate is published for that lane. Pass allIn=true to also get an itemized surcharge breakdown (US A2P 10DLC registration, call recording, transcription, premium support) so a sales demo can answer the ‘what does this lane REALLY cost’ question from one call; optional include filters the list to a chosen set of surcharge codes (repeatable or comma-separated). Returns 422 when channel or to is missing.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.

List operator-level SMS rates

GET /api/v1/pricing/mccmnc-rates
Returns the customer-facing SMS rate card at MCCMNC (mobile-operator) granularity, with your organization’s markup already applied. Filter with search (operator, country, or MCCMNC) and country, and page through results with cursor and limit. An operator with no published cost surfaces a null your_rate (the “Contact sales” row); callers without their own negotiated markup see the current platform default.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.

Get messaging rates for a country

GET /api/v1/pricing/messaging
Twilio Pricing API parity for messaging: returns per-unit SMS, MMS, WhatsApp, RCS, and Viber rates for one country (ISO 3166-1 alpha-2 country query param), including your organization’s effective price after any per-org overrides are applied. A channel with no published rate falls back to the platform default. Use it to preview message costs before sending. The country filter is a price-lookup key only — it does not route traffic. Returns 422 when country is missing or malformed.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.

List organizations for the rate-card picker

GET /api/v1/pricing/organizations
Returns one row per organization with a hasCustomRates flag set when the org has at least one per-org override. Use it to populate the admin rate-card editor’s org picker so an operator can switch between the global rate card and a tenant’s custom rates. Keyset-paginated by (name, id); pass all=true to load the whole roster in one request instead of walking the cursor. Super-admin only.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.

List per-org pricing overrides

GET /api/v1/pricing/overrides
Returns per-organization pricing overrides. Pass an organizationId query param to scope the list to one tenant, or omit it to return the active overrides across all tenants. Use it to review which lanes a tenant (or the whole platform) has custom rates on. Super-admin only; the list is capped at 5000 rows.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.

Get phone-number rental prices for a country

GET /api/v1/pricing/phone-numbers
Twilio Pricing API parity for phone numbers: returns the monthly rental cost of purchasable DIDs in one country (ISO 3166-1 alpha-2 country query param), grouped by number type (local, mobile, toll-free, national, short code) with the cheapest available price and how many are in stock. Only unassigned, purchasable inventory is counted. Use it to preview number costs before buying. Returns an empty list when the country has no purchasable inventory.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.

List all pricing rates

GET /api/v1/pricing/rates
Returns every platform rate-card row — the global defaults plus any per-org custom rates — as a flat list. Use it from the admin rate-card editor to review the whole rate card before adding, editing, or deleting a lane. Super-admin only; the list is capped at 5000 rows to protect api-pod heap.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.

Get the RTC-PaaS rate card

GET /api/v1/pricing/rtc-rate-card
Returns the static real-time-communication (video/audio room) rate card: the per-participant-minute price for each resolution tier (audio-only, SD, HD, Full-HD), the list of bundled add-ons, and the extra-RTMP-destination, recording-storage, and dedicated-SFU fees. Everything is billed at one blended per-minute rate per tier, so callers can render the pricing simulator UI without a round-trip per keystroke. Pair it with POST /pricing/rtc-simulate for a full workload forecast.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.

Get voice rates for a country

GET /api/v1/pricing/voice
Twilio Pricing API parity for voice: returns per-minute inbound and outbound voice rates for one country (ISO 3166-1 alpha-2 country query param), including the tenant’s effective price after any per-org overrides are applied. Use it to preview call costs before placing or receiving traffic. The country filter is a price-lookup key only — it does not select a carrier or route traffic. Requires a country code; returns 422 when it is missing or malformed.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.

Get the published platform price list

GET /api/v1/public/pricing
Returns Orbit’s published, per-unit platform price list for every channel — the single transparent pay-as-you-go rate card with no plan tiers and no contact-sales gate. Unauthenticated and IP rate-limited so a prospect can verify pricing before signing up. Pass an optional ISO 3166-1 alpha-2 country query to get the published country-specific rates; without it you get the platform-default baseline. Exposes only publicly-listed platform rates — never a tenant’s negotiated per-org overrides.

Simulate RTC-PaaS cost

POST /api/v1/pricing/rtc-simulate
Runs a deterministic cost forecast for a real-time-communication workload. Submit a resolution tier, participant count, minutes per room, rooms per month, and any optional add-ons (extra RTMP destinations, recording storage, dedicated SFU) and get back an itemized breakdown that mirrors the line items on the eventual invoice. Use it before launch to size a video/audio deployment and predict the monthly bill. Returns 422 for out-of-range input.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.

Simulate what-if repricing

POST /api/v1/pricing/whatif-simulate
Replays a window of your OWN observed traffic (aggregated per billable lane) against a CANDIDATE rate card and projects the cost side-by-side with what the traffic was actually billed. Submit up to 5000 usage lanes and 5000 candidate rates; traffic is held fixed and only the rate card is swapped — the “what-if”. It is a read-only cost estimate: it neither writes the candidate rate card nor initiates any send. Returns 422 for out-of-range input.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.