Skip to main content
There are two separate environments. Production holds real pairings and is what a live application should query. Testnet is for practice.

Addresses

The contracts have the same addresses on both chains, but they are separate deployments with separate data.

Records never cross environments

A pairing made on production does not exist on testnet, and the reverse. The DID string doesn’t tell you which environment a record belongs to, because agent DIDs use billions:main on both. The environment is whichever API or Explorer you query. For example, the production agent used in Inspect Attestations returns totalItems: 0 from the testnet API, and the testnet agent used in Create Test Attestations returns totalItems: 0 from production.

SDK defaults

The x402 Human Proof SDKs query production unless you pass other URLs. attestationsApiBaseUrl is accepted by createPoUVerifier (server) and by createAttestationAwareSelector, createHumanProofExtension and checkAttestation (client). nullifierApiBaseUrl is server only. Pairings made with the Verified Agent Identity skill are on production, so keep the defaults to recognize them.

Payment network is separate

In x402, the network the agent pays on is unrelated to where its pairing lives. The x402 examples in these docs take test payments on Base Sepolia (eip155:84532) while checking pairings on production. Pick each one independently.

Schema IDs

Both environments hold the same four schemas, with the same IDs. The one used for pairing is AgentOwnership, 0xca354bee6dc5eded165461d15ccb13aceb6f77ebbb1fd3fe45aca686097f2911. See Schemas for the full list.