AdeyVerify

Transaction Verification

Verify CBE and Telebirr transactions

Verifies a specific transaction by reference — a token, a receipt URL, raw SMS notification text, or (for Telebirr) raw receipt HTML. AdeyVerify auto-detects the format and the provider.

curl -X POST https://your-api/api/v1/verify/transactions \
  -H "Authorization: Bearer av_test_..." \
  -H "Content-Type: application/json" \
  -d '{"provider": "AUTO", "reference": "DIH1TJ194T"}'

What you can pass as reference

  • A bare transaction token (e.g. a Telebirr invoice number, or a CBE branch-receipt code)
  • A full receipt URL (CBE mobile receipt, CBE branch receipt, or Telebirr receipt)
  • Raw SMS notification text (CBE mobile, CBE branch, or Telebirr) — AdeyVerify extracts the reference and amount details from the message itself
  • Raw Telebirr receipt HTML

Optionally confirm who received the money

Pass expectedReceiverName and/or expectedReceiverAccount to have AdeyVerify check the transaction's actual receiver against what you expected — useful for confirming a customer paid your account, not just that some transaction happened.

{
  "provider": "TELEBIRR",
  "reference": "DIH1TJ194T",
  "expectedReceiverName": "My Business Name",
  "expectedReceiverAccount": "2519****5164"
}

Account matching handles masked formats (1********2506 vs 1****2506) and bare last-4-digit references.

Status values

StatusMeaning
VERIFIEDTransaction found, completed, and (if provided) receiver/amount checks passed.
PENDINGTransaction exists but hasn't completed yet (Telebirr only).
FAILEDTransaction exists but did not succeed, or has an invalid amount/currency.
REJECTEDTransaction found, but the receiver name/account or minimum amount didn't match what you expected.
NOT_FOUNDNo transaction exists for the given reference.
REQUIRES_REVIEWThe provider was unreachable, timed out, or returned something AdeyVerify couldn't confidently classify — this needs a human to check, not an automatic pass/fail.

Idempotency

Submitting the same transaction reference twice returns the same verificationId with "replay": true instead of creating a duplicate record — safe to retry. You can also pass your own idempotencyKey to short-circuit before AdeyVerify even re-fetches the receipt.

Try it live: POST /verify/transactions.

On this page