Response Codes
Koard uses standard HTTP status codes.
| Code | Meaning |
|---|---|
200 |
Success |
201 |
Resource created |
400 |
Validation failure — check the response body for details |
401 |
Missing or invalid API key |
403 |
Insufficient permissions for this operation |
404 |
Resource not found |
409 |
Conflict — resource already exists or state mismatch |
423 |
Locked — merchant account is blocked and cannot perform this operation |
429 |
Rate limited — slow down and retry |
500 |
Unexpected server error |
Error Body Format
Errors return a structured envelope with a machine-readable error code, a short
message category, and a human-readable details string. Branch on error in
client code; details is always a string (never a list or object):
{
"error": "validation_error",
"message": "Request validation failed",
"details": "query: sort_by: Input should be 'name' or 'volume'"
}
500 responses never leak internal exception messages or stack traces — the
incident is logged server-side and details carries only a generic string.
Envelope Error Codes
When an error is returned as the structured envelope, the error field is one of:
error |
HTTP | message |
|---|---|---|
validation_error |
400 | Request validation failed |
authentication_required |
401 | Authentication required |
permission_denied |
403 | Permission denied |
not_found |
404 | Resource not found |
conflict |
409 | Resource state conflict |
rate_limited |
429 | Rate limit exceeded |
upstream_error |
502 | Upstream processor error |
internal_error |
500 | Internal server error |

