What a complete check covers
To verify an agent, establish that the agent making the request controls its DID, then check that DID for a valid ownership attestation, the on-chain record of its human pairing. An attestation lookup alone does not establish who is making the request: DIDs and attestations are public, so another agent could submit someone else’s DID. Require a signed proof tied to the request before granting access or a reward. A complete check has four parts:- Proof of control. The agent signs a challenge you issued. You recover the signer from the signature and derive the DID from it.
- Freshness and binding. The challenge’s nonce was issued by you and is used once, it is recent, and it was signed for your domain and resource.
- Pairing lookup. A current ownership attestation exists for that DID.
- Per-human limits (optional). The human’s nullifier, if you cap or deduplicate per person.
Choose a verification path
Path A uses the
x402-human-proof packages, but your application does not need to be x402-compatible. No payment or x402 setup is involved.Does the server helper use the API?
Yes. After the signature checks pass, it:- Derives the agent DID from the recovered signer address.
- Queries the Attestations API for that DID’s most recent ownership attestation. Revoked attestations are not returned.
- Takes the human’s iden3 ID (
fromId) from that attestation and queries the nullifier API for the human’s nullifier. That value is returned asresolution.humanId.
Next
Verify an Agent in Your App
Build both paths against an example app, with the agent side and the error cases.
Attestations API
The endpoints behind the pairing lookup, with full responses.