Skip to content

Every error Fylane can return — 36 codes across 12 HTTP statuses — with whether retrying helps.

Every error carries the same shape and answers the same four questions: what happened, whether retrying helps, what to change, and where to read more. Switch on code, never on message — messages are written for humans and are allowed to improve.

The envelope
{
  "type": "https://fylane.dev/errors/unsupported-file",
  "code": "unsupported_file",
  "message": "This file format is not supported.",
  "retryable": false,
  "request_id": "req_01JBQ8Z5T7WXK9MNP2RSTVA3C4",
  "docs_url": "https://fylane.dev/docs/errors/unsupported-file"
}
A 404 never confirms that something exists
A resource belonging to another organisation returns 404, not 403. A 403 would tell an attacker the id is real, which is exactly the thing worth hiding.

HTTP 400

CodeRetryableMeaning
invalid_requestNoThe request is malformed or missing required fields.
unsupported_fileNoThis file format is not supported.
file_too_largeNoThe file exceeds the maximum size for your plan.
corrupted_fileNoThe file could not be parsed and appears to be corrupted.
encrypted_fileNoThe file is password-protected and cannot be processed.
unsupported_operationNoThis operation is not available for this file type.

HTTP 401

CodeRetryableMeaning
missing_credentialsNoNo API key was provided.
invalid_api_keyNoThe API key is not valid.
expired_api_keyNoThis API key has expired.
revoked_api_keyNoThis API key has been revoked.
api_key_in_queryNoAPI keys must be sent in the Authorization header, never in the URL.

HTTP 402

CodeRetryableMeaning
payment_requiredNoPayment for this organization has failed; processing is paused until it succeeds.

HTTP 403

CodeRetryableMeaning
insufficient_scopeNoThis API key does not have the required scope.
ip_not_allowedNoThis API key is restricted to a set of IP addresses that does not include this one.
environment_mismatchNoA test key cannot access live resources, and vice versa.
organization_suspendedNoThis organization has been suspended.
forbiddenNoYou do not have permission to perform this action.
key_restrictedNoThis API key is not allowed to run this operation.

HTTP 404

CodeRetryableMeaning
not_foundNoNo such resource.

HTTP 409

CodeRetryableMeaning
idempotency_conflictNoThis Idempotency-Key was already used with a different request body.
upload_session_consumedNoThis upload session has already been used.
conflictNoThe resource is in a state that does not allow this operation.

HTTP 413

CodeRetryableMeaning
payload_too_largeNoThe request body is too large.

HTTP 422

CodeRetryableMeaning
malware_detectedNoThe file was rejected because it failed a security scan.
policy_violationNoThe file violates the acceptable use policy.
validation_failedNoThe file does not meet the validation policy supplied with the upload.
output_validation_failedNoProcessing produced output that failed verification, so it was discarded.
unsupported_inputNoThis file is not something the requested operation can process.

HTTP 429

CodeRetryableMeaning
key_spend_limitNoThis API key has reached its credit spend cap for the current window.
rate_limitedYesToo many requests. Retry after the interval in the Retry-After header.
concurrency_limitYesToo many jobs are running concurrently for this organization.
credits_exhaustedNoThis organization has no processing credits remaining.

HTTP 500

CodeRetryableMeaning
internal_errorYesAn unexpected error occurred on our side.

HTTP 503

CodeRetryableMeaning
processing_unavailableYesProcessing capacity is temporarily unavailable.
dependency_unavailableYesA required service is temporarily unavailable.

HTTP 504

CodeRetryableMeaning
timeoutYesThe operation took too long and was stopped.