Docs / API / Errors

Errors

Every error response carries a stable code for programmatic handling, plus a human-readable message and the originating requestId.

Error response shape

error envelope
{
  "success":   false,
  "code":      "BAD_REQUEST",
  "message":   "Field 'from' is required",
  "requestId": "fd067654-..."
}

Codes

CodeHTTPMeaning
BAD_REQUEST400Zod validation failed or invalid input shape.
UNAUTHORIZED401Missing or invalid API key.
FORBIDDEN403Key lacks required scope.
NOT_FOUND404Resource doesn't exist.
CONFLICT409Idempotency conflict or duplicate resource (e.g. stream name).
RATE_LIMITED429Per-tenant rate limit exceeded. Retry-After header set.
UPSTREAM_FAILED502SES, SNS, or downstream service failure.
INTERNAL500Unexpected — check requestId against logs.

Retrying

SES-specific failures

SES messageLikely cause
SignatureDoesNotMatchAWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY wrong, or AWS_REGION doesn't match the verified identity's region.
MessageRejected: From address not verifiedSender domain isn't verified in SES, or you're in the sandbox and the recipient isn't verified.
Account in sandboxRequest production access in the SES console (~24h approval).
FromAddress deniedIAM policy restricts ses:FromAddress to specific domains. Update the policy.