Numeric Chain IDs Required
Posted: November 3, 2026 | Effective: November 18, 2026
From November 18, 2026, every Trading API endpoint that takes a chain ID, including the liquidity endpoints under /lp/ and excluding POST /wallet/encode_7702, will handle it as described below. Today the /lp/ endpoints accept chain names and reject digits in a string.
What is changing?
- A chain ID sent as a number, such as
"chainId": 1, is accepted. - A chain ID sent as digits in a string, such as
"chainId": "1"or?chainId=1, is accepted. The API reads it as the number. - A chain ID sent as a name, such as
"chainId": "MAINNET", gets a400validation error. - The same three rules apply to
permitData.domain.chainIdonPOST /swap,POST /swap_5792andPOST /swap_7702. That field does not check whether the chain is supported, so any number is accepted.
Today, a chain name gets a 200 or a 500 on most endpoints, and already gets a 400 on a few fields. After the effective date, on endpoints other than /lp/, it gets a 400 with errorCode RequestValidationError, and, except in permitData.domain.chainId, an unknown numeric chain ID gets the same response.
Where the endpoint names the invalid field, such as GET /v1/tokens and POST /v1/quote, the detail message will list only the accepted numeric chain IDs, such as "tokenInChainId" must be one of [1, 10, 137, …], where today it lists chain names and numbers. On /v1/swap* endpoints, detail is a generic message that lists no chain IDs, as before. See Common Errors.
The /lp/ endpoints return 400 errors in a different format, {"code": "invalid_argument", "message": "…", "details": […]}, with no errorCode or detail field. The message names the invalid field and lists the accepted numeric chain IDs.
Why is this changing?
Today a request with a chain name returns a 200 response on some endpoints, a 500 on others, and a 400 on a few fields. This change makes these endpoints accept chain IDs the same way, which reduces the API's complexity.
What do I need to do?
Before November 18, 2026, send the numeric chain ID from Supported Chains, such as 1 for Ethereum Mainnet or 8453 for Base.
Quotes the API returns already carry numeric chain IDs, so sending one back unchanged needs no work.