Every API error response includes a reason field for programmatic handling. This page lists every code the API can return, when it happens, what to do about it, and whether it's safe to retry.
CLI users see friendly messages instead of raw codes; the CLI error table maps them.
Error response format
{ "error": { "reason": "UNAUTHORIZED", "details": "Access denied. Please check your credentials and try again." }}
Field
Type
Description
reason
string
Error code for programmatic handling
details
string
Human-readable description
Authentication (401 / 403)
Code
HTTP
When it happens
What to do
Retry?
UNAUTHORIZED
401
API key is invalid, expired, or revoked
Run pinner auth to re-authenticate. Check PINNER_AUTH_TOKEN env var.
No
PERMISSION_DENIED
403
You don't have access to this resource
Check your plan limits. Contact support if you think this is wrong.
No
Upload
Code
HTTP
When it happens
What to do
Retry?
UnsupportedFormat
422
File format isn't supported
Use a supported format (ZIP or CAR).
No
CorruptedFile
500
File is corrupted
Re-export or re-download the file and retry.
No
EmptyZIP
500
ZIP archive has no files
Add content to the ZIP and retry.
No
PasswordProtected
500
File is password-protected
Remove password protection and retry.
No
FileUploadFailed
500
Upload failed mid-transfer
Check network and retry with backoff.
Yes
FILE_UPLOAD_API_FAILED
500
Upload failed due to an internal error
Retry with backoff. If it persists, check status.pinner.xyz.
Yes
FILE_PROCESSING_FAILED
500
Server couldn't process the file
Check file integrity. Retry with backoff.
Yes
UPLOAD_NOT_FOUND
404
Upload ID doesn't exist
Check the upload ID. It may have expired or been deleted.
No
BLOCK_NOT_FOUND
404
Requested block doesn't exist
The content may not be fully pinned yet. Wait and retry.
Yes
CID_PARSE_FAILED
400
CID format is invalid
Check the CID string for typos or encoding issues.
No
Pin
Code
HTTP
When it happens
What to do
Retry?
PIN_FETCH_FAILED
500
Couldn't retrieve pin info
Retry with backoff. If it persists, the pin may not exist.