Odit Verify

Overview

Verify Ethiopian receipt URLs from one API endpoint hosted in Ethiopia.

v.odit.et fetches receipts from the official provider over an Ethiopia-egress link and returns the parsed receipt as JSON. Built for backends that can't reach the provider directly from their region.

How it works

  1. Sign up at /signup and mint an API key from the dashboard.
  2. POST the receipt URL to /api/verify.
  3. We fetch the receipt from the official provider, parse it, and return JSON.

Supported providers

ProviderURL shapeReturns
telebirrtransactioninfo.ethiotelecom.et/receipt/<ref>HTML scraped into JSON
CBEmbreciept.cbe.com.et/<id> (short link)PDF or JSON depending on <id>
CBEapps.cbe.com.et:100/?id=<id> or /BranchReceipt/<id>PDF (parsed in-house)
CBEmb.cbe.com.et/api/v1/transactions/public/...JSON
Zemenshare.zemenbank.com/rt/<token>/pdfPDF (parsed in-house)

Quick example

References shown here are placeholders — substitute one from a receipt you control.

curl -sX POST https://v.odit.et/api/verify \
  -H "x-api-key: vk_live_..." \
  -H "content-type: application/json" \
  -d '{"url":"https://transactioninfo.ethiotelecom.et/receipt/ABCD1234EF"}' | jq .
{
  "ok": true,
  "providerKey": "telebirr",
  "resolvedUrl": "https://transactioninfo.ethiotelecom.et/receipt/ABCD1234EF",
  "httpStatus": 200,
  "fetchedAt": "2026-01-01T00:00:00.000Z",
  "receipt": {
    "source": "telebirr-html",
    "payerName": "<payer name>",
    "transactionStatus": "Completed",
    "receiptNo": "ABCD1234EF",
    "totalPaidAmount": "100 Birr",
    "paymentDate": "01-01-2026 00:00:00"
  },
  "rawHtmlLength": 25928,
  "error": null
}

CBE responses have a different shape; see POST /api/verify.

On this page