reseller
POST /v1/reseller/ai/credits/clients/{org_id}
Give one of your clients AI credit, or take unspent credit back.
Authentication
Send an API key as a bearer token. The key must carry the reseller.manage permission; a key without it is refused with 403, not 404.
Where your organisation id goes
This endpoint takes your organisation id in the URL itself, as org_id. Substitute it into the path — there is no header or query parameter that will do instead.
Your organisation id is on the API keys screen in your dashboard, beside the key itself. It is the same id in every call you make.
Try it
Replace anything in angle brackets with your own values, and the key placeholder with a key from your dashboard.
curl -X POST https://api.zinndigital.com/v1/reseller/ai/credits/clients/{org_id} \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-d '{ "delta_micros": <integer>, "reason": <string> }'Signed in? The API console in your dashboard fills in your real organisation id and your own key, and runs the request against the live API so you can see the actual response. Open this endpoint in the API console
Details
Moves credit between your pool and one client's balance in one transaction: a positive `delta_micros` gives, a negative one takes back. A client who has already **spent** the credit cannot be taken below zero — the request is refused and names what is left. A client that is not yours is refused with the same code and message as one that does not exist, so this cannot be used to discover whether an organization id is real. This is the manual route, for a trial, a goodwill gesture, or a bundle sold offline. The self-serve route is your client buying a pack from you, which draws on the same pool. Requires `reseller.manage`.
Parameters
| Name | Type | Required | What it is |
|---|---|---|---|
org_id (path) | Uuid | Yes | The client organization whose balance moves. Must be one of yours. |
org_id (query) | Uuid | No | Which of YOUR organizations is acting. Not the client. |
Request body
| Name | Type | Required | What it is |
|---|---|---|---|
delta_micros | integer | Yes | Signed USD micros. Positive gives credit to the client, negative takes unspent credit back. Zero is refused — a ledger row that means nothing. |
reason | string | Yes | Why. Required, for the same reason a staff adjustment requires one: a movement of somebody's money with no stated cause is unanswerable three months later. |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
pool_balance_micros | integer | Yes | — |
client_balance_micros | integer | Yes | — |
typical_calls | integer | Yes | Roughly how many AI questions the client's new balance buys. An **illustration** — a long article costs many times a short question. |
Errors this endpoint can return
401 · 403 · 404 · 422 · 429