POST /currencies/v2 is the latest version of the Currencies API. It takes the same request body as v1 and returns a flat list of currencies instead of nested groups, ranks verified currencies first, and applies limit consistently. POST /currencies/v1 remains available during a deprecation window (see the sunset timeline below) — migrate before it’s retired.
The v2 endpoint suffix is a platform API version. It does not mean a request uses a particular version of Relay Protocol.
Sunset timeline
POST /currencies/v1 is deprecated as of October 30, 2026. It keeps working, but migrate to POST /currencies/v2 before it’s fully retired on January 28, 2027.
Detecting deprecation programmatically
Every response fromPOST /currencies/v1 carries in-band deprecation signals, so clients can surface or log the sunset timeline without hard-coding dates.
Deprecationheader — RFC 9745 date, e.g.@1793318400.Sunsetheader — HTTP-date, e.g.Thu, 28 Jan 2027 00:00:00 GMT.Linkheader — three lines withrel="deprecation",rel="sunset", andrel="successor-version"pointing to this guide and toPOST /currencies/v2.
2xx, 4xx, and 5xx) and are listed in Access-Control-Expose-Headers, so browser clients using fetch or XMLHttpRequest can read them cross-origin:
The v1 success body is a JSON array, so it carries no in-body
deprecation object. Use the headers above to detect deprecation on 200 responses.429 responses return a route-specific body that also points at v2:
Response shape
The same request —{ "chainIds": [1], "term": "USDC", "limit": 2 } — shown for v1 and v2, plus a focused diff of what moved.
- v1
- v2
- Difference
The full OpenAPI schema lives at api.relay.link/documentation/json.
What changed
Request
The request body and the optionalx-api-key header are the same as v1, with three differences.
limit — defaults to 20, maximum 100
limit — defaults to 20, maximum 100
v2 applies v1 applied
limit to the flat list of currencies in every mode. When you omit it, v2 returns 20 currencies. Values above 100 fail validation:limit to groups rather than currencies, and only in some modes: a search without limit returned every match, and defaultList could return more groups than the limit asked for.tokens — first 100 entries only
tokens — first 100 entries only
v2 reads the first 100 entries of
tokens and ignores the rest. Batch larger lookups into calls of 100 chainId:address pairs. v1 did not cap the list.depositAddressOnly — eligibility for your deposit-address mode
depositAddressOnly — eligibility for your deposit-address mode
In v2,
depositAddressOnly: true returns the currencies that are eligible as deposit-address inputs for the deposit-address mode of the API key you send, so results can differ between keys. Eligibility does not guarantee availability for every destination and amount. v1 applied one static filter for every caller. See Deposit Addresses.Response
Flat list instead of groups
Flat list instead of groups
v1 returned
Currency[][]: an outer array of groups, each an inner array of one or more currencies. v2 returns Currency[]. The currency object is unchanged — chainId, address, symbol, name, decimals, vmType, and metadata with logoURI, verified, and isNative — except that the optional groupID field declared on v1 is gone.Ranking — verified currencies first
Ranking — verified currencies first
v2 ranks verified currencies above unverified ones that match equally well, and orders verified results by recent trading volume. v1 ordered groups by match quality and then by pool depth. With a
term, both versions rank exact symbol or name matches first, then prefix matches, then partial matches.Positions can change between calls on both versions. Match currencies by chainId and address, not by index — this includes tokens lookups, which do not return currencies in request order.Chains with limited token support
Chains with limited token support
On chains whose
tokenSupport is Limited in GET /chains, v2 returns only the currencies Relay supports on that chain. v1 returned every indexed match, including currencies you cannot route through Relay.Default list
Default list
With
defaultList: true, v2 returns the highest-volume currencies on the requested chains and substitutes native currencies for their wrapped forms (ETH for WETH, SOL for WSOL). Because the list follows volume, it can include unverified currencies; check metadata.verified if you only want verified ones. v1 returned Relay’s curated default list, topped up with trending tokens.Field migration reference
RelayKit
useTokenList and queryTokenList in @relayprotocol/relay-kit-hooks have called v2 since version 1.9.0, and data is the v2 flat list. If you are on an older release, upgrade and follow the checklist below for your consumers. See useTokenList.
Migration checklist
1
Switch the path
Point requests at
POST /currencies/v2. The request body and headers are unchanged.2
Flatten your response handling
Iterate the response as
Currency[] and remove flat(), [0], or other group-walking logic. Drop reads of groupID.3
Set limit explicitly
If you relied on v1 returning every match, pass
limit (at most 100) and narrow the query with chainIds, term, address, or tokens. Split tokens lookups into batches of 100.4
Stop depending on order
Match currencies by
chainId and address. If you show search results, expect verified currencies first.5
Confirm nothing still calls v1
Watch for the
Deprecation header in your response logs. v2 responses never carry it, so once it stops appearing your traffic has moved.