Skip to main content
The reseller API is for platforms that already have merchants and want to give them an AI assistant without sending them anywhere else. Your product stays the only thing your customer logs into. They never create an ImpelLabs account, never see an API token, and never leave your admin. You hold one credential. Everything below happens server-to-server.

Who this is for

You are building on this API if you run a platform — an ecommerce suite, a booking system, a CRM — with many businesses on it, and you want “turn on AI” to be a switch inside your product rather than a referral to ours. If you are a single business automating your own workspace, you want the platform API instead.

How the pieces fit

1

You are a partner

One WhiteLabelPartner record, created by ImpelLabs when you sign. It owns a workspace, and every business you provision lands inside it. Nothing outside that workspace is reachable with your key — see tenant isolation.
2

Each of your merchants is a tenant

A business, addressed by your own id for it. You never store ours.
3

Your product is the system of record

Products, orders, stock, customers — those stay yours. The assistant reaches them as tools over MCP, at call time. No catalogue is copied into our database, and nothing has to be kept in sync.
4

You are billed, not your merchants

Tenants run pay-as-you-go against a cap you set. We invoice you monthly. Your merchants never see a price from us. See usage and billing.

What a merchant has to do

Nothing, for the website channel. Six server-side calls take a merchant from nothing to a working assistant on their storefront, and the only human step is the one you choose to add — a review screen before going live, if you want one.

Start here

The six calls, in order, with real payloads.
WhatsApp is two more calls, and one of them opens a browser. Meta requires the merchant to complete Embedded Signup themselves — there is no headless path to a WhatsApp Business account, for anyone — so the API gives you the popup’s configuration and then finishes the job with the code it returns:
1

Read the popup's configuration

GET /api/v1/partner/whatsapp/signup-config/ returns the app id, config id and graph version. Partner-wide, not per tenant: the Meta app is ours, so the values are the same for every merchant.Check server_ready before opening anything. It is false when the deployment has no Meta app configured, and learning that here is better than from a popup that opens and immediately fails.
2

Run Embedded Signup in the merchant's browser

Meta’s popup, with the configuration above. It returns a code.
3

Hand us the code

POST /api/v1/partner/tenants/{external_ref}/channels/whatsapp/ exchanges it, subscribes the app, resolves the phone number, and stores the long-lived token against the tenant.This is the one call in the sequence that is not safe to blind-retry. The code is single-use and short-lived, so replaying a spent one fails at Meta rather than here. If you lose our reply, GET the same path — it answers {"configured": false} when the channel is not set up, and the live channel status when it is.
Both calls take the channels:write scope.

What is not here yet

Your invoice is issued manually. Usage metering and caps are live and accurate — reseller/usage.py reads the same billing.CreditUsageLog ledger the customer dashboard reads, so there is no second meter to reconcile during a dispute. Turning that total into a document is still a person’s job, and nothing on this API returns an invoice.The automatic invoicing you may have read about elsewhere is subscription billing for direct customers. It does not run for partner-billed usage.