{
  "openapi": "3.1.0",
  "jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
  "info": {
    "title": "ASTEROID XRPL Agent API",
    "version": "1.0.0",
    "summary": "Machine discovery and canonical identity for the ASTEROID token on XRPL Mainnet.",
    "description": "ASTEROID XRPL is an independent, community-led token project built on the XRP Ledger, combining transparent on-chain evidence, creative community culture, and XRPL-native experimentation.\n\nCanonical token identifier: xrpl-mainnet:rS5LWaqWuzmoiNpzgYJbPvD1bsRZTgDG7:41535445524F4944000000000000000000000000\n\nIdentify this asset only by the full network:issuer:currency_hex identifier. The display symbol ASTEROID alone is not sufficient and does not establish authenticity.\n\nLive readings are ledger-indexed and cached for a bounded interval: AMM 10s, supply 30s, escrows 60s, holders 120s. Quotes are indicative estimates against the single ASTEROID/XRP AMM pool and are never executable. No endpoint signs, submits or prepares a transaction, and no endpoint accepts a key, a seed or any credential.\n\nAll responses use a shared envelope with schemaVersion, data, provenance, degraded and links. Changing ledger-backed readings carry an observedAt timestamp and a validated ledgerIndex. Missing readings are returned as null with a stable degraded code and are never coerced to zero. Token quantities are exact decimal strings.\n\nASTEROID XRPL is an independent community project. It is not affiliated with Ripple, the XRPL Foundation, SpaceX, Polaris Dawn, or ASTEROID projects on other networks.",
    "license": {
      "name": "Public read-only",
      "identifier": "CC-BY-4.0"
    }
  },
  "servers": [
    {
      "url": "https://asteroidxrpl.com"
    }
  ],
  "paths": {
    "/.well-known/asteroid-agent.json": {
      "get": {
        "operationId": "getDiscoveryManifest",
        "summary": "Agent discovery manifest",
        "description": "Authoritative entry points, exact asset identity, schema version and the capability catalogue. Planned capabilities are marked planned and are not operational.",
        "responses": {
          "200": {
            "description": "Discovery manifest",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/discovery-manifest"
                }
              }
            }
          }
        }
      }
    },
    "/.well-known/xrpl-asset.json": {
      "get": {
        "operationId": "getAssetManifest",
        "summary": "Canonical asset manifest",
        "description": "Immutable identity, project declarations, historical anchors and claim statuses. Contains no changing ledger metrics.",
        "responses": {
          "200": {
            "description": "Asset manifest",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/asset-manifest"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/asset": {
      "get": {
        "operationId": "getAssetIdentity",
        "summary": "Canonical identity",
        "description": "Immutable identity plus claim-status-separated project metadata. No ledger read is performed, so provenance.ledgerIndex is null.",
        "responses": {
          "200": {
            "description": "Canonical identity envelope",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/response-envelope"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/identity-response"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/asset/evidence": {
      "get": {
        "operationId": "getAssetEvidence",
        "summary": "Historical ledger evidence",
        "description": "Historical anchors re-validated through the shared XRPL client. A failed upstream lookup yields verificationResult \"unavailable\", claimStatus \"unresolved\" and a degraded entry — never an invented success and never a substituted intended value.",
        "responses": {
          "200": {
            "description": "Evidence envelope",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/response-envelope"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/evidence-response"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/health": {
      "get": {
        "operationId": "getHealth",
        "summary": "Service health",
        "description": "Per-component availability. A partially unavailable XRPL upstream does not make immutable identity unavailable.",
        "responses": {
          "200": {
            "description": "Health envelope",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/response-envelope"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/health-response"
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/schemas/v1/index.json": {
      "get": {
        "operationId": "getSchemaCatalogue",
        "summary": "JSON Schema catalogue",
        "responses": {
          "200": {
            "description": "Catalogue of published JSON Schema 2020-12 documents",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "schemaVersion",
                    "dialect",
                    "baseUrl",
                    "schemas"
                  ],
                  "properties": {
                    "schemaVersion": {
                      "type": "string"
                    },
                    "dialect": {
                      "type": "string"
                    },
                    "baseUrl": {
                      "type": "string"
                    },
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "name",
                          "$id",
                          "title",
                          "url"
                        ],
                        "properties": {
                          "name": {
                            "type": "string"
                          },
                          "$id": {
                            "type": "string"
                          },
                          "title": {
                            "type": "string"
                          },
                          "url": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/schemas/v1/{schema}.json": {
      "get": {
        "operationId": "getSchema",
        "summary": "A single published JSON Schema",
        "parameters": [
          {
            "name": "schema",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "response-envelope",
                "degraded-item",
                "metric-provenance",
                "cache-freshness-metadata",
                "canonical-asset",
                "project-identity",
                "ledger-evidence",
                "error-response",
                "discovery-manifest",
                "asset-manifest",
                "identity-response",
                "evidence-response",
                "health-response",
                "verify-response",
                "supply-state",
                "escrow-state",
                "liquidity-state",
                "lp-lock-verification",
                "holder-state",
                "market-state",
                "calculation-input",
                "calculation-result",
                "quote-request",
                "quote-response"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "JSON Schema 2020-12 document",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Unknown schema",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/market": {
      "get": {
        "operationId": "getMarketState",
        "summary": "Composite live market state",
        "description": "Supply, AMM liquidity, LP accessibility, treasury escrows and trust-line counts in one enveloped reading. Each section carries its own provenance; the envelope ledgerIndex is the oldest section reading. An observation of ledger state, not a market evaluation and not a quote.",
        "responses": {
          "200": {
            "description": "Market state envelope",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/response-envelope"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/market-state"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "Upstream ledger unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/supply": {
      "get": {
        "operationId": "getSupplyState",
        "summary": "Supply state",
        "description": "Outstanding, escrowed, total and circulating supply as exact decimal strings, plus the original issuance revalidated against its anchor transaction. Unreadable values are null with a degraded code, never zero.",
        "responses": {
          "200": {
            "description": "Supply envelope",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/response-envelope"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/supply-state"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "Upstream ledger unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/liquidity": {
      "get": {
        "operationId": "getLiquidityState",
        "summary": "AMM liquidity and LP accessibility",
        "description": "Pool reserves, LP token supply and the XRPL AMM trading fee, with each declared LP-holding account's balance, pro-rata implied reserves and a live accessibility verdict derived from its master key, regular key and signer list.",
        "responses": {
          "200": {
            "description": "Liquidity envelope",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/response-envelope"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/liquidity-state"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "Upstream ledger unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/liquidity/lock": {
      "get": {
        "operationId": "verifyLiquidityLock",
        "summary": "LP-lock verification",
        "description": "Standalone verification of every project-declared LP-holding account: LP balance, share of LP supply, pro-rata implied XRP and ASTEROID, a per-account control assessment from the master key, regular key and signer list at a validated ledger, and an overall verdict. A projection of the same reading as /api/v1/liquidity, so the two can never disagree. A closed signing path is an observation, not a permanence guarantee.",
        "responses": {
          "200": {
            "description": "LP-lock verification envelope",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/response-envelope"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/lp-lock-verification"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "Upstream ledger unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/escrows": {
      "get": {
        "operationId": "getEscrowSchedule",
        "summary": "Project-declared treasury escrow schedule",
        "description": "Every ASTEROID escrow object on the project-declared treasury with amount, destination, unlock and cancel times and a locked/releasable/expired state.",
        "responses": {
          "200": {
            "description": "Escrow envelope",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/response-envelope"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/escrow-state"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "Upstream ledger unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/holders": {
      "get": {
        "operationId": "getHolderDistribution",
        "summary": "Trust-line and holder counts",
        "description": "Complete marker-chain enumeration of the issuer's trust lines on one validated ledger, with an explicit completeness flag and counting methodology.",
        "responses": {
          "200": {
            "description": "Holder envelope",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/response-envelope"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/holder-state"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "description": "Upstream ledger unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/quote": {
      "get": {
        "operationId": "getSwapQuote",
        "summary": "Indicative AMM estimate",
        "description": "Indicative bidirectional ASTEROID/XRP AMM estimate. The response carries a quote identifier, the methodology identifier and version, the validated ledger index, an expiry after which the estimate must be discarded, the exact calculation inputs and a link to the published test vectors. Not executable, models the single AMM pool only, and never signs, submits or prepares a transaction.",
        "parameters": [
          {
            "name": "direction",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "xrp-to-asteroid",
                "asteroid-to-xrp"
              ]
            }
          },
          {
            "name": "side",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "exact-in",
                "exact-out"
              ],
              "default": "exact-in"
            }
          },
          {
            "name": "amount",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9]+(\\.[0-9]+)?$"
            }
          },
          {
            "name": "slippageTolerancePct",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Quote envelope",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/response-envelope"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/quote-response"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "503": {
            "description": "Pool unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postSwapQuote",
        "summary": "Indicative AMM estimate (JSON body)",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/quote-request"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Quote envelope",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/response-envelope"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/quote-response"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "503": {
            "description": "Pool unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        }
      }
    },
    "/llms.txt": {
      "get": {
        "operationId": "getLlmsTxt",
        "summary": "Plain-text AI onboarding entry point",
        "responses": {
          "200": {
            "description": "text/plain onboarding document",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "response-envelope": {
        "title": "ASTEROID response envelope",
        "type": "object",
        "required": [
          "schemaVersion",
          "data",
          "provenance",
          "degraded",
          "links"
        ],
        "additionalProperties": false,
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0.0"
          },
          "data": {},
          "provenance": {
            "type": "object",
            "required": [
              "observedAt",
              "ledgerIndex",
              "node",
              "method"
            ],
            "additionalProperties": false,
            "properties": {
              "observedAt": {
                "type": "string",
                "format": "date-time"
              },
              "ledgerIndex": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "Validated ledger index, or null when no ledger read was performed."
              },
              "node": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "method": {
                "type": "string"
              }
            }
          },
          "degraded": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/degraded-item"
            }
          },
          "links": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "degraded-item": {
        "title": "Degraded service item",
        "type": "object",
        "required": [
          "code",
          "message"
        ],
        "additionalProperties": false,
        "properties": {
          "code": {
            "type": "string",
            "description": "Stable machine-readable degradation code."
          },
          "message": {
            "type": "string"
          }
        }
      },
      "metric-provenance": {
        "type": "object",
        "required": [
          "observedAt",
          "ledgerIndex",
          "node",
          "method"
        ],
        "additionalProperties": false,
        "properties": {
          "observedAt": {
            "type": "string",
            "format": "date-time"
          },
          "ledgerIndex": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Validated ledger index, or null when no ledger read was performed."
          },
          "node": {
            "type": [
              "string",
              "null"
            ]
          },
          "method": {
            "type": "string"
          }
        },
        "title": "Metric provenance",
        "description": "Where a single published metric came from: the observation timestamp, the validated ledger index it was read at, the node that served the read, and the method that produced it. Every enveloped Gate 1 and Gate 2 response carries this block, and composite responses carry one per section."
      },
      "cache-freshness-metadata": {
        "title": "Cache freshness metadata",
        "description": "Age disclosure for a reading served from the bounded single-flight server cache. A cached reading still states the validated ledger index and observation time it was produced from; its age is never hidden.",
        "type": "object",
        "required": [
          "hit",
          "cachedAt",
          "ageMs",
          "ttlMs"
        ],
        "additionalProperties": false,
        "properties": {
          "hit": {
            "type": "boolean",
            "description": "True when this response reused a cached reading."
          },
          "cachedAt": {
            "type": "string",
            "format": "date-time"
          },
          "ageMs": {
            "type": "integer",
            "minimum": 0
          },
          "ttlMs": {
            "type": "integer",
            "minimum": 0
          },
          "key": {
            "type": "string"
          }
        }
      },
      "canonical-asset": {
        "title": "Canonical ASTEROID asset identity",
        "type": "object",
        "required": [
          "tokenId",
          "network",
          "networkName",
          "issuer",
          "currencyHex",
          "displaySymbol",
          "projectName",
          "canonicalWebsite",
          "identifierPolicy",
          "precisionPolicy",
          "claimStatus"
        ],
        "additionalProperties": false,
        "properties": {
          "tokenId": {
            "type": "string",
            "pattern": "^[a-z0-9-]+:r[1-9A-HJ-NP-Za-km-z]{24,34}:[0-9A-F]{40}$"
          },
          "network": {
            "type": "string"
          },
          "networkName": {
            "type": "string"
          },
          "issuer": {
            "type": "string",
            "pattern": "^r[1-9A-HJ-NP-Za-km-z]{24,34}$"
          },
          "currencyHex": {
            "type": "string",
            "pattern": "^[0-9A-F]{40}$"
          },
          "displaySymbol": {
            "type": "string"
          },
          "projectName": {
            "type": "string"
          },
          "canonicalWebsite": {
            "type": "string",
            "format": "uri"
          },
          "identifierPolicy": {
            "type": "string"
          },
          "precisionPolicy": {
            "type": "string"
          },
          "claimStatus": {
            "type": "string",
            "enum": [
              "ledger-verified",
              "owner-confirmed",
              "independently-sourced",
              "derived",
              "aspirational",
              "unresolved"
            ]
          }
        }
      },
      "project-identity": {
        "title": "ASTEROID project identity",
        "type": "object",
        "required": [
          "name",
          "description",
          "descriptionClaimStatus",
          "canonicalWebsite",
          "network",
          "approvalAuthority",
          "approvalAuthorityClaimStatus",
          "nonAffiliation",
          "declaredWallets"
        ],
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "descriptionClaimStatus": {
            "type": "string",
            "enum": [
              "ledger-verified",
              "owner-confirmed",
              "independently-sourced",
              "derived",
              "aspirational",
              "unresolved"
            ]
          },
          "canonicalWebsite": {
            "type": "string",
            "format": "uri"
          },
          "network": {
            "type": "string"
          },
          "approvalAuthority": {
            "type": "string"
          },
          "approvalAuthorityClaimStatus": {
            "type": "string",
            "enum": [
              "ledger-verified",
              "owner-confirmed",
              "independently-sourced",
              "derived",
              "aspirational",
              "unresolved"
            ]
          },
          "nonAffiliation": {
            "type": "string"
          },
          "declaredWallets": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "address",
                "role",
                "claimStatus",
                "note"
              ],
              "additionalProperties": false,
              "properties": {
                "address": {
                  "type": "string"
                },
                "role": {
                  "type": "string"
                },
                "claimStatus": {
                  "type": "string",
                  "enum": [
                    "ledger-verified",
                    "owner-confirmed",
                    "independently-sourced",
                    "derived",
                    "aspirational",
                    "unresolved"
                  ]
                },
                "note": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "ledger-evidence": {
        "title": "Historical ledger evidence item",
        "type": "object",
        "required": [
          "id",
          "classification",
          "label",
          "supportedClaim",
          "claimStatus",
          "verificationResult",
          "transactionHash",
          "ledgerIndex",
          "transactionResult",
          "observedValue",
          "expectedValue",
          "destination",
          "source",
          "method",
          "detail",
          "explorerUrl"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string"
          },
          "classification": {
            "type": "string",
            "const": "historical-ledger-evidence"
          },
          "label": {
            "type": "string"
          },
          "supportedClaim": {
            "type": "string"
          },
          "claimStatus": {
            "type": "string",
            "enum": [
              "ledger-verified",
              "owner-confirmed",
              "independently-sourced",
              "derived",
              "aspirational",
              "unresolved"
            ]
          },
          "verificationResult": {
            "type": "string",
            "enum": [
              "verified",
              "mismatch",
              "unavailable"
            ]
          },
          "transactionHash": {
            "type": "string",
            "pattern": "^[0-9A-F]{64}$"
          },
          "ledgerIndex": {
            "type": [
              "integer",
              "null"
            ]
          },
          "transactionResult": {
            "type": [
              "string",
              "null"
            ]
          },
          "observedValue": {
            "type": [
              "string",
              "null"
            ],
            "description": "Exact decimal string. Never a binary floating-point number, never coerced to zero."
          },
          "expectedValue": {
            "type": [
              "string",
              "null"
            ]
          },
          "destination": {
            "type": [
              "string",
              "null"
            ]
          },
          "source": {
            "type": "string"
          },
          "method": {
            "type": "string"
          },
          "detail": {
            "type": [
              "string",
              "null"
            ]
          },
          "explorerUrl": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "error-response": {
        "title": "Error response",
        "description": "The single stable error contract shared by every Gate 1 and Gate 2 REST endpoint and every MCP tool error. A failure is always reported as a stable machine-readable `error.code` with provenance attached — never as a partially populated success body and never as a zero.",
        "type": "object",
        "required": [
          "schemaVersion",
          "error",
          "provenance"
        ],
        "additionalProperties": false,
        "properties": {
          "schemaVersion": {
            "type": "string"
          },
          "error": {
            "type": "object",
            "required": [
              "code",
              "message"
            ],
            "additionalProperties": false,
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            }
          },
          "provenance": {
            "type": "object",
            "required": [
              "observedAt",
              "ledgerIndex",
              "node",
              "method"
            ],
            "additionalProperties": false,
            "properties": {
              "observedAt": {
                "type": "string",
                "format": "date-time"
              },
              "ledgerIndex": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "Validated ledger index, or null when no ledger read was performed."
              },
              "node": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "method": {
                "type": "string"
              }
            }
          }
        }
      },
      "discovery-manifest": {
        "title": "ASTEROID agent discovery manifest",
        "type": "object",
        "required": [
          "schemaVersion",
          "$schema",
          "publishedAt",
          "project",
          "asset",
          "resources",
          "capabilities",
          "claimStatuses",
          "nonAffiliation"
        ],
        "additionalProperties": false,
        "properties": {
          "schemaVersion": {
            "type": "string"
          },
          "$schema": {
            "type": "string",
            "format": "uri"
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time"
          },
          "project": {
            "type": "object",
            "required": [
              "name",
              "description",
              "canonicalWebsite"
            ],
            "additionalProperties": false,
            "properties": {
              "name": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "canonicalWebsite": {
                "type": "string",
                "format": "uri"
              }
            }
          },
          "asset": {
            "type": "object",
            "required": [
              "tokenId",
              "network",
              "networkName",
              "issuer",
              "currencyHex",
              "displaySymbol",
              "identifierPolicy"
            ],
            "additionalProperties": false,
            "properties": {
              "tokenId": {
                "type": "string"
              },
              "network": {
                "type": "string"
              },
              "networkName": {
                "type": "string"
              },
              "issuer": {
                "type": "string"
              },
              "currencyHex": {
                "type": "string",
                "pattern": "^[0-9A-F]{40}$"
              },
              "displaySymbol": {
                "type": "string"
              },
              "identifierPolicy": {
                "type": "string"
              }
            }
          },
          "resources": {
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "format": "uri"
            }
          },
          "capabilities": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "name",
                "description",
                "status",
                "interfaces",
                "freshness",
                "provenanceNote",
                "schema",
                "limitations"
              ],
              "additionalProperties": false,
              "properties": {
                "name": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "available",
                    "legacy-available",
                    "deprecated",
                    "unavailable",
                    "planned"
                  ],
                  "description": "available: Gate 1 surface with a published schema. legacy-available: retained pre-Gate-1 surface, callable but unenveloped. deprecated: callable, scheduled for removal. unavailable: declared but not currently callable. planned: not implemented and not callable."
                },
                "interfaces": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "freshness": {
                  "type": "string"
                },
                "provenanceNote": {
                  "type": "string"
                },
                "schema": {
                  "type": "string"
                },
                "limitations": {
                  "type": "string"
                }
              }
            }
          },
          "claimStatuses": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "status",
                "meaning"
              ],
              "additionalProperties": false,
              "properties": {
                "status": {
                  "type": "string",
                  "enum": [
                    "ledger-verified",
                    "owner-confirmed",
                    "independently-sourced",
                    "derived",
                    "aspirational",
                    "unresolved"
                  ]
                },
                "meaning": {
                  "type": "string"
                }
              }
            }
          },
          "nonAffiliation": {
            "type": "string"
          }
        }
      },
      "asset-manifest": {
        "title": "ASTEROID canonical asset manifest",
        "type": "object",
        "required": [
          "schemaVersion",
          "$schema",
          "publishedAt",
          "canonicalAsset",
          "projectIdentity",
          "historicalAnchors",
          "claimStatuses",
          "dynamicData",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string"
          },
          "$schema": {
            "type": "string",
            "format": "uri"
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time"
          },
          "canonicalAsset": {
            "$ref": "#/components/schemas/canonical-asset"
          },
          "projectIdentity": {
            "$ref": "#/components/schemas/project-identity"
          },
          "historicalAnchors": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "label",
                "hash",
                "ledgerIndex",
                "claim"
              ],
              "additionalProperties": false,
              "properties": {
                "id": {
                  "type": "string"
                },
                "label": {
                  "type": "string"
                },
                "hash": {
                  "type": "string",
                  "pattern": "^[0-9A-F]{64}$"
                },
                "ledgerIndex": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "claim": {
                  "type": "string"
                }
              }
            }
          },
          "claimStatuses": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "status",
                "meaning"
              ],
              "additionalProperties": false,
              "properties": {
                "status": {
                  "type": "string",
                  "enum": [
                    "ledger-verified",
                    "owner-confirmed",
                    "independently-sourced",
                    "derived",
                    "aspirational",
                    "unresolved"
                  ]
                },
                "meaning": {
                  "type": "string"
                }
              }
            }
          },
          "dynamicData": {
            "type": "object",
            "required": [
              "note",
              "endpoints"
            ],
            "properties": {
              "note": {
                "type": "string"
              },
              "endpoints": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              }
            }
          },
          "links": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "identity-response": {
        "title": "Canonical identity response data",
        "type": "object",
        "required": [
          "canonicalAsset",
          "projectIdentity",
          "claimStatuses",
          "capabilities"
        ],
        "additionalProperties": false,
        "properties": {
          "canonicalAsset": {
            "$ref": "#/components/schemas/canonical-asset"
          },
          "projectIdentity": {
            "$ref": "#/components/schemas/project-identity"
          },
          "claimStatuses": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "status",
                "meaning"
              ],
              "additionalProperties": false,
              "properties": {
                "status": {
                  "type": "string",
                  "enum": [
                    "ledger-verified",
                    "owner-confirmed",
                    "independently-sourced",
                    "derived",
                    "aspirational",
                    "unresolved"
                  ]
                },
                "meaning": {
                  "type": "string"
                }
              }
            }
          },
          "capabilities": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "name",
                "description",
                "status",
                "interfaces",
                "freshness",
                "provenanceNote",
                "schema",
                "limitations"
              ],
              "additionalProperties": false,
              "properties": {
                "name": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "available",
                    "legacy-available",
                    "deprecated",
                    "unavailable",
                    "planned"
                  ],
                  "description": "available: Gate 1 surface with a published schema. legacy-available: retained pre-Gate-1 surface, callable but unenveloped. deprecated: callable, scheduled for removal. unavailable: declared but not currently callable. planned: not implemented and not callable."
                },
                "interfaces": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "freshness": {
                  "type": "string"
                },
                "provenanceNote": {
                  "type": "string"
                },
                "schema": {
                  "type": "string"
                },
                "limitations": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "evidence-response": {
        "title": "Historical evidence response data",
        "type": "object",
        "required": [
          "classification",
          "items"
        ],
        "additionalProperties": false,
        "properties": {
          "classification": {
            "type": "string",
            "const": "historical-ledger-evidence"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ledger-evidence"
            }
          }
        }
      },
      "health-response": {
        "title": "Health response data",
        "type": "object",
        "required": [
          "status",
          "components"
        ],
        "additionalProperties": false,
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "operational",
              "degraded",
              "unavailable"
            ]
          },
          "components": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "component",
                "status",
                "detail"
              ],
              "additionalProperties": false,
              "properties": {
                "component": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "operational",
                    "degraded",
                    "unavailable"
                  ]
                },
                "detail": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          }
        }
      },
      "verify-response": {
        "title": "Asset verification result",
        "type": "object",
        "required": [
          "match",
          "canonicalTokenId",
          "comparisons",
          "mismatchReasons",
          "notes",
          "evidenceLinks"
        ],
        "additionalProperties": false,
        "properties": {
          "match": {
            "type": "boolean"
          },
          "canonicalTokenId": {
            "type": "string"
          },
          "comparisons": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "field",
                "provided",
                "canonical",
                "match",
                "reason"
              ],
              "additionalProperties": false,
              "properties": {
                "field": {
                  "type": "string",
                  "enum": [
                    "network",
                    "issuer",
                    "currencyCode"
                  ]
                },
                "provided": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "canonical": {
                  "type": "string"
                },
                "match": {
                  "type": "boolean"
                },
                "reason": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          },
          "mismatchReasons": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "evidenceLinks": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "supply-state": {
        "title": "ASTEROID supply state",
        "type": "object",
        "required": [
          "tokenId",
          "outstanding",
          "escrowed",
          "totalSupply",
          "circulating",
          "circulatingSharePct",
          "intendedIssuance",
          "returnedToIssuer",
          "issuanceAnchor",
          "claimStatus",
          "methodology"
        ],
        "additionalProperties": false,
        "properties": {
          "tokenId": {
            "type": "string"
          },
          "outstanding": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "escrowed": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "totalSupply": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "circulating": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "circulatingSharePct": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "intendedIssuance": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "returnedToIssuer": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "issuanceAnchor": {
            "type": "object",
            "required": [
              "hash",
              "ledgerIndex",
              "declaredValue",
              "declaredDestination",
              "revalidated",
              "observedValue",
              "observedDestination",
              "matchesDeclaration"
            ],
            "additionalProperties": false,
            "properties": {
              "hash": {
                "type": "string"
              },
              "ledgerIndex": {
                "type": "integer"
              },
              "declaredValue": {
                "type": "string"
              },
              "declaredDestination": {
                "type": "string"
              },
              "revalidated": {
                "type": "boolean"
              },
              "observedValue": {
                "type": [
                  "string",
                  "null"
                ],
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
                "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
              },
              "observedDestination": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "matchesDeclaration": {
                "type": [
                  "boolean",
                  "null"
                ]
              }
            }
          },
          "claimStatus": {
            "type": "object",
            "required": [
              "outstanding",
              "escrowed",
              "totalSupply",
              "circulating",
              "intendedIssuance"
            ],
            "additionalProperties": false,
            "properties": {
              "outstanding": {
                "type": "string",
                "enum": [
                  "ledger-verified",
                  "owner-confirmed",
                  "independently-sourced",
                  "derived",
                  "aspirational",
                  "unresolved"
                ]
              },
              "escrowed": {
                "type": "string",
                "enum": [
                  "ledger-verified",
                  "owner-confirmed",
                  "independently-sourced",
                  "derived",
                  "aspirational",
                  "unresolved"
                ]
              },
              "totalSupply": {
                "type": "string",
                "enum": [
                  "ledger-verified",
                  "owner-confirmed",
                  "independently-sourced",
                  "derived",
                  "aspirational",
                  "unresolved"
                ]
              },
              "circulating": {
                "type": "string",
                "enum": [
                  "ledger-verified",
                  "owner-confirmed",
                  "independently-sourced",
                  "derived",
                  "aspirational",
                  "unresolved"
                ]
              },
              "intendedIssuance": {
                "type": "string",
                "enum": [
                  "ledger-verified",
                  "owner-confirmed",
                  "independently-sourced",
                  "derived",
                  "aspirational",
                  "unresolved"
                ]
              }
            }
          },
          "methodology": {
            "type": "string"
          }
        }
      },
      "escrow-state": {
        "title": "ASTEROID treasury escrow schedule",
        "type": "object",
        "required": [
          "account",
          "accountRoleClaimStatus",
          "entries",
          "count",
          "totalEscrowed",
          "nextUnlock",
          "lastUnlock",
          "methodology"
        ],
        "additionalProperties": false,
        "properties": {
          "account": {
            "type": "string"
          },
          "accountRoleClaimStatus": {
            "type": "string",
            "enum": [
              "ledger-verified",
              "owner-confirmed",
              "independently-sourced",
              "derived",
              "aspirational",
              "unresolved"
            ]
          },
          "entries": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "index",
                "amount",
                "destination",
                "destinationIsTreasury",
                "finishAfter",
                "cancelAfter",
                "sequence",
                "state"
              ],
              "additionalProperties": false,
              "properties": {
                "index": {
                  "type": "string"
                },
                "amount": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
                  "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
                },
                "destination": {
                  "type": "string"
                },
                "destinationIsTreasury": {
                  "type": "boolean"
                },
                "finishAfter": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "format": "date-time"
                },
                "cancelAfter": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "format": "date-time"
                },
                "sequence": {
                  "type": "integer"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "locked",
                    "releasable",
                    "expired",
                    "unknown"
                  ]
                }
              }
            }
          },
          "count": {
            "type": "integer",
            "minimum": 0
          },
          "totalEscrowed": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "nextUnlock": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "lastUnlock": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "methodology": {
            "type": "string"
          }
        }
      },
      "liquidity-state": {
        "title": "ASTEROID liquidity state",
        "type": "object",
        "required": [
          "amm",
          "lpAccounts",
          "lockedLpTotal",
          "lockedLpSharePct",
          "communityLpSharePct",
          "methodology"
        ],
        "additionalProperties": false,
        "properties": {
          "amm": {
            "type": "object",
            "required": [
              "account",
              "asteroidReserve",
              "xrpReserve",
              "lpTokenSupply",
              "lpTokenCurrency",
              "lpTokenIssuer",
              "tradingFeeUnits",
              "tradingFeePct",
              "spotXrpPerAsteroid",
              "spotAsteroidPerXrp",
              "feeNote",
              "methodology"
            ],
            "additionalProperties": false,
            "properties": {
              "account": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "asteroidReserve": {
                "type": [
                  "string",
                  "null"
                ],
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
                "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
              },
              "xrpReserve": {
                "type": [
                  "string",
                  "null"
                ],
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
                "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
              },
              "lpTokenSupply": {
                "type": [
                  "string",
                  "null"
                ],
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
                "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
              },
              "lpTokenCurrency": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "lpTokenIssuer": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "tradingFeeUnits": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "XRPL AMM trading fee in units of 1/100,000."
              },
              "tradingFeePct": {
                "type": [
                  "string",
                  "null"
                ],
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
                "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
              },
              "spotXrpPerAsteroid": {
                "type": [
                  "string",
                  "null"
                ],
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
                "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
              },
              "spotAsteroidPerXrp": {
                "type": [
                  "string",
                  "null"
                ],
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
                "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
              },
              "feeNote": {
                "type": "string"
              },
              "methodology": {
                "type": "string"
              }
            }
          },
          "lpAccounts": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "address",
                "roleClaimStatus",
                "lpBalance",
                "shareOfLpSupplyPct",
                "impliedXrp",
                "impliedAsteroid",
                "control",
                "accessibilityNote"
              ],
              "additionalProperties": false,
              "properties": {
                "address": {
                  "type": "string"
                },
                "roleClaimStatus": {
                  "type": "string",
                  "enum": [
                    "ledger-verified",
                    "owner-confirmed",
                    "independently-sourced",
                    "derived",
                    "aspirational",
                    "unresolved"
                  ]
                },
                "lpBalance": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
                  "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
                },
                "shareOfLpSupplyPct": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
                  "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
                },
                "impliedXrp": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
                  "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
                },
                "impliedAsteroid": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
                  "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
                },
                "control": {
                  "type": "object",
                  "required": [
                    "masterKeyDisabled",
                    "regularKeyUnusable",
                    "signerListActive",
                    "verdict"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "masterKeyDisabled": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "regularKeyUnusable": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "signerListActive": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "verdict": {
                      "type": "string",
                      "enum": [
                        "no-known-signing-path",
                        "signing-path-remains",
                        "unknown"
                      ]
                    }
                  }
                },
                "accessibilityNote": {
                  "type": "string"
                }
              }
            }
          },
          "lockedLpTotal": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "lockedLpSharePct": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "communityLpSharePct": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "methodology": {
            "type": "string"
          }
        }
      },
      "lp-lock-verification": {
        "title": "ASTEROID LP-lock verification",
        "description": "Live verification of the signing paths on each project-declared LP-holding account, with LP balances and pro-rata implied reserves. A closed signing path is an observation at one validated ledger, not a permanence guarantee.",
        "type": "object",
        "required": [
          "tokenId",
          "methodologyId",
          "methodologyVersion",
          "ammAccount",
          "lpTokenCurrency",
          "lpTokenIssuer",
          "lpTokenSupply",
          "accountsChecked",
          "accountsWithNoKnownSigningPath",
          "accountsWithSigningPathRemaining",
          "accountsUnknown",
          "accounts",
          "lockedLpTotal",
          "lockedLpSharePct",
          "communityLpSharePct",
          "verdict",
          "verdictNote",
          "methodology",
          "limitations"
        ],
        "additionalProperties": false,
        "properties": {
          "tokenId": {
            "type": "string"
          },
          "methodologyId": {
            "type": "string"
          },
          "methodologyVersion": {
            "type": "string"
          },
          "ammAccount": {
            "type": [
              "string",
              "null"
            ]
          },
          "lpTokenCurrency": {
            "type": [
              "string",
              "null"
            ]
          },
          "lpTokenIssuer": {
            "type": [
              "string",
              "null"
            ]
          },
          "lpTokenSupply": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "accountsChecked": {
            "type": "integer",
            "minimum": 0
          },
          "accountsWithNoKnownSigningPath": {
            "type": "integer",
            "minimum": 0
          },
          "accountsWithSigningPathRemaining": {
            "type": "integer",
            "minimum": 0
          },
          "accountsUnknown": {
            "type": "integer",
            "minimum": 0
          },
          "accounts": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "address",
                "roleClaimStatus",
                "lpBalance",
                "shareOfLpSupplyPct",
                "impliedXrp",
                "impliedAsteroid",
                "control",
                "accessibilityNote"
              ],
              "additionalProperties": false,
              "properties": {
                "address": {
                  "type": "string"
                },
                "roleClaimStatus": {
                  "type": "string",
                  "enum": [
                    "ledger-verified",
                    "owner-confirmed",
                    "independently-sourced",
                    "derived",
                    "aspirational",
                    "unresolved"
                  ]
                },
                "lpBalance": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
                  "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
                },
                "shareOfLpSupplyPct": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
                  "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
                },
                "impliedXrp": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
                  "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
                },
                "impliedAsteroid": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
                  "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
                },
                "control": {
                  "type": "object",
                  "required": [
                    "masterKeyDisabled",
                    "regularKeyUnusable",
                    "signerListActive",
                    "verdict"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "masterKeyDisabled": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "regularKeyUnusable": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "signerListActive": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "verdict": {
                      "type": "string",
                      "enum": [
                        "no-known-signing-path",
                        "signing-path-remains",
                        "unknown"
                      ]
                    }
                  }
                },
                "accessibilityNote": {
                  "type": "string"
                }
              }
            }
          },
          "lockedLpTotal": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "lockedLpSharePct": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "communityLpSharePct": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "verdict": {
            "type": "string",
            "enum": [
              "all-checked-accounts-have-no-known-signing-path",
              "some-checked-accounts-retain-a-signing-path",
              "no-checked-account-has-a-closed-signing-path",
              "unknown"
            ]
          },
          "verdictNote": {
            "type": "string"
          },
          "methodology": {
            "type": "string"
          },
          "limitations": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "holder-state": {
        "title": "ASTEROID trust-line and holder counts",
        "type": "object",
        "required": [
          "trustLines",
          "nonZeroHolders",
          "complete",
          "pagesRead",
          "pageLimit",
          "methodology"
        ],
        "additionalProperties": false,
        "properties": {
          "trustLines": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0
          },
          "nonZeroHolders": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0
          },
          "complete": {
            "type": "boolean"
          },
          "pagesRead": {
            "type": "integer",
            "minimum": 0
          },
          "pageLimit": {
            "type": "integer",
            "minimum": 1
          },
          "methodology": {
            "type": "string"
          }
        }
      },
      "market-state": {
        "title": "ASTEROID composite market state",
        "type": "object",
        "required": [
          "tokenId",
          "supply",
          "liquidity",
          "escrows",
          "holders",
          "derived",
          "sectionProvenance",
          "disclaimer"
        ],
        "additionalProperties": false,
        "properties": {
          "tokenId": {
            "type": "string"
          },
          "supply": {
            "$ref": "#/components/schemas/supply-state"
          },
          "liquidity": {
            "$ref": "#/components/schemas/liquidity-state"
          },
          "escrows": {
            "$ref": "#/components/schemas/escrow-state"
          },
          "holders": {
            "$ref": "#/components/schemas/holder-state"
          },
          "derived": {
            "type": "object",
            "required": [
              "spotXrpPerAsteroid",
              "pooledAsteroidSharePct",
              "notQuoteNotice"
            ],
            "additionalProperties": false,
            "properties": {
              "spotXrpPerAsteroid": {
                "type": [
                  "string",
                  "null"
                ],
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
                "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
              },
              "pooledAsteroidSharePct": {
                "type": [
                  "string",
                  "null"
                ],
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
                "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
              },
              "notQuoteNotice": {
                "type": "string"
              }
            }
          },
          "sectionProvenance": {
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "required": [
                "observedAt",
                "ledgerIndex",
                "node",
                "method"
              ],
              "additionalProperties": false,
              "properties": {
                "observedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "ledgerIndex": {
                  "type": [
                    "integer",
                    "null"
                  ],
                  "description": "Validated ledger index, or null when no ledger read was performed."
                },
                "node": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "method": {
                  "type": "string"
                }
              }
            }
          },
          "disclaimer": {
            "type": "string"
          }
        }
      },
      "calculation-input": {
        "title": "Calculation input",
        "description": "The exact inputs a derived value was computed from, republished so the calculation can be reproduced independently against the published test vectors.",
        "type": "object",
        "required": [
          "formulaId",
          "methodologyId",
          "methodologyVersion",
          "direction",
          "side",
          "amount",
          "poolIn",
          "poolOut",
          "assetIn",
          "assetOut",
          "tradingFeeUnits",
          "feeFraction",
          "slippageTolerancePct",
          "rounding"
        ],
        "additionalProperties": false,
        "properties": {
          "formulaId": {
            "type": "string",
            "const": "constant-product-swap"
          },
          "methodologyId": {
            "type": "string"
          },
          "methodologyVersion": {
            "type": "string"
          },
          "direction": {
            "type": "string",
            "enum": [
              "xrp-to-asteroid",
              "asteroid-to-xrp"
            ]
          },
          "side": {
            "type": "string",
            "enum": [
              "exact-in",
              "exact-out"
            ]
          },
          "amount": {
            "type": "string"
          },
          "poolIn": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "poolOut": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "assetIn": {
            "type": "string"
          },
          "assetOut": {
            "type": "string"
          },
          "tradingFeeUnits": {
            "type": "integer",
            "minimum": 0
          },
          "feeFraction": {
            "type": "string"
          },
          "slippageTolerancePct": {
            "type": [
              "string",
              "null"
            ]
          },
          "rounding": {
            "type": "string"
          }
        }
      },
      "calculation-result": {
        "title": "Calculation result",
        "description": "The result of a constant-product AMM calculation. Every quantity is an exact decimal string. Indicative and never executable.",
        "type": "object",
        "required": [
          "side",
          "amountIn",
          "amountOut",
          "feeAmountIn",
          "tradingFeeUnits",
          "tradingFeePct",
          "spotPrice",
          "effectivePrice",
          "priceImpactPct",
          "poolUtilisationPct",
          "poolInAfter",
          "poolOutAfter",
          "slippageTolerancePct",
          "minimumReceived",
          "maximumPaid"
        ],
        "additionalProperties": false,
        "properties": {
          "side": {
            "type": "string",
            "enum": [
              "exact-in",
              "exact-out"
            ]
          },
          "amountIn": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "amountOut": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "feeAmountIn": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "tradingFeeUnits": {
            "type": "integer"
          },
          "tradingFeePct": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "spotPrice": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "effectivePrice": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "priceImpactPct": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "poolUtilisationPct": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "poolInAfter": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "poolOutAfter": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "slippageTolerancePct": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "minimumReceived": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          },
          "maximumPaid": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
            "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
          }
        }
      },
      "quote-request": {
        "title": "Indicative AMM quote request",
        "description": "Request contract for GET /api/v1/quote (query parameters) and the get_swap_quote MCP tool (arguments). No account, key or credential is ever part of a request.",
        "type": "object",
        "required": [
          "direction",
          "amount"
        ],
        "additionalProperties": false,
        "properties": {
          "direction": {
            "type": "string",
            "enum": [
              "xrp-to-asteroid",
              "asteroid-to-xrp"
            ],
            "description": "Which asset is paid in and which is received."
          },
          "side": {
            "type": "string",
            "enum": [
              "exact-in",
              "exact-out"
            ],
            "default": "exact-in",
            "description": "Whether `amount` is the exact input paid or the exact output required."
          },
          "amount": {
            "type": "string",
            "pattern": "^[0-9]+(\\.[0-9]+)?$",
            "description": "Positive exact decimal string in units of the asset implied by `side`."
          },
          "slippageTolerancePct": {
            "type": [
              "string",
              "null"
            ],
            "description": "Optional tolerance between 0 and 50, used only to derive minimumReceived / maximumPaid."
          }
        }
      },
      "quote-response": {
        "title": "Indicative ASTEROID AMM quote",
        "type": "object",
        "required": [
          "tokenId",
          "direction",
          "assetIn",
          "assetOut",
          "request",
          "lifecycle",
          "calculation",
          "quote",
          "pool",
          "warnings",
          "error",
          "executable",
          "claimStatus",
          "methodology",
          "limitations"
        ],
        "additionalProperties": false,
        "properties": {
          "tokenId": {
            "type": "string"
          },
          "direction": {
            "type": "string",
            "enum": [
              "xrp-to-asteroid",
              "asteroid-to-xrp"
            ]
          },
          "assetIn": {
            "type": "string"
          },
          "assetOut": {
            "type": "string"
          },
          "request": {
            "type": "object",
            "required": [
              "side",
              "amount",
              "slippageTolerancePct"
            ],
            "additionalProperties": false,
            "properties": {
              "side": {
                "type": "string",
                "enum": [
                  "exact-in",
                  "exact-out"
                ]
              },
              "amount": {
                "type": "string"
              },
              "slippageTolerancePct": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "lifecycle": {
            "type": "object",
            "required": [
              "quoteId",
              "methodologyId",
              "methodologyVersion",
              "ledgerIndex",
              "observedAt",
              "maxAgeMs",
              "expiresAt",
              "remainingMs",
              "cache",
              "testVectors"
            ],
            "additionalProperties": false,
            "properties": {
              "quoteId": {
                "type": "string",
                "description": "Identifier for this estimate. It is a correlation handle only: it reserves nothing, cannot be redeemed and cannot be executed."
              },
              "methodologyId": {
                "type": "string"
              },
              "methodologyVersion": {
                "type": "string"
              },
              "ledgerIndex": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "observedAt": {
                "type": "string",
                "format": "date-time"
              },
              "maxAgeMs": {
                "type": "integer",
                "minimum": 0
              },
              "expiresAt": {
                "type": "string",
                "format": "date-time",
                "description": "observedAt + maxAgeMs, always measured from the original ledger observation and never restarted by a cache hit. After this instant the estimate must be discarded and the pool re-read. Expiry does not mean the estimate was ever executable."
              },
              "remainingMs": {
                "type": "integer",
                "minimum": 0,
                "description": "Freshness left on the original observation when the estimate was produced: maxAgeMs minus the age of the pool reading. A cache hit never restarts the window, so expiresAt always equals observedAt + maxAgeMs."
              },
              "cache": {
                "oneOf": [
                  {
                    "$schema": "https://json-schema.org/draft/2020-12/schema",
                    "$id": "https://asteroidxrpl.com/schemas/v1/cache-freshness-metadata.json",
                    "title": "Cache freshness metadata",
                    "description": "Age disclosure for a reading served from the bounded single-flight server cache. A cached reading still states the validated ledger index and observation time it was produced from; its age is never hidden.",
                    "type": "object",
                    "required": [
                      "hit",
                      "cachedAt",
                      "ageMs",
                      "ttlMs"
                    ],
                    "additionalProperties": false,
                    "properties": {
                      "hit": {
                        "type": "boolean",
                        "description": "True when this response reused a cached reading."
                      },
                      "cachedAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "ageMs": {
                        "type": "integer",
                        "minimum": 0
                      },
                      "ttlMs": {
                        "type": "integer",
                        "minimum": 0
                      },
                      "key": {
                        "type": "string"
                      }
                    }
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "testVectors": {
                "type": "string",
                "format": "uri"
              }
            }
          },
          "calculation": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/calculation-input"
              },
              {
                "type": "null"
              }
            ]
          },
          "quote": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/calculation-result"
              },
              {
                "type": "null"
              }
            ]
          },
          "pool": {
            "type": "object",
            "required": [
              "account",
              "xrpReserve",
              "asteroidReserve",
              "tradingFeeUnits",
              "tradingFeePct"
            ],
            "additionalProperties": false,
            "properties": {
              "account": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "xrpReserve": {
                "type": [
                  "string",
                  "null"
                ],
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
                "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
              },
              "asteroidReserve": {
                "type": [
                  "string",
                  "null"
                ],
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
                "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
              },
              "tradingFeeUnits": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "tradingFeePct": {
                "type": [
                  "string",
                  "null"
                ],
                "pattern": "^-?[0-9]+(\\.[0-9]+)?$",
                "description": "Exact decimal string. Never rounded for transport. Null means unreadable, not zero."
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "code",
                "severity",
                "message"
              ],
              "additionalProperties": false,
              "properties": {
                "code": {
                  "type": "string"
                },
                "severity": {
                  "type": "string",
                  "enum": [
                    "info",
                    "warning"
                  ]
                },
                "message": {
                  "type": "string"
                }
              }
            }
          },
          "error": {
            "oneOf": [
              {
                "type": "object",
                "required": [
                  "code",
                  "message"
                ],
                "additionalProperties": false,
                "properties": {
                  "code": {
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  }
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "executable": {
            "const": false,
            "description": "Always false. This service never produces an executable quote."
          },
          "claimStatus": {
            "type": "string",
            "enum": [
              "ledger-verified",
              "owner-confirmed",
              "independently-sourced",
              "derived",
              "aspirational",
              "unresolved"
            ]
          },
          "methodology": {
            "type": "string"
          },
          "limitations": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      }
    }
  },
  "externalDocs": {
    "description": "Agent gateway",
    "url": "https://asteroidxrpl.com/agents"
  },
  "x-schema-base": "https://asteroidxrpl.com/schemas/v1",
  "x-mcp-endpoint": "https://asteroidxrpl.com/mcp"
}