API reference
Partner API
Drive your account programmatically over HTTPS with a server-side API key.
Authentication
All requests use a bearer API key. Generate one in your dashboard under API keys — it looks like pk_live_… and is shown only once. Send it in the Authorization header:
Authorization header
Authorization: Bearer pk_live_xxxxxxxxxxxxxxxxxxxxxxxxKeep keys server-side
API keys grant access to all of your clients' data. Never expose them in a browser or mobile app. Use them only from your backend.Base URL
https://<your-app-domain>/api/v1All responses are JSON. Requests scoped automatically to your partner account.
Endpoints
| GET | /api/v1/companies | List your clients and their connections |
| GET | /api/v1/wallet | Credit balance and pricing |
List companies
Returns every client you've onboarded, each with its WhatsApp connections.
Request
curl https://<your-app-domain>/api/v1/companies \
-H "Authorization: Bearer pk_live_xxx"Response 200
{
"data": [
{
"id": "clx123...",
"name": "Acme Coffee",
"onboardedAt": "2026-06-01T10:12:00.000Z",
"connections": [
{
"id": "clx456...",
"wabaId": "102290129340398",
"phoneNumberId": "106540352242922",
"displayPhoneNumber": "+237 6 90 00 00 00",
"qualityRating": "GREEN",
"status": "connected"
}
],
"_count": { "templates": 4 }
}
]
}Get wallet
Returns your current credit balance and pricing.
Request
curl https://<your-app-domain>/api/v1/wallet \
-H "Authorization: Bearer pk_live_xxx"Response 200
{
"balance": 8450,
"currency": "XAF",
"creditUnitPrice": "25.0000",
"costPerMessage": 1
}Errors
Authentication failures return 401 with an error code:
Response 401
{ "error": "missing_bearer_token" } // no Authorization header
{ "error": "invalid_token" } // unknown, revoked, or inactive partnerRoadmap
Additional endpoints are planned: template CRUD & submission, campaign create/launch, per-recipient status, single-message send, and stats. The shapes follow the same conventions shown above.