MCP is live.Set upAsk the community
OmniDimension

Reseller API

Run your clients from your own product: create them, set what they can do, fund them with credits, verify them, and buy them numbers.

A reseller account owns client accounts. Each client is a separate organization with its own balance, its own agents and its own numbers, and you decide what each one may do and what it pays per minute.

This API is that control panel, so your clients never have to see ours. Every call names one of your clients by user_id or organization_id, and only ever one of your own: any other id is rejected.

Authentication

Send your reseller key as a bearer token on every request. See Authentication.

Authorization: Bearer YOUR_API_KEY

The key must belong to the reseller account owner or an admin on it. A teammate with viewer access is refused.

The shape of it

Nine calls, in this order. Every operation page in the journey carries this strip with its own step lit, so you can always see where you are.

createthe accountfundcredits, at your ratecomplete eKYCwhere requiredbuy a numberthen it can call
Verification only applies where the region asks for it. Everything else is the same for every client.

The journey

Each step links to the page that covers it in full.

  1. Create a client. POST /api/v1/reseller/users/add makes the user and its organization together, and sets the terms you sell on: the rate, the concurrency cap, an expiry, and the currency. The first four fields are required; the rest you can change later.
  2. Set what it can do. Dashboard menus, an expiry date, and concurrency. A client cannot change any of them itself.
  3. Give it a key. Issue, rotate, and revoke the API keys a client's own system calls with. A secret is shown once, at issue, and never listed again.
  4. Fund it. Transfer minutes at your rate, take unused ones back, and read the ledger. The gap between your rate and the rate you set is your margin.
  5. Verify it. Where the region requires it, a client has to verify before it can buy a number. It is per carrier, and the steps come from the API rather than from your code.
  6. Buy it a number. This is the ordinary number API with the client's user_id. The number and its rental land on the client's account, not yours.
  7. Act for it. Send user_id on any client-scoped call (agents, calls, campaigns, knowledge base, integrations) and it runs on that client. To get each client's call results, add your webhook as one of its agent's post-call actions. The client's own actions stay as they are.
  8. Brand its email. Your name, logo, and sender on the mail your clients receive, and your own SMTP if you want it.
  9. Watch the book. Usage, margin, and the client roster. Read it in the dashboard, or over the API under Usage and margin.

Every endpoint is in the API reference, with a playground.

Usage and margin

Read your whole book for a period: each client's minutes, calls and spend, the margin you made on it, your balance runway, and your monthly recurring revenue. These are the same figures as Reseller → Analytics in your dashboard.

GET /api/v1/reseller/usage?month=2026-09

Then drill into one client, by the organization_id from that list or from GET /reseller/organizations. You get its spend by type, its calls by day, agent, campaign, number and direction, what it bought, and your margin on it:

GET /api/v1/reseller/usage/clients/5678?date_from=2026-09-01&date_to=2026-09-15

Pass month as YYYY-MM, or date_from and date_to as YYYY-MM-DD, up to 366 days. With neither, you get the current month. Days are counted in your account's timezone, and every amount is in US dollars.

A runnable version of this page

Reseller onboarding in the examples repo walks the whole journey in Python: create the client, fund it, verify it on a carrier, buy a number, attach it. It prints the plan and calls nothing until you pass --live, and there is one answer file per carrier so you can see what each one asks for.

Was this page helpful?

On this page