technical · 6 min read

Ethiopian Bank Receipt Formats: A Complete Reference

Every Ethiopian bank receipt reference format, endpoint URL, and response type in one place. CBE, Telebirr, BOA, M-Pesa, Dashen, Awash, Zemen, CBE Birr, Siinqee, eBirr.

This is a complete technical reference for every Ethiopian bank and mobile wallet receipt system. If you're building a verification system, integrating payments, or just want to understand how Ethiopian bank receipts work, this is your reference.

All endpoints are public

Every endpoint listed here is publicly accessible without authentication. The data is free. cheki, check.et, and verify.et all use these same endpoints.

CBE (Commercial Bank of Ethiopia)

CBE has two receipt systems. The new system (mbreciept) is preferred for its clean JSON response.

New system (mbreciept.cbe.com.et)

FieldValue
URL formathttps://mbreciept.cbe.com.et/{SHORT_ID}
API endpointhttps://Mb.cbe.com.et/api/v1/transactions/public/transaction-detail/{SHORT_ID}
Required headersX-App-ID, X-App-Version
Response formatJSON
Input neededShort URL or QR code scan
Account number requiredNo
Geo-blockedNo

Old system (apps.cbe.com.et)

FieldValue
URL formathttps://apps.cbe.com.et:100/?id={FT_REFERENCE}{LAST_8_DIGITS}
Response formatPDF
Input neededFT reference (starts with FT) + last 8 digits of receiving account
Account number requiredYes (last 8 digits)
Geo-blockedNo

Reference format: FT followed by 10 alphanumeric characters. Example: FT26140P01YB

code
# Old CBE URL construction
FT_REFERENCE = 'FT26140P01YB'
ACCOUNT = '1000560536171'
LAST_8 = ACCOUNT[-8:]  # '60536171'
URL = f'https://apps.cbe.com.et:100/?id={FT_REFERENCE}{LAST_8}'
# https://apps.cbe.com.et:100/?id=FT26140P01YB60536171

Telebirr (Ethio Telecom)

FieldValue
URL formathttps://transactioninfo.ethiotelecom.et/receipt/{REFERENCE}
Response formatHTML
Input neededTransaction reference only
Account number requiredNo
Geo-blockedYes (Ethiopian IPs only)

Reference format: 2-3 letter prefix followed by 6-8 alphanumeric characters. Common prefixes:

PrefixTransaction type
DETPerson-to-person transfer (most common)
CHQCheque-related transaction
DABBank account transfer
DELMerchant payment
ADQAdditional transaction types
code
# Telebirr URL construction
REFERENCE = 'DET8FJGUJ4'
URL = f'https://transactioninfo.ethiotelecom.et/receipt/{REFERENCE}'

Geo-blocking

Telebirr's endpoint blocks all non-Ethiopian IP addresses at the network level. Cloud servers (AWS, Vercel, Cloudflare) cannot reach it. Self-host cheki on an Ethiopian server or use the fallback URL feature.

Bank of Abyssinia (BOA)

FieldValue
URL formathttps://cs.bankofabyssinia.com/api/onlineSlip/getDetails/?id={REFERENCE}{LAST_5_DIGITS}
QR formatAES-256-CBC encrypted CSV (decrypts to source, amount, reference, date, receiver)
Response formatJSON
Input neededTransaction reference + last 5 digits of receiving account, OR the QR payload
Account number requiredYes (last 5 digits), skipped if QR payload is provided
Geo-blockedNo

Reference format: Alphanumeric, typically starts with 2 letters. Example: AB12345678 or FT26167ZVPCJ

💡

QR verification works for inter-bank transfers

BOA's online slip API does not recognize inter-bank transfer references (e.g., FT... sent to CBE). However, the QR code on the receipt is an AES-256-CBC encrypted payload that contains the full transaction details. cheki decrypts it server-side with the key exposed in BOA's receipt web app, so QR-based verification works even when the JSON API returns 'Invalid reference number'. See our BOA QR code breakdown for encryption parameters and security analysis.

💡

No Selenium needed

Unlike the ethiobank_receipts library which requires Chrome WebDriver for BOA, cheki uses BOA's JSON API directly. This works in serverless environments without browser dependencies.

M-Pesa Ethiopia (Safaricom)

FieldValue
URL formathttps://m-pesabusiness.safaricom.et/api/receipt/getReceipt?trxNo={REFERENCE}
Response formatJSON
Input neededTransaction reference only
Account number requiredNo
Geo-blockedYes (Ethiopian IPs only)

Reference format: Alphanumeric Safaricom transaction reference.

Dashen Bank

FieldValue
URL formathttps://receipt.dashensuperapp.com/receipt/{REFERENCE}
Response formatPDF
Input neededTransaction reference only
Account number requiredNo
Geo-blockedNo

Reference format: Alphanumeric Dashen transaction reference. Use the Transaction Reference, not the Transfer Reference. Works for both within-Dashen and Other Bank Transfer (inter-bank) receipts.

Awash Bank

Awash Bank receipts are public HTML pages on awashpay.awashbank.com, served by a Java backend called MoonlightMBanking behind an F5 BIG-IP WAF. We have fully reverse-engineered the share-link structure using 18 real samples collected from SMS messages, GitHub repos, and community contributions. The share link is sent automatically via SMS after every transaction.

FieldValue
URL formathttps://awashpay.awashbank.com:8225/-{TX_ID_BASE36}-{COUNTER_BASE36}
Part 1 (TX_ID_BASE36)Numeric Transaction ID encoded in base-36 (case-insensitive)
Part 2 (COUNTER_BASE36)Server-side counter, 6 chars base-36, strictly validated
Response formatHTML
Input neededFull Awash share link (from SMS or app)
Account number requiredNo
Geo-blockedNo
BackendJava (MoonlightMBanking), nginx, F5 BIG-IP ASM WAF
App packagecom.sc.awashpay (AwashBirr Pro)
SMS deliveryShare link sent automatically in SMS after every transaction

Transaction ID structure

The numeric Transaction ID is not random. Since 2026, it has a fixed structure: YYMMDDHHMM followed by a 5-digit per-minute sequence number. For example, Transaction ID 260607112275735 breaks down as:

ComponentDigitsValueMeaning
YY226Year (2026)
MM206Month (June)
DD207Day (7th)
HH211Hour (11)
MI222Minute (22)
SEQ575735Per-minute sequence number

This means the Transaction ID itself encodes the transaction date and time down to the minute. The 5-digit sequence resets each minute and is not globally monotonic. We verified this against all 13 new-format samples. Transactions before 2026 use a different hex-like format (e.g. E3BF28E4B8C1) that does not follow this structure.

URL structure breakdown

Example share link: https://awashpay.awashbank.com:8225/-2KDL95Z0NR...

SegmentBase-36 valueDecimal valueMeaning
Part 12KDL95Z0NR260607112275735Transaction ID (YYMMDDHHMM + 5-digit seq)
Part 24U61O6292535286Server counter (increases with time)

We verified this with 18 real Awash receipts spanning April 2025 to June 2026, covering transaction types including Send To Bank, IPS Bank Transfer, Send to Wallet, Telebirr Transfer, Merchant Payment, and Other Bank Transfer. In every case, converting part 1 from base-36 to decimal produced the exact Transaction ID. The URL is case-insensitive (lowercase works).

Counter analysis (18 samples)

Part 2 is not a hash of the Transaction ID. We tested and ruled out: CRC32, Adler32, MD5/SHA1/SHA256 truncation, Java hashCode, DJB2, FNV-1a, HMAC, affine functions, modulo operations, and bit manipulation. It is a monotonically increasing counter with an accelerating rate that correlates with time.

DateCounter (decimal)Rate since previousSource
2025-04-1078,960,518GitHub
2025-07-26120,823,2364.4/secSMS
2025-08-04124,196,9365.4/secGitHub
2025-11-04167,318,5685.4/secSMS
2026-01-28214,318,3256.4/secGitHub SMS
2026-02-11222,463,1616.7/secSMS
2026-03-08236,606,8906.6/secSMS
2026-03-14240,498,5067.5/secSMS
2026-04-01251,165,242~7.1/sec (interpolated)Brute-forced
2026-04-02251,958,281~7.2/secSMS
2026-04-17261,177,9447.1/secSMS
2026-05-14277,774,5157.2/secOriginal samples
2026-06-07292,535,2867.2/secOriginal samples
2026-06-22302,458,1597.5/secCommunity

The counter rate is accelerating: 4.4/sec in mid-2025, 6.4/sec by January 2026, and 7.5/sec by June 2026. A quadratic model fits with R-squared = 0.9999 and maximum residual of ±1M. For dates bracketed by nearby samples, local linear interpolation gives predictions within ±100K.

The server strictly validates both segments. Replacing part 2 with a nearby value returns 'Mistmatch / invalid receipt id'. Omitting it returns 'Invalid receipt id'. Part 2 must be exactly 6 base-36 characters (5 or 7 chars returns mismatch). Extra dashes or special characters are rejected by the WAF.

Server architecture

The Awash receipt server runs a Java application called MoonlightMBanking (revealed by the JSESSIONID cookie path). It sits behind nginx and an F5 BIG-IP ASM WAF that blocks all paths except the /-{part1}-{part2} receipt URL pattern. A merchant API exists at /awashbirrpro/merchant-api/ but is also WAF-blocked. The receipt HTML contains no client-side token generation logic: the share URL is pre-baked in the HTML and only used to render a QR code.

ComponentDetails
Backend appMoonlightMBanking (Java, Jetty/Tomcat)
Web servernginx
WAFF5 BIG-IP ASM (blocks all non-receipt paths)
Load balancerF5 BIG-IP (TS01121d40 persistence cookie)
App nameAwashBirr Pro (com.sc.awashpay)
Merchant API/awashbirrpro/merchant-api/DebitRequest/ (WAF-blocked)
Dev API/awashpaytest/Rest/ (separate endpoint)
Client-side JSOnly QRCode generation, no token logic
SMS deliveryReceipt link included in SMS automatically after transaction

Brute-force proof of concept (2 successes)

We have proven that a valid share URL can be constructed from a Transaction ID alone, without the Awash app or SMS, by brute-forcing the counter. We did this successfully twice:

Target dateTransaction IDPredicted P2Actual P2OffsetURLs scannedTime
2026-05-14260514120752793277,659,280277,776,101+116,821116,82018.3 min
2026-04-01260401182242481251,236,520251,165,242-71,27865,24316.5 min

Both scans ran at 66-106 req/sec with zero WAF blocks and less than 0.01% error rate. The server did not rate-limit or block the probing. The April 1 scan was especially efficient because we had a nearby sample from April 2 (just 1 day away) to anchor the prediction.

What this means

Given a Transaction ID, cheki can construct the share URL by: (1) converting the txID to base-36 for part 1, (2) extracting the timestamp from the txID structure, (3) predicting the counter using our 18-sample model, and (4) brute-forcing the remaining uncertainty. With nearby anchor samples, the scan takes 15-20 minutes. With 50+ samples, it could drop to under 1 minute.

What we still need to figure out

  1. Is the counter global across all Awash transactions, or per branch / per sender / per channel?
  2. Why did one Transaction ID (March 28) resist brute-forcing across 8M+ URLs? Was the counter outside our model range, or is there a different explanation?
  3. What is the relationship between the old hex-format txIDs (pre-2026) and the new YYMMDDHHMM format?
  4. Can the counter prediction be improved with more samples from underrepresented time periods?
💡

Help us improve the counter model

We have 18 samples but need more from underrepresented periods (especially March 2026, September-December 2025, and pre-July 2025). If you have Awash SMS messages with receipt links, please share the two-part token (e.g. 2KDL95Z0NR-4U61O6) and the transaction date/time on GitHub. Each sample narrows the prediction window and reduces brute-force time.

Privacy note

If you share Awash links, the receipts already contain the transaction details. If you want to help without exposing real data, paste just the two-part token (e.g. 2KDL95Z0NR-4U61O6) and the transaction date/time from the SMS. Do not include the full URL if you are not comfortable sharing it.

How to verify Awash with cheki

Paste the full share link from your Awash SMS or app into cheki. The parser will extract the Transaction ID, receiver, amount, date, and other fields from the official HTML receipt. cheki handles all receipt variants (Transfer successful, Transaction successful, Transaction Details, Telebirr Transfer) including IPS bank transfers, merchant payments, send-to-wallet, and other-bank transfers.

Zemen Bank

FieldValue
URL formathttps://share.zemenbank.com/rt/{REFERENCE}/pdf
Response formatPDF
Input neededTransaction reference only
Account number requiredNo
Geo-blockedNo

CBE Birr

FieldValue
URL formathttps://apps.cbebirr.com.et/receipt/{REFERENCE}?phone={PAYER_PHONE}
Response formatHTML
Input neededTransaction reference + payer phone number
Account number requiredNo (phone instead)
Geo-blockedNo

Siinqee Bank

FieldValue
URL formathttps://siinqeebank.com/receipt/{REFERENCE}
Response formatHTML
Input neededTransaction reference only
Account number requiredNo
Geo-blockedNo

eBirr (Nib, Wegagen, Ahadu, KAAFI)

eBirr is a mobile money platform connecting 5 Ethiopian financial institutions through a single receipt endpoint. Each partner bank has its own tenant code in the URL.

FieldValue
URL formathttps://receipt.ebirr.com/{tenant}/{token}
Tenant codesnib (Nib International), wegagen (Wegagen), ahadu (Ahadu), kaafimf (KAAFI Microfinance)
Response formatHTML
Input neededFull receipt URL or tenant/token string (e.g., nib/abc123)
Account number requiredNo
Geo-blockedNo

The user shares the receipt from the eBirr app to get a receipt.ebirr.com/{tenant}/{token} URL. cheki auto-detects the tenant and maps it to the correct partner bank. Invalid tokens return a 'Not Found Page' (HTTP 200 with red H1).

eBirr vs Telebirr

eBirr and Telebirr are completely different services. Telebirr is Ethio Telecom's mobile wallet. eBirr is a separate mobile money platform that partners with multiple banks (Nib, Wegagen, Ahadu, KAAFI, Siinqee/Coopbank).

Other Ethiopian banks (researching)

The following 18 banks are licensed in Ethiopia but do not yet have confirmed public receipt verification endpoints. cheki lists them as 'in development' and is actively researching their receipt systems:

BankEstablishedBranchesStatus
Abay Bank2010279Researching
Addis International Bank2011146Researching
Amhara Bank2022320Researching
Berhan International Bank2009-Researching
Bunna International Bank2009-Researching
Enat Bank2013-Researching (women-focused)
Global Bank Ethiopia2012-Researching
Lion International Bank2006-Researching (aka Anbessa)
Oromia International Bank2008-Researching
Hibret Bank1998-Researching (formerly United Bank)
ZamZam Bank2021-Researching (Islamic)
Hijra Bank2021-Researching (Islamic)
Shabelle Bank2021-Researching
Goh Betoch Bank2021-Researching (housing/mortgage)
Tsedey Bank2022-Researching
Gadaa Bank2022-Researching
Rammis Bank2022-Researching
Development Bank of Ethiopia1901-State development bank (no retail)
💡

Help us add more banks

If you have a receipt from any of these banks with a QR code or receipt URL, contact us on GitHub. We'll investigate the endpoint and add it to cheki for free.

Auto-detection patterns

cheki auto-detects the bank from the reference format. Here are the detection rules:

PatternBank
Starts with FTCBE
Starts with DET, CHQ, DAB, DEL, ADQ, DEP, CHGTelebirr
2 letters + digits (general)BOA
2 letters + 6+ digitsM-Pesa
awashpay.awashbank.com:8225/-{A}-{B}Awash Bank
receipt.ebirr.com/{tenant}/{token}eBirr
tenant/token (nib/, wegagen/, ahadu/, kaafimf/)eBirr

URL auto-detection

cheki also detects the bank from pasted URLs. If you paste a mbreciept.cbe.com.et link, it knows it's CBE. If you paste a transactioninfo.ethiotelecom.et link, it knows it's Telebirr. If you paste an awashpay.awashbank.com:8225/-... link, it knows it's Awash. No manual bank selection needed.

Frequently asked questions

Edit this article on GitHubReport an issue →

Continue reading