Decline codes and timeouts
Gateway codes, verify status, and the 120 second timeout.
Most gateway calls return HTTP 200. Read code in the JSON. For verify, also read status. Verify does not use Basic auth. Charge /gateway/ does.
Codes
code | Meaning |
|---|---|
601 | Success. Save sid, mark paid. |
603 | Waiting on phone approval. Poll verify on hosted checkout or e-Wallet API. Don’t charge again. Stop on 601 or 600/604. |
604 | Insufficient balance |
600 | Failed |
0 | Wrong username or API key |
"404" | Missing or empty fields |
Verify
status | code | Meaning |
|---|---|---|
success | 601 | Paid. Fulfill the order. |
pending | 603 | Still waiting — keep polling verify, don’t charge again |
failed | 600 or 604 | Declined or insufficient |
Map these exact strings in your app or plugin (success / pending / failed). Do not expect failure — verify always returns failed for declines.
Prefer sid. Verify by order_id returns only the most recent payment for that id.
payment_type on verify: EDAHAB, ZAAD (Waafi — not "WAAFI"), PREMIER WALLET, or CARD.
Timeouts
Set the total HTTP timeout to 120 seconds. eDahab can take about a minute. If you time out, verify on hosted checkout or e-Wallet API before charging again.
Updated about 2 months ago
Did this page help you?
