Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.pinata.cloud/llms.txt

Use this file to discover all available pages before exploring further.

Every API error comes back as JSON with a single error field and an HTTP status code:
{ "error": "Validation failed: skills exceeds maximum of 10" }
This page maps the codes you’ll actually see in the wild to a cause and a fix. For step-by-step debugging, see Troubleshooting.

By HTTP status

400 Bad Request

The request shape or content is invalid.
When you’ll see itLikely causeFix
POST /v0/agentsname missing, too long, or contains banned charactersTrim or rename. Max 100 chars.
POST /v0/secretsname or value emptyProvide both
POST /v0/agents/.../skillsMore than 10 skills attachedDetach skills first
POST /v0/agents/.../console/execEmpty commandProvide the command string
POST /v0/agents/.../snapshots/syncStorage not configured for this workspacePinata storage isn’t provisioned - contact support
POST /v0/agents/.../config/validateconfig field isn’t valid JSONFix syntax
POST /v0/agents/.../domainsBoth subdomain and customDomain provided, banned name, or limit reachedPick one. Avoid names containing “pinata”. Max 5 domains.
POST /v0/agents/.../snapshots/resetsnapshotCid missing or malformedUse a CID from the snapshot list
POST /v0/agents/.../channels/{channel}Token missing on initial setup, or unsupported channel nameProvide botToken (and appToken for Slack)
POST /v0/agents/.../files/uploadfilename empty or contentBase64 malformedSanitize filename, base64-encode without the data URL prefix

401 Unauthorized

No credential, or the credential was rejected before reaching authorization.
CauseFix
Missing Authorization headerAdd Authorization: Bearer <token>
Pinata JWT expired or revokedGenerate a new key in Account → API Keys
Gateway token rotatedCopy the current value from Danger → Agent → Gateway Token
Token from a different workspaceSwitch workspaces in Account → Workspaces or use a key from the right workspace

403 Forbidden

Authenticated, but the action isn’t allowed.
CauseFix
Agent limit reached on POST /v0/agentsUpgrade your plan or delete an unused agent
Free plan trying to use a paid feature (channels, custom domains)Upgrade plan
Workspace permission deniedAsk the workspace admin for access
404 returned where you expected 403 (Issues API on non-internal accounts)Issues is closed beta to @pinata.cloud only

404 Not Found

The resource doesn’t exist (or you’re not allowed to know it exists).
CauseFix
Wrong agentIdCheck the ID from the Danger page or GET /v0/agents
snapshotCid not in this agent’s historyUse one from GET /v0/agents/{agentId}/snapshots
Skill CID/slug not installed in your libraryInstall via Skills Library or POST /v0/clawhub/{slug}/install
Template slug/ID doesn’t exist or was archivedList GET /v0/templates
Custom domain ID not on this agentList GET /v0/agents/{agentId}/domains
Issues endpoint hit by a non-internal accountClosed beta - returns 404 by design

409 Conflict

Resource state is incompatible with the request.
CauseFix
Duplicate secret name on POST /v0/secretsUse a different name or update the existing one
Two credentials for the same provider attached (e.g. OPENAI_API_KEY + Codex subscription)Detach one
Custom domain already registered (verified)Pick a different name or delete the existing registration
Subdomain collides with another tenantGenerate a new one or pick a different name
Trying to delete a secret still attached to an agentDetach from agents first
Skill version conflict during updateResolve via POST /v0/agents/{agentId}/skills/{skillId}/update

413 Payload Too Large

File upload exceeded the per-request limit.
CauseFix
POST /v0/agents/{agentId}/files/upload body too bigChunk the upload, or push the file via git, or stream it from inside the container

500 Internal Server Error

Something blew up on the server. The error field usually has the underlying message. Common variants:
Message hintCauseFix
Gateway failed to start after agent createProvisioning succeeded but the gateway crashedWait 30s and retry, or check Logs
Sync failedWorkspace snapshot upload to Pinata IPFS failedRetry; if persistent, check Pinata status
CLI error on GET /v0/agents/{agentId}/devicesUnderlying OpenClaw CLI returned non-zeroCheck Logs for OpenClaw errors; restart gateway
Reset failedGit reset to the snapshot commit failedThe commit hash may be missing - try a different snapshot
Configuration failed on channel configureOpenClaw rejected the channel configValidate token format (e.g. Slack xoxb- / xapp-)
Execution failed on console execCommand shell terminated unexpectedlyInspect the command; if hung, restart gateway

503 Service Unavailable

A dependency the server needs is down.
CauseFix
POST /v0/secrets returns 503 with “Secrets not configured”Server-side encryption key not provisioned. Contact support.
Snapshot/IPFS backend unreachableRetry; check Pinata status page

By symptom

”I just created the agent and the chat shows offline”

The container takes ~30 seconds to provision. A 500 with the agent body in the response means provisioning succeeded but the gateway didn’t start cleanly - the agent will appear in your list and you can restart it.

”My push to the workspace returns auth errors”

Re-grab the URL with Copy with Token on the Files tab. The gateway token may have been rotated.

”Tasks return 500 from GET /v0/agents/.../tasks

This usually means the OpenClaw CLI inside the container failed. Restart the gateway; if it keeps failing, check the Logs filtered to cron/runner.

”Channel configure returns 500”

OpenClaw could not write the channel config or restart. Almost always a malformed token or a channel that’s already enabled. Re-check the token, then Reconfigure.

”Domain stuck pending_ownership

Your _pinata-verify.<domain> TXT record isn’t visible. Confirm with dig TXT _pinata-verify.<domain> +short and wait for propagation.

”Issues endpoints all return 404”

Issues is closed beta and restricted to @pinata.cloud accounts today.

Common error responses

Errors documented in the API spec, grouped by where they appear. Use this as a starting point when you’re trying to interpret an error response — the exact string returned by the API is the source of truth.
ResponseWhere it appearsWhat it means
Missing userIdSeveral JWT-protected endpointsPinata JWT couldn’t be resolved to a user — regenerate the key
Agent limit reachedPOST /v0/agents (403)Workspace at its agent quota — upgrade or delete an unused agent
Storage not configuredPOST /v0/agents/{agentId}/snapshots/sync (400)Workspace has no backing storage; contact support
Sync failedSnapshot sync (500)IPFS pin or workspace serialization failed — retry
Snapshot not foundPOST /v0/agents/{agentId}/snapshots/reset (404)Snapshot CID isn’t in this agent’s history
Invalid snapshot CIDSnapshot reset (400)The provided CID didn’t parse
Unsupported channelDELETE /v0/agents/{agentId}/channels/{channel} (400)Channel must be telegram / slack / discord / whatsapp
Configuration failedChannel configure (500)OpenClaw rejected the token/config
Removal failedChannel delete (500)OpenClaw failed to remove and restart
Invalid commandConsole exec (400)command field empty or invalid cwd
Execution failedConsole exec (500)Shell exited unexpectedly
Invalid JSONConfig validate / write (400)The config field isn’t valid JSON
Validation command failedPOST /v0/agents/{agentId}/config/validate (500)OpenClaw CLI returned non-zero
Failed to read configGET /v0/agents/{agentId}/config (500)Couldn’t read openclaw.json
Failed to write configPUT /v0/agents/{agentId}/config (500)Couldn’t write openclaw.json
Invalid versionPOST /v0/agents/{agentId}/restart (400)Requested OpenClaw version doesn’t exist
Restart failedRestart (500)Gateway didn’t come back up — check Logs
Script launch failedPOST /v0/agents/{agentId}/scripts/retry (500)Build or start couldn’t be launched
File too largePOST /v0/agents/{agentId}/files/upload (413)Body over the upload limit — chunk or push via git
CLI errorSeveral OpenClaw-backed endpoints (500)Underlying openclaw CLI returned non-zero — check Logs
Token generation failedPOST /v0/agents/{agentId}/platform/token (500)Platform JWT couldn’t be minted — rotate gateway token
Secrets not configuredPOST /v0/secrets (503)Server-side encryption key not provisioned — contact support
Duplicate secret namePOST /v0/secrets (409)Secret name is already taken
Conflicting secretsPOST /v0/agents/{agentId}/secrets (409)Attaching two creds for the same provider (e.g. API key + subscription)
Invalid parametersTasks create (400)One of name, schedule, or payload is missing or malformed
Failed to create cron jobTasks create (500)OpenClaw rejected the cron config
Failed to list cron jobsTasks list (500)OpenClaw CLI failed

See also