Covered countries
| Country | Code | Currency |
|---|---|---|
| Rwanda | RW | RWF |
URLs
| Type | URL |
|---|---|
| Dev portal | developers.airtel.africa |
| Sandbox UAT | https://openapiuat.airtel.africa |
| OAuth token | https://openapiuat.airtel.africa/auth/oauth2/token |
| Payment | https://openapiuat.airtel.africa/merchant/v1/payments/ |
| USSD client | *185# |
Required credentials
Enter these in Settings → Stores → Airtel:| Field | Type | Description |
|---|---|---|
client_id | text | OAuth client_id for your Airtel Developer app. |
client_secret | password | Associated OAuth secret. |
Specifics
- OAuth client_credentials with JSON body: unlike Orange (which expects
x-www-form-urlencoded), Airtel requires a JSON body{ "client_id": ..., "client_secret": ..., "grant_type": "client_credentials" }on the token endpoint. SandPay handles this variant viaoauthClientCredentialsJsonBody. - The
X-CountryandX-Currencyheaders are required on thePOST /merchant/v1/payments/call — they are derived from the MSISDN or explicitly passed via thecountryfield. msisdnis sent without the+in the subscriber object.- The Airtel payload separates
subscriber(the payer) andtransaction(the movement) — SandPay copiesreferenceinto bothidfields to remain idempotent. - Nested response:
data.transaction.id— this value is stored asprovider_tx_id.