Response Format
Every API response — success or error — uses a consistent JSON envelope. You never have to guess the shape.
Success
{
"success": true,
"message": "ok",
"updatedAt": "2026-05-31T10:00:00.000Z",
"expiresAt": "2026-05-31T11:00:00.000Z",
"data": {
...
}
}
| Field | Type | Description |
|---|---|---|
success | boolean | Always true for successful responses |
message | string | Human-readable status message |
updatedAt | string | ISO 8601 timestamp of when the data was last scraped from the RSI website |
expiresAt | string | ISO 8601 timestamp after which the cached data may be automatically re-scraped |
data | any | The actual response payload |
tip
HTTP headers carry the same freshness info.
The Last-Modified and Expires HTTP response headers are set to the same timestamps as updatedAt and expiresAt, in HTTP-date format. Use them for HTTP-level conditional caching — or read the body fields for application-level freshness checks. See HTTP Caching (ETags) for details.
Error
{
"success": false,
"message": "Unauthorized",
"code": 401
}
| Field | Type | Description |
|---|---|---|
success | boolean | Always false for error responses |
message | string | Human-readable description of the error |
code | number | HTTP status code of the error |
warning
Check success, not message.
Always check success and the HTTP status code to detect errors. Do not branch on message — its wording may change without notice.
Key rules
- A
200 OKHTTP response can still be a logical error — always readsuccess. datais omitted entirely on error responses (there is no"data": null).updatedAtandexpiresAtarenullfor endpoints that do not cache (e.g.GET /v2/me).
For the full list of error codes and what causes them, see Error Codes.