bank ยท 4 min read

CBE Receipt QR Codes: What They Contain and How to Scan Them

CBE's new receipt sharing system uses short URLs and QR codes. Learn what's inside them, how to scan them, and how to verify instantly with cheki.

Commercial Bank of Ethiopia recently launched a new receipt sharing system. When you complete a transfer in the CBE mobile app, you can now share a short link like https://mbreciept.cbe.com.et/fHCxyV4mg5pRIwEkJO. The recipient opens this link and sees the full receipt in their browser, no app required.

This is a significant upgrade from the old system, which required the FT reference number and the last 8 digits of the receiving account to construct a receipt URL. The new system uses a single short ID and returns clean JSON data instead of a PDF.

What the QR code contains

The QR code on a CBE receipt encodes a URL in this format:

code
https://mbreciept.cbe.com.et/{SHORT_ID}

The short ID is a random string like fHCxyV4mg5pRIwEkJO. It maps to a single transaction on CBE's backend. When you scan the QR code, you get this URL, which you can paste into cheki's URL input mode to verify instantly.

๐Ÿ’ก

Try it now

Open chekiapp.vercel.app, switch to the 'Receipt URL' tab, and paste any mbreciept.cbe.com.et link. cheki calls CBE's JSON API and returns the full transaction data in under 2 seconds.

The API behind the receipts

The mbreciept.cbe.com.et page is a Nuxt.js single-page app. When it loads, it calls a JSON API at a different domain:

http
GET https://Mb.cbe.com.et/api/v1/transactions/public/transaction-detail/{SHORT_ID}

Headers:
  X-App-ID: d1292e42-7400-49de-a2d3-9731caa4c819
  X-App-Version: 0a01980b-9859-1369-8198-59f403820000

The response is structured JSON with all the transaction details:

json
{
  "id": "FT2614977L8S",
  "transactionType": "ACNX",
  "debitAccountNo": "1********8348",
  "creditAccountNo": "1********6171",
  "amountCredited": "1300.00",
  "creditCurrency": "ETB",
  "dateTimes": ["2026-05-29T08:30:00Z"],
  "debitAccountHolder": "Raeed Ansar Yusuf",
  "creditAccountHolder": "Sami Adil Zekaria",
  "paymentDetails": ["football 1mo and extratime"]
}

cheki uses this API directly. When you paste a mbreciept link, cheki extracts the short ID, calls the JSON API, and returns the parsed result. No PDF parsing needed, which makes it faster and more reliable than the old endpoint.

Old vs new CBE receipt system

FeatureOld system (apps.cbe.com.et)New system (mbreciept.cbe.com.et)
Input neededFT reference + last 8 digits of accountSingle short URL or QR scan
Response formatPDF documentStructured JSON
ParsingRequires PDF text extractionDirect JSON parsing
Speed2-4 seconds0.5-2 seconds
Account number requiredYesNo
QR code supportNoYes (encodes receipt URL)
Share linkLong URL with sensitive dataShort random ID
โš 

Old system decommissioned

The old endpoint (apps.cbe.com.et:100) has been shut down by CBE. FT reference + account verification no longer works. Only mbreciept.cbe.com.et links can be verified now.

How to scan a CBE QR code with cheki

1

Open chekiapp.vercel.app on your phone

The QR scanner uses your phone's camera, so mobile works best.

2

Tap the camera icon

It's in the top-right of the verify form, next to the QR icon. Allow camera access when prompted.

3

Point at the QR code

Hold your phone over the QR code on the receipt. A scan box overlay shows where to aim.

4

Automatic verification

Once the QR code is detected, the URL is extracted and verification happens automatically. The result appears in under 2 seconds.

Privacy and security

The new CBE receipt system masks account numbers in the API response. Instead of showing the full account number, it returns a masked version like 1********8348. This is better for privacy than the old PDF system, which included full account numbers in the document text.

The short ID in the URL is random and not guessable, which prevents receipt enumeration. You can only access a receipt if someone shares the link with you.

โš 

X-App-ID headers

The new CBE API requires hardcoded X-App-ID and X-App-Version headers. These are embedded in the mbreciept.cbe.com.et JavaScript bundle. If CBE rotates these headers, cheki will need to update them. The old PDF endpoint has no such requirement.

Inside the short ID: what we found

We reverse-engineered the token format. The short ID in a v1 mbreciept URL (like fHCxyV4mg5pRIwEkJO) is standard base64url encoding of 13 bytes. The first 3 bytes are a fixed header (7c70b1 โ€” which is why all v1 tokens start with "fHCx"). The remaining 10 bytes are an encrypted payload containing the transaction's FT reference.

The encryption uses a keyed cipher with per-token seeding. We verified this by comparing multiple tokens: the same plaintext byte at the same position produces different ciphertext bytes across receipts. This rules out simple encoding schemes (XOR, base-N packing, substitution) and confirms the payload is cryptographically protected.

CBE's server validates tokens cryptographically. If you submit an old FT reference to the new API, it rejects it with "Security Alert: Invalid or tampered legacy token!" This is intentional โ€” the new system prevents receipt enumeration. With the old system, anyone could guess FT references and pull receipts. With tokens, you can only verify receipts that were explicitly shared with you.

CBE has already shipped a v2 token format. Newer receipts use URLs like https://mbreciept.cbe.com.et/v2-hfHCxFU3NsED8vF... โ€” note the v2- prefix. The v2 payload is 15 bytes (vs v1's 13) and uses a different layout. Both v1 and v2 tokens work on the same API endpoint. cheki passes the full token through unchanged, so both formats work automatically.

โ„น

Can you generate a token from an FT reference?

No. The payload is encrypted with a server-side secret. There is no public endpoint to convert FT references to tokens, and the CBE mobile app generates tokens server-side at share-time. If you only have an FT reference, you cannot construct a valid mbreciept URL.

โš 

Legacy endpoint status

The old CBE receipt endpoint (apps.cbe.com.et:100) is decommissioned. It no longer accepts connections. If you have an old FT reference and account suffix, there is no way to verify it through cheki or any other public tool. Ask the sender for the new mbreciept.cbe.com.et link instead.

Frequently asked questions

Edit this article on GitHubReport an issue โ†’

Continue reading