KYA for Robinhood Chain · know your agent
KNOW YOUR AGENT.
Before you let an AI pay you, trade with you or borrow from you, check it. Recensus shows what any agent on Robinhood Chain has actually done on-chain, who stands behind it, and how much it has at stake.
the census · live on Robinhood Chain
The public proof behind every check.
A check reads the same rows, the same attribution rule and the same earnings ledger as this census: every labelled transaction, every ERC-8004 registration and the USDG agents are paid on Robinhood Chain, counted in public as it lands.
Agents label their transactions; Recensus counts them.
—
numbers unavailable: the Recensus API could not be reached. Nothing here is a zero.
- operators
- —
- agent txs 24h
- —
- value moved 24h (usd)
- —
- top framework
- —
- unclaimed ids
- —
- block
- —
on robinhood chain · how an agent reaches the count
Three ways to be counted.
Who an agent is, and where its label goes. Gas is paid in ETH; payments and every dollar figure are in USDG.
- erc-8004An agent registered in ERC-8004 is recognised automatically: the registry is its claim.
- x402An x402 payment in USDG carries the label in the nonce the agent signs, and counts under the payer.
- calldataAnything the agent sends itself carries the label as the last 24 bytes of its calldata.
- agentId16 bytes · 0–15
- framework2 bytes · 16–17
- flags1 byte · 18
- version1 byte · 19
- magic4 bytes · 20–23
magic 0x50554C53 · read by tail, no ABI · both byte layouts, calldata and x402 nonce, in the spec →
erc-8004
ERC-8004 agents are recognised automatically.
An agent registered in the ERC-8004 Identity Registry is claimed by the registry, with no Recensus claim needed. Its owner and its agentWallet count as its senders, and so does any sender the owner declares; when the token changes hands, the binding moves with it from that block on. It labels with its token ID: label version 0x02 with the erc8004 flag set.
agentId = registry token ID · flags bit 2 (erc8004) · version 0x02
How a transaction under a registered agent’s token ID is attributed sent by, at that block counts as the token’s owner bound its agentWallet bound a sender the owner declared bound anyone else unclaimed x402 · usdg
x402 payments in USDG carry the label in the payment itself.
In an x402 payment the agent signs an EIP-3009 authorization and someone else sends it, so there is no calldata of the agent’s to label. The label goes in the 32-byte EIP-3009 nonce the payer signs, is read back from USDG’s AuthorizationUsed event, and counts under the payer, not the relayer.
direct transactions
Direct transactions use the 24-byte tail.
A transaction the agent sends itself carries the label as the last 24 bytes of its calldata. Standard ABI decoding ignores trailing bytes, so the call does what it did; the SDKs simulate it both ways and send it unlabelled if anything differs. The extra bytes are paid for in ETH, like the rest of the transaction’s gas.
every way in, the same rule: a transaction counts toward a claimed agent only when its sender — for a payment, its payer — is bound to that agent. a copied ID is counted as unclaimed, never under someone else’s name · the label, in full →
adoption · 7 days
Who is building agents here.
framework numbers unavailable: the Recensus API could not be reached. A dash is not a zero.
all frameworks →- 0x0011create-recensus-agent—claimed agents
- 0x0001Recensus MCP—claimed agents
- 0x0003Recensus SDK (Python)—claimed agents
- 0x0002Recensus SDK (TypeScript)—claimed agents
- 0x0000Unknown / custom—claimed agents
- unclaimedNobody has claimed these IDs—ids
- referenceReference (run by Recensus)—agents · not counted
live
Every labelled transaction, as it lands.
Numbers unavailable.
The feed could not be read from the Recensus API. Rows appear here as soon as it answers.
integrate
Get counted in two minutes.
$ npx create-recensus-agent my-agentcd my-agent && npm install
npm run address # the new wallet and its balances; fund it (the README says where)
npm run register # ERC-8004 on mainnet; a rehearsal on the testnet
npm run transfer -- 0x... # 0.01 USDG, with the label
npm run buy # pay for a KYA check over x402
npm run sell # an x402 seller behind a KYA gate
# The testnet by default. For Robinhood Chain itself:
npx create-recensus-agent my-agent --mainnet- what it does
- Makes a small agent project with its own new wallet: registration, a labelled transfer, an x402 buyer and a KYA-gated seller. The generator makes no network request.
- what it never does
- No keys leave your machine. Recensus never holds your keys or your funds.
- where the label goes
- Twenty-four bytes on the end of the calldata; in an x402 payment, the nonce the payer signs. The call itself is unchanged.
- claim your agent
- Claim your ID to attribute those transactions to you and see your own dashboard.
for apps · the gate
Check every agent that pays you.
@recensus/kya checks whoever pays or signs a request before your endpoint serves it: refuse an agent with a flag, refuse one below a tier, or quote a price by tier. The same answer as a check on this site, cached, in one line of middleware for Hono, Express or Python.
the gate · KYA API · agent lane · badge
import { createKya, kyaGate } from '@recensus/kya';
const kya = createKya({ apiKey: 'rk_…' }); // a key from the dashboard
app.use('/paid/*', kyaGate(kya, { refuseFlags: true, minTier: 'bronze' }));
// The gate alone authenticates nothing: your x402 middleware,
// mounted after it, checks the payment is real.
app.use('/paid/*', yourX402Middleware);the token
RCNS
RCNS is what an agent’s owner will bond behind it, so a tier on a check is costly to fake and can be slashed. It launches only together with working, audited bonds: until then bonds run on Robinhood Chain testnet against a mock token, and there is nothing to bond on mainnet. Nothing on Recensus is paid for in it — checks past the free quota are paid in USDG — and it is not required to be counted, to check an agent, or to use the API, the SDKs or the dashboard. Where it will trade on Robinhood Chain is not decided.