Receipt Verification

Verify any Ethiopian
bank receipt.

Paste a reference, upload a screenshot, scan a QR code, or send an SMS. Tuna handles every input format and verifies it against the bank's live endpoint.

Verify

Paste, upload, or scan.

Tuna accepts receipts in any format — text references, screenshot images, QR codes, SMS messages, or receipt URLs.

How it works

One receipt in. Verified data out.

Tuna sits between you and Ethiopian bank endpoints. You send a receipt in any format — reference number, screenshot, QR code, SMS text, or URL — and Tuna parses it, identifies the bank, fetches the receipt data, and returns structured verification results.

01

Send any input

Reference number, screenshot, QR code, SMS text, receipt URL. Tuna accepts all formats. No need to figure out which bank — auto-detection handles it.

02

Parse and route

The input adapter extracts the bank and reference. If it's an image, OCR reads the text and QR detection pulls the receipt link. The manifest routes to the correct parser.

03

Verify against the bank

Tuna calls the bank's live endpoint — CBE's JSON API, Telebirr's HTML page, BOA's API — and returns structured receipt data: amount, payer, date, status.

Supported input formats

Text reference

FT numbers, receipt IDs, transaction references

Screenshot / image

OCR extracts text, QR detection pulls receipt URLs

QR code

Camera scan or image upload — reads embedded receipt links

SMS text

Paste bank SMS — auto-detects bank and extracts reference

Receipt URL

Direct bank receipt links — auto-detects bank from domain

Supported Banks

Every major Ethiopian bank.

Manifest-driven architecture. Add a bank by writing a parser and adding one entry to banks.toml. No framework changes needed.

API

One endpoint. Any bank.

REST API with auto-generated Swagger docs. Use it in your app, your bot, your backend.

# Verify a receipt
curl -X POST https://api.txna.me/verify \
-H "Content-Type: application/json" \
-d '{"bank": "CBETETAA", "ref": "FT25211G11JQ"}'
# Parse a screenshot
curl -X POST https://api.txna.me/parse-image \
-F "file=@receipt.png"
# List supported banks
curl https://api.txna.me/info

Contribute

Help improve Tuna.

Tuna's parsers are only as good as the data they're tested against. Contribute sample receipts, QR codes, screenshots, SMS messages, or bank endpoint discoveries to help us support more banks and handle edge cases.

Sample receipts

PDFs, images, or text of real receipts (with sensitive data redacted). Helps us test parsers against actual bank output formats.

QR codes

Screenshots or photos of QR codes from receipts. Especially BOA, CBE, and Telebirr QR formats.

SMS messages

Forwarded bank SMS notifications. Helps us improve SMS parsing for CBE, Awash, BOA, and other banks.

Endpoint discoveries

Found a bank receipt endpoint we don't support? Share the URL pattern, auth headers, and response format.

Submit a contribution

How to contribute

01

Redact sensitive data. Before sharing any receipt, blur or remove: account numbers, full names, phone numbers, PINs. We only need the receipt structure, not personal info.

02

Choose the right type. Screenshots go in "Full screenshot." QR code photos go in "QR code." SMS text goes in "SMS text." Receipt PDFs go in "Sample receipt."

03

Include context. If you found a new endpoint, share the URL pattern, required headers, and response format. If a parser fails on a receipt, share the failing receipt so we can fix it.

04

Open source. All contributions are used to improve Tuna's open-source parsers. Your samples help every developer using the API.

For developers

Ship verification in your app

Tuna is fully open source with official SDKs for Python and TypeScript, plus a CLI for quick terminal access.