Troubleshooting
Error response format
Errors return JSON in this shape:
{
"error": "Short message",
"code": "ERROR_CODE",
"details": null,
"hint": "Optional suggestion"
}Use code for programmatic handling; hint and details for debugging.
Common error codes
| Code | HTTP | Cause | What to do |
|---|---|---|---|
| VALIDATION_ERROR | 400 | Invalid or malformed request body/params | Check schema (e.g. name format, required fields). See OpenAPI or Deploy and rollback. |
| TENANT_NOT_FOUND | 404 | Organization not found in database | Sign up to create an organization, or check that the tenant_id is correct. |
| FUNCTION_NOT_FOUND | 404 | No function for ID, or no deployed function for subdomain | Deploy a function for that organization or use the correct function_id. |
| BINDING_NOT_FOUND | 400 | Requested binding (e.g. key-value:name) not in bindings table | Ask your team admin to create the binding, or fix the binding spec in your deploy intent. |
| BINDING_NOT_ALLOWED | 403 | Binding not allowed for organization | Ensure the binding exists and is in the organization's allowed_bindings. |
| CODE_INVALID | 400 | Script failed validation/bundling | Fix syntax or structure; ensure default export. |
| DEPLOY_FAILED | 502 | Upload or platform step failed | Retry; check platform status. |
| ROLLBACK_FAILED / VERSION_NOT_FOUND | 502/404 | Rollback target missing or upload failed | Use a version that exists (from list functions or activations). |
| RATE_LIMITED | 429 | Too many requests to subdomain | Wait and retry; default limit is 100 req/min per organization (configurable). |
| DISPATCH_FAILED | 502 | Function execution failed | Check your code and platform status. |
| USAGE_LIMIT_EXCEEDED | 429 | Monthly usage cap reached (Free plan) | Wait for the next billing period, or upgrade to Pro for soft caps. See Billing. |
| PRO_PLAN_REQUIRED | 403 | Feature requires Pro plan (custom domains, AI) | Upgrade to Pro from the billing page. |
| DOWNGRADE_BLOCKED | 409 | Current usage exceeds Free plan limits | Reduce functions, team members, or storage before downgrading. |
| FORBIDDEN | 403 | Wrong role or organization scope | Use a token with the right role; deployers only access their organization. |
| AUTH_REQUIRED | 401 | No token sent | Send Authorization: Bearer <token>. |
| AUTH_INVALID | 401 | Invalid or expired token | Re-login or get a new token. |
Rate limits
- Organization subdomain: Configurable per organization (default 100 requests per minute). Responses include
RateLimit-Limit,RateLimit-Remaining, andRateLimit-Resetheaders. When exceeded you get 429 andcode: RATE_LIMITED.
Other endpoints may have limits; if so they are documented in the API or returned in response headers.
Dispatch and 502s
- DISPATCH_FAILED: The request reached the platform but the function invocation failed. Check your code (errors, timeouts) and any bindings/secrets. Use get_activation_logs or GET
/activationsto see error_message and response_status. - If the platform returns 501 with something like
DISPATCH_NOT_CONFIGURED, the dispatch namespace is not set up; contact the platform operator.
More help
- API reference: https://api.fold.run/docs for full request/response schemas.
- Internal docs: Internal (Technical) for architecture and error implementation details.