{
  "openapi": "3.1.1",
  "info": {
    "title": "Animica x402 — paid agent APIs",
    "version": "0.2.0",
    "summary": "Pay-per-request APIs settled with x402. No account, no API key.",
    "description": "Machine-payable HTTP APIs from Animica. Every paid operation answers `402 Payment Required` with the exact terms (amount, asset, network, recipient, expiry); the caller signs an authorization for those terms locally and retries with it in the `payment-signature` header (x402 v2) or `x-payment` (v1). The gateway verifies the authorization, settles it on-chain through its own facilitator, and returns the response with the settlement in the `payment-response` header.\n\nThere is NO API-key authentication anywhere in this document, and no per-customer account: the payment payload is the only credential. Private keys never reach Animica.\n\nOrdering guarantees, per product: cheap read products are produced BEFORE settlement (a failure charges nothing), while products with an expensive downstream re-check readiness immediately before settling and, if the downstream still fails afterwards, return a SIGNED error receipt referencing the settled payment. Products whose backend is unhealthy report `available: false` in the catalog and answer 503 without ever emitting a 402.\n\nPrices and availability in this document are generated from the live product registry (https://animica.dev/.well-known/x402); response examples are real captured responses.",
    "contact": {
      "name": "Animica",
      "url": "https://animica.org",
      "email": "ai@3vdc.com"
    },
    "license": {
      "name": "Apache-2.0",
      "identifier": "Apache-2.0"
    },
    "termsOfService": "https://animica.dev/x402"
  },
  "externalDocs": {
    "description": "Human documentation and live catalog",
    "url": "https://animica.dev/x402"
  },
  "servers": [
    {
      "url": "https://animica.dev",
      "description": "Animica x402 gateway"
    }
  ],
  "x-payment-protocol": "x402",
  "x-x402": {
    "payment_protocol": "x402",
    "x402_version": 2,
    "scheme": "exact",
    "network": "base",
    "network_caip2": "eip155:8453",
    "chain_id": 8453,
    "asset": "USDC",
    "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "asset_decimals": 6,
    "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
    "explorer_tx": "https://basescan.org/tx/",
    "catalog": "https://animica.dev/x402",
    "well_known": "https://animica.dev/.well-known/x402",
    "stats": "https://animica.dev/x402/stats",
    "documentation": "https://animica.dev/x402"
  },
  "tags": [
    {
      "name": "discovery",
      "description": "Free, unauthenticated description of everything above."
    },
    {
      "name": "randomness",
      "description": "Randomness products. One signed node draw per request; derived results publish the rules to recompute them."
    },
    {
      "name": "chain-data",
      "description": "Bulk reads of the Animica L1. The free public APIs are unaffected — these sell range, batching and indexes they do not have."
    },
    {
      "name": "inference",
      "description": "OpenAI-compatible inference, sold only while enough workers are live-serving."
    },
    {
      "name": "products",
      "description": "Paid products."
    }
  ],
  "paths": {
    "/x402": {
      "get": {
        "operationId": "discovery_catalog",
        "summary": "Product catalog (or this landing page)",
        "description": "Content-negotiated: `Accept: text/html` returns the human landing page, anything else returns the machine catalog. Free, unauthenticated.",
        "tags": [
          "discovery"
        ],
        "parameters": [
          {
            "name": "accept",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "text/html for the landing page; application/json (or */*) for the catalog"
          }
        ],
        "responses": {
          "200": {
            "description": "Catalog JSON, or the landing page for browsers.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Catalog"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/.well-known/x402": {
      "get": {
        "operationId": "discovery_well_known_catalog",
        "summary": "well known catalog",
        "description": "The same catalog, always JSON, at the ecosystem-conventional location. Free, unauthenticated.",
        "tags": [
          "discovery"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Catalog"
                }
              }
            }
          }
        }
      }
    },
    "/x402/openapi.json": {
      "get": {
        "operationId": "discovery_openapi_document",
        "summary": "openapi document",
        "description": "This document, generated from the live product registry.",
        "tags": [
          "discovery"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    },
    "/x402/stats": {
      "get": {
        "operationId": "discovery_aggregate_settlement_stats",
        "summary": "aggregate settlement stats",
        "description": "Aggregate counts from the settlement store: settled payments, last 24h, per-product counts, network and asset. No payer addresses, amounts or transaction hashes.",
        "tags": [
          "discovery"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Stats"
                }
              }
            }
          }
        }
      }
    },
    "/x402/healthz": {
      "get": {
        "operationId": "discovery_gateway_liveness",
        "summary": "gateway liveness",
        "description": "Process liveness for monitors.",
        "tags": [
          "discovery"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    },
    "/x402/qrng/draw": {
      "get": {
        "operationId": "qrng_get_x402_qrng_draw",
        "summary": "Signed random bytes",
        "description": "Random bytes from the Animica node's randomness service with a signed digest attestation and an entropy-health report, 1..1024 bytes per draw. Current trust model, stated up front and in every response: the entropy source is a software CSPRNG (os.urandom) and the signer is a software key, so source.is_quantum=false and attestation.attested=false today; those fields flip truthfully if a hardware/quantum provider is ever connected. The free catalog entry carries the same live entropy block, so you can check the source before paying.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "randomness"
        ],
        "parameters": [
          {
            "name": "bytes",
            "in": "query",
            "required": false,
            "description": "number of random bytes, 1..1024 (default 32); alias: n",
            "schema": {
              "type": "integer",
              "description": "number of random bytes, 1..1024 (default 32); alias: n"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RandomBytesDraw"
                },
                "examples": {
                  "captured": {
                    "summary": "real response captured from this endpoint (GET /x402/qrng/draw?bytes=32)",
                    "description": "captured live on this gateway against the Animica mainnet node on 2026-08-15; the payment block is rendered separately from the live registry because the capture settled through a mocked facilitator",
                    "value": {
                      "product": "qrng",
                      "randomness": "6950d0ba85a3c0a03b193a50e998c6c6b16b53447d0e0ccb68e2a5722ac526ea",
                      "encoding": "hex",
                      "bytes": 32,
                      "source": {
                        "name": "software-fallback",
                        "vendor": "os",
                        "model": "os.urandom CSPRNG",
                        "is_hardware": false,
                        "is_quantum": false,
                        "device_path": null,
                        "attested": false,
                        "notes": "non-attested fallback for testing/degraded mode"
                      },
                      "health": {
                        "passed": true,
                        "min_entropy_per_byte": 7.8106
                      },
                      "attestation": {
                        "alg": "ed25519",
                        "backend": "software",
                        "attested": false,
                        "public_key_hex": "8a2228f4bde8f72964a7ff4aa759f24932ae1cccd9462ad94ca6e508d6b87a64",
                        "digest_hex": "ae7686343e9459d0ddaabb3b80cbdb9d28599eec501ffefe4736b60355f8bf29",
                        "signature_hex": "cb219cdb424f395b664076ee57cae6a1245544b53306d35860de4a689ff410dc79d27ffbcfaa927268db47da2c155e06bf0eaf2d838083f81ad1450c1a7cb904"
                      },
                      "verification": {
                        "method": "signed-digest-attestation",
                        "rules": [
                          "attestation.digest_hex == sha3_256(bytes(randomness))",
                          "ed25519_verify(pubkey=attestation.public_key_hex, message=raw_bytes(attestation.digest_hex), signature=attestation.signature_hex)"
                        ],
                        "verifier": "randomness/beacon_api/static/verify.js in the animica repo (gitlab.com/Animica) — dependency-free Node module exporting sha3_256; pair with any ed25519 verifier",
                        "trust_model": "signed by the serving node, not client-recomputable: you trust the node's entropy source, then verify it signed exactly these bytes. Check health.passed and attestation.attested before relying on it.",
                        "attested": false
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-qrng"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "qrng",
          "name": "Signed random bytes",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-qrng"
        }
      }
    },
    "/x402/qrng": {
      "post": {
        "operationId": "qrng_post_x402_qrng",
        "summary": "Signed random bytes",
        "description": "Random bytes from the Animica node's randomness service with a signed digest attestation and an entropy-health report, 1..1024 bytes per draw. Current trust model, stated up front and in every response: the entropy source is a software CSPRNG (os.urandom) and the signer is a software key, so source.is_quantum=false and attestation.attested=false today; those fields flip truthfully if a hardware/quantum provider is ever connected. The free catalog entry carries the same live entropy block, so you can check the source before paying.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "randomness"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RandomBytesDraw"
                },
                "examples": {
                  "captured": {
                    "summary": "real response captured from this endpoint (GET /x402/qrng/draw?bytes=32)",
                    "description": "captured live on this gateway against the Animica mainnet node on 2026-08-15; the payment block is rendered separately from the live registry because the capture settled through a mocked facilitator",
                    "value": {
                      "product": "qrng",
                      "randomness": "6950d0ba85a3c0a03b193a50e998c6c6b16b53447d0e0ccb68e2a5722ac526ea",
                      "encoding": "hex",
                      "bytes": 32,
                      "source": {
                        "name": "software-fallback",
                        "vendor": "os",
                        "model": "os.urandom CSPRNG",
                        "is_hardware": false,
                        "is_quantum": false,
                        "device_path": null,
                        "attested": false,
                        "notes": "non-attested fallback for testing/degraded mode"
                      },
                      "health": {
                        "passed": true,
                        "min_entropy_per_byte": 7.8106
                      },
                      "attestation": {
                        "alg": "ed25519",
                        "backend": "software",
                        "attested": false,
                        "public_key_hex": "8a2228f4bde8f72964a7ff4aa759f24932ae1cccd9462ad94ca6e508d6b87a64",
                        "digest_hex": "ae7686343e9459d0ddaabb3b80cbdb9d28599eec501ffefe4736b60355f8bf29",
                        "signature_hex": "cb219cdb424f395b664076ee57cae6a1245544b53306d35860de4a689ff410dc79d27ffbcfaa927268db47da2c155e06bf0eaf2d838083f81ad1450c1a7cb904"
                      },
                      "verification": {
                        "method": "signed-digest-attestation",
                        "rules": [
                          "attestation.digest_hex == sha3_256(bytes(randomness))",
                          "ed25519_verify(pubkey=attestation.public_key_hex, message=raw_bytes(attestation.digest_hex), signature=attestation.signature_hex)"
                        ],
                        "verifier": "randomness/beacon_api/static/verify.js in the animica repo (gitlab.com/Animica) — dependency-free Node module exporting sha3_256; pair with any ed25519 verifier",
                        "trust_model": "signed by the serving node, not client-recomputable: you trust the node's entropy source, then verify it signed exactly these bytes. Check health.passed and attestation.attested before relying on it.",
                        "attested": false
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-qrng"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "qrng",
          "name": "Signed random bytes",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-qrng"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "bytes": {
                    "type": "integer",
                    "description": "number of random bytes, 1..1024 (default 32); alias: n"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/x402/qrng/draw/trial": {
      "get": {
        "operationId": "qrng_free_get_x402_qrng_draw_trial",
        "summary": "Signed random bytes — free trial (GET)",
        "description": "FREE TRIAL of qrng: up to 3 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/qrng/draw.\n\nNo payment is ever requested here.",
        "tags": [
          "randomness"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-qrng"
        }
      }
    },
    "/x402/chain/export": {
      "get": {
        "operationId": "bulk_chain_get_x402_chain_export",
        "summary": "Bulk chain data export",
        "description": "Block-range and transaction-range exports from the Animica L1 (chunked reads, cursor pagination, NDJSON/JSON, gzip). Caps per request: 1000 blocks, 10000 tx records, 16000000 bytes. The free per-block APIs stay free.\n\nPayment: $0.002068 USDC per request (2068 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "chain-data"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "blocks | transactions (export route only; /blocks and /transactions imply it)",
            "schema": {
              "type": "string",
              "description": "blocks | transactions (export route only; /blocks and /transactions imply it)"
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "description": "first block height (required; also the pagination cursor)",
            "schema": {
              "type": "integer",
              "description": "first block height (required; also the pagination cursor)"
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "description": "last height inclusive (window <= 1000 blocks)",
            "schema": {
              "type": "integer",
              "description": "last height inclusive (window <= 1000 blocks)"
            }
          },
          {
            "name": "count",
            "in": "query",
            "required": false,
            "description": "alternative to `to`: number of blocks from `from`",
            "schema": {
              "type": "integer",
              "description": "alternative to `to`: number of blocks from `from`"
            }
          },
          {
            "name": "address",
            "in": "query",
            "required": false,
            "description": "transactions only: anim1… bech32m or 32-byte hex account digest; matches from/to",
            "schema": {
              "type": "string",
              "description": "transactions only: anim1… bech32m or 32-byte hex account digest; matches from/to"
            }
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "description": "ndjson (default) | json",
            "schema": {
              "type": "string",
              "description": "ndjson (default) | json"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/x-ndjson": {
                "schema": {
                  "$ref": "#/components/schemas/ChainExport"
                },
                "examples": {
                  "captured": {
                    "summary": "real response captured from this endpoint (GET /x402/chain/export?from=73600&to=73602&format=json)",
                    "description": "captured live on this gateway against the Animica mainnet node on 2026-08-15; the payment block is rendered separately from the live registry because the capture settled through a mocked facilitator",
                    "value": {
                      "meta": {
                        "type": "meta",
                        "product": "bulk_chain",
                        "export": "blocks",
                        "chain_id": 1,
                        "head_height": 73635,
                        "head_margin": 6,
                        "from_height": 73600,
                        "to_height": 73602,
                        "unit": "nANM"
                      },
                      "blocks": [
                        {
                          "height": 73600,
                          "hash": "0x0000000001bb6415ee925b9648e93cf3f761371bd8524618f39dd174ea9d15dd",
                          "parent_hash": "0x0000000003b8249bf50aad465a666250c02b096f331ba05ac6dda2e81efa9147",
                          "timestamp": 1786769588,
                          "chain_id": 1,
                          "theta_micro": 26004937,
                          "nonce": 13769920589,
                          "roots": {
                            "stateRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
                            "txsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
                            "receiptsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
                            "proofsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
                            "daRoot": "0x0000000000000000000000000000000000000000000000000000000000000000"
                          },
                          "transactions": []
                        }
                      ],
                      "summary": {
                        "type": "summary",
                        "blocks": 3,
                        "txs": 0,
                        "truncated_reason": null,
                        "next_cursor": null,
                        "complete": true
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-bulk_chain"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "bulk_chain",
          "name": "Bulk chain data export",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002068"
          },
          "price_usd": "0.002068",
          "currency": "USDC",
          "amount_atomic": "2068",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "readiness re-checked, then settled, then executed (retry + signed receipt on downstream failure)",
          "documentation": "https://animica.dev/x402#product-bulk_chain"
        }
      }
    },
    "/x402/chain/blocks": {
      "get": {
        "operationId": "bulk_chain_get_x402_chain_blocks",
        "summary": "Bulk chain data export",
        "description": "Block-range and transaction-range exports from the Animica L1 (chunked reads, cursor pagination, NDJSON/JSON, gzip). Caps per request: 1000 blocks, 10000 tx records, 16000000 bytes. The free per-block APIs stay free.\n\nPayment: $0.002068 USDC per request (2068 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "chain-data"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "blocks | transactions (export route only; /blocks and /transactions imply it)",
            "schema": {
              "type": "string",
              "description": "blocks | transactions (export route only; /blocks and /transactions imply it)"
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "description": "first block height (required; also the pagination cursor)",
            "schema": {
              "type": "integer",
              "description": "first block height (required; also the pagination cursor)"
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "description": "last height inclusive (window <= 1000 blocks)",
            "schema": {
              "type": "integer",
              "description": "last height inclusive (window <= 1000 blocks)"
            }
          },
          {
            "name": "count",
            "in": "query",
            "required": false,
            "description": "alternative to `to`: number of blocks from `from`",
            "schema": {
              "type": "integer",
              "description": "alternative to `to`: number of blocks from `from`"
            }
          },
          {
            "name": "address",
            "in": "query",
            "required": false,
            "description": "transactions only: anim1… bech32m or 32-byte hex account digest; matches from/to",
            "schema": {
              "type": "string",
              "description": "transactions only: anim1… bech32m or 32-byte hex account digest; matches from/to"
            }
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "description": "ndjson (default) | json",
            "schema": {
              "type": "string",
              "description": "ndjson (default) | json"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/x-ndjson": {
                "schema": {
                  "$ref": "#/components/schemas/ChainExport"
                },
                "examples": {
                  "captured": {
                    "summary": "real response captured from this endpoint (GET /x402/chain/export?from=73600&to=73602&format=json)",
                    "description": "captured live on this gateway against the Animica mainnet node on 2026-08-15; the payment block is rendered separately from the live registry because the capture settled through a mocked facilitator",
                    "value": {
                      "meta": {
                        "type": "meta",
                        "product": "bulk_chain",
                        "export": "blocks",
                        "chain_id": 1,
                        "head_height": 73635,
                        "head_margin": 6,
                        "from_height": 73600,
                        "to_height": 73602,
                        "unit": "nANM"
                      },
                      "blocks": [
                        {
                          "height": 73600,
                          "hash": "0x0000000001bb6415ee925b9648e93cf3f761371bd8524618f39dd174ea9d15dd",
                          "parent_hash": "0x0000000003b8249bf50aad465a666250c02b096f331ba05ac6dda2e81efa9147",
                          "timestamp": 1786769588,
                          "chain_id": 1,
                          "theta_micro": 26004937,
                          "nonce": 13769920589,
                          "roots": {
                            "stateRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
                            "txsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
                            "receiptsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
                            "proofsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
                            "daRoot": "0x0000000000000000000000000000000000000000000000000000000000000000"
                          },
                          "transactions": []
                        }
                      ],
                      "summary": {
                        "type": "summary",
                        "blocks": 3,
                        "txs": 0,
                        "truncated_reason": null,
                        "next_cursor": null,
                        "complete": true
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-bulk_chain"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "bulk_chain",
          "name": "Bulk chain data export",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002068"
          },
          "price_usd": "0.002068",
          "currency": "USDC",
          "amount_atomic": "2068",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "readiness re-checked, then settled, then executed (retry + signed receipt on downstream failure)",
          "documentation": "https://animica.dev/x402#product-bulk_chain"
        }
      }
    },
    "/x402/chain/transactions": {
      "get": {
        "operationId": "bulk_chain_get_x402_chain_transactions",
        "summary": "Bulk chain data export",
        "description": "Block-range and transaction-range exports from the Animica L1 (chunked reads, cursor pagination, NDJSON/JSON, gzip). Caps per request: 1000 blocks, 10000 tx records, 16000000 bytes. The free per-block APIs stay free.\n\nPayment: $0.002068 USDC per request (2068 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "chain-data"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "blocks | transactions (export route only; /blocks and /transactions imply it)",
            "schema": {
              "type": "string",
              "description": "blocks | transactions (export route only; /blocks and /transactions imply it)"
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "description": "first block height (required; also the pagination cursor)",
            "schema": {
              "type": "integer",
              "description": "first block height (required; also the pagination cursor)"
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "description": "last height inclusive (window <= 1000 blocks)",
            "schema": {
              "type": "integer",
              "description": "last height inclusive (window <= 1000 blocks)"
            }
          },
          {
            "name": "count",
            "in": "query",
            "required": false,
            "description": "alternative to `to`: number of blocks from `from`",
            "schema": {
              "type": "integer",
              "description": "alternative to `to`: number of blocks from `from`"
            }
          },
          {
            "name": "address",
            "in": "query",
            "required": false,
            "description": "transactions only: anim1… bech32m or 32-byte hex account digest; matches from/to",
            "schema": {
              "type": "string",
              "description": "transactions only: anim1… bech32m or 32-byte hex account digest; matches from/to"
            }
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "description": "ndjson (default) | json",
            "schema": {
              "type": "string",
              "description": "ndjson (default) | json"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/x-ndjson": {
                "schema": {
                  "$ref": "#/components/schemas/ChainExport"
                },
                "examples": {
                  "captured": {
                    "summary": "real response captured from this endpoint (GET /x402/chain/export?from=73600&to=73602&format=json)",
                    "description": "captured live on this gateway against the Animica mainnet node on 2026-08-15; the payment block is rendered separately from the live registry because the capture settled through a mocked facilitator",
                    "value": {
                      "meta": {
                        "type": "meta",
                        "product": "bulk_chain",
                        "export": "blocks",
                        "chain_id": 1,
                        "head_height": 73635,
                        "head_margin": 6,
                        "from_height": 73600,
                        "to_height": 73602,
                        "unit": "nANM"
                      },
                      "blocks": [
                        {
                          "height": 73600,
                          "hash": "0x0000000001bb6415ee925b9648e93cf3f761371bd8524618f39dd174ea9d15dd",
                          "parent_hash": "0x0000000003b8249bf50aad465a666250c02b096f331ba05ac6dda2e81efa9147",
                          "timestamp": 1786769588,
                          "chain_id": 1,
                          "theta_micro": 26004937,
                          "nonce": 13769920589,
                          "roots": {
                            "stateRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
                            "txsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
                            "receiptsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
                            "proofsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
                            "daRoot": "0x0000000000000000000000000000000000000000000000000000000000000000"
                          },
                          "transactions": []
                        }
                      ],
                      "summary": {
                        "type": "summary",
                        "blocks": 3,
                        "txs": 0,
                        "truncated_reason": null,
                        "next_cursor": null,
                        "complete": true
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-bulk_chain"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "bulk_chain",
          "name": "Bulk chain data export",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002068"
          },
          "price_usd": "0.002068",
          "currency": "USDC",
          "amount_atomic": "2068",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "readiness re-checked, then settled, then executed (retry + signed receipt on downstream failure)",
          "documentation": "https://animica.dev/x402#product-bulk_chain"
        }
      }
    },
    "/x402/chain/export/trial": {
      "get": {
        "operationId": "bulk_chain_free_get_x402_chain_export_trial",
        "summary": "Bulk chain data export — free trial (GET)",
        "description": "FREE TRIAL of bulk_chain: up to 5 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/chain/export.\n\nNo payment is ever requested here.",
        "tags": [
          "chain-data"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-bulk_chain"
        }
      }
    },
    "/x402/chain/address-history": {
      "post": {
        "operationId": "chain_address_history_post_x402_chain_address_history",
        "summary": "Account transaction history",
        "description": "Full transaction history for one Animica account (anim1… bech32m), served from the gateway's own head-following index with a stable cursor — up to 500 rows per call, amounts in nANM as decimal strings. The free per-block and per-tx APIs stay free; single-address lookups on explorer.animica.org stay free too (they scan at most 250 blocks per call).\n\nPayment: $0.002068 USDC per request (2068 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "chain-data"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AddressHistory"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-chain_address_history"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "chain_address_history",
          "name": "Account transaction history",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002068"
          },
          "price_usd": "0.002068",
          "currency": "USDC",
          "amount_atomic": "2068",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-chain_address_history"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "address": {
                    "type": "string",
                    "description": "anim1… bech32m address (or a 32-byte hex account digest)"
                  },
                  "limit": {
                    "type": "integer",
                    "description": "rows per page, 1..500 (default 100)"
                  },
                  "cursor": {
                    "type": "string",
                    "description": "\"<as_of>:<height>:<tx_index>\" from a previous response's next_cursor; pages the same index snapshot"
                  },
                  "order": {
                    "type": "string",
                    "description": "desc (newest first, default) | asc"
                  },
                  "direction": {
                    "type": "string",
                    "description": "any (default) | in | out | self"
                  },
                  "from_height": {
                    "type": "integer",
                    "description": "inclusive lower height bound (default 0 = genesis)"
                  },
                  "to_height": {
                    "type": "integer",
                    "description": "inclusive upper height bound (default: the index tip)"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/x402/chain/address-history/trial": {
      "post": {
        "operationId": "chain_address_history_free_post_x402_chain_address_history_trial",
        "summary": "Account transaction history — free trial (POST)",
        "description": "FREE TRIAL of chain_address_history: up to 5 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/chain/address-history.\n\nNo payment is ever requested here.",
        "tags": [
          "chain-data"
        ],
        "parameters": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "address": {
                    "type": "string",
                    "description": "anim1… bech32m address (or a 32-byte hex account digest)"
                  },
                  "limit": {
                    "type": "integer",
                    "description": "rows per page, 1..500 (default 100)"
                  },
                  "cursor": {
                    "type": "string",
                    "description": "\"<as_of>:<height>:<tx_index>\" from a previous response's next_cursor; pages the same index snapshot"
                  },
                  "order": {
                    "type": "string",
                    "description": "desc (newest first, default) | asc"
                  },
                  "direction": {
                    "type": "string",
                    "description": "any (default) | in | out | self"
                  },
                  "from_height": {
                    "type": "integer",
                    "description": "inclusive lower height bound (default 0 = genesis)"
                  },
                  "to_height": {
                    "type": "integer",
                    "description": "inclusive upper height bound (default: the index tip)"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-chain_address_history"
        }
      }
    },
    "/x402/chain/balances": {
      "post": {
        "operationId": "chain_batch_balances_post_x402_chain_balances",
        "summary": "Bulk account balances",
        "description": "Balances for up to 500 Animica accounts in ONE batched call, head-pinned, amounts in nANM as exact decimal strings. Single-address balance lookups stay free on the public API — this sells the batch.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "chain-data"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchBalances"
                },
                "examples": {
                  "captured": {
                    "summary": "real response captured from this endpoint (POST /x402/chain/balances)",
                    "description": "captured live on this gateway against the Animica mainnet node on 2026-08-15; the payment block is rendered separately from the live registry because the capture settled through a mocked facilitator",
                    "value": {
                      "product": "chain_batch_balances",
                      "unit": "nANM",
                      "decimals": 9,
                      "count": 1,
                      "unique_addresses": 1,
                      "failed_lookups": 0,
                      "total_balance": "150863000",
                      "as_of": {
                        "head_height": 73635,
                        "head_hash": "0x00000000015b1e1021c5354baeac63e24fa52aff9aee92bd467653654256cdd4",
                        "entry_head_min": 73635,
                        "entry_head_max": 73635,
                        "consistent": true
                      },
                      "balances": [
                        {
                          "address": "anim1zqpye0muk7etljd2fh7wxsh9y9027cq7dykj3de8u80s2mcnfp6qxecpunkth",
                          "account_digest": "0x4cbf7cb7b2bfc9aa4dfce342e5215eaf601e692d28b727e1df056f1348740367",
                          "balance": "150863000",
                          "spendable_balance": "150863000",
                          "exists": true
                        }
                      ],
                      "derivation": {
                        "account_digest": "bech32m anim1… payload = alg_id (2 bytes) || sha3_256(pubkey) (32 bytes); the lookup key is payload[2:34] (the 32-byte digest), which is what is sent to the node.",
                        "amounts": "balances are nANM (1e-9 ANM) as exact decimal strings, normalised through BigInt from the node's confirmed_balance. Divide by 1e9 for ANM — with a decimal library, never a float.",
                        "duplicates": "duplicate addresses are resolved once and answered in place; total_balance sums UNIQUE accounts only.",
                        "fields": "balance = the node's confirmed_balance. spendable_balance and exists are passed through only when the node returns them; nothing here is synthesised.",
                        "source": "state.getAddressBalance on the local Animica node, one batched JSON-RPC request. Note the node has an upstream read-through fallback when it believes it is behind, so a balance may come from a trusted upstream rather than local state."
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-chain_batch_balances"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "chain_batch_balances",
          "name": "Bulk account balances",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "readiness re-checked, then settled, then executed (retry + signed receipt on downstream failure)",
          "documentation": "https://animica.dev/x402#product-chain_batch_balances"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "addresses": {
                    "type": "array",
                    "items": {},
                    "description": "1..500 anim1… bech32m addresses (32-byte hex account digests also accepted); duplicates are collapsed to one lookup but still answered in place"
                  }
                },
                "additionalProperties": false
              },
              "example": {
                "addresses": [
                  "anim1zqpye0muk7etljd2fh7wxsh9y9027cq7dykj3de8u80s2mcnfp6qxecpunkth"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/chain/balances/trial": {
      "post": {
        "operationId": "chain_batch_balances_free_post_x402_chain_balances_trial",
        "summary": "Bulk account balances — free trial (POST)",
        "description": "FREE TRIAL of chain_batch_balances: up to 5 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/chain/balances.\n\nNo payment is ever requested here.",
        "tags": [
          "chain-data"
        ],
        "parameters": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "addresses": {
                    "type": "array",
                    "items": {},
                    "description": "1..500 anim1… bech32m addresses (32-byte hex account digests also accepted); duplicates are collapsed to one lookup but still answered in place"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-chain_batch_balances"
        }
      }
    },
    "/x402/v1/chat/completions": {
      "post": {
        "operationId": "priority_inference_post_x402_v1_chat_completions",
        "summary": "Priority inference",
        "description": "OpenAI-compatible chat completions with capacity-gated admission, no per-IP rate limit, direct upstream routing and a 180 s timeout. Only sold while enough workers are live-serving; disabled by default.\n\nPayment: $0.002757 USDC per request (2757 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "inference"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChatCompletion"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "description": "Serving capacity is below the configured floor (or priority inference is disabled). No payment is requested.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "captured": {
                    "summary": "real 503 captured on 2026-08-15 (0 serving workers)",
                    "value": {
                      "error": "priority_inference_unavailable",
                      "serving_workers": 0,
                      "required": 2,
                      "enabled": false,
                      "detail": "priority inference is disabled by the operator (PRIORITY_INFERENCE_ENABLED=0)"
                    }
                  }
                }
              }
            }
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-priority_inference"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "priority_inference",
          "name": "Priority inference",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002757"
          },
          "price_usd": "0.002757",
          "currency": "USDC",
          "amount_atomic": "2757",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "readiness re-checked, then settled, then executed (retry + signed receipt on downstream failure)",
          "documentation": "https://animica.dev/x402#product-priority_inference"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "model": {
                    "type": "string",
                    "description": "model id (see the free /v1/models)"
                  },
                  "messages": {
                    "type": "array",
                    "items": {},
                    "description": "OpenAI-style chat messages"
                  },
                  "max_tokens": {
                    "type": "integer",
                    "description": "completion budget"
                  },
                  "stream": {
                    "type": "boolean",
                    "description": "must be false/absent — streaming is not yet supported on the paid path"
                  }
                },
                "additionalProperties": false
              },
              "example": {
                "model": "kimi-k3",
                "messages": [
                  {
                    "role": "user",
                    "content": "hi"
                  }
                ]
              }
            }
          }
        }
      }
    },
    "/x402/v1/chat/completions/trial": {
      "post": {
        "operationId": "priority_inference_free_post_x402_v1_chat_completions_trial",
        "summary": "Priority inference — free trial (POST)",
        "description": "FREE TRIAL of priority_inference: up to 1 call per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/v1/chat/completions.\n\nNo payment is ever requested here.",
        "tags": [
          "inference"
        ],
        "parameters": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "model": {
                    "type": "string",
                    "description": "model id (see the free /v1/models)"
                  },
                  "messages": {
                    "type": "array",
                    "items": {},
                    "description": "OpenAI-style chat messages"
                  },
                  "max_tokens": {
                    "type": "integer",
                    "description": "completion budget"
                  },
                  "stream": {
                    "type": "boolean",
                    "description": "must be false/absent — streaming is not yet supported on the paid path"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-priority_inference"
        }
      }
    },
    "/x402/v1/standard/chat/completions": {
      "post": {
        "operationId": "tier_standards_post_x402_v1_standard_chat_completions",
        "summary": "Tier Standards inference",
        "description": "Standard-tier chat/completions (OpenAI-compatible), served by Animica's network. Cheaper than priority, standard latency — priced at 3x settlement gas.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-tier_standards"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "tier_standards",
          "name": "Tier Standards inference",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "readiness re-checked, then settled, then executed (retry + signed receipt on downstream failure)",
          "documentation": "https://animica.dev/x402#product-tier_standards"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "model": {
                    "type": "string",
                    "description": "model id (see the free /v1/models)"
                  },
                  "messages": {
                    "type": "array",
                    "items": {},
                    "description": "OpenAI-style chat messages"
                  },
                  "max_tokens": {
                    "type": "integer",
                    "description": "completion budget"
                  },
                  "stream": {
                    "type": "boolean",
                    "description": "must be false/absent — streaming is not yet supported on the paid path"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/x402/v1/standard/chat/completions/trial": {
      "post": {
        "operationId": "tier_standards_free_post_x402_v1_standard_chat_completions_trial",
        "summary": "Tier Standards inference — free trial (POST)",
        "description": "FREE TRIAL of tier_standards: up to 1 call per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/v1/standard/chat/completions.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "model": {
                    "type": "string",
                    "description": "model id (see the free /v1/models)"
                  },
                  "messages": {
                    "type": "array",
                    "items": {},
                    "description": "OpenAI-style chat messages"
                  },
                  "max_tokens": {
                    "type": "integer",
                    "description": "completion budget"
                  },
                  "stream": {
                    "type": "boolean",
                    "description": "must be false/absent — streaming is not yet supported on the paid path"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-tier_standards"
        }
      }
    },
    "/x402/run": {
      "post": {
        "operationId": "run_function_post_x402_run",
        "summary": "Animica Run — pay-per-execution AI functions",
        "description": "Execute a published Animica Python Cloud function and pay for that one execution in USDC — no account, no API key, and nothing to deploy yourself. Each call runs the function in a network-isolated Docker sandbox with a wall-clock and memory cap, and returns its value, stdout, logs and duration. Functions can call the Animica miner network for LLM inference from inside the sandbox, so one paid call can do real model work: the example summarizer returns a model-written summary in about 4 seconds. Send {slug, payload}; GET /x402/run/catalog is free and lists what is callable.\n\nPayment: $0.003600 USDC per request (3600 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-run_function"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "run_function",
          "name": "Animica Run — pay-per-execution AI functions",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.003600"
          },
          "price_usd": "0.003600",
          "currency": "USDC",
          "amount_atomic": "3600",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "readiness re-checked, then settled, then executed (retry + signed receipt on downstream failure)",
          "documentation": "https://animica.dev/x402#product-run_function"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "slug": {
                    "type": "string",
                    "description": "app slug of a published function, from GET /x402/run/catalog"
                  },
                  "payload": {
                    "type": "object",
                    "description": "JSON passed to the function as its input"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "slug"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/run/catalog": {
      "get": {
        "operationId": "run_function_free_get_x402_run_catalog",
        "summary": "Animica Run — pay-per-execution AI functions — free disclosure",
        "description": "FREE. Lists the published functions /x402/run can execute, with the per-execution price. Free by design: an agent that cannot see the slugs could only discover them by paying for a wrong guess.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-run_function"
        }
      }
    },
    "/x402/credits/buy": {
      "post": {
        "operationId": "credits_buy_post_x402_credits_buy",
        "summary": "Prepaid call credits",
        "description": "Buy a prepaid credit voucher in ONE on-chain settlement, then spend it across every paid product on this gateway with no further settlement and no gas. Send the returned token as \"X-Animica-Credits: anmc_...\" (or \"Authorization: Bearer anmc_...\") on any paid route and the call is served from the balance instead of a payment. Credit is granted at face value plus 10% — that bonus is the Base settlement gas we do not spend on your calls 2..N, returned to you. The voucher is a BEARER secret shown exactly once and stored only as its SHA-256 hash: anyone holding it can spend it, and we cannot recover it for you. Balance and full spend history are readable for free at GET /x402/credits/balance with the token. Unused credit expires 365 days after purchase. Send the token on THIS route to top up an existing voucher instead of minting a new one.\n\nPayment: $0.50 USDC per request (500000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-credits_buy"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "credits_buy",
          "name": "Prepaid call credits",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.50"
          },
          "price_usd": "0.50",
          "currency": "USDC",
          "amount_atomic": "500000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "readiness re-checked, then settled, then executed (retry + signed receipt on downstream failure)",
          "documentation": "https://animica.dev/x402#product-credits_buy"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "label": {
                    "type": "string",
                    "description": "optional free-text label (<=64 chars) returned with your balance, so an agent can tell its own vouchers apart"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/x402/credits/balance": {
      "get": {
        "operationId": "credits_buy_free_get_x402_credits_balance",
        "summary": "Prepaid call credits — free disclosure",
        "description": "FREE. Send X-Animica-Credits (or Authorization: Bearer) with your anmc_ token to read that voucher's balance, expiry and recent spend history. Free by design — an agent must be able to check what it can afford before it commits to a call.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-credits_buy"
        }
      }
    },
    "/x402/web/fetch": {
      "post": {
        "operationId": "fetch_extract_post_x402_web_fetch",
        "summary": "Fetch & extract web page text",
        "description": "Fetch a public web page and return clean readable text with its title and metadata - the form a model can actually use, with navigation, scripts and styling removed. Follows up to 3 redirects, caps the download at 2000000 bytes and gives up after 15000ms. Reaches the PUBLIC internet only: the hostname is resolved and every redirect hop re-checked against private, loopback, link-local and CGNAT ranges, so this cannot read internal services or cloud metadata. Returns raw HTML too on request.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-fetch_extract"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "fetch_extract",
          "name": "Fetch & extract web page text",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-fetch_extract"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "description": "absolute http(s) URL of a public page"
                  },
                  "include_html": {
                    "type": "boolean",
                    "description": "also return raw HTML (default false)"
                  },
                  "max_chars": {
                    "type": "integer",
                    "description": "truncate extracted text to this many characters"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "url"
                ]
              }
            }
          }
        }
      },
      "get": {
        "operationId": "fetch_extract_get_x402_web_fetch",
        "summary": "Fetch & extract web page text",
        "description": "Fetch a public web page and return clean readable text with its title and metadata - the form a model can actually use, with navigation, scripts and styling removed. Follows up to 3 redirects, caps the download at 2000000 bytes and gives up after 15000ms. Reaches the PUBLIC internet only: the hostname is resolved and every redirect hop re-checked against private, loopback, link-local and CGNAT ranges, so this cannot read internal services or cloud metadata. Returns raw HTML too on request.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "same as body.url, for GET callers",
            "schema": {
              "type": "string",
              "description": "same as body.url, for GET callers"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-fetch_extract"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "fetch_extract",
          "name": "Fetch & extract web page text",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-fetch_extract"
        }
      }
    },
    "/x402/crawl": {
      "post": {
        "operationId": "fetch_extract_free_post_x402_crawl",
        "summary": "Fetch & extract web page text — free disclosure",
        "description": "FREE (capped per client per day): fetch a public web page and either extract it as clean text or answer a question about it, returning the passages the answer came from. Reaches the public internet only — hostnames are resolved and every redirect hop re-checked against private, loopback, link-local and CGNAT ranges.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "description": "the public page to fetch; http/https only, and every redirect hop is re-checked against private ranges"
                  },
                  "question": {
                    "type": "string",
                    "description": "ask about the page instead of extracting it — the answer comes back with the passages it came from"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "url"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-fetch_extract"
        }
      }
    },
    "/x402/notarize": {
      "post": {
        "operationId": "notarize_post_x402_notarize",
        "summary": "Notarise a digest on-chain",
        "description": "Anchor a SHA-256 digest (or a small document, which we hash for you) into the Animica data-availability layer and get back a commitment plus a Merkle inclusion proof anyone can check without trusting us. The record is erasure-coded across shards and committed to a Merkle root; the response carries the commitment, the leaf index and sibling path, and the chain head height and hash observed at the moment of anchoring. Verification is FREE and permanent at GET /x402/notarize/verify/{commitment} — a notarisation nobody can check would be worth nothing. Note precisely what this proves: the record is committed in this node's DA tree under the returned commitment, alongside the head it observed. That is not the same as a timestamp signed by the whole consensus set, and the response says so rather than blurring the two.\n\nPayment: $0.002068 USDC per request (2068 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-notarize"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "notarize",
          "name": "Notarise a digest on-chain",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002068"
          },
          "price_usd": "0.002068",
          "currency": "USDC",
          "amount_atomic": "2068",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "readiness re-checked, then settled, then executed (retry + signed receipt on downstream failure)",
          "documentation": "https://animica.dev/x402#product-notarize"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "digest": {
                    "type": "string",
                    "description": "a 32-byte SHA-256 digest as hex (with or without 0x). Supply this OR data."
                  },
                  "data": {
                    "type": "string",
                    "description": "base64 document to hash and anchor (we store the digest and the memo, never your bytes, unless store_data is true)"
                  },
                  "memo": {
                    "type": "string",
                    "description": "optional label stored with the record, <=256 chars"
                  },
                  "store_data": {
                    "type": "boolean",
                    "description": "also store the supplied data itself, retrievable later (default false — by default only the digest is committed)"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/x402/notarize/verify/{commitment}": {
      "get": {
        "operationId": "notarize_free_get_x402_notarize_verify",
        "summary": "Notarise a digest on-chain — free disclosure",
        "description": "FREE, permanent verification of a notarisation: re-reads the committed record and its Merkle inclusion proof from the node. No payment, ever — a proof nobody can check is worthless.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "commitment",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-notarize"
        }
      }
    },
    "/x402/blob": {
      "post": {
        "operationId": "blob_put_post_x402_blob",
        "summary": "Store a blob with a retrieval proof",
        "description": "Store up to 1024 KiB and get back a content commitment you can hand to anyone. The blob is erasure-coded across shards in the Animica data-availability layer and is retrievable for free by commitment at GET /x402/blob/{commitment}, with a Merkle inclusion proof. Useful when an agent needs to hand another agent a durable, addressable artifact rather than a link that rots. Stored blobs are PUBLIC to anyone holding the commitment — do not put secrets here.\n\nPayment: $0.002068 USDC per request (2068 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-blob_put"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "blob_put",
          "name": "Store a blob with a retrieval proof",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002068"
          },
          "price_usd": "0.002068",
          "currency": "USDC",
          "amount_atomic": "2068",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "readiness re-checked, then settled, then executed (retry + signed receipt on downstream failure)",
          "documentation": "https://animica.dev/x402#product-blob_put"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "data": {
                    "type": "string",
                    "description": "base64 payload"
                  },
                  "content_type": {
                    "type": "string",
                    "description": "informational label stored alongside, e.g. application/json"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "data"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/blob/{commitment}": {
      "get": {
        "operationId": "blob_put_free_get_x402_blob",
        "summary": "Store a blob with a retrieval proof — free disclosure",
        "description": "FREE retrieval of a stored blob by commitment. Storage was paid for once; reading it back is not charged again, and anyone holding the commitment may read it.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "commitment",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-blob_put"
        }
      }
    },
    "/x402/embed": {
      "post": {
        "operationId": "embed_batch_post_x402_embed",
        "summary": "Batch text embeddings",
        "description": "Embed up to 256 texts in ONE call with all-MiniLM-L6-v2 (384-dimensional, normalised for cosine similarity), up to 8192 characters each. Sold as a batch on purpose: a single settlement costs real gas, so a per-string price would be almost entirely payment overhead — one call, many vectors, is the only honest shape for this. This is a small fast local sentence-transformer, not a frontier embedding model; the model id rides on every response so a future change is visible rather than silent.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-embed_batch"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "embed_batch",
          "name": "Batch text embeddings",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-embed_batch"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "texts": {
                    "type": "array",
                    "items": {},
                    "description": "1..256 strings"
                  },
                  "normalize": {
                    "type": "boolean",
                    "description": "vectors are already unit-normalised; set false only if you want them raw (default true)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "texts"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/web/ask": {
      "post": {
        "operationId": "ask_url_post_x402_web_ask",
        "summary": "Ask a question about a web page",
        "description": "Give a URL and a question; get an answer grounded in that page, WITH the passages the answer was drawn from. We fetch the page, chunk it, embed the chunks and your question, retrieve the closest 4 passages and answer from those only. Nothing is stored — it is a one-shot pipeline, not an index. The retrieved passages come back with the answer so you can check it rather than trust it, and when nothing on the page is relevant the product says so instead of letting the model improvise. Reaches the public internet only, with the same SSRF protections as the fetch product.\n\nPayment: $0.002757 USDC per request (2757 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-ask_url"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "ask_url",
          "name": "Ask a question about a web page",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002757"
          },
          "price_usd": "0.002757",
          "currency": "USDC",
          "amount_atomic": "2757",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-ask_url"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "description": "absolute http(s) URL of a public page"
                  },
                  "question": {
                    "type": "string",
                    "description": "what you want to know about that page"
                  },
                  "top_k": {
                    "type": "integer",
                    "description": "passages to retrieve (default 4)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "url",
                  "question"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/oracle/price": {
      "get": {
        "operationId": "price_oracle_get_x402_oracle_price",
        "summary": "Signed ANM price attestation",
        "description": "The ANM/USD reference price this operator actually uses, attested at a specific chain head. Quoted from the NonKYC BID (the conservative side), with the observation timestamp and feed age included so you can judge freshness yourself. NOTE: no signing key is configured on this gateway, so attestations are returned UNSIGNED (signed:false). The price is still the live one we use; it simply carries no cryptographic attestation. A stale or indicative feed makes this product unavailable rather than quoting a dead rate.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-price_oracle"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "price_oracle",
          "name": "Signed ANM price attestation",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-price_oracle"
        }
      },
      "post": {
        "operationId": "price_oracle_post_x402_oracle_price",
        "summary": "Signed ANM price attestation",
        "description": "The ANM/USD reference price this operator actually uses, attested at a specific chain head. Quoted from the NonKYC BID (the conservative side), with the observation timestamp and feed age included so you can judge freshness yourself. NOTE: no signing key is configured on this gateway, so attestations are returned UNSIGNED (signed:false). The price is still the live one we use; it simply carries no cryptographic attestation. A stale or indicative feed makes this product unavailable rather than quoting a dead rate.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-price_oracle"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "price_oracle",
          "name": "Signed ANM price attestation",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-price_oracle"
        }
      }
    },
    "/x402/chain/holders": {
      "post": {
        "operationId": "holder_snapshot_post_x402_chain_holders",
        "summary": "Holder snapshot / rich list",
        "description": "A ranked snapshot of ANM holders at a pinned chain height — up to 1000 accounts with exact nANM balances as decimal strings, plus the total address count and the head it was taken at. The shape airdrops, governance weighting and distribution analysis actually need, in one call instead of thousands of balance lookups.\n\nPayment: $0.002100 USDC per request (2100 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-holder_snapshot"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "holder_snapshot",
          "name": "Holder snapshot / rich list",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002100"
          },
          "price_usd": "0.002100",
          "currency": "USDC",
          "amount_atomic": "2100",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "readiness re-checked, then settled, then executed (retry + signed receipt on downstream failure)",
          "documentation": "https://animica.dev/x402#product-holder_snapshot"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "limit": {
                    "type": "integer",
                    "description": "how many holders to return, 1..1000 (default 100)"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      },
      "get": {
        "operationId": "holder_snapshot_get_x402_chain_holders",
        "summary": "Holder snapshot / rich list",
        "description": "A ranked snapshot of ANM holders at a pinned chain height — up to 1000 accounts with exact nANM balances as decimal strings, plus the total address count and the head it was taken at. The shape airdrops, governance weighting and distribution analysis actually need, in one call instead of thousands of balance lookups.\n\nPayment: $0.002100 USDC per request (2100 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "same as body.limit",
            "schema": {
              "type": "integer",
              "description": "same as body.limit"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-holder_snapshot"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "holder_snapshot",
          "name": "Holder snapshot / rich list",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002100"
          },
          "price_usd": "0.002100",
          "currency": "USDC",
          "amount_atomic": "2100",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "readiness re-checked, then settled, then executed (retry + signed receipt on downstream failure)",
          "documentation": "https://animica.dev/x402#product-holder_snapshot"
        }
      }
    },
    "/x402/chain/mempool": {
      "get": {
        "operationId": "mempool_feed_get_x402_chain_mempool",
        "summary": "Mempool and network telemetry",
        "description": "A point-in-time read of the Animica mempool and network: pending transaction count and ids, total pending bytes, the age of the oldest entry, chain head, peer count and network hashrate. What a bot watching for congestion, fee conditions or inclusion timing needs, without running a node.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-mempool_feed"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "mempool_feed",
          "name": "Mempool and network telemetry",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-mempool_feed"
        }
      },
      "post": {
        "operationId": "mempool_feed_post_x402_chain_mempool",
        "summary": "Mempool and network telemetry",
        "description": "A point-in-time read of the Animica mempool and network: pending transaction count and ids, total pending bytes, the age of the oldest entry, chain head, peer count and network hashrate. What a bot watching for congestion, fee conditions or inclusion timing needs, without running a node.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-mempool_feed"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "mempool_feed",
          "name": "Mempool and network telemetry",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-mempool_feed"
        }
      }
    },
    "/x402/pq/verify": {
      "post": {
        "operationId": "pq_verify_post_x402_pq_verify",
        "summary": "Post-quantum signature verification",
        "description": "Verify a post-quantum signature (ML-DSA-65 / Dilithium3 / SPHINCS+ as enabled by chain policy) against a message and public key, using the same verifier the Animica chain itself uses to admit transactions. Useful when an agent must check a PQ-signed attestation without shipping a post-quantum library of its own. A signature that does not verify is a SUCCESSFUL call answering ok:false - you paid for the answer, and \"invalid\" is an answer. Only an inability to perform the check is treated as a failure.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-pq_verify"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "pq_verify",
          "name": "Post-quantum signature verification",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-pq_verify"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "alg_id": {
                    "type": "integer",
                    "description": "scheme id - 4099 (0x1003) is ML-DSA-65, the only scheme that can spend on Animica"
                  },
                  "message": {
                    "type": "string",
                    "description": "hex-encoded message bytes"
                  },
                  "signature": {
                    "type": "string",
                    "description": "hex-encoded signature"
                  },
                  "public_key": {
                    "type": "string",
                    "description": "hex-encoded public key"
                  },
                  "sign_hash": {
                    "type": "string",
                    "description": "hex domain/sign-hash bytes, when the scheme binds one"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "alg_id",
                  "message",
                  "signature",
                  "public_key"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/geo/audit": {
      "post": {
        "operationId": "geo_audit_post_x402_geo_audit",
        "summary": "GEO / agent-legibility audit",
        "description": "Audit whether a website can actually be read, quoted and cited by AI agents, and get a prioritised fix list. Probes the homepage as each real AI crawler (GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-User, PerplexityBot, CCBot, meta-externalagent, Amazonbot) to catch the 429s, 403s and soft-404s that make a live site invisible; parses robots.txt per agent including the robots-only training tokens Google-Extended and Applebot-Extended; and checks llms.txt, structured data, machine-readable endpoints (OpenAPI, MCP, x402, well-known), sitemap, canonical and title/meta, plus how much of the page survives with JavaScript off. Fully deterministic — no model is called, so the same site scores the same twice. It does NOT ask ChatGPT or Perplexity whether they have heard of your brand; it measures the inputs that decide whether they can.\n\nPayment: $0.002412 USDC per request (2412 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-geo_audit"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "geo_audit",
          "name": "GEO / agent-legibility audit",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002412"
          },
          "price_usd": "0.002412",
          "currency": "USDC",
          "amount_atomic": "2412",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-geo_audit"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "description": "absolute http(s) URL of the site to audit; the origin is derived from it"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "url"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/geo/audit/trial": {
      "post": {
        "operationId": "geo_audit_free_post_x402_geo_audit_trial",
        "summary": "GEO / agent-legibility audit — free trial (POST)",
        "description": "FREE TRIAL of geo_audit: up to 2 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/geo/audit.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "description": "absolute http(s) URL of the site to audit; the origin is derived from it"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "url"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-geo_audit"
        }
      }
    },
    "/x402/search": {
      "post": {
        "operationId": "web_search_post_x402_search",
        "summary": "Web search",
        "description": "Search the live web and get back ranked results with titles, URLs and snippets — no account, no API key, one payment per query. Built for agents that need to look something up mid-task: results are deduplicated by URL across every engine that answered, and the engines that produced them are named in the response so you can judge the coverage you actually received rather than assuming it was complete. If no engine answers, the request fails and you are NOT charged — an empty result set is never sold as an answer.\n\nPayment: $0.003000 USDC per request (3000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                },
                "examples": {
                  "captured": {
                    "summary": "real response captured from this endpoint (POST /x402/search)",
                    "description": "captured live on this gateway against the Animica mainnet node on 2026-08-15; the payment block is rendered separately from the live registry because the capture settled through a mocked facilitator",
                    "value": {
                      "query": "erc20 token standard",
                      "results": [
                        {
                          "rank": 1,
                          "title": "ERC-20 Token Standard | ethereum.org",
                          "url": "https://ethereum.org/developers/docs/standards/tokens/erc-20",
                          "snippet": "The ERC-20 introduces a standard for Fungible Tokens, in other words, they have a property that makes each Token be exactly the same (in type and value) as ...",
                          "published": null,
                          "engines": [
                            "google cse",
                            "duckduckgo"
                          ]
                        },
                        {
                          "rank": 2,
                          "title": "ERC-20: Token Standard - Ethereum Improvement Proposals",
                          "url": "https://eips.ethereum.org/EIPS/eip-20",
                          "snippet": "There are already plenty of ERC20-compliant tokens deployed on the Ethereum network. Different implementations have been written by various teams that have different trade-offs: from gas saving to improved security.",
                          "published": null,
                          "engines": [
                            "google cse",
                            "duckduckgo"
                          ]
                        },
                        {
                          "rank": 3,
                          "title": "ERC20 | OpenZeppelin Docs",
                          "url": "https://docs.openzeppelin.com/contracts/4.x/erc20",
                          "snippet": "An ERC20 token contract keeps track of fungible tokens: any one token is exactly equal to any other token; no tokens have special rights or behavior ...",
                          "published": null,
                          "engines": [
                            "google cse"
                          ]
                        }
                      ],
                      "count": 3,
                      "provider": "searxng",
                      "engines": [
                        "google cse",
                        "duckduckgo"
                      ],
                      "unavailable_engines": [
                        "brave",
                        "startpage"
                      ],
                      "degraded": true,
                      "results_before_dedupe": 28,
                      "took_ms": 1135,
                      "searched_at": "2026-08-21T22:50:05.357Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-web_search"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "web_search",
          "name": "Web search",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.003000"
          },
          "price_usd": "0.003000",
          "currency": "USDC",
          "amount_atomic": "3000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-web_search"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "what to search for (1..400 characters)"
                  },
                  "limit": {
                    "type": "integer",
                    "description": "results to return, 1..20 (default 10)"
                  },
                  "lang": {
                    "type": "string",
                    "description": "two-letter language hint, e.g. en"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "query"
                ]
              }
            }
          }
        }
      },
      "get": {
        "operationId": "web_search_get_x402_search",
        "summary": "Web search",
        "description": "Search the live web and get back ranked results with titles, URLs and snippets — no account, no API key, one payment per query. Built for agents that need to look something up mid-task: results are deduplicated by URL across every engine that answered, and the engines that produced them are named in the response so you can judge the coverage you actually received rather than assuming it was complete. If no engine answers, the request fails and you are NOT charged — an empty result set is never sold as an answer.\n\nPayment: $0.003000 USDC per request (3000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                },
                "examples": {
                  "captured": {
                    "summary": "real response captured from this endpoint (POST /x402/search)",
                    "description": "captured live on this gateway against the Animica mainnet node on 2026-08-15; the payment block is rendered separately from the live registry because the capture settled through a mocked facilitator",
                    "value": {
                      "query": "erc20 token standard",
                      "results": [
                        {
                          "rank": 1,
                          "title": "ERC-20 Token Standard | ethereum.org",
                          "url": "https://ethereum.org/developers/docs/standards/tokens/erc-20",
                          "snippet": "The ERC-20 introduces a standard for Fungible Tokens, in other words, they have a property that makes each Token be exactly the same (in type and value) as ...",
                          "published": null,
                          "engines": [
                            "google cse",
                            "duckduckgo"
                          ]
                        },
                        {
                          "rank": 2,
                          "title": "ERC-20: Token Standard - Ethereum Improvement Proposals",
                          "url": "https://eips.ethereum.org/EIPS/eip-20",
                          "snippet": "There are already plenty of ERC20-compliant tokens deployed on the Ethereum network. Different implementations have been written by various teams that have different trade-offs: from gas saving to improved security.",
                          "published": null,
                          "engines": [
                            "google cse",
                            "duckduckgo"
                          ]
                        },
                        {
                          "rank": 3,
                          "title": "ERC20 | OpenZeppelin Docs",
                          "url": "https://docs.openzeppelin.com/contracts/4.x/erc20",
                          "snippet": "An ERC20 token contract keeps track of fungible tokens: any one token is exactly equal to any other token; no tokens have special rights or behavior ...",
                          "published": null,
                          "engines": [
                            "google cse"
                          ]
                        }
                      ],
                      "count": 3,
                      "provider": "searxng",
                      "engines": [
                        "google cse",
                        "duckduckgo"
                      ],
                      "unavailable_engines": [
                        "brave",
                        "startpage"
                      ],
                      "degraded": true,
                      "results_before_dedupe": 28,
                      "took_ms": 1135,
                      "searched_at": "2026-08-21T22:50:05.357Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-web_search"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "web_search",
          "name": "Web search",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.003000"
          },
          "price_usd": "0.003000",
          "currency": "USDC",
          "amount_atomic": "3000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-web_search"
        }
      }
    },
    "/x402/search/trial": {
      "post": {
        "operationId": "web_search_free_post_x402_search_trial",
        "summary": "Web search — free trial (POST)",
        "description": "FREE TRIAL of web_search: up to 5 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/search.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "what to search for (1..400 characters)"
                  },
                  "limit": {
                    "type": "integer",
                    "description": "results to return, 1..20 (default 10)"
                  },
                  "lang": {
                    "type": "string",
                    "description": "two-letter language hint, e.g. en"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "query"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-web_search"
        }
      },
      "get": {
        "operationId": "web_search_free_get_x402_search_trial",
        "summary": "Web search — free trial (GET)",
        "description": "FREE TRIAL of web_search: up to 5 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/search.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "what to search for (1..400 characters)"
                  },
                  "limit": {
                    "type": "integer",
                    "description": "results to return, 1..20 (default 10)"
                  },
                  "lang": {
                    "type": "string",
                    "description": "two-letter language hint, e.g. en"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "query"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-web_search"
        }
      }
    },
    "/x402/research": {
      "post": {
        "operationId": "web_research_post_x402_research",
        "summary": "Research: search the web and read the pages",
        "description": "One call that searches the web and returns the readable text of the top pages — the whole \"look this up\" loop an agent otherwise writes by hand as a search plus N fetches plus N HTML cleanups. Pages are fetched concurrently under a deadline, stripped of navigation and scripts, and returned with their titles and source URLs. Every page you asked for is accounted for: the ones that could not be read come back in pages_failed WITH the reason (403, timeout, paywall, no extractable text), because a thin web and a broken fetcher look identical otherwise. No model is called and nothing is summarised — you get the evidence, not an answer to trust. If the search finds nothing, or every page fails, you are NOT charged.\n\nPayment: $0.006000 USDC per request (6000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                },
                "examples": {
                  "captured": {
                    "summary": "real response captured from this endpoint (POST /x402/research)",
                    "description": "captured live on this gateway against the Animica mainnet node on 2026-08-15; the payment block is rendered separately from the live registry because the capture settled through a mocked facilitator",
                    "value": {
                      "query": "x402 payment protocol",
                      "pages": [
                        {
                          "rank": 1,
                          "url": "https://x402.org/",
                          "requested_url": "https://x402.org",
                          "title": "x402",
                          "snippet": "x402 is the internet's payment standard. An open standard for internet-native payments that empowers agentic payments at scale. Build a more free and fair internet.",
                          "engines": [
                            "google cse",
                            "duckduckgo"
                          ],
                          "chars": 4121,
                          "truncated": true,
                          "text": "x402 \n\n Close Search \n\n x402 \n\n x402 is an open, neutral standard for internet-native payments. It absolves the Internet’s original sin by natively making payments possible between clients and servers, creating win-win economies that empower agentic payments at scale. x402 exists to build a more free and fair internet.\n\n Read x402 Foundation Announcement Last 30 Days\n\n 75.41M\n\n Transactions\n\n $24.24M\n\n Volume\n\n 94.06K\n\n Buyers\n\n 22K\n\n Sellers\n\n → Accept payments with a single line of code\n\n app.use(paymentMiddleware({\r\n \"GET /weather\": {\r\n accepts: [...], // As many networks / schemes as you w"
                        },
                        {
                          "rank": 2,
                          "url": "https://docs.stripe.com/payments/machine/x402",
                          "title": "x402 payments | Stripe Documentation",
                          "snippet": "x402 is a protocol for internet payments. When a client requests a paid resource, your server returns an HTTP 402 response with payment details, including a Stripe deposit address. The client pays, then retries the request with authorization. After the facilitator settles the payment on-chain, Stripe records it as a PaymentIntent.",
                          "engines": [
                            "google cse",
                            "duckduckgo"
                          ],
                          "chars": 9153,
                          "truncated": true,
                          "text": "x402 payments | Stripe Documentation \n\n Skip to content \n\n x402 \n \n Create account or Sign in \n\n Search \n\n / Ask AI \n Create account Sign in \n\n Get started \n\n Payments \n\n Revenue \n\n Platforms and marketplaces \n\n Money management \n\n Developer resources \n\n APIs & SDKs Help \n\n Overview Accept a payment Upgrade your integration Online payments\n Overview Find your use case Use Payment Links \n\n Build a payments page \n\n Build a custom integration with Elements \n\n Build an in-app integration \n\n Use Managed Payments \n\n Recurring payments In-person payments\n Terminal overview \n\n Availability Readers \n\n "
                        }
                      ],
                      "pages_failed": [],
                      "pages_read": 2,
                      "pages_requested": 2,
                      "search": {
                        "provider": "searxng",
                        "engines": [
                          "google cse",
                          "duckduckgo"
                        ],
                        "unavailable_engines": [
                          "brave",
                          "startpage"
                        ],
                        "degraded": true
                      },
                      "took_ms": 3213,
                      "researched_at": "2026-08-21T23:32:22.474Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-web_research"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "web_research",
          "name": "Research: search the web and read the pages",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.006000"
          },
          "price_usd": "0.006000",
          "currency": "USDC",
          "amount_atomic": "6000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-web_research"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "what to research (1..400 characters)"
                  },
                  "pages": {
                    "type": "integer",
                    "description": "how many top results to fetch and read, 1..8 (default 4)"
                  },
                  "max_chars": {
                    "type": "integer",
                    "description": "truncate each page to this many characters (default 6000)"
                  },
                  "lang": {
                    "type": "string",
                    "description": "two-letter language hint, e.g. en"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "query"
                ]
              }
            }
          }
        }
      },
      "get": {
        "operationId": "web_research_get_x402_research",
        "summary": "Research: search the web and read the pages",
        "description": "One call that searches the web and returns the readable text of the top pages — the whole \"look this up\" loop an agent otherwise writes by hand as a search plus N fetches plus N HTML cleanups. Pages are fetched concurrently under a deadline, stripped of navigation and scripts, and returned with their titles and source URLs. Every page you asked for is accounted for: the ones that could not be read come back in pages_failed WITH the reason (403, timeout, paywall, no extractable text), because a thin web and a broken fetcher look identical otherwise. No model is called and nothing is summarised — you get the evidence, not an answer to trust. If the search finds nothing, or every page fails, you are NOT charged.\n\nPayment: $0.006000 USDC per request (6000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                },
                "examples": {
                  "captured": {
                    "summary": "real response captured from this endpoint (POST /x402/research)",
                    "description": "captured live on this gateway against the Animica mainnet node on 2026-08-15; the payment block is rendered separately from the live registry because the capture settled through a mocked facilitator",
                    "value": {
                      "query": "x402 payment protocol",
                      "pages": [
                        {
                          "rank": 1,
                          "url": "https://x402.org/",
                          "requested_url": "https://x402.org",
                          "title": "x402",
                          "snippet": "x402 is the internet's payment standard. An open standard for internet-native payments that empowers agentic payments at scale. Build a more free and fair internet.",
                          "engines": [
                            "google cse",
                            "duckduckgo"
                          ],
                          "chars": 4121,
                          "truncated": true,
                          "text": "x402 \n\n Close Search \n\n x402 \n\n x402 is an open, neutral standard for internet-native payments. It absolves the Internet’s original sin by natively making payments possible between clients and servers, creating win-win economies that empower agentic payments at scale. x402 exists to build a more free and fair internet.\n\n Read x402 Foundation Announcement Last 30 Days\n\n 75.41M\n\n Transactions\n\n $24.24M\n\n Volume\n\n 94.06K\n\n Buyers\n\n 22K\n\n Sellers\n\n → Accept payments with a single line of code\n\n app.use(paymentMiddleware({\r\n \"GET /weather\": {\r\n accepts: [...], // As many networks / schemes as you w"
                        },
                        {
                          "rank": 2,
                          "url": "https://docs.stripe.com/payments/machine/x402",
                          "title": "x402 payments | Stripe Documentation",
                          "snippet": "x402 is a protocol for internet payments. When a client requests a paid resource, your server returns an HTTP 402 response with payment details, including a Stripe deposit address. The client pays, then retries the request with authorization. After the facilitator settles the payment on-chain, Stripe records it as a PaymentIntent.",
                          "engines": [
                            "google cse",
                            "duckduckgo"
                          ],
                          "chars": 9153,
                          "truncated": true,
                          "text": "x402 payments | Stripe Documentation \n\n Skip to content \n\n x402 \n \n Create account or Sign in \n\n Search \n\n / Ask AI \n Create account Sign in \n\n Get started \n\n Payments \n\n Revenue \n\n Platforms and marketplaces \n\n Money management \n\n Developer resources \n\n APIs & SDKs Help \n\n Overview Accept a payment Upgrade your integration Online payments\n Overview Find your use case Use Payment Links \n\n Build a payments page \n\n Build a custom integration with Elements \n\n Build an in-app integration \n\n Use Managed Payments \n\n Recurring payments In-person payments\n Terminal overview \n\n Availability Readers \n\n "
                        }
                      ],
                      "pages_failed": [],
                      "pages_read": 2,
                      "pages_requested": 2,
                      "search": {
                        "provider": "searxng",
                        "engines": [
                          "google cse",
                          "duckduckgo"
                        ],
                        "unavailable_engines": [
                          "brave",
                          "startpage"
                        ],
                        "degraded": true
                      },
                      "took_ms": 3213,
                      "researched_at": "2026-08-21T23:32:22.474Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-web_research"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "web_research",
          "name": "Research: search the web and read the pages",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.006000"
          },
          "price_usd": "0.006000",
          "currency": "USDC",
          "amount_atomic": "6000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-web_research"
        }
      }
    },
    "/x402/research/trial": {
      "post": {
        "operationId": "web_research_free_post_x402_research_trial",
        "summary": "Research: search the web and read the pages — free trial (POST)",
        "description": "FREE TRIAL of web_research: up to 1 call per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/research.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "what to research (1..400 characters)"
                  },
                  "pages": {
                    "type": "integer",
                    "description": "how many top results to fetch and read, 1..8 (default 4)"
                  },
                  "max_chars": {
                    "type": "integer",
                    "description": "truncate each page to this many characters (default 6000)"
                  },
                  "lang": {
                    "type": "string",
                    "description": "two-letter language hint, e.g. en"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "query"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-web_research"
        }
      },
      "get": {
        "operationId": "web_research_free_get_x402_research_trial",
        "summary": "Research: search the web and read the pages — free trial (GET)",
        "description": "FREE TRIAL of web_research: up to 1 call per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/research.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "what to research (1..400 characters)"
                  },
                  "pages": {
                    "type": "integer",
                    "description": "how many top results to fetch and read, 1..8 (default 4)"
                  },
                  "max_chars": {
                    "type": "integer",
                    "description": "truncate each page to this many characters (default 6000)"
                  },
                  "lang": {
                    "type": "string",
                    "description": "two-letter language hint, e.g. en"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "query"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-web_research"
        }
      }
    },
    "/x402/contents": {
      "post": {
        "operationId": "web_contents_post_x402_contents",
        "summary": "Page contents in bulk",
        "description": "Give it up to 10 URLs and get back the readable text of each — titles, clean body text, navigation and scripts removed — in a single call and a single payment. The half of every retrieval pipeline an agent already has links for: search results, a sitemap, an RSS feed, a user's reading list. Pages are fetched concurrently under a deadline. Every URL you send is accounted for: the ones that could not be read come back in failed[] WITH the reason (403, timeout, paywall, no extractable text, private address), because a bad input and a broken fetcher need opposite responses from you. If not one URL could be read, you are NOT charged.\n\nPayment: $0.002068 USDC per request (2068 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                },
                "examples": {
                  "captured": {
                    "summary": "real response captured from this endpoint (POST /x402/contents)",
                    "description": "captured live on this gateway against the Animica mainnet node on 2026-08-15; the payment block is rendered separately from the live registry because the capture settled through a mocked facilitator",
                    "value": {
                      "pages": [
                        {
                          "url": "https://x402.org/",
                          "title": "x402",
                          "content_type": "text/html; charset=utf-8",
                          "chars": 4121,
                          "truncated": true,
                          "text": "x402 \n\n Close Search \n\n x402 \n\n x402 is an open, neutral standard for internet-native payments. It absolves the Internet’s original sin by natively making payments possible between clients and servers, creating win-win economies that empower agentic payments at scale. x402 exists to build a more free and fair internet.\n\n Read x402 Foundation Announcement Last 30 Days\n\n 75.41M\n\n Transactions\n\n $24.24M\n\n Volume\n\n 94.06K\n\n Buyers\n\n 22K\n\n Sellers\n\n → Accept payments with a single line of code\n\n app."
                        },
                        {
                          "url": "https://docs.x402.org/introduction",
                          "title": "Welcome to x402 - x402",
                          "content_type": "text/html; charset=utf-8",
                          "chars": 3090,
                          "truncated": true,
                          "text": "Welcome to x402 - x402 \n Documentation Index\n Fetch the complete documentation index at: /llms.txt \n Use this file to discover all available pages before exploring further.\n\n Skip to main content \n x402 is the open payment standard that enables services to charge for access to their APIs and content directly over HTTP. It is built around the HTTP 402 Payment Required status code and allows clients to programmatically pay for resources without accounts, sessions, or credential management. \n With "
                        }
                      ],
                      "failed": [],
                      "pages_read": 2,
                      "urls_requested": 2,
                      "took_ms": 507,
                      "fetched_at": "2026-08-21T23:44:13.495Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-web_contents"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "web_contents",
          "name": "Page contents in bulk",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002068"
          },
          "price_usd": "0.002068",
          "currency": "USDC",
          "amount_atomic": "2068",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-web_contents"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "urls": {
                    "type": "array",
                    "items": {},
                    "description": "1..10 absolute http(s) URLs"
                  },
                  "max_chars": {
                    "type": "integer",
                    "description": "truncate each page to this many characters (default 6000)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "urls"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/contents/trial": {
      "post": {
        "operationId": "web_contents_free_post_x402_contents_trial",
        "summary": "Page contents in bulk — free trial (POST)",
        "description": "FREE TRIAL of web_contents: up to 5 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/contents.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "urls": {
                    "type": "array",
                    "items": {},
                    "description": "1..10 absolute http(s) URLs"
                  },
                  "max_chars": {
                    "type": "integer",
                    "description": "truncate each page to this many characters (default 6000)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "urls"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-web_contents"
        }
      }
    },
    "/x402/index": {
      "post": {
        "operationId": "agent_index_post_x402_index",
        "summary": "Search the agent-payable web",
        "description": "Full-text search over what machine-payable services actually publish — their descriptions, input schemas, parameter names, prices and settlement networks — across ~18,000 x402 endpoints. Built from their own payment challenges, which a general crawler discards as a dead page: ask for a parameter name, a schema field or a network and you match services whose one-line blurb never mentions it. Filter by price ceiling, by whether the service publishes a call spec, and by payment protocol. Every response states how many documents were searched and how stale the oldest is, because an index that will not tell you its size is asking to be trusted about the one thing you cannot check. Ranked by BM25 — no model, so the same query ranks the same way twice. If the index is empty or nothing matches, you are NOT charged.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                },
                "examples": {
                  "captured": {
                    "summary": "real response captured from this endpoint (POST /x402/index)",
                    "description": "captured live on this gateway against the Animica mainnet node on 2026-08-15; the payment block is rendered separately from the live registry because the capture settled through a mocked facilitator",
                    "value": {
                      "query": "wallet_address erc20 balance",
                      "results": [
                        {
                          "rank": 1,
                          "url": "https://signals.edge.report/v1/erc20-balance",
                          "host": "signals.edge.report",
                          "title": "signals.edge.report/v1/erc20-balance",
                          "snippet": "Get ERC20 token balance for any wallet and token contract on Base (or Ethereum). Returns balance, decimals, and symbol via balanceOf. Use for live … ",
                          "price_usd": 0.001,
                          "payment_protocol": "x402",
                          "http_method": "GET",
                          "callable": false,
                          "score": 20.116,
                          "indexed_at": "2026-08-22T01:26:14.000Z"
                        },
                        {
                          "rank": 2,
                          "url": "https://a2a.elonsusk.com/x402/data.evm.erc20_balance",
                          "host": "a2a.elonsusk.com",
                          "title": "a2a.elonsusk.com/x402/data.evm.erc20_balance",
                          "snippet": "ERC-20 token balance of an address, auto-scaled by decimals, Base/Ethereum.\na2a.elonsusk.com/x402/data.evm.erc20_balance\neip155:8453\nUSD … ",
                          "price_usd": 0.002,
                          "payment_protocol": "x402",
                          "http_method": "POST",
                          "callable": false,
                          "score": 19.8317,
                          "indexed_at": "2026-08-22T01:26:16.000Z"
                        },
                        {
                          "rank": 3,
                          "url": "https://api.x402node.dev/chain/balance",
                          "host": "api.x402node.dev",
                          "title": "api.x402node.dev/chain/balance",
                          "snippet": "Native coin balance for any address on Ethereum, Base, Arbitrum, Optimism or Polygon, optionally an ERC20 token balance with symbol and decimals. wallet balance … ",
                          "price_usd": 0.004,
                          "payment_protocol": "x402",
                          "http_method": "GET",
                          "callable": false,
                          "score": 19.7807,
                          "indexed_at": "2026-08-22T01:26:15.000Z"
                        }
                      ],
                      "count": 3,
                      "matched": 38,
                      "filters": {
                        "max_price": 0.01
                      },
                      "corpus": {
                        "documents": 17987,
                        "sources": {
                          "x402": 17987
                        },
                        "oldest_document_age_seconds": 454,
                        "last_build": "2026-08-22T01:26:16.570Z"
                      },
                      "ranking": "bm25(title x8, description x4, content x1) — deterministic, no model",
                      "took_ms": 21,
                      "searched_at": "2026-08-22T01:33:47.934Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-agent_index"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "agent_index",
          "name": "Search the agent-payable web",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-agent_index"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "words to match: a capability, a parameter name, a schema field, a network"
                  },
                  "limit": {
                    "type": "integer",
                    "description": "results to return, 1..25 (default 10)"
                  },
                  "max_price": {
                    "type": "number",
                    "description": "only services at or under this price in USD"
                  },
                  "callable_only": {
                    "type": "boolean",
                    "description": "only services that publish a call spec"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "query"
                ]
              }
            }
          }
        }
      },
      "get": {
        "operationId": "agent_index_get_x402_index",
        "summary": "Search the agent-payable web",
        "description": "Full-text search over what machine-payable services actually publish — their descriptions, input schemas, parameter names, prices and settlement networks — across ~18,000 x402 endpoints. Built from their own payment challenges, which a general crawler discards as a dead page: ask for a parameter name, a schema field or a network and you match services whose one-line blurb never mentions it. Filter by price ceiling, by whether the service publishes a call spec, and by payment protocol. Every response states how many documents were searched and how stale the oldest is, because an index that will not tell you its size is asking to be trusted about the one thing you cannot check. Ranked by BM25 — no model, so the same query ranks the same way twice. If the index is empty or nothing matches, you are NOT charged.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "same as body.query, for GET callers",
            "schema": {
              "type": "string",
              "description": "same as body.query, for GET callers"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                },
                "examples": {
                  "captured": {
                    "summary": "real response captured from this endpoint (POST /x402/index)",
                    "description": "captured live on this gateway against the Animica mainnet node on 2026-08-15; the payment block is rendered separately from the live registry because the capture settled through a mocked facilitator",
                    "value": {
                      "query": "wallet_address erc20 balance",
                      "results": [
                        {
                          "rank": 1,
                          "url": "https://signals.edge.report/v1/erc20-balance",
                          "host": "signals.edge.report",
                          "title": "signals.edge.report/v1/erc20-balance",
                          "snippet": "Get ERC20 token balance for any wallet and token contract on Base (or Ethereum). Returns balance, decimals, and symbol via balanceOf. Use for live … ",
                          "price_usd": 0.001,
                          "payment_protocol": "x402",
                          "http_method": "GET",
                          "callable": false,
                          "score": 20.116,
                          "indexed_at": "2026-08-22T01:26:14.000Z"
                        },
                        {
                          "rank": 2,
                          "url": "https://a2a.elonsusk.com/x402/data.evm.erc20_balance",
                          "host": "a2a.elonsusk.com",
                          "title": "a2a.elonsusk.com/x402/data.evm.erc20_balance",
                          "snippet": "ERC-20 token balance of an address, auto-scaled by decimals, Base/Ethereum.\na2a.elonsusk.com/x402/data.evm.erc20_balance\neip155:8453\nUSD … ",
                          "price_usd": 0.002,
                          "payment_protocol": "x402",
                          "http_method": "POST",
                          "callable": false,
                          "score": 19.8317,
                          "indexed_at": "2026-08-22T01:26:16.000Z"
                        },
                        {
                          "rank": 3,
                          "url": "https://api.x402node.dev/chain/balance",
                          "host": "api.x402node.dev",
                          "title": "api.x402node.dev/chain/balance",
                          "snippet": "Native coin balance for any address on Ethereum, Base, Arbitrum, Optimism or Polygon, optionally an ERC20 token balance with symbol and decimals. wallet balance … ",
                          "price_usd": 0.004,
                          "payment_protocol": "x402",
                          "http_method": "GET",
                          "callable": false,
                          "score": 19.7807,
                          "indexed_at": "2026-08-22T01:26:15.000Z"
                        }
                      ],
                      "count": 3,
                      "matched": 38,
                      "filters": {
                        "max_price": 0.01
                      },
                      "corpus": {
                        "documents": 17987,
                        "sources": {
                          "x402": 17987
                        },
                        "oldest_document_age_seconds": 454,
                        "last_build": "2026-08-22T01:26:16.570Z"
                      },
                      "ranking": "bm25(title x8, description x4, content x1) — deterministic, no model",
                      "took_ms": 21,
                      "searched_at": "2026-08-22T01:33:47.934Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-agent_index"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "agent_index",
          "name": "Search the agent-payable web",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-agent_index"
        }
      }
    },
    "/x402/index/sample": {
      "get": {
        "operationId": "agent_index_free_get_x402_index_sample",
        "summary": "x402 index sample — free, unmetered, probe-safe",
        "description": "A fixed sample query against the Animica x402 index: always 200, always JSON, never rate-limited and never quota-capped, so it can be declared as a directory sample_query and probed forever. Shows the shape, ranking and freshness of the index without replacing the paid search at POST /x402/index.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-agent_index"
        }
      }
    },
    "/x402/index/trial": {
      "post": {
        "operationId": "agent_index_free_post_x402_index_trial",
        "summary": "Search the agent-payable web — free trial (POST)",
        "description": "FREE TRIAL of agent_index: up to 5 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/index.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "words to match: a capability, a parameter name, a schema field, a network"
                  },
                  "limit": {
                    "type": "integer",
                    "description": "results to return, 1..25 (default 10)"
                  },
                  "max_price": {
                    "type": "number",
                    "description": "only services at or under this price in USD"
                  },
                  "callable_only": {
                    "type": "boolean",
                    "description": "only services that publish a call spec"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "query"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-agent_index"
        }
      },
      "get": {
        "operationId": "agent_index_free_get_x402_index_trial",
        "summary": "Search the agent-payable web — free trial (GET)",
        "description": "FREE TRIAL of agent_index: up to 5 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/index.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "words to match: a capability, a parameter name, a schema field, a network"
                  },
                  "limit": {
                    "type": "integer",
                    "description": "results to return, 1..25 (default 10)"
                  },
                  "max_price": {
                    "type": "number",
                    "description": "only services at or under this price in USD"
                  },
                  "callable_only": {
                    "type": "boolean",
                    "description": "only services that publish a call spec"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "query"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-agent_index"
        }
      }
    },
    "/x402/geo/fix": {
      "post": {
        "operationId": "geo_fix_post_x402_geo_fix",
        "summary": "GEO fix — deployable llms.txt, robots.txt and JSON-LD",
        "description": "Emit the actual files that fix a site's AI legibility, ready to deploy: a real /llms.txt, a /robots.txt that stops excluding AI crawlers (with a unified diff against the current one), and a JSON-LD block for the page <head>. Nothing is invented: every link in the llms.txt is discovered on the site and then FETCHED to confirm it answers 200, with failures dropped and counted, and every JSON-LD field is copied from something the page actually declares — anything that cannot be grounded is omitted rather than guessed. A small model writes only the prose, from the titles and descriptions we extracted; any URL it returns that is not in the verified set is discarded. Pairs with /x402/geo/audit: audit tells you what is wrong, this hands you the files. Re-run the audit afterwards to confirm the score moved.\n\nPayment: $0.002757 USDC per request (2757 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-geo_fix"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "geo_fix",
          "name": "GEO fix — deployable llms.txt, robots.txt and JSON-LD",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002757"
          },
          "price_usd": "0.002757",
          "currency": "USDC",
          "amount_atomic": "2757",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-geo_fix"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "description": "absolute http(s) URL of the site to fix; the origin is derived from it"
                  },
                  "max_links": {
                    "type": "integer",
                    "description": "how many pages to verify and list in llms.txt (1..40, default 20)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "url"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/geo/fix/trial": {
      "post": {
        "operationId": "geo_fix_free_post_x402_geo_fix_trial",
        "summary": "GEO fix — deployable llms.txt, robots.txt and JSON-LD — free trial (POST)",
        "description": "FREE TRIAL of geo_fix: up to 1 call per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/geo/fix.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "description": "absolute http(s) URL of the site to fix; the origin is derived from it"
                  },
                  "max_links": {
                    "type": "integer",
                    "description": "how many pages to verify and list in llms.txt (1..40, default 20)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "url"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-geo_fix"
        }
      }
    },
    "/x402/mesh/find": {
      "post": {
        "operationId": "mesh_find_post_x402_mesh_find",
        "summary": "x402 Mesh — find who to buy from",
        "description": "Search the whole x402 economy and get a ranked shortlist of services that can do a job, within a budget. Merges Coinbase Bazaar and 402index into one index keyed by canonical resource URL, then answers the three questions a directory does not: CAN this be invoked (only about 5% publish a call spec, and that is a first-class field here, not something you infer from missing keys), is the price REAL (one live listing advertises ten billion dollars a call — implausible prices are excluded as bad data and reported, never silently rewritten), and is the demand real (total calls are trivially inflated by a merchant calling itself, so volume is credited only in proportion to distinct paying counterparties). Every result explains its own score, and the weights are returned so you can disagree with them. Lexical matching, no model: the same query against the same index ranks the same way.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-mesh_find"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "mesh_find",
          "name": "x402 Mesh — find who to buy from",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-mesh_find"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "goal": {
                    "type": "string",
                    "description": "what you are trying to do, in plain words — matched against service descriptions"
                  },
                  "max_price_usd": {
                    "type": "number",
                    "description": "exclude anything priced above this per call"
                  },
                  "require_callable": {
                    "type": "boolean",
                    "description": "only return services that publish a call spec you can invoke without guessing (default false)"
                  },
                  "limit": {
                    "type": "integer",
                    "description": "how many results, 1..50 (default 10)"
                  },
                  "weights": {
                    "type": "object",
                    "description": "override the ranking weights {relevance, demand, price, callable}; they are normalised as given"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "goal"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/mesh/find/trial": {
      "post": {
        "operationId": "mesh_find_free_post_x402_mesh_find_trial",
        "summary": "x402 Mesh — find who to buy from — free trial (POST)",
        "description": "FREE TRIAL of mesh_find: up to 3 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/mesh/find.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "goal": {
                    "type": "string",
                    "description": "what you are trying to do, in plain words — matched against service descriptions"
                  },
                  "max_price_usd": {
                    "type": "number",
                    "description": "exclude anything priced above this per call"
                  },
                  "require_callable": {
                    "type": "boolean",
                    "description": "only return services that publish a call spec you can invoke without guessing (default false)"
                  },
                  "limit": {
                    "type": "integer",
                    "description": "how many results, 1..50 (default 10)"
                  },
                  "weights": {
                    "type": "object",
                    "description": "override the ranking weights {relevance, demand, price, callable}; they are normalised as given"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "goal"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-mesh_find"
        }
      }
    },
    "/x402/mesh/probe": {
      "post": {
        "operationId": "mesh_probe_post_x402_mesh_probe",
        "summary": "x402 Mesh — verify one endpoint before you pay it",
        "description": "Call any x402 endpoint WITHOUT paying and get back what its own 402 challenge says: the real price, asset, network, payTo address, scheme, timeout, and the request schema when the merchant publishes one. Directory listings are written once and go stale; this is the merchant's own current statement of the terms you are about to accept. It also distinguishes the cases a directory cannot: a resource that answers 402 properly, one that is listed as paid but answers WITHOUT payment, one that is listed but gone, and one that simply fails. No payment header is ever sent, so this cannot settle anything, and unknown endpoints are probed with GET — never a write verb with a guessed body.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-mesh_probe"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "mesh_probe",
          "name": "x402 Mesh — verify one endpoint before you pay it",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-mesh_probe"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "resource": {
                    "type": "string",
                    "description": "absolute http(s) URL of the x402 endpoint to verify"
                  },
                  "method": {
                    "type": "string",
                    "description": "HTTP verb to probe with. Omit and GET is tried first, then POST with an empty body — a write verb is never guessed at an unknown endpoint"
                  },
                  "fresh": {
                    "type": "boolean",
                    "description": "ignore any cached probe and call it again now (default false)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "resource"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/solve": {
      "post": {
        "operationId": "solve_plan_post_x402_solve",
        "summary": "x402 Solve — compile a goal into a priced plan of real API calls",
        "description": "Describe a goal and a budget; get back a concrete plan of real x402 calls that would accomplish it — exact URLs, HTTP methods, request shapes, per-step prices from the merchants' own 402 challenges where we have verified them, alternates for every step, and a total you can check before committing. Only services that publish a callable request shape are planned; a step with no invokable candidate is returned as an explicit gap rather than a URL and a shrug. IT DOES NOT SPEND: this compiles the plan and stops, so you execute it with your own wallet on your own terms. It also does not claim the pipeline type-checks — roughly 5% of the x402 economy publishes schemas, so most step-to-step handoffs cannot be verified, and every edge says which it is.\n\nPayment: $0.002757 USDC per request (2757 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-solve_plan"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "solve_plan",
          "name": "x402 Solve — compile a goal into a priced plan of real API calls",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002757"
          },
          "price_usd": "0.002757",
          "currency": "USDC",
          "amount_atomic": "2757",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-solve_plan"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "goal": {
                    "type": "string",
                    "description": "what you want accomplished, in plain words"
                  },
                  "max_budget_usd": {
                    "type": "number",
                    "description": "total you are willing to spend executing the plan (default 1.00)"
                  },
                  "max_steps": {
                    "type": "integer",
                    "description": "cap the plan length, 1..6"
                  },
                  "require_verified": {
                    "type": "boolean",
                    "description": "only plan services we have called ourselves and confirmed answer 402 (default false — it is a much smaller pool)"
                  },
                  "exclude_hosts": {
                    "type": "array",
                    "items": {},
                    "description": "hostnames never to plan against"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "goal"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/solve/trial": {
      "post": {
        "operationId": "solve_plan_free_post_x402_solve_trial",
        "summary": "x402 Solve — compile a goal into a priced plan of real API calls — free trial (POST)",
        "description": "FREE TRIAL of solve_plan: up to 2 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/solve.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "goal": {
                    "type": "string",
                    "description": "what you want accomplished, in plain words"
                  },
                  "max_budget_usd": {
                    "type": "number",
                    "description": "total you are willing to spend executing the plan (default 1.00)"
                  },
                  "max_steps": {
                    "type": "integer",
                    "description": "cap the plan length, 1..6"
                  },
                  "require_verified": {
                    "type": "boolean",
                    "description": "only plan services we have called ourselves and confirmed answer 402 (default false — it is a much smaller pool)"
                  },
                  "exclude_hosts": {
                    "type": "array",
                    "items": {},
                    "description": "hostnames never to plan against"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "goal"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-solve_plan"
        }
      }
    },
    "/x402/analytics/market": {
      "post": {
        "operationId": "analytics_market_post_x402_analytics_market",
        "summary": "x402 Analytics — the shape of a market segment",
        "description": "Statistical analysis of any segment of the x402 economy, computed over a merged index of Coinbase Bazaar and 402index overlaid with our own unpaid 402 probes. Returns the full price distribution (min, p10, p25, median, p75, p90, max, mean), demand discounted by payer concentration, what share of the segment can actually be invoked, the network and asset split, host concentration, liveness, and — once history exists — the trend. Every figure is computed in code from named rows; the interpretation is written by Animica's own AICF inference network and every sentence containing a number not in the computed facts is deleted before delivery. Directories publish rows; this publishes the distribution.\n\nPayment: $0.002757 USDC per request (2757 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-analytics_market"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "analytics_market",
          "name": "x402 Analytics — the shape of a market segment",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002757"
          },
          "price_usd": "0.002757",
          "currency": "USDC",
          "amount_atomic": "2757",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-analytics_market"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "segment": {
                    "type": "string",
                    "description": "words describing the segment to analyse, e.g. \"weather forecast data\". Omit to analyse the whole indexed economy"
                  },
                  "network": {
                    "type": "string",
                    "description": "restrict to one settlement network, e.g. \"base\""
                  },
                  "max_price_usd": {
                    "type": "number",
                    "description": "restrict to services at or below this price per call"
                  },
                  "require_callable": {
                    "type": "boolean",
                    "description": "restrict to services that publish a call spec (default false)"
                  },
                  "top": {
                    "type": "integer",
                    "description": "how many example services to return, 0-25 (default 10)"
                  },
                  "narrative": {
                    "type": "boolean",
                    "description": "include the AICF-written interpretation (default true)"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/x402/analytics/market/trial": {
      "post": {
        "operationId": "analytics_market_free_post_x402_analytics_market_trial",
        "summary": "x402 Analytics — the shape of a market segment — free trial (POST)",
        "description": "FREE TRIAL of analytics_market: up to 2 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/analytics/market.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "segment": {
                    "type": "string",
                    "description": "words describing the segment to analyse, e.g. \"weather forecast data\". Omit to analyse the whole indexed economy"
                  },
                  "network": {
                    "type": "string",
                    "description": "restrict to one settlement network, e.g. \"base\""
                  },
                  "max_price_usd": {
                    "type": "number",
                    "description": "restrict to services at or below this price per call"
                  },
                  "require_callable": {
                    "type": "boolean",
                    "description": "restrict to services that publish a call spec (default false)"
                  },
                  "top": {
                    "type": "integer",
                    "description": "how many example services to return, 0-25 (default 10)"
                  },
                  "narrative": {
                    "type": "boolean",
                    "description": "include the AICF-written interpretation (default true)"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-analytics_market"
        }
      }
    },
    "/x402/analytics/price": {
      "post": {
        "operationId": "analytics_price_post_x402_analytics_price",
        "summary": "x402 Analytics — where does this price sit?",
        "description": "Price positioning for an x402 service. Describe what you sell (and optionally what you charge) and get the comparable set — named, counted, and listed — plus your exact percentile within it, the full decile ladder of what those comparables charge, how much demand sits in each price band, and a suggested band derived from the comparables rather than asserted. Refuses to compute a percentile when too few real comparables exist, because a confident percentile over four loosely-related rows is worse than no answer. Interpretation is written by Animica's own AICF inference network; every figure is computed in code.\n\nPayment: $0.002757 USDC per request (2757 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-analytics_price"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "analytics_price",
          "name": "x402 Analytics — where does this price sit?",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002757"
          },
          "price_usd": "0.002757",
          "currency": "USDC",
          "amount_atomic": "2757",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-analytics_price"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "description": {
                    "type": "string",
                    "description": "what the service does, in the words a merchant would use to describe it"
                  },
                  "price_usd": {
                    "type": "number",
                    "description": "the price per call you charge or are considering. Omit to get the market band without a position"
                  },
                  "network": {
                    "type": "string",
                    "description": "restrict comparables to one settlement network"
                  },
                  "top_comparables": {
                    "type": "integer",
                    "description": "how many comparables to list back, 0-25 (default 10)"
                  },
                  "narrative": {
                    "type": "boolean",
                    "description": "include the AICF-written interpretation (default true)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "description"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/analytics/price/trial": {
      "post": {
        "operationId": "analytics_price_free_post_x402_analytics_price_trial",
        "summary": "x402 Analytics — where does this price sit? — free trial (POST)",
        "description": "FREE TRIAL of analytics_price: up to 2 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/analytics/price.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "description": {
                    "type": "string",
                    "description": "what the service does, in the words a merchant would use to describe it"
                  },
                  "price_usd": {
                    "type": "number",
                    "description": "the price per call you charge or are considering. Omit to get the market band without a position"
                  },
                  "network": {
                    "type": "string",
                    "description": "restrict comparables to one settlement network"
                  },
                  "top_comparables": {
                    "type": "integer",
                    "description": "how many comparables to list back, 0-25 (default 10)"
                  },
                  "narrative": {
                    "type": "boolean",
                    "description": "include the AICF-written interpretation (default true)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "description"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-analytics_price"
        }
      }
    },
    "/x402/analytics/peers": {
      "post": {
        "operationId": "analytics_peers_post_x402_analytics_peers",
        "summary": "x402 Analytics — one endpoint against its peers",
        "description": "Competitive position for a single x402 resource. Give a URL that is listed anywhere in the merged index and get back what the index holds on it (including any correction our own unpaid 402 probe made to its advertised price), the peer set derived from its own description, and where it ranks among those peers on price, call volume, payer diversity and callability — plus the mirrors of itself that are listed as separate services. Useful whether the endpoint is yours or one you are about to buy from. Interpretation is written by Animica's own AICF inference network; every figure is computed in code.\n\nPayment: $0.002757 USDC per request (2757 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-analytics_peers"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "analytics_peers",
          "name": "x402 Analytics — one endpoint against its peers",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002757"
          },
          "price_usd": "0.002757",
          "currency": "USDC",
          "amount_atomic": "2757",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-analytics_peers"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "resource": {
                    "type": "string",
                    "description": "the absolute http(s) URL of a service listed in the x402 index"
                  },
                  "top_peers": {
                    "type": "integer",
                    "description": "how many peers to list, 0-25 (default 10)"
                  },
                  "narrative": {
                    "type": "boolean",
                    "description": "include the AICF-written interpretation (default true)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "resource"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/analytics/peers/trial": {
      "post": {
        "operationId": "analytics_peers_free_post_x402_analytics_peers_trial",
        "summary": "x402 Analytics — one endpoint against its peers — free trial (POST)",
        "description": "FREE TRIAL of analytics_peers: up to 2 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/analytics/peers.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "resource": {
                    "type": "string",
                    "description": "the absolute http(s) URL of a service listed in the x402 index"
                  },
                  "top_peers": {
                    "type": "integer",
                    "description": "how many peers to list, 0-25 (default 10)"
                  },
                  "narrative": {
                    "type": "boolean",
                    "description": "include the AICF-written interpretation (default true)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "resource"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-analytics_peers"
        }
      }
    },
    "/x402/crawl/pass": {
      "post": {
        "operationId": "crawl_pass_post_x402_crawl_pass",
        "summary": "Crawl pass (small)",
        "description": "Buy bulk crawl access to one domain that publishes Paid Crawl terms. $0.010 buys $0.010 worth of that site's pages — the site sets the per-page rate, so the request budget is the pass value divided by that rate. ONE settlement covers the whole budget: per-page settlement is impossible at these prices because Base gas would exceed the fee. Send the returned token back as \"X-Crawl-Pass: anmcp_...\". Site operators pay nothing for Paid Crawl; crawlers do.\n\nPayment: $0.010 USDC per request (10000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-crawl_pass"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "crawl_pass",
          "name": "Crawl pass (small)",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010"
          },
          "price_usd": "0.010",
          "currency": "USDC",
          "amount_atomic": "10000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-crawl_pass"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "domain": {
                    "type": "string",
                    "description": "the domain to buy crawl access to; it must publish terms at /x402/crawl/{domain}"
                  },
                  "ttl_seconds": {
                    "type": "integer",
                    "description": "how long the pass stays valid, 60-86400 (default 3600)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "domain"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/crawl/sites": {
      "post": {
        "operationId": "crawl_pass_free_post_x402_crawl_sites",
        "summary": "Paid Crawl — register a site (free)",
        "description": "FREE, no account. Register a domain for Paid Crawl and get back the robots.txt snippet and a verification token. Site operators never pay for this product — the crawler pays.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "domain": {
                    "type": "string",
                    "description": "the domain to register, e.g. \"example.com\""
                  },
                  "price_usd": {
                    "type": "string",
                    "description": "USD charged per AI crawl request"
                  },
                  "unknown_policy": {
                    "type": "string",
                    "description": "what to do with an unrecognised crawler: allow | charge | block"
                  },
                  "free_per_day": {
                    "type": "integer",
                    "description": "free requests per crawler per UTC day before charging starts"
                  },
                  "rate_threshold": {
                    "type": "number",
                    "description": "requests/minute above which an unknown client is treated as a crawler"
                  },
                  "payout_address": {
                    "type": "string",
                    "description": "where your share is paid out (verification gates payouts, not registration)"
                  },
                  "payout_network": {
                    "type": "string",
                    "description": "the network that payout address is on"
                  },
                  "allow_ua": {
                    "type": "array",
                    "items": {},
                    "description": "user-agent substrings that are always allowed free, up to 32"
                  },
                  "free_paths": {
                    "type": "array",
                    "items": {},
                    "description": "path prefixes that are always free, up to 64"
                  },
                  "enabled": {
                    "type": "boolean",
                    "description": "turn charging on or off without deleting the registration"
                  },
                  "contact": {
                    "type": "string",
                    "description": "contact for payout and abuse questions"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "domain"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-crawl_pass"
        }
      }
    },
    "/x402/crawl/verify": {
      "post": {
        "operationId": "crawl_pass_free_post_x402_crawl_verify",
        "summary": "Paid Crawl — verify domain ownership (free)",
        "description": "FREE. Prove you control a registered domain by serving its token at /.well-known/paid-crawl-verify.txt. Verification gates payouts, not registration.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "domain": {
                    "type": "string",
                    "description": "the registered domain to re-check, e.g. \"example.com\""
                  }
                },
                "additionalProperties": false,
                "required": [
                  "domain"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-crawl_pass"
        }
      }
    },
    "/x402/crawl/decide": {
      "post": {
        "operationId": "crawl_pass_free_post_x402_crawl_decide",
        "summary": "Paid Crawl — crawl decision endpoint (free)",
        "description": "FREE and unmetered. The decision endpoint a site edge calls (nginx auth_request, a Cloudflare Worker, or Express middleware): given the inbound request it answers allow / charge / block. Site operators are never billed for this.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "domain": {
                    "type": "string",
                    "description": "the site being crawled; REQUIRED unless sent as X-Crawl-Domain / X-Original-Host / Host"
                  },
                  "path": {
                    "type": "string",
                    "description": "request path (default \"/\"); or X-Crawl-Path / X-Original-URI"
                  },
                  "method": {
                    "type": "string",
                    "description": "request method (default GET); or X-Crawl-Method"
                  },
                  "user_agent": {
                    "type": "string",
                    "description": "the crawler's User-Agent; or X-Crawl-User-Agent / User-Agent"
                  },
                  "ip": {
                    "type": "string",
                    "description": "the crawler's IP, used for rDNS verification; or X-Crawl-IP"
                  },
                  "pass": {
                    "type": "string",
                    "description": "an anmcp_ crawl pass token; or X-Crawl-Pass"
                  },
                  "datacenter": {
                    "type": "boolean",
                    "description": "the edge already knows this IP is datacenter-range"
                  },
                  "verify_rdns": {
                    "type": "boolean",
                    "description": "force forward-confirmed rDNS verification of the declared bot"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-crawl_pass"
        }
      }
    },
    "/x402/crawl/install": {
      "get": {
        "operationId": "crawl_pass_free_get_x402_crawl_install",
        "summary": "Paid Crawl — install guide (free)",
        "description": "FREE. Copy-paste install for the Paid Crawl gate: the nginx auth_request snippet, the Cloudflare Worker, and the plain-HTTP contract for anything else.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-crawl_pass"
        }
      }
    },
    "/.well-known/paid-crawl": {
      "get": {
        "operationId": "crawl_pass_free_get_well_known_paid_crawl",
        "summary": "Paid Crawl — protocol discovery document (free)",
        "description": "FREE, no auth. The whole Paid Crawl protocol in one document: how a website starts charging AI crawlers (free, no account), and how a crawler discovers terms and pays.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-crawl_pass"
        }
      }
    },
    "/x402/crawl/earnings/{domain}": {
      "get": {
        "operationId": "crawl_pass_free_get_x402_crawl_earnings",
        "summary": "Paid Crawl — crawl earnings for one domain (free)",
        "description": "FREE. What a domain has earned from paid crawls, and which crawlers paid it.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-crawl_pass"
        }
      }
    },
    "/x402/crawl/{domain}": {
      "get": {
        "operationId": "crawl_pass_free_get_x402_crawl",
        "summary": "Paid Crawl — published crawl terms for one domain (free)",
        "description": "FREE. The machine-readable crawl terms for one domain — the document a robots.txt X402-Crawl line points at. Readable by anyone, including unpaid crawlers, because a crawler that cannot read the rules can never follow them.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-crawl_pass"
        }
      }
    },
    "/x402/crawl/licence": {
      "post": {
        "operationId": "crawl_pass_free_post_x402_crawl_licence",
        "summary": "Paid Crawl — claim a post-quantum crawl licence (free)",
        "description": "FREE. Exchange a crawl pass for a post-quantum-signed licence: a portable, independently verifiable record of what you paid for, which domain, at what price and over what window. Signed with ML-DSA-65 (FIPS 204, scheme 4099) — the evidence stays valid after classical signatures stop being evidence.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "pass": {
                    "type": "string",
                    "description": "the anmcp_ crawl pass to turn into a licence; may be sent as an X-Crawl-Pass header instead"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "pass"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-crawl_pass"
        }
      }
    },
    "/x402/crawl/licence/verify": {
      "post": {
        "operationId": "crawl_pass_free_post_x402_crawl_licence_verify",
        "summary": "Paid Crawl — verify a crawl licence (free)",
        "description": "FREE, and free on purpose: a receipt nobody can check for free is not evidence. Verify any Animica crawl licence — send signed_bytes, signature and public_key exactly as issued.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "signed_bytes": {
                    "type": "string",
                    "description": "the licence body exactly as issued, byte for byte"
                  },
                  "signature": {
                    "type": "object",
                    "description": "{ signature, public_key } as issued — ML-DSA-65 (FIPS 204, scheme 4099) hex. Send this OR the two flat fields below."
                  },
                  "public_key": {
                    "type": "string",
                    "description": "flat alternative to signature.public_key"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "signed_bytes"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-crawl_pass"
        }
      }
    },
    "/x402/crawl/pubkey": {
      "get": {
        "operationId": "crawl_pass_free_get_x402_crawl_pubkey",
        "summary": "Paid Crawl — ML-DSA-65 licence signing key (free)",
        "description": "FREE. The ML-DSA-65 public key every Animica crawl licence is signed with, so licences can be verified offline without calling us at all.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-crawl_pass"
        }
      }
    },
    "/x402/crawl/pass/10": {
      "post": {
        "operationId": "crawl_pass_10_post_x402_crawl_pass_10",
        "summary": "Crawl pass (medium)",
        "description": "Buy bulk crawl access to one domain that publishes Paid Crawl terms. $0.100 buys $0.100 worth of that site's pages — the site sets the per-page rate, so the request budget is the pass value divided by that rate. ONE settlement covers the whole budget: per-page settlement is impossible at these prices because Base gas would exceed the fee. Send the returned token back as \"X-Crawl-Pass: anmcp_...\". Site operators pay nothing for Paid Crawl; crawlers do.\n\nPayment: $0.100 USDC per request (100000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-crawl_pass_10"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "crawl_pass_10",
          "name": "Crawl pass (medium)",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.100"
          },
          "price_usd": "0.100",
          "currency": "USDC",
          "amount_atomic": "100000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-crawl_pass_10"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "domain": {
                    "type": "string",
                    "description": "the domain to buy crawl access to; it must publish terms at /x402/crawl/{domain}"
                  },
                  "ttl_seconds": {
                    "type": "integer",
                    "description": "how long the pass stays valid, 60-86400 (default 3600)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "domain"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/crawl/pass/100": {
      "post": {
        "operationId": "crawl_pass_100_post_x402_crawl_pass_100",
        "summary": "Crawl pass (bulk)",
        "description": "Buy bulk crawl access to one domain that publishes Paid Crawl terms. $1.000 buys $1.000 worth of that site's pages — the site sets the per-page rate, so the request budget is the pass value divided by that rate. ONE settlement covers the whole budget: per-page settlement is impossible at these prices because Base gas would exceed the fee. Send the returned token back as \"X-Crawl-Pass: anmcp_...\". Site operators pay nothing for Paid Crawl; crawlers do.\n\nPayment: $1.000 USDC per request (1000000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-crawl_pass_100"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "crawl_pass_100",
          "name": "Crawl pass (bulk)",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "1.000"
          },
          "price_usd": "1.000",
          "currency": "USDC",
          "amount_atomic": "1000000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-crawl_pass_100"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "domain": {
                    "type": "string",
                    "description": "the domain to buy crawl access to; it must publish terms at /x402/crawl/{domain}"
                  },
                  "ttl_seconds": {
                    "type": "integer",
                    "description": "how long the pass stays valid, 60-86400 (default 3600)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "domain"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/forecast": {
      "post": {
        "operationId": "forecast_notarized_post_x402_forecast",
        "summary": "Notarised forecast with market comparison",
        "description": "Ask a yes/no question about the future and get three things: an independent model probability, the live price of the matching prediction market when one exists, and — the point of the product — the whole record anchored into the Animica data-availability layer with a commitment anyone can verify FREE and permanently at GET /x402/forecast/{commitment}. Anyone can claim afterwards that they called it; this proves what was believed beforehand. Both numbers are always returned side by side: the model is NOT claimed to beat the market, and our own accuracy against every resolved market is published free at GET /x402/forecast/calibration, including when we lose. If the record cannot be anchored the call fails rather than selling an unanchored prediction.\n\nPayment: $0.002757 USDC per request (2757 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-forecast_notarized"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "forecast_notarized",
          "name": "Notarised forecast with market comparison",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002757"
          },
          "price_usd": "0.002757",
          "currency": "USDC",
          "amount_atomic": "2757",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "readiness re-checked, then settled, then executed (retry + signed receipt on downstream failure)",
          "documentation": "https://animica.dev/x402#product-forecast_notarized"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "question": {
                    "type": "string",
                    "description": "a yes/no question about the future, e.g. \"Will X happen before 2027?\""
                  },
                  "market_slug": {
                    "type": "string",
                    "description": "pin the comparison to a specific prediction market by slug"
                  },
                  "market_id": {
                    "type": "string",
                    "description": "pin the comparison by market id"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "question"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/forecast/calibration": {
      "get": {
        "operationId": "forecast_notarized_free_get_x402_forecast_calibration",
        "summary": "Notarised forecast — published Brier track record (free)",
        "description": "FREE: the scored track record of every notarised forecast whose market has settled — mean Brier score for the model AND for the market, so you can see plainly whether the model adds anything. Published win or lose.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-forecast_notarized"
        }
      }
    },
    "/x402/forecast/{commitment}": {
      "get": {
        "operationId": "forecast_notarized_free_get_x402_forecast",
        "summary": "Notarised forecast — one anchored record (free)",
        "description": "FREE and permanent: the anchored forecast record for a commitment, its DA inclusion proof, and — once the market settles — the outcome and Brier scores for both the model and the market.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "commitment",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-forecast_notarized"
        }
      }
    },
    "/x402/execute": {
      "post": {
        "operationId": "execute_post_x402_execute",
        "summary": "Animica Execute — pay once, get a verified result",
        "description": "Give a task and a budget; get the result, a measured verification signal, and an ML-DSA-65 signed receipt over the exact bytes delivered. Routes the task to a capability and says which one ran: extract (fetch a URL and read it), research, predict (with the live prediction-market price where one matches), chain (Animica L1 facts), code, summarize, or a direct answer. HONEST ABOUT VERIFICATION: there is one inference backend today, so multi-sample checking measures SELF-CONSISTENCY, not independent providers — the response states provider_count, whether providers were distinct, and what the agreement number means. Confidence is measured from real agreement or reported as null; it is never a decorative number. The receipt is signed with the same post-quantum scheme this chain admits transactions with, the public key ships with it, and the result can optionally be anchored on-chain with a free permanent proof.\n\nPayment: $0.006000 USDC per request (6000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-execute"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "execute",
          "name": "Animica Execute — pay once, get a verified result",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.006000"
          },
          "price_usd": "0.006000",
          "currency": "USDC",
          "amount_atomic": "6000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "readiness re-checked, then settled, then executed (retry + signed receipt on downstream failure)",
          "documentation": "https://animica.dev/x402#product-execute"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "task": {
                    "type": "string",
                    "description": "what to do, in plain language. A URL in the task routes it to extraction."
                  },
                  "quality": {
                    "type": "string",
                    "description": "\"fast\" (1 pass, no verification) or \"verified\" (multiple samples + agreement). Default fast."
                  },
                  "anchor": {
                    "type": "boolean",
                    "description": "anchor the result on-chain and return a free permanent proof (default false)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "task"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/extract": {
      "post": {
        "operationId": "extract_structured_post_x402_extract",
        "summary": "Structured data extraction (your JSON Schema)",
        "description": "Turn messy text — a web page, email, invoice, receipt, job posting, contract clause, product description — into strict JSON matching a schema YOU supply. The schema is enforced in code, not merely requested: output is parsed, validated, repaired once against the exact validation error, and the call FAILS with the violated constraint rather than returning unvalidated JSON. Fields not present in the input come back null instead of a plausible invention. Priced per call. For high-volume use, buy prepaid credits (POST /x402/credits/buy) and send X-Animica-Credits on each request — no settlement, no gas, no per-call payment round trip. Paying in ANM on the animica:1 lane is also ~25% cheaper because we sponsor no gas there.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-extract_structured"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "extract_structured",
          "name": "Structured data extraction (your JSON Schema)",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-extract_structured"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "string",
                    "description": "the unstructured text to extract from"
                  },
                  "schema": {
                    "type": "object",
                    "description": "JSON Schema the result must satisfy (subset: type, properties, required, items, enum, const, min/max, minLength/maxLength, minItems/maxItems, additionalProperties)"
                  },
                  "instruction": {
                    "type": "string",
                    "description": "optional extra guidance, e.g. \"amounts in minor units\""
                  }
                },
                "additionalProperties": false,
                "required": [
                  "input",
                  "schema"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/extract/trial": {
      "post": {
        "operationId": "extract_structured_free_post_x402_extract_trial",
        "summary": "Structured data extraction (your JSON Schema) — free trial (POST)",
        "description": "FREE TRIAL of extract_structured: up to 5 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/extract.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "string",
                    "description": "the unstructured text to extract from"
                  },
                  "schema": {
                    "type": "object",
                    "description": "JSON Schema the result must satisfy (subset: type, properties, required, items, enum, const, min/max, minLength/maxLength, minItems/maxItems, additionalProperties)"
                  },
                  "instruction": {
                    "type": "string",
                    "description": "optional extra guidance, e.g. \"amounts in minor units\""
                  }
                },
                "additionalProperties": false,
                "required": [
                  "input",
                  "schema"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-extract_structured"
        }
      }
    },
    "/x402/classify": {
      "post": {
        "operationId": "classify_post_x402_classify",
        "summary": "Text classification",
        "description": "Assign text to one of YOUR labels — spam, sentiment, urgency, topic, ticket category, lead quality, intent, moderation — with a confidence and a one-line rationale. The label is constrained to your list by schema enum, so it cannot return a category you did not define. Priced per call. For high-volume use, buy prepaid credits (POST /x402/credits/buy) and send X-Animica-Credits on each request — no settlement, no gas, no per-call payment round trip. Paying in ANM on the animica:1 lane is also ~25% cheaper because we sponsor no gas there.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-classify"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "classify",
          "name": "Text classification",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-classify"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "string",
                    "description": "the text to classify"
                  },
                  "labels": {
                    "type": "array",
                    "items": {},
                    "description": "2..50 candidate labels"
                  },
                  "multi": {
                    "type": "boolean",
                    "description": "allow multiple labels (default false)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "input",
                  "labels"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/classify/trial": {
      "post": {
        "operationId": "classify_free_post_x402_classify_trial",
        "summary": "Text classification — free trial (POST)",
        "description": "FREE TRIAL of classify: up to 5 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/classify.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "string",
                    "description": "the text to classify"
                  },
                  "labels": {
                    "type": "array",
                    "items": {},
                    "description": "2..50 candidate labels"
                  },
                  "multi": {
                    "type": "boolean",
                    "description": "allow multiple labels (default false)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "input",
                  "labels"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-classify"
        }
      }
    },
    "/x402/entities": {
      "post": {
        "operationId": "entities_post_x402_entities",
        "summary": "Entity extraction",
        "description": "Pull people, organizations, locations, dates, amounts, products, URLs, emails, phone numbers and wallet addresses out of text, each with the exact surface form as it appeared so you can locate it. Types are constrained by schema, so the result is always one of the known kinds. Priced per call. For high-volume use, buy prepaid credits (POST /x402/credits/buy) and send X-Animica-Credits on each request — no settlement, no gas, no per-call payment round trip. Paying in ANM on the animica:1 lane is also ~25% cheaper because we sponsor no gas there.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-entities"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "entities",
          "name": "Entity extraction",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-entities"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "string",
                    "description": "text to scan"
                  },
                  "types": {
                    "type": "array",
                    "items": {},
                    "description": "restrict to a subset of person, organization, location, date, amount, product, url, email, phone, wallet_address, other"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "input"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/entities/trial": {
      "post": {
        "operationId": "entities_free_post_x402_entities_trial",
        "summary": "Entity extraction — free trial (POST)",
        "description": "FREE TRIAL of entities: up to 5 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/entities.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "string",
                    "description": "text to scan"
                  },
                  "types": {
                    "type": "array",
                    "items": {},
                    "description": "restrict to a subset of person, organization, location, date, amount, product, url, email, phone, wallet_address, other"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-entities"
        }
      }
    },
    "/x402/json/repair": {
      "post": {
        "operationId": "json_repair_post_x402_json_repair",
        "summary": "JSON repair and schema enforcement",
        "description": "Hand over malformed model output and a JSON Schema; get back JSON that provably satisfies it. Tries a pure-parse fast path FIRST and returns immediately when the input is already valid — you are not charged a model call for text that merely looked broken. Otherwise a small model repairs it and the result is validated in code before it is returned. Priced per call. For high-volume use, buy prepaid credits (POST /x402/credits/buy) and send X-Animica-Credits on each request — no settlement, no gas, no per-call payment round trip. Paying in ANM on the animica:1 lane is also ~25% cheaper because we sponsor no gas there.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-json_repair"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "json_repair",
          "name": "JSON repair and schema enforcement",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-json_repair"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "string",
                    "description": "the malformed / fenced / prose-wrapped JSON"
                  },
                  "schema": {
                    "type": "object",
                    "description": "JSON Schema the repaired value must satisfy"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "input",
                  "schema"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/json/repair/trial": {
      "post": {
        "operationId": "json_repair_free_post_x402_json_repair_trial",
        "summary": "JSON repair and schema enforcement — free trial (POST)",
        "description": "FREE TRIAL of json_repair: up to 5 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/json/repair.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "string",
                    "description": "the malformed / fenced / prose-wrapped JSON"
                  },
                  "schema": {
                    "type": "object",
                    "description": "JSON Schema the repaired value must satisfy"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "input",
                  "schema"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-json_repair"
        }
      }
    },
    "/x402/security/injection": {
      "post": {
        "operationId": "injection_scan_post_x402_security_injection",
        "summary": "Prompt-injection detector",
        "description": "Scan retrieved content — a fetched page, an email, a tool result — for text trying to manipulate the agent reading it: instruction overrides, role/system impersonation, exfiltration requests, hidden or encoded directives. Returns a risk score, the suspicious spans verbatim, and the technique observed. Deterministic pattern checks run ALONGSIDE the model so a blatant \"ignore all previous instructions\" is caught even if the model misses it, and the two signals are reported separately rather than blended into one number you cannot interrogate. Priced per call. For high-volume use, buy prepaid credits (POST /x402/credits/buy) and send X-Animica-Credits on each request — no settlement, no gas, no per-call payment round trip. Paying in ANM on the animica:1 lane is also ~25% cheaper because we sponsor no gas there.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-injection_scan"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "injection_scan",
          "name": "Prompt-injection detector",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-injection_scan"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "string",
                    "description": "the untrusted content to scan"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "input"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/security/injection/trial": {
      "post": {
        "operationId": "injection_scan_free_post_x402_security_injection_trial",
        "summary": "Prompt-injection detector — free trial (POST)",
        "description": "FREE TRIAL of injection_scan: up to 5 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/security/injection.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "string",
                    "description": "the untrusted content to scan"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-injection_scan"
        }
      }
    },
    "/x402/rerank": {
      "post": {
        "operationId": "rerank_post_x402_rerank",
        "summary": "Rerank search results",
        "description": "Give a query and up to 50 candidate snippets; get the top N by relevance with a score and a one-line reason. Indexes are returned so you can map straight back to your own objects without string matching. Priced per call. For high-volume use, buy prepaid credits (POST /x402/credits/buy) and send X-Animica-Credits on each request — no settlement, no gas, no per-call payment round trip. Paying in ANM on the animica:1 lane is also ~25% cheaper because we sponsor no gas there.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-rerank"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "rerank",
          "name": "Rerank search results",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-rerank"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string"
                  },
                  "documents": {
                    "type": "array",
                    "items": {},
                    "description": "2..50 strings"
                  },
                  "top_k": {
                    "type": "integer",
                    "description": "how many to return (default 5)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "query",
                  "documents"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/rerank/trial": {
      "post": {
        "operationId": "rerank_free_post_x402_rerank_trial",
        "summary": "Rerank search results — free trial (POST)",
        "description": "FREE TRIAL of rerank: up to 5 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/rerank.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string"
                  },
                  "documents": {
                    "type": "array",
                    "items": {},
                    "description": "2..50 strings"
                  },
                  "top_k": {
                    "type": "integer",
                    "description": "how many to return (default 5)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "query",
                  "documents"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-rerank"
        }
      }
    },
    "/x402/route": {
      "post": {
        "operationId": "route_action_post_x402_route",
        "summary": "Agent action router",
        "description": "Give a goal and the actions available to you; get back the single best action, its arguments, a confidence and a reason. The chosen action is constrained by schema enum to your list, so it can never name a tool you do not have. Built for the decision an agent makes before spending a frontier-model call — including the honest answer that it should escalate. Priced per call. For high-volume use, buy prepaid credits (POST /x402/credits/buy) and send X-Animica-Credits on each request — no settlement, no gas, no per-call payment round trip. Paying in ANM on the animica:1 lane is also ~25% cheaper because we sponsor no gas there.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-route_action"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "route_action",
          "name": "Agent action router",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-route_action"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "goal": {
                    "type": "string",
                    "description": "what the agent is trying to achieve"
                  },
                  "actions": {
                    "type": "array",
                    "items": {},
                    "description": "2..20 actions: {name, description, parameters?}"
                  },
                  "context": {
                    "type": "string",
                    "description": "extra state the decision depends on"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "goal",
                  "actions"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/route/trial": {
      "post": {
        "operationId": "route_action_free_post_x402_route_trial",
        "summary": "Agent action router — free trial (POST)",
        "description": "FREE TRIAL of route_action: up to 5 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/route.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "goal": {
                    "type": "string",
                    "description": "what the agent is trying to achieve"
                  },
                  "actions": {
                    "type": "array",
                    "items": {},
                    "description": "2..20 actions: {name, description, parameters?}"
                  },
                  "context": {
                    "type": "string",
                    "description": "extra state the decision depends on"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "goal",
                  "actions"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-route_action"
        }
      }
    },
    "/x402/random/int": {
      "post": {
        "operationId": "random_int_post_x402_random_int",
        "summary": "Uniform random integers",
        "description": "Uniform integers in [min, max] derived from ONE verified randomness draw by rejection sampling (never modulo bias) — up to 1000 per request. The response carries the raw draw, the node's source/health/attestation and the exact rule, so you can recompute every integer offline.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "randomness"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DerivedRandomness"
                },
                "examples": {
                  "captured": {
                    "summary": "real response captured from this endpoint (POST /x402/random/int)",
                    "description": "captured live on this gateway against the Animica mainnet node on 2026-08-15; the payment block is rendered separately from the live registry because the capture settled through a mocked facilitator",
                    "value": {
                      "product": "random_int",
                      "result": {
                        "ints": [
                          5,
                          1,
                          2
                        ],
                        "count": 3,
                        "min": 1,
                        "max": 6
                      },
                      "randomness": "8e8d85d9c03247ffdff7b3db1c917b7a0e97a569e8cf098071dd91cc9121ae55",
                      "encoding": "hex",
                      "bytes": 32,
                      "source": {
                        "name": "software-fallback",
                        "vendor": "os",
                        "model": "os.urandom CSPRNG",
                        "is_hardware": false,
                        "is_quantum": false,
                        "device_path": null,
                        "attested": false,
                        "notes": "non-attested fallback for testing/degraded mode"
                      },
                      "health": {
                        "passed": true,
                        "min_entropy_per_byte": 7.8216
                      },
                      "attestation": {
                        "alg": "ed25519",
                        "backend": "software",
                        "attested": false,
                        "public_key_hex": "8a2228f4bde8f72964a7ff4aa759f24932ae1cccd9462ad94ca6e508d6b87a64",
                        "digest_hex": "14a2636cf09e18539ab6ed62de65af350c2f6014d269b74d127fc1604c7aa68a",
                        "signature_hex": "bee4d32ee31dd92b07f1eee3113ed722c3c96c5fae98c509bcca8f66a5ceaff3eb4a6cd41cd97fc32deebdeeab18b4affea467549dd4ef387ddbdae6d415e900"
                      },
                      "verification": {
                        "method": "signed-digest-attestation",
                        "rules": [
                          "attestation.digest_hex == sha3_256(bytes(randomness))",
                          "ed25519_verify(pubkey=attestation.public_key_hex, message=raw_bytes(attestation.digest_hex), signature=attestation.signature_hex)"
                        ],
                        "verifier": "randomness/beacon_api/static/verify.js in the animica repo (gitlab.com/Animica) — dependency-free Node module exporting sha3_256; pair with any ed25519 verifier",
                        "trust_model": "signed by the serving node, not client-recomputable: you trust the node's entropy source, then verify it signed exactly these bytes. Check health.passed and attestation.attested before relying on it.",
                        "attested": false
                      },
                      "derivation": {
                        "algorithm": "uniform-int-rejection-sampling",
                        "kind": "range",
                        "request_id": "",
                        "domain": "animica/qrng/public/v1",
                        "seed_hex": "5fb4cc0e8007c201060453ee9b7cacb38444d32d76d423c61e601117fadd3068",
                        "entropy_hex": "8e8d85d9c03247ffdff7b3db1c917b7a0e97a569e8cf098071dd91cc9121ae55",
                        "rules": {
                          "seed": "seed = sha3_256(\"animica/qrng/public/v1\" || \"|k:\" || kind || \"|r:\" || request_id || \"|b:\" || bytes(randomness))",
                          "stream": "stream = sha3_256(seed || be8(counter)) for counter = 0,1,2,… concatenated; consumed left to right, never reused",
                          "uniform_int": "randbelow(n): k = floor((bitlen(n)+7)/8)+1 bytes per attempt, read big-endian as x; limit = 2^(8k); accept when x < limit - (limit mod n); value = x mod n. Rejected attempts still consume their k bytes. n <= 1 consumes nothing and returns 0. This is rejection sampling — plain \"x mod n\" would bias small values."
                        },
                        "steps": [
                          "seed the DRNG with kind=\"range\" and your request_id over the raw randomness above",
                          "for i = 0..2: ints[i] = 1 + randbelow(6)"
                        ],
                        "stream_bytes_consumed": 6,
                        "recompute": {
                          "kind": "range",
                          "beacon_hex": "8e8d85d9c03247ffdff7b3db1c917b7a0e97a569e8cf098071dd91cc9121ae55",
                          "round_id": 0,
                          "request_id": "",
                          "params": {
                            "lo": 1,
                            "hi": 6,
                            "count": 3
                          },
                          "output": [
                            5,
                            1,
                            2
                          ]
                        },
                        "verifier": {
                          "file": "randomness/beacon_api/static/verify.js (Animica repo, gitlab.com/Animica) — zero-dependency, runs in Node and the browser",
                          "api": "AnimicaBeacon.drngSeed(entropy, kind, request_id) + AnimicaBeacon.QDRNG reproduce the stream; AnimicaBeacon.verifyResult(derivation.recompute) === true whenever `recompute` is present",
                          "note": "verify.js calls the seed material `beacon` because it was written for beacon rounds. This product is NOT a beacon round: the seed material is the raw `randomness` bytes above, which the node signed (see `verification`)."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-random_int"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "random_int",
          "name": "Uniform random integers",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-random_int"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "min": {
                    "type": "integer",
                    "description": "lower bound, inclusive"
                  },
                  "max": {
                    "type": "integer",
                    "description": "upper bound, inclusive (>= min)"
                  },
                  "count": {
                    "type": "integer",
                    "description": "how many integers, 1..1000 (default 1; alias n)"
                  },
                  "request_id": {
                    "type": "string",
                    "description": "your own tag; mixed into the DRNG seed so you can recompute this exact draw"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "min",
                  "max"
                ]
              },
              "example": {
                "count": 3,
                "min": 1,
                "max": 6
              }
            }
          }
        }
      }
    },
    "/x402/random/int/trial": {
      "post": {
        "operationId": "random_int_free_post_x402_random_int_trial",
        "summary": "Uniform random integers — free trial (POST)",
        "description": "FREE TRIAL of random_int: up to 3 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/random/int.\n\nNo payment is ever requested here.",
        "tags": [
          "randomness"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "min": {
                    "type": "integer",
                    "description": "lower bound, inclusive"
                  },
                  "max": {
                    "type": "integer",
                    "description": "upper bound, inclusive (>= min)"
                  },
                  "count": {
                    "type": "integer",
                    "description": "how many integers, 1..1000 (default 1; alias n)"
                  },
                  "request_id": {
                    "type": "string",
                    "description": "your own tag; mixed into the DRNG seed so you can recompute this exact draw"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "min",
                  "max"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-random_int"
        }
      }
    },
    "/x402/random/shuffle": {
      "post": {
        "operationId": "random_shuffle_post_x402_random_shuffle",
        "summary": "Verifiable shuffle",
        "description": "Fisher-Yates permutation of your list (or of 1..N), up to 10000 items, derived from ONE verified randomness draw. Returns the permutation of 0-based indices plus the shuffled items, with the exact swap-and-byte-consumption rule so you can recompute it offline.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "randomness"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DerivedRandomness"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-random_shuffle"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "random_shuffle",
          "name": "Verifiable shuffle",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-random_shuffle"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "items": {
                    "type": "array",
                    "items": {},
                    "description": "the list to shuffle, 1..10000 entries (any JSON values)"
                  },
                  "n": {
                    "type": "integer",
                    "description": "shuffle 1..n instead of a supplied list (1..10000); supply exactly one of items or n"
                  },
                  "request_id": {
                    "type": "string",
                    "description": "your own tag; mixed into the DRNG seed"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/x402/random/shuffle/trial": {
      "post": {
        "operationId": "random_shuffle_free_post_x402_random_shuffle_trial",
        "summary": "Verifiable shuffle — free trial (POST)",
        "description": "FREE TRIAL of random_shuffle: up to 3 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/random/shuffle.\n\nNo payment is ever requested here.",
        "tags": [
          "randomness"
        ],
        "parameters": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "items": {
                    "type": "array",
                    "items": {},
                    "description": "the list to shuffle, 1..10000 entries (any JSON values)"
                  },
                  "n": {
                    "type": "integer",
                    "description": "shuffle 1..n instead of a supplied list (1..10000); supply exactly one of items or n"
                  },
                  "request_id": {
                    "type": "string",
                    "description": "your own tag; mixed into the DRNG seed"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-random_shuffle"
        }
      }
    },
    "/x402/random/pick": {
      "post": {
        "operationId": "random_pick_post_x402_random_pick",
        "summary": "Weighted random pick",
        "description": "Pick k of your items with or without replacement, optionally weighted by integer weights (raffles, lotteries, sortition, A/B splits). One verified randomness draw, cumulative-weight search over a rejection-sampled uniform value, up to 10000 items. The exact rule and the raw draw ride along so you can recompute the winners.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "randomness"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DerivedRandomness"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-random_pick"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "random_pick",
          "name": "Weighted random pick",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-random_pick"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "items": {
                    "type": "array",
                    "items": {},
                    "description": "candidates, 1..10000 entries (any JSON values)"
                  },
                  "k": {
                    "type": "integer",
                    "description": "how many to pick, 1..1000 (default 1; alias count). Without replacement k <= items.length"
                  },
                  "replace": {
                    "type": "boolean",
                    "description": "true = with replacement (an item can win twice); default false"
                  },
                  "weights": {
                    "type": "array",
                    "items": {},
                    "description": "one non-negative INTEGER weight per item (floats rejected: the cumulative search must be recomputable exactly)"
                  },
                  "indices_only": {
                    "type": "boolean",
                    "description": "omit the picked items and return only their 0-based indices — use it when the items are large: the response cap is 4000000 bytes and with replace:true the same item can be emitted k times"
                  },
                  "request_id": {
                    "type": "string",
                    "description": "your own tag; mixed into the DRNG seed"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "items"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/random/pick/trial": {
      "post": {
        "operationId": "random_pick_free_post_x402_random_pick_trial",
        "summary": "Weighted random pick — free trial (POST)",
        "description": "FREE TRIAL of random_pick: up to 3 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/random/pick.\n\nNo payment is ever requested here.",
        "tags": [
          "randomness"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "items": {
                    "type": "array",
                    "items": {},
                    "description": "candidates, 1..10000 entries (any JSON values)"
                  },
                  "k": {
                    "type": "integer",
                    "description": "how many to pick, 1..1000 (default 1; alias count). Without replacement k <= items.length"
                  },
                  "replace": {
                    "type": "boolean",
                    "description": "true = with replacement (an item can win twice); default false"
                  },
                  "weights": {
                    "type": "array",
                    "items": {},
                    "description": "one non-negative INTEGER weight per item (floats rejected: the cumulative search must be recomputable exactly)"
                  },
                  "indices_only": {
                    "type": "boolean",
                    "description": "omit the picked items and return only their 0-based indices — use it when the items are large: the response cap is 4000000 bytes and with replace:true the same item can be emitted k times"
                  },
                  "request_id": {
                    "type": "string",
                    "description": "your own tag; mixed into the DRNG seed"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "items"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-random_pick"
        }
      }
    },
    "/x402/qrng/bulk": {
      "post": {
        "operationId": "random_bulk_post_x402_qrng_bulk",
        "summary": "Batched independent draws (one settlement)",
        "description": "2..10 INDEPENDENT randomness draws — each one its own node call with its own signed digest attestation and health report — delivered under ONE payment of $0.0012. Fewer than 2 draws is refused with a 400 that points at GET /x402/qrng/draw ($0.001 per draw), because only at 2+ draws is this genuinely cheaper per draw. Priced per draw, not per byte: if you just need many bytes under one attestation, a single 1024-byte qrng draw is cheaper — the response states which is cheaper for the call you made.\n\nPayment: $0.002068 USDC per request (2068 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "randomness"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BulkRandomness"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-random_bulk"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "random_bulk",
          "name": "Batched independent draws (one settlement)",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002068"
          },
          "price_usd": "0.002068",
          "currency": "USDC",
          "amount_atomic": "2068",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-random_bulk"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "draws": {
                    "type": "integer",
                    "description": "how many INDEPENDENT draws, 2..10 (default 10; alias count). Below 2 this endpoint is more expensive than 2 single draws and refuses with a 400."
                  },
                  "bytes": {
                    "type": "integer",
                    "description": "bytes per draw, 1..1024 (default 32; draws*bytes <= 65536)"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/x402/qrng/bulk/trial": {
      "post": {
        "operationId": "random_bulk_free_post_x402_qrng_bulk_trial",
        "summary": "Batched independent draws (one settlement) — free trial (POST)",
        "description": "FREE TRIAL of random_bulk: up to 3 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/qrng/bulk.\n\nNo payment is ever requested here.",
        "tags": [
          "randomness"
        ],
        "parameters": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "draws": {
                    "type": "integer",
                    "description": "how many INDEPENDENT draws, 2..10 (default 10; alias count). Below 2 this endpoint is more expensive than 2 single draws and refuses with a 400."
                  },
                  "bytes": {
                    "type": "integer",
                    "description": "bytes per draw, 1..1024 (default 32; draws*bytes <= 65536)"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-random_bulk"
        }
      }
    },
    "/x402/random/commit": {
      "post": {
        "operationId": "random_commit_post_x402_random_commit",
        "summary": "Commit-reveal randomness (public audit trail)",
        "description": "Commit now, reveal to everyone later: the paid call returns a commitment sha3_256(secret||salt) and a commit id; GET /x402/random/reveal/{commit_id} is FREE, public and idempotent, and discloses the secret, the salt, the raw draw and the node's attestation so anyone — not just the buyer — can check the commitment. Reveal delay 0..604800s. For games, sealed-bid rounds and auditable draws. Trust model, stated plainly: the commitment binds the outcome from the moment you publish it, and the reveal proves the secret came from a node-signed draw — it does NOT prove the operator discarded no draws before committing, so publish the commitment to your players before the round.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "randomness"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RandomCommitment"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-random_commit"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "random_commit",
          "name": "Commit-reveal randomness (public audit trail)",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-random_commit"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "reveal_after_seconds": {
                    "type": "integer",
                    "description": "seconds until the free reveal opens, 0..604800 (default 0 = revealable immediately)"
                  },
                  "memo": {
                    "type": "string",
                    "description": "up to 256 printable ASCII chars, published verbatim at reveal (bind the commitment to your round/bet id)"
                  },
                  "request_id": {
                    "type": "string",
                    "description": "your own tag; mixed into the DRNG seed that produced the secret"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/x402/random/reveal/{commit_id}": {
      "get": {
        "operationId": "random_commit_free_get_x402_random_reveal",
        "summary": "Commit-reveal randomness (public audit trail) — free disclosure",
        "description": "FREE public reveal: secret, salt, raw draw and attestation for a commitment. No payment, ever. Idempotent.\n\nNo payment is ever requested here.",
        "tags": [
          "randomness"
        ],
        "parameters": [
          {
            "name": "commit_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Disclosed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RandomReveal"
                }
              }
            }
          },
          "404": {
            "description": "No such commitment (or it aged out of the retention window).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "425": {
            "description": "Still sealed: the commitment's reveal time has not been reached. Retry after `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-random_commit"
        }
      }
    },
    "/x402/media/image": {
      "post": {
        "operationId": "media_image_post_x402_media_image",
        "summary": "AI image render",
        "description": "Text-to-image, rendered by an online GPU miner. Rendered by the Animica GPU-miner queue. Sold only while a miner for the requested kind is online — the catalog reports available:false and the endpoint answers 503 otherwise. Returns a job handle immediately (rendering is asynchronous); polling the returned poll_url is free. Kinds: image.\n\nPayment: $0.002068 USDC per request (2068 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-media_image"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "media_image",
          "name": "AI image render",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002068"
          },
          "price_usd": "0.002068",
          "currency": "USDC",
          "amount_atomic": "2068",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "readiness re-checked, then settled, then executed (retry + signed receipt on downstream failure)",
          "documentation": "https://animica.dev/x402#product-media_image"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "description": "one of: image (aliases accepted, e.g. \"video\", \"music\", \"upscale\")"
                  },
                  "prompt": {
                    "type": "string",
                    "description": "what to render; required except for upload-driven kinds"
                  },
                  "params": {
                    "type": "object",
                    "description": "optional per-kind parameters, clamped by the renderer"
                  },
                  "upload_ids": {
                    "type": "array",
                    "items": {},
                    "description": "ids from /api/mkt/v1/media/uploads, for image-to-video and the edit kinds"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/x402/media/image/trial": {
      "post": {
        "operationId": "media_image_free_post_x402_media_image_trial",
        "summary": "AI image render — free trial (POST)",
        "description": "FREE TRIAL of media_image: up to 1 call per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/media/image.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "description": "one of: image (aliases accepted, e.g. \"video\", \"music\", \"upscale\")"
                  },
                  "prompt": {
                    "type": "string",
                    "description": "what to render; required except for upload-driven kinds"
                  },
                  "params": {
                    "type": "object",
                    "description": "optional per-kind parameters, clamped by the renderer"
                  },
                  "upload_ids": {
                    "type": "array",
                    "items": {},
                    "description": "ids from /api/mkt/v1/media/uploads, for image-to-video and the edit kinds"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-media_image"
        }
      }
    },
    "/x402/media/video": {
      "post": {
        "operationId": "media_video_post_x402_media_video",
        "summary": "AI video render",
        "description": "Text-to-video, image-to-video, upscale, interpolate, subtitles, background removal and shorts. Rendered by the Animica GPU-miner queue. Sold only while a miner for the requested kind is online — the catalog reports available:false and the endpoint answers 503 otherwise. Returns a job handle immediately (rendering is asynchronous); polling the returned poll_url is free. Kinds: video_t2v, video_i2v, video_multiscene, video_upscale, video_interpolate, video_subtitles, video_bgremove, video_shorts.\n\nPayment: $0.003000 USDC per request (3000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-media_video"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "media_video",
          "name": "AI video render",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.003000"
          },
          "price_usd": "0.003000",
          "currency": "USDC",
          "amount_atomic": "3000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "readiness re-checked, then settled, then executed (retry + signed receipt on downstream failure)",
          "documentation": "https://animica.dev/x402#product-media_video"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "description": "one of: video_t2v, video_i2v, video_multiscene, video_upscale, video_interpolate, video_subtitles, video_bgremove, video_shorts (aliases accepted, e.g. \"video\", \"music\", \"upscale\")"
                  },
                  "prompt": {
                    "type": "string",
                    "description": "what to render; required except for upload-driven kinds"
                  },
                  "params": {
                    "type": "object",
                    "description": "optional per-kind parameters, clamped by the renderer"
                  },
                  "upload_ids": {
                    "type": "array",
                    "items": {},
                    "description": "ids from /api/mkt/v1/media/uploads, for image-to-video and the edit kinds"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/x402/media/video/trial": {
      "post": {
        "operationId": "media_video_free_post_x402_media_video_trial",
        "summary": "AI video render — free trial (POST)",
        "description": "FREE TRIAL of media_video: up to 1 call per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/media/video.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "description": "one of: video_t2v, video_i2v, video_multiscene, video_upscale, video_interpolate, video_subtitles, video_bgremove, video_shorts (aliases accepted, e.g. \"video\", \"music\", \"upscale\")"
                  },
                  "prompt": {
                    "type": "string",
                    "description": "what to render; required except for upload-driven kinds"
                  },
                  "params": {
                    "type": "object",
                    "description": "optional per-kind parameters, clamped by the renderer"
                  },
                  "upload_ids": {
                    "type": "array",
                    "items": {},
                    "description": "ids from /api/mkt/v1/media/uploads, for image-to-video and the edit kinds"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-media_video"
        }
      }
    },
    "/x402/media/audio": {
      "post": {
        "operationId": "media_audio_post_x402_media_audio",
        "summary": "AI audio render",
        "description": "Music generation, stem separation, vocal isolation, enhancement and mastering. Rendered by the Animica GPU-miner queue. Sold only while a miner for the requested kind is online — the catalog reports available:false and the endpoint answers 503 otherwise. Returns a job handle immediately (rendering is asynchronous); polling the returned poll_url is free. Kinds: audio, audio_stems, audio_isolate, audio_enhance, audio_master.\n\nPayment: $0.002412 USDC per request (2412 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-media_audio"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "media_audio",
          "name": "AI audio render",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002412"
          },
          "price_usd": "0.002412",
          "currency": "USDC",
          "amount_atomic": "2412",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "readiness re-checked, then settled, then executed (retry + signed receipt on downstream failure)",
          "documentation": "https://animica.dev/x402#product-media_audio"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "description": "one of: audio, audio_stems, audio_isolate, audio_enhance, audio_master (aliases accepted, e.g. \"video\", \"music\", \"upscale\")"
                  },
                  "prompt": {
                    "type": "string",
                    "description": "what to render; required except for upload-driven kinds"
                  },
                  "params": {
                    "type": "object",
                    "description": "optional per-kind parameters, clamped by the renderer"
                  },
                  "upload_ids": {
                    "type": "array",
                    "items": {},
                    "description": "ids from /api/mkt/v1/media/uploads, for image-to-video and the edit kinds"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/x402/media/audio/trial": {
      "post": {
        "operationId": "media_audio_free_post_x402_media_audio_trial",
        "summary": "AI audio render — free trial (POST)",
        "description": "FREE TRIAL of media_audio: up to 1 call per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/media/audio.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "description": "one of: audio, audio_stems, audio_isolate, audio_enhance, audio_master (aliases accepted, e.g. \"video\", \"music\", \"upscale\")"
                  },
                  "prompt": {
                    "type": "string",
                    "description": "what to render; required except for upload-driven kinds"
                  },
                  "params": {
                    "type": "object",
                    "description": "optional per-kind parameters, clamped by the renderer"
                  },
                  "upload_ids": {
                    "type": "array",
                    "items": {},
                    "description": "ids from /api/mkt/v1/media/uploads, for image-to-video and the edit kinds"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-media_audio"
        }
      }
    },
    "/x402/compute/inventory": {
      "post": {
        "operationId": "compute_inventory_post_x402_compute_inventory",
        "summary": "Animica compute inventory",
        "description": "Live capacity of the Animica compute network in one call: which GPU render kinds have miners online right now and how many, whether a registered AICF worker is serving inference, and the chain height it was measured at. Buy it BEFORE you pay for a render or an inference call, so you pick a servable kind instead of learning from a job nothing claims. Anything we could not reach reports available:false with a reason: counts are never guessed and never a zero we did not measure.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-compute_inventory"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "compute_inventory",
          "name": "Animica compute inventory",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-compute_inventory"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "fresh": {
                    "type": "boolean",
                    "description": "force a live re-probe instead of the short-lived memo (default false). Use it immediately before you commit money to a job."
                  },
                  "workloads": {
                    "type": "array",
                    "items": {},
                    "description": "up to 8 workloads to get an admission verdict for — inference, image, video, audio, or a media kind such as video_i2v or audio_master"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      },
      "get": {
        "operationId": "compute_inventory_get_x402_compute_inventory",
        "summary": "Animica compute inventory",
        "description": "Live capacity of the Animica compute network in one call: which GPU render kinds have miners online right now and how many, whether a registered AICF worker is serving inference, and the chain height it was measured at. Buy it BEFORE you pay for a render or an inference call, so you pick a servable kind instead of learning from a job nothing claims. Anything we could not reach reports available:false with a reason: counts are never guessed and never a zero we did not measure.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "fresh",
            "in": "query",
            "required": false,
            "description": "same as body.fresh, for GET callers: 1/true",
            "schema": {
              "type": "string",
              "description": "same as body.fresh, for GET callers: 1/true"
            }
          },
          {
            "name": "workloads",
            "in": "query",
            "required": false,
            "description": "same as body.workloads, comma-separated, for GET callers",
            "schema": {
              "type": "string",
              "description": "same as body.workloads, comma-separated, for GET callers"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-compute_inventory"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "compute_inventory",
          "name": "Animica compute inventory",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-compute_inventory"
        }
      }
    },
    "/x402/compute/quote": {
      "post": {
        "operationId": "compute_quote_post_x402_compute_quote",
        "summary": "Compute quote",
        "description": "Price and feasibility for ONE specific Animica compute job before you pay for it. Send {kind, prompt, quantity} and get the exact cost in atomic units, whether a GPU miner or AICF worker is online for that exact kind right now (with probe age and chain head), the endpoint and body to POST, and a pre-check of your payload. Refuses with 503 and charges nothing when nothing can serve the work. Buy this when a failed render would cost you more than the quote.\n\nPayment: $0.002068 USDC per request (2068 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-compute_quote"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "compute_quote",
          "name": "Compute quote",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002068"
          },
          "price_usd": "0.002068",
          "currency": "USDC",
          "amount_atomic": "2068",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-compute_quote"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "description": "workload to quote: inference, image, video, audio, or a canonical media kind such as video_i2v or audio_master"
                  },
                  "prompt": {
                    "type": "string",
                    "description": "the prompt you intend to submit; checked for acceptance and copied into the example body, never sent anywhere"
                  },
                  "params": {
                    "type": "object",
                    "description": "render params you intend to submit; shape-checked only"
                  },
                  "upload_ids": {
                    "type": "array",
                    "items": {},
                    "description": "upload ids for the upload-driven media kinds"
                  },
                  "quantity": {
                    "type": "integer",
                    "description": "how many of this job you intend to buy, 1..1000 (default 1)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "kind"
                ]
              }
            }
          }
        }
      },
      "get": {
        "operationId": "compute_quote_get_x402_compute_quote",
        "summary": "Compute quote",
        "description": "Price and feasibility for ONE specific Animica compute job before you pay for it. Send {kind, prompt, quantity} and get the exact cost in atomic units, whether a GPU miner or AICF worker is online for that exact kind right now (with probe age and chain head), the endpoint and body to POST, and a pre-check of your payload. Refuses with 503 and charges nothing when nothing can serve the work. Buy this when a failed render would cost you more than the quote.\n\nPayment: $0.002068 USDC per request (2068 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "description": "same as body.kind, for GET callers",
            "schema": {
              "type": "string",
              "description": "same as body.kind, for GET callers"
            }
          },
          {
            "name": "quantity",
            "in": "query",
            "required": false,
            "description": "same as body.quantity",
            "schema": {
              "type": "integer",
              "description": "same as body.quantity"
            }
          },
          {
            "name": "prompt",
            "in": "query",
            "required": false,
            "description": "same as body.prompt",
            "schema": {
              "type": "string",
              "description": "same as body.prompt"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-compute_quote"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "compute_quote",
          "name": "Compute quote",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002068"
          },
          "price_usd": "0.002068",
          "currency": "USDC",
          "amount_atomic": "2068",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-compute_quote"
        }
      }
    },
    "/x402/mining/jobs": {
      "post": {
        "operationId": "mining_jobs_post_x402_mining_jobs",
        "summary": "Miner job feed",
        "description": "Which Animica workloads a machine can earn on, in one poll. Per-kind GPU render supply, with the kinds NOBODY serves flagged as supply gaps; the proof-of-work lane off an Animica node (difficulty, thetaMicro, hashrate with unit+window, mempool depth); VRAM floor and deps per kind from the reference miner client; probed enrolment endpoints. Buy it to decide where to point GPU or hash capacity, or to size a box. Empty queues read empty, unreadable ones unreadable. No observable lane, no charge.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-mining_jobs"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "mining_jobs",
          "name": "Miner job feed",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-mining_jobs"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "description": "restrict the render matrix to one media kind, e.g. video_t2v or audio_master. Filters the render lane only, so it cannot be combined with lane=proof_of_work or lane=inference_serving"
                  },
                  "lane": {
                    "type": "string",
                    "description": "one of render, proof_of_work, inference_serving (default: all three)"
                  },
                  "attest": {
                    "type": "boolean",
                    "description": "sign the snapshot with ML-DSA-65 (FIPS 204, scheme 4099)"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      },
      "get": {
        "operationId": "mining_jobs_get_x402_mining_jobs",
        "summary": "Miner job feed",
        "description": "Which Animica workloads a machine can earn on, in one poll. Per-kind GPU render supply, with the kinds NOBODY serves flagged as supply gaps; the proof-of-work lane off an Animica node (difficulty, thetaMicro, hashrate with unit+window, mempool depth); VRAM floor and deps per kind from the reference miner client; probed enrolment endpoints. Buy it to decide where to point GPU or hash capacity, or to size a box. Empty queues read empty, unreadable ones unreadable. No observable lane, no charge.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "description": "same as body.kind, for GET callers",
            "schema": {
              "type": "string",
              "description": "same as body.kind, for GET callers"
            }
          },
          {
            "name": "lane",
            "in": "query",
            "required": false,
            "description": "same as body.lane, for GET callers",
            "schema": {
              "type": "string",
              "description": "same as body.lane, for GET callers"
            }
          },
          {
            "name": "attest",
            "in": "query",
            "required": false,
            "description": "same as body.attest (\"1\"/\"true\"), for GET callers",
            "schema": {
              "type": "string",
              "description": "same as body.attest (\"1\"/\"true\"), for GET callers"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-mining_jobs"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "mining_jobs",
          "name": "Miner job feed",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-mining_jobs"
        }
      }
    },
    "/x402/mining/jobs/open": {
      "get": {
        "operationId": "mining_jobs_free_get_x402_mining_jobs_open",
        "summary": "Miner job feed — free disclosure",
        "description": "FREE: media kinds with no renderer online right now, and how to enrol. No payment, ever.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-mining_jobs"
        }
      }
    },
    "/x402/mining/opportunity": {
      "post": {
        "operationId": "mining_opportunity_post_x402_mining_opportunity",
        "summary": "GPU opportunity router (Animica)",
        "description": "Buy this before pointing a GPU at Animica, or when you run one and need to know whether today it should mine, render or stay off. Send gpu_model, vram_gb, count, power_w and electricity_usd_kwh; get a deterministic ranking of the workloads this network can actually use right now — proof-of-work mining, image, video, audio or idle. Mining is priced from LIVE chain state (difficulty, the observed block interval, the subsidy at the current height, the ANM/USD feed): ANM/day, USD/day gross and NET of power, the break-even electricity price, and the marginal effect of one more card — which on a capped-emission chain is frequently NEGATIVE, so eight cards can net less than one. Rendering is ranked on a live renderer census: which media kinds have ZERO GPU miners online, i.e. where you would be the only supplier. Rendering gets no dollar figure on purpose — the marketplace publishes no job-arrival rate, and inventing one would be the most useful-looking number here and the only fabricated one. No model is consulted, so the same inputs rank the same way twice. Pass already_mining:true if this rig is ALREADY on Animica, or its own work is counted in both your share and the network it is divided into. Optional ML-DSA-65 attestation binds the answer to a chain height. Unreachable node: NOT charged. Dead price feed: you still get ANM/day and the census, USD null with the reason. Renderer census down: mining is still priced and the census field says why it could not be read, which is not the same fact as zero renderers.\n\nPayment: $0.002400 USDC per request (2400 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-mining_opportunity"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "mining_opportunity",
          "name": "GPU opportunity router (Animica)",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002400"
          },
          "price_usd": "0.002400",
          "currency": "USDC",
          "amount_atomic": "2400",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-mining_opportunity"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "gpu_model": {
                    "type": "string",
                    "description": "free text, e.g. \"RTX 4090\", \"RX 7900 XTX\", \"M3 Max\", \"16-core CPU\". Required unless hashrate_mhs is given."
                  },
                  "hashrate_mhs": {
                    "type": "number",
                    "description": "YOUR measured SHA3-256 rate in MH/s per unit. Overrides the table and is never derated — pass this if you have benchmarked."
                  },
                  "vram_gb": {
                    "type": "number",
                    "description": "VRAM per unit. Gates which render families are offered; omit to skip the gate entirely."
                  },
                  "count": {
                    "type": "integer",
                    "description": "how many identical units, 1..4096 (default 1)"
                  },
                  "power_w": {
                    "type": "number",
                    "description": "whole-device draw per unit in watts while working. Defaults to the table value for a matched model; without it no NET figure is produced."
                  },
                  "electricity_usd_kwh": {
                    "type": "number",
                    "description": "your electricity price in USD per kWh (default 0.15, reported as an assumption)"
                  },
                  "serving_claimants": {
                    "type": "integer",
                    "description": "how many machines you assume claim the service carve; only scales the stated carve CEILING (default 1)"
                  },
                  "already_mining": {
                    "type": "boolean",
                    "description": "true if this hardware is ALREADY mining Animica, so it is inside the measured network rate and must not be added to the denominator twice (default false)"
                  },
                  "attest": {
                    "type": "boolean",
                    "description": "return an ML-DSA-65 attestation binding this answer to the chain height (default false)"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      },
      "get": {
        "operationId": "mining_opportunity_get_x402_mining_opportunity",
        "summary": "GPU opportunity router (Animica)",
        "description": "Buy this before pointing a GPU at Animica, or when you run one and need to know whether today it should mine, render or stay off. Send gpu_model, vram_gb, count, power_w and electricity_usd_kwh; get a deterministic ranking of the workloads this network can actually use right now — proof-of-work mining, image, video, audio or idle. Mining is priced from LIVE chain state (difficulty, the observed block interval, the subsidy at the current height, the ANM/USD feed): ANM/day, USD/day gross and NET of power, the break-even electricity price, and the marginal effect of one more card — which on a capped-emission chain is frequently NEGATIVE, so eight cards can net less than one. Rendering is ranked on a live renderer census: which media kinds have ZERO GPU miners online, i.e. where you would be the only supplier. Rendering gets no dollar figure on purpose — the marketplace publishes no job-arrival rate, and inventing one would be the most useful-looking number here and the only fabricated one. No model is consulted, so the same inputs rank the same way twice. Pass already_mining:true if this rig is ALREADY on Animica, or its own work is counted in both your share and the network it is divided into. Optional ML-DSA-65 attestation binds the answer to a chain height. Unreachable node: NOT charged. Dead price feed: you still get ANM/day and the census, USD null with the reason. Renderer census down: mining is still priced and the census field says why it could not be read, which is not the same fact as zero renderers.\n\nPayment: $0.002400 USDC per request (2400 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "gpu_model",
            "in": "query",
            "required": false,
            "description": "same as body.gpu_model, for GET callers",
            "schema": {
              "type": "string",
              "description": "same as body.gpu_model, for GET callers"
            }
          },
          {
            "name": "vram_gb",
            "in": "query",
            "required": false,
            "description": "same as body.vram_gb",
            "schema": {
              "type": "number",
              "description": "same as body.vram_gb"
            }
          },
          {
            "name": "count",
            "in": "query",
            "required": false,
            "description": "same as body.count",
            "schema": {
              "type": "integer",
              "description": "same as body.count"
            }
          },
          {
            "name": "power_w",
            "in": "query",
            "required": false,
            "description": "same as body.power_w",
            "schema": {
              "type": "number",
              "description": "same as body.power_w"
            }
          },
          {
            "name": "electricity_usd_kwh",
            "in": "query",
            "required": false,
            "description": "same as body.electricity_usd_kwh",
            "schema": {
              "type": "number",
              "description": "same as body.electricity_usd_kwh"
            }
          },
          {
            "name": "hashrate_mhs",
            "in": "query",
            "required": false,
            "description": "same as body.hashrate_mhs",
            "schema": {
              "type": "number",
              "description": "same as body.hashrate_mhs"
            }
          },
          {
            "name": "serving_claimants",
            "in": "query",
            "required": false,
            "description": "same as body.serving_claimants",
            "schema": {
              "type": "integer",
              "description": "same as body.serving_claimants"
            }
          },
          {
            "name": "already_mining",
            "in": "query",
            "required": false,
            "description": "same as body.already_mining — pass already_mining=1",
            "schema": {
              "type": "boolean",
              "description": "same as body.already_mining — pass already_mining=1"
            }
          },
          {
            "name": "attest",
            "in": "query",
            "required": false,
            "description": "same as body.attest — pass attest=1",
            "schema": {
              "type": "boolean",
              "description": "same as body.attest — pass attest=1"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-mining_opportunity"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "mining_opportunity",
          "name": "GPU opportunity router (Animica)",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002400"
          },
          "price_usd": "0.002400",
          "currency": "USDC",
          "amount_atomic": "2400",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-mining_opportunity"
        }
      }
    },
    "/x402/mining/profit": {
      "post": {
        "operationId": "mining_profit_post_x402_mining_profit",
        "summary": "Animica mining profit, computed at a chain height",
        "description": "Deterministic mining P&L for Animica L1 at a named chain height. The per-block reward comes from the node's own live block template, not the published subsidy split (which is wrong by 2x on mainnet); the block interval and difficulty are measured, the ANM price is the NonKYC bid. Buy before pointing hardware here: it states the FIXED daily pot every miner shares, your share AFTER you join, and how much you dilute the incumbents. No model, no growth curve. Backend down = 503, no charge.\n\nPayment: $0.002412 USDC per request (2412 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-mining_profit"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "mining_profit",
          "name": "Animica mining profit, computed at a chain height",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002412"
          },
          "price_usd": "0.002412",
          "currency": "USDC",
          "amount_atomic": "2412",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-mining_profit"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "hashrate_hps": {
                    "type": "number",
                    "description": "raw trials per second PER UNIT, as your Animica miner reports it for this chain. Not a SHA-256 or ethash figure from another coin, and not HShare/s."
                  },
                  "gpu_model": {
                    "type": "string",
                    "description": "a LABEL returned unchanged for your records. No hashrate is looked up from it — we hold no hardware table and will not invent one."
                  },
                  "count": {
                    "type": "integer",
                    "description": "how many identical units, 1..100000 (default 1)"
                  },
                  "power_w": {
                    "type": "number",
                    "description": "wall watts PER UNIT. Omit and the electricity and net lines come back null rather than as a fabricated zero."
                  },
                  "electricity_usd_kwh": {
                    "type": "number",
                    "description": "your tariff in USD per kWh. Omit and the electricity and net lines come back null."
                  },
                  "pool_fee_pct": {
                    "type": "number",
                    "description": "pool fee you pay, 0..50 (default 0 = solo). Your assumption, not a measured value."
                  },
                  "already_mining": {
                    "type": "boolean",
                    "description": "true if this hardware is ALREADY inside the measured network hashrate, so it is not added to the denominator twice (default false)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "hashrate_hps"
                ]
              }
            }
          }
        }
      },
      "get": {
        "operationId": "mining_profit_get_x402_mining_profit",
        "summary": "Animica mining profit, computed at a chain height",
        "description": "Deterministic mining P&L for Animica L1 at a named chain height. The per-block reward comes from the node's own live block template, not the published subsidy split (which is wrong by 2x on mainnet); the block interval and difficulty are measured, the ANM price is the NonKYC bid. Buy before pointing hardware here: it states the FIXED daily pot every miner shares, your share AFTER you join, and how much you dilute the incumbents. No model, no growth curve. Backend down = 503, no charge.\n\nPayment: $0.002412 USDC per request (2412 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "hashrate_hps",
            "in": "query",
            "required": false,
            "description": "same as body.hashrate_hps, for GET callers",
            "schema": {
              "type": "number",
              "description": "same as body.hashrate_hps, for GET callers"
            }
          },
          {
            "name": "gpu_model",
            "in": "query",
            "required": false,
            "description": "same as body.gpu_model",
            "schema": {
              "type": "string",
              "description": "same as body.gpu_model"
            }
          },
          {
            "name": "count",
            "in": "query",
            "required": false,
            "description": "same as body.count",
            "schema": {
              "type": "integer",
              "description": "same as body.count"
            }
          },
          {
            "name": "power_w",
            "in": "query",
            "required": false,
            "description": "same as body.power_w",
            "schema": {
              "type": "number",
              "description": "same as body.power_w"
            }
          },
          {
            "name": "electricity_usd_kwh",
            "in": "query",
            "required": false,
            "description": "same as body.electricity_usd_kwh",
            "schema": {
              "type": "number",
              "description": "same as body.electricity_usd_kwh"
            }
          },
          {
            "name": "pool_fee_pct",
            "in": "query",
            "required": false,
            "description": "same as body.pool_fee_pct",
            "schema": {
              "type": "number",
              "description": "same as body.pool_fee_pct"
            }
          },
          {
            "name": "already_mining",
            "in": "query",
            "required": false,
            "description": "same as body.already_mining",
            "schema": {
              "type": "boolean",
              "description": "same as body.already_mining"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-mining_profit"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "mining_profit",
          "name": "Animica mining profit, computed at a chain height",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002412"
          },
          "price_usd": "0.002412",
          "currency": "USDC",
          "amount_atomic": "2412",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-mining_profit"
        }
      }
    },
    "/x402/mining/breakeven": {
      "post": {
        "operationId": "mining_breakeven_post_x402_mining_breakeven",
        "summary": "Animica mining break-even",
        "description": "Break-even for Animica mining from live chain state. The per-block miner reward is read off the node's block template, not the params file that still advertises the pre-carve figure; cadence, network hashrate and the ANM bid are measured too. Send hardware cost, watts, $/kWh and either your payout address (we count the blocks it won), your hashrate, or your share. Returns break-even days, the ANM price needed at each horizon, and every assumption named. Says so plainly when it never breaks even.\n\nPayment: $0.002400 USDC per request (2400 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-mining_breakeven"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "mining_breakeven",
          "name": "Animica mining break-even",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002400"
          },
          "price_usd": "0.002400",
          "currency": "USDC",
          "amount_atomic": "2400",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-mining_breakeven"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "hardware_cost_usd": {
                    "type": "number",
                    "description": "up-front cost of the rig in USD; 0 for hardware you already own"
                  },
                  "power_watts": {
                    "type": "number",
                    "description": "draw at the wall for the whole rig, in watts"
                  },
                  "electricity_usd_per_kwh": {
                    "type": "number",
                    "description": "what you pay per kWh, in USD"
                  },
                  "payout_address": {
                    "type": "string",
                    "description": "anim1… address or 32-byte hex digest — your share is MEASURED from the blocks it produced. Supply exactly one of payout_address, hashrate_hs or network_share_percent"
                  },
                  "hashrate_hs": {
                    "type": "number",
                    "description": "the rig's sha3-256 rate in HASHES per second (5e9 for a 5 GH/s card). Modelled as hardware being ADDED to the network"
                  },
                  "network_share_percent": {
                    "type": "number",
                    "description": "your share of block production as a percentage, if you already know it"
                  },
                  "window_blocks": {
                    "type": "integer",
                    "description": "blocks to measure a payout_address over, 20..500 (default 200)"
                  },
                  "pool_fee_percent": {
                    "type": "number",
                    "description": "fee your pool takes off mined ANM (default 0)"
                  },
                  "uptime_percent": {
                    "type": "number",
                    "description": "share of the day the rig runs; applied to both revenue and power (default 100)"
                  },
                  "other_costs_usd_per_month": {
                    "type": "number",
                    "description": "hosting, cooling, bandwidth — anything recurring that is not power (default 0)"
                  },
                  "horizons_days": {
                    "type": "array",
                    "items": {},
                    "description": "up to 6 day counts to solve the required ANM price at (default 30,90,180,365)"
                  },
                  "attest": {
                    "type": "boolean",
                    "description": "attach an ML-DSA-65 signature over the measured facts and the verdict"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "hardware_cost_usd",
                  "power_watts",
                  "electricity_usd_per_kwh"
                ]
              }
            }
          }
        }
      },
      "get": {
        "operationId": "mining_breakeven_get_x402_mining_breakeven",
        "summary": "Animica mining break-even",
        "description": "Break-even for Animica mining from live chain state. The per-block miner reward is read off the node's block template, not the params file that still advertises the pre-carve figure; cadence, network hashrate and the ANM bid are measured too. Send hardware cost, watts, $/kWh and either your payout address (we count the blocks it won), your hashrate, or your share. Returns break-even days, the ANM price needed at each horizon, and every assumption named. Says so plainly when it never breaks even.\n\nPayment: $0.002400 USDC per request (2400 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "hardware_cost_usd",
            "in": "query",
            "required": false,
            "description": "same as the body field, for GET callers",
            "schema": {
              "type": "number",
              "description": "same as the body field, for GET callers"
            }
          },
          {
            "name": "power_watts",
            "in": "query",
            "required": false,
            "description": "same as the body field",
            "schema": {
              "type": "number",
              "description": "same as the body field"
            }
          },
          {
            "name": "electricity_usd_per_kwh",
            "in": "query",
            "required": false,
            "description": "same as the body field",
            "schema": {
              "type": "number",
              "description": "same as the body field"
            }
          },
          {
            "name": "hashrate_hs",
            "in": "query",
            "required": false,
            "description": "same as the body field",
            "schema": {
              "type": "number",
              "description": "same as the body field"
            }
          },
          {
            "name": "payout_address",
            "in": "query",
            "required": false,
            "description": "same as the body field",
            "schema": {
              "type": "string",
              "description": "same as the body field"
            }
          },
          {
            "name": "horizons_days",
            "in": "query",
            "required": false,
            "description": "comma-separated day counts",
            "schema": {
              "type": "string",
              "description": "comma-separated day counts"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-mining_breakeven"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "mining_breakeven",
          "name": "Animica mining break-even",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002400"
          },
          "price_usd": "0.002400",
          "currency": "USDC",
          "amount_atomic": "2400",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-mining_breakeven"
        }
      }
    },
    "/x402/mining/compare": {
      "post": {
        "operationId": "mining_compare_post_x402_mining_compare",
        "summary": "Animica rig comparison (mine or render)",
        "description": "Buy this before spending money on GPUs for Animica, or when choosing which of several boxes to point here. POST an array of candidate rigs — gpu_model, hashrate_hps, power_w, cost_usd, vram_gb — and get them RANKED by net Animica return against live network state: the per-block reward from the node's own block template (not the published subsidy split, which overstates the miner's slice by 2x on mainnet), the measured block interval, live difficulty, and the ANM/USD bid. Per rig you get ANM/day, USD/day gross and NET of power, break-even electricity price, payback days from cost_usd, and USD/day per $1,000 of capital. Every rig ALSO gets its best non-PoW Animica use: which marketplace media kinds its VRAM clears (floors parsed live from the reference miner client, never remembered) crossed against a live census of how many GPU miners serve each kind — so a card that loses on hashrate can still win because it is the only supplier for a kind nobody serves. Rendering gets no USD figure on purpose: no job-arrival rate is published and inventing one would be the only fabricated number here. Deterministic, no model called, optional ML-DSA-65 attestation binding the ranking to a chain height. Node, renderer census or price feed unreachable: 503 with the reason, NOT charged.\n\nPayment: $0.002412 USDC per request (2412 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-mining_compare"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "mining_compare",
          "name": "Animica rig comparison (mine or render)",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002412"
          },
          "price_usd": "0.002412",
          "currency": "USDC",
          "amount_atomic": "2412",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-mining_compare"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "rigs": {
                    "type": "array",
                    "items": {},
                    "description": "1..12 candidate rigs. Each entry is an object: gpu_model (string LABEL, returned unchanged — no hashrate, wattage or VRAM is looked up from it, this product holds no hardware table), hashrate_hps (number, REQUIRED — raw trials per second per unit as YOUR Animica miner reports them for this chain, not a SHA-256/ethash benchmark and not HShare/s), power_w (number, wall watts per unit — omit and the net/payback lines come back null rather than as a fabricated zero), cost_usd (number, purchase price per unit — omit and payback comes back null), vram_gb (number — omit and the render column reports which kinds it could not confirm), count (integer, identical units, default 1). A bare JSON array body is accepted as the rigs list."
                  },
                  "electricity_usd_kwh": {
                    "type": "number",
                    "description": "your tariff in USD per kWh, shared by every rig. Omit and electricity, net and payback come back null with the reason."
                  },
                  "pool_fee_pct": {
                    "type": "number",
                    "description": "pool fee you would pay, 0..50 (default 0 = solo). YOUR assumption, carried through unchanged."
                  },
                  "attest": {
                    "type": "boolean",
                    "description": "return an ML-DSA-65 attestation binding this ranking to the chain height it was computed at (default false)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "rigs"
                ]
              }
            }
          }
        }
      },
      "get": {
        "operationId": "mining_compare_get_x402_mining_compare",
        "summary": "Animica rig comparison (mine or render)",
        "description": "Buy this before spending money on GPUs for Animica, or when choosing which of several boxes to point here. POST an array of candidate rigs — gpu_model, hashrate_hps, power_w, cost_usd, vram_gb — and get them RANKED by net Animica return against live network state: the per-block reward from the node's own block template (not the published subsidy split, which overstates the miner's slice by 2x on mainnet), the measured block interval, live difficulty, and the ANM/USD bid. Per rig you get ANM/day, USD/day gross and NET of power, break-even electricity price, payback days from cost_usd, and USD/day per $1,000 of capital. Every rig ALSO gets its best non-PoW Animica use: which marketplace media kinds its VRAM clears (floors parsed live from the reference miner client, never remembered) crossed against a live census of how many GPU miners serve each kind — so a card that loses on hashrate can still win because it is the only supplier for a kind nobody serves. Rendering gets no USD figure on purpose: no job-arrival rate is published and inventing one would be the only fabricated number here. Deterministic, no model called, optional ML-DSA-65 attestation binding the ranking to a chain height. Node, renderer census or price feed unreachable: 503 with the reason, NOT charged.\n\nPayment: $0.002412 USDC per request (2412 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "rig",
            "in": "query",
            "required": false,
            "description": "repeatable, one per candidate: `gpu_model,hashrate_hps,power_w,cost_usd,vram_gb,count`. Trailing fields and empty slots may be omitted: `RTX4090,120000,450,1600,24`.",
            "schema": {
              "type": "string",
              "description": "repeatable, one per candidate: `gpu_model,hashrate_hps,power_w,cost_usd,vram_gb,count`. Trailing fields and empty slots may be omitted: `RTX4090,120000,450,1600,24`."
            }
          },
          {
            "name": "rigs",
            "in": "query",
            "required": false,
            "description": "the body `rigs` array as a JSON string, for GET callers that would rather send JSON",
            "schema": {
              "type": "string",
              "description": "the body `rigs` array as a JSON string, for GET callers that would rather send JSON"
            }
          },
          {
            "name": "electricity_usd_kwh",
            "in": "query",
            "required": false,
            "description": "same as body.electricity_usd_kwh",
            "schema": {
              "type": "number",
              "description": "same as body.electricity_usd_kwh"
            }
          },
          {
            "name": "pool_fee_pct",
            "in": "query",
            "required": false,
            "description": "same as body.pool_fee_pct",
            "schema": {
              "type": "number",
              "description": "same as body.pool_fee_pct"
            }
          },
          {
            "name": "attest",
            "in": "query",
            "required": false,
            "description": "same as body.attest — pass attest=1",
            "schema": {
              "type": "boolean",
              "description": "same as body.attest — pass attest=1"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-mining_compare"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "mining_compare",
          "name": "Animica rig comparison (mine or render)",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002412"
          },
          "price_usd": "0.002412",
          "currency": "USDC",
          "amount_atomic": "2412",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-mining_compare"
        }
      }
    },
    "/x402/pq/sign": {
      "post": {
        "operationId": "pq_sign_post_x402_pq_sign",
        "summary": "Post-quantum document signature (ML-DSA-65)",
        "description": "Get a post-quantum ML-DSA-65 signature (FIPS 204, scheme 4099 — the same scheme the Animica L1 admits transactions with) over a document you never have to send us. Post a sha256 digest, or post a JSON payload and we canonicalise and hash it here; either way the signature covers the HASH, so the resulting envelope can be published, escrowed or put on-chain without disclosing the content. Buy this when a claim has to stay checkable by a third party years from now — a dataset manifest, a model card, an audit-log segment, a delivery receipt between two agents, the exact bytes of an agreement — because an HMAC proves nothing to anyone but its issuer and an ECDSA signature made today is retrospectively forgeable once a cryptographically-relevant quantum computer exists. You need no PQ library and no key of your own. Verification is FREE (POST /x402/pq/sign/verify) and the signing public key is FREE (GET /x402/pq/sign/pubkey), so anyone can check an envelope offline without paying us. The signed statement records whether YOU or WE computed the digest, because those are different claims. If the signer or its key is not reachable you get a 503 with the reason and are NOT charged — this endpoint has no branch that returns an unsigned envelope.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-pq_sign"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "pq_sign",
          "name": "Post-quantum document signature (ML-DSA-65)",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-pq_sign"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "digest": {
                    "type": "string",
                    "description": "64 hex characters — the 32-byte digest of your document. Send this OR payload, never both. Your document never leaves your side."
                  },
                  "payload": {
                    "type": "object",
                    "description": "a JSON value to canonicalise and SHA-256 here instead of sending a digest. Hashed and dropped: never stored, logged or returned."
                  },
                  "digest_alg": {
                    "type": "string",
                    "description": "how YOU computed digest, recorded in the signature as your declaration: sha256, sha3-256, keccak-256, blake2b-256. Omit it and the signature says sha256 with document_digest_alg_source:'assumed_default' — a default, marked as one, never presented as something you stated. With payload it must be omitted or sha256, which is what we run."
                  },
                  "label": {
                    "type": "string",
                    "description": "your own annotation for what this covers, up to 128 printable ASCII characters; signed, and marked in the envelope as the client's claim"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      },
      "get": {
        "operationId": "pq_sign_get_x402_pq_sign",
        "summary": "Post-quantum document signature (ML-DSA-65)",
        "description": "Get a post-quantum ML-DSA-65 signature (FIPS 204, scheme 4099 — the same scheme the Animica L1 admits transactions with) over a document you never have to send us. Post a sha256 digest, or post a JSON payload and we canonicalise and hash it here; either way the signature covers the HASH, so the resulting envelope can be published, escrowed or put on-chain without disclosing the content. Buy this when a claim has to stay checkable by a third party years from now — a dataset manifest, a model card, an audit-log segment, a delivery receipt between two agents, the exact bytes of an agreement — because an HMAC proves nothing to anyone but its issuer and an ECDSA signature made today is retrospectively forgeable once a cryptographically-relevant quantum computer exists. You need no PQ library and no key of your own. Verification is FREE (POST /x402/pq/sign/verify) and the signing public key is FREE (GET /x402/pq/sign/pubkey), so anyone can check an envelope offline without paying us. The signed statement records whether YOU or WE computed the digest, because those are different claims. If the signer or its key is not reachable you get a 503 with the reason and are NOT charged — this endpoint has no branch that returns an unsigned envelope.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "digest",
            "in": "query",
            "required": false,
            "description": "same as body.digest, for GET callers",
            "schema": {
              "type": "string",
              "description": "same as body.digest, for GET callers"
            }
          },
          {
            "name": "digest_alg",
            "in": "query",
            "required": false,
            "description": "same as body.digest_alg",
            "schema": {
              "type": "string",
              "description": "same as body.digest_alg"
            }
          },
          {
            "name": "label",
            "in": "query",
            "required": false,
            "description": "same as body.label",
            "schema": {
              "type": "string",
              "description": "same as body.label"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-pq_sign"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "pq_sign",
          "name": "Post-quantum document signature (ML-DSA-65)",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-pq_sign"
        }
      }
    },
    "/x402/pq/sign/verify": {
      "post": {
        "operationId": "pq_sign_free_post_x402_pq_sign_verify",
        "summary": "Verify an Animica post-quantum document signature (free)",
        "description": "FREE. Check an ML-DSA-65 envelope issued by /x402/pq/sign and get four SEPARATE facts, because they are four separate facts: valid (the signature checks out under the key carried IN the envelope — anyone can self-sign one, so this alone says nothing about us), issued_by_this_gateway (that key is ours — about the KEY, never an endorsement), is_pq_sign_envelope (the signed kind and commitment type are this product's, not another endpoint's seal over a lookalike object; null when the signature did not check out, because nothing in an unverified blob has been established), and payload_bound (the payload really is what was signed; null when that comparison was never reached). A document digest is reported as a FACT only when all of those hold; otherwise it comes back under unverified_claims and nothing is asserted about it. valid:false is an answer; a verifier we cannot run is a 503, never an accusation of forgery.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "envelope": {
                    "type": "object",
                    "description": "the envelope exactly as issued (or post the envelope object itself as the whole body)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "envelope"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-pq_sign"
        }
      }
    },
    "/x402/pq/sign/pubkey": {
      "get": {
        "operationId": "pq_sign_free_get_x402_pq_sign_pubkey",
        "summary": "Animica post-quantum document-signing public key (free)",
        "description": "FREE. The ML-DSA-65 (FIPS 204, scheme 4099) public key every /x402/pq/sign envelope is signed with, plus the domain, chain id and prehash needed to verify one offline without calling us at all.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-pq_sign"
        }
      }
    },
    "/x402/pq/envelope": {
      "post": {
        "operationId": "pq_envelope_post_x402_pq_envelope",
        "summary": "Post-quantum API response envelope",
        "description": "Seal any JSON in a post-quantum signed envelope: canonicalise (keys sorted, stable bytes), SHA3-256, then sign that digest with ML-DSA-65 (FIPS 204, scheme 4099) — the scheme the Animica L1 admits transactions with. Buy it when a response you emit must cross a broker, cache or reseller and still be provably unaltered. Proves INTEGRITY and ANIMICA ORIGIN, not that the content is true and not anyone's real-world identity. Key and verification are free. No signature, no charge.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-pq_envelope"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "pq_envelope",
          "name": "Post-quantum API response envelope",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-pq_envelope"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "payload": {
                    "type": "string",
                    "description": "the JSON value to seal — object, array, string, number, boolean or null. Sealed verbatim; nothing is normalised, rewritten or interpreted."
                  },
                  "label": {
                    "type": "string",
                    "description": "your filing tag, bound INSIDE the signature as kind \"api-response/<label>\". Up to 64 chars of [A-Za-z0-9._:- ]. Namespaced so it can never impersonate one of this gateway's own attestations."
                  },
                  "anchor_chain": {
                    "type": "boolean",
                    "description": "default false. When true the signed object also carries an observed Animica chain head {height, hash}: a lower bound on when the seal happened that this gateway cannot inflate, because a block hash cannot exist before its block. Nothing is written to the chain — the head is read from a node. If the node is unreachable the call 503s and you are NOT charged."
                  },
                  "include_canonical_form": {
                    "type": "boolean",
                    "description": "default false. Return the exact hashed bytes (only when under 8192 chars) as a debugging aid for canonicalisation interop."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "payload"
                ]
              }
            }
          }
        }
      },
      "get": {
        "operationId": "pq_envelope_get_x402_pq_envelope",
        "summary": "Post-quantum API response envelope",
        "description": "Seal any JSON in a post-quantum signed envelope: canonicalise (keys sorted, stable bytes), SHA3-256, then sign that digest with ML-DSA-65 (FIPS 204, scheme 4099) — the scheme the Animica L1 admits transactions with. Buy it when a response you emit must cross a broker, cache or reseller and still be provably unaltered. Proves INTEGRITY and ANIMICA ORIGIN, not that the content is true and not anyone's real-world identity. Key and verification are free. No signature, no charge.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "payload",
            "in": "query",
            "required": false,
            "description": "GET callers: the payload as JSON text",
            "schema": {
              "type": "string",
              "description": "GET callers: the payload as JSON text"
            }
          },
          {
            "name": "label",
            "in": "query",
            "required": false,
            "description": "same as body.label",
            "schema": {
              "type": "string",
              "description": "same as body.label"
            }
          },
          {
            "name": "anchor_chain",
            "in": "query",
            "required": false,
            "description": "true|1 to anchor to the observed chain head",
            "schema": {
              "type": "string",
              "description": "true|1 to anchor to the observed chain head"
            }
          },
          {
            "name": "include_canonical_form",
            "in": "query",
            "required": false,
            "description": "true|1 to return the exact hashed bytes",
            "schema": {
              "type": "string",
              "description": "true|1 to return the exact hashed bytes"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-pq_envelope"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "pq_envelope",
          "name": "Post-quantum API response envelope",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-pq_envelope"
        }
      }
    },
    "/x402/pq/envelope/key": {
      "get": {
        "operationId": "pq_envelope_free_get_x402_pq_envelope_key",
        "summary": "PQ envelope — ML-DSA-65 signing key (free)",
        "description": "FREE. The ML-DSA-65 (FIPS 204, scheme 4099) public key every /x402/pq/envelope response is signed with, plus its key_id. Compare key_id against an envelope to establish it was sealed by THIS gateway and not self-signed by whoever handed it to you. Lets envelopes be verified fully offline.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-pq_envelope"
        }
      }
    },
    "/x402/pq/envelope/verify": {
      "post": {
        "operationId": "pq_envelope_free_post_x402_pq_envelope_verify",
        "summary": "PQ envelope — verify an envelope (free)",
        "description": "FREE, and free on purpose. Send { envelope } as issued, optionally with { payload } to additionally prove the envelope commits to the payload you hold. Answers valid (the signature checks out under the key carried IN the envelope), payload_bound, and issued_by_this_gateway (that key is ours) as three separate facts, because they are three separate facts. Any of them is null when it could not be established — null is never a negative verdict.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "envelope": {
                    "type": "object",
                    "description": "the envelope object exactly as issued"
                  },
                  "subject": {
                    "type": "string",
                    "description": "the exact object the envelope commits to — for an envelope sealed with anchor_chain that is subject.object ({chain_head, payload}), not the bare payload"
                  },
                  "payload": {
                    "type": "string",
                    "description": "alias for subject, for the ordinary unanchored case where the two are the same thing"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "envelope"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-pq_envelope"
        }
      }
    },
    "/x402/pq/artifact": {
      "post": {
        "operationId": "pq_artifact_post_x402_pq_artifact",
        "summary": "Post-quantum artifact attestation (ML-DSA-65, chain-head pinned)",
        "description": "Bind a build to its identity with a post-quantum signature: POST {name, version, digest} and get an ML-DSA-65 manifest (FIPS 204, alg 4099/0x1003 — the current Animica L1 signature scheme) committing that name+version+digest+timestamp. Buy it after building, training or repackaging something you may later have to prove you published — an image, a wheel, a model checkpoint — or before installing one, so two attestations claiming one name+version with different digests visibly contradict. That question is not answerable from a bare digest signature, which is why this is a separate product from /x402/pq/sign. The manifest also records the Animica chain head read just before signing — or, if the node could not be reached, records that absence and its reason, inside the signature either way, so a missing pin can never be mistaken for one that was never asked for. That pin is the part nobody can move: a block hash cannot be known before its block exists, so the manifest was signed at or AFTER that height, a bound we cannot inflate and anyone can re-check on any Animica node. Nothing is written to the chain. The artifact bytes never leave your side: you send the digest your pipeline already computed (sha256:… , 0x… or bare hex; sha256/sha512/sha3/blake2b/blake3 — SHA-1 and MD5 are refused with a reason, since a collidable digest identifies no single artifact). Optional anchor: the manifest digest is committed as a record in the node data-availability store (da.put), which returns a commitment plus a Merkle inclusion proof against it. Read that for what it is — a node-local, operator-run store, NOT a block: no blob written there is committed by consensus (the live chain's headers carry an all-zero daRoot), and the store evicts (lru) and can be deleted, so the record buys retrievability and tamper-evidence, never a trustless timestamp. anchor:\"digest\" (default) records only hashes and timestamps, anchor:\"identity\" also records name and version for a public release registry, anchor:false writes nothing — and your metadata is never anchored under any setting. Anchoring is operator-gated and off unless enabled here, so the default response may carry anchored:false for that reason alone; either way you get the real machine reason and never a commitment field that reads like a proof. Set require_anchor:true and an unwritable store becomes a 503 with nothing charged instead. Verification is FREE (POST /x402/pq/artifact/verify — it also re-reads the anchor and confirms it binds the manifest) and the signing public key is FREE (GET /x402/pq/artifact/pubkey), so anyone can check an attestation offline without paying us. No model is involved anywhere: every field is your input returned unchanged, a value the signer returned, or a value our node returned.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-pq_artifact"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "pq_artifact",
          "name": "Post-quantum artifact attestation (ML-DSA-65, chain-head pinned)",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-pq_artifact"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "the artifact's identity — package, image, repo or model name, up to 200 printable ASCII characters (e.g. \"ghcr.io/acme/api\", \"meta-llama/Llama-3-8B\"). Signed."
                  },
                  "version": {
                    "type": "string",
                    "description": "the release identifier, up to 100 printable ASCII characters (e.g. \"1.4.2\", \"2026-08-22\", \"sha-9f3ac1\"). Signed."
                  },
                  "digest": {
                    "type": "string",
                    "description": "the hash of the artifact, computed by YOU: \"sha256:<hex>\", \"0x<hex>\" or bare hex. Supported: sha256, sha512, sha3-256, sha3-512, blake2b-256, blake2b-512, blake3. The artifact itself never leaves your side."
                  },
                  "digest_alg": {
                    "type": "string",
                    "description": "how you hashed it, if the digest carries no \"alg:\" prefix. Defaults from the digest length (64 hex -> sha256, 128 -> sha512) and the manifest records which of those two it was. SHA-1 and MD5 are refused."
                  },
                  "metadata": {
                    "type": "object",
                    "description": "your own JSON object about this release — build id, git commit, toolchain, licence, training run. Canonicalised and signed, capped at 8192 canonical characters. NEVER written into the anchor record under any anchor setting."
                  },
                  "anchor": {
                    "type": "string",
                    "description": "false | \"digest\" (default: records hashes and timestamps only) | \"identity\" (also records name and version). Writes a record into THIS node's data-availability store — not into a block, and evictable — so treat it as retrievable tamper-evidence, not as a timestamp authority."
                  },
                  "require_anchor": {
                    "type": "boolean",
                    "description": "default false. When true, an unwritable DA store raises 503 and charges nothing instead of returning a signed-but-unstored manifest — set this if the stored record is what you are buying. It can never be satisfied on a gateway with anchoring switched off, and that is refused at validation time rather than after a payment."
                  },
                  "include_payer": {
                    "type": "boolean",
                    "description": "default false. When true, the identity the payment verified under is signed INTO the manifest as requested_by, binding the release to the account that published it: the x402 payer address on the on-chain lane, or \"voucher:<id>\" when paid from prepaid credits (and null if neither is known). Never anchored."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "name",
                  "version",
                  "digest"
                ]
              }
            }
          }
        }
      },
      "get": {
        "operationId": "pq_artifact_get_x402_pq_artifact",
        "summary": "Post-quantum artifact attestation (ML-DSA-65, chain-head pinned)",
        "description": "Bind a build to its identity with a post-quantum signature: POST {name, version, digest} and get an ML-DSA-65 manifest (FIPS 204, alg 4099/0x1003 — the current Animica L1 signature scheme) committing that name+version+digest+timestamp. Buy it after building, training or repackaging something you may later have to prove you published — an image, a wheel, a model checkpoint — or before installing one, so two attestations claiming one name+version with different digests visibly contradict. That question is not answerable from a bare digest signature, which is why this is a separate product from /x402/pq/sign. The manifest also records the Animica chain head read just before signing — or, if the node could not be reached, records that absence and its reason, inside the signature either way, so a missing pin can never be mistaken for one that was never asked for. That pin is the part nobody can move: a block hash cannot be known before its block exists, so the manifest was signed at or AFTER that height, a bound we cannot inflate and anyone can re-check on any Animica node. Nothing is written to the chain. The artifact bytes never leave your side: you send the digest your pipeline already computed (sha256:… , 0x… or bare hex; sha256/sha512/sha3/blake2b/blake3 — SHA-1 and MD5 are refused with a reason, since a collidable digest identifies no single artifact). Optional anchor: the manifest digest is committed as a record in the node data-availability store (da.put), which returns a commitment plus a Merkle inclusion proof against it. Read that for what it is — a node-local, operator-run store, NOT a block: no blob written there is committed by consensus (the live chain's headers carry an all-zero daRoot), and the store evicts (lru) and can be deleted, so the record buys retrievability and tamper-evidence, never a trustless timestamp. anchor:\"digest\" (default) records only hashes and timestamps, anchor:\"identity\" also records name and version for a public release registry, anchor:false writes nothing — and your metadata is never anchored under any setting. Anchoring is operator-gated and off unless enabled here, so the default response may carry anchored:false for that reason alone; either way you get the real machine reason and never a commitment field that reads like a proof. Set require_anchor:true and an unwritable store becomes a 503 with nothing charged instead. Verification is FREE (POST /x402/pq/artifact/verify — it also re-reads the anchor and confirms it binds the manifest) and the signing public key is FREE (GET /x402/pq/artifact/pubkey), so anyone can check an attestation offline without paying us. No model is involved anywhere: every field is your input returned unchanged, a value the signer returned, or a value our node returned.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "name",
            "in": "query",
            "required": false,
            "description": "same as body.name, for GET callers",
            "schema": {
              "type": "string",
              "description": "same as body.name, for GET callers"
            }
          },
          {
            "name": "version",
            "in": "query",
            "required": false,
            "description": "same as body.version",
            "schema": {
              "type": "string",
              "description": "same as body.version"
            }
          },
          {
            "name": "digest",
            "in": "query",
            "required": false,
            "description": "same as body.digest",
            "schema": {
              "type": "string",
              "description": "same as body.digest"
            }
          },
          {
            "name": "digest_alg",
            "in": "query",
            "required": false,
            "description": "same as body.digest_alg",
            "schema": {
              "type": "string",
              "description": "same as body.digest_alg"
            }
          },
          {
            "name": "anchor",
            "in": "query",
            "required": false,
            "description": "same as body.anchor",
            "schema": {
              "type": "string",
              "description": "same as body.anchor"
            }
          },
          {
            "name": "require_anchor",
            "in": "query",
            "required": false,
            "description": "same as body.require_anchor (\"true\"/\"false\")",
            "schema": {
              "type": "string",
              "description": "same as body.require_anchor (\"true\"/\"false\")"
            }
          },
          {
            "name": "include_payer",
            "in": "query",
            "required": false,
            "description": "same as body.include_payer (\"true\"/\"false\")",
            "schema": {
              "type": "string",
              "description": "same as body.include_payer (\"true\"/\"false\")"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-pq_artifact"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "pq_artifact",
          "name": "Post-quantum artifact attestation (ML-DSA-65, chain-head pinned)",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-pq_artifact"
        }
      }
    },
    "/x402/pq/artifact/verify": {
      "post": {
        "operationId": "pq_artifact_free_post_x402_pq_artifact_verify",
        "summary": "Verify an Animica post-quantum artifact attestation (free)",
        "description": "FREE. Check an ML-DSA-65 artifact manifest issued by /x402/pq/artifact: the signature, the internal consistency of the signed bytes, and the release identity it binds. Supply the anchor commitment too and it re-reads the record from this node's data-availability store and confirms that record commits to THIS manifest — a record that points at different bytes is reported as such rather than counted as one. Read that check for what it is: the store is node-local and its root is not in any block, so finding the record proves this node holds bytes that bind this manifest, not that a chain witnessed them. Also reports whether THIS gateway issued it, because a valid signature under somebody else's key proves nothing about this issuer. valid:false is an answer; a verifier we cannot run is a 503, never an accusation of forgery.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "envelope": {
                    "type": "object",
                    "description": "the envelope exactly as issued (or post the envelope object itself as the whole body)"
                  },
                  "commitment": {
                    "type": "string",
                    "description": "the anchor commitment (64 hex) from anchor.commitment, to additionally re-read the stored data-availability record and check it binds this manifest"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "envelope"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-pq_artifact"
        }
      }
    },
    "/x402/pq/artifact/pubkey": {
      "get": {
        "operationId": "pq_artifact_free_get_x402_pq_artifact_pubkey",
        "summary": "Animica post-quantum artifact-signing public key (free)",
        "description": "FREE. The ML-DSA-65 (FIPS 204, scheme 4099) public key every /x402/pq/artifact manifest is signed with, plus the domain, chain id and prehash needed to verify one offline without calling us at all.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-pq_artifact"
        }
      }
    },
    "/x402/pq/identity": {
      "post": {
        "operationId": "pq_identity_post_x402_pq_identity",
        "summary": "Post-quantum agent identity certificate (ML-DSA-65) — NOT KYC",
        "description": "NOT KYC — CRYPTOGRAPHIC IDENTITY ONLY. This gateway verifies NO real-world identity, runs NO KYC/KYB/AML/sanctions/background check, and endorses nothing you claim; anyone can buy a certificate naming anything, and that disclaimer is inside the signature so it cannot be stripped. What it does prove is cryptographic: Animica signed these exact bytes at this time, and (when key_possession_proven is true) the requester held the secret half of the named key. Get a post-quantum ML-DSA-65 certificate (FIPS 204, scheme 4099 — the same scheme the Animica L1 admits transactions with) binding a self-declared agent name, an optional public key and optional self-declared claims to a signed timestamp and validity window. Buy this when two agents that have never met need a durable, publishable handle for each other: a counterparty id for an escrow row, a stable subject for a reputation record, or a signed statement of what an agent claimed about itself at the moment a deal was struck — evidence that still checks out years later, when a bearer token has expired and an ECDSA signature has become retrospectively forgeable. Send a key_proof (an envelope you self-signed with the key you are naming) and the certificate additionally states you PROVED possession of that key; omit it and the certificate says plainly that the key was only presented. Verification is FREE (POST /x402/pq/identity/verify) and the issuer public key is FREE (GET /x402/pq/identity/key), so any third party can check a certificate offline without paying us. If the signer is unreachable you get a 503 with the reason and are NOT charged.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-pq_identity"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "pq_identity",
          "name": "Post-quantum agent identity certificate (ML-DSA-65) — NOT KYC",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-pq_identity"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "agent_name": {
                    "type": "string",
                    "description": "your self-declared name, 1-128 printable ASCII characters. SELF-DECLARED and recorded as such: names are not unique, not registered, and never checked."
                  },
                  "public_key": {
                    "type": "string",
                    "description": "your ML-DSA-65 public key as 3904 hex characters (FIPS 204, scheme 4099 — the key type the Animica L1 spends with). Without key_proof the certificate records it as PRESENTED, not proven."
                  },
                  "key_proof": {
                    "type": "object",
                    "description": "proof you hold the secret half: an animica.attest/v1 envelope you self-signed, carrying payload {\"purpose\":\"animica.pq-identity/key-proof\",\"agent_name\":\"<the same name>\"} and signed within the last 3600s. Verified here before the certificate is issued; a proof that does not check out is REFUSED (400, free), never silently downgraded."
                  },
                  "claims": {
                    "type": "object",
                    "description": "up to 32 self-declared key/value claims — a flat map of strings, numbers, booleans, nulls or arrays of those. Signed under the name \"claims_self_asserted\" and endorsed by nobody. Keys using verification vocabulary (kyc, verified, licensed, ...) are flagged inside the signature as self-asserted."
                  },
                  "ttl_seconds": {
                    "type": "integer",
                    "description": "how long the certificate declares itself valid, 60-31536000 (default 2592000). Written into the signature as not_before/not_after."
                  },
                  "anchor_chain": {
                    "type": "boolean",
                    "description": "default false. When true the signed certificate also carries an observed Animica chain head {height, hash}, a lower bound on issue time that this gateway cannot move backwards. If the node is unreachable the call 503s and you are NOT charged."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "agent_name"
                ]
              }
            }
          }
        }
      },
      "get": {
        "operationId": "pq_identity_get_x402_pq_identity",
        "summary": "Post-quantum agent identity certificate (ML-DSA-65) — NOT KYC",
        "description": "NOT KYC — CRYPTOGRAPHIC IDENTITY ONLY. This gateway verifies NO real-world identity, runs NO KYC/KYB/AML/sanctions/background check, and endorses nothing you claim; anyone can buy a certificate naming anything, and that disclaimer is inside the signature so it cannot be stripped. What it does prove is cryptographic: Animica signed these exact bytes at this time, and (when key_possession_proven is true) the requester held the secret half of the named key. Get a post-quantum ML-DSA-65 certificate (FIPS 204, scheme 4099 — the same scheme the Animica L1 admits transactions with) binding a self-declared agent name, an optional public key and optional self-declared claims to a signed timestamp and validity window. Buy this when two agents that have never met need a durable, publishable handle for each other: a counterparty id for an escrow row, a stable subject for a reputation record, or a signed statement of what an agent claimed about itself at the moment a deal was struck — evidence that still checks out years later, when a bearer token has expired and an ECDSA signature has become retrospectively forgeable. Send a key_proof (an envelope you self-signed with the key you are naming) and the certificate additionally states you PROVED possession of that key; omit it and the certificate says plainly that the key was only presented. Verification is FREE (POST /x402/pq/identity/verify) and the issuer public key is FREE (GET /x402/pq/identity/key), so any third party can check a certificate offline without paying us. If the signer is unreachable you get a 503 with the reason and are NOT charged.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "agent_name",
            "in": "query",
            "required": false,
            "description": "same as body.agent_name, for GET callers",
            "schema": {
              "type": "string",
              "description": "same as body.agent_name, for GET callers"
            }
          },
          {
            "name": "public_key",
            "in": "query",
            "required": false,
            "description": "same as body.public_key",
            "schema": {
              "type": "string",
              "description": "same as body.public_key"
            }
          },
          {
            "name": "claims",
            "in": "query",
            "required": false,
            "description": "same as body.claims, as JSON object text",
            "schema": {
              "type": "string",
              "description": "same as body.claims, as JSON object text"
            }
          },
          {
            "name": "ttl_seconds",
            "in": "query",
            "required": false,
            "description": "same as body.ttl_seconds",
            "schema": {
              "type": "string",
              "description": "same as body.ttl_seconds"
            }
          },
          {
            "name": "anchor_chain",
            "in": "query",
            "required": false,
            "description": "true|1 to anchor to the observed chain head",
            "schema": {
              "type": "string",
              "description": "true|1 to anchor to the observed chain head"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-pq_identity"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "pq_identity",
          "name": "Post-quantum agent identity certificate (ML-DSA-65) — NOT KYC",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-pq_identity"
        }
      }
    },
    "/x402/pq/identity/verify": {
      "post": {
        "operationId": "pq_identity_free_post_x402_pq_identity_verify",
        "summary": "Verify an Animica post-quantum agent identity certificate (free)",
        "description": "FREE. Check an ML-DSA-65 certificate issued by /x402/pq/identity: the signature, the internal consistency of the signed bytes, the binding to the certificate body, whether THIS gateway issued it, and whether it is still inside its validity window. Restates what the certificate does and does not establish — in particular that it is NOT KYC — so a verifying agent cannot read a valid:true as an identity check. Nothing from the posted payload is returned unless the signature over it verified, and the three ISSUER-VERDICT fields — assurance level, binding and key_possession_proven — are only read from an envelope this gateway signed (issued_by_this_gateway), because anyone can self-sign a payload in this shape; a foreign envelope's versions are quoted under foreign_*_claim instead. valid:false is an answer; a verifier we cannot run is a 503, never an accusation of forgery.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "certificate_envelope": {
                    "type": "object",
                    "description": "the envelope exactly as issued, with its payload (or post the envelope object itself as the whole body)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "certificate_envelope"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-pq_identity"
        }
      }
    },
    "/x402/pq/identity/key": {
      "get": {
        "operationId": "pq_identity_free_get_x402_pq_identity_key",
        "summary": "Animica post-quantum identity-certificate issuing key (free)",
        "description": "FREE. The ML-DSA-65 (FIPS 204, scheme 4099) public key every /x402/pq/identity certificate is signed with, plus the domain, chain id and prehash needed to verify one offline without calling us at all.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-pq_identity"
        }
      }
    },
    "/x402/chain/distribution": {
      "post": {
        "operationId": "chain_distribution_post_x402_chain_distribution",
        "summary": "Animica miner distribution",
        "description": "Block-production concentration on the Animica L1 over the last N blocks: every producer with its block count and share, HHI, Gini, effective producers, top-producer share and Nakamoto coefficient at 33/50/66%, plus the same over the contiguous prior window and the delta. Deterministic, no model; every figure pinned to the block range and head it was computed at. Buy before trusting this chain's finality, or to watch concentration move. Charges nothing when producer data cannot be read.\n\nPayment: $0.002412 USDC per request (2412 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-chain_distribution"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "chain_distribution",
          "name": "Animica miner distribution",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002412"
          },
          "price_usd": "0.002412",
          "currency": "USDC",
          "amount_atomic": "2412",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-chain_distribution"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "blocks": {
                    "type": "integer",
                    "description": "window size in blocks, 20..500 (default 200). Smaller windows are refused because concentration over a handful of blocks is noise."
                  },
                  "compare": {
                    "type": "boolean",
                    "description": "also sweep the contiguous window of the same size immediately below this one and report the change (default true). false halves the node work and omits every delta."
                  },
                  "top": {
                    "type": "integer",
                    "description": "how many producer rows to return, 1..200 (default 25). Producers beyond it are aggregated, never dropped silently."
                  },
                  "margin": {
                    "type": "integer",
                    "description": "how many blocks below the head to stop, 0..1000 (default: the gateway's reorg margin). Raise it to measure a window that is already settled."
                  },
                  "attest": {
                    "type": "boolean",
                    "description": "sign the response with this gateway's ML-DSA-65 (FIPS 204, scheme 4099) key so a third party can verify the measurement offline (default false). Refuses and charges nothing if the signer is unavailable."
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      },
      "get": {
        "operationId": "chain_distribution_get_x402_chain_distribution",
        "summary": "Animica miner distribution",
        "description": "Block-production concentration on the Animica L1 over the last N blocks: every producer with its block count and share, HHI, Gini, effective producers, top-producer share and Nakamoto coefficient at 33/50/66%, plus the same over the contiguous prior window and the delta. Deterministic, no model; every figure pinned to the block range and head it was computed at. Buy before trusting this chain's finality, or to watch concentration move. Charges nothing when producer data cannot be read.\n\nPayment: $0.002412 USDC per request (2412 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "blocks",
            "in": "query",
            "required": false,
            "description": "same as body.blocks, for GET callers",
            "schema": {
              "type": "integer",
              "description": "same as body.blocks, for GET callers"
            }
          },
          {
            "name": "compare",
            "in": "query",
            "required": false,
            "description": "same as body.compare",
            "schema": {
              "type": "boolean",
              "description": "same as body.compare"
            }
          },
          {
            "name": "top",
            "in": "query",
            "required": false,
            "description": "same as body.top",
            "schema": {
              "type": "integer",
              "description": "same as body.top"
            }
          },
          {
            "name": "margin",
            "in": "query",
            "required": false,
            "description": "same as body.margin",
            "schema": {
              "type": "integer",
              "description": "same as body.margin"
            }
          },
          {
            "name": "attest",
            "in": "query",
            "required": false,
            "description": "same as body.attest",
            "schema": {
              "type": "boolean",
              "description": "same as body.attest"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-chain_distribution"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "chain_distribution",
          "name": "Animica miner distribution",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002412"
          },
          "price_usd": "0.002412",
          "currency": "USDC",
          "amount_atomic": "2412",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-chain_distribution"
        }
      }
    },
    "/x402/chain/anomalies": {
      "post": {
        "operationId": "chain_anomalies_post_x402_chain_anomalies",
        "summary": "Animica chain anomaly detector",
        "description": "Buy when something on Animica looks wrong and you need to know if it really is: an unconfirmed payment, a pool that stopped finding blocks, a bridge deciding to pause. Over recent blocks: interval outliers against the window MEDIAN, each with the count a memoryless chain produces anyway so you can tell noise from signal; producer-concentration SHIFT between halves; mempool backlog vs the chain's own cadence; empty-block runs. No model. Optional ML-DSA-65 attestation. Unreadable node: no charge.\n\nPayment: $0.002412 USDC per request (2412 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-chain_anomalies"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "chain_anomalies",
          "name": "Animica chain anomaly detector",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002412"
          },
          "price_usd": "0.002412",
          "currency": "USDC",
          "amount_atomic": "2412",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-chain_anomalies"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "blocks": {
                    "type": "integer",
                    "description": "how many recent blocks to analyse, 12..240 (default 120). Every block is really read. Budget about 200ms of node time per block with producer analysis on and about 100ms with it off — those are PADDED planning figures (the 2026-08-22 walk measured ~160ms and ~80ms, and node load has moved the real cost by ~1.5x), so a 240-block window takes tens of seconds. window.node_read_ms reports what this call actually cost."
                  },
                  "producers": {
                    "type": "boolean",
                    "description": "analyse block-production concentration and its shift across the window (default true). Set false to roughly halve the node work and the latency when you only care about intervals, empty blocks and the mempool."
                  },
                  "head_margin": {
                    "type": "integer",
                    "description": "how many blocks below the tip the window stops, 0..100. Defaults to the gateway setting; the tip is excluded because a shallow reorg can still replace it."
                  },
                  "long_median_factor": {
                    "type": "number",
                    "description": "flag an interval at or above this multiple of the window median, > 1 (default 6)"
                  },
                  "short_median_factor": {
                    "type": "number",
                    "description": "flag an interval at or below the window median divided by this, > 1 (default 8)"
                  },
                  "empty_run_blocks": {
                    "type": "integer",
                    "description": "flag a run of this many consecutive transaction-free blocks, >= 2 (default 20)"
                  },
                  "theta_jump_ratio": {
                    "type": "number",
                    "description": "flag a difficulty (thetaMicro) step of this factor or more between consecutive blocks, > 1 (default 1.5)"
                  },
                  "concentration_share": {
                    "type": "number",
                    "description": "flag when one payout address produced at least this share of the recent half, 0..1 (default 0.5)"
                  },
                  "hhi_shift": {
                    "type": "number",
                    "description": "flag when the Herfindahl index moves by at least this much between the two halves, 0..1 (default 0.15)"
                  },
                  "share_shift": {
                    "type": "number",
                    "description": "treat an address as a mover when its share changes by at least this much between halves, 0..1 (default 0.25)"
                  },
                  "producer_exit_share": {
                    "type": "number",
                    "description": "flag an address that held at least this share in one half and produced nothing in the other, 0..1 (default 0.2)"
                  },
                  "mempool_age_intervals": {
                    "type": "number",
                    "description": "flag when the oldest pending transaction has waited this many median block intervals, > 0 (default 3)"
                  },
                  "attest": {
                    "type": "boolean",
                    "description": "return an ML-DSA-65 attestation binding this report to the chain height (default false)"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      },
      "get": {
        "operationId": "chain_anomalies_get_x402_chain_anomalies",
        "summary": "Animica chain anomaly detector",
        "description": "Buy when something on Animica looks wrong and you need to know if it really is: an unconfirmed payment, a pool that stopped finding blocks, a bridge deciding to pause. Over recent blocks: interval outliers against the window MEDIAN, each with the count a memoryless chain produces anyway so you can tell noise from signal; producer-concentration SHIFT between halves; mempool backlog vs the chain's own cadence; empty-block runs. No model. Optional ML-DSA-65 attestation. Unreadable node: no charge.\n\nPayment: $0.002412 USDC per request (2412 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "blocks",
            "in": "query",
            "required": false,
            "description": "same as body.blocks, for GET callers",
            "schema": {
              "type": "integer",
              "description": "same as body.blocks, for GET callers"
            }
          },
          {
            "name": "producers",
            "in": "query",
            "required": false,
            "description": "same as body.producers",
            "schema": {
              "type": "boolean",
              "description": "same as body.producers"
            }
          },
          {
            "name": "long_median_factor",
            "in": "query",
            "required": false,
            "description": "same as body.long_median_factor",
            "schema": {
              "type": "number",
              "description": "same as body.long_median_factor"
            }
          },
          {
            "name": "short_median_factor",
            "in": "query",
            "required": false,
            "description": "same as body.short_median_factor",
            "schema": {
              "type": "number",
              "description": "same as body.short_median_factor"
            }
          },
          {
            "name": "empty_run_blocks",
            "in": "query",
            "required": false,
            "description": "same as body.empty_run_blocks",
            "schema": {
              "type": "integer",
              "description": "same as body.empty_run_blocks"
            }
          },
          {
            "name": "attest",
            "in": "query",
            "required": false,
            "description": "same as body.attest",
            "schema": {
              "type": "boolean",
              "description": "same as body.attest"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-chain_anomalies"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "chain_anomalies",
          "name": "Animica chain anomaly detector",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002412"
          },
          "price_usd": "0.002412",
          "currency": "USDC",
          "amount_atomic": "2412",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-chain_anomalies"
        }
      }
    },
    "/x402/chain/economy": {
      "post": {
        "operationId": "chain_economy_post_x402_chain_economy",
        "summary": "Animica ANM economy analyzer",
        "description": "Live ANM monetary state from the Animica L1 itself: supply and account count, the block reward the node will actually credit (not the published split, which is wrong by 2x), measured blocks per day, daily emission in ANM and as a percent of supply, network hashrate, and — when the ANM book is fresh — total network-wide mining revenue in USD per day. Buy before holding, quoting or mining ANM. Deterministic, no model. Charges nothing when the chain cannot be read.\n\nPayment: $0.002400 USDC per request (2400 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-chain_economy"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "chain_economy",
          "name": "Animica ANM economy analyzer",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002400"
          },
          "price_usd": "0.002400",
          "currency": "USDC",
          "amount_atomic": "2400",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-chain_economy"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "exclude_addresses": {
                    "type": "array",
                    "items": {},
                    "description": "up to 10 anim1… addresses (or 32-byte hex digests) whose balances are read from state and SUBTRACTED from the state total to give a circulating figure. Each deduction is itemised with the balance that was read. Omit it and circulating equals the state total, with basis:\"state_total\" and nothing deducted — this product will not guess which accounts are treasury or locked."
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      },
      "get": {
        "operationId": "chain_economy_get_x402_chain_economy",
        "summary": "Animica ANM economy analyzer",
        "description": "Live ANM monetary state from the Animica L1 itself: supply and account count, the block reward the node will actually credit (not the published split, which is wrong by 2x), measured blocks per day, daily emission in ANM and as a percent of supply, network hashrate, and — when the ANM book is fresh — total network-wide mining revenue in USD per day. Buy before holding, quoting or mining ANM. Deterministic, no model. Charges nothing when the chain cannot be read.\n\nPayment: $0.002400 USDC per request (2400 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "exclude_addresses",
            "in": "query",
            "required": false,
            "description": "same as body.exclude_addresses for GET callers, comma-separated, up to 10 entries",
            "schema": {
              "type": "string",
              "description": "same as body.exclude_addresses for GET callers, comma-separated, up to 10 entries"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-chain_economy"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "chain_economy",
          "name": "Animica ANM economy analyzer",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002400"
          },
          "price_usd": "0.002400",
          "currency": "USDC",
          "amount_atomic": "2400",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-chain_economy"
        }
      }
    },
    "/x402/market/gaps": {
      "post": {
        "operationId": "market_gaps_post_x402_market_gaps",
        "summary": "x402 opportunity finder (thin supply, with real demand evidence)",
        "description": "Buy before building or pricing an x402 service. Send an area (\"geocoding\", \"options data\"); get the capabilities inside it that few operators serve anywhere in our 18k-service index, each with its listings and, where at least 8 of them publish a usable price, a min/median/p90 band over those advertised prices. Demand appears ONLY where 30-day call and payer counts were observed; every other row is labelled supply-side only, because thin supply is not evidence of demand. Nothing matched: NOT charged.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-market_gaps"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "market_gaps",
          "name": "x402 opportunity finder (thin supply, with real demand evidence)",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-market_gaps"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "area": {
                    "type": "string",
                    "description": "the subject area to map, as free text — \"geocoding\", \"options market data\", \"pdf extraction\". A SUBJECT domain, not a hostname. Matching is lexical over merchant prose, so use the words a merchant would use."
                  },
                  "limit": {
                    "type": "integer",
                    "description": "capability rows to return, 1..12 (default 6)"
                  },
                  "min_services": {
                    "type": "integer",
                    "description": "how many services in the area sample must use a term before it counts as a capability, 1..10 (default 2). At 1 you will get one merchant's private vocabulary and its brand names."
                  },
                  "max_operators": {
                    "type": "integer",
                    "description": "a capability served by more than this many distinct operators IN THE AREA SAMPLE is not thin — excluded and counted, 1..25 (default 3)"
                  },
                  "max_suppliers": {
                    "type": "integer",
                    "description": "the real thinness test: a capability matched by more than this many services ACROSS THE WHOLE INDEX is well supplied and is excluded, 1..1000 (default 40). Raise it to see near-misses."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "area"
                ]
              }
            }
          }
        }
      },
      "get": {
        "operationId": "market_gaps_get_x402_market_gaps",
        "summary": "x402 opportunity finder (thin supply, with real demand evidence)",
        "description": "Buy before building or pricing an x402 service. Send an area (\"geocoding\", \"options data\"); get the capabilities inside it that few operators serve anywhere in our 18k-service index, each with its listings and, where at least 8 of them publish a usable price, a min/median/p90 band over those advertised prices. Demand appears ONLY where 30-day call and payer counts were observed; every other row is labelled supply-side only, because thin supply is not evidence of demand. Nothing matched: NOT charged.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "area",
            "in": "query",
            "required": false,
            "description": "same as body.area, for GET callers",
            "schema": {
              "type": "string",
              "description": "same as body.area, for GET callers"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "alias for area",
            "schema": {
              "type": "string",
              "description": "alias for area"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "same as body.limit",
            "schema": {
              "type": "integer",
              "description": "same as body.limit"
            }
          },
          {
            "name": "min_services",
            "in": "query",
            "required": false,
            "description": "same as body.min_services",
            "schema": {
              "type": "integer",
              "description": "same as body.min_services"
            }
          },
          {
            "name": "max_operators",
            "in": "query",
            "required": false,
            "description": "same as body.max_operators",
            "schema": {
              "type": "integer",
              "description": "same as body.max_operators"
            }
          },
          {
            "name": "max_suppliers",
            "in": "query",
            "required": false,
            "description": "same as body.max_suppliers",
            "schema": {
              "type": "integer",
              "description": "same as body.max_suppliers"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-market_gaps"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "market_gaps",
          "name": "x402 opportunity finder (thin supply, with real demand evidence)",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-market_gaps"
        }
      }
    },
    "/x402/market/competitors": {
      "post": {
        "operationId": "market_competitors_post_x402_market_competitors",
        "summary": "x402 competitor set and price band",
        "description": "Competitors for one x402 resource or capability, over our ~18,000-service harvest of the x402 directories plus our own unpaid 402 probes. Returns the price band (min/median/p90/n) over real listings only, price provenance per rival, whether it publishes a spec an agent can call unattended, observed 30-day demand and settlement network. Never probed reads observed:false, never a guess. Buy before pricing or listing a service, or choosing an endpoint. Charges nothing when nothing matches.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-market_competitors"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "market_competitors",
          "name": "x402 competitor set and price band",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-market_competitors"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "resource": {
                    "type": "string",
                    "description": "the http(s) URL of the x402 resource to find competitors for; its own published description supplies the query, so no capability is guessed from the path. Supply this OR capability, not both"
                  },
                  "capability": {
                    "type": "string",
                    "description": "free-text capability to compare the market for, e.g. \"web search\" or \"ethereum block by number\". Supply this OR resource, not both"
                  },
                  "limit": {
                    "type": "integer",
                    "description": "competitors to return, 1..25 (default 10)"
                  },
                  "max_price": {
                    "type": "number",
                    "description": "only compare services at or under this price in USD; unpriced listings are kept and counted, because we do not know that they breach it"
                  },
                  "callable_only": {
                    "type": "boolean",
                    "description": "only compare services that publish a call spec an agent could use unattended"
                  },
                  "include_mirrors": {
                    "type": "boolean",
                    "description": "resource mode only: also list same-description same-price duplicates, which are one operator listed twice (default true)"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      },
      "get": {
        "operationId": "market_competitors_get_x402_market_competitors",
        "summary": "x402 competitor set and price band",
        "description": "Competitors for one x402 resource or capability, over our ~18,000-service harvest of the x402 directories plus our own unpaid 402 probes. Returns the price band (min/median/p90/n) over real listings only, price provenance per rival, whether it publishes a spec an agent can call unattended, observed 30-day demand and settlement network. Never probed reads observed:false, never a guess. Buy before pricing or listing a service, or choosing an endpoint. Charges nothing when nothing matches.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "resource",
            "in": "query",
            "required": false,
            "description": "same as body.resource, for GET callers",
            "schema": {
              "type": "string",
              "description": "same as body.resource, for GET callers"
            }
          },
          {
            "name": "capability",
            "in": "query",
            "required": false,
            "description": "same as body.capability, for GET callers",
            "schema": {
              "type": "string",
              "description": "same as body.capability, for GET callers"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "alias for capability",
            "schema": {
              "type": "string",
              "description": "alias for capability"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "same as body.limit",
            "schema": {
              "type": "integer",
              "description": "same as body.limit"
            }
          },
          {
            "name": "max_price",
            "in": "query",
            "required": false,
            "description": "same as body.max_price",
            "schema": {
              "type": "number",
              "description": "same as body.max_price"
            }
          },
          {
            "name": "callable_only",
            "in": "query",
            "required": false,
            "description": "same as body.callable_only",
            "schema": {
              "type": "boolean",
              "description": "same as body.callable_only"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-market_competitors"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "market_competitors",
          "name": "x402 competitor set and price band",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-market_competitors"
        }
      }
    },
    "/x402/market/pricing": {
      "post": {
        "operationId": "market_pricing_post_x402_market_pricing",
        "summary": "x402 price optimizer (Animica index)",
        "description": "Buy this before you set or change the price of an x402 endpoint. Send a capability description; get min/median/p90 of what comparable listings in our own ~18,000-service index actually charge, a recommended price that is itself an observed ask, an exact 95% confidence interval for it from the order statistics, and the sample size it rests on. Below 8 priced comparables it refuses and charges nothing. Deterministic arithmetic over real listings — no model.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-market_pricing"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "market_pricing",
          "name": "x402 price optimizer (Animica index)",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-market_pricing"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "capability": {
                    "type": "string",
                    "description": "what the endpoint does, in the words a merchant would use — the comparable set is matched from this text. 1..600 chars."
                  },
                  "strategy": {
                    "type": "string",
                    "description": "where to sit in the observed distribution: undercut | match | premium (default match = the median ask)"
                  },
                  "target_percentile": {
                    "type": "integer",
                    "description": "exact percentile of the ask distribution to target, 1..99. Overrides strategy."
                  },
                  "current_price_usd": {
                    "type": "number",
                    "description": "what you charge today, if anything. Returns your exact rank in the comparable set and the delta to the recommendation. Max 100."
                  },
                  "cost_usd": {
                    "type": "number",
                    "description": "your marginal cost per call. Acts as a hard floor on the recommendation and reports the margin at the recommended price; a market that prices below your cost is itself the finding."
                  },
                  "comparables": {
                    "type": "integer",
                    "description": "how many comparable listings to return, 1..25 (default 10)"
                  },
                  "attest": {
                    "type": "boolean",
                    "description": "return an ML-DSA-65 attestation binding the recommendation to the index snapshot it was computed from (default false)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "capability"
                ]
              }
            }
          }
        }
      },
      "get": {
        "operationId": "market_pricing_get_x402_market_pricing",
        "summary": "x402 price optimizer (Animica index)",
        "description": "Buy this before you set or change the price of an x402 endpoint. Send a capability description; get min/median/p90 of what comparable listings in our own ~18,000-service index actually charge, a recommended price that is itself an observed ask, an exact 95% confidence interval for it from the order statistics, and the sample size it rests on. Below 8 priced comparables it refuses and charges nothing. Deterministic arithmetic over real listings — no model.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "capability",
            "in": "query",
            "required": false,
            "description": "same as body.capability, for GET callers",
            "schema": {
              "type": "string",
              "description": "same as body.capability, for GET callers"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "alias of capability",
            "schema": {
              "type": "string",
              "description": "alias of capability"
            }
          },
          {
            "name": "strategy",
            "in": "query",
            "required": false,
            "description": "same as body.strategy",
            "schema": {
              "type": "string",
              "description": "same as body.strategy"
            }
          },
          {
            "name": "target_percentile",
            "in": "query",
            "required": false,
            "description": "same as body.target_percentile",
            "schema": {
              "type": "integer",
              "description": "same as body.target_percentile"
            }
          },
          {
            "name": "current_price_usd",
            "in": "query",
            "required": false,
            "description": "same as body.current_price_usd",
            "schema": {
              "type": "number",
              "description": "same as body.current_price_usd"
            }
          },
          {
            "name": "cost_usd",
            "in": "query",
            "required": false,
            "description": "same as body.cost_usd",
            "schema": {
              "type": "number",
              "description": "same as body.cost_usd"
            }
          },
          {
            "name": "comparables",
            "in": "query",
            "required": false,
            "description": "same as body.comparables",
            "schema": {
              "type": "integer",
              "description": "same as body.comparables"
            }
          },
          {
            "name": "attest",
            "in": "query",
            "required": false,
            "description": "same as body.attest — pass attest=1",
            "schema": {
              "type": "boolean",
              "description": "same as body.attest — pass attest=1"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-market_pricing"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "market_pricing",
          "name": "x402 price optimizer (Animica index)",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-market_pricing"
        }
      }
    },
    "/x402/market/reliability": {
      "post": {
        "operationId": "market_reliability_post_x402_market_reliability",
        "summary": "x402 endpoint reliability — what we observed",
        "description": "Before you pay an x402 endpoint you have never called, buy what we observed when WE called it: the outcome of our own unpaid probe, when we ran it, whether it answered a correct 402 with readable payment terms, and whether it publishes a call spec you can build a request from. Never probed returns observed:false — an honest unknown, never an invented uptime figure. Optional ML-DSA-65 attestation. If we hold no record of the URL at all, you are not charged.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-market_reliability"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "market_reliability",
          "name": "x402 endpoint reliability — what we observed",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-market_reliability"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "resource": {
                    "type": "string",
                    "description": "the absolute http(s) URL of the x402 endpoint to report on, e.g. https://api.example.com/x402/thing"
                  },
                  "attest": {
                    "type": "boolean",
                    "description": "return the observation inside an ML-DSA-65 signed envelope (scheme 4099) bound to an Animica chain height, verifiable offline (default false). If it cannot be produced, the call fails and you are not charged."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "resource"
                ]
              }
            }
          }
        }
      },
      "get": {
        "operationId": "market_reliability_get_x402_market_reliability",
        "summary": "x402 endpoint reliability — what we observed",
        "description": "Before you pay an x402 endpoint you have never called, buy what we observed when WE called it: the outcome of our own unpaid probe, when we ran it, whether it answered a correct 402 with readable payment terms, and whether it publishes a call spec you can build a request from. Never probed returns observed:false — an honest unknown, never an invented uptime figure. Optional ML-DSA-65 attestation. If we hold no record of the URL at all, you are not charged.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "resource",
            "in": "query",
            "required": false,
            "description": "same as body.resource, for GET callers",
            "schema": {
              "type": "string",
              "description": "same as body.resource, for GET callers"
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "alias of resource",
            "schema": {
              "type": "string",
              "description": "alias of resource"
            }
          },
          {
            "name": "attest",
            "in": "query",
            "required": false,
            "description": "same as body.attest — pass attest=1",
            "schema": {
              "type": "string",
              "description": "same as body.attest — pass attest=1"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-market_reliability"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "market_reliability",
          "name": "x402 endpoint reliability — what we observed",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-market_reliability"
        }
      }
    },
    "/x402/chain/signing-policy": {
      "post": {
        "operationId": "chain_signing_policy_post_x402_chain_signing_policy",
        "summary": "Animica signature-scheme advisory",
        "description": "Which Animica signature scheme you can actually build on. The chain reports three schemes enabled, but two are deprecated commitment stubs the node refuses to make keys for — and 4098 wallets are already stranded on one. Returns the live scheme list plus both id spaces (consensus schemeId and PQ algorithm id 0x1003), key and signature byte sizes, and a usable/not verdict per scheme with its evidence. Buy before generating a key or writing a signer. No model. Free when the chain cannot be read.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-chain_signing_policy"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "chain_signing_policy",
          "name": "Animica signature-scheme advisory",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-chain_signing_policy"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "include_disabled": {
                    "type": "boolean",
                    "description": "include schemes the chain reports as disabled (default false). Useful when auditing why a historical transaction verifies but a new one is refused."
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      },
      "get": {
        "operationId": "chain_signing_policy_get_x402_chain_signing_policy",
        "summary": "Animica signature-scheme advisory",
        "description": "Which Animica signature scheme you can actually build on. The chain reports three schemes enabled, but two are deprecated commitment stubs the node refuses to make keys for — and 4098 wallets are already stranded on one. Returns the live scheme list plus both id spaces (consensus schemeId and PQ algorithm id 0x1003), key and signature byte sizes, and a usable/not verdict per scheme with its evidence. Buy before generating a key or writing a signer. No model. Free when the chain cannot be read.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "include_disabled",
            "in": "query",
            "required": false,
            "description": "same as body.include_disabled for GET callers (\"1\"/\"true\" to include)",
            "schema": {
              "type": "string",
              "description": "same as body.include_disabled for GET callers (\"1\"/\"true\" to include)"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-chain_signing_policy"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "chain_signing_policy",
          "name": "Animica signature-scheme advisory",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-chain_signing_policy"
        }
      }
    },
    "/x402/chain/identity": {
      "post": {
        "operationId": "chain_identity_post_x402_chain_identity",
        "summary": "Animica chain identity and replay-protection check",
        "description": "Verify you are on real Animica mainnet, and which chain id to sign with. Animica answers that question with TWO numbers: the native chain is id 1, while the EVM compatibility facade reports 149 (eth_chainId 0x95, net_version \"149\"). A wallet porting Ethereum tooling signs with the wrong one. Returns both, the disagreement named, plus genesis hash, fork id, policy hash and the built-in consensus checkpoints a light client pins against. All read live. No model.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-chain_identity"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "chain_identity",
          "name": "Animica chain identity and replay-protection check",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-chain_identity"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "expect_chain_id": {
                    "type": "integer",
                    "description": "the chain id you BELIEVE you are talking to. When given, the response carries an explicit matches_native / matches_evm_facade verdict instead of leaving you to compare two numbers yourself — which is the comparison people get wrong."
                  },
                  "expect_genesis_hash": {
                    "type": "string",
                    "description": "the genesis hash you have pinned (0x… 32 bytes). Compared byte-for-byte; a mismatch is reported as a hard failure, since it means this is not the chain you think it is."
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      },
      "get": {
        "operationId": "chain_identity_get_x402_chain_identity",
        "summary": "Animica chain identity and replay-protection check",
        "description": "Verify you are on real Animica mainnet, and which chain id to sign with. Animica answers that question with TWO numbers: the native chain is id 1, while the EVM compatibility facade reports 149 (eth_chainId 0x95, net_version \"149\"). A wallet porting Ethereum tooling signs with the wrong one. Returns both, the disagreement named, plus genesis hash, fork id, policy hash and the built-in consensus checkpoints a light client pins against. All read live. No model.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "expect_chain_id",
            "in": "query",
            "required": false,
            "description": "same as body.expect_chain_id for GET callers",
            "schema": {
              "type": "string",
              "description": "same as body.expect_chain_id for GET callers"
            }
          },
          {
            "name": "expect_genesis_hash",
            "in": "query",
            "required": false,
            "description": "same as body.expect_genesis_hash for GET callers",
            "schema": {
              "type": "string",
              "description": "same as body.expect_genesis_hash for GET callers"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-chain_identity"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "chain_identity",
          "name": "Animica chain identity and replay-protection check",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-chain_identity"
        }
      }
    },
    "/x402/chain/health": {
      "post": {
        "operationId": "chain_health_post_x402_chain_health",
        "summary": "Animica chain health, without the peer list",
        "description": "Whether the Animica L1 is healthy enough to transact on right now: head height and hash, sync lag (blocks vs headers), difficulty and PoIES theta, measured network hashrate with its window and estimator named, mempool depth, and peer count as a RANGE across every source — because four sources on this node disagree at the same instant. Publishes NO peer IP, peer id or relay attribution. Read live, no model, free when the chain cannot be read.\n\nPayment: $0.002100 USDC per request (2100 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-chain_health"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "chain_health",
          "name": "Animica chain health, without the peer list",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002100"
          },
          "price_usd": "0.002100",
          "currency": "USDC",
          "amount_atomic": "2100",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-chain_health"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "max_sync_lag_blocks": {
                    "type": "integer",
                    "description": "how many blocks of headers-ahead-of-blocks you are willing to tolerate (default 3). The response carries an explicit healthy true/false against YOUR threshold rather than leaving you to pick one from raw numbers."
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      },
      "get": {
        "operationId": "chain_health_get_x402_chain_health",
        "summary": "Animica chain health, without the peer list",
        "description": "Whether the Animica L1 is healthy enough to transact on right now: head height and hash, sync lag (blocks vs headers), difficulty and PoIES theta, measured network hashrate with its window and estimator named, mempool depth, and peer count as a RANGE across every source — because four sources on this node disagree at the same instant. Publishes NO peer IP, peer id or relay attribution. Read live, no model, free when the chain cannot be read.\n\nPayment: $0.002100 USDC per request (2100 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "max_sync_lag_blocks",
            "in": "query",
            "required": false,
            "description": "same as body.max_sync_lag_blocks for GET callers",
            "schema": {
              "type": "string",
              "description": "same as body.max_sync_lag_blocks for GET callers"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-chain_health"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "chain_health",
          "name": "Animica chain health, without the peer list",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002100"
          },
          "price_usd": "0.002100",
          "currency": "USDC",
          "amount_atomic": "2100",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-chain_health"
        }
      }
    },
    "/x402/tx/preflight": {
      "post": {
        "operationId": "tx_preflight_post_x402_tx_preflight",
        "summary": "Animica transaction preflight — decode and admission dry-run",
        "description": "Find out why an Animica transaction would be rejected BEFORE you broadcast it. Decodes your canonical CBOR {body, sigs} envelope, returns the normalised fields and the CANONICAL HASH you are about to sign, then asks the node whether it would admit the transaction and why not. Both calls are read-only: nothing is inserted into the mempool and nothing is broadcast. Built for people writing Animica signers, where the alternative feedback loop is broadcast-and-see. No model.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-tx_preflight"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "tx_preflight",
          "name": "Animica transaction preflight — decode and admission dry-run",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-tx_preflight"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "raw_tx": {
                    "type": "string",
                    "description": "the transaction as hex, 0x-prefixed or not. Animica expects canonical CBOR of {body, sigs} with strictly-increasing map keys — non-canonical key order is the most common first failure and the decoder names it explicitly."
                  },
                  "skip_admission": {
                    "type": "boolean",
                    "description": "decode only, skipping the admission dry-run (default false). Useful when you are iterating on encoding and do not yet have signatures attached."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "raw_tx"
                ]
              }
            }
          }
        }
      },
      "get": {
        "operationId": "tx_preflight_get_x402_tx_preflight",
        "summary": "Animica transaction preflight — decode and admission dry-run",
        "description": "Find out why an Animica transaction would be rejected BEFORE you broadcast it. Decodes your canonical CBOR {body, sigs} envelope, returns the normalised fields and the CANONICAL HASH you are about to sign, then asks the node whether it would admit the transaction and why not. Both calls are read-only: nothing is inserted into the mempool and nothing is broadcast. Built for people writing Animica signers, where the alternative feedback loop is broadcast-and-see. No model.\n\nPayment: $0.001800 USDC per request (1800 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "raw_tx",
            "in": "query",
            "required": false,
            "description": "same as body.raw_tx for GET callers",
            "schema": {
              "type": "string",
              "description": "same as body.raw_tx for GET callers"
            }
          },
          {
            "name": "skip_admission",
            "in": "query",
            "required": false,
            "description": "same as body.skip_admission (\"1\"/\"true\")",
            "schema": {
              "type": "string",
              "description": "same as body.skip_admission (\"1\"/\"true\")"
            }
          },
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-tx_preflight"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "tx_preflight",
          "name": "Animica transaction preflight — decode and admission dry-run",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001800"
          },
          "price_usd": "0.001800",
          "currency": "USDC",
          "amount_atomic": "1800",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-tx_preflight"
        }
      }
    },
    "/x402/alpha/risk": {
      "post": {
        "operationId": "alpha_risk_post_x402_alpha_risk",
        "summary": "Portfolio risk engine — deterministic, bring your own data",
        "description": "Value at Risk, expected shortfall, drawdown, correlation matrix, concentration and RISK CONTRIBUTION for a portfolio you supply as weights plus return series. Every figure is deterministic arithmetic, reproducible byte-for-byte, with no model involved and no confidence score invented. Risk contribution is the one that changes decisions: a 60/40 book is often a 50/50 risk book. Your positions are never stored and no keys or venue credentials are ever required.\n\nPayment: $0.006000 USDC per request (6000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-alpha_risk"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "alpha_risk",
          "name": "Portfolio risk engine — deterministic, bring your own data",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.006000"
          },
          "price_usd": "0.006000",
          "currency": "USDC",
          "amount_atomic": "6000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-alpha_risk"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "positions": {
                    "type": "object",
                    "description": "up to 64 positions keyed by name: {\"BTC\": {\"weight\": 0.6, \"returns\": [...]}}. Supply either returns[] (simple, oldest first) or prices[] and we derive them. At least 20 observations per position, and every series must cover the SAME periods — misaligned series make every correlation meaningless. Negative weight is a short."
                  },
                  "confidence": {
                    "type": "number",
                    "description": "VaR/ES confidence level in (0,1), default 0.95. 0.99 needs a longer series to mean anything."
                  },
                  "periods_per_year": {
                    "type": "integer",
                    "description": "periods per year for annualisation (252 daily, 8760 hourly, 52 weekly). Omit it and nothing is annualised — we do not guess the frequency of a series we did not collect, because a daily series annualised as hourly is wrong by about 5x and looks plausible."
                  },
                  "portfolio_value_usd": {
                    "type": "number",
                    "description": "total book value; when given, VaR and expected shortfall are also returned in dollars."
                  },
                  "data_timestamp": {
                    "type": "string",
                    "description": "ISO timestamp of the most recent observation. Carried through to provenance so an agent can judge how old the analysis is."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "positions"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/alpha/backtest": {
      "post": {
        "operationId": "alpha_backtest_post_x402_alpha_backtest",
        "summary": "Deterministic backtest with a structural look-ahead guarantee",
        "description": "Backtest a strategy against a price series you supply, with costs, a buy-and-hold benchmark, and a look-ahead guarantee that is structural rather than promised: the strategy is handed a truncated copy of the series and fills at the NEXT bar, so it cannot read the future. Strategies come from a closed vocabulary interpreted by our code — no generated code is ever executed. Returns equity curve, Sharpe, Sortino, max drawdown, profit factor, turnover and costs.\n\nPayment: $0.009000 USDC per request (9000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-alpha_backtest"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "alpha_backtest",
          "name": "Deterministic backtest with a structural look-ahead guarantee",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.009000"
          },
          "price_usd": "0.009000",
          "currency": "USDC",
          "amount_atomic": "9000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-alpha_backtest"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "bars": {
                    "type": "array",
                    "items": {},
                    "description": "price bars oldest first, up to 20000: [{\"t\": 1700000000, \"close\": 100.5}]. `t` is optional but when present must be strictly increasing — out-of-order or duplicated bars are refused rather than sorted, because sorting hides that your data source is wrong."
                  },
                  "strategy": {
                    "type": "object",
                    "description": "a strategy from the closed vocabulary, e.g. {\"kind\":\"sma_cross\",\"params\":{\"fast\":10,\"slow\":30}}. GET /x402/alpha/strategies lists every kind and its parameter ranges, free."
                  },
                  "costs": {
                    "type": "object",
                    "description": "per-side costs in basis points: {\"fee_bps\":10,\"spread_bps\":5,\"slippage_bps\":5}. Defaults are deliberately unflattering. Setting them all to zero is allowed and warned about."
                  },
                  "periods_per_year": {
                    "type": "integer",
                    "description": "for annualising Sharpe/Sortino/CAGR (252 daily, 8760 hourly). Omit and nothing is annualised."
                  },
                  "allow_short": {
                    "type": "boolean",
                    "description": "permit negative positions (default false)"
                  },
                  "stop_loss_pct": {
                    "type": "number",
                    "description": "exit when the position is down this fraction from entry, e.g. 0.05"
                  },
                  "take_profit_pct": {
                    "type": "number",
                    "description": "exit when up this fraction from entry"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "bars",
                  "strategy"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/alpha/strategies": {
      "get": {
        "operationId": "alpha_backtest_free_get_x402_alpha_strategies",
        "summary": "Alpha strategy vocabulary — free",
        "description": "Every strategy kind /x402/alpha/backtest accepts, with parameter names, types and valid ranges. Free: a closed vocabulary is only useful to an agent if it can read it before paying.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-alpha_backtest"
        }
      }
    },
    "/x402/train/quote": {
      "post": {
        "operationId": "train_quote_post_x402_train_quote",
        "summary": "Animica Train & Earn — training quote",
        "description": "Price a distributed model-training run before buying it. Send the dataset, the objective and the budget; get back a signed, expiring quote with the exact plan the budget buys: strategy, number of candidate models or federated rounds, worker redundancy, the verification regime, the acceptance threshold, the full USDC breakdown (worker pool / verification / protocol fee / refundable remainder) and an honest completion estimate based on the workers actually online. Quotes are bound to the request: change anything and the quote no longer applies.\n\nPayment: $0.001723 USDC per request (1723 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-train_quote"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "train_quote",
          "name": "Animica Train & Earn — training quote",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001723"
          },
          "price_usd": "0.001723",
          "currency": "USDC",
          "amount_atomic": "1723",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-train_quote"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "task": {
                    "type": "string",
                    "description": "training method: linear_head | lora_head (default linear_head)"
                  },
                  "base_model": {
                    "type": "string",
                    "description": "frozen feature encoder (only all-MiniLM-L6-v2)"
                  },
                  "dataset": {
                    "type": "object",
                    "description": "{\"texts\":[...],\"labels\":[...]} inline, or {\"dataset_id\":\"ds_...\"}"
                  },
                  "budget": {
                    "type": "object",
                    "description": "{\"amount\":\"1.00\",\"currency\":\"USDC\"}"
                  },
                  "requirements": {
                    "type": "object",
                    "description": "{\"target_metric\":\"accuracy\",\"target_score\":0.92,\"max_duration_seconds\":3600}"
                  },
                  "privacy_mode": {
                    "type": "string",
                    "description": "PUBLIC_DISTRIBUTED | PRIVATE_VERIFIED_WORKERS | LOCAL_ONLY"
                  },
                  "strategy": {
                    "type": "string",
                    "description": "population_search | federated_rounds"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "dataset"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/train/runtime.js": {
      "get": {
        "operationId": "train_quote_free_get_x402_train_runtime_js",
        "summary": "Animica Train & Earn — training quote — free disclosure",
        "description": "FREE. The deterministic training runtime browsers and phones execute, generated from the same source the coordinator verifies with. Its sha256 is in the ETag and in GET /x402/train/capabilities.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-train_quote"
        }
      }
    },
    "/x402/train/capabilities": {
      "get": {
        "operationId": "train_quote_free_get_x402_train_capabilities",
        "summary": "Animica Train & Earn — training quote — free disclosure",
        "description": "FREE. Everything an agent needs to decide whether to buy training here: supported methods, model families, limits, privacy modes, pricing endpoints, live worker counts.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-train_quote"
        }
      }
    },
    "/x402/train/worker/register": {
      "post": {
        "operationId": "train_quote_free_post_x402_train_worker_register",
        "summary": "Animica Train & Earn — training quote — free disclosure",
        "description": "FREE. Register a training worker. Send {worker_id, secret, capabilities, benchmark}. GET /x402/train/capabilities carries the benchmark spec; the coordinator recomputes its answer, so an unverified device is registered but scheduled for nothing.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-train_quote"
        }
      }
    },
    "/x402/train/worker/heartbeat": {
      "post": {
        "operationId": "train_quote_free_post_x402_train_worker_heartbeat",
        "summary": "Animica Train & Earn — training quote — free disclosure",
        "description": "FREE. Keep a worker marked online and update its battery/thermal state. A worker that stops heartbeating simply stops being scheduled.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-train_quote"
        }
      }
    },
    "/x402/train/worker/claim": {
      "post": {
        "operationId": "train_quote_free_post_x402_train_worker_claim",
        "summary": "Animica Train & Earn — training quote — free disclosure",
        "description": "FREE. Ask for a training task. Returns null when there is nothing this device may do — a normal answer, not an error.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-train_quote"
        }
      }
    },
    "/x402/train/worker/submit": {
      "post": {
        "operationId": "train_quote_free_post_x402_train_worker_submit",
        "summary": "Animica Train & Earn — training quote — free disclosure",
        "description": "FREE. Submit a completed training task: {worker_id, secret, assignment_id, token, artifact_b64, digest, trace, metrics}. The artifact is hashed and bound to the assignment; verification runs asynchronously.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-train_quote"
        }
      }
    },
    "/x402/train/worker/release": {
      "post": {
        "operationId": "train_quote_free_post_x402_train_worker_release",
        "summary": "Animica Train & Earn — training quote — free disclosure",
        "description": "FREE. Give back a lease you cannot finish. Costs nothing and is strictly better for everyone than letting it time out.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-train_quote"
        }
      }
    },
    "/x402/train/worker/{worker_id}": {
      "get": {
        "operationId": "train_quote_free_get_x402_train_worker",
        "summary": "Animica Train & Earn — training quote — free disclosure",
        "description": "FREE. A worker's standing, verified contributions and earnings. Public: a worker network whose payout arithmetic is private is one nobody should join.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "worker_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-train_quote"
        }
      }
    },
    "/x402/train/artifact/{hash}": {
      "get": {
        "operationId": "train_quote_free_get_x402_train_artifact",
        "summary": "Animica Train & Earn — training quote — free disclosure",
        "description": "FREE. Content-addressed artifact download. Verify the sha256 of what you receive against the hash you asked for before using it.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "hash",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-train_quote"
        }
      }
    },
    "/x402/train/jobs/{job_id}": {
      "get": {
        "operationId": "train_quote_free_get_x402_train_jobs",
        "summary": "Animica Train & Earn — training quote — free disclosure",
        "description": "FREE. Full status of a training job: state, progress, verification and aggregation status, accounting that reconciles, and the resulting model.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "job_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-train_quote"
        }
      }
    },
    "/x402/model/{model_id}": {
      "get": {
        "operationId": "train_quote_free_get_x402_model",
        "summary": "Animica Train & Earn — training quote — free disclosure",
        "description": "FREE. A model version from the Animica registry, with its evaluation and deployment state.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "model_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-train_quote"
        }
      }
    },
    "/x402/model/{model_id}/provenance": {
      "get": {
        "operationId": "train_quote_free_get_x402_model_provenance",
        "summary": "Animica Train & Earn — training quote — free disclosure",
        "description": "FREE. The full machine-readable provenance chain: every version, the job that produced it, its contributors, its dataset lineage and its evaluation.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "model_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-train_quote"
        }
      }
    },
    "/x402/train/models": {
      "get": {
        "operationId": "train_quote_free_get_x402_train_models",
        "summary": "Animica Train & Earn — training quote — free disclosure",
        "description": "FREE. Every model the training network has produced, newest first.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-train_quote"
        }
      }
    },
    "/x402/train/network": {
      "get": {
        "operationId": "train_quote_free_get_x402_train_network",
        "summary": "Animica Train & Earn — training quote — free disclosure",
        "description": "FREE. Live training network statistics — what the Serve & Earn dashboard renders.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-train_quote"
        }
      }
    },
    "/x402/train/admin": {
      "post": {
        "operationId": "train_quote_free_post_x402_train_admin",
        "summary": "Animica Train & Earn — training quote — free disclosure",
        "description": "Operator controls (bearer token): pause/resume training, quarantine a worker, disable a model or dataset, stop a job, freeze settlement. Every action is written to the audit log.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-train_quote"
        }
      }
    },
    "/x402/train/policy": {
      "post": {
        "operationId": "train_quote_free_post_x402_train_policy",
        "summary": "Animica Train & Earn — training quote — free disclosure",
        "description": "FREE. Create or update an automatic-retraining policy for a model you own, or fund it. Policies are PREPAID: they can never spend money that has not already been deposited, and every cap is enforced arithmetically.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-train_quote"
        }
      }
    },
    "/x402/train/policy/{policy_id}": {
      "get": {
        "operationId": "train_quote_free_get_x402_train_policy",
        "summary": "Animica Train & Earn — training quote — free disclosure",
        "description": "FREE. A retraining policy, its caps, its actual spend today and this month, and exactly why it would or would not fire right now.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "name": "policy_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-train_quote"
        }
      }
    },
    "/x402/train/quote/trial": {
      "post": {
        "operationId": "train_quote_free_post_x402_train_quote_trial",
        "summary": "Animica Train & Earn — training quote — free trial (POST)",
        "description": "FREE TRIAL of train_quote: up to 5 calls per client per UTC day, no payment. Runs the same code as the paid endpoint and returns the same response shape, so you can check the service is live and judge the output before paying. When the quota is spent this answers 402-equivalent guidance pointing at /x402/train/quote.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "task": {
                    "type": "string",
                    "description": "training method: linear_head | lora_head (default linear_head)"
                  },
                  "base_model": {
                    "type": "string",
                    "description": "frozen feature encoder (only all-MiniLM-L6-v2)"
                  },
                  "dataset": {
                    "type": "object",
                    "description": "{\"texts\":[...],\"labels\":[...]} inline, or {\"dataset_id\":\"ds_...\"}"
                  },
                  "budget": {
                    "type": "object",
                    "description": "{\"amount\":\"1.00\",\"currency\":\"USDC\"}"
                  },
                  "requirements": {
                    "type": "object",
                    "description": "{\"target_metric\":\"accuracy\",\"target_score\":0.92,\"max_duration_seconds\":3600}"
                  },
                  "privacy_mode": {
                    "type": "string",
                    "description": "PUBLIC_DISTRIBUTED | PRIVATE_VERIFIED_WORKERS | LOCAL_ONLY"
                  },
                  "strategy": {
                    "type": "string",
                    "description": "population_search | federated_rounds"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "dataset"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-train_quote"
        }
      }
    },
    "/x402/train": {
      "post": {
        "operationId": "train_run_post_x402_train",
        "summary": "Animica Train & Earn — buy a distributed training run",
        "description": "Pay in USDC and the Animica compute network trains a model for you. The request becomes a durable job: the planner turns your budget into a search (independent candidate models, or federated rounds over sharded data), the scheduler dispatches real training tasks to phones, browsers and desktops that advertised the capability and passed a reproducible benchmark, every returned update is verified (assignment binding, update norm, canary scoring, checkpoint trace, and a randomised deterministic replay), accepted work is robustly aggregated or best-of selected, and the candidate must beat the baseline on a held-out split no worker has ever seen before anything ships. You get a job id immediately and poll GET /x402/train/jobs/{job_id}; a successful job produces an immutable model version with full provenance that is callable through POST /x402/model/{id}/infer. Unspent budget is refunded, and the accounting reconciles to the atomic unit.\n\nPayment: $1 USDC per request (1000000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-train_run"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "train_run",
          "name": "Animica Train & Earn — buy a distributed training run",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "1"
          },
          "price_usd": "1",
          "currency": "USDC",
          "amount_atomic": "1000000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "readiness re-checked, then settled, then executed (retry + signed receipt on downstream failure)",
          "documentation": "https://animica.dev/x402#product-train_run"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "quote_id": {
                    "type": "string",
                    "description": "a quote from POST /x402/train/quote; without one the request is priced at the default budget"
                  },
                  "task": {
                    "type": "string",
                    "description": "linear_head | lora_head"
                  },
                  "dataset": {
                    "type": "object",
                    "description": "{\"texts\":[...],\"labels\":[...]}"
                  },
                  "budget": {
                    "type": "object",
                    "description": "{\"amount\":\"1.00\",\"currency\":\"USDC\"}"
                  },
                  "requirements": {
                    "type": "object",
                    "description": "{\"target_metric\":\"accuracy\",\"target_score\":0.92,\"max_duration_seconds\":3600}"
                  },
                  "model_id": {
                    "type": "string",
                    "description": "improve an existing Animica model instead of creating one; the baseline becomes that model"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "dataset"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/train/bounty": {
      "post": {
        "operationId": "train_bounty_post_x402_train_bounty",
        "summary": "Animica Train & Earn — training bounty",
        "description": "Fund an OBJECTIVE rather than a configuration: \"improve this classifier to 0.92 accuracy, here is $10\". The network explores the approved strategy space against your data, every candidate is scored on a hidden evaluation split that no competitor can see or download, and the prize goes to the entry that actually improves the metric. If nothing beats the baseline by the required margin, nothing is awarded and the pool is refunded — a bounty that pays for participation is not a bounty.\n\nPayment: $1 USDC per request (1000000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-train_bounty"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "train_bounty",
          "name": "Animica Train & Earn — training bounty",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "1"
          },
          "price_usd": "1",
          "currency": "USDC",
          "amount_atomic": "1000000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": false,
          "unavailable_reason": "disabled",
          "settlement": "readiness re-checked, then settled, then executed (retry + signed receipt on downstream failure)",
          "documentation": "https://animica.dev/x402#product-train_bounty"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "objective": {
                    "type": "string",
                    "description": "what improvement you want, in words (recorded in provenance)"
                  },
                  "dataset": {
                    "type": "object",
                    "description": "the data the objective is measured on"
                  },
                  "metric": {
                    "type": "string",
                    "description": "accuracy | macro_f1 | log_loss"
                  },
                  "target": {
                    "type": "number",
                    "description": "the score that wins outright"
                  },
                  "budget": {
                    "type": "object",
                    "description": "{\"amount\":\"10\",\"currency\":\"USDC\"}"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "objective",
                  "dataset"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/train/bounties": {
      "get": {
        "operationId": "train_bounty_free_get_x402_train_bounties",
        "summary": "Animica Train & Earn — training bounty — free disclosure",
        "description": "FREE. Open training bounties: objective, metric, target and pool.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-train_bounty"
        }
      }
    },
    "/x402/model/{model_id}/infer": {
      "post": {
        "operationId": "train_model_infer_post_x402_model_model_id_infer",
        "summary": "Animica model inference — run a network-trained model",
        "description": "Classify text with a model the Animica training network produced. The frozen encoder embeds your input and the trained head (full-rank or low-rank adapter) scores it; you get the label, the full probability distribution and the exact model version and parameter hash that produced them, so a result is always traceable to a provenance record. Send {\"texts\":[\"...\"]} and the model id in the path.\n\nPayment: $0.002757 USDC per request (2757 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-train_model_infer"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "train_model_infer",
          "name": "Animica model inference — run a network-trained model",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002757"
          },
          "price_usd": "0.002757",
          "currency": "USDC",
          "amount_atomic": "2757",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": false,
          "unavailable_reason": "no_models_yet",
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-train_model_infer"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "texts": {
                    "type": "array",
                    "items": {},
                    "description": "up to 64 strings to classify"
                  },
                  "version": {
                    "type": "integer",
                    "description": "a specific immutable model version (default: latest)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "texts"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/health/fhir/validate": {
      "post": {
        "operationId": "health_fhir_validate_post_x402_health_fhir_validate",
        "summary": "FHIR R4 structural validation",
        "description": "Validate a FHIR R4 resource or Bundle and get path-level errors back in milliseconds. Checks resource identity, required elements, cardinality, primitive datatype syntax (date/dateTime/instant/code/uri/decimal), required-binding code membership, Reference syntax AND allowed target types, contained-resource resolution, and named FHIR invariants. Every response lists exactly which checks ran and which did NOT — this is structural validation, not profile conformance: it does not fetch StructureDefinitions, does not validate against US Core or any other ImplementationGuide, and makes no clinical judgement. Deterministic, so the same bytes always produce the same verdict, and every response carries a signed execution receipt naming the exact validator artifact hash that produced it. Send public, synthetic or de-identified resources only: this endpoint is HEALTH_PUBLIC and refuses HEALTH_SECURE requests.\n\nPayment: $0.002000 USDC per request (2000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-health_fhir_validate"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "health_fhir_validate",
          "name": "FHIR R4 structural validation",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002000"
          },
          "price_usd": "0.002000",
          "currency": "USDC",
          "amount_atomic": "2000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-health_fhir_validate"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "resource": {
                    "type": "object",
                    "description": "one FHIR R4 resource"
                  },
                  "resources": {
                    "type": "array",
                    "items": {},
                    "description": "up to 200 resources"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/x402/health": {
      "get": {
        "operationId": "health_fhir_validate_free_get_x402_health",
        "summary": "FHIR R4 structural validation — free disclosure",
        "description": "FREE. What Animica Health sells over x402, the PHI boundary, and where the authenticated healthcare API lives.\n\nNo payment is ever requested here.",
        "tags": [
          "products"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Free, unpaid response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed. Nothing was charged, because nothing here is ever charged.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "price": "0",
          "currency": "USDC",
          "free": true,
          "documentation": "https://animica.dev/x402#product-health_fhir_validate"
        }
      }
    },
    "/x402/health/fhir/transform": {
      "post": {
        "operationId": "health_fhir_transform_post_x402_health_fhir_transform",
        "summary": "FHIR transformation with provenance",
        "description": "Transform healthcare data between declared representations: flatten or build a Bundle, map a flat laboratory row to an Observation, map a demographics row to a Patient. Every transform is a NAMED, deterministic mapping — there is no \"figure out what I meant\" path, because a transformer that guesses is a transformer that fabricates. The response carries full provenance: each produced element names the source field it came from, and every source field that produced nothing appears in `unmapped` with a reason. Nothing is defaulted or inferred — a source row with no status yields a resource with no status, and the bundled validation says so, rather than us inventing a clinical fact. HEALTH_PUBLIC only; send public, synthetic or de-identified data.\n\nPayment: $0.002000 USDC per request (2000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-health_fhir_transform"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "health_fhir_transform",
          "name": "FHIR transformation with provenance",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002000"
          },
          "price_usd": "0.002000",
          "currency": "USDC",
          "amount_atomic": "2000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-health_fhir_transform"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "transform": {
                    "type": "string",
                    "description": "bundle.flatten | bundle.collect | lab.row-to-observation | demographics.row-to-patient"
                  },
                  "input": {
                    "type": "object",
                    "description": "the source document"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "transform",
                  "input"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/health/terminology/search": {
      "post": {
        "operationId": "health_terminology_search_post_x402_health_terminology_search",
        "summary": "Healthcare terminology search",
        "description": "Search the healthcare vocabularies loaded on this deployment and get codes back with a MEASURED confidence and full provenance: which dataset, loaded from where, under which licence, and whether it is synthetic. The scoring function is documented on every response (exact code 1.00, exact display 0.95, exact synonym 0.90, prefix 0.60-0.85, token overlap 0.30-0.75) rather than being an opaque number. Animica redistributes NO licensed terminology: ICD-10-CM, LOINC, SNOMED CT and RxNorm are loaded by an operator holding the appropriate licence, and a query against a vocabulary this deployment does not hold returns an explicit error naming the missing dataset — never an empty result set that would read as \"no such code\". Call GET /health/v1/terminology/systems (free) to see exactly what is loaded here before you buy.\n\nPayment: $0.002000 USDC per request (2000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-health_terminology_search"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "health_terminology_search",
          "name": "Healthcare terminology search",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002000"
          },
          "price_usd": "0.002000",
          "currency": "USDC",
          "amount_atomic": "2000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-health_terminology_search"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "a code or a term"
                  },
                  "system": {
                    "type": "string",
                    "description": "restrict to one loaded system"
                  },
                  "limit": {
                    "type": "number",
                    "description": "1-50 (default 10)"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "query"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/health/terminology/map": {
      "post": {
        "operationId": "health_terminology_map_post_x402_health_terminology_map",
        "summary": "Terminology crosswalk",
        "description": "Map a code from one healthcare vocabulary to another using a crosswalk loaded on this deployment. The declared equivalence — equivalent, wider, narrower, inexact — is carried through UNCHANGED and never silently promoted to a definitive mapping, and a code with no row in the crosswalk comes back as `unmatched` rather than mapped to the nearest available concept. That refusal is the product: a plausible wrong code entered into a medical record is worse than no code, because the second one gets a human's attention and the first does not. HEALTH_PUBLIC only.\n\nPayment: $0.002000 USDC per request (2000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-health_terminology_map"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "health_terminology_map",
          "name": "Terminology crosswalk",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002000"
          },
          "price_usd": "0.002000",
          "currency": "USDC",
          "amount_atomic": "2000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-health_terminology_map"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string",
                    "description": "the source code"
                  },
                  "from": {
                    "type": "string",
                    "description": "source system"
                  },
                  "to": {
                    "type": "string",
                    "description": "target system"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "code",
                  "from",
                  "to"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/health/document/structure": {
      "post": {
        "operationId": "health_document_structure_post_x402_health_document_structure",
        "summary": "Healthcare document structuring",
        "description": "Turn an unstructured healthcare document into structured JSON: clinical sections normalised onto a canonical vocabulary (chief complaint, HPI, past medical history, medications, allergies, hospital course, findings, impression, and twenty more), labelled fields (MRN, dates of admission and discharge, attending, facility), a timeline of every date literally present with the line and section it came from, and candidate expansions for the medical abbreviations it recognises. It reports COVERAGE — the measured fraction of non-blank lines that fell under a recognised heading — and, crucially, it reports what it looked for and did NOT find, because an extractor that silently omits a missing field teaches you that absence means \"not applicable\". Nothing is invented; expansions are candidates and are not applied. HEALTH_PUBLIC only: send templates, synthetic or de-identified documents.\n\nPayment: $0.002000 USDC per request (2000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-health_document_structure"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "health_document_structure",
          "name": "Healthcare document structuring",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002000"
          },
          "price_usd": "0.002000",
          "currency": "USDC",
          "amount_atomic": "2000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-health_document_structure"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string",
                    "description": "the document text"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "text"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/health/document/classify": {
      "post": {
        "operationId": "health_document_classify_post_x402_health_document_classify",
        "summary": "Healthcare document classification",
        "description": "Identify what kind of healthcare document you are holding — discharge summary, progress note, radiology report, pathology report, operative note, consult note, lab report, H&P, referral letter, prior authorization, EOB, consent form — with the EVIDENCE that produced the verdict: which sections and which distinctive phrases were found and what each contributed. Confidence is a normalised margin between the best and second-best type, stated explicitly as NOT a calibrated probability. A document matching nothing is returned as `unknown` rather than assigned to the least-bad option. HEALTH_PUBLIC only.\n\nPayment: $0.002000 USDC per request (2000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-health_document_classify"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "health_document_classify",
          "name": "Healthcare document classification",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002000"
          },
          "price_usd": "0.002000",
          "currency": "USDC",
          "amount_atomic": "2000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-health_document_classify"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "text"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/health/literature/search": {
      "post": {
        "operationId": "health_literature_search_post_x402_health_literature_search",
        "summary": "Biomedical literature search",
        "description": "Search PubMed — the canonical public biomedical index, ~37 million records — by term, with optional year range and publication-type filters, and get back PMIDs, titles, journals, authors, DOIs and publication types exactly as NCBI returned them. Nothing on the response is generated, and the query NCBI actually ran (its translated_query) is returned so you can see how your terms were expanded. If NCBI is unreachable the answer is an explicit error naming NCBI, never an empty result set — \"no papers match\" and \"we could not ask\" are different facts and a researcher acts on them differently. Every response carries a signed execution receipt.\n\nPayment: $0.002068 USDC per request (2068 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-health_literature_search"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "health_literature_search",
          "name": "Biomedical literature search",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002068"
          },
          "price_usd": "0.002068",
          "currency": "USDC",
          "amount_atomic": "2068",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-health_literature_search"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "PubMed query terms"
                  },
                  "limit": {
                    "type": "number",
                    "description": "1-50 (default 10)"
                  },
                  "from_year": {
                    "type": "number"
                  },
                  "to_year": {
                    "type": "number"
                  },
                  "publication_types": {
                    "type": "array",
                    "items": {},
                    "description": "e.g. [\"Randomized Controlled Trial\",\"Meta-Analysis\"]"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "query"
                ]
              }
            }
          }
        }
      }
    },
    "/x402/health/literature/summarize": {
      "post": {
        "operationId": "health_literature_summarize_post_x402_health_literature_summarize",
        "summary": "Evidence-grounded literature summary",
        "description": "Retrieve biomedical abstracts and get a summary in which EVERY sentence is labelled by how it is supported. The default mode is extractive: each sentence is copied VERBATIM from a retrieved abstract and carries the PMID it came from, so there is no generation step and therefore nothing to hallucinate with. Optional synthesis mode has a language model write prose over the retrieved abstracts and then CHECKS it: any sentence citing a PMID outside the retrieved set is DELETED before you see it, and the survivors are labelled SOURCE_SUPPORTED, MODEL_INFERENCE or UNKNOWN (the last for a sentence asserting a figure that appears in no abstract). The counts are returned, so an agent can reject a summary that leaned on the model without reading it. A research tool, not clinical guidance.\n\nPayment: $0.004000 USDC per request (4000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-health_literature_summarize"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "health_literature_summarize",
          "name": "Evidence-grounded literature summary",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.004000"
          },
          "price_usd": "0.004000",
          "currency": "USDC",
          "amount_atomic": "4000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-health_literature_summarize"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "a question; retrieval runs first"
                  },
                  "pmids": {
                    "type": "array",
                    "items": {},
                    "description": "summarise these records instead"
                  },
                  "mode": {
                    "type": "string",
                    "description": "extractive (default, cannot fabricate) | synthesis"
                  },
                  "limit": {
                    "type": "number"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/x402/health/trials/search": {
      "post": {
        "operationId": "health_trials_search_post_x402_health_trials_search",
        "summary": "Clinical trial search",
        "description": "Search ClinicalTrials.gov (API v2) by condition, intervention, sponsor, status, phase and geography — including a true radius search that uses the registry's OWN distance filter, so the result set is exactly what a human would get on their site rather than an approximation over a truncated location list. Returns NCT identifiers, status, phases, enrollment, sponsor and sponsor class, interventions, and locations with coordinates, as published by the registry. Eligibility criteria are available STRUCTURED via the per-trial endpoint — split into inclusion and exclusion statements and categorised (age, sex, diagnosis, prior therapy, lab thresholds, performance status) with numeric bounds extracted — but they are NEVER evaluated against a person. This service does not and will not tell anyone they qualify for a trial.\n\nPayment: $0.002068 USDC per request (2068 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-health_trials_search"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "health_trials_search",
          "name": "Clinical trial search",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002068"
          },
          "price_usd": "0.002068",
          "currency": "USDC",
          "amount_atomic": "2068",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-health_trials_search"
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "condition": {
                    "type": "string"
                  },
                  "intervention": {
                    "type": "string"
                  },
                  "sponsor": {
                    "type": "string"
                  },
                  "query": {
                    "type": "string"
                  },
                  "status": {
                    "type": "string",
                    "description": "RECRUITING | COMPLETED | ..."
                  },
                  "phase": {
                    "type": "string",
                    "description": "PHASE1 | PHASE2 | PHASE3 | PHASE4 | NA"
                  },
                  "lat": {
                    "type": "number"
                  },
                  "lon": {
                    "type": "number"
                  },
                  "radius_km": {
                    "type": "number"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/x402/health/model/evaluate": {
      "post": {
        "operationId": "health_model_evaluate_post_x402_health_model_evaluate",
        "summary": "Healthcare model evaluation",
        "description": "Run a named evaluation suite against a healthcare model artifact and get a MEASURED number back, bound to the exact artifact hash it was measured on. Suites cover FHIR validation correctness (precision/recall/F1 against labelled fixtures), document extraction F1, document classification accuracy, de-identification recall over planted identifiers, and determinism (the same input N times — for a model declared deterministic anything below 1.0 is a defect report, not a score). Animica publishes no benchmark claims: a number in this system either came from a run of this harness against fixtures you can read in the source, or it does not exist. GET /health/v1/evaluations/suites (free) lists what can be run.\n\nPayment: $0.006000 USDC per request (6000 atomic units) over x402. An unpaid call returns 402 with the terms; sign them locally and retry. There is no API key.",
        "tags": [
          "products"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/PaymentSignature"
          },
          {
            "$ref": "#/components/parameters/XPayment"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Paid and delivered. The settlement proof is in the `payment-response` header.",
            "headers": {
              "payment-response": {
                "$ref": "#/components/headers/PaymentResponseHeader"
              },
              "x-request-id": {
                "$ref": "#/components/headers/RequestIdHeader"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "product-specific JSON payload plus a payment block"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "502": {
            "$ref": "#/components/responses/PaidServiceFailed"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "externalDocs": {
          "description": "product documentation",
          "url": "https://animica.dev/x402#product-health_model_evaluate"
        },
        "x-payment-protocol": "x402",
        "x-payment-info": {
          "product": "health_model_evaluate",
          "name": "Healthcare model evaluation",
          "protocols": [
            {
              "x402": {}
            }
          ],
          "protocol_names": [
            "x402"
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.006000"
          },
          "price_usd": "0.006000",
          "currency": "USDC",
          "amount_atomic": "6000",
          "scheme": "exact",
          "network": "base",
          "network_caip2": "eip155:8453",
          "chain_id": 8453,
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "pay_to": "0x5D17c40FD6b119dc6006C4Ab3C20a917FCaB2aCD",
          "x402_version": 2,
          "available": true,
          "settlement": "produced first, then settled: a failure before settlement charges nothing",
          "documentation": "https://animica.dev/x402#product-health_model_evaluate"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "suite": {
                    "type": "string",
                    "description": "from GET /health/v1/evaluations/suites"
                  },
                  "model_id": {
                    "type": "string"
                  },
                  "model_version": {
                    "type": "number"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "suite"
                ]
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "string",
            "description": "stable machine-readable error code"
          },
          "detail": {
            "type": "string"
          }
        },
        "additionalProperties": true
      },
      "PaymentRequirements": {
        "type": "object",
        "description": "One set of terms the server will accept, verbatim. Amounts are integer atomic units of the asset as a decimal string — never floating point.",
        "required": [
          "scheme",
          "network",
          "amount",
          "asset",
          "payTo",
          "maxTimeoutSeconds"
        ],
        "properties": {
          "scheme": {
            "type": "string",
            "examples": [
              "exact"
            ]
          },
          "network": {
            "type": "string",
            "description": "CAIP-2 chain id",
            "examples": [
              "eip155:8453"
            ]
          },
          "amount": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "atomic units of `asset`"
          },
          "asset": {
            "type": "string",
            "description": "token contract address"
          },
          "payTo": {
            "type": "string",
            "description": "recipient; server configuration only, never client-supplied"
          },
          "maxTimeoutSeconds": {
            "type": "integer"
          },
          "extra": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "PaymentRequired": {
        "type": "object",
        "description": "The x402 v2 challenge object. Sent base64-encoded in the `payment-required` response header; the JSON body of the same 402 carries the v1 rendering for older clients.",
        "required": [
          "x402Version",
          "resource",
          "accepts"
        ],
        "properties": {
          "x402Version": {
            "type": "integer",
            "examples": [
              2
            ]
          },
          "resource": {
            "type": "object",
            "required": [
              "url"
            ],
            "properties": {
              "url": {
                "type": "string",
                "format": "uri"
              },
              "description": {
                "type": "string"
              },
              "mimeType": {
                "type": "string"
              },
              "serviceName": {
                "type": "string"
              }
            }
          },
          "accepts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PaymentRequirements"
            }
          },
          "extensions": {
            "type": "object",
            "description": "Open discovery metadata. `discovery.info` carries the input/output schema indexers read, and is the key to build against; `bazaar` is a byte-identical compatibility alias for indexers that still key on that name. `animica` carries the descriptive product facts (id, name, price, documentation URL).",
            "additionalProperties": true
          },
          "error": {
            "type": "string"
          }
        }
      },
      "PaymentRequiredV1Body": {
        "type": "object",
        "description": "v1 rendering of the same offer, sent as the 402 body.",
        "required": [
          "x402Version",
          "accepts"
        ],
        "properties": {
          "x402Version": {
            "type": "integer",
            "examples": [
              1
            ]
          },
          "error": {
            "type": "string"
          },
          "accepts": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "scheme": {
                  "type": "string"
                },
                "network": {
                  "type": "string",
                  "description": "v1 network slug",
                  "examples": [
                    "base"
                  ]
                },
                "maxAmountRequired": {
                  "type": "string"
                },
                "asset": {
                  "type": "string"
                },
                "payTo": {
                  "type": "string"
                },
                "resource": {
                  "type": "string",
                  "format": "uri"
                },
                "description": {
                  "type": "string"
                },
                "mimeType": {
                  "type": "string"
                },
                "outputSchema": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "additionalProperties": true
                },
                "maxTimeoutSeconds": {
                  "type": "integer"
                }
              }
            }
          }
        }
      },
      "SettlementResponse": {
        "type": "object",
        "description": "Sent base64-encoded in the `payment-response` header of a delivered paid response.",
        "required": [
          "success",
          "transaction",
          "network"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "transaction": {
            "type": "string",
            "description": "settlement transaction hash (\"\" when nothing settled)"
          },
          "network": {
            "type": "string"
          },
          "payer": {
            "type": "string"
          },
          "amount": {
            "type": "string"
          },
          "errorReason": {
            "type": "string"
          }
        }
      },
      "PaymentMetadata": {
        "type": "object",
        "description": "Injected into every paid JSON body (except priority inference, whose body stays a pure OpenAI object — its proof rides in the headers).",
        "properties": {
          "network": {
            "type": "string"
          },
          "asset": {
            "type": "string"
          },
          "amount_atomic": {
            "type": "string"
          },
          "price_usd": {
            "type": "string"
          },
          "payer": {
            "type": "string"
          },
          "settlement_tx": {
            "type": "string"
          }
        }
      },
      "EntropySource": {
        "type": "object",
        "description": "The node's own description of where the bytes came from, passed through verbatim.",
        "properties": {
          "name": {
            "type": "string"
          },
          "vendor": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "is_hardware": {
            "type": "boolean"
          },
          "is_quantum": {
            "type": "boolean"
          },
          "device_path": {
            "type": [
              "string",
              "null"
            ]
          },
          "attested": {
            "type": "boolean"
          },
          "notes": {
            "type": "string"
          }
        }
      },
      "EntropyHealth": {
        "type": "object",
        "description": "SP 800-90B-style health report. The gateway refuses to sell a draw whose `passed` is false (503, no payment requested).",
        "properties": {
          "passed": {
            "type": "boolean"
          },
          "min_entropy_per_byte": {
            "type": "number"
          }
        }
      },
      "Attestation": {
        "type": "object",
        "description": "ed25519 signature by the serving node over sha3-256 of the returned bytes. `attested` is true only when the signer is hardware-backed; it is false on a software signer, which is the case today.",
        "properties": {
          "alg": {
            "type": "string",
            "examples": [
              "ed25519"
            ]
          },
          "backend": {
            "type": "string",
            "examples": [
              "software"
            ]
          },
          "attested": {
            "type": "boolean"
          },
          "public_key_hex": {
            "type": "string"
          },
          "digest_hex": {
            "type": "string"
          },
          "signature_hex": {
            "type": "string"
          }
        }
      },
      "Verification": {
        "type": "object",
        "description": "The exact rules to check the response yourself.",
        "properties": {
          "method": {
            "type": "string"
          },
          "rules": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "verifier": {
            "type": "string"
          },
          "trust_model": {
            "type": "string"
          },
          "attested": {
            "type": "boolean"
          }
        }
      },
      "RandomBytesDraw": {
        "type": "object",
        "description": "Signed random bytes from the Animica node randomness service.",
        "properties": {
          "product": {
            "type": "string",
            "const": "qrng"
          },
          "randomness": {
            "type": "string",
            "description": "hex-encoded bytes"
          },
          "encoding": {
            "type": "string",
            "const": "hex"
          },
          "bytes": {
            "type": "integer"
          },
          "source": {
            "$ref": "#/components/schemas/EntropySource"
          },
          "health": {
            "$ref": "#/components/schemas/EntropyHealth"
          },
          "attestation": {
            "$ref": "#/components/schemas/Attestation"
          },
          "verification": {
            "$ref": "#/components/schemas/Verification"
          },
          "payment": {
            "$ref": "#/components/schemas/PaymentMetadata"
          }
        }
      },
      "Derivation": {
        "type": "object",
        "description": "Everything needed to recompute a derived result from the published draw: domain string, seed, rules, and a `recompute` object the repo verifier accepts as-is.",
        "properties": {
          "algorithm": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "request_id": {
            "type": "string"
          },
          "domain": {
            "type": "string"
          },
          "seed_hex": {
            "type": "string"
          },
          "entropy_hex": {
            "type": "string"
          },
          "rules": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "steps": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "stream_bytes_consumed": {
            "type": "integer"
          },
          "recompute": {
            "type": "object",
            "additionalProperties": true
          },
          "verifier": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "DerivedRandomness": {
        "type": "object",
        "description": "A result derived deterministically from one signed draw. `result` shape depends on the product (ints / permutation+items / indices+picked).",
        "properties": {
          "product": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": true
          },
          "randomness": {
            "type": "string"
          },
          "encoding": {
            "type": "string"
          },
          "bytes": {
            "type": "integer"
          },
          "source": {
            "$ref": "#/components/schemas/EntropySource"
          },
          "health": {
            "$ref": "#/components/schemas/EntropyHealth"
          },
          "attestation": {
            "$ref": "#/components/schemas/Attestation"
          },
          "verification": {
            "$ref": "#/components/schemas/Verification"
          },
          "derivation": {
            "$ref": "#/components/schemas/Derivation"
          },
          "payment": {
            "$ref": "#/components/schemas/PaymentMetadata"
          }
        }
      },
      "BulkRandomness": {
        "type": "object",
        "description": "N independent draws, each with its own source/health/attestation, settled once.",
        "properties": {
          "product": {
            "type": "string",
            "const": "random_bulk"
          },
          "draws": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "count": {
            "type": "integer"
          },
          "payment": {
            "$ref": "#/components/schemas/PaymentMetadata"
          }
        }
      },
      "RandomCommitment": {
        "type": "object",
        "description": "The sealed half of a commit-reveal. The draw itself is NOT disclosed until the free reveal endpoint discloses it.",
        "properties": {
          "product": {
            "type": "string",
            "const": "random_commit"
          },
          "stage": {
            "type": "string",
            "const": "commit"
          },
          "commit_id": {
            "type": "string"
          },
          "commitment": {
            "type": "string"
          },
          "algorithm": {
            "type": "string"
          },
          "reveal_after": {
            "type": "integer",
            "description": "unix seconds"
          },
          "reveal_url": {
            "type": "string",
            "format": "uri"
          },
          "reveal_is_free": {
            "type": "boolean",
            "const": true
          },
          "source": {
            "$ref": "#/components/schemas/EntropySource"
          },
          "health": {
            "$ref": "#/components/schemas/EntropyHealth"
          },
          "attestation": {
            "$ref": "#/components/schemas/Attestation"
          },
          "verification": {
            "$ref": "#/components/schemas/Verification"
          },
          "payment": {
            "$ref": "#/components/schemas/PaymentMetadata"
          }
        }
      },
      "RandomReveal": {
        "type": "object",
        "description": "The free disclosure of a commitment: secret, salt and the raw draw, so anyone can check commitment == sha3_256(secret || salt).",
        "additionalProperties": true,
        "properties": {
          "stage": {
            "type": "string",
            "const": "reveal"
          },
          "commit_id": {
            "type": "string"
          },
          "commitment": {
            "type": "string"
          },
          "secret_hex": {
            "type": "string"
          },
          "salt_hex": {
            "type": "string"
          }
        }
      },
      "ChainExport": {
        "type": "object",
        "description": "Block/transaction range export. `format=ndjson|csv` returns the same records in those encodings instead.",
        "properties": {
          "meta": {
            "type": "object",
            "description": "export descriptor: range, head height, chain id, unit, payment block",
            "additionalProperties": true
          },
          "blocks": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "transactions": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "AddressHistory": {
        "type": "object",
        "description": "Transactions touching an account, newest first, from the gateway's own address index.",
        "additionalProperties": true,
        "properties": {
          "product": {
            "type": "string",
            "const": "chain_address_history"
          },
          "address": {
            "type": "string"
          },
          "transactions": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "payment": {
            "$ref": "#/components/schemas/PaymentMetadata"
          }
        }
      },
      "BatchBalances": {
        "type": "object",
        "description": "Confirmed balances for many accounts in one call, pinned to a head height. Amounts are exact decimal strings in nANM (1 ANM = 10^9 nANM).",
        "properties": {
          "product": {
            "type": "string",
            "const": "chain_batch_balances"
          },
          "unit": {
            "type": "string",
            "const": "nANM"
          },
          "decimals": {
            "type": "integer",
            "const": 9
          },
          "count": {
            "type": "integer"
          },
          "unique_addresses": {
            "type": "integer"
          },
          "failed_lookups": {
            "type": "integer"
          },
          "total_balance": {
            "type": "string"
          },
          "as_of": {
            "type": "object",
            "additionalProperties": true
          },
          "balances": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "derivation": {
            "type": "object",
            "additionalProperties": true
          },
          "payment": {
            "$ref": "#/components/schemas/PaymentMetadata"
          }
        }
      },
      "ChatCompletion": {
        "type": "object",
        "description": "OpenAI-compatible chat.completion object, passed through from the Animica serving bridge unchanged. Settlement details ride in the `payment-response` header, not in the body.",
        "additionalProperties": true,
        "properties": {
          "id": {
            "type": "string"
          },
          "object": {
            "type": "string",
            "examples": [
              "chat.completion"
            ]
          },
          "model": {
            "type": "string"
          },
          "choices": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "usage": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "Catalog": {
        "type": "object",
        "description": "The machine catalog: identity, network/asset facts and every product with its live availability.",
        "additionalProperties": true,
        "properties": {
          "name": {
            "type": "string"
          },
          "provider": {
            "type": "string"
          },
          "network": {
            "type": [
              "string",
              "null"
            ]
          },
          "chain_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "asset": {
            "type": [
              "string",
              "null"
            ]
          },
          "payment_protocol": {
            "type": "string",
            "const": "x402"
          },
          "products": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "Stats": {
        "type": "object",
        "description": "Aggregate settlement counts. Deliberately carries no payer addresses, no transaction hashes and no per-payment rows.",
        "additionalProperties": true,
        "properties": {
          "available": {
            "type": "boolean"
          },
          "settlements": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": true
          },
          "products": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "ErrorReceipt": {
        "type": "object",
        "description": "Signed, machine-readable evidence that a payment settled but the service then failed. Keep it: it references the settled payment and entitles reconciliation.",
        "additionalProperties": true,
        "properties": {
          "error": {
            "type": "string"
          },
          "incident_id": {
            "type": "string"
          },
          "settlement_tx": {
            "type": [
              "string",
              "null"
            ]
          },
          "receipt": {
            "type": "object",
            "additionalProperties": true
          }
        }
      }
    },
    "headers": {
      "PaymentRequiredHeader": {
        "description": "base64-encoded PaymentRequired (x402 v2). The 402 body carries the v1 rendering of the same offer.",
        "required": true,
        "schema": {
          "type": "string",
          "contentEncoding": "base64",
          "contentMediaType": "application/json"
        }
      },
      "PaymentResponseHeader": {
        "description": "base64-encoded SettlementResponse: the on-chain proof that this response was paid for.",
        "schema": {
          "type": "string",
          "contentEncoding": "base64",
          "contentMediaType": "application/json"
        }
      },
      "RequestIdHeader": {
        "description": "The x-request-id you sent, or the one this gateway assigned. Quote it in support/reconciliation.",
        "schema": {
          "type": "string"
        }
      }
    },
    "parameters": {
      "PaymentSignature": {
        "name": "payment-signature",
        "in": "header",
        "required": false,
        "description": "base64-encoded PaymentPayload (x402 v2) signed by the caller. Absent => the endpoint answers 402 with the terms to sign. v1 clients use `x-payment` instead.",
        "schema": {
          "type": "string"
        }
      },
      "XPayment": {
        "name": "x-payment",
        "in": "header",
        "required": false,
        "description": "x402 v1 payment header. Accepted for backwards compatibility; the settlement proof then also comes back in `x-payment-response`.",
        "schema": {
          "type": "string"
        }
      },
      "IdempotencyKey": {
        "name": "idempotency-key",
        "in": "header",
        "required": false,
        "description": "Retry-safety: the same key with the same payment replays the stored result instead of charging again.",
        "schema": {
          "type": "string",
          "maxLength": 200
        }
      }
    },
    "responses": {
      "PaymentRequired": {
        "description": "Payment required. The terms are in the `payment-required` header (v2) and in the body (v1). Sign them locally and retry — nothing has been charged.",
        "headers": {
          "payment-required": {
            "$ref": "#/components/headers/PaymentRequiredHeader"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/PaymentRequiredV1Body"
            }
          }
        }
      },
      "InvalidRequest": {
        "description": "The request parameters are invalid. Checked BEFORE any payment is requested, so nothing was charged.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Unavailable": {
        "description": "The product is currently unavailable (backend unhealthy, capacity below floor, index stale). No 402 is emitted and no payment is requested — this service is never sold while it is known to be unavailable.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "PaidServiceFailed": {
        "description": "The payment settled but the response could not be delivered, or the settlement outcome could not be confirmed. Carries a SIGNED error receipt referencing the payment plus an incident id for reconciliation.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorReceipt"
            }
          }
        }
      }
    }
  }
}