{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/0x/main/json-schema/0x-swap-quote-schema.json",
  "title": "0x Swap Quote",
  "description": "A firm quote returned by /swap/allowance-holder/quote and /swap/permit2/quote. Includes the calldata required to submit the swap on-chain.",
  "x-schema-source": "openapi",
  "x-source-url": "openapi/0x-api.yaml#/components/schemas",
  "type": "object",
  "properties": {
    "liquidityAvailable": {
      "type": "boolean",
      "description": "Whether liquidity is available for the requested pair."
    },
    "chainId": {
      "type": "integer",
      "description": "Chain ID the quote was generated for."
    },
    "buyToken": {
      "type": "string",
      "pattern": "^0x[a-fA-F0-9]{40}$",
      "description": "Contract address of the buy token."
    },
    "sellToken": {
      "type": "string",
      "pattern": "^0x[a-fA-F0-9]{40}$",
      "description": "Contract address of the sell token."
    },
    "buyAmount": {
      "type": "string",
      "pattern": "^[0-9]+$",
      "description": "Amount of buyToken returned, in base units."
    },
    "sellAmount": {
      "type": "string",
      "pattern": "^[0-9]+$",
      "description": "Amount of sellToken charged, in base units."
    },
    "minBuyAmount": {
      "type": "string",
      "pattern": "^[0-9]+$",
      "description": "Minimum buyToken amount after slippage tolerance."
    },
    "blockNumber": {
      "type": "string",
      "pattern": "^[0-9]+$",
      "description": "Block at which liquidity was sampled."
    },
    "allowanceTarget": {
      "type": [
        "string",
        "null"
      ],
      "pattern": "^0x[a-fA-F0-9]{40}$",
      "description": "Contract the taker must approve to spend sellToken. Null for native asset and wrap/unwrap."
    },
    "transaction": {
      "type": "object",
      "description": "Pre-built calldata for submission to the network.",
      "properties": {
        "to": {
          "type": "string",
          "pattern": "^0x[a-fA-F0-9]{40}$"
        },
        "data": {
          "type": "string",
          "pattern": "^0x[a-fA-F0-9]+$"
        },
        "gas": {
          "type": "string",
          "pattern": "^[0-9]+$"
        },
        "gasPrice": {
          "type": "string",
          "pattern": "^[0-9]+$"
        },
        "value": {
          "type": "string",
          "pattern": "^[0-9]+$"
        }
      },
      "required": [
        "to",
        "data",
        "gas",
        "value"
      ]
    },
    "route": {
      "type": "object",
      "description": "Routing detail: which liquidity sources were used and at what fill percentage.",
      "properties": {
        "fills": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "source": {
                "type": "string"
              },
              "from": {
                "type": "string",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              "to": {
                "type": "string",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              "proportionBps": {
                "type": "integer"
              }
            }
          }
        },
        "tokens": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "address": {
                "type": "string",
                "pattern": "^0x[a-fA-F0-9]{40}$"
              },
              "symbol": {
                "type": "string"
              }
            }
          }
        }
      }
    },
    "fees": {
      "type": "object",
      "description": "Detailed fee breakdown (integrator fee, zero-ex fee, gas fee).",
      "properties": {
        "integratorFee": {
          "type": [
            "object",
            "null"
          ]
        },
        "zeroExFee": {
          "type": [
            "object",
            "null"
          ]
        },
        "gasFee": {
          "type": [
            "object",
            "null"
          ]
        }
      }
    },
    "issues": {
      "type": "object",
      "description": "Allowance, balance, or signature issues blocking submission.",
      "properties": {
        "allowance": {
          "type": [
            "object",
            "null"
          ]
        },
        "balance": {
          "type": [
            "object",
            "null"
          ]
        },
        "simulationIncomplete": {
          "type": "boolean"
        },
        "invalidSourcesPassed": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "permit2": {
      "type": [
        "object",
        "null"
      ],
      "description": "Permit2 EIP-712 typed data the taker must sign (Permit2 flow only).",
      "properties": {
        "type": {
          "const": "Permit2"
        },
        "hash": {
          "type": "string"
        },
        "eip712": {
          "type": "object"
        }
      }
    },
    "totalNetworkFee": {
      "type": [
        "string",
        "null"
      ],
      "pattern": "^[0-9]+$",
      "description": "Total network fee in native token base units."
    },
    "gas": {
      "type": [
        "string",
        "null"
      ],
      "pattern": "^[0-9]+$"
    },
    "gasPrice": {
      "type": [
        "string",
        "null"
      ],
      "pattern": "^[0-9]+$"
    },
    "expiration": {
      "type": "integer",
      "description": "Unix timestamp when this quote expires."
    }
  },
  "required": [
    "liquidityAvailable"
  ]
}