Live on Solana devnet

An x402-metered skill oracle for autonomous agents.

An AI agent pays a few cents in USDC, directly on-chain, to check whether a Solana address has a real skill credential behind it — sourced from Prova's on-chain attestation registry — before hiring or transacting with it. Every paid check mints its own proof-of-fulfillment attestation, independently verifiable by anyone.

How it works

Six steps, entirely on-chain — no server-side balance, no intermediary settling on Attesto's behalf.

  1. 1

    Request without paying

    Call GET /v1/skill-check/:address with no payment. Attesto answers with a 402 and the exact price, in USDC, down to the cent.

  2. 2

    Pay directly on-chain

    Send the quoted USDC straight to the given address with a transferChecked instruction, plus a memo binding the payment to this exact request — no facilitator sits in between.

  3. 3

    Retry with your proof

    Call the same request again, this time with the confirmed transaction signature attached as proof of payment.

  4. 4

    Verified before anything ships

    Attesto reads the transaction straight off Solana RPC and checks the destination, mint, and amount itself before releasing a result.

  5. 5

    Attestation minted automatically

    A proof-of-fulfillment record is written on-chain the moment the check is served — resolvable independently, not just taken on Attesto's word.

  6. 6

    Disputable, on-chain

    The original payer can sign and file a dispute themselves; Attesto verifies it happened and surfaces the resulting on-chain record.

Live activity

Solana devnet — real data, not simulated

Read live from GET /v1/metrics on every request — counted directly off on-chain accounts, never cached in a database that could drift from what's actually there.

Unique payers
Requests served
Volume (USDC)
Attestations
Disputes

Try it

The full flow, live against devnet. Connect a devnet wallet with USDC and pay in one click, or build the transaction yourself — the API reference below has the exact recipe.

API reference

Three endpoints, no SDK required. Every request settles atomically — Attesto never holds a running balance for any caller.

GET/v1/skill-check/:address

402-then-retry: the first call returns the exact price; retry with the payment signature to get the score.

# 1. Request without paying — get the price
curl https://attesto.xyz/v1/skill-check/9jFjRSwN7zchM83LDLHugcDmGKe3fJ7MKaZPZVb8VYvh

# 2. Pay the quoted USDC yourself: a transferChecked of maxAmountRequired
#    to payTo, PLUS an SPL Memo instruction (program
#    MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr) in the SAME transaction
#    whose data is the resourceId string from step 1, verbatim. Required —
#    it's what binds this payment to this specific request; a transfer of
#    the right amount with no memo (or the wrong one) is rejected.

# 3. Retry with proof
curl https://attesto.xyz/v1/skill-check/9jFjRSwN7zchM83LDLHugcDmGKe3fJ7MKaZPZVb8VYvh \
  -H "X-PAYMENT: $(printf '%s' '{"x402Version":1,"scheme":"exact","network":"solana-devnet","payload":{"resourceId":"<resourceId from step 1>","signature":"<your confirmed transaction signature>"}}' | base64)"
GET/v1/metrics

Public, unpaid. Computed live from getProgramAccounts on every request — never cached in a database.

curl https://attesto.xyz/v1/metrics
POST/v1/disputes

Verifies a file_dispute transaction you already signed and submitted yourself, and returns the on-chain record.

curl -X POST https://attesto.xyz/v1/disputes \
  -H "Content-Type: application/json" \
  -d '{
    "resourceId": "<64-char hex resourceId>",
    "signature": "<your confirmed file_dispute transaction signature>"
  }'