Verifying Ethiopian payments from your own software
How do I verify Ethiopian bank payments automatically in my app?
Send the receipt reference or link to a verification API and match the returned amount and receiver against the order before you mark it paid. The three things that matter in code and not at a counter are: treat the reference as an idempotency key so the same receipt cannot pay two orders, handle the case where the bank is slow or unreachable as pending rather than failed, and store what the bank returned rather than just a boolean, because a dispute weeks later is about the amount and the parties, not about whether your code said yes.
The reference is your idempotency key
Every real defence against duplicate payments comes down to this. Store the reference against the order it paid, with a uniqueness constraint, and let the database refuse the second use. Checking in application code and then inserting is a race, and under load it is a race you will lose eventually.
This also gives you the audit trail for free. When somebody asks in a month which order a payment covered, the answer is a row.
Pending is not failed
Bank receipt services in Ethiopia vary from fast to very slow, and some are reliably slow even when healthy. Code that treats a slow lookup as a failed payment will reject genuine customers during normal operation.
Model three outcomes, not two: verified, not found, and not yet known. The third one should retry rather than refuse, and should tell the customer their payment is being checked rather than that it did not work.
Store the receipt, not the verdict
A boolean is enough on the happy path and useless on every other one. Keep the amount, the sender, the receiver, the reference and the timestamp the provider returned, along with when you fetched it.
Disputes, refunds and reconciliation all need those fields, and going back to the bank for a receipt you already fetched is slower, and may not be possible at all if the provider expires its links.
Match the receiver, in code too
The counter advice applies unchanged: a verified receipt is not a receipt to you. Compare the receiver on the result against your own account or merchant number, and fail the match if it differs, however tempting it is to skip when the amount and the reference line up.
Check a payment now
Paste a receipt link or reference from any of the Ethiopian banks and wallets links.et covers. Free, no account needed.
Verify a payment