Integrate payment verification in minutes

A single REST endpoint to verify Telebirr, CBE, CBE Birr, Dashen Super App, BOA and more, with ready-to-paste code samples in 7 languages.

1
Endpoint
7
Languages
8+
Providers
<5s
Response time

Up and running in 3 steps

01

Create an account

Register and choose a subscription plan that fits your verification volume.

Sign up free
02

Generate an API key

Create an API key in your dashboard and enable providers under My providers. For dashboard verification you can save defaults there; for API calls you can also pass accountNumber or phone per request when needed.

Dashboard
03

Call POST /api/verify

Verify with Method 1 (JSON + transaction ID) or Method 2 (receipt photo). CBE requires Method 2 — a receipt image is mandatory. For BOA and CBE Birr, include accountNumber or phone when needed.

See endpoint

Verify request

Authenticate with X-API-Key (keys start with vk_live_). Use a short provider key from the table below — not a UUID. Choose one way to identify the payment: send the transaction ID, or upload a receipt photo.

HTTP
POST
URL
https://veriq.company/api/verify
Header
X-API-Key: YOUR_API_KEY

How to verify

Use Method 1 when you already have a bank reference (most providers). Use Method 2 to upload a receipt photo. CBE (provider=cbe) requires Method 2 — a receipt image is mandatory.

Method 1 — Verify by transaction ID

Fastest path for providers other than CBE. Send JSON with provider and the bank reference as transactionId. Content-Type: application/json. Not allowed for CBE — use Method 2 instead.

application/json
Loading…
provider
Required. Lowercase key from the supported providers table (e.g. telebirr, boa). Do not use cbe with Method 1.
transactionId
Required. Bank reference / receipt ID (max 128 characters).
accountNumber
Optional. Required for Bank of Abyssinia when you have not saved a default under My providers.
phone
Optional. Required for CBE Birr when you have not saved a default wallet. Ethio Telecom: 2519XXXXXXXX. Safaricom: 2517XXXXXXXX.

Method 2 — Verify by receipt photo

Required for CBE. Optional for other providers. Send multipart/form-data with provider and receipt (JPEG or PNG, max 8 MB). Do not send transactionId — the photo replaces it. Same success response as Method 1.

provider
Required. Use cbe here for Commercial Bank of Ethiopia.
receipt
Required. Image file of the receipt. Mandatory for CBE; replaces transactionId.
accountNumber / phone
Optional. Same rules as Method 1 (BOA / CBE Birr). Not needed for CBE.
multipart/form-data
Loading…

List enabled providers

Returns the providers you enabled under My providers. Requires an active subscription. Authenticate with X-API-Key (same as verify) or Authorization: Bearer from login.

Method
GET
URL
https://veriq.company/api/my-providers
Header
X-API-Key: YOUR_API_KEY

Success response (200)

200 OK
Loading…

Use each provider key as provider in POST /api/verify. Without a subscription you get HTTP 403 with code: "PLAN_REQUIRED".

Supported providers

Supported provider keys for the API. Enable each provider in your dashboard under My providers, then list what you enabled with GET /api/my-providers. For BOA and CBE Birr you can send accountNumber or phone on every API request, or save defaults in My providers for dashboard verification only. CBE requires a receipt photo (Method 2).

API keyProviderRequirements
amhara
Amhara Bank
Not required — Method 1 or Method 2
boa
Bank of Abyssinia
Pass accountNumber in the API request body (at least 5 digits), or save a default under My providers for dashboard verification.
cbebirr
CBE Birr
Pass phone in the API request body (251XXXXXXXXX) — Ethio Telecom (2519…) or Safaricom Ethiopia (2517…), e.g. 251947431170 or 251712345678. Or save a default wallet under My providers for dashboard verification.
cbe
Commercial Bank of Ethiopia
Receipt photo required (Method 2)
dashen-super-app
Dashen Bank Super App
Not required — Method 1 or Method 2
mpesa
M-PESA
Not required — Method 1 or Method 2
telebirr
Telebirr
Not required — Method 1 or Method 2
wegagen
Wegagen Bank
Not required — Method 1 or Method 2

Success response (200)

Same response for Method 1 and Method 2. On HTTP 200, check success === true and read payment details from receipt.

200 OK
Loading…

Error responses

Common failures. Use message for display and code for programmatic handling when present.

HTTP 401Unauthorized

Missing, invalid, or revoked API key.

401 example
Loading…
HTTP 400MISSING_ACCOUNTMissing account configuration

Some providers require an account number or CBE Birr wallet phone. Send them in the request body, or save defaults under My providers.

400 example
Loading…
HTTP 400RECEIPT_REQUIREDCBE requires a receipt photo

Commercial Bank of Ethiopia (provider cbe) only accepts Method 2 — multipart with a receipt image. Typed transactionId alone is rejected.

400 example
Loading…
HTTP 400OCR_NO_TRANSACTION_IDReceipt photo — no ID found

Method 2 could not read a transaction ID from the receipt photo. Use a clearer image. For non-CBE providers you can also use Method 1.

400 example
Loading…
HTTP 400MISSING_RECEIPTMissing receipt image

Method 2 requires a receipt image file. For CBE this is the only allowed method.

400 example
Loading…
HTTP 400Validation failed

Invalid JSON or invalid provider key format.

400 example
Loading…
HTTP 403PLAN_REQUIREDNo subscription plan

User has not selected an active payment plan.

403 example
Loading…
HTTP 429TEST_QUOTA_EXCEEDEDDaily test limit reached

Test API keys (vk_test_…) use a free daily quota that does not bill your subscription.

429 example
Loading…
HTTP 429QUOTA_EXCEEDEDMonthly limit reached

API and dashboard verification attempts exceeded the plan limit for this month.

429 example
Loading…
HTTP 403Provider not enabled

The provider key exists but is not enabled for your account.

403 example
Loading…
HTTP 404Unknown provider key

No provider with this API key is configured.

404 example
Loading…
HTTP 404INVALID_TRANSACTION_IDTransaction not found

Bank could not find a receipt for this reference (wrong ID or account).

404 example
Loading…
HTTP 502NETWORK_FAILEDBank temporarily unavailable

Upstream bank or receipt service timed out or returned a server error.

502 example
Loading…
HTTP 502PROVIDER_FETCH_BLOCKEDProvider blocked server request

The receipt host rejected the request from your server IP (common on overseas hosting). Use an Ethiopian HTTP proxy via TELEBIRR_HTTP_PROXY.

502 example
Loading…

Code examples

Switch between Method 1 (transaction ID) and Method 2 (receipt photo), pick a provider, then copy a language sample. CBE is locked to Method 2. Replace your API key and either YOUR_TRANSACTION_ID or the receipt file path.

bash
Loading…

Receipt fields

All providers return the same receipt object shape when verification succeeds.

transactionId
Bank reference or receipt ID
payer
Who paid
receiver
Who received
amount
Transferred amount
totalAmount
Total debited
commissionAmount
Fee or service charge (e.g. CBE Birr), if shown on receipt
vatAmount
VAT (e.g. CBE Birr), if shown on receipt
date
Payment date and time
reason
Payment reason or remark, when available
creditedAccount
Credited account, when available
status
VERIFIED on success

Start verifying payments today

Free account. No card required. API access after choosing a plan.