Grant (positive delta) or claw back (negative delta) a credit balance. Must be a prepaid (ADVANCE) part of the customer's current plan — otherwise 422 and nothing is written. Send an idempotencyKey to make it safe to retry.
Authorization
apiKey Organisation-scoped key from Settings → API Keys.
In: header
Path Parameters
Customer id.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/customers/cus_abc123/credits/adjust" \ -H "Content-Type: application/json" \ -d '{ "agentKey": "deep-research", "delta": 5000, "notes": "Welcome grant for the Growth plan", "idempotencyKey": "grant:ord_1042" }'{ "statusCode": 200, "statusDetail": { "status": "SUCCESS", "message": "OK" }, "result": { "adjusted": true, "replayed": false, "adjustedAt": "2019-08-24T14:15:22Z", "remaining": 15000, "customerArchived": false }}{ "statusCode": 400, "statusDetail": { "status": "ERROR", "message": "Request body must be valid JSON." }, "result": {}}{ "statusCode": 401, "statusDetail": { "status": "ERROR", "message": "Invalid API key." }, "result": {}}{ "statusCode": 404, "statusDetail": { "status": "ERROR", "message": "No customer with id \"cus_abc123\"." }, "result": {}}{ "statusCode": 422, "statusDetail": { "status": "ERROR", "message": "No credit with agent key \"summarize\" exists in this workspace." }, "result": {}}{ "statusCode": 500, "statusDetail": { "status": "ERROR", "message": "Could not complete the request." }, "result": {}}The same call, addressed by the customer's externalId. Same body and response.
Authorization
apiKey Organisation-scoped key from Settings → API Keys.
In: header
Path Parameters
Your own id for the customer (its externalId): 1–32 letters, numbers or "-", matched exactly (case-sensitive).
^[A-Za-z0-9-]{1,32}$1 <= length <= 32Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/customers/ext/acme-42/credits/adjust" \ -H "Content-Type: application/json" \ -d '{ "agentKey": "deep-research", "delta": 5000, "notes": "Welcome grant for the Growth plan", "idempotencyKey": "grant:ord_1042" }'{ "statusCode": 200, "statusDetail": { "status": "SUCCESS", "message": "OK" }, "result": { "adjusted": true, "replayed": false, "adjustedAt": "2019-08-24T14:15:22Z", "remaining": 15000, "customerArchived": false }}{ "statusCode": 400, "statusDetail": { "status": "ERROR", "message": "Request body must be valid JSON." }, "result": {}}{ "statusCode": 401, "statusDetail": { "status": "ERROR", "message": "Invalid API key." }, "result": {}}{ "statusCode": 404, "statusDetail": { "status": "ERROR", "message": "No customer with id \"cus_abc123\"." }, "result": {}}{ "statusCode": 422, "statusDetail": { "status": "ERROR", "message": "No credit with agent key \"summarize\" exists in this workspace." }, "result": {}}{ "statusCode": 500, "statusDetail": { "status": "ERROR", "message": "Could not complete the request." }, "result": {}}Look Up Usage Logs by ID GET
Up to 10 usage-log rows by id, in one call — for example the `usageLogId` of each `USAGE_LOG` row in a customer's wallet ledger. Scoped to your organization, not to one customer: every row has its own `customerId`. Rows come back in the order of `ids`; duplicate ids are removed. Ids that match nothing in your organization are listed in `notFound`. The row format is not the same as `GET /signal/usage-log`: see `UsageLogLookupEntry`.
Manage a customer's outcome balance POST
Next Page