Errors & rate limits
Response envelope
Every response — success or error — uses the same shape:
{"code": 200, "message": "success", "data": { ... }}
{"code": 404, "message": "Machine not found", "data": null}
The HTTP status code always matches the envelope code.
Status codes
| Code | Meaning | Example message |
|---|---|---|
| 200 | Success | success |
| 400 | Bad request — invalid or missing parameters | Maximum page size is 100 |
| 401 | Missing or invalid credentials | Missing X-API-Key header / Invalid API key / Invalid or expired bearer token |
| 403 | Credential lacks the required scope | Insufficient scope |
| 404 | Resource not found or not owned by your account | Machine not found |
| 429 | Rate limit exceeded | Rate limit exceeded |
| 500 | Unexpected server error | Unexpected server error |
Ownership behaves like VTM: another operator's machine/order is
indistinguishable from a nonexistent one (404, never 403).
Rate limiting
- Each credential has an hourly budget (see Authentication).
- Fixed one-hour windows; the counter resets at the top of the hour.
- Over budget →
429with headerRetry-After: 3600.
Pagination
List endpoints take page (1-based) and size (default 20, max 100) and return:
{"page": 1, "size": 20, "total": 380, "records": [ ... ]}
Requesting size > 100 returns 400 Maximum page size is 100.