Verify you are on real Animica mainnet, and which chain id to sign with
Verify you are on real Animica mainnet, and which chain id to sign with. Animica answers that question with TWO numbers: the native chain is id 1, while the EVM compatibility facade reports 149 (eth_chainId 0x95, net_version "149"). A wallet porting Ethereum tooling signs with the wrong one. Returns both, the disagreement named, plus genesis hash, fork id, policy hash and the built-in consensus checkpoints a light client pins against. All read live. No model.
6000 (raw units)
price
2
calls / 30d
2
unique payers
2026-08-27
updated
Provider
animica.dev · discovered, not yet claimed by its owner
Payment (x402 accepts[])
[
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "6000",
"maxTimeoutSeconds": 60
},
{
"scheme": "exact",
"network": "animica:1",
"payTo": "anim1zqpsmegc0qcvzjfukm89xs0zeu3eqyyyel7kelehuszvwfarqypky2gr946ga",
"asset": "ANM",
"amount": "65416484954",
"maxTimeoutSeconds": 60
}
]Output schema
{
"animica": {
"catalog": "https://animica.dev/.well-known/x402",
"content_type": "application/json",
"currency": "USDC",
"description": "Verify you are on real Animica mainnet, and which chain id to sign with. Animica answers that question with TWO numbers: the native chain is id 1, while the EVM compatibility facade reports 149 (eth_chainId 0x95, net_version \"149\"). A wallet porting Ethereum tooling signs with the wrong one. Returns both, the disagreement named, plus genesis hash, fork id, policy hash and the built-in consensus checkpoints a light client pins against. All read live. No model.",
"documentation": "https://animica.dev/x402#product-chain_identity",
"name": "Animica chain identity and replay-protection check",
"openapi": "https://animica.dev/x402/openapi.json",
"price": "0.006000",
"product": "chain_identity",
"provider": "Animica",
"terms": {
"amount_atomic": "6000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"chain_id": 8453,
"network": "eip155:8453",
"pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
"scheme": "exact"
},
"x402_version": 2
},
"bazaar": {
"discoverable": true,
"info": {
"input": {
"body": {
"expect_chain_id": 1,
"expect_genesis_hash": "0xa0892158cf997c56e91d0aa12e60c36037dae34800a2b54111a8fa17ec88b7de"
},
"bodyType": "json",
"method": "POST",
"type": "http"
},
"output": {
"type": "json"
}
},
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"properties": {
"body": {
"properties": {
"expect_chain_id": {
"description": "the chain id you BELIEVE you are talking to. When given, the response carries an explicit matches_native / matches_evm_facade verdict instead of leaving you to compare two numbers yourself — which is the comparison people get wrong.",
"type": "integer"
},
"expect_genesis_hash": {
"description": "the genesis hash you have pinned (0x… 32 bytes). Compared byte-for-byte; a mismatch is reported as a hard failure, since it means this is not the chain you think it is.",
"type": "string"
}
},
"type": "object"
},
"bodyType": {
"enum": [
"json"
],
"type": "string"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"queryParams": {
"properties": {
"expect_chain_id": {
"description": "same as body.expect_chain_id for GET callers",
"type": "string"
},
"expect_genesis_hash": {
"description": "same as body.expect_genesis_hash for GET callers",
"type": "string"
}
},
"type": "object"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method"
],
"type": "object"
},
"output": {
"properties": {
"example": {},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}
},
"discovery": {
"discoverable": true,
"info": {
"input": {
"bodyFields": {
"expect_chain_id": {
"description": "the chain id you BELIEVE you are talking to. When given, the response carries an explicit matches_native / matches_evm_facade verdict instead of leaving you to compare two numbers yourself — which is the comparison people get wrong.",
"required": false,
"type": "integer"
},
"expect_genesis_hash": {
"description": "the genesis hash you have pinned (0x… 32 bytes). Compared byte-for-byte; a mismatch is reported as a hard failure, since it means this is not the chain you think it is.",
"required": false,
"type": "string"
}
},
"bodyType": "json",
"method": "POST",
"queryParams": {
"expect_chain_id": {
"description": "same as body.expect_chain_id for GET callers",
"type": "string"
},
"expect_genesis_hash": {
"description": "same as body.expect_genesis_hash for GET callers",
"type": "string"
}
},
"type": "http"
},
"output": {
"description": "as_of {read_at, head_height, head_hash}; native {chain_id, genesis_hash, genesis_header_hash, fork_id, policy_hash}; evm_facade {eth_chain_id, eth_chain_id_decimal, net_version, agrees_with_native, why_it_matters}; checkpoints {source, count, entries[] {height, hash}}; expectation {checked, chain_id {expected, matches_native, matches_evm_facade}, genesis_hash {expected, matches}}; warnings[]; read_errors; inference {used:false}.",
"type": "json"
}
}
}
}Use it
curl
curl "https://animica.dev/x402/chain/identity" # -> 402 Payment Required, accepts[] lists how to pay # retry with a PAYMENT-SIGNATURE (or PAYMENT header) once paid
JavaScript
const res = await fetch("https://animica.dev/x402/chain/identity");
if (res.status === 402) {
const { accepts } = await res.json();
// pay one of accepts[] via an x402 client, then retry with the payment header
}Python
import httpx
res = httpx.get("https://animica.dev/x402/chain/identity")
if res.status_code == 402:
accepts = res.json()["accepts"]
# pay one of accepts[] via an x402 client, then retry with the payment headerMachine-readable
Everything on this page is also available as clean JSON at /resources/7508.json, and this resource appears in /discovery/resources and /discovery/search.