The error format, common error codes, and how to retry safely.
Errors are JSON with a machine-readable code, an HTTP status, a human-readable message, and sometimes structured data:
{
"code": "INSUFFICIENT_BALANCE",
"status": 422,
"message": "Insufficient balance to approve this payout",
"data": {
"walletBalance": "50.00",
"totalOpenAmount": "150.00",
"currency": "EUR"
}
}| Status | Code | Meaning |
|---|---|---|
| 401 | UNAUTHORIZED | Missing or invalid token |
| 403 | FORBIDDEN | Token lacks a required scope or permission |
| 404 | NOT_FOUND | Resource does not exist for the authenticated team |
| 409 | CONFLICT | Update rejected, e.g. an immutable payout |
| 422 | INPUT_VALIDATION_FAILED | The request body failed validation; message is a readable summary and data carries per-field issues |
| 422 | INSUFFICIENT_BALANCE | Pre-approved payout exceeds the team wallet balance |
| 500 | INTERNAL_SERVER_ERROR | Unexpected server fault |
customId, so a retried create never duplicates a payout — see Idempotency.