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
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
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
Retry with your proof
Call the same request again, this time with the confirmed transaction signature attached as proof of payment.
- 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
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
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 simulatedRead 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.
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.
/v1/skill-check/:address402-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)"/v1/metricsPublic, unpaid. Computed live from getProgramAccounts on every request — never cached in a database.
curl https://attesto.xyz/v1/metrics/v1/disputesVerifies 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>"
}'