This is a searchable index of AWS API error codes across the most-used services — S3, EC2, Lambda, IAM, STS, RDS and DynamoDB. Each row gives the error code, the originating service, the HTTP status it ships with, whether it is safe to retry, and a plain-English explanation, so you can decide quickly whether to back off, fix permissions, or give up.
How it works
Every AWS API failure returns a machine-readable error code in the response body — the Code element for XML services like S3, or the __type field for JSON services like DynamoDB and Lambda — together with an HTTP status. The HTTP status alone is ambiguous: AccessDenied, ExpiredToken and SignatureDoesNotMatch are all 403. Robust clients therefore switch on the AWS error code.
Errors fall into two broad classes. Transient errors — anything matching Throttling, ProvisionedThroughputExceeded, ServiceUnavailable, InternalError, or a 5xx status — are retryable, and the AWS SDKs automatically retry them with exponential backoff and jitter. Terminal client errors — AccessDenied, ValidationException, NoSuchBucket, ConditionalCheckFailedException — will not succeed on retry and signal a configuration, permission, or logic problem you must fix.
Tips and example
Use the retry column (or the retryable-only filter) to drive your error-handling strategy:
ThrottlingException → back off + retry (transient)
ProvisionedThroughput... → back off, or move table to on-demand
AccessDenied → fix IAM/resource policy (terminal)
ConditionalCheckFailed... → expected race; re-read and retry the logic
NoSuchKey / NoSuchBucket → wrong key/bucket (terminal)
When a write to DynamoDB returns ConditionalCheckFailedException, that is not an infrastructure error — it means your condition expression evaluated false, which is often an expected optimistic-locking race you handle in application logic. Everything runs in your browser; nothing is uploaded.