links.et

Providers overview

Every supported receipt host, the source tag each one stamps on its receipt, and the shape it returns.

links.et resolves an inbound URL or reference into an upstream call against one of these hosts, parses the response, and returns a provider-tagged receipt object. The source field on the receipt tells you which schema you are looking at, so switch on that rather than on the host.

17 banks and wallets, plus one point-of-sale format.

ProviderSource tagHostsReturn shape
Telebirrtelebirr-htmltransactioninfo.ethiotelecom.etHTML scraped
CBE, PDFcbe-pdfapps.cbe.com.etPDF parsed
CBE, JSONmb-jsonmb.cbe.com.et · mbreciept.cbe.com.etJSON re-mapped
CBE Birrcbebirr-pdfcbepay1.cbe.com.et · cbepay2.cbe.com.etPDF parsed
Bank of Abyssiniaboa-jsoncs.bankofabyssinia.comJSON envelope flattened
Zemen Bankzemen-pdfshare.zemenbank.comPDF parsed
Awash Bankawash-htmlawashpay.awashbank.com:8225HTML scraped
Dashen Bankdashen-pdfreceipts.dashenbanksc.comPDF parsed
Dashen Super Appdashen-htmlreceipt.dashensuperapp.com · api.dashensuperapp.comHTML scraped
M-PESAmpesa-pdfm-pesabusiness.safaricom.etPDF parsed
COOPay Ebirrebirr-htmlreceipt.ebirr.com/coopay/…HTML scraped
Kaafi Ebirrebirr-htmlreceipt.ebirr.com/kaafimf/…HTML scraped
Amhara Bankamhara-jsonreceipt.amharabank.com.et · transaction.amharabank.com.etJSON re-mapped
Abay Bankabay-htmlabaymobile.com.etHTML scraped
Berhan Bankberhan-pdftransactioninfo.berhanonline.etPDF parsed
Oromia Bankoromia-pdfobinfo.oromiabank.comPDF parsed
Ahadu Bankahadu-pdfreceipt.ahadubank.comPDF parsed
Siinqee Banksiinqee-pdfreceipts.siinqeebank.com:871PDF parsed
ZamZam Bankzamzam-jsonreceipt.zamzambank.com.etJSON re-mapped
HuluBeje (point of sale)hulubeje-dxxrdvet.hulubeje.comExport parsed

Both Ebirr brands share one host and one parser, and are told apart by the first path segment. coopay and kaafi are separate providers on the receipt.

Two things to remember:

  • Reference numbers shown in these docs are placeholders (ABCD1234EF, FT00000000, and so on). Substitute your own when testing.
  • Receipts are immutable once issued, so we cache them forever. The second hit on the same URL returns from cache and carries x-cache: HIT. Cache hits never count against your plan's verification cap.

Screenshots, and the one provider that is different

POST /api/verify-image reads a screenshot, finds the reference or the QR, and then verifies it upstream the normal way, so the receipt you get back is the bank's copy rather than anything read off the image.

Bank of Abyssinia is the exception. Its slip page encrypts the receipt fields into the QR instead of linking to a page we could fetch, and the 12-character reference it prints will not resolve on its own. There the QR payload is the answer, and the upstream object says so plainly:

{
  "attempted": false,
  "reason": "qr_receipt",
  "provider": "boa",
  "receipt": { "source": "boa-qr", "transactionReference": "FT00000000" }
}

attempted: false means nothing was fetched from the bank. Those fields came out of the image. Treat them as weaker evidence than any other receipt here: a QR is tamper-evident, not signed, so editing the amount in a screenshot leaves the QR disagreeing with it, but anyone can mint a matching code. Account numbers arrive already masked by the bank, so the QR reveals nothing the screenshot did not already show.

Siinqee has a five-view meter

receipts.siinqeebank.com allows about five requests per receipt reference, globally rather than per caller, and counts failed attempts too. Once a link is spent, nobody can open it again, including the customer.

We hold to that budget: a Siinqee link is fetched once per verification with no egress retry, and a failure is cached for 24 hours rather than the usual 30 minutes, so retries spread over days instead of burning the budget in an afternoon. Your side of the bargain is to not poll a Siinqee reference. Ask once, then read the cached answer as often as you like, since cache hits never touch the bank.

Availability

Provider hosts go down on their own schedule, and a receipt that will not verify is usually the bank rather than us. apps.cbe.com.et (the CBE PDF host) has been unreachable since July 2026, so CBE receipts resolve through the JSON host instead. The status page probes every host on this list every few minutes and shows the current state.

On this page