Back to All Blogs1 min read8 Sept 2026
Backend Engineering Essentials · Part 5 of 7
API Error Handling: Design Failures as Carefully as Success
“Create predictable errors without leaking sensitive implementation details.”
API Error Handling
Clients need predictable failures.
Stable Error Contract
{
"code": "RESOURCE_CONFLICT",
"message": "This slug is already in use",
"requestId": "req_01KABC",
"fields": {
"slug": "Choose another slug"
}
}
Expected Errors
400 → malformed request
401 → authentication required
403 → permission denied
404 → resource not found
409 → conflict
422 → validation failure
429 → rate limited
Unexpected Errors
Do not send SQL errors, stack traces, secrets or infrastructure details to public clients.
Request IDs
logger.error({
event: "create_post_failed",
requestId,
userId,
error
});
Note
Failure behavior is part of your API contract.
Finished this article?
Mark it done to update your series progress.