{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/anygas-xyz/json-schema/anygas-xyz-quote-schema.json",
  "title": "Quote",
  "description": "Single-intent quote. Non-EVM legs return a dedicated shape (shown); EVM<->EVM lanes return best-of-N fields (bridge, bestOf, compared[]).",
  "x-generated": "2026-11-01",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/anygas-xyz-openapi.json#/components/schemas/Quote",
  "type": "object",
  "properties": {
    "gasless": {
      "type": "boolean"
    },
    "from": {
      "type": "object",
      "properties": {
        "chain": {},
        "token": {
          "type": "string"
        },
        "amount": {
          "type": "string"
        }
      }
    },
    "to": {
      "type": "object",
      "additionalProperties": true
    },
    "bridge": {
      "type": "string"
    },
    "via": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "bestOf": {
      "type": "integer",
      "description": "EVM<->EVM: number of aggregators compared"
    },
    "compared": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "description": "EVM<->EVM: per-aggregator outputs"
    },
    "durationSec": {
      "type": "number"
    },
    "robynRouteFeeBps": {
      "type": "integer"
    },
    "robynRouteFee": {
      "type": "string"
    },
    "quoteOnly": {
      "type": "boolean",
      "description": "TRUE means this corridor can be PRICED but NOT settled: POST /api/route/execute will refuse it with status UNSUPPORTED_DIRECTION. Absent or false means the route is executable. ALWAYS branch on this before presenting a quote as actionable - a quoteOnly route is for price comparison only. Currently set for Solana (both directions) and stellar->evm."
    },
    "executeReady": {
      "type": "boolean",
      "description": "False alongside quoteOnly:true. Present so a client can gate on a single positive assertion of executability rather than inferring it from the absence of an error."
    },
    "quoteOnlyReason": {
      "type": "string",
      "description": "Human-readable explanation of why this corridor cannot settle, and what would lift the restriction."
    },
    "floatlane": {
      "type": "object",
      "additionalProperties": true,
      "description": "Present when the Robyn float lane can serve this pair (our own inventory on both chains, no bridge in the path). Key fields: `fee` (base units), `effectiveFeeBps`, `pricing.mode` (free-micro-vip | micro-standard | rebalancing-discount | rebalancing-partial | base | adaptive | undercut), `freeTier` (whether the micro tier applied and, if not, exactly which check failed), `vip` (member status and the recognised collections), `capNow` (largest transfer this lane can serve right now = 25% of destination float) and `destFloat`. MICRO TIER: transfers of $0.10-$25 to a low-cost destination are FREE for holders of a recognised member NFT, and cost a fraction of a cent for everyone else - never more than the standard 8bps. Pass `fromAddress` so membership can be recognised.",
      "properties": {
        "fee": {
          "type": "string"
        },
        "effectiveFeeBps": {
          "type": "number"
        },
        "capNow": {
          "type": "string",
          "description": "Largest transfer this lane can serve right now, in base units"
        },
        "pricing": {
          "type": "object",
          "additionalProperties": true
        },
        "freeTier": {
          "type": "object",
          "additionalProperties": true
        },
        "vip": {
          "type": "object",
          "additionalProperties": true
        }
      }
    },
    "note": {
      "type": "string"
    }
  },
  "additionalProperties": true
}