@localpay/verification-engine

Payment receipt verification for local banks.

Verify CBE, Telebirr, Bank of Abyssinia, and E-Birr receipts from links, SMS, references, or screenshots with one TypeScript API.

4

banks

5

methods

0

framework deps

CBE receipt being verified
CBE
E-Birr receipt being verified
E-Birr
E-Birr receipt being verified
E-Birr
Telebirr receipt being verified
Telebirr

verification live

4 receipts scanned and matched

Verification methods

All four banks support all five methods

LINK

Pass the receipt URL directly. The parser fetches and parses the page.

SMS

Pass raw SMS text — the parser extracts the embedded link automatically.

TRANSACTION_REF

Pass only the reference number. URL is constructed internally.

OCR

Pass an image path or Buffer. tesseract.js runs OCR in-process.

SCREENSHOTis an alias of OCR — both keys are accepted.

Supported banks

Maintained parsers with clear verification coverage

Each integration is listed like infrastructure: parser key, supported proof types, and maintenance status. No decorative flags, no ambiguous coverage claims.

Add your own parser →

Commercial Bank of Ethiopia

CBE

Receipt URL, SMS, reference, OCR

Production parserLINKSMSOCR

Telebirr

TELEBIRR

Mobile money receipt verification

Production parserLINKSMSOCR

Bank of Abyssinia

ABYSSINIA

Receipt URL and OCR-safe extraction

Maintained parserLINKSMSOCR

E-Birr

EBIRR

Wallet receipts and references

Maintained parserLINKSMSOCR

Built for production

What's included

Built-in amount matching

Compares the declared amount against what's printed on the receipt. Rejects mismatches before they reach your business logic.

Proxy support

Route receipt fetches through HTTP CONNECT or SOCKS5 proxies to bypass geo-restrictions on bank endpoints.

Extensible parser API

Implement ParserAndExtractor and pass custom parsers into VerificationEngine with the parsers option.

Framework-independent TypeScript

Zero framework dependencies. Works in plain Node, NestJS, Fastify, or any server environment.

Want to add a new bank parser?

Open a PR against the cont branch. Implement ParserAndExtractor, add fixture tests, and anonymize all sample data. The cont branch is the active contribution branch.