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
| Status | Meaning |
|---|---|
VERIFIED | Transaction found, completed, and (if provided) receiver/amount checks passed. |
PENDING | Transaction exists but hasn't completed yet (Telebirr only). |
FAILED | Transaction exists but did not succeed, or has an invalid amount/currency. |
REJECTED | Transaction found, but the receiver name/account or minimum amount didn't match what you expected. |
NOT_FOUND | No transaction exists for the given reference. |
REQUIRES_REVIEW | The 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.