Skip to main content
POST
/
verify
Verify a payment
curl --request POST \
  --url https://api.check.et/api/v1/verify \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "bank": "cbe",
  "transaction_number": "FT26144SG2ST",
  "account_number": "1000876543218",
  "bank_account_id": 123,
  "receipt_url": "https://apps.ethiotelecom.et/receipt/DEL889NG4S",
  "receipt_text": "<string>"
}
'
{
  "success": true,
  "exists": true,
  "duplicate": false,
  "message": null,
  "data": {
    "bank": "cbe",
    "bank_name": "Commercial Bank of Ethiopia",
    "verification_id": "FT26144SG2ST",
    "transaction_number": "FT26144SG2ST",
    "source_url": null,
    "verification_method": "official",
    "receipt": {
      "status": "completed",
      "transaction_type": "transfer",
      "amount": 1350,
      "currency": "ETB",
      "transaction_date": "2025-06-10T14:30:00+03:00",
      "payer_name": "Hayat Ahmed",
      "payer_account": "1000126543218",
      "receiver_name": "Abebe Bekele",
      "receiver_account": "1000876543218",
      "description": "Payment"
    }
  }
}
Pass receipt_text in the request body. The text can be OCR output from a receipt image or manually copied from the app.

Use case

  1. Customer photographs their receipt
  2. Your app runs OCR (e.g. Google ML Kit, Tesseract)
  3. You send the extracted text to Check.et
  4. Check.et parses the bank and reference, then verifies

Tips

  • Add "bank": "cbe" as a hint if you know the bank - improves parsing accuracy
  • The text doesn’t need to be clean; Check.et handles noise from OCR
  • Max receipt_text length: 50,000 characters

Example

{
  "receipt_text": "Commercial Bank of Ethiopia\nFT Reference: FT26144SG2ST\nAmount: ETB 1,350.00\nDate: 10 Jun 2025\nPayer: Hayat Ahmed",
  "bank": "cbe",
  "account_number": "1000876543218"
}

Authorizations

Authorization
string
header
required

API key from your dashboard - starts with chk_. Requires a business account.

Body

bank
enum<string>

Bank code. Required unless using receipt_url, receipt_file, or receipt_text.

Available options:
cbe,
telebirr,
dashen,
awash,
boa,
zemen,
cbebirr,
mpesa,
sinqee
Example:

"cbe"

transaction_number
string

Reference number from the receipt. Required unless using receipt_url, receipt_file, or receipt_text.

Example:

"FT26144SG2ST"

account_number
string

Your receiving account (required for CBE, BOA). For CBE Birr, pass the payer's phone number (251XXXXXXXXX).

Example:

"1000876543218"

bank_account_id
integer

ID of a saved bank account - use instead of account_number.

receipt_url
string

Share URL from the banking app. Auto-extracts bank and transaction number.

Example:

"https://apps.ethiotelecom.et/receipt/DEL889NG4S"

receipt_text
string

OCR'd text from a receipt image (max 50,000 chars). Required alongside image files.

Response

Verified - success: true means the payment is confirmed

success
boolean

true = transaction confirmed

Example:

true

exists
boolean

true = transaction found in bank records

Example:

true

duplicate
boolean

true = already verified in this branch

Example:

false

message
string | null
Example:

null

data
object
existing_verification_id
integer

Only present when duplicate=true

Example:

9812

verified_at
string<date-time>

Only present when duplicate=true