Skip to main content

Error format

All errors follow a consistent JSON structure:

HTTP status codes

Error codes reference

Your API key is missing, invalid, or expired.Common causes:
  • Missing Authorization header
  • Typo in the API key
  • Key was revoked
  • Key has expired
Fix: Check your API key and make sure it’s included as Bearer pp_live_... in the Authorization header.
Your API key is valid but doesn’t have permission for this action.Common causes:
  • Calling a write endpoint with a read-only key
  • Missing the required scope for this resource
Fix: Create a new API key with the required scopes, or update the existing key’s permissions.
The requested resource doesn’t exist.Common causes:
  • Invalid UUID in the URL
  • Resource was deleted
  • Resource belongs to a different organization
Fix: Verify the resource ID. Remember that API keys are scoped to one organization — you can’t access resources from other organizations.
The request body or query parameters are invalid.Example response:
Fix: Check the details array for specific field-level errors and correct your request.
You’ve exceeded your rate limit for this time window.Fix: Wait until the Retry-After header value (in seconds) has elapsed, then retry. See Rate Limiting.
An unexpected error occurred on our servers.Fix: Retry the request after a brief delay. If the error persists, contact support at contact@propal.io with the request details.

Handling errors in code

Retry strategy

For transient errors (429, 500), we recommend exponential backoff:
  1. Wait 1 second, retry
  2. Wait 2 seconds, retry
  3. Wait 4 seconds, retry
  4. Wait 8 seconds, retry
  5. Give up after 4 retries
For 429 responses, always respect the Retry-After header instead of using your own delay.