Developers
Send income to Qonta
If your platform takes payments for a business, send each one to Qonta as it happens. It lands in that business's books as money in, so nobody types it in again.
Last updated: 19 September 2026
1. Get a key
The business makes the key in Qonta, under Settings, Connections, Make a key, and gives it to you. It starts with qk_ and is shown to them once. Send it on every request:
Authorization: Bearer qk_your_key_here
A key records money in for one business only. It cannot read their books. The business can take it back at any time, and it stops working at once.
2. Record a payment
POST https://api.qonta.rw/v1/income
Content-Type: application/json
{
"external_id": "pay_1001",
"amount": 150000,
"paid_at": "2026-09-19T10:15:00+02:00",
"customer": "Uwase Aline",
"description": "Term 1 fees"
}| Field | What it is |
|---|---|
external_id required | Your platform's own id for this payment, up to 200 characters. Unique per business. |
amount required | More than zero, at most two decimals, in currency. |
currency | RWF (the default), USD, EUR, GBP, KES, UGX, TZS, BIF, CDF or ZAR. |
fx_rate | Francs for one unit of the currency. Needed for a foreign payment the first time; Qonta then remembers the business's last rate. |
paid_at | When the money was paid: a date (2026-09-19) or an ISO 8601 time. A time with no offset is read as Kigali time. Not in the future. Now, if left out. |
customer | Who paid, up to 120 characters. Linked to the business's customer of that name when there is one. |
description | What it was for, up to 500 characters. |
category | sales (the default), other, loan, transfer or savings. |
money_account_id | The account the money landed in, from GET /v1/money-accounts. Left out, the business's default account for money in. |
vat_amount | The VAT included in amount, when there is some. |
3. What Qonta answers
| Status | Meaning |
|---|---|
201 | Recorded. {"status": "recorded", "income": {...}} |
200 | This external_id was already recorded with the same amount. Nothing changed. "status": "already_recorded" |
409 | This external_id was already recorded with a different amount. Nothing changed. A different payment needs its own id. |
401 | The key is missing, wrong, or was taken back. |
402 | The business's Qonta subscription is not active. Nothing was recorded. Send it again once they renew. |
422 | Something in the body is wrong. detail names the field and says why. |
Retries are safe. If a request times out or you are not sure it landed, send the same payment again with the same external_id. It is never recorded twice.
{
"status": "recorded",
"income": {
"id": "9f1c2b1e-...",
"external_id": "pay_1001",
"amount": 150000.0,
"currency": "RWF",
"amount_rwf": 150000.0,
"paid_at": "2026-09-19T10:15:00+02:00",
"category": "sales",
"customer": "Uwase Aline",
"description": "Term 1 fees",
"vat_amount": null,
"money_account": {"id": "3b7e...", "name": "MTN MoMo"},
"recorded_at": "2026-09-19T10:15:02+02:00"
}
}4. Look a payment up
GET https://api.qonta.rw/v1/income/{external_id}200 with the income, or 404 when Qonta does not have it. Useful after an outage, to find what still needs sending.
5. Money accounts
GET https://api.qonta.rw/v1/money-accounts
{"money_accounts": [
{"id": "3b7e...", "name": "MTN MoMo", "kind": "momo",
"provider": "MTN", "default_for_income": true}
]}Send an account's id as money_account_id to say where a payment landed.
6. Try it
curl -X POST https://api.qonta.rw/v1/income \
-H "Authorization: Bearer qk_your_key_here" \
-H "Content-Type: application/json" \
-d '{"external_id": "pay_1001", "amount": 150000, "customer": "Uwase Aline"}'7. If you pay out to the business's bank
When the money first sits with your platform or a payment gateway and reaches the business's bank later, ask them to add your platform as its own money account in Qonta, and send its money_account_id with each payment. The payout to their bank is then a transfer between two of their accounts, not a second sale, and their income is counted once.
8. Help
Message us on WhatsApp at 0781 653 156 or email hello@qonta.rw.

