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.

12
Karatum credentials stored in Moca AIR (2 holders)
1
active AIR Agent Credentials (1 revoked)
2 / 1
merchant decisions: accepted / rejected (mock merchant)
0.020000
testnet USDC settled on Base Sepolia (2 paid orders)

How it fits

  1. Minds agent

    An Animoca Minds agent is about to buy or delegate. Before it does, it calls the Karatum Skill.

  2. Karatum Skill check

    karatum_check_counterparty asks Karatum whether the counterparty is certified, its tier, and whether it is recalled.

  3. 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.

  4. 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.

TimeLabelBuyerSKUAmountDecisionReasonsPaymentChain block
2026-10-16 17:29:30 UTCafter recall0x220a…9434espresso-beans-250g0.010000 USDCacceptnonepaid 0xc9a2…6bd048201740
2026-10-16 17:28:47 UTCduring recall0x220a…9434coffee-beans-250g0.010000 USDCrejectREVOKED RECALLED GUARD_NOT_VALID AIR_REVOKED none48201719
2026-10-16 17:28:09 UTCbefore recall0x220a…9434coffee-beans-250g0.010000 USDCacceptnonepaid 0x5c64…267f48201700
Checks on the latest order (15): accept at pivota-mock
CheckStatusDetailCode
formatpasscredential with 5 disclosure(s) and a key-binding JWT
issuer.signaturepasssigned by https://karatum.com/v1/handshake
credential.windowpassvalid until 2026-10-23T17:29:28.000Z
disclosurespass5 disclosure(s) match the signed digests: taskClass, tier, airDid, airProof, airRevocationNonce
holder.bindingpassholder key = wallet 0x220a2fca33365c39ab18fa293c70e1286da79434
kbpasskey-binding JWT verified against the supplied challenge
policy.taskClasspasscertified for web3
policy.tierpasstier B >= B
statuspasscredential #9 is not revoked (list 0s old, fetched)
standing.recallpassnot recalled (standing 0s old, fetched)
chain.recallpassKaratumIncidentLog.isRecalled = false at block 48201740 (chain 84532)
chain.guardpassGuard registry: VALID tier 2 K19 (proof)
kb.single-usepassorder nonce consumed (single use)
air.linkpassacts for AIR account did:air:id:testnet:4PBfFhxoztA4VGXsCKoNnJ8vjgqjAbdNc1TjcEyXT4 (Karatum credential stored in that account)
air.revocationpassAIR-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 DIDdid:web:issuer.karatum.com
Partner IDe904feca-51c1-4fd7-860a-60bee39cd2d0
Schema ID01M4HHQK3JB9PT3Y9TX68Z
Issuance programc29hu0g1hwey15iz7oh4q0
Verification programpending AIR Dashboard setup
Credential type (vct)urn:karatum:credential:certificate:v1
Revocation statushttps://issuer.karatum.com/revocation-status/{nonce}
Issuer keys (JWKS)https://static.sandbox.air3.com/.well-known/jwks.json
Issuanceenabled
AIR Agent APIAgent keys must be enabled on the partner account. Status: pending
AIR docshttps://docs.air3.com

Verification program

Karatum-certified agent, K>=18 (web3) to be created in the AIR Dashboard

ClaimOperatorValue
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

ToolEndpointWhat it does
karatum_check_counterpartyGET /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_passportGET /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_outcomeGET /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.
  1. Before any payment, purchase, hire or delegation to another agent, call karatum_check_counterparty with that agent's wallet.
  2. 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').
  3. If the decision is allow, proceed and mention the tier and certificate expiry in one line.
  4. When an agent claims a task is done, call karatum_verify_outcome with its verdict id before you report success or release funds.
  5. When asked what you can prove about yourself, call karatum_get_passport with your own wallet.
  6. 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 ID222888
Testnet explorerhttps://testnet-scan.mocachain.org
Testnet faucethttps://faucet.mocachain.org
Mainnet chain ID2288
StatusGuard 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.