Skip to main content
Glama

Get a RAVN swap quote

ravn_quote
Read-only

Get a swap quote from RAVN — same-chain or cross-chain, across 18 chains including native (non-wrapped) Bitcoin and Solana as source or destination. Free, no API key or payment required. Returns a quoteToken; pass it to ravn_execute to get a signable/broadcastable execution payload.

Input Schema

NameRequiredDescriptionDefault
apiKeyNoYour RAVN API key, if you have one — raises your rate limit
timeoutMsNoThe race's time limit in milliseconds, counted from its start: once it has passed and some venue has priced the swap, slower venues are left out (with none priced yet, the first price ends the wait; a quote with slippage.noMinimum counts only 2000 ms past the limit). Defaults to 6000; a positive integer, clamped to 1000–15000
inputTokenYesToken contract address, or 0xEeeeeEeeeEeEeeEeEeEeeeEEeeeeEeeeeeeeEEeE for the chain's native coin
onlyVenuesNoRace only these venues, e.g. ["bebop"] for an RFQ-only race. Every other venue is left out (including ones RAVN adds later); excludeVenues still applies on top. It covers every venue RAVN routes your funds through: a multi-step route is offered only when its own venue id and every venue in its hops are listed, e.g. ["compose","jupiter","relay"] or ["relay","kyberswap"]. RAVN's stablecoin route also needs 0x_swap beside its hops: it sweeps the leftover. Venues that swap for you may route through other venues of their own choosing, which this can't reach: Layerswap (a Solana token often goes through Jupiter first), Relay, Rift, Across (when it swaps before or after bridging) and Mayan (Jupiter on Solana, other DEXs such as Nordstern on EVM). Same-chain venues only quote same-chain pairs; if none of the named venues can quote you get NO_LIQUIDITY
inputAmountYesPositive integer string, in the input token's smallest unit (no decimals)
outputTokenYesToken contract address, or 0xEeeeeEeeeEeEeeEeEeEeeeEEeeeeEeeeeeeeEEeE for the chain's native coin
rankingModeNobest_output (default) picks the highest net output; fastest picks the quickest-settling quote within slippageBps
slippageBpsNoMax acceptable slippage in basis points. Setting it drops venues that enforce no minimum (today Rift) from the race unless allowNoMinimum is true
userAddressYesAddress the input asset will be sent from
confidentialNoSettle privately via NEAR Intents' Confidential Intents so the deposit and payout can't be linked on-chain. Through this MCP server only NEAR quotes it (NO_LIQUIDITY if it can't, never a public fallback): RAVN's other private venues aren't offered here — Houdini Swap needs the end user's IP, user-agent and country for its compliance rules, and Hinkal the user's country and two signatures from the paying wallet before it builds, none of which an MCP call carries — use POST /api/v1/quote and /api/v1/execute for them. ~0.3 bps extra on EVM-to-EVM, ~5-8 bps extra when Bitcoin or Solana is a leg, and it can settle slower than a public swap (Bitcoin-source: 13 min public vs 43 min confidential) — read estimatedTimeSeconds before executing
inputChainIdYesNumeric chain id, e.g. 1=Ethereum, 8453=Base, -1=Bitcoin, -2=Solana — see ravn_chains for the full list, or ravn_health for live venue status
excludeVenuesNoDrop specific venues, e.g. a risk objection to one of them or ravn_health showing it degraded. An excluded venue is used nowhere in the route, including the steps of RAVN's multi-step routes (compose, and relay quotes that carry hops); a multi-step route that needs it isn't offered. Venues that swap for you may route through other venues of their own choosing, which this can't reach: Layerswap (a Solana token often goes through Jupiter first), Relay, Rift, Across (when it swaps before or after bridging) and Mayan (Jupiter on Solana, other DEXs such as Nordstern on EVM). Naming a venue that was never eligible for this pair is a no-op, not an error
outputChainIdYesNumeric chain id, e.g. 1=Ethereum, 8453=Base, -1=Bitcoin, -2=Solana — see ravn_chains for the full list, or ravn_health for live venue status
refundAddressNoWhere to refund the input asset if the swap fails. Selling native Bitcoin with userAddress set to a Bitcoin address and no refundAddress refunds to userAddress. Well-known sample addresses (e.g. bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh) count as no address: supply the real refund. Otherwise it is required here, at quote time, for a Bitcoin-source Relay or THORChain quote — neither has an execute-time re-bind, so omitting it returns a priced-but-unexecutable preview and supplying it later on ravn_execute is refused. Other BTC-source venues (Garden, Chainflip, Rift, NEAR Intents) support binding this at execute time instead. Validated against the INPUT chain (refunds are paid back on the origin), with the same non-wallet-address check as destinationAddress
allowNoMinimumNoLet venues that enforce no minimum (today Rift) race even though slippageBps is set. Their quotes carry slippage.noMinimum true and fill at the venue's own rate: slippageBps does not protect them
destinationAddressNoWhere output should land, if different from userAddress. Required here, at quote time, to get an executable quote from Relay (Bitcoin as the source), THORChain (Bitcoin either direction), Across (a Solana-touching route), or Eco (a cross-ecosystem route) — omit it there and you get back a priced-but-unexecutable preview instead (see ravn_quote's executable), not an error. A malformed address, one from the wrong ecosystem, or a known non-wallet address (a RAVN-listed token's mint/contract, this swap's own tokens, the native-coin sentinel, burn addresses, Solana core programs, and via an on-chain lookup a Solana token account or program — the token-account error names the owning wallet, which is the address to use) IS an error here — funds sent there are unrecoverable. Omit the field rather than passing an empty string; an empty string is treated as omitted

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "alternatives": {
      -            "description": "Every other venue that raced and produced a usable quote, best expected net output first (each carries expectedOutputAmount: a quote with slippage.noMinimum counts 0.05–1% under its outputAmount, by token type and size, the shortfall such a venue has delivered; one more than 1% above the best quote that holds a minimum is listed here but never picked as the main quote). Each has its own quoteToken to pass to ravn_execute instead, and pickable: false when RAVN would never pick it (a preview-only price while an executable one exists, or a no-minimum quote more than 1% above every quote holding a minimum), so choose among pickable ones on expectedOutputAmount; and its own expiresAt (same meaning as above; venues differ, so check it). Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      -            "items": {
      -              "additionalProperties": {},
      -              "propertyNames": {
      -                "type": "string"
      -              },
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "estimatedTimeIsGuess": {
      -            "description": "True when the time is RAVN's estimate, not the venue's own figure",
      -            "type": "boolean"
      -          },
      -          "estimatedTimeSeconds": {
      -            "type": "number"
      -          },
      -          "executable": {
      -            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      -            "type": "boolean"
      -          },
      -          "expectedOutputAmount": {
      -            "description": "What RAVN counts on this route delivering, in the output token's base units: output.amount, less slippage.expectedShortfallBps when the venue holds no minimum (Rift); the same as output.amount otherwise. RAVN ranks on this (less gas), so compare routes on it, not output.amount. Alternatives carry it too",
      -            "type": "string"
      -          },
      -          "expiresAt": {
      -            "description": "Epoch ms, always a real time: call ravn_execute before this, re-quote after. Never refused for age before it; up to 10 minutes past it, execute prices the same route again and builds it only if it still meets the minimum this quote showed, else (or later) fails with QUOTE_EXPIRED (already 5 s ahead of the venue's own deadline). Two-hop routes (venue.id compose) and venues with no deadline get 60 s: compose re-prices at execute and refuses only if the minimum shown can no longer be met",
      -            "type": "number"
      -          },
      -          "fee": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "gas": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "estimated": {
      -                    "type": "boolean"
      -                  },
      -                  "native": {
      -                    "type": "string"
      -                  },
      -                  "nativeSymbol": {
      -                    "type": "string"
      -                  },
      -                  "usd": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "native",
      -                  "nativeSymbol",
      -                  "usd",
      -                  "estimated"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "The native gas the user must hold; null on gasless venues"
      -          },
      -          "hops": {
      -            "description": "RAVN routes (venue.name \"RAVN\": two-hop, or Relay with a DEX on arrival): the venues it runs through, in order. Sign hop 1; hop 2 is a unique deposit",
      -            "items": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "id": {
      -                  "type": "string"
      -                },
      -                "name": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "id",
      -                "name"
      -              ],
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "input": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "inputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      -          },
      -          "output": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "outputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      -          },
      -          "quoteToken": {
      -            "description": "Opaque token — pass to ravn_execute",
      -            "type": "string"
      -          },
      -          "routeType": {
      -            "type": "string"
      -          },
      -          "slippage": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "bps": {
      -                    "type": "number"
      -                  },
      -                  "expectedShortfallBps": {
      -                    "description": "How far under its output RAVN counts on a no-minimum route delivering, in bps (5 for a $1k+ swap of listed, non-meme tokens up to 100 under $100); 0 when noMinimum is false. Already taken off expectedOutputAmount",
      -                    "type": "number"
      -                  },
      -                  "guaranteedMin": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  },
      -                  "isFirm": {
      -                    "type": "boolean"
      -                  },
      -                  "noMinimum": {
      -                    "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection",
      -                    "type": "boolean"
      -                  }
      -                },
      -                "required": [
      -                  "bps",
      -                  "isFirm",
      -                  "guaranteedMin",
      -                  "noMinimum",
      -                  "expectedShortfallBps"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "Null when the venue reports no slippage bound"
      -          },
      -          "venue": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          }
      -        },
      -        "required": [
      -          "quoteToken",
      -          "venue",
      -          "routeType",
      -          "input",
      -          "output",
      -          "expectedOutputAmount",
      -          "fee",
      -          "executable",
      -          "slippage",
      -          "gas",
      -          "inputUsd",
      -          "outputUsd",
      -          "estimatedTimeSeconds",
      -          "estimatedTimeIsGuess",
      -          "expiresAt",
      -          "alternatives"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "data",
      -      "meta"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "code": {
      -            "type": "string"
      -          },
      -          "details": {},
      -          "message": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "code",
      -          "message"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "meta"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "alternatives": {
      +            "description": "Every other venue that raced and produced a usable quote, best expected net output first (each carries expectedOutputAmount: a quote with slippage.noMinimum counts 0.05–1% under its outputAmount, by token type and size, the shortfall such a venue has delivered; one more than 1% above the best quote that holds a minimum is listed here but never picked as the main quote). Each has its own quoteToken to pass to ravn_execute instead, and pickable: false when RAVN would never pick it (a preview-only price while an executable one exists, or a no-minimum quote more than 1% above every quote holding a minimum), so choose among pickable ones on expectedOutputAmount; and its own expiresAt (same meaning as above; venues differ, so check it). Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      +            "items": {
      +              "additionalProperties": {},
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "estimatedTimeIsGuess": {
      +            "description": "True when the time is RAVN's estimate, not the venue's own figure",
      +            "type": "boolean"
      +          },
      +          "estimatedTimeSeconds": {
      +            "type": "number"
      +          },
      +          "executable": {
      +            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      +            "type": "boolean"
      +          },
      +          "expectedOutputAmount": {
      +            "description": "What RAVN counts on this route delivering, in the output token's base units: output.amount, less slippage.expectedShortfallBps when the venue holds no minimum (Rift); the same as output.amount otherwise. RAVN ranks on this (less gas), so compare routes on it, not output.amount. Alternatives carry it too",
      +            "type": "string"
      +          },
      +          "expiresAt": {
      +            "description": "Epoch ms, always a real time: call ravn_execute before this, re-quote after. Never refused for age before it; up to 10 minutes past it, execute prices the same route again and builds it only if it still meets the minimum this quote showed, else (or later) fails with QUOTE_EXPIRED (already 5 s ahead of the venue's own deadline). Two-hop routes (venue.id compose) and venues with no deadline get 60 s: compose re-prices at execute and refuses only if the minimum shown can no longer be met",
      +            "type": "number"
      +          },
      +          "fee": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "gas": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "estimated": {
      +                    "type": "boolean"
      +                  },
      +                  "native": {
      +                    "type": "string"
      +                  },
      +                  "nativeSymbol": {
      +                    "type": "string"
      +                  },
      +                  "usd": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "native",
      +                  "nativeSymbol",
      +                  "usd",
      +                  "estimated"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The native gas the user must hold; null on gasless venues"
      +          },
      +          "hops": {
      +            "description": "RAVN routes (venue.name \"RAVN\": two-hop, or Relay with a DEX on arrival): the venues it runs through, in order. Sign hop 1; hop 2 is a unique deposit",
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "id": {
      +                  "type": "string"
      +                },
      +                "logoUrl": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "name"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "input": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "inputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      +          },
      +          "output": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "outputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      +          },
      +          "quoteToken": {
      +            "description": "Opaque token — pass to ravn_execute",
      +            "type": "string"
      +          },
      +          "routeType": {
      +            "type": "string"
      +          },
      +          "slippage": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "bps": {
      +                    "type": "number"
      +                  },
      +                  "expectedShortfallBps": {
      +                    "description": "How far under its output RAVN counts on a no-minimum route delivering, in bps (5 for a $1k+ swap of listed, non-meme tokens up to 100 under $100); 0 when noMinimum is false. Already taken off expectedOutputAmount",
      +                    "type": "number"
      +                  },
      +                  "guaranteedMin": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  },
      +                  "isFirm": {
      +                    "type": "boolean"
      +                  },
      +                  "noMinimum": {
      +                    "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection",
      +                    "type": "boolean"
      +                  }
      +                },
      +                "required": [
      +                  "bps",
      +                  "isFirm",
      +                  "guaranteedMin",
      +                  "noMinimum",
      +                  "expectedShortfallBps"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Null when the venue reports no slippage bound"
      +          },
      +          "venue": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "quoteToken",
      +          "venue",
      +          "routeType",
      +          "input",
      +          "output",
      +          "expectedOutputAmount",
      +          "fee",
      +          "executable",
      +          "slippage",
      +          "gas",
      +          "inputUsd",
      +          "outputUsd",
      +          "estimatedTimeSeconds",
      +          "estimatedTimeIsGuess",
      +          "expiresAt",
      +          "alternatives"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "data",
      +      "meta"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "code": {
      +            "type": "string"
      +          },
      +          "details": {},
      +          "message": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "code",
      +          "message"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "error",
      +      "meta"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Changed1 schema field changed
    • changedInput schema / properties / confidential / description
      Previous value: -"Settle privately via NEAR Intents' Confidential Intents so the deposit and payout can't be linked on-chain. Through this MCP server only NEAR quotes it (NO_LIQUIDITY if it can't, never a public fallback): RAVN's second private venue, Houdini Swap, needs the end user's IP, user-agent and country for its compliance rules, which an MCP call doesn't carry — use POST /api/v1/quote for it. ~0.3 bps extra on EVM-to-EVM, ~5-8 bps extra when Bitcoin or Solana is a leg, and it can settle slower than a public swap (Bitcoin-source: 13 min public vs 43 min confidential) — read estimatedTimeSeconds before executing"New value: +"Settle privately via NEAR Intents' Confidential Intents so the deposit and payout can't be linked on-chain. Through this MCP server only NEAR quotes it (NO_LIQUIDITY if it can't, never a public fallback): RAVN's other private venues aren't offered here — Houdini Swap needs the end user's IP, user-agent and country for its compliance rules, and Hinkal the user's country and two signatures from the paying wallet before it builds, none of which an MCP call carries — use POST /api/v1/quote and /api/v1/execute for them. ~0.3 bps extra on EVM-to-EVM, ~5-8 bps extra when Bitcoin or Solana is a leg, and it can settle slower than a public swap (Bitcoin-source: 13 min public vs 43 min confidential) — read estimatedTimeSeconds before executing"
  3. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "alternatives": {
      -            "description": "Every other venue that raced and produced a usable quote, best expected net output first (a quote with slippage.noMinimum counts 0.05–0.5% under its outputAmount, by token type and size, the shortfall such a venue has delivered; one more than 1% above the best quote that holds a minimum is listed here but never picked as the main quote). Each has its own quoteToken to pass to ravn_execute instead, and its own expiresAt (same meaning as above; venues differ, so check it). Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      -            "items": {
      -              "additionalProperties": {},
      -              "propertyNames": {
      -                "type": "string"
      -              },
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "estimatedTimeIsGuess": {
      -            "description": "True when the time is RAVN's estimate, not the venue's own figure",
      -            "type": "boolean"
      -          },
      -          "estimatedTimeSeconds": {
      -            "type": "number"
      -          },
      -          "executable": {
      -            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      -            "type": "boolean"
      -          },
      -          "expiresAt": {
      -            "description": "Epoch ms, always a real time: call ravn_execute before this, re-quote after. Never refused for age before it; up to 10 minutes past it, execute prices the same route again and builds it only if it still meets the minimum this quote showed, else (or later) fails with QUOTE_EXPIRED (already 5 s ahead of the venue's own deadline). Two-hop routes (venue.id compose) and venues with no deadline get 60 s: compose re-prices at execute and refuses only if the minimum shown can no longer be met",
      -            "type": "number"
      -          },
      -          "fee": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "gas": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "estimated": {
      -                    "type": "boolean"
      -                  },
      -                  "native": {
      -                    "type": "string"
      -                  },
      -                  "nativeSymbol": {
      -                    "type": "string"
      -                  },
      -                  "usd": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "native",
      -                  "nativeSymbol",
      -                  "usd",
      -                  "estimated"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "The native gas the user must hold; null on gasless venues"
      -          },
      -          "hops": {
      -            "description": "RAVN routes (venue.name \"RAVN\": two-hop, or Relay with a DEX on arrival): the venues it runs through, in order. Sign hop 1; hop 2 is a unique deposit",
      -            "items": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "id": {
      -                  "type": "string"
      -                },
      -                "name": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "id",
      -                "name"
      -              ],
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "input": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "inputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      -          },
      -          "output": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "outputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      -          },
      -          "quoteToken": {
      -            "description": "Opaque token — pass to ravn_execute",
      -            "type": "string"
      -          },
      -          "routeType": {
      -            "type": "string"
      -          },
      -          "slippage": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "bps": {
      -                    "type": "number"
      -                  },
      -                  "guaranteedMin": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  },
      -                  "isFirm": {
      -                    "type": "boolean"
      -                  },
      -                  "noMinimum": {
      -                    "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection",
      -                    "type": "boolean"
      -                  }
      -                },
      -                "required": [
      -                  "bps",
      -                  "isFirm",
      -                  "guaranteedMin",
      -                  "noMinimum"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "Null when the venue reports no slippage bound"
      -          },
      -          "venue": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          }
      -        },
      -        "required": [
      -          "quoteToken",
      -          "venue",
      -          "routeType",
      -          "input",
      -          "output",
      -          "fee",
      -          "executable",
      -          "slippage",
      -          "gas",
      -          "inputUsd",
      -          "outputUsd",
      -          "estimatedTimeSeconds",
      -          "estimatedTimeIsGuess",
      -          "expiresAt",
      -          "alternatives"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "data",
      -      "meta"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "code": {
      -            "type": "string"
      -          },
      -          "details": {},
      -          "message": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "code",
      -          "message"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "meta"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "alternatives": {
      +            "description": "Every other venue that raced and produced a usable quote, best expected net output first (each carries expectedOutputAmount: a quote with slippage.noMinimum counts 0.05–1% under its outputAmount, by token type and size, the shortfall such a venue has delivered; one more than 1% above the best quote that holds a minimum is listed here but never picked as the main quote). Each has its own quoteToken to pass to ravn_execute instead, and pickable: false when RAVN would never pick it (a preview-only price while an executable one exists, or a no-minimum quote more than 1% above every quote holding a minimum), so choose among pickable ones on expectedOutputAmount; and its own expiresAt (same meaning as above; venues differ, so check it). Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      +            "items": {
      +              "additionalProperties": {},
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "estimatedTimeIsGuess": {
      +            "description": "True when the time is RAVN's estimate, not the venue's own figure",
      +            "type": "boolean"
      +          },
      +          "estimatedTimeSeconds": {
      +            "type": "number"
      +          },
      +          "executable": {
      +            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      +            "type": "boolean"
      +          },
      +          "expectedOutputAmount": {
      +            "description": "What RAVN counts on this route delivering, in the output token's base units: output.amount, less slippage.expectedShortfallBps when the venue holds no minimum (Rift); the same as output.amount otherwise. RAVN ranks on this (less gas), so compare routes on it, not output.amount. Alternatives carry it too",
      +            "type": "string"
      +          },
      +          "expiresAt": {
      +            "description": "Epoch ms, always a real time: call ravn_execute before this, re-quote after. Never refused for age before it; up to 10 minutes past it, execute prices the same route again and builds it only if it still meets the minimum this quote showed, else (or later) fails with QUOTE_EXPIRED (already 5 s ahead of the venue's own deadline). Two-hop routes (venue.id compose) and venues with no deadline get 60 s: compose re-prices at execute and refuses only if the minimum shown can no longer be met",
      +            "type": "number"
      +          },
      +          "fee": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "gas": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "estimated": {
      +                    "type": "boolean"
      +                  },
      +                  "native": {
      +                    "type": "string"
      +                  },
      +                  "nativeSymbol": {
      +                    "type": "string"
      +                  },
      +                  "usd": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "native",
      +                  "nativeSymbol",
      +                  "usd",
      +                  "estimated"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The native gas the user must hold; null on gasless venues"
      +          },
      +          "hops": {
      +            "description": "RAVN routes (venue.name \"RAVN\": two-hop, or Relay with a DEX on arrival): the venues it runs through, in order. Sign hop 1; hop 2 is a unique deposit",
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "id": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "name"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "input": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "inputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      +          },
      +          "output": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "outputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      +          },
      +          "quoteToken": {
      +            "description": "Opaque token — pass to ravn_execute",
      +            "type": "string"
      +          },
      +          "routeType": {
      +            "type": "string"
      +          },
      +          "slippage": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "bps": {
      +                    "type": "number"
      +                  },
      +                  "expectedShortfallBps": {
      +                    "description": "How far under its output RAVN counts on a no-minimum route delivering, in bps (5 for a $1k+ swap of listed, non-meme tokens up to 100 under $100); 0 when noMinimum is false. Already taken off expectedOutputAmount",
      +                    "type": "number"
      +                  },
      +                  "guaranteedMin": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  },
      +                  "isFirm": {
      +                    "type": "boolean"
      +                  },
      +                  "noMinimum": {
      +                    "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection",
      +                    "type": "boolean"
      +                  }
      +                },
      +                "required": [
      +                  "bps",
      +                  "isFirm",
      +                  "guaranteedMin",
      +                  "noMinimum",
      +                  "expectedShortfallBps"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Null when the venue reports no slippage bound"
      +          },
      +          "venue": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "quoteToken",
      +          "venue",
      +          "routeType",
      +          "input",
      +          "output",
      +          "expectedOutputAmount",
      +          "fee",
      +          "executable",
      +          "slippage",
      +          "gas",
      +          "inputUsd",
      +          "outputUsd",
      +          "estimatedTimeSeconds",
      +          "estimatedTimeIsGuess",
      +          "expiresAt",
      +          "alternatives"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "data",
      +      "meta"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "code": {
      +            "type": "string"
      +          },
      +          "details": {},
      +          "message": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "code",
      +          "message"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "error",
      +      "meta"
      +    ],
      +    "type": "object"
      +  }
      +]
  4. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "alternatives": {
      -            "description": "Every other venue that raced and produced a usable quote, best expected net output first (a quote with slippage.noMinimum counts 0.3% under its outputAmount, the shortfall such a venue typically delivers; one more than 1% above the best quote that holds a minimum is listed here but never picked as the main quote). Each has its own quoteToken to pass to ravn_execute instead, and its own expiresAt (same meaning as above; venues differ, so check it). Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      -            "items": {
      -              "additionalProperties": {},
      -              "propertyNames": {
      -                "type": "string"
      -              },
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "estimatedTimeIsGuess": {
      -            "description": "True when the time is RAVN's estimate, not the venue's own figure",
      -            "type": "boolean"
      -          },
      -          "estimatedTimeSeconds": {
      -            "type": "number"
      -          },
      -          "executable": {
      -            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      -            "type": "boolean"
      -          },
      -          "expiresAt": {
      -            "description": "Epoch ms, always a real time: call ravn_execute before this, re-quote after. Never refused for age before it; up to 10 minutes past it, execute prices the same route again and builds it only if it still meets the minimum this quote showed, else (or later) fails with QUOTE_EXPIRED (already 5 s ahead of the venue's own deadline). Two-hop routes (venue.id compose) and venues with no deadline get 60 s: compose re-prices at execute and refuses only if the minimum shown can no longer be met",
      -            "type": "number"
      -          },
      -          "fee": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "gas": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "estimated": {
      -                    "type": "boolean"
      -                  },
      -                  "native": {
      -                    "type": "string"
      -                  },
      -                  "nativeSymbol": {
      -                    "type": "string"
      -                  },
      -                  "usd": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "native",
      -                  "nativeSymbol",
      -                  "usd",
      -                  "estimated"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "The native gas the user must hold; null on gasless venues"
      -          },
      -          "hops": {
      -            "description": "RAVN routes (venue.name \"RAVN\": two-hop, or Relay with a DEX on arrival): the venues it runs through, in order. Sign hop 1; hop 2 is a unique deposit",
      -            "items": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "id": {
      -                  "type": "string"
      -                },
      -                "name": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "id",
      -                "name"
      -              ],
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "input": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "inputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      -          },
      -          "output": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "outputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      -          },
      -          "quoteToken": {
      -            "description": "Opaque token — pass to ravn_execute",
      -            "type": "string"
      -          },
      -          "routeType": {
      -            "type": "string"
      -          },
      -          "slippage": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "bps": {
      -                    "type": "number"
      -                  },
      -                  "guaranteedMin": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  },
      -                  "isFirm": {
      -                    "type": "boolean"
      -                  },
      -                  "noMinimum": {
      -                    "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection",
      -                    "type": "boolean"
      -                  }
      -                },
      -                "required": [
      -                  "bps",
      -                  "isFirm",
      -                  "guaranteedMin",
      -                  "noMinimum"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "Null when the venue reports no slippage bound"
      -          },
      -          "venue": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          }
      -        },
      -        "required": [
      -          "quoteToken",
      -          "venue",
      -          "routeType",
      -          "input",
      -          "output",
      -          "fee",
      -          "executable",
      -          "slippage",
      -          "gas",
      -          "inputUsd",
      -          "outputUsd",
      -          "estimatedTimeSeconds",
      -          "estimatedTimeIsGuess",
      -          "expiresAt",
      -          "alternatives"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "data",
      -      "meta"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "code": {
      -            "type": "string"
      -          },
      -          "details": {},
      -          "message": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "code",
      -          "message"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "meta"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "alternatives": {
      +            "description": "Every other venue that raced and produced a usable quote, best expected net output first (a quote with slippage.noMinimum counts 0.05–0.5% under its outputAmount, by token type and size, the shortfall such a venue has delivered; one more than 1% above the best quote that holds a minimum is listed here but never picked as the main quote). Each has its own quoteToken to pass to ravn_execute instead, and its own expiresAt (same meaning as above; venues differ, so check it). Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      +            "items": {
      +              "additionalProperties": {},
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "estimatedTimeIsGuess": {
      +            "description": "True when the time is RAVN's estimate, not the venue's own figure",
      +            "type": "boolean"
      +          },
      +          "estimatedTimeSeconds": {
      +            "type": "number"
      +          },
      +          "executable": {
      +            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      +            "type": "boolean"
      +          },
      +          "expiresAt": {
      +            "description": "Epoch ms, always a real time: call ravn_execute before this, re-quote after. Never refused for age before it; up to 10 minutes past it, execute prices the same route again and builds it only if it still meets the minimum this quote showed, else (or later) fails with QUOTE_EXPIRED (already 5 s ahead of the venue's own deadline). Two-hop routes (venue.id compose) and venues with no deadline get 60 s: compose re-prices at execute and refuses only if the minimum shown can no longer be met",
      +            "type": "number"
      +          },
      +          "fee": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "gas": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "estimated": {
      +                    "type": "boolean"
      +                  },
      +                  "native": {
      +                    "type": "string"
      +                  },
      +                  "nativeSymbol": {
      +                    "type": "string"
      +                  },
      +                  "usd": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "native",
      +                  "nativeSymbol",
      +                  "usd",
      +                  "estimated"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The native gas the user must hold; null on gasless venues"
      +          },
      +          "hops": {
      +            "description": "RAVN routes (venue.name \"RAVN\": two-hop, or Relay with a DEX on arrival): the venues it runs through, in order. Sign hop 1; hop 2 is a unique deposit",
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "id": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "name"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "input": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "inputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      +          },
      +          "output": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "outputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      +          },
      +          "quoteToken": {
      +            "description": "Opaque token — pass to ravn_execute",
      +            "type": "string"
      +          },
      +          "routeType": {
      +            "type": "string"
      +          },
      +          "slippage": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "bps": {
      +                    "type": "number"
      +                  },
      +                  "guaranteedMin": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  },
      +                  "isFirm": {
      +                    "type": "boolean"
      +                  },
      +                  "noMinimum": {
      +                    "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection",
      +                    "type": "boolean"
      +                  }
      +                },
      +                "required": [
      +                  "bps",
      +                  "isFirm",
      +                  "guaranteedMin",
      +                  "noMinimum"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Null when the venue reports no slippage bound"
      +          },
      +          "venue": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "quoteToken",
      +          "venue",
      +          "routeType",
      +          "input",
      +          "output",
      +          "fee",
      +          "executable",
      +          "slippage",
      +          "gas",
      +          "inputUsd",
      +          "outputUsd",
      +          "estimatedTimeSeconds",
      +          "estimatedTimeIsGuess",
      +          "expiresAt",
      +          "alternatives"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "data",
      +      "meta"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "code": {
      +            "type": "string"
      +          },
      +          "details": {},
      +          "message": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "code",
      +          "message"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "error",
      +      "meta"
      +    ],
      +    "type": "object"
      +  }
      +]
  5. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "alternatives": {
      -            "description": "Every other venue that raced and produced a usable quote, best expected net output first (a quote with slippage.noMinimum counts 0.3% under its outputAmount, the shortfall such a venue typically delivers; one more than 1% above the best quote that holds a minimum is listed here but never picked as the main quote). Each has its own quoteToken to pass to ravn_execute instead, and its own expiresAt (same meaning as above; venues differ, so check it). Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      -            "items": {
      -              "additionalProperties": {},
      -              "propertyNames": {
      -                "type": "string"
      -              },
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "estimatedTimeIsGuess": {
      -            "description": "True when the time is RAVN's estimate, not the venue's own figure",
      -            "type": "boolean"
      -          },
      -          "estimatedTimeSeconds": {
      -            "type": "number"
      -          },
      -          "executable": {
      -            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      -            "type": "boolean"
      -          },
      -          "expiresAt": {
      -            "description": "Epoch ms, always a real time: call ravn_execute before this, re-quote after. Never refused for age before it; past it most routes fail with QUOTE_EXPIRED (already 5 s ahead of the venue's own deadline). Two-hop routes (venue.id compose) and venues with no deadline get 60 s: compose re-prices at execute and refuses only if the minimum shown can no longer be met",
      -            "type": "number"
      -          },
      -          "fee": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "gas": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "estimated": {
      -                    "type": "boolean"
      -                  },
      -                  "native": {
      -                    "type": "string"
      -                  },
      -                  "nativeSymbol": {
      -                    "type": "string"
      -                  },
      -                  "usd": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "native",
      -                  "nativeSymbol",
      -                  "usd",
      -                  "estimated"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "The native gas the user must hold; null on gasless venues"
      -          },
      -          "hops": {
      -            "description": "RAVN routes (venue.name \"RAVN\": two-hop, or Relay with a DEX on arrival): the venues it runs through, in order. Sign hop 1; hop 2 is a unique deposit",
      -            "items": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "id": {
      -                  "type": "string"
      -                },
      -                "name": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "id",
      -                "name"
      -              ],
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "input": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "inputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      -          },
      -          "output": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "outputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      -          },
      -          "quoteToken": {
      -            "description": "Opaque token — pass to ravn_execute",
      -            "type": "string"
      -          },
      -          "routeType": {
      -            "type": "string"
      -          },
      -          "slippage": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "bps": {
      -                    "type": "number"
      -                  },
      -                  "guaranteedMin": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  },
      -                  "isFirm": {
      -                    "type": "boolean"
      -                  },
      -                  "noMinimum": {
      -                    "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection",
      -                    "type": "boolean"
      -                  }
      -                },
      -                "required": [
      -                  "bps",
      -                  "isFirm",
      -                  "guaranteedMin",
      -                  "noMinimum"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "Null when the venue reports no slippage bound"
      -          },
      -          "venue": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          }
      -        },
      -        "required": [
      -          "quoteToken",
      -          "venue",
      -          "routeType",
      -          "input",
      -          "output",
      -          "fee",
      -          "executable",
      -          "slippage",
      -          "gas",
      -          "inputUsd",
      -          "outputUsd",
      -          "estimatedTimeSeconds",
      -          "estimatedTimeIsGuess",
      -          "expiresAt",
      -          "alternatives"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "data",
      -      "meta"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "code": {
      -            "type": "string"
      -          },
      -          "details": {},
      -          "message": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "code",
      -          "message"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "meta"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "alternatives": {
      +            "description": "Every other venue that raced and produced a usable quote, best expected net output first (a quote with slippage.noMinimum counts 0.3% under its outputAmount, the shortfall such a venue typically delivers; one more than 1% above the best quote that holds a minimum is listed here but never picked as the main quote). Each has its own quoteToken to pass to ravn_execute instead, and its own expiresAt (same meaning as above; venues differ, so check it). Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      +            "items": {
      +              "additionalProperties": {},
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "estimatedTimeIsGuess": {
      +            "description": "True when the time is RAVN's estimate, not the venue's own figure",
      +            "type": "boolean"
      +          },
      +          "estimatedTimeSeconds": {
      +            "type": "number"
      +          },
      +          "executable": {
      +            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      +            "type": "boolean"
      +          },
      +          "expiresAt": {
      +            "description": "Epoch ms, always a real time: call ravn_execute before this, re-quote after. Never refused for age before it; up to 10 minutes past it, execute prices the same route again and builds it only if it still meets the minimum this quote showed, else (or later) fails with QUOTE_EXPIRED (already 5 s ahead of the venue's own deadline). Two-hop routes (venue.id compose) and venues with no deadline get 60 s: compose re-prices at execute and refuses only if the minimum shown can no longer be met",
      +            "type": "number"
      +          },
      +          "fee": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "gas": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "estimated": {
      +                    "type": "boolean"
      +                  },
      +                  "native": {
      +                    "type": "string"
      +                  },
      +                  "nativeSymbol": {
      +                    "type": "string"
      +                  },
      +                  "usd": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "native",
      +                  "nativeSymbol",
      +                  "usd",
      +                  "estimated"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The native gas the user must hold; null on gasless venues"
      +          },
      +          "hops": {
      +            "description": "RAVN routes (venue.name \"RAVN\": two-hop, or Relay with a DEX on arrival): the venues it runs through, in order. Sign hop 1; hop 2 is a unique deposit",
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "id": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "name"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "input": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "inputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      +          },
      +          "output": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "outputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      +          },
      +          "quoteToken": {
      +            "description": "Opaque token — pass to ravn_execute",
      +            "type": "string"
      +          },
      +          "routeType": {
      +            "type": "string"
      +          },
      +          "slippage": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "bps": {
      +                    "type": "number"
      +                  },
      +                  "guaranteedMin": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  },
      +                  "isFirm": {
      +                    "type": "boolean"
      +                  },
      +                  "noMinimum": {
      +                    "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection",
      +                    "type": "boolean"
      +                  }
      +                },
      +                "required": [
      +                  "bps",
      +                  "isFirm",
      +                  "guaranteedMin",
      +                  "noMinimum"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Null when the venue reports no slippage bound"
      +          },
      +          "venue": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "quoteToken",
      +          "venue",
      +          "routeType",
      +          "input",
      +          "output",
      +          "fee",
      +          "executable",
      +          "slippage",
      +          "gas",
      +          "inputUsd",
      +          "outputUsd",
      +          "estimatedTimeSeconds",
      +          "estimatedTimeIsGuess",
      +          "expiresAt",
      +          "alternatives"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "data",
      +      "meta"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "code": {
      +            "type": "string"
      +          },
      +          "details": {},
      +          "message": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "code",
      +          "message"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "error",
      +      "meta"
      +    ],
      +    "type": "object"
      +  }
      +]
  6. Changed2 schema fields changed
    • changedInput schema / properties / excludeVenues / description
      Previous value: -"Drop specific venues from this race, e.g. a risk objection to one of them or ravn_health showing it degraded. Naming a venue that was never eligible for this pair is a no-op, not an error"New value: +"Drop specific venues, e.g. a risk objection to one of them or ravn_health showing it degraded. An excluded venue is used nowhere in the route, including the steps of RAVN's multi-step routes (compose, and relay quotes that carry hops); a multi-step route that needs it isn't offered. Venues that swap for you may route through other venues of their own choosing, which this can't reach: Layerswap (a Solana token often goes through Jupiter first), Relay, Rift, Across (when it swaps before or after bridging) and Mayan (Jupiter on Solana, other DEXs such as Nordstern on EVM). Naming a venue that was never eligible for this pair is a no-op, not an error"
    • changedInput schema / properties / onlyVenues / description
      Previous value: -"Race only these venues, e.g. [\"bebop\"] for an RFQ-only race. Every other venue is left out (including ones RAVN adds later); excludeVenues still applies on top. Matched against the quote's venue id, so it picks which venue you deal with, not every venue your funds pass through: RAVN's multi-step routes (compose, and relay quotes that carry hops) run legs through the venues in hops, and venues such as Rift, Across (when it swaps before or after bridging) and Mayan (a Solana order swaps through Jupiter first) route through other venues without listing them. Same-chain venues only quote same-chain pairs; if none of the named venues can quote you get NO_LIQUIDITY"New value: +"Race only these venues, e.g. [\"bebop\"] for an RFQ-only race. Every other venue is left out (including ones RAVN adds later); excludeVenues still applies on top. It covers every venue RAVN routes your funds through: a multi-step route is offered only when its own venue id and every venue in its hops are listed, e.g. [\"compose\",\"jupiter\",\"relay\"] or [\"relay\",\"kyberswap\"]. RAVN's stablecoin route also needs 0x_swap beside its hops: it sweeps the leftover. Venues that swap for you may route through other venues of their own choosing, which this can't reach: Layerswap (a Solana token often goes through Jupiter first), Relay, Rift, Across (when it swaps before or after bridging) and Mayan (Jupiter on Solana, other DEXs such as Nordstern on EVM). Same-chain venues only quote same-chain pairs; if none of the named venues can quote you get NO_LIQUIDITY"
  7. Changed2 schema fields changed
    • addedInput schema / properties / timeoutMs
      Added value: +{
      +  "description": "The race's time limit in milliseconds, counted from its start: once it has passed and some venue has priced the swap, slower venues are left out (with none priced yet, the first price ends the wait; a quote with slippage.noMinimum counts only 2000 ms past the limit). Defaults to 6000; a positive integer, clamped to 1000–15000",
      +  "exclusiveMinimum": 0,
      +  "maximum": 9007199254740991,
      +  "type": "integer"
      +}
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "alternatives": {
      -            "description": "Every other venue that raced and produced a usable quote, best expected net output first (a quote with slippage.noMinimum counts 0.3% under its outputAmount, the shortfall such a venue typically delivers). Each has its own quoteToken to pass to ravn_execute instead, and its own expiresAt (same meaning as above; venues differ, so check it). Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      -            "items": {
      -              "additionalProperties": {},
      -              "propertyNames": {
      -                "type": "string"
      -              },
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "estimatedTimeIsGuess": {
      -            "description": "True when the time is RAVN's estimate, not the venue's own figure",
      -            "type": "boolean"
      -          },
      -          "estimatedTimeSeconds": {
      -            "type": "number"
      -          },
      -          "executable": {
      -            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      -            "type": "boolean"
      -          },
      -          "expiresAt": {
      -            "description": "Epoch ms, always a real time: call ravn_execute before this, re-quote after. Never refused for age before it; past it most routes fail with QUOTE_EXPIRED (already 5 s ahead of the venue's own deadline). Two-hop routes (venue.id compose) and venues with no deadline get 60 s: compose re-prices at execute and refuses only if the minimum shown can no longer be met",
      -            "type": "number"
      -          },
      -          "fee": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "gas": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "estimated": {
      -                    "type": "boolean"
      -                  },
      -                  "native": {
      -                    "type": "string"
      -                  },
      -                  "nativeSymbol": {
      -                    "type": "string"
      -                  },
      -                  "usd": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "native",
      -                  "nativeSymbol",
      -                  "usd",
      -                  "estimated"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "The native gas the user must hold; null on gasless venues"
      -          },
      -          "hops": {
      -            "description": "RAVN routes (venue.name \"RAVN\": two-hop, or Relay with a DEX on arrival): the venues it runs through, in order. Sign hop 1; hop 2 is a unique deposit",
      -            "items": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "id": {
      -                  "type": "string"
      -                },
      -                "name": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "id",
      -                "name"
      -              ],
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "input": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "inputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      -          },
      -          "output": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "outputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      -          },
      -          "quoteToken": {
      -            "description": "Opaque token — pass to ravn_execute",
      -            "type": "string"
      -          },
      -          "routeType": {
      -            "type": "string"
      -          },
      -          "slippage": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "bps": {
      -                    "type": "number"
      -                  },
      -                  "guaranteedMin": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  },
      -                  "isFirm": {
      -                    "type": "boolean"
      -                  },
      -                  "noMinimum": {
      -                    "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection",
      -                    "type": "boolean"
      -                  }
      -                },
      -                "required": [
      -                  "bps",
      -                  "isFirm",
      -                  "guaranteedMin",
      -                  "noMinimum"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "Null when the venue reports no slippage bound"
      -          },
      -          "venue": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          }
      -        },
      -        "required": [
      -          "quoteToken",
      -          "venue",
      -          "routeType",
      -          "input",
      -          "output",
      -          "fee",
      -          "executable",
      -          "slippage",
      -          "gas",
      -          "inputUsd",
      -          "outputUsd",
      -          "estimatedTimeSeconds",
      -          "estimatedTimeIsGuess",
      -          "expiresAt",
      -          "alternatives"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "data",
      -      "meta"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "code": {
      -            "type": "string"
      -          },
      -          "details": {},
      -          "message": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "code",
      -          "message"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "meta"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "alternatives": {
      +            "description": "Every other venue that raced and produced a usable quote, best expected net output first (a quote with slippage.noMinimum counts 0.3% under its outputAmount, the shortfall such a venue typically delivers; one more than 1% above the best quote that holds a minimum is listed here but never picked as the main quote). Each has its own quoteToken to pass to ravn_execute instead, and its own expiresAt (same meaning as above; venues differ, so check it). Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      +            "items": {
      +              "additionalProperties": {},
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "estimatedTimeIsGuess": {
      +            "description": "True when the time is RAVN's estimate, not the venue's own figure",
      +            "type": "boolean"
      +          },
      +          "estimatedTimeSeconds": {
      +            "type": "number"
      +          },
      +          "executable": {
      +            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      +            "type": "boolean"
      +          },
      +          "expiresAt": {
      +            "description": "Epoch ms, always a real time: call ravn_execute before this, re-quote after. Never refused for age before it; past it most routes fail with QUOTE_EXPIRED (already 5 s ahead of the venue's own deadline). Two-hop routes (venue.id compose) and venues with no deadline get 60 s: compose re-prices at execute and refuses only if the minimum shown can no longer be met",
      +            "type": "number"
      +          },
      +          "fee": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "gas": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "estimated": {
      +                    "type": "boolean"
      +                  },
      +                  "native": {
      +                    "type": "string"
      +                  },
      +                  "nativeSymbol": {
      +                    "type": "string"
      +                  },
      +                  "usd": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "native",
      +                  "nativeSymbol",
      +                  "usd",
      +                  "estimated"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The native gas the user must hold; null on gasless venues"
      +          },
      +          "hops": {
      +            "description": "RAVN routes (venue.name \"RAVN\": two-hop, or Relay with a DEX on arrival): the venues it runs through, in order. Sign hop 1; hop 2 is a unique deposit",
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "id": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "name"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "input": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "inputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      +          },
      +          "output": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "outputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      +          },
      +          "quoteToken": {
      +            "description": "Opaque token — pass to ravn_execute",
      +            "type": "string"
      +          },
      +          "routeType": {
      +            "type": "string"
      +          },
      +          "slippage": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "bps": {
      +                    "type": "number"
      +                  },
      +                  "guaranteedMin": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  },
      +                  "isFirm": {
      +                    "type": "boolean"
      +                  },
      +                  "noMinimum": {
      +                    "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection",
      +                    "type": "boolean"
      +                  }
      +                },
      +                "required": [
      +                  "bps",
      +                  "isFirm",
      +                  "guaranteedMin",
      +                  "noMinimum"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Null when the venue reports no slippage bound"
      +          },
      +          "venue": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "quoteToken",
      +          "venue",
      +          "routeType",
      +          "input",
      +          "output",
      +          "fee",
      +          "executable",
      +          "slippage",
      +          "gas",
      +          "inputUsd",
      +          "outputUsd",
      +          "estimatedTimeSeconds",
      +          "estimatedTimeIsGuess",
      +          "expiresAt",
      +          "alternatives"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "data",
      +      "meta"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "code": {
      +            "type": "string"
      +          },
      +          "details": {},
      +          "message": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "code",
      +          "message"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "error",
      +      "meta"
      +    ],
      +    "type": "object"
      +  }
      +]
  8. Changed1 schema field changed
    • addedInput schema / properties / onlyVenues
      Added value: +{
      +  "description": "Race only these venues, e.g. [\"bebop\"] for an RFQ-only race. Every other venue is left out (including ones RAVN adds later); excludeVenues still applies on top. Matched against the quote's venue id, so it picks which venue you deal with, not every venue your funds pass through: RAVN's multi-step routes (compose, and relay quotes that carry hops) run legs through the venues in hops, and venues such as Rift, Across (when it swaps before or after bridging) and Mayan (a Solana order swaps through Jupiter first) route through other venues without listing them. Same-chain venues only quote same-chain pairs; if none of the named venues can quote you get NO_LIQUIDITY",
      +  "items": {
      +    "type": "string"
      +  },
      +  "minItems": 1,
      +  "type": "array"
      +}
  9. Changed1 schema field changed
    • changedInput schema / properties / refundAddress / description
      Previous value: -"Where to refund the input asset if the swap fails. Selling native Bitcoin with userAddress set to a Bitcoin address and no refundAddress refunds to userAddress. Otherwise it is required here, at quote time, for a Bitcoin-source Relay or THORChain quote — neither has an execute-time re-bind, so omitting it returns a priced-but-unexecutable preview and supplying it later on ravn_execute is refused. Other BTC-source venues (Garden, Chainflip, Rift, NEAR Intents) support binding this at execute time instead. Validated against the INPUT chain (refunds are paid back on the origin), with the same non-wallet-address check as destinationAddress"New value: +"Where to refund the input asset if the swap fails. Selling native Bitcoin with userAddress set to a Bitcoin address and no refundAddress refunds to userAddress. Well-known sample addresses (e.g. bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh) count as no address: supply the real refund. Otherwise it is required here, at quote time, for a Bitcoin-source Relay or THORChain quote — neither has an execute-time re-bind, so omitting it returns a priced-but-unexecutable preview and supplying it later on ravn_execute is refused. Other BTC-source venues (Garden, Chainflip, Rift, NEAR Intents) support binding this at execute time instead. Validated against the INPUT chain (refunds are paid back on the origin), with the same non-wallet-address check as destinationAddress"
  10. Changed3 schema fields changed
    • addedInput schema / properties / allowNoMinimum
      Added value: +{
      +  "description": "Let venues that enforce no minimum (today Rift) race even though slippageBps is set. Their quotes carry slippage.noMinimum true and fill at the venue's own rate: slippageBps does not protect them",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / refundAddress / description
      Previous value: -"Where to refund the input asset if the swap fails. Selling native Bitcoin with userAddress set to a Bitcoin address and no refundAddress refunds to userAddress. Otherwise it is required here, at quote time, for a Bitcoin-source Relay or THORChain quote — neither has an execute-time re-bind, so omitting it returns a priced-but-unexecutable preview and supplying it later on ravn_execute is refused. Other BTC-source venues (Garden, Chainflip, Rift) support binding this at execute time instead. Validated against the INPUT chain (refunds are paid back on the origin), with the same non-wallet-address check as destinationAddress"New value: +"Where to refund the input asset if the swap fails. Selling native Bitcoin with userAddress set to a Bitcoin address and no refundAddress refunds to userAddress. Otherwise it is required here, at quote time, for a Bitcoin-source Relay or THORChain quote — neither has an execute-time re-bind, so omitting it returns a priced-but-unexecutable preview and supplying it later on ravn_execute is refused. Other BTC-source venues (Garden, Chainflip, Rift, NEAR Intents) support binding this at execute time instead. Validated against the INPUT chain (refunds are paid back on the origin), with the same non-wallet-address check as destinationAddress"
    • changedInput schema / properties / slippageBps / description
      Previous value: -"Max acceptable slippage in basis points"New value: +"Max acceptable slippage in basis points. Setting it drops venues that enforce no minimum (today Rift) from the race unless allowNoMinimum is true"
  11. Changed1 schema field changed
    • changedInput schema / properties / refundAddress / description
      Previous value: -"Where to refund the input asset if the swap fails. Required here, at quote time, for a Bitcoin-source Relay or THORChain quote — neither has an execute-time re-bind, so omitting it returns a priced-but-unexecutable preview and supplying it later on ravn_execute has no effect. Other BTC-source venues (Garden, Chainflip, Rift) support binding this at execute time instead. Validated against the INPUT chain (refunds are paid back on the origin), with the same non-wallet-address check as destinationAddress"New value: +"Where to refund the input asset if the swap fails. Selling native Bitcoin with userAddress set to a Bitcoin address and no refundAddress refunds to userAddress. Otherwise it is required here, at quote time, for a Bitcoin-source Relay or THORChain quote — neither has an execute-time re-bind, so omitting it returns a priced-but-unexecutable preview and supplying it later on ravn_execute is refused. Other BTC-source venues (Garden, Chainflip, Rift) support binding this at execute time instead. Validated against the INPUT chain (refunds are paid back on the origin), with the same non-wallet-address check as destinationAddress"
  12. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "alternatives": {
      -            "description": "Every other venue that raced and produced a usable quote, best expected net output first (a quote with slippage.noMinimum counts 0.3% under its outputAmount, the shortfall such a venue typically delivers). Each has its own quoteToken to pass to ravn_execute instead, and its own expiresAt (same meaning as above; venues differ, so check it). Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      -            "items": {
      -              "additionalProperties": {},
      -              "propertyNames": {
      -                "type": "string"
      -              },
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "estimatedTimeIsGuess": {
      -            "description": "True when the time is RAVN's estimate, not the venue's own figure",
      -            "type": "boolean"
      -          },
      -          "estimatedTimeSeconds": {
      -            "type": "number"
      -          },
      -          "executable": {
      -            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      -            "type": "boolean"
      -          },
      -          "expiresAt": {
      -            "description": "Epoch ms: call ravn_execute before this or it fails with QUOTE_EXPIRED (already 5 s ahead of the venue's own deadline). 0 = no deadline. Two-hop routes (venue.id compose) re-price at execute instead of expiring",
      -            "type": "number"
      -          },
      -          "fee": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "gas": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "estimated": {
      -                    "type": "boolean"
      -                  },
      -                  "native": {
      -                    "type": "string"
      -                  },
      -                  "nativeSymbol": {
      -                    "type": "string"
      -                  },
      -                  "usd": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "native",
      -                  "nativeSymbol",
      -                  "usd",
      -                  "estimated"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "The native gas the user must hold; null on gasless venues"
      -          },
      -          "hops": {
      -            "description": "RAVN routes (venue.name \"RAVN\": two-hop, or Relay with a DEX on arrival): the venues it runs through, in order. Sign hop 1; hop 2 is a unique deposit",
      -            "items": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "id": {
      -                  "type": "string"
      -                },
      -                "name": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "id",
      -                "name"
      -              ],
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "input": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "inputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      -          },
      -          "output": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "outputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      -          },
      -          "quoteToken": {
      -            "description": "Opaque token — pass to ravn_execute",
      -            "type": "string"
      -          },
      -          "routeType": {
      -            "type": "string"
      -          },
      -          "slippage": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "bps": {
      -                    "type": "number"
      -                  },
      -                  "guaranteedMin": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  },
      -                  "isFirm": {
      -                    "type": "boolean"
      -                  },
      -                  "noMinimum": {
      -                    "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection",
      -                    "type": "boolean"
      -                  }
      -                },
      -                "required": [
      -                  "bps",
      -                  "isFirm",
      -                  "guaranteedMin",
      -                  "noMinimum"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "Null when the venue reports no slippage bound"
      -          },
      -          "venue": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          }
      -        },
      -        "required": [
      -          "quoteToken",
      -          "venue",
      -          "routeType",
      -          "input",
      -          "output",
      -          "fee",
      -          "executable",
      -          "slippage",
      -          "gas",
      -          "inputUsd",
      -          "outputUsd",
      -          "estimatedTimeSeconds",
      -          "estimatedTimeIsGuess",
      -          "expiresAt",
      -          "alternatives"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "data",
      -      "meta"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "code": {
      -            "type": "string"
      -          },
      -          "details": {},
      -          "message": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "code",
      -          "message"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "meta"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "alternatives": {
      +            "description": "Every other venue that raced and produced a usable quote, best expected net output first (a quote with slippage.noMinimum counts 0.3% under its outputAmount, the shortfall such a venue typically delivers). Each has its own quoteToken to pass to ravn_execute instead, and its own expiresAt (same meaning as above; venues differ, so check it). Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      +            "items": {
      +              "additionalProperties": {},
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "estimatedTimeIsGuess": {
      +            "description": "True when the time is RAVN's estimate, not the venue's own figure",
      +            "type": "boolean"
      +          },
      +          "estimatedTimeSeconds": {
      +            "type": "number"
      +          },
      +          "executable": {
      +            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      +            "type": "boolean"
      +          },
      +          "expiresAt": {
      +            "description": "Epoch ms, always a real time: call ravn_execute before this, re-quote after. Never refused for age before it; past it most routes fail with QUOTE_EXPIRED (already 5 s ahead of the venue's own deadline). Two-hop routes (venue.id compose) and venues with no deadline get 60 s: compose re-prices at execute and refuses only if the minimum shown can no longer be met",
      +            "type": "number"
      +          },
      +          "fee": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "gas": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "estimated": {
      +                    "type": "boolean"
      +                  },
      +                  "native": {
      +                    "type": "string"
      +                  },
      +                  "nativeSymbol": {
      +                    "type": "string"
      +                  },
      +                  "usd": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "native",
      +                  "nativeSymbol",
      +                  "usd",
      +                  "estimated"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The native gas the user must hold; null on gasless venues"
      +          },
      +          "hops": {
      +            "description": "RAVN routes (venue.name \"RAVN\": two-hop, or Relay with a DEX on arrival): the venues it runs through, in order. Sign hop 1; hop 2 is a unique deposit",
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "id": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "name"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "input": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "inputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      +          },
      +          "output": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "outputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      +          },
      +          "quoteToken": {
      +            "description": "Opaque token — pass to ravn_execute",
      +            "type": "string"
      +          },
      +          "routeType": {
      +            "type": "string"
      +          },
      +          "slippage": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "bps": {
      +                    "type": "number"
      +                  },
      +                  "guaranteedMin": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  },
      +                  "isFirm": {
      +                    "type": "boolean"
      +                  },
      +                  "noMinimum": {
      +                    "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection",
      +                    "type": "boolean"
      +                  }
      +                },
      +                "required": [
      +                  "bps",
      +                  "isFirm",
      +                  "guaranteedMin",
      +                  "noMinimum"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Null when the venue reports no slippage bound"
      +          },
      +          "venue": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "quoteToken",
      +          "venue",
      +          "routeType",
      +          "input",
      +          "output",
      +          "fee",
      +          "executable",
      +          "slippage",
      +          "gas",
      +          "inputUsd",
      +          "outputUsd",
      +          "estimatedTimeSeconds",
      +          "estimatedTimeIsGuess",
      +          "expiresAt",
      +          "alternatives"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "data",
      +      "meta"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "code": {
      +            "type": "string"
      +          },
      +          "details": {},
      +          "message": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "code",
      +          "message"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "error",
      +      "meta"
      +    ],
      +    "type": "object"
      +  }
      +]
  13. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "alternatives": {
      -            "description": "Every other venue that raced and produced a usable quote, best expected net output first (a quote with slippage.noMinimum counts 0.3% under its outputAmount, the shortfall such a venue typically delivers). Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      -            "items": {
      -              "additionalProperties": {},
      -              "propertyNames": {
      -                "type": "string"
      -              },
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "estimatedTimeIsGuess": {
      -            "description": "True when the time is RAVN's estimate, not the venue's own figure",
      -            "type": "boolean"
      -          },
      -          "estimatedTimeSeconds": {
      -            "type": "number"
      -          },
      -          "executable": {
      -            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      -            "type": "boolean"
      -          },
      -          "expiresAt": {
      -            "type": "number"
      -          },
      -          "fee": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "gas": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "estimated": {
      -                    "type": "boolean"
      -                  },
      -                  "native": {
      -                    "type": "string"
      -                  },
      -                  "nativeSymbol": {
      -                    "type": "string"
      -                  },
      -                  "usd": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "native",
      -                  "nativeSymbol",
      -                  "usd",
      -                  "estimated"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "The native gas the user must hold; null on gasless venues"
      -          },
      -          "hops": {
      -            "description": "RAVN routes (venue.name \"RAVN\": two-hop, or Relay with a DEX on arrival): the venues it runs through, in order. Sign hop 1; hop 2 is a unique deposit",
      -            "items": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "id": {
      -                  "type": "string"
      -                },
      -                "name": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "id",
      -                "name"
      -              ],
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "input": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "inputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      -          },
      -          "output": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "outputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      -          },
      -          "quoteToken": {
      -            "description": "Opaque token — pass to ravn_execute",
      -            "type": "string"
      -          },
      -          "routeType": {
      -            "type": "string"
      -          },
      -          "slippage": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "bps": {
      -                    "type": "number"
      -                  },
      -                  "guaranteedMin": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  },
      -                  "isFirm": {
      -                    "type": "boolean"
      -                  },
      -                  "noMinimum": {
      -                    "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection",
      -                    "type": "boolean"
      -                  }
      -                },
      -                "required": [
      -                  "bps",
      -                  "isFirm",
      -                  "guaranteedMin",
      -                  "noMinimum"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "Null when the venue reports no slippage bound"
      -          },
      -          "venue": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          }
      -        },
      -        "required": [
      -          "quoteToken",
      -          "venue",
      -          "routeType",
      -          "input",
      -          "output",
      -          "fee",
      -          "executable",
      -          "slippage",
      -          "gas",
      -          "inputUsd",
      -          "outputUsd",
      -          "estimatedTimeSeconds",
      -          "estimatedTimeIsGuess",
      -          "expiresAt",
      -          "alternatives"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "data",
      -      "meta"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "code": {
      -            "type": "string"
      -          },
      -          "details": {},
      -          "message": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "code",
      -          "message"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "meta"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "alternatives": {
      +            "description": "Every other venue that raced and produced a usable quote, best expected net output first (a quote with slippage.noMinimum counts 0.3% under its outputAmount, the shortfall such a venue typically delivers). Each has its own quoteToken to pass to ravn_execute instead, and its own expiresAt (same meaning as above; venues differ, so check it). Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      +            "items": {
      +              "additionalProperties": {},
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "estimatedTimeIsGuess": {
      +            "description": "True when the time is RAVN's estimate, not the venue's own figure",
      +            "type": "boolean"
      +          },
      +          "estimatedTimeSeconds": {
      +            "type": "number"
      +          },
      +          "executable": {
      +            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      +            "type": "boolean"
      +          },
      +          "expiresAt": {
      +            "description": "Epoch ms: call ravn_execute before this or it fails with QUOTE_EXPIRED (already 5 s ahead of the venue's own deadline). 0 = no deadline. Two-hop routes (venue.id compose) re-price at execute instead of expiring",
      +            "type": "number"
      +          },
      +          "fee": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "gas": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "estimated": {
      +                    "type": "boolean"
      +                  },
      +                  "native": {
      +                    "type": "string"
      +                  },
      +                  "nativeSymbol": {
      +                    "type": "string"
      +                  },
      +                  "usd": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "native",
      +                  "nativeSymbol",
      +                  "usd",
      +                  "estimated"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The native gas the user must hold; null on gasless venues"
      +          },
      +          "hops": {
      +            "description": "RAVN routes (venue.name \"RAVN\": two-hop, or Relay with a DEX on arrival): the venues it runs through, in order. Sign hop 1; hop 2 is a unique deposit",
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "id": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "name"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "input": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "inputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      +          },
      +          "output": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "outputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      +          },
      +          "quoteToken": {
      +            "description": "Opaque token — pass to ravn_execute",
      +            "type": "string"
      +          },
      +          "routeType": {
      +            "type": "string"
      +          },
      +          "slippage": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "bps": {
      +                    "type": "number"
      +                  },
      +                  "guaranteedMin": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  },
      +                  "isFirm": {
      +                    "type": "boolean"
      +                  },
      +                  "noMinimum": {
      +                    "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection",
      +                    "type": "boolean"
      +                  }
      +                },
      +                "required": [
      +                  "bps",
      +                  "isFirm",
      +                  "guaranteedMin",
      +                  "noMinimum"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Null when the venue reports no slippage bound"
      +          },
      +          "venue": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "quoteToken",
      +          "venue",
      +          "routeType",
      +          "input",
      +          "output",
      +          "fee",
      +          "executable",
      +          "slippage",
      +          "gas",
      +          "inputUsd",
      +          "outputUsd",
      +          "estimatedTimeSeconds",
      +          "estimatedTimeIsGuess",
      +          "expiresAt",
      +          "alternatives"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "data",
      +      "meta"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "code": {
      +            "type": "string"
      +          },
      +          "details": {},
      +          "message": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "code",
      +          "message"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "error",
      +      "meta"
      +    ],
      +    "type": "object"
      +  }
      +]
  14. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "alternatives": {
      -            "description": "Every other venue that raced and produced a usable quote, best expected net output first (a quote with slippage.noMinimum counts 0.3% under its outputAmount, the shortfall such a venue typically delivers). Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      -            "items": {
      -              "additionalProperties": {},
      -              "propertyNames": {
      -                "type": "string"
      -              },
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "estimatedTimeIsGuess": {
      -            "description": "True when the time is RAVN's estimate, not the venue's own figure",
      -            "type": "boolean"
      -          },
      -          "estimatedTimeSeconds": {
      -            "type": "number"
      -          },
      -          "executable": {
      -            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      -            "type": "boolean"
      -          },
      -          "expiresAt": {
      -            "type": "number"
      -          },
      -          "fee": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "gas": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "estimated": {
      -                    "type": "boolean"
      -                  },
      -                  "native": {
      -                    "type": "string"
      -                  },
      -                  "nativeSymbol": {
      -                    "type": "string"
      -                  },
      -                  "usd": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "native",
      -                  "nativeSymbol",
      -                  "usd",
      -                  "estimated"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "The native gas the user must hold; null on gasless venues"
      -          },
      -          "hops": {
      -            "description": "2-hop / dest-call: the venues actually used. Sign hop 1; hop 2 is a unique deposit",
      -            "items": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "id": {
      -                  "type": "string"
      -                },
      -                "name": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "id",
      -                "name"
      -              ],
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "input": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "inputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      -          },
      -          "output": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "outputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      -          },
      -          "quoteToken": {
      -            "description": "Opaque token — pass to ravn_execute",
      -            "type": "string"
      -          },
      -          "routeType": {
      -            "type": "string"
      -          },
      -          "slippage": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "bps": {
      -                    "type": "number"
      -                  },
      -                  "guaranteedMin": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  },
      -                  "isFirm": {
      -                    "type": "boolean"
      -                  },
      -                  "noMinimum": {
      -                    "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection",
      -                    "type": "boolean"
      -                  }
      -                },
      -                "required": [
      -                  "bps",
      -                  "isFirm",
      -                  "guaranteedMin",
      -                  "noMinimum"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "Null when the venue reports no slippage bound"
      -          },
      -          "venue": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          }
      -        },
      -        "required": [
      -          "quoteToken",
      -          "venue",
      -          "routeType",
      -          "input",
      -          "output",
      -          "fee",
      -          "executable",
      -          "slippage",
      -          "gas",
      -          "inputUsd",
      -          "outputUsd",
      -          "estimatedTimeSeconds",
      -          "estimatedTimeIsGuess",
      -          "expiresAt",
      -          "alternatives"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "data",
      -      "meta"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "code": {
      -            "type": "string"
      -          },
      -          "details": {},
      -          "message": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "code",
      -          "message"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "meta"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "alternatives": {
      +            "description": "Every other venue that raced and produced a usable quote, best expected net output first (a quote with slippage.noMinimum counts 0.3% under its outputAmount, the shortfall such a venue typically delivers). Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      +            "items": {
      +              "additionalProperties": {},
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "estimatedTimeIsGuess": {
      +            "description": "True when the time is RAVN's estimate, not the venue's own figure",
      +            "type": "boolean"
      +          },
      +          "estimatedTimeSeconds": {
      +            "type": "number"
      +          },
      +          "executable": {
      +            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      +            "type": "boolean"
      +          },
      +          "expiresAt": {
      +            "type": "number"
      +          },
      +          "fee": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "gas": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "estimated": {
      +                    "type": "boolean"
      +                  },
      +                  "native": {
      +                    "type": "string"
      +                  },
      +                  "nativeSymbol": {
      +                    "type": "string"
      +                  },
      +                  "usd": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "native",
      +                  "nativeSymbol",
      +                  "usd",
      +                  "estimated"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The native gas the user must hold; null on gasless venues"
      +          },
      +          "hops": {
      +            "description": "RAVN routes (venue.name \"RAVN\": two-hop, or Relay with a DEX on arrival): the venues it runs through, in order. Sign hop 1; hop 2 is a unique deposit",
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "id": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "name"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "input": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "inputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      +          },
      +          "output": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "outputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      +          },
      +          "quoteToken": {
      +            "description": "Opaque token — pass to ravn_execute",
      +            "type": "string"
      +          },
      +          "routeType": {
      +            "type": "string"
      +          },
      +          "slippage": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "bps": {
      +                    "type": "number"
      +                  },
      +                  "guaranteedMin": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  },
      +                  "isFirm": {
      +                    "type": "boolean"
      +                  },
      +                  "noMinimum": {
      +                    "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection",
      +                    "type": "boolean"
      +                  }
      +                },
      +                "required": [
      +                  "bps",
      +                  "isFirm",
      +                  "guaranteedMin",
      +                  "noMinimum"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Null when the venue reports no slippage bound"
      +          },
      +          "venue": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "quoteToken",
      +          "venue",
      +          "routeType",
      +          "input",
      +          "output",
      +          "fee",
      +          "executable",
      +          "slippage",
      +          "gas",
      +          "inputUsd",
      +          "outputUsd",
      +          "estimatedTimeSeconds",
      +          "estimatedTimeIsGuess",
      +          "expiresAt",
      +          "alternatives"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "data",
      +      "meta"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "code": {
      +            "type": "string"
      +          },
      +          "details": {},
      +          "message": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "code",
      +          "message"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "error",
      +      "meta"
      +    ],
      +    "type": "object"
      +  }
      +]
  15. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "alternatives": {
      -            "description": "Every other venue that raced and produced a usable quote, best output first. Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      -            "items": {
      -              "additionalProperties": {},
      -              "propertyNames": {
      -                "type": "string"
      -              },
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "estimatedTimeIsGuess": {
      -            "description": "True when the time is RAVN's estimate, not the venue's own figure",
      -            "type": "boolean"
      -          },
      -          "estimatedTimeSeconds": {
      -            "type": "number"
      -          },
      -          "executable": {
      -            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      -            "type": "boolean"
      -          },
      -          "expiresAt": {
      -            "type": "number"
      -          },
      -          "fee": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "gas": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "estimated": {
      -                    "type": "boolean"
      -                  },
      -                  "native": {
      -                    "type": "string"
      -                  },
      -                  "nativeSymbol": {
      -                    "type": "string"
      -                  },
      -                  "usd": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "native",
      -                  "nativeSymbol",
      -                  "usd",
      -                  "estimated"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "The native gas the user must hold; null on gasless venues"
      -          },
      -          "hops": {
      -            "description": "2-hop / dest-call: the venues actually used. Sign hop 1; hop 2 is a unique deposit",
      -            "items": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "id": {
      -                  "type": "string"
      -                },
      -                "name": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "id",
      -                "name"
      -              ],
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "input": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "inputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      -          },
      -          "output": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "outputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      -          },
      -          "quoteToken": {
      -            "description": "Opaque token — pass to ravn_execute",
      -            "type": "string"
      -          },
      -          "routeType": {
      -            "type": "string"
      -          },
      -          "slippage": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "bps": {
      -                    "type": "number"
      -                  },
      -                  "guaranteedMin": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  },
      -                  "isFirm": {
      -                    "type": "boolean"
      -                  },
      -                  "noMinimum": {
      -                    "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection",
      -                    "type": "boolean"
      -                  }
      -                },
      -                "required": [
      -                  "bps",
      -                  "isFirm",
      -                  "guaranteedMin",
      -                  "noMinimum"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "Null when the venue reports no slippage bound"
      -          },
      -          "venue": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          }
      -        },
      -        "required": [
      -          "quoteToken",
      -          "venue",
      -          "routeType",
      -          "input",
      -          "output",
      -          "fee",
      -          "executable",
      -          "slippage",
      -          "gas",
      -          "inputUsd",
      -          "outputUsd",
      -          "estimatedTimeSeconds",
      -          "estimatedTimeIsGuess",
      -          "expiresAt",
      -          "alternatives"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "data",
      -      "meta"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "code": {
      -            "type": "string"
      -          },
      -          "details": {},
      -          "message": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "code",
      -          "message"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "meta"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "alternatives": {
      +            "description": "Every other venue that raced and produced a usable quote, best expected net output first (a quote with slippage.noMinimum counts 0.3% under its outputAmount, the shortfall such a venue typically delivers). Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      +            "items": {
      +              "additionalProperties": {},
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "estimatedTimeIsGuess": {
      +            "description": "True when the time is RAVN's estimate, not the venue's own figure",
      +            "type": "boolean"
      +          },
      +          "estimatedTimeSeconds": {
      +            "type": "number"
      +          },
      +          "executable": {
      +            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      +            "type": "boolean"
      +          },
      +          "expiresAt": {
      +            "type": "number"
      +          },
      +          "fee": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "gas": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "estimated": {
      +                    "type": "boolean"
      +                  },
      +                  "native": {
      +                    "type": "string"
      +                  },
      +                  "nativeSymbol": {
      +                    "type": "string"
      +                  },
      +                  "usd": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "native",
      +                  "nativeSymbol",
      +                  "usd",
      +                  "estimated"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The native gas the user must hold; null on gasless venues"
      +          },
      +          "hops": {
      +            "description": "2-hop / dest-call: the venues actually used. Sign hop 1; hop 2 is a unique deposit",
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "id": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "name"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "input": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "inputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      +          },
      +          "output": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "outputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      +          },
      +          "quoteToken": {
      +            "description": "Opaque token — pass to ravn_execute",
      +            "type": "string"
      +          },
      +          "routeType": {
      +            "type": "string"
      +          },
      +          "slippage": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "bps": {
      +                    "type": "number"
      +                  },
      +                  "guaranteedMin": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  },
      +                  "isFirm": {
      +                    "type": "boolean"
      +                  },
      +                  "noMinimum": {
      +                    "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection",
      +                    "type": "boolean"
      +                  }
      +                },
      +                "required": [
      +                  "bps",
      +                  "isFirm",
      +                  "guaranteedMin",
      +                  "noMinimum"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Null when the venue reports no slippage bound"
      +          },
      +          "venue": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "quoteToken",
      +          "venue",
      +          "routeType",
      +          "input",
      +          "output",
      +          "fee",
      +          "executable",
      +          "slippage",
      +          "gas",
      +          "inputUsd",
      +          "outputUsd",
      +          "estimatedTimeSeconds",
      +          "estimatedTimeIsGuess",
      +          "expiresAt",
      +          "alternatives"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "data",
      +      "meta"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "code": {
      +            "type": "string"
      +          },
      +          "details": {},
      +          "message": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "code",
      +          "message"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "error",
      +      "meta"
      +    ],
      +    "type": "object"
      +  }
      +]
  16. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "alternatives": {
      -            "description": "Every other venue that raced and produced a usable quote, best output first. Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      -            "items": {
      -              "additionalProperties": {},
      -              "propertyNames": {
      -                "type": "string"
      -              },
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "estimatedTimeIsGuess": {
      -            "description": "True when the time is RAVN's estimate, not the venue's own figure",
      -            "type": "boolean"
      -          },
      -          "estimatedTimeSeconds": {
      -            "type": "number"
      -          },
      -          "executable": {
      -            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      -            "type": "boolean"
      -          },
      -          "expiresAt": {
      -            "type": "number"
      -          },
      -          "fee": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "gas": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "estimated": {
      -                    "type": "boolean"
      -                  },
      -                  "native": {
      -                    "type": "string"
      -                  },
      -                  "nativeSymbol": {
      -                    "type": "string"
      -                  },
      -                  "usd": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "native",
      -                  "nativeSymbol",
      -                  "usd",
      -                  "estimated"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "The native gas the user must hold; null on gasless venues"
      -          },
      -          "hops": {
      -            "description": "2-hop / dest-call: the venues actually used. Sign hop 1; hop 2 is a unique deposit",
      -            "items": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "id": {
      -                  "type": "string"
      -                },
      -                "name": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "id",
      -                "name"
      -              ],
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "input": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "inputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      -          },
      -          "output": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "outputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      -          },
      -          "quoteToken": {
      -            "description": "Opaque token — pass to ravn_execute",
      -            "type": "string"
      -          },
      -          "routeType": {
      -            "type": "string"
      -          },
      -          "slippage": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "bps": {
      -                    "type": "number"
      -                  },
      -                  "guaranteedMin": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  },
      -                  "isFirm": {
      -                    "type": "boolean"
      -                  }
      -                },
      -                "required": [
      -                  "bps",
      -                  "isFirm",
      -                  "guaranteedMin"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "Null when the venue reports no slippage bound"
      -          },
      -          "venue": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          }
      -        },
      -        "required": [
      -          "quoteToken",
      -          "venue",
      -          "routeType",
      -          "input",
      -          "output",
      -          "fee",
      -          "executable",
      -          "slippage",
      -          "gas",
      -          "inputUsd",
      -          "outputUsd",
      -          "estimatedTimeSeconds",
      -          "estimatedTimeIsGuess",
      -          "expiresAt",
      -          "alternatives"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "data",
      -      "meta"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "code": {
      -            "type": "string"
      -          },
      -          "details": {},
      -          "message": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "code",
      -          "message"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "meta"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "alternatives": {
      +            "description": "Every other venue that raced and produced a usable quote, best output first. Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      +            "items": {
      +              "additionalProperties": {},
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "estimatedTimeIsGuess": {
      +            "description": "True when the time is RAVN's estimate, not the venue's own figure",
      +            "type": "boolean"
      +          },
      +          "estimatedTimeSeconds": {
      +            "type": "number"
      +          },
      +          "executable": {
      +            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      +            "type": "boolean"
      +          },
      +          "expiresAt": {
      +            "type": "number"
      +          },
      +          "fee": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "gas": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "estimated": {
      +                    "type": "boolean"
      +                  },
      +                  "native": {
      +                    "type": "string"
      +                  },
      +                  "nativeSymbol": {
      +                    "type": "string"
      +                  },
      +                  "usd": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "native",
      +                  "nativeSymbol",
      +                  "usd",
      +                  "estimated"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The native gas the user must hold; null on gasless venues"
      +          },
      +          "hops": {
      +            "description": "2-hop / dest-call: the venues actually used. Sign hop 1; hop 2 is a unique deposit",
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "id": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "name"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "input": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "inputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      +          },
      +          "output": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "outputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      +          },
      +          "quoteToken": {
      +            "description": "Opaque token — pass to ravn_execute",
      +            "type": "string"
      +          },
      +          "routeType": {
      +            "type": "string"
      +          },
      +          "slippage": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "bps": {
      +                    "type": "number"
      +                  },
      +                  "guaranteedMin": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  },
      +                  "isFirm": {
      +                    "type": "boolean"
      +                  },
      +                  "noMinimum": {
      +                    "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection",
      +                    "type": "boolean"
      +                  }
      +                },
      +                "required": [
      +                  "bps",
      +                  "isFirm",
      +                  "guaranteedMin",
      +                  "noMinimum"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Null when the venue reports no slippage bound"
      +          },
      +          "venue": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "quoteToken",
      +          "venue",
      +          "routeType",
      +          "input",
      +          "output",
      +          "fee",
      +          "executable",
      +          "slippage",
      +          "gas",
      +          "inputUsd",
      +          "outputUsd",
      +          "estimatedTimeSeconds",
      +          "estimatedTimeIsGuess",
      +          "expiresAt",
      +          "alternatives"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "data",
      +      "meta"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "code": {
      +            "type": "string"
      +          },
      +          "details": {},
      +          "message": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "code",
      +          "message"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "error",
      +      "meta"
      +    ],
      +    "type": "object"
      +  }
      +]
  17. Changed1 schema field changed
    • changedInput schema / properties / confidential / description
      Previous value: -"Settle privately via NEAR Intents' Confidential Intents so the deposit and payout can't be linked on-chain. Only NEAR quotes it (NO_LIQUIDITY if it can't, never a public fallback). ~0.3 bps extra on EVM-to-EVM, ~5-8 bps extra when Bitcoin or Solana is a leg, and it can settle slower than a public swap (Bitcoin-source: 13 min public vs 43 min confidential) — read estimatedTimeSeconds before executing"New value: +"Settle privately via NEAR Intents' Confidential Intents so the deposit and payout can't be linked on-chain. Through this MCP server only NEAR quotes it (NO_LIQUIDITY if it can't, never a public fallback): RAVN's second private venue, Houdini Swap, needs the end user's IP, user-agent and country for its compliance rules, which an MCP call doesn't carry — use POST /api/v1/quote for it. ~0.3 bps extra on EVM-to-EVM, ~5-8 bps extra when Bitcoin or Solana is a leg, and it can settle slower than a public swap (Bitcoin-source: 13 min public vs 43 min confidential) — read estimatedTimeSeconds before executing"
  18. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "alternatives": {
      -            "description": "Every other venue that raced and produced a usable quote, best output first. Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      -            "items": {
      -              "additionalProperties": {},
      -              "propertyNames": {
      -                "type": "string"
      -              },
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "estimatedTimeIsGuess": {
      -            "description": "True when the venue didn't report a time for this quote",
      -            "type": "boolean"
      -          },
      -          "estimatedTimeSeconds": {
      -            "type": "number"
      -          },
      -          "executable": {
      -            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      -            "type": "boolean"
      -          },
      -          "expiresAt": {
      -            "type": "number"
      -          },
      -          "fee": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "gas": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "estimated": {
      -                    "type": "boolean"
      -                  },
      -                  "native": {
      -                    "type": "string"
      -                  },
      -                  "nativeSymbol": {
      -                    "type": "string"
      -                  },
      -                  "usd": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "native",
      -                  "nativeSymbol",
      -                  "usd",
      -                  "estimated"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "The native gas the user must hold; null on gasless venues"
      -          },
      -          "hops": {
      -            "description": "2-hop / dest-call: the venues actually used. Sign hop 1; hop 2 is a unique deposit",
      -            "items": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "id": {
      -                  "type": "string"
      -                },
      -                "name": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "id",
      -                "name"
      -              ],
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "input": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "inputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      -          },
      -          "output": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "outputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      -          },
      -          "quoteToken": {
      -            "description": "Opaque token — pass to ravn_execute",
      -            "type": "string"
      -          },
      -          "routeType": {
      -            "type": "string"
      -          },
      -          "slippage": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "bps": {
      -                    "type": "number"
      -                  },
      -                  "guaranteedMin": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  },
      -                  "isFirm": {
      -                    "type": "boolean"
      -                  }
      -                },
      -                "required": [
      -                  "bps",
      -                  "isFirm",
      -                  "guaranteedMin"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "Null when the venue reports no slippage bound"
      -          },
      -          "venue": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          }
      -        },
      -        "required": [
      -          "quoteToken",
      -          "venue",
      -          "routeType",
      -          "input",
      -          "output",
      -          "fee",
      -          "executable",
      -          "slippage",
      -          "gas",
      -          "inputUsd",
      -          "outputUsd",
      -          "estimatedTimeSeconds",
      -          "estimatedTimeIsGuess",
      -          "expiresAt",
      -          "alternatives"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "data",
      -      "meta"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "code": {
      -            "type": "string"
      -          },
      -          "details": {},
      -          "message": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "code",
      -          "message"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "meta"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "alternatives": {
      +            "description": "Every other venue that raced and produced a usable quote, best output first. Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      +            "items": {
      +              "additionalProperties": {},
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "estimatedTimeIsGuess": {
      +            "description": "True when the time is RAVN's estimate, not the venue's own figure",
      +            "type": "boolean"
      +          },
      +          "estimatedTimeSeconds": {
      +            "type": "number"
      +          },
      +          "executable": {
      +            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      +            "type": "boolean"
      +          },
      +          "expiresAt": {
      +            "type": "number"
      +          },
      +          "fee": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "gas": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "estimated": {
      +                    "type": "boolean"
      +                  },
      +                  "native": {
      +                    "type": "string"
      +                  },
      +                  "nativeSymbol": {
      +                    "type": "string"
      +                  },
      +                  "usd": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "native",
      +                  "nativeSymbol",
      +                  "usd",
      +                  "estimated"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The native gas the user must hold; null on gasless venues"
      +          },
      +          "hops": {
      +            "description": "2-hop / dest-call: the venues actually used. Sign hop 1; hop 2 is a unique deposit",
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "id": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "name"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "input": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "inputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      +          },
      +          "output": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "outputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      +          },
      +          "quoteToken": {
      +            "description": "Opaque token — pass to ravn_execute",
      +            "type": "string"
      +          },
      +          "routeType": {
      +            "type": "string"
      +          },
      +          "slippage": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "bps": {
      +                    "type": "number"
      +                  },
      +                  "guaranteedMin": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  },
      +                  "isFirm": {
      +                    "type": "boolean"
      +                  }
      +                },
      +                "required": [
      +                  "bps",
      +                  "isFirm",
      +                  "guaranteedMin"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Null when the venue reports no slippage bound"
      +          },
      +          "venue": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "quoteToken",
      +          "venue",
      +          "routeType",
      +          "input",
      +          "output",
      +          "fee",
      +          "executable",
      +          "slippage",
      +          "gas",
      +          "inputUsd",
      +          "outputUsd",
      +          "estimatedTimeSeconds",
      +          "estimatedTimeIsGuess",
      +          "expiresAt",
      +          "alternatives"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "data",
      +      "meta"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "code": {
      +            "type": "string"
      +          },
      +          "details": {},
      +          "message": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "code",
      +          "message"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "error",
      +      "meta"
      +    ],
      +    "type": "object"
      +  }
      +]
  19. Changed1 schema field changed
    • addedInput schema / properties / confidential
      Added value: +{
      +  "description": "Settle privately via NEAR Intents' Confidential Intents so the deposit and payout can't be linked on-chain. Only NEAR quotes it (NO_LIQUIDITY if it can't, never a public fallback). ~0.3 bps extra on EVM-to-EVM, ~5-8 bps extra when Bitcoin or Solana is a leg, and it can settle slower than a public swap (Bitcoin-source: 13 min public vs 43 min confidential) — read estimatedTimeSeconds before executing",
      +  "type": "boolean"
      +}
  20. Changed2 schema fields changed
    • changedInput schema / properties / destinationAddress / description
      Previous value: -"Where output should land, if different from userAddress. Required here, at quote time, to get an executable quote from Relay (Bitcoin as the source), THORChain (Bitcoin either direction), Across (a Solana-touching route), or Eco (a cross-ecosystem route) — omit it there and you get back a priced-but-unexecutable preview instead (see ravn_quote's executable), not an error"New value: +"Where output should land, if different from userAddress. Required here, at quote time, to get an executable quote from Relay (Bitcoin as the source), THORChain (Bitcoin either direction), Across (a Solana-touching route), or Eco (a cross-ecosystem route) — omit it there and you get back a priced-but-unexecutable preview instead (see ravn_quote's executable), not an error. A malformed address, one from the wrong ecosystem, or a known non-wallet address (a RAVN-listed token's mint/contract, this swap's own tokens, the native-coin sentinel, burn addresses, Solana core programs, and via an on-chain lookup a Solana token account or program — the token-account error names the owning wallet, which is the address to use) IS an error here — funds sent there are unrecoverable. Omit the field rather than passing an empty string; an empty string is treated as omitted"
    • changedInput schema / properties / refundAddress / description
      Previous value: -"Where to refund the input asset if the swap fails. Required here, at quote time, for a Bitcoin-source Relay or THORChain quote — neither has an execute-time re-bind, so omitting it returns a priced-but-unexecutable preview and supplying it later on ravn_execute has no effect. Other BTC-source venues (Garden, Chainflip, Rift) support binding this at execute time instead"New value: +"Where to refund the input asset if the swap fails. Required here, at quote time, for a Bitcoin-source Relay or THORChain quote — neither has an execute-time re-bind, so omitting it returns a priced-but-unexecutable preview and supplying it later on ravn_execute has no effect. Other BTC-source venues (Garden, Chainflip, Rift) support binding this at execute time instead. Validated against the INPUT chain (refunds are paid back on the origin), with the same non-wallet-address check as destinationAddress"
  21. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "alternatives": {
      -            "description": "Every other venue that raced and produced a usable quote, best output first. Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      -            "items": {
      -              "additionalProperties": {},
      -              "propertyNames": {
      -                "type": "string"
      -              },
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "estimatedTimeIsGuess": {
      -            "description": "True when the venue didn't report a time for this quote",
      -            "type": "boolean"
      -          },
      -          "estimatedTimeSeconds": {
      -            "type": "number"
      -          },
      -          "executable": {
      -            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      -            "type": "boolean"
      -          },
      -          "expiresAt": {
      -            "type": "number"
      -          },
      -          "fee": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "gas": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "estimated": {
      -                    "type": "boolean"
      -                  },
      -                  "native": {
      -                    "type": "string"
      -                  },
      -                  "nativeSymbol": {
      -                    "type": "string"
      -                  },
      -                  "usd": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "native",
      -                  "nativeSymbol",
      -                  "usd",
      -                  "estimated"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "The native gas the user must hold; null on gasless venues"
      -          },
      -          "input": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "inputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      -          },
      -          "output": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "outputUsd": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      -          },
      -          "quoteToken": {
      -            "description": "Opaque token — pass to ravn_execute",
      -            "type": "string"
      -          },
      -          "routeType": {
      -            "type": "string"
      -          },
      -          "slippage": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "bps": {
      -                    "type": "number"
      -                  },
      -                  "guaranteedMin": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  },
      -                  "isFirm": {
      -                    "type": "boolean"
      -                  }
      -                },
      -                "required": [
      -                  "bps",
      -                  "isFirm",
      -                  "guaranteedMin"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "Null when the venue reports no slippage bound"
      -          },
      -          "venue": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          }
      -        },
      -        "required": [
      -          "quoteToken",
      -          "venue",
      -          "routeType",
      -          "input",
      -          "output",
      -          "fee",
      -          "executable",
      -          "slippage",
      -          "gas",
      -          "inputUsd",
      -          "outputUsd",
      -          "estimatedTimeSeconds",
      -          "estimatedTimeIsGuess",
      -          "expiresAt",
      -          "alternatives"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "data",
      -      "meta"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "code": {
      -            "type": "string"
      -          },
      -          "details": {},
      -          "message": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "code",
      -          "message"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "meta"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "alternatives": {
      +            "description": "Every other venue that raced and produced a usable quote, best output first. Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      +            "items": {
      +              "additionalProperties": {},
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "estimatedTimeIsGuess": {
      +            "description": "True when the venue didn't report a time for this quote",
      +            "type": "boolean"
      +          },
      +          "estimatedTimeSeconds": {
      +            "type": "number"
      +          },
      +          "executable": {
      +            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      +            "type": "boolean"
      +          },
      +          "expiresAt": {
      +            "type": "number"
      +          },
      +          "fee": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "gas": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "estimated": {
      +                    "type": "boolean"
      +                  },
      +                  "native": {
      +                    "type": "string"
      +                  },
      +                  "nativeSymbol": {
      +                    "type": "string"
      +                  },
      +                  "usd": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "native",
      +                  "nativeSymbol",
      +                  "usd",
      +                  "estimated"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The native gas the user must hold; null on gasless venues"
      +          },
      +          "hops": {
      +            "description": "2-hop / dest-call: the venues actually used. Sign hop 1; hop 2 is a unique deposit",
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "id": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "name"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "input": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "inputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      +          },
      +          "output": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "outputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      +          },
      +          "quoteToken": {
      +            "description": "Opaque token — pass to ravn_execute",
      +            "type": "string"
      +          },
      +          "routeType": {
      +            "type": "string"
      +          },
      +          "slippage": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "bps": {
      +                    "type": "number"
      +                  },
      +                  "guaranteedMin": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  },
      +                  "isFirm": {
      +                    "type": "boolean"
      +                  }
      +                },
      +                "required": [
      +                  "bps",
      +                  "isFirm",
      +                  "guaranteedMin"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Null when the venue reports no slippage bound"
      +          },
      +          "venue": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "quoteToken",
      +          "venue",
      +          "routeType",
      +          "input",
      +          "output",
      +          "fee",
      +          "executable",
      +          "slippage",
      +          "gas",
      +          "inputUsd",
      +          "outputUsd",
      +          "estimatedTimeSeconds",
      +          "estimatedTimeIsGuess",
      +          "expiresAt",
      +          "alternatives"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "data",
      +      "meta"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "code": {
      +            "type": "string"
      +          },
      +          "details": {},
      +          "message": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "code",
      +          "message"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "error",
      +      "meta"
      +    ],
      +    "type": "object"
      +  }
      +]
  22. Changed4 schema fields changed
    • addedInput schema / properties / excludeVenues
      Added value: +{
      +  "description": "Drop specific venues from this race, e.g. a risk objection to one of them or ravn_health showing it degraded. Naming a venue that was never eligible for this pair is a no-op, not an error",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / inputChainId / description
      Previous value: -"Numeric chain id, e.g. 1=Ethereum, 8453=Base, -1=Bitcoin, -2=Solana — see ravn_health for the live venue list"New value: +"Numeric chain id, e.g. 1=Ethereum, 8453=Base, -1=Bitcoin, -2=Solana — see ravn_chains for the full list, or ravn_health for live venue status"
    • changedInput schema / properties / outputChainId / description
      Previous value: -"Numeric chain id, e.g. 1=Ethereum, 8453=Base, -1=Bitcoin, -2=Solana — see ravn_health for the live venue list"New value: +"Numeric chain id, e.g. 1=Ethereum, 8453=Base, -1=Bitcoin, -2=Solana — see ravn_chains for the full list, or ravn_health for live venue status"
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "approval": {
      -            "additionalProperties": {},
      -            "description": "Present when the input token needs an ERC-20 approval before executing",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "estimatedTimeIsGuess": {
      -            "description": "True when the venue didn't report a time for this quote",
      -            "type": "boolean"
      -          },
      -          "estimatedTimeSeconds": {
      -            "type": "number"
      -          },
      -          "executable": {
      -            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      -            "type": "boolean"
      -          },
      -          "expiresAt": {
      -            "type": "number"
      -          },
      -          "fee": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "gas": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "estimated": {
      -                    "type": "boolean"
      -                  },
      -                  "native": {
      -                    "type": "string"
      -                  },
      -                  "nativeSymbol": {
      -                    "type": "string"
      -                  },
      -                  "usd": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "native",
      -                  "nativeSymbol",
      -                  "usd",
      -                  "estimated"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "The native gas the user must hold; null on gasless venues"
      -          },
      -          "input": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "output": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "quoteToken": {
      -            "description": "Opaque token — pass to ravn_execute",
      -            "type": "string"
      -          },
      -          "routeType": {
      -            "type": "string"
      -          },
      -          "slippage": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "bps": {
      -                    "type": "number"
      -                  },
      -                  "guaranteedMin": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  },
      -                  "isFirm": {
      -                    "type": "boolean"
      -                  }
      -                },
      -                "required": [
      -                  "bps",
      -                  "isFirm",
      -                  "guaranteedMin"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "Null when the venue reports no slippage bound"
      -          },
      -          "venue": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          }
      -        },
      -        "required": [
      -          "quoteToken",
      -          "venue",
      -          "routeType",
      -          "input",
      -          "output",
      -          "fee",
      -          "executable",
      -          "slippage",
      -          "gas",
      -          "estimatedTimeSeconds",
      -          "estimatedTimeIsGuess",
      -          "expiresAt"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "data",
      -      "meta"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "code": {
      -            "type": "string"
      -          },
      -          "details": {},
      -          "message": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "code",
      -          "message"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "meta"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "alternatives": {
      +            "description": "Every other venue that raced and produced a usable quote, best output first. Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues",
      +            "items": {
      +              "additionalProperties": {},
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "estimatedTimeIsGuess": {
      +            "description": "True when the venue didn't report a time for this quote",
      +            "type": "boolean"
      +          },
      +          "estimatedTimeSeconds": {
      +            "type": "number"
      +          },
      +          "executable": {
      +            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      +            "type": "boolean"
      +          },
      +          "expiresAt": {
      +            "type": "number"
      +          },
      +          "fee": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "gas": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "estimated": {
      +                    "type": "boolean"
      +                  },
      +                  "native": {
      +                    "type": "string"
      +                  },
      +                  "nativeSymbol": {
      +                    "type": "string"
      +                  },
      +                  "usd": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "native",
      +                  "nativeSymbol",
      +                  "usd",
      +                  "estimated"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The native gas the user must hold; null on gasless venues"
      +          },
      +          "input": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "inputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced"
      +          },
      +          "output": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "outputUsd": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "USD value of the output amount. Compare against inputUsd for price impact"
      +          },
      +          "quoteToken": {
      +            "description": "Opaque token — pass to ravn_execute",
      +            "type": "string"
      +          },
      +          "routeType": {
      +            "type": "string"
      +          },
      +          "slippage": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "bps": {
      +                    "type": "number"
      +                  },
      +                  "guaranteedMin": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  },
      +                  "isFirm": {
      +                    "type": "boolean"
      +                  }
      +                },
      +                "required": [
      +                  "bps",
      +                  "isFirm",
      +                  "guaranteedMin"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Null when the venue reports no slippage bound"
      +          },
      +          "venue": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "quoteToken",
      +          "venue",
      +          "routeType",
      +          "input",
      +          "output",
      +          "fee",
      +          "executable",
      +          "slippage",
      +          "gas",
      +          "inputUsd",
      +          "outputUsd",
      +          "estimatedTimeSeconds",
      +          "estimatedTimeIsGuess",
      +          "expiresAt",
      +          "alternatives"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "data",
      +      "meta"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "code": {
      +            "type": "string"
      +          },
      +          "details": {},
      +          "message": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "code",
      +          "message"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "error",
      +      "meta"
      +    ],
      +    "type": "object"
      +  }
      +]
  23. Changed2 schema fields changed
    • changedInput schema / properties / destinationAddress / description
      Previous value: -"Where output should land, if different from userAddress. For a Solana-touching Across quote or a cross-ecosystem Eco quote, this must be supplied here, at quote time — omitting it returns a priced-but-unexecutable preview (see ravn_quote's executable), since neither venue supports fixing the destination after quoting"New value: +"Where output should land, if different from userAddress. Required here, at quote time, to get an executable quote from Relay (Bitcoin as the source), THORChain (Bitcoin either direction), Across (a Solana-touching route), or Eco (a cross-ecosystem route) — omit it there and you get back a priced-but-unexecutable preview instead (see ravn_quote's executable), not an error"
    • changedInput schema / properties / refundAddress / description
      Previous value: -"Where to refund the input asset if the swap fails. For a Bitcoin-source Relay quote specifically, this must be supplied here, at quote time — Relay has no execute-time re-bind, so omitting it returns a priced-but-unexecutable preview and supplying it later on ravn_execute has no effect. Other BTC-source venues (Garden, THORChain, Chainflip, Rift) support binding this at execute time instead"New value: +"Where to refund the input asset if the swap fails. Required here, at quote time, for a Bitcoin-source Relay or THORChain quote — neither has an execute-time re-bind, so omitting it returns a priced-but-unexecutable preview and supplying it later on ravn_execute has no effect. Other BTC-source venues (Garden, Chainflip, Rift) support binding this at execute time instead"
  24. Changed3 schema fields changed
    • changedInput schema / properties / destinationAddress / description
      Previous value: -"Where output should land, if different from userAddress"New value: +"Where output should land, if different from userAddress. For a Solana-touching Across quote or a cross-ecosystem Eco quote, this must be supplied here, at quote time — omitting it returns a priced-but-unexecutable preview (see ravn_quote's executable), since neither venue supports fixing the destination after quoting"
    • changedInput schema / properties / refundAddress / description
      Previous value: -"Where to refund the input asset if the swap fails. For a Bitcoin-source quote this must be supplied here, at quote time — omitting it returns a priced-but-unexecutable preview, and supplying it later on ravn_execute instead has no effect (see ravn_execute's refundAddress)"New value: +"Where to refund the input asset if the swap fails. For a Bitcoin-source Relay quote specifically, this must be supplied here, at quote time — Relay has no execute-time re-bind, so omitting it returns a priced-but-unexecutable preview and supplying it later on ravn_execute has no effect. Other BTC-source venues (Garden, THORChain, Chainflip, Rift) support binding this at execute time instead"
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "approval": {
      -            "additionalProperties": {},
      -            "description": "Present when the input token needs an ERC-20 approval before executing",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "estimatedTimeIsGuess": {
      -            "description": "True when the venue didn't report a time for this quote",
      -            "type": "boolean"
      -          },
      -          "estimatedTimeSeconds": {
      -            "type": "number"
      -          },
      -          "expiresAt": {
      -            "type": "number"
      -          },
      -          "fee": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "gas": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "estimated": {
      -                    "type": "boolean"
      -                  },
      -                  "native": {
      -                    "type": "string"
      -                  },
      -                  "nativeSymbol": {
      -                    "type": "string"
      -                  },
      -                  "usd": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "native",
      -                  "nativeSymbol",
      -                  "usd",
      -                  "estimated"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "The native gas the user must hold; null on gasless venues"
      -          },
      -          "input": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "output": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "quoteToken": {
      -            "description": "Opaque token — pass to ravn_execute",
      -            "type": "string"
      -          },
      -          "routeType": {
      -            "type": "string"
      -          },
      -          "slippage": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "bps": {
      -                    "type": "number"
      -                  },
      -                  "guaranteedMin": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  },
      -                  "isFirm": {
      -                    "type": "boolean"
      -                  }
      -                },
      -                "required": [
      -                  "bps",
      -                  "isFirm",
      -                  "guaranteedMin"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "Null when the venue reports no slippage bound"
      -          },
      -          "venue": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          }
      -        },
      -        "required": [
      -          "quoteToken",
      -          "venue",
      -          "routeType",
      -          "input",
      -          "output",
      -          "fee",
      -          "slippage",
      -          "gas",
      -          "estimatedTimeSeconds",
      -          "estimatedTimeIsGuess",
      -          "expiresAt"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "data",
      -      "meta"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "code": {
      -            "type": "string"
      -          },
      -          "details": {},
      -          "message": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "code",
      -          "message"
      -        ],
      -        "type": "object"
      -      },
      -      "meta": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "requestId": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "requestId",
      -          "version"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "meta"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "approval": {
      +            "additionalProperties": {},
      +            "description": "Present when the input token needs an ERC-20 approval before executing",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "estimatedTimeIsGuess": {
      +            "description": "True when the venue didn't report a time for this quote",
      +            "type": "boolean"
      +          },
      +          "estimatedTimeSeconds": {
      +            "type": "number"
      +          },
      +          "executable": {
      +            "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead",
      +            "type": "boolean"
      +          },
      +          "expiresAt": {
      +            "type": "number"
      +          },
      +          "fee": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "gas": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "estimated": {
      +                    "type": "boolean"
      +                  },
      +                  "native": {
      +                    "type": "string"
      +                  },
      +                  "nativeSymbol": {
      +                    "type": "string"
      +                  },
      +                  "usd": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "native",
      +                  "nativeSymbol",
      +                  "usd",
      +                  "estimated"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The native gas the user must hold; null on gasless venues"
      +          },
      +          "input": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "output": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "quoteToken": {
      +            "description": "Opaque token — pass to ravn_execute",
      +            "type": "string"
      +          },
      +          "routeType": {
      +            "type": "string"
      +          },
      +          "slippage": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "bps": {
      +                    "type": "number"
      +                  },
      +                  "guaranteedMin": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  },
      +                  "isFirm": {
      +                    "type": "boolean"
      +                  }
      +                },
      +                "required": [
      +                  "bps",
      +                  "isFirm",
      +                  "guaranteedMin"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Null when the venue reports no slippage bound"
      +          },
      +          "venue": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "quoteToken",
      +          "venue",
      +          "routeType",
      +          "input",
      +          "output",
      +          "fee",
      +          "executable",
      +          "slippage",
      +          "gas",
      +          "estimatedTimeSeconds",
      +          "estimatedTimeIsGuess",
      +          "expiresAt"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "data",
      +      "meta"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "code": {
      +            "type": "string"
      +          },
      +          "details": {},
      +          "message": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "code",
      +          "message"
      +        ],
      +        "type": "object"
      +      },
      +      "meta": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "requestId": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "requestId",
      +          "version"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "error",
      +      "meta"
      +    ],
      +    "type": "object"
      +  }
      +]
  25. Changed1 schema field changed
    • changedInput schema / properties / refundAddress / description
      Previous value: -"Where to refund the input asset if the swap fails — defaults to userAddress"New value: +"Where to refund the input asset if the swap fails. For a Bitcoin-source quote this must be supplied here, at quote time — omitting it returns a priced-but-unexecutable preview, and supplying it later on ravn_execute instead has no effect (see ravn_execute's refundAddress)"
  26. Changed4 schema fields changed
    • addedInput schema / properties / rankingMode / description
      Added value: +"best_output (default) picks the highest net output; fastest picks the quickest-settling quote within slippageBps"
    • addedInput schema / properties / refundAddress / description
      Added value: +"Where to refund the input asset if the swap fails — defaults to userAddress"
    • addedInput schema / properties / slippageBps / description
      Added value: +"Max acceptable slippage in basis points"
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "data": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "approval": {
      +              "additionalProperties": {},
      +              "description": "Present when the input token needs an ERC-20 approval before executing",
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "estimatedTimeIsGuess": {
      +              "description": "True when the venue didn't report a time for this quote",
      +              "type": "boolean"
      +            },
      +            "estimatedTimeSeconds": {
      +              "type": "number"
      +            },
      +            "expiresAt": {
      +              "type": "number"
      +            },
      +            "fee": {
      +              "additionalProperties": {},
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "gas": {
      +              "anyOf": [
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "estimated": {
      +                      "type": "boolean"
      +                    },
      +                    "native": {
      +                      "type": "string"
      +                    },
      +                    "nativeSymbol": {
      +                      "type": "string"
      +                    },
      +                    "usd": {
      +                      "anyOf": [
      +                        {
      +                          "type": "string"
      +                        },
      +                        {
      +                          "type": "null"
      +                        }
      +                      ]
      +                    }
      +                  },
      +                  "required": [
      +                    "native",
      +                    "nativeSymbol",
      +                    "usd",
      +                    "estimated"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "The native gas the user must hold; null on gasless venues"
      +            },
      +            "input": {
      +              "additionalProperties": {},
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "output": {
      +              "additionalProperties": {},
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "quoteToken": {
      +              "description": "Opaque token — pass to ravn_execute",
      +              "type": "string"
      +            },
      +            "routeType": {
      +              "type": "string"
      +            },
      +            "slippage": {
      +              "anyOf": [
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "bps": {
      +                      "type": "number"
      +                    },
      +                    "guaranteedMin": {
      +                      "anyOf": [
      +                        {
      +                          "type": "string"
      +                        },
      +                        {
      +                          "type": "null"
      +                        }
      +                      ]
      +                    },
      +                    "isFirm": {
      +                      "type": "boolean"
      +                    }
      +                  },
      +                  "required": [
      +                    "bps",
      +                    "isFirm",
      +                    "guaranteedMin"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Null when the venue reports no slippage bound"
      +            },
      +            "venue": {
      +              "additionalProperties": {},
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            }
      +          },
      +          "required": [
      +            "quoteToken",
      +            "venue",
      +            "routeType",
      +            "input",
      +            "output",
      +            "fee",
      +            "slippage",
      +            "gas",
      +            "estimatedTimeSeconds",
      +            "estimatedTimeIsGuess",
      +            "expiresAt"
      +          ],
      +          "type": "object"
      +        },
      +        "meta": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "requestId": {
      +              "type": "string"
      +            },
      +            "version": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "requestId",
      +            "version"
      +          ],
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "data",
      +        "meta"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "error": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "code": {
      +              "type": "string"
      +            },
      +            "details": {},
      +            "message": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "code",
      +            "message"
      +          ],
      +          "type": "object"
      +        },
      +        "meta": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "requestId": {
      +              "type": "string"
      +            },
      +            "version": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "requestId",
      +            "version"
      +          ],
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "error",
      +        "meta"
      +      ],
      +      "type": "object"
      +    }
      +  ],
      +  "type": "object"
      +}
  27. First observed

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered; the description adds real value beyond that with cost (free, no key), the quoteToken output contract, and the downstream dependency. It omits one behavioral trait an agent would want up front — that some quotes come back as priced-but-unexecutable previews rather than errors — which is only disclosed in the per-parameter descriptions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the resource and its scope before the cost and handoff details. No filler and nothing that duplicates the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and all 16 params are fully documented, so the description need only orient the agent — which it does, covering scope, cost, and the execute handoff. The remaining gap is the executable-vs-preview distinction, a consequential trait buried in parameter text rather than surfaced at the top level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across all 16 parameters, with unusually rich per-field text (venue include/exclude semantics, refundAddress timing rules, confidential trade-offs), so the schema carries the load. The description itself adds no parameter-level meaning, which lands at the baseline 3 for full-coverage schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get a swap quote) and scopes it precisely: same-chain or cross-chain, 18 chains, native non-wrapped BTC and Solana on either side. The final sentence distinguishes it from the sibling ravn_execute by naming the handoff artifact (quoteToken) and what that sibling produces.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Makes the sequencing explicit — call this first, then pass the quoteToken to ravn_execute — and removes a common blocker by stating it is free with no API key or payment. It does not name when-not to use it (e.g. that chain ids should come from ravn_chains or venue status from ravn_health), though those pointers live in the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.