Subaccounts API
For platforms reselling Orbit to their own customers — agencies, MSPs, vertical SaaS. A parent org creates and operates subaccount orgs, each with its own API keys, isolated data, optional custom branding and domain, and per-subaccount pricing. Base path:/api/v1/subaccounts
Authentication: Parent-org session JWT or API key with admin role.
Lifecycle
A subaccount created through the multi-step wizard starts as pending so an aborted setup never leaves a billing-active tenant behind.
POST /api/v1/subaccounts/{id}/finalize promotes it to active on the final Launch step. It is idempotent — calling it on an already-active subaccount returns 200 and changes nothing. POST /api/v1/subaccounts/provision finalizes for you as its last step.
Single-call provisioning
POST /api/v1/subaccounts/provision stands up a complete, branded, funded subaccount in a single request — the API equivalent of the five-step new-subaccount wizard (organization → plan & limits → reseller pricing → funding → branding). Reach for it when you provision tenants from your own portal or back-office automation and don’t want to orchestrate the separate create → pricing → branding → transfer-credits → finalize calls yourself.
The body flattens every wizard step. Only name is required; everything else is optional:
The call is atomic: if any step fails after the org is created, the half-provisioned subaccount is rolled back so the slug stays free to retry. On success (
201) the response carries the new subaccount plus its applied pricing, the branding_applied fields, the initial_credits transfer, and any non-blocking warnings — for example, a reseller margin below the recommended floor.
Usage & credits
GET /api/v1/subaccounts/usage-rollup?period=YYYY-MM returns one consolidated report across your whole subaccount tree for a billing period: grand totals plus a per-subaccount breakdown that reconciles line-for-line with each subaccount’s own usage. Omit period to default to the current UTC month.
GET /api/v1/subaccounts/{id}/usage/statement?period=YYYY-MM returns the reseller statement for one subaccount: a line per day × channel/meter carrying quantity, base (wholesale) cost, the marked-up price under that subaccount’s reseller margin, and the margin you earned, plus a totals footer. GET /api/v1/subaccounts/{id}/usage/export.csv streams the identical figures as a CSV attachment so you can invoice your end-customer or hand it to an auditor. Both default to the current UTC month when period is omitted; a malformed period returns 422 VALIDATION_ERROR.
API keys
Branding & custom domains
White-label notification email
Notification emails a subaccount sends can go out under its own sender identity.
PUT /api/v1/subaccounts/{id}/notification-email accepts from_name and from_address; the override is saved immediately but only becomes the effective sender once its sending domain passes DKIM/SPF. Until then — or when you clear the override by sending an empty from_address — resolution falls back to the parent’s sender, then the platform default. The GET response returns the stored override, its verified flag, and the effective sender actually in use.
This endpoint shares branding’s auth model: a parent admin manages any child’s config, and a subaccount’s own admin/owner manages its own when {id} is the caller’s organization.
Pricing overrides
Subaccount pricing is a flat reseller margin: a single markup percent (
reseller_margin_pct, 0–100) applied over Orbit wholesale rates, plus an optional monthly spend cap (monthly_spend_cap_cents). It is not priced per channel. When you need finer control for specific mobile destinations, layer per-MCCMNC rate overrides on top.