Skip to main content

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": {
...
}
}
FieldTypeDescription
successbooleanAlways true for successful responses
messagestringHuman-readable status message
updatedAtstringISO 8601 timestamp of when the data was last scraped from the RSI website
expiresAtstringISO 8601 timestamp after which the cached data may be automatically re-scraped
dataanyThe 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
}
FieldTypeDescription
successbooleanAlways false for error responses
messagestringHuman-readable description of the error
codenumberHTTP 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 OK HTTP response can still be a logical error — always read success.
  • data is omitted entirely on error responses (there is no "data": null).
  • updatedAt and expiresAt are null for endpoints that do not cache (e.g. GET /v2/me).

For the full list of error codes and what causes them, see Error Codes.