π΅ Behavior = same request, different answer.
Overview
Additional details are included for each item below the table.REST API
1. π΄ Pagination: items_count changed meaning, several params no longer echoed
items_countwas a cursor counter echoed back insidenext_page_params. It is now a request parameter that sets the page size (1 toMAX_ITEMS_PER_PAGE, default 100; default page size stays 50). It is no longer included innext_page_params.- A value above
MAX_ITEMS_PER_PAGEis silently clamped to the maximum; it does not return 422. Only values below 1 are rejected. next_page_paramsalso no longer containskey(the API key, to stop leaking secrets) or the atom-keyedsort,order,state_filtervalues on specβd endpoints.
- Clients that follow
next_page_paramsverbatim keep working with the default page size, but only for lists requested withoutsort/order. Sorted lists (address transactions, addresses list, tokens, smart-contracts, validators) must re-sendsortandorderon every page, otherwise the next page comes back in the default order and the cursor no longer matches. - Clients that want a custom page size must add
items_count=Nto every request, including follow-up pages. - Clients that read
items_countfromnext_page_params(for progress display, etc.) must stop; use the page length instead.
2. π΄ State changes cursor
GET /api/v2/transactions/{hash}/state-changes next_page_params changed from {"state_changes": null, "items_count": N} to {"state_changes_count": N}. A stored old cursor containing state_changes now returns 422.
3. π΄limit query parameter removed
Use
items_count instead.
4. π΄ token removed from NFT instance list items
Items in GET /api/v2/tokens/{hash}/instances (with or without holder_address_hash) no longer include the nested token object; the token is identified by the URL. The single-instance endpoint GET /api/v2/tokens/{hash}/instances/{id} still includes token. New fields image_media_type and animation_media_type were added to instances.
5. π΄ MUD endpoints removed
All/api/v2/mud/worlds⦠endpoints and the mud OpenAPI spec are gone. MUD_INDEXER_ENABLED, MUD_DATABASE_URL, MUD_POOL_SIZE are deprecated.
6. π΄ Endpoints newly validated by OpenAPI spec
These endpoints now reject unknown or malformed query parameters with 422 instead of ignoring them:/api/v2/validators/stability,/api/v2/validators/stability/countersstate_filtermust matchactive|probation|inactive(comma-separated). It is now case-sensitive;ACTIVEused to work and now returns 422.sortβstate|address_hash|blocks_validated,orderβasc|desc.
/api/v2/zksync/batches,/batches/count,/batches/{number},/main-page/zksync/batches/confirmed,/latest-number.
7. π΄ recaptcha_response query parameter removed from NFT metadata refetch
PATCH /api/v2/tokens/{hash}/instances/{id}/refetch-metadata no longer declares recaptcha_response as a query parameter, so ?recaptcha_response=β¦ now returns 422 Unexpected field. Pass the reCAPTCHA token in the recaptcha-v2-response or recaptcha-v3-response header instead (both already worked in v11), or use the recaptcha-bypass-token header / scoped_recaptcha_bypass_token query parameter for trusted clients.
8. π΄ Constructor arguments are 0x-prefixed
constructor_args in GET /api/v2/smart-contracts/{hash} (also ConstructorArguments in ?module=contract&action=getsourcecode, GraphQL smart_contract.constructor_arguments, and /api/v1/verified_smart_contracts) now returns 0x⦠instead of bare hex. Stored values that were not valid hex are cleared to null by the migration. On verification input, non-hex constructor arguments are now rejected.
9. π΅ Search returns ENS results for bare names
BENS lookup used to require a dotted name (name.eth). It now runs for any query of 3+ characters, so /api/v2/search, /search/quick can return ens_domain items for vitalik, and /search/check-redirect?q=vitalik may return redirect: true with type: "ens_domain" (new enum value). When a query matches both an address and an ENS name, the address still takes priority in check-redirect.
10. π΅ tabs-counters
For unknown addresses, celo_election_rewards_count and beacon_deposits_count are emitted only on Celo / Ethereum chain types respectively (previously on all chains as 0). Token-related counters now exclude scam tokens unless the show-scam-tokens header or the show_scam_tokens cookie is set.
11. π΅ Transaction summary may return 503 - Behavior
GET /api/v2/transactions/{hash}/summary returns 503 {"error": "Transaction data is temporarily unavailable"} when the logs table lock cannot be acquired within API_OPTIONAL_QUERIES_LOCK_TIMEOUT (default 100 ms). Retry with backoff.
JSON RPC API (/api?module=β¦)
12. π΄getsourcecode and gettxinfo
ConstructorArgumentsis0x-prefixed (see item 8).gettxinfonext_page_paramsno longer containsitems_count(see item 1).
13. π΅ Sourcify verification via Sourcify API v2
?module=contract&action=verify_via_sourcify and POST /api/v2/smart-contracts/{hash}/verification/via/sourcify:
- Request parameters and success responses are unchanged.
- The uploaded file set must include a file named
metadata.json, otherwise the request fails withSourcify did not return metadata. - Blockscout submits the job and polls Sourcify (
SOURCIFY_POLL_INTERVAL3 s ΓSOURCIFY_POLL_MAX_ATTEMPTS20). A synchronous call may block for a minute or more and can end withSourcify verification timed outorContract is not verified. - Upstream error text now comes from Sourcify v2
messagefields. AdditionalSources[].Filenamefor contracts verified after the upgrade are relative paths prefixed with/rather than absolute repository paths.
ETH RPC API (/api/eth-rpc)
14. π΄ Error responses follow JSON-RPC 2.0
Before:{"jsonrpc":"2.0","id":1,"error":"invalid block number"} After: {"jsonrpc":"2.0","id":1,"error":{"code":-32602,"message":"Invalid block number"}}
Codes: -32600 invalid request, -32601 method not found, -32602 invalid params, -32603 internal/upstream error.
A request with
params but without jsonrpc now returns -32600 Method, and jsonrpc are required parameters.
In batched requests, a JSON-RPC error object returned by the node for an individual proxied request is now passed through as-is (including its optional data field) instead of being reported as an internal error.
15. π΄eth_getLogs block parameters must be hex quantities or tags
"fromBlock": "100" used to be silently parsed as hex (block 256). It now returns -32602 Invalid block number. Use "0x64", "latest", "earliest", "pending".
16. π΅ Core proxy methods can be disabled by the operator
WithAPI_ETH_RPC_DISABLE_CORE_PROXY_METHODS=true, eth_call, eth_getCode, eth_getStorageAt, eth_sendRawTransaction, eth_getBlockByNumber/Hash, eth_estimateGas, eth_getTransactionCount return -32601. Default is false. API_ETH_RPC_EXTENDED_PROXY_METHODS_ENABLED=true (default false) adds net_*, web3_*, eth_feeHistory, eth_getProof, eth_getBlockReceipts and others.
17. π΄ /api/legacy GET routes removed, dedicated POST routes added
GET /api/legacy/block/get-block-number-by-time is unchanged. Also added: POST /api/legacy/eth/eth-call, /eth-get-balance, /eth-get-storage-at, /eth-send-raw-transaction. Each of them is a single-method entry point equivalent to the same method on /api/eth-rpc, and follows the same availability rules (item 16).
GraphQL API
18. π΅ Scam-token filtering
token_transfers (by token and by address) exclude scam-flagged tokens when the instance runs with HIDE_SCAM_ADDRESSES=true. Send the show-scam-tokens header or the show_scam_tokens cookie to include them. No schema fields were removed or renamed. constructor_arguments is 0x-prefixed (item 8).
π’ Additive changes (no action needed)
meta: {status: 1|2, message}on every internal-transactions list response (status: 2= some internal transactions still pending).include_zero_value(defaulttrue) on internal-transactions endpoints.decoded.abi(the matching event ABI item) on log items.image_media_type,animation_media_typeon token instances;GET /api/v2/tokens/{hash}/instances/{id}/media-type.POST /api/v2/tokens/batch;GET /api/v2/tokens/{hash}/transfers/csv.- CSV endpoints accept
Accept: text/csvwithout a 406;from_period/to_periodoptional for address CSV exports. - ENS names and metadata on
from/toin advanced filters and on NFT owners. bzz://metadata URLs resolved via Swarm gateway.- WebSocket
coin_balanceevents now carrytransaction_hash(was alwaysnull).