# Errors

> Every failed request returns `success: false` and an `errors` array, alongside an HTTP
> status code.

```json title="Error response"
{
  "success": false,
  "errors": [
    {
      "code": 1,
      "message": "Unauthorized access."
    }
  ]
}
```

Validation errors (HTTP 422, code `23`) add a `field` property naming the request field
that failed, with one entry per field:

```json title="Validation error"
{
  "success": false,
  "errors": [
    {
      "code": 23,
      "message": "email must be an email",
      "field": "email"
    }
  ]
}
```

## Branch on `code`, not on the HTTP status

Most domain errors use HTTP **403**, whatever the cause: an operation already in
progress, a missing plan feature or an unknown route all return 403. The HTTP status
alone doesn't tell you what went wrong; the `code` does. Don't parse `message`; it's
meant for humans and its wording may change.

## The codes you'll meet first

| Code | When |
| --- | --- |
| `1` | Missing, invalid or revoked token (401). |
| `23` | The request body failed validation (422); see `field`. |
| `30` | Your subscription doesn't include the feature this endpoint needs, for example remote control (403). See [Plans and permissions](/concepts/plans-and-permissions). |
| `33` | A malformed request, for example an invalid filter or an unknown query parameter (400). See [Conventions](/api/conventions#filtering). |
| `214` | An earlier operation on this device hasn't finished (403). Wait for its result before sending another. |
| `704` | No Gateway has seen the device recently, so a command can't be delivered (403). |

A command that was accepted can still fail on the device. That failure arrives as a
realtime [`gateway_error`](/realtime/events#gateway_error) event, not as an HTTP error;
see [Asynchronous operations](/concepts/asynchronous-operations).

A few codes are shared by two different errors (for example `101` and `301`); the
table lists each one.

## All error codes

### General

| Code | HTTP status | Message |
| --- | --- | --- |
| `0` | 500 Internal Server Error | Something went wrong and we couldn't process your request. |
| `1` | 401 Unauthorized | Unauthorized access. |
| `2` | 401 Unauthorized | Unauthorized access. |
| `3` | 401 Unauthorized | Authorization header value is missing. |
| `4` | 403 Forbidden | No permission. |
| `5` | 429 Too Many Requests | Too many attempts. |
| `6` | 404 Not Found | Resource not found. |
| `7` | 404 Not Found | Table doesn't exist or not set. |
| `8` | 403 Forbidden | Wrong email/password combination. |
| `9` | 403 Forbidden | Email not confirmed. |
| `10` | 422 Unprocessable Entity | Invalid URL signature. |
| `11` | 403 Forbidden | Not allowed for &lt;role&gt; account role. |
| `12` | 403 Forbidden | Weblink generation not possible; Product doesn't have any gateways. |
| `13` | 403 Forbidden | Route not found. |
| `13` | 404 Not Found | Route not found. |
| `14` | 403 Forbidden | Cache error. |
| `15` | 403 Forbidden | Can't set start time to future date. |
| `16` | 403 Forbidden | Not allowed for &lt;role&gt; account user role. |
| `17` | 403 Forbidden | You are not a parking management system user. Please contact customer support for more info. |
| `18` | 403 Forbidden | This resource already exists. |
| `19` | 403 Forbidden | Not a valid json. |
| `20` | 422 Unprocessable Entity | 48h time frame for password reset has expired, please request another password reset. |
| `21` | 403 Forbidden | Resource not assigned to lot. |
| `23` | 422 Unprocessable Entity | Validation error |
| `24` | 403 Forbidden | Wrong old password. |
| `25` | 403 Forbidden | Account with that account_id is not a PMS user. |
| `26` | 422 Unprocessable Entity | 48h time frame account activation has expired. Contact your admin. |
| `27` | 422 Unprocessable Entity | The file you uploaded is malformed |
| `28` | 400 Bad Request | No file was uploaded |
| `29` | 400 Bad Request | Not enough products to subscribe |
| `30` | 403 Forbidden | Account missing proper authorization |
| `31` | 400 Bad Request | You cannot mix subscriptions and licenses |
| `32` | 422 Unprocessable Entity | License has all product zeroed |
| `33` | 400 Bad Request | This is a generic bad request error (the message varies) |
| `34` | 403 Forbidden | Please reset your password. |
| `35` | 403 Forbidden | Wrong email/password combination. |
| `36` | 404 Not Found | Email not found. |
| `37` | 401 Unauthorized | No token provided. |
| `38` | 400 Bad Request | malformed json |
| `40` | 503 Service Unavailable | the message to the remote device timed out |
| `41` | 401 Unauthorized | User needs to be authorized |
| `43` | 400 Bad Request | Logout is only allowed for account users. |
| `44` | 400 Bad Request | Too many failed attempts |
| `45` | 400 Bad Request | Lots filter is required |

### Gateways

| Code | HTTP status | Message |
| --- | --- | --- |
| `100` | 403 Forbidden | Communication with gateway failed. Please try again later. |
| `101` | 404 Not Found | Gateway is not connected. |
| `101` | 404 Not Found | Gateway not found. |
| `102` | 403 Forbidden | Please try again with another signed challenge. |
| `103` | 403 Forbidden | This gateway can't be used. |
| `104` | 403 Forbidden | Gateway owner already set. |
| `105` | 403 Forbidden | Invalid challenge. |

### Products and licenses

| Code | HTTP status | Message |
| --- | --- | --- |
| `200` | 403 Forbidden | Communication with product failed. Please try again later. |
| `201` | 404 Not Found | Product not found. |
| `202` | 403 Forbidden | Wrong product signature. |
| `204` | 403 Forbidden | Not a v2 barrier. |
| `205` | 403 Forbidden | Master key already exists. |
| `206` | 403 Forbidden | Master key not found. |
| `209` | 404 Not Found | Product not found. |
| `210` | 403 Forbidden | Product operation doesn't exist. |
| `211` | 403 Forbidden | Product can't be assigned to a lot that doesn't have any gateways. |
| `212` | 403 Forbidden | Product weblink not valid. |
| `213` | 403 Forbidden | Product can't handle this request. |
| `214` | 403 Forbidden | Another product operation is in process. |
| `215` | 403 Forbidden | Product weblink is not yet valid or has expired. |
| `216` | 403 Forbidden | Product update properties are missing. |
| `217` | 403 Forbidden | You have reached maximum products for this license. |
| `218` | 403 Forbidden | You don't have licenses for this product. |
| `219` | 403 Forbidden | You can't reduce license purchased count. |
| `220` | 403 Forbidden | You can't add lpr and product at the same time. |
| `221` | 403 Forbidden | You can't add license without any products. |
| `222` | 403 Forbidden | You can't purchase license that is unavailable. |
| `223` | 403 Forbidden | Lpr camera owner already set. |
| `224` | 403 Forbidden | You can't update license that has been purchased. |
| `225` | 403 Forbidden | License with those products already exists. |
| `226` | 403 Forbidden | You can't request license without any products. |
| `227` | 403 Forbidden | Previous subscription for that lpr camera doesn't have an activation date set. |
| `228` | 403 Forbidden | Can't extend lpr storage subscription that is ON HOLD. |
| `229` | 403 Forbidden | You don't have lpr storage subscription for this camera. |
| `230` | 403 Forbidden | You can't set end time if is_unlimited is true. |
| `232` | 400 Bad Request | Lpr Channel not implemented. |
| `233` | 404 Not Found | No product online. |
| `234` | 404 Not Found | No product eligible. |
| `235` | 400 Bad Request | LPR camera is not a HIK device. |
| `236` | 400 Bad Request | LPR camera is not a AXIS device. |
| `237` | 403 Forbidden | Product weblink has reached its maximum number of uses. |

### Lots and zones

| Code | HTTP status | Message |
| --- | --- | --- |
| `300` | 403 Forbidden | Communication with lot failed. Please try again later. |
| `301` | 404 Not Found | Lot not found |
| `301` | 409 Conflict | LPR Camera not assigned to zone |
| `302` | 403 Forbidden | Lot maximum products reached. Please add another gateway to lot. |
| `303` | 404 Not Found | Zone not found. |
| `304` | 400 Bad Request | No Parking detection active for lot. |
| `305` | 400 Bad Request | Duplicate parking detection. |
| `306` | 403 Forbidden | End time is before start time. |
| `307` | 400 Bad Request | Zone does not belong to lot. |
| `308` | 400 Bad Request | At zone must have a parking detection camera for live camera view type. |
| `309` | 400 Bad Request | Zones do not have a vector map. |
| `310` | 404 Not Found | Zone does not have a vector map. |

### Sharing and operation keys

| Code | HTTP status | Message |
| --- | --- | --- |
| `400` | 500 Internal Server Error | Something went wrong and we couldn't process your request. |
| `401` | 404 Not Found | Operation key not found. |
| `402` | 403 Forbidden | End time is required when 'is_unlimited' is false. |
| `403` | 403 Forbidden | End time must be a future date. |
| `404` | 403 Forbidden | You can't set &lt;time&gt; time after 2038. |
| `405` | 403 Forbidden | End time is before start time. |
| `406` | 404 Not Found | Key file not found. |
| `407` | 403 Forbidden | Max file rows is &lt;allowedRows&gt; while your file has &lt;uploadedFileRows&gt;. |
| `408` | 403 Forbidden | &lt;first&gt; time is before &lt;second&gt; time. |
| `409` | 403 Forbidden | Start time must be a future date. |
| `410` | 403 Forbidden | Recurring start time must be a future date. |

### Updates

| Code | HTTP status | Message |
| --- | --- | --- |
| `500` | 500 Internal Server Error | Something went wrong with uploading the file. |
| `501` | 404 Not Found | Update not found. |

### Account users

| Code | HTTP status | Message |
| --- | --- | --- |
| `600` | 403 Forbidden | Account user invitation already exists. |
| `601` | 400 Bad Request | Account user already exists. |
| `602` | 403 Forbidden | Phone number has been taken. |

### Delivery to devices

| Code | HTTP status | Message |
| --- | --- | --- |
| `701` | 403 Forbidden | Emit unsuccessful. |
| `702` | 403 Forbidden | No available gateway was able to execute the command. |
| `703` | 403 Forbidden | All gateways are offline. |
| `704` | 403 Forbidden | No rssi signal. |

### LPR cameras

| Code | HTTP status | Message |
| --- | --- | --- |
| `800` | 422 Unprocessable Entity | Socket data invalid. |
| `801` | 422 Unprocessable Entity | Socket data type handler not found. |
| `802` | 503 Service Unavailable | LPR camera is offline. |
| `803` | 403 Forbidden | LPR camera socket cache not found. |

### Other

| Code | HTTP status | Message |
| --- | --- | --- |
| `901` | 404 Not Found | Entry image not found. |
| `1000` | 400 Bad Request | Cannot move to different lot. |

### Terminals

| Code | HTTP status | Message |
| --- | --- | --- |
| `1100` | 404 Not Found | Terminal challenge not found |
| `1101` | 401 Unauthorized | Bad challenge signature |
| `1102` | 400 Bad Request | Challenge expired |
| `1103` | 503 Service Unavailable | no viable connection to the terminal |
| `1104` | 428 Precondition Required | Terminal not assigned to zone |

### Receivers

| Code | HTTP status | Message |
| --- | --- | --- |
| `1300` | 403 Forbidden | Receiver not allowed on this zone. |

### Tariffs

| Code | HTTP status | Message |
| --- | --- | --- |
| `1400` | 400 Bad Request | Tariff cannot be deleted because some groups contain members. |

### RGB displays

| Code | HTTP status | Message |
| --- | --- | --- |
| `1500` | 403 Forbidden | Rgb display owner already set. |
| `1501` | 400 Bad Request | Serial number is not unique. |
| `1502` | 400 Bad Request | valueTo is required when operator is between. |
| `1503` | 404 Not Found | RGB display does not exist. |

### Sessions

| Code | HTTP status | Message |
| --- | --- | --- |
| `1501` | 404 Not Found | Associated session not found |
| `1501` | 409 Conflict | Maximum members per tariff exceeded |
| `1502` | 403 Forbidden | Member not allowed |
| `1503` | 422 Unprocessable Entity | Unkown direction |
| `1505` | 400 Bad Request | No plate reading associated with session |
| `1506` | 404 Not Found | Session not found |

## Next step

See [Rate Limits](/api/rate-limits) for the `429` case, or the
[API Reference](/api) for the errors each endpoint can return.
