Errors¶
This section provides detailed information on error handling in the GdeMoi API, including example error responses and descriptions of error codes.
Error Handling¶
If an error occurs, the API returns a special error response. You can detect an error by checking the HTTP response code. If it is not 200 OK, you should parse and handle the response body as an error response.
Example Error Response¶
When an error occurs, the response will be in the following format:
{
  "success": false,
  "status": {
    "code": 1,
    "description": "Database error"
  }
}
- success(boolean): Indicates if the request was successful.
-  status(object): Contains details about the error.- code(integer): The error code.
- description(string): A description of the error.
 
Error Codes¶
Default HTTP code is 400. Common error codes (should be handled for all API calls) are 1-100, and resource or action-specific errors are 101-300.
Common Error Codes¶
| Code | Description | HTTP Code | 
|---|---|---|
| 1 | Database error | 500 | 
| 2 | Service Auth error | 403 | 
| 3 | Wrong hash | |
| 4 | User or API key not found or session ended | |
| 5 | Wrong request format | |
| 6 | Unexpected error | 500 | 
| 7 | Invalid parameters | |
| 8 | Queue service error, try again later | 503 | 
| 9 | Too large request | 412 | 
| 11 | Access denied | 403 | 
| 12 | Dealer not found | |
| 13 | Operation not permitted | 403 | 
| 14 | Database unavailable | 503 | 
| 15 | Too many requests (rate limit exceeded) | 429 | 
| 101 | In demo mode this function is disabled | 403 | 
| 102 | Wrong login or password | |
| 103 | User not activated | |
| 111 | Wrong handler | |
| 112 | Wrong method | |
| 201 | Not found in database | |
| 202 | Too many points in zone | |
| 203 | Delete entity associated with | |
| 204 | Entity not found | 404 | 
| 206 | Login already in use | |
| 207 | Invalid captcha | |
| 208 | Device blocked | 403 | 
| 209 | Failed sending email | |
| 210 | Geocoding failed | |
| 211 | Requested time span is too big | |
| 212 | Requested limit is too big | |
| 213 | Cannot perform action: the device is offline | |
| 214 | Requested operation or parameters are not supported by the device | |
| 215 | External service error | |
| 217 | List contains nonexistent entities | |
| 218 | Malformed external service parameters | |
| 219 | Not allowed for clones of the device | 403 | 
| 220 | Unknown device model | |
| 221 | Device limit exceeded | 403 | 
| 222 | Plugin not found | |
| 223 | Phone number already in use | |
| 224 | Device ID already in use | |
| 225 | Not allowed for this legal type | 403 | 
| 226 | Wrong ICCID | |
| 227 | Wrong activation code | |
| 228 | Not supported by sensor | |
| 229 | Requested data is not ready yet | 404 | 
| 230 | Not supported for this entity type | |
| 231 | Entity type mismatch | 409 | 
| 232 | Input already in use | |
| 233 | No data file | |
| 234 | Invalid data format | |
| 235 | Missing calibration data | |
| 236 | Feature unavailable due to tariff restrictions | 402 | 
| 237 | Invalid tariff | |
| 238 | Changing tariff is not allowed | 403 | 
| 239 | New tariff does not exist | 404 | 
| 240 | Not allowed to change tariff too frequently | 403 | 
| 241 | Cannot change phone to bundled sim. Contact tech support. | |
| 242 | There were errors during content validation | |
| 243 | Device already connected. | |
| 244 | Duplicate entity label. | |
| 245 | New password must be different | |
| 246 | Invalid user ID | |
| 247 | Entity already exists | 409 | 
| 248 | Wrong password | |
| 249 | Operation available for clones only | 403 | 
| 250 | Not allowed for deleted devices | 403 | 
| 251 | Insufficient funds | 403 | 
| 252 | Device already corrupted | |
| 253 | Device has clones | |
| 254 | Cannot save file | 500 | 
| 255 | Invalid task state | |
| 256 | Location already actual | |
| 257 | Registration forbidden | 403 | 
| 258 | Bundle not found | 404 | 
| 259 | Payments count not comply with summary | |
| 260 | Payments sum not comply with summary | |
| 261 | Entity has external links | 403 | 
| 262 | Entries list is missing some entries or contains nonexistent entries | |
| 263 | No change needed, old and new values are the same | |
| 264 | Timeout not reached | 403 | 
| 265 | Already done | 403 | 
| 266 | Cannot perform action for the device in current status | 403 | 
| 267 | Too many entities | |
| 268 | Over quota | 402 | 
| 269 | Invalid file state | |
| 270 | Too many sensors of same type already exist | |
| 271 | File over max size | 413 | 
| 272 | Trackers must have same models | |
| 273 | Duplicate login | |
| 274 | Empty data file | |
| 275 | User is blocked | 403 | 
| 276 | Action is forbidden for received session type | 403 | 
| 277 | Security group has users in it | 409 | 
| 278 | Security group is a default one | 409 | 
| 279 | Invalid task period | |
| 280 | Invalid import request state | |
| 281 | This resource is closed | |
| 284 | Not enough points for the specified zone type | 
Best Practices for Error Handling¶
- Check HTTP Status Codes: Always check the HTTP status code of the response to determine if the request was successful.
- Parse the Error Response: If the status code indicates an error, parse the response body to obtain the error details.
- Handle Specific Error Codes: Implement handling for common error codes and resource-specific error codes to provide meaningful feedback to the user.
- Retry Logic: For transient errors (e.g., service unavailable, rate limits), implement retry logic with exponential backoff.
- Logging: Log error responses for debugging and monitoring purposes.
By following these guidelines, you can effectively handle errors in your application and provide a better experience for your users.