Public developer API

POST /v1/collections

Asks a payer to approve an Africa-only mobile-money payment in CM/XAF, GH/GHS, KE/KES, RW/RWF or UG/UGX. When it completes, the amount minus the Dutch fee is credited to your wallet.

Access

A project-specific API key (Authorization: Bearer dapi_live_...) and its Business ID (X-Business-Id). Rate limited per business (120 calls a minute by default).

Requires an Idempotency-Key header.

Requires an Idempotency-Key header.

Collections use the mobile-money flow only in Cameroon (CM, XAF), Ghana (GH, GHS), Kenya (KE, KES), Rwanda (RW, RWF) and Uganda (UG, UGX). Use the matching country and currency. No named operator/network is selected by this API; the provider route handles it. Nigeria bank deposits and all other collection countries are unsupported by this endpoint.

There is no verification code: the payer simply approves the payment prompt on their phone.

The call waits up to about 20 seconds for the payer. If the payer has not approved yet, the status stays processing; a collection.received or collection.failed webhook follows.

Body

FieldTypeRequiredDescription
amountnumberyesAmount to collect, in the local currency.
currencystringyesLocal currency matching the country, for example XAF.
phonestringyesPayer mobile number in international format.
countrystringnoCM, GH, KE, RW or UG, matching currency. Defaults to the country of the currency.
referencestringnoYour own unique reference (4 to 64 characters).
descriptionstringnoUp to 140 characters.

Example request

curl --request POST \
  --url 'https://production.dutchapi.co/v1/collections' \
  --header 'X-Business-Id: YOUR_BUSINESS_ID' \
  --header 'Authorization: Bearer bsk_live_YOUR_BUSINESS_SECRET' \
  --header 'Idempotency-Key: collections-0001' \
  --header 'Content-Type: application/json' \
  --data '{"amount":10000,"currency":"XAF","phone":"+237670000000","country":"CM","reference":"invoice-77"}'

Response 201

{
  "id": "col_3b9d7e",
  "object": "collection",
  "kind": "collection",
  "status": "processing",
  "amount": 10000,
  "currency": "XAF",
  "fee": 200,
  "description": "Collection from +237670000000",
  "created_at": "2026-10-13T09:31:00.000Z",
  "completed_at": null,
  "failure_reason": null,
  "method": "mobile_money",
  "country": "CM",
  "payer": "******0000"
}

Errors

StatuserrorMeaning
400idempotency_key_requiredSend an Idempotency-Key header.
400valid_amount_requiredamount must be a positive number.
422collection_not_pricedThere is no published collection rate for that country or method.
403limits_not_setNo live limit is enabled for this currency (Dashboard, Limits & safety).
423money_movement_pausedThe kill switch is on.
400network_not_supportedDo not send a named mobile-money network.
400valid_phone_requiredphone must be an international mobile number.
422unsupported_collection_currencyCollections are available only in CM/XAF, GH/GHS, KE/KES, RW/RWF and UG/UGX.
422below_minimumThe amount is below the minimum for that currency.
422amount_below_feeThe amount is not larger than the fee.
422collection_rejectedDutch API could not complete the collection.

Related references

Browse the complete endpoint directory, the developer portal and the security and controls guide.