GET /contracts/{contractAddress}/transfers.
The change affects the validation of timestampFrom and timestampTo.
Action Required by July 1, 2026
Compatibility Note
This change is not fully backward-compatible for clients that depended on previous implicit timestamp adjustments. We are making this update to provide explicit, predictable API behavior so integrations can rely on clear rules instead of silent server-side adjustments. If your integration assumed the API would auto-correct invalid or oversized windows, you may now receive:400for invalid ordering or explicit windows larger than 90 days.200with emptyitems(andrange) for out-of-range timestamps.
range first and construct valid windows explicitly.
Updated Time-Window Behavior
The API now applies these rules:- If a contract has no transfer activity, the response returns empty
itemsand:range.startTimestamp = nullrange.endTimestamp = null
timestampFrommust be less than or equal totimestampTo(otherwise400).- Provided timestamps must be within the contract activity range.
- If they are outside the range, the response is
200with emptyitemsandrangeincluded.
- If they are outside the range, the response is
- If both timestamps are provided, the requested span must be
<= 90 days.- If the span is greater than 90 days, the response is
400.
- If the span is greater than 90 days, the response is
- Defaults when only one timestamp is provided:
- Only
timestampFrom(must be within the activity range) ->timestampTodefaults tomin(lastTransfer, timestampFrom + 90 days). - Only
timestampTo(must be within the activity range) ->timestampFromdefaults tomax(firstTransfer, timestampTo - 90 days). - Neither provided -> the latest 90 days of activity.
- Only
- Every response includes
rangewith the contract’s first and latest transfer timestamps.- Use
rangeto page through full history.
- Use
What Changed from Previous Behavior
These legacy behaviors are no longer applied:timestampFromis no longer auto-adjusted forward when it is earlier than the first activity.- Future-facing
timestampTois no longer auto-capped to the current time. - The API no longer silently fixes out-of-range user timestamps; out-of-range inputs return
200with emptyitemsandrange. - The API no longer auto-adjusts oversized requested windows to 90 days; when both timestamps are provided and the requested span is greater than 90 days, the request returns
400.
Recommended Integration Pattern (Apply Now to Stay Compatible After the Update)
Apply these steps now so your integration remains compatible after the updated logic is live:- Make an initial request without
timestampFromortimestampTo. - Read
rangefrom the response.- If both values are
null, there is no activity for this contract/type. - If values exist, treat them as the valid bounds.
- If both values are
- Iterate only within:
range.startTimestamp <= requested timestamps <= range.endTimestamp
- Keep every requested window
<= 90 days. - For larger periods, split into multiple requests.
- To fetch full history, start with empty timestamps, read
range, then request<= 90 daywindows inside that range.