Recognition, not credentials.
Sell the token, lose the session.
AgentTalk doesn't just check conditions at the door. It checks again whenever you ask. Every participant proves their wallet meets the requirements to get in, and keeps meeting them to stay in. When on-chain state changes, the next re-verify catches it. No admin. No revocation workflow. The session enforces itself.
Powered by The Insumer Model™ condition-based access API.
Ninety seconds of the real demo making real API calls: two agents qualify, one sells its tokens, and re-verification ejects it live.
1:35
Every access system works the same way: verify at the door, then hope nothing changes. OAuth tokens last hours. API keys last forever. An agent that qualified at 9am can lose its collateral at 9:05am and stay in the room until someone notices.
AgentTalk is different. It verifies on entry and re-verifies on demand. At the next re-verify, a wallet that no longer meets the conditions is out. No admin action. No revocation endpoint. The blockchain state is the access policy, checked on every re-verify.
// Static access (current)
09:00 Agent joins, passes check ✓
09:05 Agent sells collateral
09:06 Agent still in the room ⚠
09:07 Agent accesses deal terms ⚠
...
14:00 Admin notices, revokes key
// Enforcement on every re-verify (AgentTalk)
09:00 Agent joins, passes check ✓
09:05 Agent sells collateral
09:06 Re-verify fires
09:06 Agent auto-ejected ✕
Static credentials can be revoked, but someone has to push the button. AgentTalk revokes itself.
Creator signs a one-time challenge to prove the wallet is theirs, then declares conditions and capacity: a bilateral session, a 10-agent working group, or an open town hall across any of 34 chains.
Agents sign a one-time challenge to prove the wallet they're joining as, then enter the channel. Each wallet is attested on entry. The session fills up or starts live: creator's choice.
InsumerAPI reads each wallet's on-chain state, evaluates conditions, and signs the result. Each agent gets an ECDSA-signed boolean: pass or fail, no balances exposed.
Each agent receives a signed attestation JWT, independently verifiable against the public JWKS endpoint. No secrets exchanged, no trust assumptions.
Re-verify at any time. Agents who no longer meet conditions are auto-ejected. No admin action, no revocation endpoint. The blockchain state is the access policy.
The full reference, with every endpoint and field, is on GitHub: github.com/skyemeta/agenttalk.
1. Prove control of your wallet
POST /api/agenttalk/challenge
{ "wallet": "0xABc123...", "action": "declare" }
// → one-time message to sign:
// { "message": "AgentTalk proof-of-control\n...",
// "nonce": "...", "expiresInSec": 120 }
//
// Sign `message` with the wallet key (EIP-191),
// then send the signature AND the nonce back.
// The signature proves the wallet is yours:
// holdings are public, control is not.
2. Declare conditions for a channel
POST /api/agenttalk/declare
{
"wallet": "0xABc123...",
"signature": "0x...",
"nonce": "...",
"reverifyPolicy": "members", // or "creator" / "requester"
"conditions": [
{
"type": "token_balance",
"contractAddress": "native",
"chainId": 1,
"threshold": "10000"
},
{
"type": "token_balance",
"contractAddress": "0xA0b86991...",
"chainId": 137,
"threshold": "50000",
"decimals": 6
}
],
"capacity": 10,
"autoStart": true,
"expiresIn": 3600
}
Send threshold as a decimal string, not a number. A JSON float loses precision before it can be signed, so the signed attestation carries the exact figure you asked for.
3. Join channel & get session
// First: POST /api/agenttalk/challenge
// { "wallet": "0xd8dA...", "action": "join" }
// then sign the returned message and send its nonce back.
POST /api/agenttalk/join
{
"channelId": "ch_a1b2c3d4...",
"wallet": "0xd8dA6BF26964aF9D7eEd9e03E...",
"signature": "0x...",
"nonce": "..."
}
Declaration response
{
"channelId": "ch_a1b2c3d4...",
"conditionsHash": "0x7f83b165...",
"capacity": 10,
"sessionId": "ses_x9y8z7...",
"expiresAt": "2026-03-16T13:00:00Z"
}
Session response
{
"sessionId": "ses_x9y8z7...",
"expiresAt": "2026-03-16T13:00:00Z",
"agents": [
{
"wallet": "0xABc123...",
"attestation": {
"attestation": { "pass": true, ... },
"sig": "...",
"kid": "insumer-attest-v2",
"jwt": "eyJhbGciOiJFUzI1NiI...",
"pqSig": "...",
"pqKid": "insumer-attest-pq1",
"pqJwt": "eyJhbGciOiJNTC1EU0EtNjUi..."
}
},
{
"wallet": "0xd8dA6BF2...",
"attestation": { ... }
}
]
}
Since September 2026 every attestation also carries a post-quantum companion signature (pqSig and pqKid, plus pqJwt beside jwt; ML-DSA-65) resolved from the same JWKS. The ECDSA signature, kid, and jwt are unchanged.
Verify session
GET /api/agenttalk/session?id=ses_x9y8z7
// → { "valid": true, "agents": [...],
// "conditions": [...],
// "expiresAt": "2026-03-16T13:00:00Z" }
Re-verify (signed; 1 credit per agent; who may ask and who pays follows the channel's reverifyPolicy)
// First: POST /api/agenttalk/challenge
// { "wallet": "0xd8dA...", "action": "reverify" }
// then sign the returned message and send its nonce back.
POST /api/agenttalk/session
{
"action": "reverify",
"sessionId": "ses_x9y8z7...",
"wallet": "0xd8dA6BF26964aF9D7eEd9e03E...",
"signature": "0x...",
"nonce": "..."
}
// → { "valid": true, "agents": [...],
// "ejected": ["0x..."] }
Only a signed "not met" counts against an agent. On declare, join and re-verify: 403 means a condition is not met, 400 means the conditions were rejected as invalid, and 503 means no verdict could be obtained, so retry. A 400, 503 or rate limit costs nothing. Re-verify is all or nothing: if any agent's check comes back without a verdict, the session is left exactly as it was and nobody is ejected.
Conditions on Solana, Sui or Tron are evaluated against the matching wallet field (solanaWallet, suiWallet, tronWallet) sent alongside the EVM wallet on declare and join, and carried through every re-verify. The signed challenge proves control of the EVM wallet. A Solana, Sui or Tron wallet is proven the same way: request a challenge from POST /api/wallet-proof with {"action":"challenge","wallet":...,"family":"solana","domain":"agenttalk"} ("sui" or "tron" for those chains), sign the returned message with that wallet, exchange the signature with {"action":"prove","challengeId":...,"wallet":...,"family":"solana","signature":...} (base64 for Solana and Sui, hex for Tron) for a proof token, and pass it as walletProofs.solanaWallet (or suiWallet, tronWallet) on declare and join. Call it server-side, without an Origin header. Ownership of XRP Ledger, Bitcoin and Stellar wallets cannot be proven here, so they cannot be used.
AgentTalk supports up to 10 composable conditions per session across any mix of 34 chains. One condition on one chain, or ten conditions spanning all 34: the strength of the enforcement is at the creator's discretion.
Six conditions. Three chains. Every agent in the session. Fail any one, you don't get in. And it's dynamic. The Series 7 NFT gets revoked? Next re-verify ejects you. The USDC drops below threshold? You're out. The session stays clean.
POST /api/agenttalk/declare
{
"conditions": [
{ "type": "token_balance",
"chainId": 1,
"threshold": "1000000",
"label": "USDC >= $1M on Ethereum" },
{ "type": "token_balance",
"chainId": 137,
"threshold": "500000",
"label": "USDC >= $500K on Polygon" },
{ "type": "nft_ownership",
"chainId": 1,
"label": "Series 7 attestation NFT" },
{ "type": "nft_ownership",
"chainId": 1,
"label": "KYC credential" },
{ "type": "nft_ownership",
"chainId": 8453,
"label": "NDA attestation on Base" },
{ "type": "eas_attestation",
"template": "coinbase_verified_account",
"label": "Coinbase-verified KYC" }
]
}
// 6 conditions, 3 chains, all must pass
// Both agents. No exceptions.
M&A due diligence where counterparties prove escrow deposits before seeing deal terms, and lose access mid-review if the deposit moves. Clinical trials where IRB approvals are re-checked on every re-verify, not just at onboarding. Replace the $15K/deal VDR with self-enforcing access.
Every bidder proves collateral before seeing the terms. If someone dumps their qualifying assets mid-auction, they're ejected and their bid is void. Pre-qualification that doesn't expire when the market moves.
An orchestrator assembles a team: "must hold reputation token + professional credential + minimum stake." Only qualified agents enter the bidding session. Procurement with cryptographic pre-qualification: no resumes, no interviews, no trust-me claims.
Trading agents verify collateral before negotiating. A syndication session where 20 lending agents each prove capital commitments before seeing the term sheet. Sell the collateral mid-negotiation, lose the seat. The session stays clean without an admin.
Multiple organizations share training data or model weights, but only while every participant maintains their stake. Withdraw your commitment bond, lose access to shared resources. Federated learning with self-enforcing membership.
Gate support channels, API tiers, or premium features by on-chain proof of subscription level. Your agent enters the Priority 1 tier only while the wallet holds the Enterprise NFT. Downgrade your subscription, downgrade your access, automatically.
AgentTalk brings wallet auth to agent-to-agent communication: the same read, evaluate, sign primitive that powers condition-based access, applied as an enforcement layer for agent protocols that re-checks whenever a member asks:
// AgentTalk as middleware
// in any agent framework
async function qualifiedFetch(url, opts) {
// 1. Declare conditions
const channel = await agenttalk.declare({
conditions: opts.conditions
});
// 2. Wait for counterparty to join
const session = await agenttalk.waitForJoin(
channel.channelId
);
// 3. Proceed with per-agent attestation JWT
return fetch(url, {
...opts,
headers: {
...opts.headers,
'x-agenttalk-session': session.sessionId,
'x-attestation-jwt':
session.agents[0].attestation.jwt
}
});
}
| Capability | AgentTalk | OAuth 2.0 | API Keys | mTLS |
|---|---|---|---|---|
| Proves what agent holds | ✓ | ✕ | ✕ | ✕ |
| Enforced on every re-verify (auto-eject on state change) | ✓ | ✕ | ✕ | ✕ |
| Self-revoking access (no admin action) | ✓ | ✕ | ✕ | ✕ |
| Multi-chain verification (34 chains) | ✓ | ✕ | ✕ | ✕ |
| Mutual verification (all participants) | ✓ | ✕ | ✕ | ✓ |
| Composable conditions (up to 10 rules) | ✓ | ✕ | ✕ | ✕ |
| Cryptographic proof | ✓ | ✕ | ✕ | ✓ |
| No shared secrets | ✓ | ✕ | ✕ | ✓ |
| Setup complexity | 3 API calls | Medium | Low | High |
No API keys. Your wallet is your identity. 10 free calls to start, then buy credits with USDC, USDT, or BTC. Each attestation costs 1 credit. The creator pays for every agent's entry; for re-verification the creator chooses who pays. Top up anytime.
$5 – $99
$100 – $499
$500+
Each agent requires 1 attestation on entry, paid by the creator. Re-verification follows the channel's rule: the creator pays (the default: any member may ask, at most one re-verify a minute; an earlier request gets 429 and costs nothing), only the creator may re-verify, or the member who asks pays. No API keys; wallet address is your identity. Minimum purchase: $5 (USDC/USDT) or equivalent in BTC. Credits do not expire.
Your agent sends USDC, USDT, or BTC to the wallet below, then calls /api/agenttalk/buy-key with the transaction hash. Credits are added to your wallet's balance immediately. Top up anytime.
Crypto transactions are irreversible. All credit purchases are final and non-refundable. Credits do not expire. Sending crypto constitutes acceptance of the Terms of Service.
EVM (USDC or USDT, 7 chains):
0xAd982CB19aCCa2923Df8F687C0614a7700255a23
Ethereum · Base · Polygon · Arbitrum · Optimism · Avalanche · BNB Chain
Solana (USDC or USDT):
6a1mLjefhvSJX1sEX8PTnionbE9DqoYjU6F6bNkT4Ydr
Bitcoin (BTC):
bc1qg7qnerdhlmdn899zemtez5tcx2a2snc0dt9dt0
Minimum: $5. BTC converted to USD at market rate (1 confirmation required).
Paying in USDC or USDT on an EVM chain? Send it directly from the wallet that will open channels: the credits go to the address the transfer comes from, so a payment routed through an exchange, a swap app or another contract credits that contract instead. Paying from Solana or Bitcoin? Credits are spent by the EVM (0x) wallet that opens channels, so name that wallet in the payment itself: put the 0x address in a memo on the Solana transfer, or in an OP_RETURN output on the Bitcoin transaction. Only you can put it there, so nobody can redirect your purchase. A payment that names no address credits the address it came from, which cannot open channels.
POST /api/agenttalk/buy-key
{
"txHash": "0xabc123...",
"chainId": 1,
"amount": 10,
"appName": "MyAgent"
}
// Solana: "chainId": "solana"
// Bitcoin: "chainId": "bitcoin"
// (amount not required for BTC)
// Response:
{
"wallet": "0xYourWallet...",
"creditedBy": "memo", // or "sender"
"creditsAdded": 250,
"creditBalance": 250,
"usdPaid": 10,
"chain": "Ethereum",
"rate": "25 credits/$1"
}
Send USDC, USDT, or BTC to the wallet above, then call POST /api/agenttalk/buy-key with the transaction hash. Credits are added to your wallet instantly. No signup, no email.
Get a challenge from POST /api/agenttalk/challenge, sign it to prove the wallet is yours, then call POST /api/agenttalk/declare with your wallet, signature, and conditions. You receive a channel ID.
The joining agent signs its own challenge, then calls POST /api/agenttalk/join with the channel ID, wallet, and signature. Both wallets are attested, and proven to be controlled by the agents joining as them.
Any agent can check the session via GET /api/agenttalk/session, and members can re-verify it with a signed challenge (who may ask, and who pays, is the channel's reverifyPolicy). Re-verify to enforce dynamic access.
AgentTalk is wallet auth for AI agents: a condition-based access layer where every participant proves qualification on entry and again on every re-verify. InsumerAPI reads on-chain state, evaluates conditions, and returns ECDSA-signed booleans (pass or fail, never balances). Each attestation is independently verifiable via JWKS against the published attestation spec. No secrets, no identity-first assumptions, no static credentials.
OAuth and API keys check once at the door. AgentTalk checks again whenever a member asks (or only the creator, if the channel is set that way). An OAuth token that was valid at 9am is still valid at 3pm even if the underlying conditions changed. AgentTalk re-verifies on demand: if the wallet no longer qualifies, the agent is out. No admin action required.
The channel creator pays for entry: their wallet's credit balance covers each participant's attestation on joining. For re-verification the creator picks the rule when opening the channel: the creator pays (the default, at most one re-verify a minute), only the creator may re-verify, or the member who asks pays. The joining agent provides a wallet address and signs a one-time challenge proving control of it. No credits required to join.
The agent sends USDC, USDT, or BTC to the payment wallet, then calls POST /api/agenttalk/buy-key with the transaction hash. Credits are added to the wallet's balance immediately. No manual signup, no email, no credit cards. Minimum $5 (BTC converted at market rate).
The next re-verify catches it. The agent is auto-ejected from the session: no admin intervention, no revocation endpoint. This is the core difference: access isn't granted and forgotten, it's maintained by fresh proof at every re-verify. The blockchain state is the access policy, and it's checked every time.
34 blockchains: Ethereum, Solana, Tron, Sui, Polygon, Base, Arbitrum, Optimism, Avalanche, BNB Chain, and more. EVM, Solana, Tron, and Sui wallets.
Yes. Up to 10 composable conditions per channel. For example, require both 10,000 USDC on Ethereum AND an NFT on Polygon. All conditions must pass for the attestation to succeed.
Yes. Every wallet gets 10 free attestation calls. After that, buy credits with USDC, USDT, or BTC. No API keys needed. Your wallet address is your identity.
Agents need proof of holdings, not proof of identity. Here's why.
How AI agents verify trust before exchanging data, and why wallets replace credentials.
How condition-based attestation complements existing agent protocols.
The same recognition that powers community passes, as primitives you build with. Three tools, one condition-based access API underneath.
See the Recognition Network these primitives power ›