{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://raw.githubusercontent.com/api-evangelist/paraswap/main/json-schema/price-route.json",
  "title": "ParaSwap PriceRoute",
  "description": "The optimal swap route and pricing data returned by the ParaSwap /prices endpoint. Pass this object unmodified to /transactions to build a transaction.",
  "type": "object",
  "required": [
    "blockNumber",
    "network",
    "srcToken",
    "srcDecimals",
    "srcAmount",
    "destToken",
    "destDecimals",
    "destAmount",
    "bestRoute",
    "gasCost",
    "gasCostUSD",
    "side",
    "tokenTransferProxy",
    "contractAddress",
    "contractMethod",
    "srcUSD",
    "destUSD",
    "partner",
    "partnerFee",
    "maxImpactReached",
    "hmac"
  ],
  "properties": {
    "blockNumber": {
      "type": "integer",
      "minimum": 0,
      "description": "Block number at which the price was computed.",
      "example": 13015909
    },
    "network": {
      "$ref": "#/definitions/Network"
    },
    "srcToken": {
      "type": "string",
      "description": "Source token contract address.",
      "example": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
    },
    "srcDecimals": {
      "type": "integer",
      "minimum": 0,
      "description": "Decimal precision of the source token."
    },
    "srcAmount": {
      "type": "string",
      "pattern": "^\\d+$",
      "description": "Amount of source token in its smallest denomination.",
      "example": "1000000000000000000"
    },
    "destToken": {
      "type": "string",
      "description": "Destination token contract address.",
      "example": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
    },
    "destDecimals": {
      "type": "integer",
      "minimum": 0,
      "description": "Decimal precision of the destination token."
    },
    "destAmount": {
      "type": "string",
      "pattern": "^\\d+$",
      "description": "Amount of destination token in its smallest denomination.",
      "example": "3273085640"
    },
    "bestRoute": {
      "type": "array",
      "description": "Array of optimal route segments comprising the swap.",
      "items": {
        "$ref": "#/definitions/OptimalRoute"
      }
    },
    "others": {
      "type": "array",
      "description": "Comparison quotes from other exchanges, populated when otherExchangePrices=true is passed to /prices.",
      "items": {
        "$ref": "#/definitions/OptionalRate"
      }
    },
    "gasCost": {
      "type": "string",
      "description": "Estimated gas units for the swap.",
      "example": "111435"
    },
    "gasCostUSD": {
      "type": "string",
      "description": "Estimated gas cost in USD.",
      "example": "11.947163"
    },
    "side": {
      "$ref": "#/definitions/SwapSide"
    },
    "tokenTransferProxy": {
      "type": "string",
      "description": "Address of the token transfer proxy contract.",
      "example": "0x3e7d31751347BAacf35945074a4a4A41581B2271"
    },
    "contractAddress": {
      "type": "string",
      "description": "Address of the Augustus router contract to use.",
      "example": "0xDEF171Fe48CF0115B1d80b88dc8eAB59176FEe57"
    },
    "contractMethod": {
      "type": "string",
      "description": "Augustus router method to call.",
      "example": "swapOnUniswap"
    },
    "srcUSD": {
      "type": "string",
      "description": "USD value of the source amount.",
      "example": "3230.3000000000"
    },
    "destUSD": {
      "type": "string",
      "description": "USD value of the destination amount.",
      "example": "3218.9300566052"
    },
    "partner": {
      "type": "string",
      "description": "Partner identifier.",
      "example": "paraswap.io"
    },
    "partnerFee": {
      "type": "integer",
      "minimum": 0,
      "description": "Partner fee in basis points.",
      "example": 0
    },
    "maxImpactReached": {
      "type": "boolean",
      "description": "True if price impact exceeds maximum threshold.",
      "example": false
    },
    "hmac": {
      "type": "string",
      "description": "HMAC signature to verify route integrity.",
      "example": "319c5cf83098a07aeebb11bed6310db51311201f"
    }
  },
  "definitions": {
    "Network": {
      "type": "number",
      "description": "Blockchain network ID.",
      "enum": [1, 3, 56, 137]
    },
    "SwapSide": {
      "type": "string",
      "description": "Whether the specified amount is for the source token (SELL) or destination token (BUY).",
      "enum": ["SELL", "BUY"]
    },
    "OptimalRoute": {
      "type": "object",
      "required": ["percent", "swaps"],
      "properties": {
        "percent": {
          "type": "number",
          "description": "Percentage of total swap volume routed through this path.",
          "example": 100
        },
        "swaps": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/OptimalSwap"
          }
        }
      }
    },
    "OptimalSwap": {
      "type": "object",
      "required": ["srcToken", "srcDecimals", "destToken", "destDecimals", "swapExchanges"],
      "properties": {
        "srcToken": {
          "type": "string"
        },
        "srcDecimals": {
          "type": "integer",
          "minimum": 0
        },
        "destToken": {
          "type": "string"
        },
        "destDecimals": {
          "type": "integer",
          "minimum": 0
        },
        "swapExchanges": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/OptimalSwapExchange"
          }
        }
      }
    },
    "OptimalSwapExchange": {
      "type": "object",
      "required": ["exchange", "srcAmount", "destAmount", "percent"],
      "properties": {
        "exchange": {
          "type": "string",
          "description": "Name of the DEX used for this swap leg.",
          "example": "UniswapV2"
        },
        "srcAmount": {
          "type": "string",
          "example": "1000000000000000000"
        },
        "destAmount": {
          "type": "string",
          "example": "3273085640"
        },
        "percent": {
          "type": "number",
          "example": 100
        },
        "data": {
          "type": "object",
          "description": "Exchange-specific routing data."
        }
      }
    },
    "OptionalRate": {
      "type": "object",
      "required": ["exchange", "srcAmount", "destAmount"],
      "properties": {
        "exchange": {
          "type": "string"
        },
        "srcAmount": {
          "type": "string"
        },
        "destAmount": {
          "type": "string"
        },
        "unit": {
          "type": "string"
        },
        "data": {
          "type": "object"
        }
      }
    }
  }
}
