Skip to main content
All PropOps API errors follow the same JSON structure:
Check success first. If it is false, read error for a description of what went wrong. The HTTP status code tells you the category of the problem.
Monitor the X-RateLimit-Remaining header on every response. If it reaches zero, your next request will be rejected with 429. Back off before you hit the limit rather than after.

Status codes

The request was processed successfully. The response body contains the requested data or a confirmation message.
No action required.
The request was malformed. This usually means a required field is missing, a value is the wrong type, or a parameter is out of the accepted range.
What to do: Check your request body and query parameters against the endpoint documentation. Ensure required fields are present and that values match the expected types (e.g., integers for IDs, valid ISO dates for date fields).
The request did not include valid authentication credentials, or the session or token has expired.
What to do:
  • Browser clients — redirect the user to the login page.
  • Bearer token clients — your token may have been revoked or expired. Request a new token via POST /api/security/mobile-auth and retry the request with the new token.
The request was authenticated, but your account does not have the permission required to access this endpoint.
What to do: Call GET /api/users/permissions to see which permissions are assigned to your account. Ask your PropOps administrator to grant the missing permission to your role. Each endpoint requires a specific permission key in dot-notation (e.g., api.jobs.manage.manage).
The requested resource could not be found. This means the record with the given ID does not exist, has been deleted, or belongs to a different tenant.
What to do: Verify the ID or identifier you are using is correct. If you received the ID from a previous API call, the record may have been deleted since then.
You have sent too many requests in a short period. The API enforces per-IP and per-account rate limits on all endpoints.
What to do: Read the Retry-After header to find out how many seconds to wait before retrying. Implement exponential backoff in your client to avoid repeated 429 responses. Monitor X-RateLimit-Remaining on each response to slow down before the limit is reached.If your integration legitimately requires a higher rate limit, contact your PropOps administrator — per-endpoint limits are configurable in Admin → Rate Limiting.
An unexpected error occurred on the server. This is not caused by your request.
What to do: Retry the request after a short delay. If the error persists, check the PropOps system status at GET /api/system/status or contact PropOps support at support@propops.co.uk.

Quick reference