API Error Handling
Table of Contents
Overview
Build robust error handling systems with standardized error responses, detailed
logging, error categorization, and user-friendly error messages. This skill
covers the full lifecycle from throwing typed errors through logging, monitoring,
and client-facing response formatting.
When to Use
- Handling API errors consistently across endpoints
- Debugging production issues with request tracing
- Implementing error recovery strategies (retry, circuit breaker)
- Monitoring and alerting on error rates
- Providing meaningful, actionable error messages to clients
- Validating request inputs before processing
- Tracking error patterns over time
Quick Start
Minimal standardized error response format:
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Input validation failed",
"statusCode": 422,
"requestId": "req_abc123xyz789",
"timestamp": "2025-01-15T10:30:00Z",
"details": [
{ "field": "email", "message": "Invalid email format", "code": "INVALID_EMAIL" }
]
}
}
Custom error class (Node.js):
class ApiError extends Error {
constructor(code, message, statusCode = null, details = null) {
super(message);
this.code = code;
this.statusCode = statusCode || ERROR_CODES[code]?.status || 500;
this.details = details;
this.timestamp = new Date().toISOString();
}
}
// Usage
throw new ApiError("NOT_FOUND", "User not found", 404);
throw new ApiError("VALIDATION_ERROR", "Missing fields", 422, fieldErrors);
Reference Guides
Detailed implementations in the references/ directory:
| Guide |
Contents |
| Error Codes & Response Format |
Complete ERROR_CODES map, response formatter, global middleware (Node.js + Python) |
| Retry Strategies & Circuit Breaker |
Exponential backoff, jitter, circuit breaker pattern |
| Monitoring & Tracking |
Sentry integration, error rate metrics, /metrics/errors endpoint |
| Validation Patterns |
Input validation, schema guards, detecting bad responses before errors occur |
Best Practices
✅ DO
- Use a consistent error response format across all endpoints
- Include
requestId and traceId in every error for observability
- Log 5xx errors at
ERROR level; log 4xx at WARN level
- Provide actionable error messages — tell the client what to fix
- Use standard HTTP status codes (4xx client errors, 5xx server errors)
- Implement retry with exponential backoff for transient failures
- Use circuit breakers to prevent cascade failures
- Validate inputs early and return all field errors at once
- Monitor error rates and alert on anomalous spikes
❌ DON'T
- Expose stack traces or internal implementation details to clients
- Return HTTP 200 for error responses
- Silently swallow errors
- Log sensitive data (passwords, tokens, PII)
- Use vague messages like "Something went wrong"
- Mix error handling logic with business logic
- Retry non-idempotent operations or client errors (4xx)
- Return different error shapes from different endpoints
1---2name: api-error-handling3description: Implement comprehensive API error handling with standardized error responses, logging, monitoring, retry logic, and validation patterns. Use when building resilient APIs, debugging issues, improving error reporting, implementing retry logic, handling HTTP error codes, managing API timeouts, designing error response handling, or adding circuit breaker patterns.4---56# API Error Handling78## Table of Contents910- [Overview](#overview)11- [When to Use](#when-to-use)12- [Quick Start](#quick-start)13- [Reference Guides](#reference-guides)14- [Best Practices](#best-practices)1516## Overview1718Build robust error handling systems with standardized error responses, detailed19logging, error categorization, and user-friendly error messages. This skill20covers the full lifecycle from throwing typed errors through logging, monitoring,21and client-facing response formatting.2223## When to Use2425- Handling API errors consistently across endpoints26- Debugging production issues with request tracing27- Implementing error recovery strategies (retry, circuit breaker)28- Monitoring and alerting on error rates29- Providing meaningful, actionable error messages to clients30- Validating request inputs before processing31- Tracking error patterns over time3233## Quick Start3435Minimal standardized error response format:3637```json38{39 "error": {40 "code": "VALIDATION_ERROR",41 "message": "Input validation failed",42 "statusCode": 422,43 "requestId": "req_abc123xyz789",44 "timestamp": "2025-01-15T10:30:00Z",45 "details": [46 { "field": "email", "message": "Invalid email format", "code": "INVALID_EMAIL" }47 ]48 }49}50```5152Custom error class (Node.js):5354```javascript55class ApiError extends Error {56 constructor(code, message, statusCode = null, details = null) {57 super(message);58 this.code = code;59 this.statusCode = statusCode || ERROR_CODES[code]?.status || 500;60 this.details = details;61 this.timestamp = new Date().toISOString();62 }63}6465// Usage66throw new ApiError("NOT_FOUND", "User not found", 404);67throw new ApiError("VALIDATION_ERROR", "Missing fields", 422, fieldErrors);68```6970## Reference Guides7172Detailed implementations in the `references/` directory:7374| Guide | Contents |75|---|---|76| [Error Codes & Response Format](references/error-codes-reference.md) | Complete `ERROR_CODES` map, response formatter, global middleware (Node.js + Python) |77| [Retry Strategies & Circuit Breaker](references/retry-strategies.md) | Exponential backoff, jitter, circuit breaker pattern |78| [Monitoring & Tracking](references/monitoring-patterns.md) | Sentry integration, error rate metrics, `/metrics/errors` endpoint |79| [Validation Patterns](references/validation-examples.md) | Input validation, schema guards, detecting bad responses before errors occur |8081## Best Practices8283### ✅ DO8485- Use a consistent error response format across all endpoints86- Include `requestId` and `traceId` in every error for observability87- Log 5xx errors at `ERROR` level; log 4xx at `WARN` level88- Provide actionable error messages — tell the client what to fix89- Use standard HTTP status codes (4xx client errors, 5xx server errors)90- Implement retry with exponential backoff for transient failures91- Use circuit breakers to prevent cascade failures92- Validate inputs early and return all field errors at once93- Monitor error rates and alert on anomalous spikes9495### ❌ DON'T9697- Expose stack traces or internal implementation details to clients98- Return HTTP 200 for error responses99- Silently swallow errors100- Log sensitive data (passwords, tokens, PII)101- Use vague messages like "Something went wrong"102- Mix error handling logic with business logic103- Retry non-idempotent operations or client errors (4xx)104- Return different error shapes from different endpoints