CreddotDocsCreddot Docs
API referenceCollections

Initialize a server-side collection

Requires collections:create. Supports bank transfer, USSD, and QR without accepting raw card data. Use POST /v1/checkout/sessions for card-capable hosted checkout. Atomically records a pending transaction before provider initialization. Retry with the same key and body to replay the initial response.

POST
/api/v1/payments/collections

Requires collections:create. Supports bank transfer, USSD, and QR without accepting raw card data. Use POST /v1/checkout/sessions for card-capable hosted checkout. Atomically records a pending transaction before provider initialization. Retry with the same key and body to replay the initial response.

Authorization

api-key
headerx-api-key<token>

Your API key: ck_test_... for test mode, ck_live_... for live. Send it with x-api-secret (or Authorization: Bearer ).

Header Parameters

x-api-secret?string

Recommended: API secret sent over HTTPS. You may send it as Authorization: Bearer instead. If supplied, x-timestamp and x-signature are not required.

x-timestamp?string

Legacy signed mode: Unix time in milliseconds; maximum clock skew five minutes.

x-signature?string

Legacy signed mode: HMAC-SHA256(secret, timestamp.METHOD.url.idempotencyKey.bodyHash).

x-idempotency-key*string

1–128 letters/digits or ._:-. Same key and payload replay for 24 hours; conflicting, in-flight, or expired keys return 409. Never change a key to retry an uncertain payment.

Request Body

application/json
  1. body
amountMinor*string
currency*string
channel*string

Card payments are available only through hosted checkout.

Value in"BANK_TRANSFER""USSD""QR"
reference?string
customerEmail?string
customerPhone?string

Required when customerEmail is omitted. Paga requires at least one payer identifier.

customerName?string
Lengthlength <= 120
callbackUrl?string

Response Body

application/json
  1. response
id*string
transactionId*string

Use this ID for transaction lookup and sandbox completion. Payout id is a separate payout record ID.

reference*string
status*string
Value in"PENDING""PROCESSING""SUCCESS""FAILED"
amountMinor*string

Integer minor units, encoded as a string.

currency*string
provider*string
providerReference*string|null
requiresReconciliation*boolean

True when provider outcome is uncertain. Do not retry with a new key; query the transaction or reconcile it.

feeMinor*string

Creddot fee charged to the business in minor units.

totalDebitMinor*string

Wallet debit for payouts; equals amountMinor for incoming transfers.

netCreditMinor*string

Wallet credit for incoming transfers; equals amountMinor for payouts.

paymentUrl*|

Provider checkout URL. Current sandbox URLs are placeholders.

Formaturi
Example Request
curl -X POST 'https://api.creddot.com/api/v1/payments/collections' \  -H 'x-idempotency-key: string' \  -H 'Content-Type: application/json' \  -d '{  "amountMinor": "150000",  "currency": "NGN",  "channel": "BANK_TRANSFER"}'
Example Response
{  "id": "string",  "transactionId": "string",  "reference": "string",  "status": "PENDING",  "amountMinor": "100000",  "currency": "NGN",  "provider": "PAGA",  "providerReference": "string",  "requiresReconciliation": true,  "feeMinor": "1500",  "totalDebitMinor": "101500",  "netCreditMinor": "98500",  "paymentUrl": "http://example.com"}