anchor-x402 Attest API

The Attest API from anchor-x402 — 2 operation(s) for attest.

Operations 2

POST /v1/attest Create a signed, anchored receipt for an AI decision #
POST /v1/attest/verify Verify a previously anchored decision attestation #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/anchor-x402-attest-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

anchor-x402-attest-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: anchor-x402 Attest API
  description: 18 pay-per-call x402 services for AI agents — on-chain anchoring & attestation, wallet/address security screening, Web3 data (tx & calldata decode, ENS, token prices), x402 spend accounting, content analysis, and verifiable randomness. No API keys or accounts; settle per request in USDC on Base or Solana. $0.001–$1.77 per call.
  version: 0.3.0
  x-guidance: Pay-per-call x402 services for AI agents — no API keys or accounts. Each paid route returns HTTP 402 with x402 payment requirements; pay in USDC on Base or Solana (select routes also settle JPYC on Polygon) and retry with the payment header. Prices are $0.001–$1.77 per call. POST routes take a JSON body per each operation's requestBody schema.
  contact:
    email: hypeprinter007@gmail.com
  x-logo:
    url: https://api.anchor-x402.com/icon.png
    altText: anchor-x402
tags:
- name: Attest
paths:
  /v1/attest:
    post:
      summary: Create a signed, anchored receipt for an AI decision
      operationId: attest_v1_attest_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AttestRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AttestResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '402':
          description: Payment Required
      x-payment-info:
        price:
          mode: fixed
          currency: USD
          amount: '0.010000'
        protocols:
        - x402: {}
      tags:
      - Attest
  /v1/attest/verify:
    post:
      summary: Verify a previously anchored decision attestation
      operationId: attest_verify_v1_attest_verify_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AttestVerifyRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AttestVerifyResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security: []
      tags:
      - Attest
components:
  schemas:
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    AttestRequest:
      properties:
        input_hash:
          type: string
          title: Input Hash
          description: 64-char hex SHA-256 of the agent's input.
        output_hash:
          type: string
          title: Output Hash
          description: 64-char hex SHA-256 of the agent's output / decision payload.
        decision:
          type: string
          maxLength: 64
          title: Decision
          description: Free-form short label, e.g. "APPROVED", "REJECTED", "CONFIDENCE=0.93".
        scheme:
          anyOf:
          - type: string
            enum:
            - eip191
            - ed25519
          - type: 'null'
          title: Scheme
          description: 'Signature scheme when you supply a `signature`: "eip191" (EVM) or "ed25519" (Solana).'
        signature:
          anyOf:
          - type: string
          - type: 'null'
          title: Signature
          description: 0x-prefixed hex (eip191) or base58 (ed25519). Omit to have the anchor-x402 treasury sign for you (hosted-signer mode, for wallet-less agents).
        signer_pubkey:
          anyOf:
          - type: string
          - type: 'null'
          title: Signer Pubkey
          description: Required for ed25519 (Solana base58 pubkey). Ignored for eip191 — address is recovered.
      type: object
      required:
      - input_hash
      - output_hash
      - decision
      title: AttestRequest
    AttestResponse:
      properties:
        merkle_root:
          type: string
          title: Merkle Root
          description: SHA-256 over the domain-separated (input_hash, output_hash, decision) — this is what gets anchored.
        signer_verified:
          type: boolean
          title: Signer Verified
        signer:
          type: string
          title: Signer
          description: Recovered EVM address (eip191) or supplied Solana pubkey (ed25519).
        base:
          anyOf:
          - $ref: '#/components/schemas/ChainAnchor'
          - type: 'null'
        solana:
          anyOf:
          - $ref: '#/components/schemas/ChainAnchor'
          - type: 'null'
        decision:
          type: string
          title: Decision
        signed_at:
          type: integer
          title: Signed At
        signed_by:
          type: string
          title: Signed By
          description: '"caller" (you supplied the signature) or "treasury" (hosted-signer mode).'
          default: caller
        verify_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Verify Url
          description: Free endpoint a relying party POSTs this receipt to for independent re-verification.
      type: object
      required:
      - merkle_root
      - signer_verified
      - signer
      - decision
      - signed_at
      title: AttestResponse
    AttestVerifyResponse:
      properties:
        valid:
          type: boolean
          title: Valid
          description: True iff signature verified AND the Base tx confirms the exact root.
        merkle_root:
          type: string
          title: Merkle Root
        signature_valid:
          type: boolean
          title: Signature Valid
        signer:
          type: string
          title: Signer
        anchor_confirmed:
          type: boolean
          title: Anchor Confirmed
        root_matches:
          type: boolean
          title: Root Matches
        anchored_at_block:
          anyOf:
          - type: integer
          - type: 'null'
          title: Anchored At Block
        anchored_at_time:
          anyOf:
          - type: integer
          - type: 'null'
          title: Anchored At Time
        notes:
          type: string
          title: Notes
      type: object
      required:
      - valid
      - merkle_root
      - signature_valid
      - signer
      - anchor_confirmed
      - root_matches
      - notes
      title: AttestVerifyResponse
    ChainAnchor:
      properties:
        tx:
          type: string
          title: Tx
        explorer_url:
          type: string
          title: Explorer Url
      type: object
      required:
      - tx
      - explorer_url
      title: ChainAnchor
    AttestVerifyRequest:
      properties:
        input_hash:
          type: string
          title: Input Hash
          description: 64-char hex SHA-256 of the agent's input.
        output_hash:
          type: string
          title: Output Hash
          description: 64-char hex SHA-256 of the agent's output / decision payload.
        decision:
          type: string
          maxLength: 64
          title: Decision
        scheme:
          type: string
          enum:
          - eip191
          - ed25519
          title: Scheme
          description: '"eip191" or "ed25519" — matches the receipt.'
        signature:
          type: string
          title: Signature
          description: The signature from the receipt.
        signer_pubkey:
          anyOf:
          - type: string
          - type: 'null'
          title: Signer Pubkey
          description: Required for ed25519.
        base_tx:
          type: string
          title: Base Tx
          description: 0x-prefixed Base tx hash returned by the mint.
      type: object
      required:
      - input_hash
      - output_hash
      - decision
      - scheme
      - signature
      - base_tx
      title: AttestVerifyRequest
      description: 'A minted receipt submitted for free re-verification: the signed tuple plus

        the signature and the Base tx that should carry the anchored root.'
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError