Propelus uses standard HTTP status codes with a machine-readable code in the response body to clarify outcomes. Codes range from 2xx (success) to 5xx (server errors), each with specific meanings and error codes. 4xx errors return a consistent structure with status, code, and detail fields for troubleshooting. Server errors include unique reference codes for support tracing. Users should branch on the stable code field rather than the detail text.
HTTP status codes
| Code | What it means |
|---|---|
| 2xx | The request completed. A verification can still come back found, not_found, or with a board-side error — see result codes. |
| 400 | Something to fix on your side — the request is malformed or missing required parameters. |
| 401 | Not authenticated. Check your credentials or refresh your token — see authentication. |
| 403 | That product isn’t enabled for your account. Contact Customer Service to have it added. |
| 404 | The endpoint doesn’t exist or the method isn’t supported. |
| 429 | Too many requests too quickly — you’re being rate-limited. Slow down and retry. |
| 500 | Something went wrong on our side. Log the code reference and contact support. |
| 503 | Service temporarily unavailable — try again later. |
| 504 | Usually a cold start — simply retry. |
The shape of an error
Every 4xx error returns the same three fields:
| Field | Type | What it tells you |
|---|---|---|
| status | integer | The HTTP status code. |
| code | string | A short, machine-readable code you can branch on. |
| detail | string | A human-readable description, tailored to the situation. |
{
"status": 400,
"code": "err_missing_fld",
"detail": "Missing required field."
}General 4xx codes
| Status | Code | Meaning |
|---|---|---|
| 400 | err_missing_fld |
A required field is missing. |
| 400 | err_fld_not_allowed |
A field in the payload wasn’t expected. |
| 400 | err_invalid_fld_val |
A field holds an invalid value. |
| 400 | err_unsupported_fld_val |
A field’s value isn’t supported. |
| 400 | err_empty_fld |
A field can’t be empty. |
| 400 | err_invalid_parameter |
A field didn’t meet the required formatting. |
| 401 | err_invalid_credentials |
Credentials were rejected. |
| 401 | err_invalid_code |
Internal validation error. |
| 403 | err_invalid_scope |
The product isn’t enabled for you. |
| 404 | err_id_not_found |
The ID searched wasn’t found. |
Batch
| Status | Code | Meaning |
|---|---|---|
| 400 | err_max_batch_size_exeeded |
You sent more licenses than the per-batch limit allows. |
Webhooks
| Status | Code | Meaning |
|---|---|---|
| 400 | err_webhook_already_exist |
That event already has a URL linked to it. |
| 400 | err_webhook_inaccessible |
The event’s URL couldn’t be reached to send the activation code. |
| 404 | err_webhook_not_exist |
The webhook ID used wasn’t found. |
Professional
| Status | Code | Meaning |
|---|---|---|
| 400 | err_professional_already_exist |
A professional with that identifier already exists. |
| 404 | err_professional_not_exist |
The professional ID used wasn’t found. |
About
err_http_val
This points to a top-level validation issue — use the HTTP status code itself as your primary troubleshooting clue.
Server errors (5xx)
When a 500 occurs, the code is a unique reference ID. Share it with support and we can trace exactly what happened.
{
"status": 500,
"code": "000-4cbb4d60-e33c-467a-af6d-...",
"detail": "Unexpected error happened."
}Tip for your team
Branch on the
code field, not the detail text — codes are stable, while the wording may change.
Where to go next