Verify Receipt API Endpoint
POST /api/verify: verify a single Ethiopian bank receipt.
Read full API docsEndpoint specification
POST /api/verify: Verifies a single Ethiopian bank receipt. Accepts a JSON body with bank, reference, and optionally accountNumber. Returns a JSON response with the receipt data or an error message.
Request format
Send a POST request with Content-Type: application/json. The body must contain the bank id (e.g. 'cbe', 'telebirr', 'boa'; the id field from GET /api/banks), the transaction reference number, and for banks that require it, the account number.
- bank (required unless the reference is a receipt link): bank id; live banks: cbe, telebirr, boa, mpesa, dashen, awash, siinqee, ebirr
- reference (required): the receipt link or reference in the bank's current format (e.g. a CBE mbreciept.cbe.com.et link, a Dashen FT Ref, a Telebirr transaction number)
- accountNumber (conditional): last 5 digits for BOA; last 8 only for an older CBE receipt with just an FT reference (legacy); not needed for a CBE Receipt ID, Telebirr or M-Pesa
Response format
The response is a JSON object. On success: verified=true, with senderName, receiverName, amount, currency, date, reference, sourceUrl. On failure: verified=false, with an error message explaining what went wrong (receipt not found, geo-blocked, invalid reference format).
Frequently asked questions
What does POST /api/verify do?
It verifies a single Ethiopian bank receipt. You send a JSON body with the bank id, reference number, and (for some banks) the account number. The endpoint fetches the receipt from the bank's public URL, parses it, and returns structured JSON with sender name, receiver name, amount, date, and the source URL.
Do I need an API key for /api/verify?
No. cheki's API requires no authentication. No API key, no bearer token, no OAuth. Just POST with a JSON content type and the receipt details.
What's the rate limit?
Requests are rate limited per IP: /api/verify 30 per minute, /api/verify/batch 5 per minute, /api/parse and /api/ocr 20 per minute each. Over the limit you get a 429 with a Retry-After header. For bulk verification, use POST /api/verify/batch to verify up to 20 receipts in a single request.
Read full API docs
Open cheki