Documentation Index
Fetch the complete documentation index at: https://docs.propal.io/llms.txt
Use this file to discover all available pages before exploring further.
Error format
All errors follow a consistent JSON structure:| Field | Type | Description |
|---|---|---|
code | string | Machine-readable error code (see table below). |
message | string | Human-readable error description. |
details | array | Optional. Field-level validation errors. |
HTTP status codes
| Status | Code | When it happens |
|---|---|---|
200 | — | Success (GET, PATCH) |
201 | — | Resource created (POST) |
204 | — | Success with no body (DELETE) |
400 | validation_error | Invalid request body or parameters |
401 | unauthorized | Missing or invalid API key |
403 | forbidden | API key doesn’t have the required scope |
404 | not_found | Resource doesn’t exist or doesn’t belong to your organization |
429 | rate_limit_exceeded | Too many requests — slow down |
500 | internal_error | Something went wrong on our end |
Error codes reference
unauthorized (401)
unauthorized (401)
forbidden (403)
forbidden (403)
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
not_found (404)
not_found (404)
The requested resource doesn’t exist.Common causes:
- Invalid UUID in the URL
- Resource was deleted
- Resource belongs to a different organization
validation_error (400)
validation_error (400)
The request body or query parameters are invalid.Example response:Fix: Check the
details array for specific field-level errors and correct your request.rate_limit_exceeded (429)
rate_limit_exceeded (429)
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.internal_error (500)
internal_error (500)
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:
- Wait 1 second, retry
- Wait 2 seconds, retry
- Wait 4 seconds, retry
- Wait 8 seconds, retry
- Give up after 4 retries
429 responses, always respect the Retry-After header instead of using your own delay.