Reference

Error Codes

Every HTTP status code and error message returned by the ePay Business API.

Error Codes

All errors follow the same envelope shape:

{
  "status": "error",
  "data": {
    "message": "Missing or malformed Authorization header"
  }
}

Common errors

These apply to every endpoint.

StatusWhen it happens
401Missing or malformed Authorization header, or the API key is invalid / revoked.
403Your server IP is not in the IP whitelist, or the API key lacks the required permission.
429Rate limit exceeded — 100 requests per 60-second window per API key. Back off and retry.

Endpoint-specific errors

Initialize a Payment — POST /v1/transactions/initialize

StatusMessage / cause
400amount is not a valid positive numeric string, or exceeds 999999999.99.
400currencyCode is not a supported ISO 4217 code.
400customerPhone is not in a recognised Ethiopian phone format.
404No active payment source found for your account. Contact support.
429Rate limit exceeded.

Verify a Payment — GET /v1/transactions/:reference/verify

StatusMessage / cause
400Transaction is not yet completed. Message includes the current status.
404No transaction found for the given reference under your account.

Cancel a Payment — POST /v1/transactions/:reference/cancel

StatusMessage / cause
400Transaction is not in a cancellable status. Only pending and processing can be cancelled.
404No transaction found for the given reference under your account.

List Transactions — GET /v1/transactions

StatusMessage / cause
400from is after to.
400Date range between from and to exceeds 90 days.
400currency is not a valid 3-letter ISO 4217 code.
400status is not a recognised value.
400cursor is malformed or has expired.

Retrieve a Transaction — GET /v1/transactions/:reference

StatusMessage / cause
404No transaction found for the given reference under your account.

Transaction Timeline — GET /v1/transactions/:reference/timeline

StatusMessage / cause
404No transaction found for the given reference under your account.

Idempotency

POST /v1/transactions/initialize supports the x-idempotency-key header. Resending the same key within the session window returns the original response without creating a new transaction. No error is returned for duplicate requests.


Rate limiting

The limit is 100 requests per 60-second window per API key. When you hit it the API returns 429. Check for the standard Retry-After header and implement exponential backoff before retrying.

On this page