Skip to content

Error Codes ​

Response Format ​

All error responses follow a consistent format:

json
{
  "message": "Human-readable error description."
}

Validation errors include field-level details:

json
{
  "message": "Validation failed.",
  "errors": {
    "field_name": ["Error description."]
  }
}

HTTP Status Codes ​

StatusNameDescription
200OKRequest succeeded
201CreatedResource created successfully (e.g., voucher generated)
401UnauthorizedInvalid or expired token, or wrong credentials
403ForbiddenIP not whitelisted or account disabled
404Not FoundResource not found (e.g., user with given phone number)
409ConflictDuplicate external_transaction_id on deposit
422Unprocessable EntityValidation error or daily limit exceeded
429Too Many RequestsRate limit exceeded --- wait before retrying

Common Error Scenarios ​

Invalid or Expired Token ​

json
// Status: 401
{
  "message": "Invalid credentials."
}

Solution: Request a new token via the authentication endpoint.

IP Not Whitelisted ​

json
// Status: 403
{
  "message": "Access denied."
}

Solution: Contact the Academia team to whitelist your server's IP address.

Daily Limit Exceeded ​

json
// Status: 422
{
  "message": "Daily limit exceeded.",
  "daily_max_amount": 5000,
  "used_today": 4950,
  "remaining": 50,
  "requested": 100
}

Solution: Wait until the next day when your daily limit resets, or contact the Academia team to increase your limit.

Duplicate Deposit ​

json
// Status: 409
{
  "message": "Duplicate transaction.",
  "external_transaction_id": "RUNPAY-TXN-12345"
}

Solution: This transaction was already processed. Use a different external_transaction_id for new transactions.

Rate Limited ​

json
// Status: 429
{
  "message": "Too many requests."
}

Solution: Wait a moment before retrying. Consider adding a delay between requests in your integration.

Validation Error ​

json
// Status: 422
{
  "message": "Validation failed.",
  "errors": {
    "denomination_id": ["The selected denomination id is invalid."]
  }
}

Solution: Check your request parameters against the API documentation.

Academia API Integration Documentation