open source · 5 min read
How to Add a New Bank to cheki (Community Guide)
cheki supports 31 Ethiopian banks but only 8 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 8 are live. The remaining 23 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 the link through the private 'Help us add' box on the bank's page on cheki.et. It goes only to the maintainers, is used only to build the parser, and is deleted afterwards. Do not paste receipt links in public GitHub issues; for those, use the bank request form with a redacted pattern. Every endpoint we know is documented on the endpoints reference page (cheki.et/endpoints).
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:
Fork the repo
Go to github.com/1RB/cheki, click Fork, clone your fork locally.
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.
Register the parser
Add your parser to src/lib/parsers/index.ts. It takes one import and one registerParser() call.
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.
Write tests
Create tests/parsers/{bankcode}.test.ts. Test buildUrl(), parse() with sample data, and edge cases (not found, empty response).
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:
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
| Status | Count | Banks |
|---|---|---|
| Live | 8 | CBE, Telebirr, Bank of Abyssinia, M-Pesa, Dashen Bank, Awash Bank, Siinqee Bank, and eBirr |
| In development | 23 | Every other bank on the banks page, including Zemen, CBE Birr and the eBirr tenants (Nib, Wegagen, Ahadu, KAAFI). Each goes live once a real receipt confirms its parser. |
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
One receipt from a bank we don't support is enough to start verifying it for every cheki user. You do not need to write code.