History: what the endpoints share
The history endpoints return one subject's points over time — /rwa/history, /earn/history,
/derivatives/history, /chains/history and /dex/tokens/history. They take the same three
parameters and follow the same rules; /earn/history takes interval=1d only.
intervalstringDefault1d1d(daily) or1h(hourly), in any case; any other value is a400time_startstringDefaultnoneRFC3339 with a zone:2026-10-01T00:00:00Z,2026-10-01T08:00:00+08:00and2026-10-01T00:00:00.5Zare all accepted, each read as that instant; in a query string, write the+of an offset as%2B, or it reads as a space and the request is a400. A date alone, a time without a zone, a Unix timestamp, or an instant outside the years 1 to 9999 in UTC is a400time_endstringDefaultnowAstime_start
- Both ends are included, and the times are compared exactly, fractions of a second
included.
time_startequal totime_endasks for that one instant;time_startaftertime_endis a400, and so is atime_startin the future without atime_end. - Points come oldest first. A time with no data has no point: nothing is filled in.
- One response holds at most 1,000 points, counted over every series it carries. With
time_start, a range holding more is a400— never a truncated answer; ask for a shorter range. Withouttime_startyou get the newest points up totime_end, at most 1,000, and never a400for the cap. Where several series share a time, a time is never split: if the oldest one would not fit whole, it is left out and you get fewer than 1,000. - Hourly points go back 90 days. With
interval=1h, atime_startmore than 90 × 24 hours before now is a400; withouttime_start, the answer holds the hourly points there are. - A
400here is theBAD_REQUESTof Errors: itsmessagedoes not say which rule you broke — check the request against this page.