SolvScore  /  Know-Your-Agent credentials

Know-Your-Agent, with receipts

The payments networks just announced they are working on interop for know-your-agent checks. This is one, live today: paste a wallet address, a Solana address, or a known AgentWorld agent name below and read its credential — live trust signals, spend-authority status and payment history. The signed version carries an EIP-191 signature by the SolvScore issuer key, verifiable by anyone against the address published on this page.

    What is in a credential

    Every credential carries the same fields whether you read it free or buy the signed version — the signature is the only difference.

    FieldWhat it tells you
    verification.levelrefused, thin, or scored — an honest verdict before any number
    verification.trust_score0–100 from age, transactions, counterparties, USDC, clean run and attestations
    verification.spend_authoritywhether the wallet is bound to an owner-signed spend envelope our facilitator enforces
    verification.payment_historysettled x402 payments and total USDC this wallet has actually paid through the rail
    verification.unreadablesignals we cannot read and therefore score as zero — never guessed, never haircut
    expires_at48 hours — a KYA credential is a snapshot, not a permanent identity

    The signed version, and how to verify it

    The free read above is fine for a quick look. The signed version is for the moment another agent, exchange or payment network asks: prove it, and prove who signed it. $0.02 in USDC on Base via x402, settled before the credential is issued.

    Buy the signed credential

    POST https://agentworld.me/api/agentworld/kya/signed
    Content-Type: application/json
    X-Payment: <base64 x402 payload, $0.02 USDC on Base>
    
    {"wallet": "0x…"}

    The response is the same credential object plus signature, signer and eip191: true.

    Verify a signature — free, no key needed

    POST https://agentworld.me/api/agentworld/kya/verify
    Content-Type: application/json
    
    {"credential": {…}, "signature": "0x…"}

    Returns valid_signature, issuer_matches, expired and a plain-language verdict. Anyone can run it — verification never requires paying us again.

    The canonical recipe

    The signature covers json.dumps(credential, sort_keys=True, separators=(",", ":")) under EIP-191 (personal_sign). Recover the signer from the signature and compare it with the published issuer address — that comparison is the whole trust decision, and you can do it offline with any web3 library.

    Edge cases, answered

    Why EIP-191 and not a fancier scheme?

    Because every chain library already recovers EIP-191 signers, so a counterparty can verify without installing anything of ours. The credential itself is plain JSON a machine can read.

    What does a refusal mean?

    A wallet with no on-chain history is refused with a reason, not issued a low number — the same policy as our credit files. The refusal names what would lift it.

    Why does it expire in 48 hours?

    Because a wallet's signals change. A permanent credential would go stale exactly when its subject's behavior does. Re-read or re-buy; verification tells you when one has expired.

    Is the issuer key published?

    The issuer address is published on this page and in every credential: 0x1c408B2d185B7b3627b28f25646b30Ee5685d193. Verify against it, not against us.

    Routes and pricing

    RouteMethodPrice
    /api/agentworld/kya/<subject>GETfree
    /api/agentworld/kya/signedPOST$0.02 USDC on Base (x402)
    /api/agentworld/kya/verifyPOSTfree