Karatum × Moca × Minds
Minds agents and Moca AIR agentic commerce can require “Karatum-certified agent, tier ≥ B, not recalled” before money moves. Karatum issues the agent a verifiable credential through Moca AIR; a merchant gate checks it, and the chain, on every order.
Where this runs today: Moca AIR sandbox / testnet (AIR environment sandbox). The merchant in the demo is a mock (Pivota-style) storefront run by Karatum, not a real shop. Payments are testnet USDC on Base Sepolia. Every number on this page is read from GET /v1/minds. This is an independent integration built on Moca's public AIR tooling, not an announced partnership or an endorsement by Animoca Brands or Moca Network.
How it fits
Minds agent
An Animoca Minds agent is about to buy or delegate. Before it does, it calls the Karatum Skill.
Karatum Skill check
karatum_check_counterparty asks Karatum whether the counterparty is certified, its tier, and whether it is recalled.
Buyer presents credential
The buying agent presents its Karatum AIR Agent Credential: an SD-JWT VC bound to its wallet key, linked to the Moca AIR account it acts for (where Karatum stored its certificate) and to its ERC-8004 identity.
Merchant gate verifies
Signature, key binding to this order, Token Status List, standing token, on-chain IncidentLog on Base Sepolia, and AIR revocation at issuer.karatum.com. Pass: accept and pay in testnet USDC. Recalled or below policy: reject with reason codes.
The credential is the same Karatum certificate that backs the Trust Handshake, delivered as an AIR credential so Moca's own verifiers can read it. A recall sets the on-chain IncidentLog flag and the status-list bit at once, and the AIR credential is revoked at issuer.karatum.com on the next issuance run (at most 15 minutes); the next order is rejected.
Recent gate decisions
Recent orders at the mock merchant. Each row is one gate decision; accepted orders are paid in testnet USDC on Base Sepolia, and the chain block is where the IncidentLog was read.
| Time | Label | Buyer | SKU | Amount | Decision | Reasons | Payment | Chain block |
|---|---|---|---|---|---|---|---|---|
| 2026-10-16 17:29:30 UTC | after recall | 0x220a…9434 | espresso-beans-250g | 0.010000 USDC | accept | none | paid 0xc9a2…6bd0 | 48201740 |
| 2026-10-16 17:28:47 UTC | during recall | 0x220a…9434 | coffee-beans-250g | 0.010000 USDC | reject | REVOKED RECALLED GUARD_NOT_VALID AIR_REVOKED | none | 48201719 |
| 2026-10-16 17:28:09 UTC | before recall | 0x220a…9434 | coffee-beans-250g | 0.010000 USDC | accept | none | paid 0x5c64…267f | 48201700 |
Checks on the latest order (15): accept at pivota-mock
| Check | Status | Detail | Code |
|---|---|---|---|
| format | pass | credential with 5 disclosure(s) and a key-binding JWT | |
| issuer.signature | pass | signed by https://karatum.com/v1/handshake | |
| credential.window | pass | valid until 2026-10-23T17:29:28.000Z | |
| disclosures | pass | 5 disclosure(s) match the signed digests: taskClass, tier, airDid, airProof, airRevocationNonce | |
| holder.binding | pass | holder key = wallet 0x220a2fca33365c39ab18fa293c70e1286da79434 | |
| kb | pass | key-binding JWT verified against the supplied challenge | |
| policy.taskClass | pass | certified for web3 | |
| policy.tier | pass | tier B >= B | |
| status | pass | credential #9 is not revoked (list 0s old, fetched) | |
| standing.recall | pass | not recalled (standing 0s old, fetched) | |
| chain.recall | pass | KaratumIncidentLog.isRecalled = false at block 48201740 (chain 84532) | |
| chain.guard | pass | Guard registry: VALID tier 2 K19 (proof) | |
| kb.single-use | pass | order nonce consumed (single use) | |
| air.link | pass | acts for AIR account did:air:id:testnet:4PBfFhxoztA4VGXsCKoNnJ8vjgqjAbdNc1TjcEyXT4 (Karatum credential stored in that account) | |
| air.revocation | pass | AIR-stored credential not revoked (issuer.karatum.com, live) |
Claims the buyer disclosed:
{
"tier": 2,
"airDid": "did:air:id:testnet:4PBfFhxoztA4VGXsCKoNnJ8vjgqjAbdNc1TjcEyXT4",
"airProof": "air-issuance",
"taskClass": "web3",
"airRevocationNonce": "7546529321297708383"
}Run minds-demo-1 · order ord_gd0Z6ctAVfa7
Merchant gate (https://karatum.com/v1/minds/merchant/pivota-mock) asks the buyer to disclose: taskClass, tier, airDid, airProof, airRevocationNonce; an AIR credential is required.
Moca AIR integration
Karatum is an AIR issuer in the sandbox environment. Identifiers below come from the live API.
| Issuer DID | did:web:issuer.karatum.com |
|---|---|
| Partner ID | e904feca-51c1-4fd7-860a-60bee39cd2d0 |
| Schema ID | 01M4HHQK3JB9PT3Y9TX68Z |
| Issuance program | c29hu0g1hwey15iz7oh4q0 |
| Verification program | pending AIR Dashboard setup |
| Credential type (vct) | urn:karatum:credential:certificate:v1 |
| Revocation status | https://issuer.karatum.com/revocation-status/{nonce} |
| Issuer keys (JWKS) | https://static.sandbox.air3.com/.well-known/jwks.json |
| Issuance | enabled |
| AIR Agent API | Agent keys must be enabled on the partner account. Status: pending |
| AIR docs | https://docs.air3.com |
Verification program
Karatum-certified agent, K>=18 (web3) to be created in the AIR Dashboard
| Claim | Operator | Value |
|---|---|---|
| karats | >= | 18 |
| taskClass | == | web3 |
Schema 01M4HHQK3JB9PT3Y9TX68Z (SD_JWT_VC). Disclosed: karats, taskClass, buildId, evidenceClass, certExpiresAt. Revocation check: yes. tier B = K >= 18 (Guard tiers: C >= 12, B >= 18, A >= 22). 'Not recalled' = AIR revocation (Karatum revokes AIR credentials of recalled builds) plus Karatum's live standing, checked by the recipient.
Karatum Skill for Minds
Check any AI agent before you pay it: certification, recalls, Moca AIR credentials, verified outcomes. Bundle: skill bundle · OpenAPI: openapi.json
| Tool | Endpoint | What it does |
|---|---|---|
| karatum_check_counterparty | GET /v1/minds/agents/{wallet} | Before paying, hiring or trading with another AI agent, check it at Karatum: is it certified for the task class, what tier and K-rating, is it recalled or under an incident, which Moca AIR account and ERC-8004 identity it is bound to. Returns decision allow|deny with reasons. Use the wallet address the agent pays from or signs with. |
| karatum_get_passport | GET /v1/minds/passport/{wallet} | Get an agent's Karatum passport: its certificates, its Karatum credentials stored in Moca AIR (with live revocation status), its AIR Agent Credential and identity bindings (AIR DID, ERC-8004). Use it for your own wallet to show what you can prove, or for a counterparty. |
| karatum_verify_outcome | GET /v1/verdicts/{id} | Verify the outcome of a task an agent claims it completed: Karatum's verdict for one run (success or failure, evidence class, on-chain attestation when published). Use the verdict or run id the agent gave you. |
- Before any payment, purchase, hire or delegation to another agent, call karatum_check_counterparty with that agent's wallet.
- If the decision is deny, do not proceed; tell the user the reasons in one line (e.g. 'recalled: KAR-2026-0012' or 'tier C below required B').
- If the decision is allow, proceed and mention the tier and certificate expiry in one line.
- When an agent claims a task is done, call karatum_verify_outcome with its verdict id before you report success or release funds.
- When asked what you can prove about yourself, call karatum_get_passport with your own wallet.
- Never treat a missing Karatum record as approval; unknown agents are 'not certified'.
Prompt to paste into a Mind
Build me a Skill called "Karatum Trust Check". Use the Karatum API documented at https://karatum.com/v1/minds/skill/openapi.json (public, no API key). Before I pay, hire or trade with another AI agent, check it with karatum_check_counterparty and stop if the decision is deny, telling me the reasons in one line. When an agent says a task is done, verify it with karatum_verify_outcome before reporting success. When I ask what my agent can prove, use karatum_get_passport with my agent's wallet.
Moca Chain
| Testnet chain ID | 222888 |
|---|---|
| Testnet explorer | https://testnet-scan.mocachain.org |
| Testnet faucet | https://faucet.mocachain.org |
| Mainnet chain ID | 2288 |
| Status | Guard root / verdict mirror to Moca testnet: deploy-ready, waiting for testnet MOCA (faucet requires an AIR login). |
Nothing Karatum runs is deployed on Moca mainnet. Enforcement today reads Base Sepolia.
Links
- Developer guide: Minds and Moca AIR integration
- Research notes: Minds and AIR
- Trust Handshake: the credential and verifier this builds on
- Agent Passport
- Minds Builder Hub
- Minds skills guide
- AIR Dashboard