open source ยท 5 min read

How to Add a New Bank to cheki (Community Guide)

cheki supports 31 Ethiopian banks but only 9 are live. Here's how you can help add the rest. No coding required, just share a receipt. For developers: how to write a parser and submit a PR.

cheki lists 31 Ethiopian banks and wallets, but only 9 are live. The remaining 22 are listed as 'in development' because we haven't confirmed their public receipt endpoints yet. This is where the community comes in.

๐Ÿ’ก

No coding required

The most valuable contribution is a receipt. If you use a bank we don't support yet, share a receipt screenshot or URL and we'll do the technical work.

Option 1: Share a receipt (easiest)

If you have a receipt from a bank marked 'In development' on cheki, here's what we need:

  • A screenshot of the full receipt (or the receipt URL if the bank has a share feature)
  • The QR code on the receipt (if there is one), scan it with any QR reader and send us the decoded text
  • The transaction reference number
  • The bank name

Send it via GitHub (open an issue with the 'new-bank' label) or via Telegram. We'll reverse-engineer the endpoint and add the bank to cheki, usually within a day.

โš 

Privacy

Redact or blur sensitive information like full account numbers before sharing. We only need the receipt structure, the reference number, and the QR code payload, not your full account details.

Option 2: Write a parser (for developers)

If you can code, you can add a bank yourself. cheki's architecture is hexagonal. Each bank is a self-contained parser module. Here's the process:

1

Fork the repo

Go to github.com/1RB/cheki, click Fork, clone your fork locally.

2

Create a parser file

Create src/lib/parsers/{bankcode}.ts. Extend BaseParser and implement buildUrl() and parse(). Look at telebirr.ts or dashen.ts for examples.

3

Register the parser

Add your parser to src/lib/parsers/index.ts. It takes one import and one registerParser() call.

4

Add the bank to banks.ts

Add a bank entry with code, name, endpoint, description, FAQ, and SEO metadata. Set status to 'live' if the endpoint works.

5

Write tests

Create tests/parsers/{bankcode}.test.ts. Test buildUrl(), parse() with sample data, and edge cases (not found, empty response).

6

Submit a PR

Push to your fork and open a pull request. Include the receipt URL format in the PR description so we can verify.

The parser interface is simple:

typescript
class MyBankParser extends BaseParser {
  readonly bankId = "mybank";
  readonly bankName = "My Bank";
  readonly responseType = "html" as const; // or "json" or "pdf"
  readonly requiresAccount = false;
  readonly requiresPhone = false;

  buildUrl(ref: string, account?: string): string {
    return `https://mybank.com/receipt/${ref}`;
  }

  parse(data: string | Buffer, contentType: string): ParsedReceipt {
    // Parse the HTML/JSON/PDF response
    // Return { verified: true, senderName, receiverName, amount, ... }
  }
}

Option 3: Report broken endpoints

Banks occasionally change their receipt URL formats. If you notice that a bank that used to work on cheki is now returning errors, open a GitHub issue with:

  • The bank name
  • The error message you see
  • The reference number you tried (so we can test)
  • What the receipt looks like in the bank's own app (screenshot if possible)

Because cheki is open source, anyone can submit a fix, not just the original developers. This is the advantage of community-built tools over closed services like check.et and verify.et.

Current coverage status

StatusCountBanks
Live9CBE, Telebirr, BOA, M-Pesa, Dashen, Zemen, CBE Birr, Siinqee, eBirr
Via eBirr (ready)4Nib International, Wegagen, Ahadu, KAAFI
Researching18Abay, Addis, Amhara, Berhan, Bunna, Enat, Global, Lion, Oromia Int'l, Hibret, ZamZam, Hijra, Shabelle, Goh Betoch, Tsedey, Gadaa, Rammis, DBE

Why community matters for Ethiopian fintech

Ethiopia has 30+ licensed banks, but most receipt verification services (check.et, verify.et, qbirr, tinaverify) only support 6-10. The long tail of smaller and newer banks gets ignored because it's not profitable enough for paid services.

Open source changes this. Every contribution, whether it's a receipt screenshot or a full parser, helps cover a bank that paid services won't bother with. The community can move faster than any single company.

โœ“

Every receipt counts

Even one receipt from a bank we don't support can unlock verification for every cheki user. You don't need to write code to make a difference.

Frequently asked questions

Edit this article on GitHubReport an issue โ†’

Continue reading