API reference · Platform / Billing
Billing
Your credit, and whether it covers your next invoice.
Check your credit before creating resources from automation, or poll it so you can top up in time. standing tells you at a glance: covered, low or empty. Owners and admins are also emailed once when credit becomes low and once when it runs out.
To add credit, create a purchase and send its checkout_url to whoever pays. The link opens Flutterwave for organizations billed in NGN and Stripe for everyone else, so card details never pass through your systems or ours. Nothing is charged until the link is paid.
Get credit
Your organization's credit, and how it compares with your next invoice.
estimated_next_invoice_minor is usage so far this billing period plus the recent daily rate for the days left, plus 7.5% VAT on that (VAT applies only to the monthly invoice, never to credit purchases). It is an estimate: the invoice issued at next_invoice_at is the real figure. standing is covered when credit and prepaid instance payments cover the estimate, low when they don't, and empty when no credit is left. Anything credit doesn't cover is charged to your default payment method.
Check this before creating resources from automation, or poll it to top up in time. Owners and admins are also emailed once when credit becomes low and once when it becomes empty. To add credit, see Buy credit.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Response 200
Credit.currencystringrequiredOne of
NGN,USD.available_minorintegerrequiredCredit you can spend now.
pending_minorintegerrequiredCredit purchases that haven't settled yet. Not spendable until they do.
prepaid_minorintegerrequiredInitial payments for new instances that haven't been used yet. They count toward your next invoice before credit does.
estimated_next_invoice_minorintegerrequiredAn estimate of your next invoice, including VAT.
next_invoice_atstringrequiredWhen the current billing period closes and the invoice is issued.
standingstringrequiredcoveredwhen credit and prepaid instance payments cover the estimate,lowwhen they don't,emptywhen no credit is left. Buy credit withPOST /public/v1/billing/credit/purchases.One of
covered,low,empty.has_payment_methodbooleanrequiredWhether a default payment method will be charged for anything credit doesn't cover.
Errors
- 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access.FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin.AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps. - 429
RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.BILLING_UNAVAILABLE: billing is not answering right now. Wait a few seconds, then retry.
Every code is explained in Errors.
curl "https://api.pantechdynamics.com/public/v1/billing/credit" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"currency": "NGN",
"available_minor": 1,
"pending_minor": 1,
"prepaid_minor": 1,
"estimated_next_invoice_minor": 1,
"next_invoice_at": "2026-10-03T09:30:00Z",
"standing": "covered",
"has_payment_method": true
}Buy credit
Creates a payment link to add credit to your organization. Send checkout_url to whoever pays: it opens the payment provider's own secure page, so no card details ever pass through your systems or ours. Organizations pay in NGN or USD. The currency follows your organization's country and can't be chosen.
Nothing is charged until someone pays the link. The credit is added once the provider confirms the payment, usually within a minute: follow the purchase with GET /public/v1/billing/credit/purchases/{purchase_id} until status is settled, and the owners and admins get a receipt by email. A link that isn't paid expires at checkout_expires_at; create a new purchase after that.
One purchase is between NGN 500 and NGN 500,000 (50000 to 50000000 kobo), or between USD 5 and USD 2,000 (500 to 200000 cents).
Send an Idempotency-Key: a retry with the same key returns the same purchase and the same link. The member who created the key must be an owner or admin with a verified email.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….Idempotency-KeystringrequiredA new value, such as a UUID, for each change. Resend with the same value to retry safely.
At most 255 characters.
Body
application/jsonamount_minorintegerrequiredHow much credit to buy, in minor units of your organization's currency: kobo for NGN, cents for USD.
Response 201
The purchase, with itscheckout_url.idstringrequirede.g.
cpr_....statusstringrequiredpendinguntil paid;settledonce the credit is in your balance.One of
pending,settled,failed,expired,refunded,charged_back.amount_minorintegerrequiredThe credit bought, in minor units of
currency.currencystringrequiredOne of
NGN,USD.methodstringrequiredcheckoutfor every purchase made through the API. Purchases made in the console may show another method.One of
checkout,saved_card,bank_transfer.providerstringrequiredAn identifier for the payment processor that takes the payment. Treat it as an opaque label: values can be added.
checkout_urlstring or nullrequiredThe provider's hosted payment page. Present only while the purchase is
pendingand can still be paid.checkout_expires_atstring or nullrequiredWhen the payment link stops working, if the provider sets a time.
failure_codestring or nullrequiredWhy the payment failed, when
statusisfailed.settled_atstring or nullrequiredWhen the credit was added; null until then.
created_atstring or nullrequiredWhen it was created (RFC 3339, UTC).
receiptobject or nullrequiredThe receipt, once the purchase has settled and the receipt is issued (usually within a minute); null until then. Fetch it with
GET /public/v1/billing/receipts/{receipt_id}.Show 2 child fieldsHide child fields
idstringrequirede.g.
rcp_....numberstringrequirede.g.
PTD-RCT-2026-000123.
Errors
- 400
IDEMPOTENCY_KEY_REQUIRED: theIdempotency-Keyheader is missing. Send a new unique value, such as a UUID, with every write.INVALID_IDEMPOTENCY_KEY: theIdempotency-Keyheader is longer than 255 characters. Use a shorter value.INVALID_REQUEST_BODY: the body is not a single valid JSON object. Send one JSON object with the fields documented for this endpoint. - 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: this API key has only thereadscope. Use a key withwriteaccess.FORBIDDEN: only an owner or admin may buy credit. Use a key created by an owner or admin.AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server. An owner can turn it on in the console under Organization › AI apps. - 409
EMAIL_VERIFICATION_REQUIRED: the member who created this key has not verified their email, where the receipt is sent. Verify it in the console, then retry.CREDIT_PURCHASE_UNAVAILABLE: credit can't be bought for this organization yet. Finish billing setup in the console, or contact support.IDEMPOTENCY_CONFLICT: thisIdempotency-Keywas already used for a different amount. Use a new key for a different purchase. - 413
REQUEST_TOO_LARGE: the body is larger than 64 KiB. Send a smaller request. - 422
VALIDATION_FAILED: a field is invalid. Each entry oferrorsnames thefieldand itscode:amount_minorREQUIRED: send a positive amount in minor units.amount_minorAMOUNT_OUT_OF_RANGE: the amount is outside the per-purchase limits above for your currency. Choose an amount within them.UNKNOWN_FIELD: the body has a field this endpoint does not take (named infield). Remove it or fix its spelling. - 429
RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.BILLING_UNAVAILABLE: billing is not answering right now. Wait a few seconds, then retry.
Every code is explained in Errors.
curl -X POST "https://api.pantechdynamics.com/public/v1/billing/credit/purchases" \
-H "Authorization: Bearer $PANTECH_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"amount_minor": 1059200
}'{
"id": "id",
"status": "pending",
"amount_minor": 1059200,
"currency": "NGN",
"method": "checkout",
"provider": "provider",
"checkout_url": "checkout-url",
"checkout_expires_at": "2026-10-03T09:30:00Z",
"failure_code": null,
"settled_at": "2026-10-03T09:30:00Z",
"created_at": "2026-10-03T09:30:00Z",
"receipt": {
"id": "id",
"number": 100
}
}Get a credit purchase
One credit purchase: whether it has been paid. checkout_url is shown only while the purchase can still be paid. Poll this after Buy credit until status is settled (credit added), or failed or expired (nothing charged; create a new purchase).
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Path parameters
purchase_idstringrequiredThe purchase's id, e.g.
cpr_....
Response 200
The purchase.idstringrequirede.g.
cpr_....statusstringrequiredpendinguntil paid;settledonce the credit is in your balance.One of
pending,settled,failed,expired,refunded,charged_back.amount_minorintegerrequiredThe credit bought, in minor units of
currency.currencystringrequiredOne of
NGN,USD.methodstringrequiredcheckoutfor every purchase made through the API. Purchases made in the console may show another method.One of
checkout,saved_card,bank_transfer.providerstringrequiredAn identifier for the payment processor that takes the payment. Treat it as an opaque label: values can be added.
checkout_urlstring or nullrequiredThe provider's hosted payment page. Present only while the purchase is
pendingand can still be paid.checkout_expires_atstring or nullrequiredWhen the payment link stops working, if the provider sets a time.
failure_codestring or nullrequiredWhy the payment failed, when
statusisfailed.settled_atstring or nullrequiredWhen the credit was added; null until then.
created_atstring or nullrequiredWhen it was created (RFC 3339, UTC).
receiptobject or nullrequiredThe receipt, once the purchase has settled and the receipt is issued (usually within a minute); null until then. Fetch it with
GET /public/v1/billing/receipts/{receipt_id}.Show 2 child fieldsHide child fields
idstringrequirede.g.
rcp_....numberstringrequirede.g.
PTD-RCT-2026-000123.
Errors
- 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access.FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin.AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps. - 404
RESOURCE_NOT_FOUND: no credit purchase with this id in your organization. Check the id (cpr_…). - 429
RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.BILLING_UNAVAILABLE: billing is not answering right now. Wait a few seconds, then retry.
Every code is explained in Errors.
curl "https://api.pantechdynamics.com/public/v1/billing/credit/purchases/id_06gk3x9tq7m2v8r4y1c5d0zp8w" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"id": "id",
"status": "pending",
"amount_minor": 1059200,
"currency": "NGN",
"method": "checkout",
"provider": "provider",
"checkout_url": "checkout-url",
"checkout_expires_at": "2026-10-03T09:30:00Z",
"failure_code": null,
"settled_at": "2026-10-03T09:30:00Z",
"created_at": "2026-10-03T09:30:00Z",
"receipt": {
"id": "id",
"number": 100
}
}List receipts
Every receipt issued to your organization, newest first. A receipt is issued, numbered PTD-RCT-<year>-<number>, whenever money moves: a card payment, a credit top-up, an invoice paid by card or from credit, a debit from your credit (for example a new instance's first charges), and a refund. A payment's receipt usually appears within a minute of it settling.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Query parameters
limitintegerItems per page, 1 to 100. Defaults to 50.
From 1 to 100. Defaults to
50.cursorstringThe previous page's
next_cursor, to get the next page. Leave out for the first page; keep the other parameters the same.
Response 200
A page of receipts.dataarray of ReceiptrequiredShow 14 child fieldsHide child fields
idstringrequirede.g.
rcp_....numberstringrequiredPTD-RCT-<year>-<number>, sequential within the year.kindstringrequiredpaymenta card payment,invoice_paymentan invoice paid by card or from credit,credit_purchasea top-up,wallet_debitcredit taken for a new resource,refundmoney returned to your credit.One of
payment,invoice_payment,credit_purchase,wallet_debit,refund.issuer_namestringrequiredThe Pantech company that issued it:
Pantech Dynamics, Inc.for USD payments,Pantech Dynamics Ltdfor NGN payments.currencystringrequiredOne of
NGN,USD.amount_minorintegerrequiredissued_atstring or nullrequiredWhen the receipt was issued.
occurred_atstring or nullrequiredWhen the money moved.
descriptionstringrequiredWhat it was for, e.g.
Account credit top-up.billed_tostringrequiredYour organization, as printed on the receipt.
factsarray of objectrequiredThe details printed on the receipt, e.g. the payment method (
Visa •••• 4242) and the date.Show 2 child fieldsHide child fields
labelstringrequiredvaluestringrequired
verificationstringrequiredThe code printed on the receipt, which Pantech uses to confirm a copy is genuine.
transaction_idstringrequiredThe account transaction the receipt is for, e.g.
ltx_....pdf_bytesintegerrequiredThe size of the PDF.
next_cursorstring or nullrequiredPass as
cursorfor the next page; null on the last page.
Errors
- 400
INVALID_CURSOR: the cursor did not come from this list. Start again without one. - 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access.FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin.AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps. - 429
RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.BILLING_UNAVAILABLE: billing is not answering right now. Wait a few seconds, then retry.
Every code is explained in Errors.
curl "https://api.pantechdynamics.com/public/v1/billing/receipts" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"data": [
{
"id": "id",
"number": 100,
"kind": "payment",
"issuer_name": "issuer-name",
"currency": "NGN",
"amount_minor": 1059200,
"issued_at": "2026-10-03T09:30:00Z",
"occurred_at": "2026-10-03T09:30:00Z",
"description": "description",
"billed_to": "billed-to",
"facts": [
{
"label": "label",
"value": "value"
}
],
"verification": "verification",
"transaction_id": "transaction-id",
"pdf_bytes": 1
}
],
"next_cursor": "eyJhdCI6IjIwMjYtMTAtMDNUMDk6MzA6MDBaIiwiaWQiOiJ2bV8wNmdrIn0"
}Get a receipt
One receipt: what it was for, the amount, who issued it and the details printed on it. Download it as a PDF with GET /public/v1/billing/receipts/{receipt_id}/pdf.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Path parameters
receipt_idstringrequiredThe receipt's id, e.g.
rcp_....
Response 200
The receipt.idstringrequirede.g.
rcp_....numberstringrequiredPTD-RCT-<year>-<number>, sequential within the year.kindstringrequiredpaymenta card payment,invoice_paymentan invoice paid by card or from credit,credit_purchasea top-up,wallet_debitcredit taken for a new resource,refundmoney returned to your credit.One of
payment,invoice_payment,credit_purchase,wallet_debit,refund.issuer_namestringrequiredThe Pantech company that issued it:
Pantech Dynamics, Inc.for USD payments,Pantech Dynamics Ltdfor NGN payments.currencystringrequiredOne of
NGN,USD.amount_minorintegerrequiredissued_atstring or nullrequiredWhen the receipt was issued.
occurred_atstring or nullrequiredWhen the money moved.
descriptionstringrequiredWhat it was for, e.g.
Account credit top-up.billed_tostringrequiredYour organization, as printed on the receipt.
factsarray of objectrequiredThe details printed on the receipt, e.g. the payment method (
Visa •••• 4242) and the date.Show 2 child fieldsHide child fields
labelstringrequiredvaluestringrequired
verificationstringrequiredThe code printed on the receipt, which Pantech uses to confirm a copy is genuine.
transaction_idstringrequiredThe account transaction the receipt is for, e.g.
ltx_....pdf_bytesintegerrequiredThe size of the PDF.
Errors
- 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access.FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin.AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps. - 404
RECEIPT_NOT_FOUND: no receipt with this id in your organization. List your receipts to find it. - 429
RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.BILLING_UNAVAILABLE: billing is not answering right now. Wait a few seconds, then retry.
Every code is explained in Errors.
curl "https://api.pantechdynamics.com/public/v1/billing/receipts/id_06gk3x9tq7m2v8r4y1c5d0zp8w" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"id": "id",
"number": 100,
"kind": "payment",
"issuer_name": "issuer-name",
"currency": "NGN",
"amount_minor": 1059200,
"issued_at": "2026-10-03T09:30:00Z",
"occurred_at": "2026-10-03T09:30:00Z",
"description": "description",
"billed_to": "billed-to",
"facts": [
{
"label": "label",
"value": "value"
}
],
"verification": "verification",
"transaction_id": "transaction-id",
"pdf_bytes": 1
}Download a receipt
The receipt as a PDF, the same document that was emailed. The file name is the receipt number, e.g. PTD-RCT-2026-000123.pdf.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Path parameters
receipt_idstringrequiredThe receipt's id, e.g.
rcp_....
Response 200
The PDF. No body.
Errors
- 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access.FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin.AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps. - 404
RECEIPT_NOT_FOUND: no receipt with this id in your organization. List your receipts to find it. - 429
RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.BILLING_UNAVAILABLE: billing is not answering right now. Wait a few seconds, then retry.
Every code is explained in Errors.
curl "https://api.pantechdynamics.com/public/v1/billing/receipts/id_06gk3x9tq7m2v8r4y1c5d0zp8w/pdf" \
-H "Authorization: Bearer $PANTECH_API_KEY"