{
  "x402Version": 2,
  "id": 27149,
  "slug": "27149",
  "resource": "https://app.ravn.exchange/api/v1/x402/quote",
  "description": "RAVN — best-price swap quotes across 20 execution venues and 17 chains, including native (non-wrapped) Bitcoin as either source or destination. 0% protocol fee, non-custodial. Returns a quoteToken; pass it to POST /execute.",
  "type": "http",
  "serviceName": "RAVN",
  "iconUrl": "https://res.cloudinary.com/bdb-prod/image/upload/c_fill,ar_1:1,w_256,h_256,f_auto,q_auto/v1786449367/bazaar-icons/de448ab353b66c88.png",
  "resourceType": "Payments",
  "accepts": [
    {
      "scheme": "exact",
      "network": "eip155:8453",
      "payTo": "0x12d2425fD88c693EDB4dE004E0c747879B7D6933",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "amount": "1000",
      "amountUsd": 0.001,
      "maxTimeoutSeconds": 300
    },
    {
      "scheme": "exact",
      "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
      "payTo": "4pQtttNDe8kdQjhJ22LA2Tqnen9smPjoJj7HM3X8ZNYf",
      "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
      "amount": "1000",
      "amountUsd": 0.001,
      "maxTimeoutSeconds": 300
    }
  ],
  "outputSchema": {
    "properties": {
      "example": {
        "type": "object"
      },
      "type": {
        "type": "string"
      }
    },
    "required": [
      "type"
    ],
    "type": "object"
  },
  "extensions": {
    "bazaar": {
      "info": {
        "input": {
          "body": {
            "inputAmount": "1000000000000000000",
            "inputChainId": 1,
            "inputToken": "0xEeeeeEeeeEeEeeEeEeEeeeEEeeeeEeeeeeeeEEeE",
            "outputChainId": 8453,
            "outputToken": "0xEeeeeEeeeEeEeeEeEeEeeeEEeeeeEeeeeeeeEEeE",
            "userAddress": "0x0000000000000000000000000000000000dEaD"
          },
          "bodyType": "json",
          "method": "POST",
          "type": "http"
        },
        "output": {
          "example": {
            "data": {
              "estimatedTimeSeconds": 3,
              "expiresAt": 1786374968171,
              "fee": {
                "amount": "0",
                "bps": 0
              },
              "input": {
                "amount": "1000000000000000000",
                "token": {
                  "chainId": 1,
                  "decimals": 18,
                  "isNative": true,
                  "symbol": "ETH"
                }
              },
              "output": {
                "amount": "999534824840543000",
                "token": {
                  "chainId": 8453,
                  "decimals": 18,
                  "isNative": true,
                  "symbol": "ETH"
                }
              },
              "quoteToken": "eyJ2ZW51ZUlkIjoi...",
              "routeType": "EVM_CROSS_CHAIN",
              "venue": {
                "id": "mayan",
                "name": "Mayan"
              }
            }
          },
          "type": "json"
        }
      },
      "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "input": {
            "additionalProperties": false,
            "properties": {
              "body": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "clientTimezone": {
                    "description": "Your end user's IANA timezone (e.g. Europe/Berlin), forwarded only to venues whose API requires the user's details on every call (Houdini). Defaults to UTC.",
                    "maxLength": 64,
                    "type": "string"
                  },
                  "confidential": {
                    "description": "Settle privately: the on-chain deposit and payout cannot be linked to each other. The race narrows to the private venues — NEAR Intents' Confidential Intents and Houdini Swap's two-hop exchange route — and the best output wins; you get NO_LIQUIDITY rather than a public fill if neither can quote. Measured cost: NEAR ~0.3 bps more on EVM-to-EVM and ~5-8 bps more when Bitcoin or Solana is a leg; Houdini ~3% below spot on its fixed-rate quote, which is not a guaranteed minimum (so it wins only where NEAR can't quote). Both can settle slower than a public swap (NEAR Bitcoin-source 43 min; Houdini a few minutes to about an hour), so read estimatedTimeSeconds before executing. A Houdini quote is valid for 60 seconds (expiresAt) and no integrator fee applies to it (fee.supported=false). Houdini is sent your request's IP and user-agent (plus clientTimezone) for its compliance screening, and its terms bar US persons and sanctioned jurisdictions: Houdini is left out of the race when this request arrives from such a country, and you are responsible for your end users' eligibility — pass excludeVenues: [\"houdini\"] where that cannot be met. Confidentiality is the venue's, not RAVN's, and remains subject to its screening.",
                    "type": "boolean"
                  },
                  "destinationAddress": {
                    "description": "Where output should land. Required at quote time for a real (executable) quote from Relay (Bitcoin as source or dest), THORChain (Bitcoin either direction), Across (Solana-touching), Eco (cross-ecosystem), or compose (RAVN two-hop routes). Omit it there and you get a preview (QuoteDTO.executable=false). Validated here, not only at execute: a malformed address, an address from the wrong ecosystem for the output chain, or a known non-wallet address (any RAVN-listed token's mint/contract, this swap's own tokens, the native-coin sentinel, burn addresses, Solana core programs — funds sent there are unrecoverable) is rejected with INVALID_REQUEST. A Solana address is also looked up on chain: a token account (the message names the wallet that owns it) or a program is rejected; this lookup fails open, so an RPC outage never blocks a quote. An empty string means not supplied.",
                    "type": "string"
                  },
                  "excludeVenues": {
                    "description": "Drop specific venues from this race — e.g. a risk objection to one of them. Naming a venue that was never eligible for this pair is a no-op, not an error.",
                    "items": {
                      "enum": [
                        "rift",
                        "0x_gasless",
                        "0x_swap",
                        "0x_solana",
                        "bebop",
                        "cow",
                        "across",
                        "relay",
                        "mayan",
                        "jupiter",
                        "near_intents",
                        "garden",
                        "chainflip",
                        "thorchain",
                        "eco",
                        "compose",
                        "nordstern",
                        "flytrade",
                        "kyberswap",
                        "layerswap",
                        "houdini",
                        "okx"
                      ],
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "inputAmount": {
                    "description": "Positive integer string, in the input token's smallest unit",
                    "type": "string"
                  },
                  "inputChainId": {
                    "enum": [
                      1,
                      10,
                      56,
                      130,
                      137,
                      324,
                      480,
                      999,
                      143,
                      8453,
                      42161,
                      59144,
                      43114,
                      4663,
                      4217,
                      -1,
                      -2
                    ],
                    "type": "number"
                  },
                  "inputToken": {
                    "description": "Token contract address, or the native-token sentinel 0xEeee...EEeE",
                    "minLength": 1,
                    "type": "string"
                  },
                  "outputChainId": {
                    "enum": [
                      1,
                      10,
                      56,
                      130,
                      137,
                      324,
                      480,
                      999,
                      143,
                      8453,
                      42161,
                      59144,
                      43114,
                      4663,
                      4217,
                      -1,
                      -2
                    ],
                    "type": "number"
                  },
                  "outputToken": {
                    "minLength": 1,
                    "type": "string"
                  },
                  "quoteSessionId": {
                    "maxLength": 64,
                    "type": "string"
                  },
                  "rankingMode": {
                    "description": "Defaults to best_output.",
                    "enum": [
                      "best_output",
                      "fastest"
                    ],
                    "type": "string"
                  },
                  "refundAddress": {
                    "description": "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 execute has no effect. Other BTC-source venues (Garden, THORChain, Chainflip, Rift) support binding this at execute time instead. Validated against the INPUT chain (refunds are paid back on the origin), including the token's-own-address check described on destinationAddress.",
                    "type": "string"
                  },
                  "sandbox": {
                    "description": "Test the full quote -> execute -> status flow with no real funds and no live venue settlement. The quote itself is still priced live. On /v1/execute, THORChain BTC-source, Chainflip, RAVN two-hop routes and Houdini Swap are unsupported (each would spend real money or open a live order at the venue, which can't be sandboxed) and every other venue returns realistically-shaped execution data with no funds moved. /v1/submit-signature skips the real venue submission. /v1/status always reports an immediate synthetic success. Sandbox swaps are never metered or billed.",
                    "type": "boolean"
                  },
                  "slippageBps": {
                    "maximum": 5000,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "userAddress": {
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "inputChainId",
                  "outputChainId",
                  "inputToken",
                  "outputToken",
                  "inputAmount",
                  "userAddress"
                ],
                "type": "object"
              },
              "bodyType": {
                "enum": [
                  "json",
                  "form-data",
                  "text"
                ],
                "type": "string"
              },
              "method": {
                "enum": [
                  "POST"
                ],
                "type": "string"
              },
              "type": {
                "const": "http",
                "type": "string"
              }
            },
            "required": [
              "type",
              "method",
              "bodyType",
              "body"
            ],
            "type": "object"
          },
          "output": {
            "properties": {
              "example": {
                "type": "object"
              },
              "type": {
                "type": "string"
              }
            },
            "required": [
              "type"
            ],
            "type": "object"
          }
        },
        "required": [
          "input"
        ],
        "type": "object"
      }
    }
  },
  "tags": [
    "swap",
    "cross-chain",
    "bitcoin",
    "defi",
    "agents",
    "bazaar"
  ],
  "sourceHost": "app.ravn.exchange",
  "lastUpdated": "2026-10-11T08:56:03.235Z",
  "quality": {
    "calls30d": 13,
    "uniquePayers30d": 6,
    "lastCalledAt": "2026-10-11T08:56:01.754Z"
  },
  "metadata": {
    "serviceName": "RAVN",
    "iconUrl": "https://res.cloudinary.com/bdb-prod/image/upload/c_fill,ar_1:1,w_256,h_256,f_auto,q_auto/v1786449367/bazaar-icons/de448ab353b66c88.png",
    "extensions": {
      "bazaar": {
        "info": {
          "input": {
            "body": {
              "inputAmount": "1000000000000000000",
              "inputChainId": 1,
              "inputToken": "0xEeeeeEeeeEeEeeEeEeEeeeEEeeeeEeeeeeeeEEeE",
              "outputChainId": 8453,
              "outputToken": "0xEeeeeEeeeEeEeeEeEeEeeeEEeeeeEeeeeeeeEEeE",
              "userAddress": "0x0000000000000000000000000000000000dEaD"
            },
            "bodyType": "json",
            "method": "POST",
            "type": "http"
          },
          "output": {
            "example": {
              "data": {
                "estimatedTimeSeconds": 3,
                "expiresAt": 1786374968171,
                "fee": {
                  "amount": "0",
                  "bps": 0
                },
                "input": {
                  "amount": "1000000000000000000",
                  "token": {
                    "chainId": 1,
                    "decimals": 18,
                    "isNative": true,
                    "symbol": "ETH"
                  }
                },
                "output": {
                  "amount": "999534824840543000",
                  "token": {
                    "chainId": 8453,
                    "decimals": 18,
                    "isNative": true,
                    "symbol": "ETH"
                  }
                },
                "quoteToken": "eyJ2ZW51ZUlkIjoi...",
                "routeType": "EVM_CROSS_CHAIN",
                "venue": {
                  "id": "mayan",
                  "name": "Mayan"
                }
              }
            },
            "type": "json"
          }
        },
        "schema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "properties": {
            "input": {
              "additionalProperties": false,
              "properties": {
                "body": {
                  "$schema": "https://json-schema.org/draft/2020-12/schema",
                  "additionalProperties": false,
                  "properties": {
                    "clientTimezone": {
                      "description": "Your end user's IANA timezone (e.g. Europe/Berlin), forwarded only to venues whose API requires the user's details on every call (Houdini). Defaults to UTC.",
                      "maxLength": 64,
                      "type": "string"
                    },
                    "confidential": {
                      "description": "Settle privately: the on-chain deposit and payout cannot be linked to each other. The race narrows to the private venues — NEAR Intents' Confidential Intents and Houdini Swap's two-hop exchange route — and the best output wins; you get NO_LIQUIDITY rather than a public fill if neither can quote. Measured cost: NEAR ~0.3 bps more on EVM-to-EVM and ~5-8 bps more when Bitcoin or Solana is a leg; Houdini ~3% below spot on its fixed-rate quote, which is not a guaranteed minimum (so it wins only where NEAR can't quote). Both can settle slower than a public swap (NEAR Bitcoin-source 43 min; Houdini a few minutes to about an hour), so read estimatedTimeSeconds before executing. A Houdini quote is valid for 60 seconds (expiresAt) and no integrator fee applies to it (fee.supported=false). Houdini is sent your request's IP and user-agent (plus clientTimezone) for its compliance screening, and its terms bar US persons and sanctioned jurisdictions: Houdini is left out of the race when this request arrives from such a country, and you are responsible for your end users' eligibility — pass excludeVenues: [\"houdini\"] where that cannot be met. Confidentiality is the venue's, not RAVN's, and remains subject to its screening.",
                      "type": "boolean"
                    },
                    "destinationAddress": {
                      "description": "Where output should land. Required at quote time for a real (executable) quote from Relay (Bitcoin as source or dest), THORChain (Bitcoin either direction), Across (Solana-touching), Eco (cross-ecosystem), or compose (RAVN two-hop routes). Omit it there and you get a preview (QuoteDTO.executable=false). Validated here, not only at execute: a malformed address, an address from the wrong ecosystem for the output chain, or a known non-wallet address (any RAVN-listed token's mint/contract, this swap's own tokens, the native-coin sentinel, burn addresses, Solana core programs — funds sent there are unrecoverable) is rejected with INVALID_REQUEST. A Solana address is also looked up on chain: a token account (the message names the wallet that owns it) or a program is rejected; this lookup fails open, so an RPC outage never blocks a quote. An empty string means not supplied.",
                      "type": "string"
                    },
                    "excludeVenues": {
                      "description": "Drop specific venues from this race — e.g. a risk objection to one of them. Naming a venue that was never eligible for this pair is a no-op, not an error.",
                      "items": {
                        "enum": [
                          "rift",
                          "0x_gasless",
                          "0x_swap",
                          "0x_solana",
                          "bebop",
                          "cow",
                          "across",
                          "relay",
                          "mayan",
                          "jupiter",
                          "near_intents",
                          "garden",
                          "chainflip",
                          "thorchain",
                          "eco",
                          "compose",
                          "nordstern",
                          "flytrade",
                          "kyberswap",
                          "layerswap",
                          "houdini",
                          "okx"
                        ],
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "inputAmount": {
                      "description": "Positive integer string, in the input token's smallest unit",
                      "type": "string"
                    },
                    "inputChainId": {
                      "enum": [
                        1,
                        10,
                        56,
                        130,
                        137,
                        324,
                        480,
                        999,
                        143,
                        8453,
                        42161,
                        59144,
                        43114,
                        4663,
                        4217,
                        -1,
                        -2
                      ],
                      "type": "number"
                    },
                    "inputToken": {
                      "description": "Token contract address, or the native-token sentinel 0xEeee...EEeE",
                      "minLength": 1,
                      "type": "string"
                    },
                    "outputChainId": {
                      "enum": [
                        1,
                        10,
                        56,
                        130,
                        137,
                        324,
                        480,
                        999,
                        143,
                        8453,
                        42161,
                        59144,
                        43114,
                        4663,
                        4217,
                        -1,
                        -2
                      ],
                      "type": "number"
                    },
                    "outputToken": {
                      "minLength": 1,
                      "type": "string"
                    },
                    "quoteSessionId": {
                      "maxLength": 64,
                      "type": "string"
                    },
                    "rankingMode": {
                      "description": "Defaults to best_output.",
                      "enum": [
                        "best_output",
                        "fastest"
                      ],
                      "type": "string"
                    },
                    "refundAddress": {
                      "description": "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 execute has no effect. Other BTC-source venues (Garden, THORChain, Chainflip, Rift) support binding this at execute time instead. Validated against the INPUT chain (refunds are paid back on the origin), including the token's-own-address check described on destinationAddress.",
                      "type": "string"
                    },
                    "sandbox": {
                      "description": "Test the full quote -> execute -> status flow with no real funds and no live venue settlement. The quote itself is still priced live. On /v1/execute, THORChain BTC-source, Chainflip, RAVN two-hop routes and Houdini Swap are unsupported (each would spend real money or open a live order at the venue, which can't be sandboxed) and every other venue returns realistically-shaped execution data with no funds moved. /v1/submit-signature skips the real venue submission. /v1/status always reports an immediate synthetic success. Sandbox swaps are never metered or billed.",
                      "type": "boolean"
                    },
                    "slippageBps": {
                      "maximum": 5000,
                      "minimum": 1,
                      "type": "integer"
                    },
                    "userAddress": {
                      "minLength": 1,
                      "type": "string"
                    }
                  },
                  "required": [
                    "inputChainId",
                    "outputChainId",
                    "inputToken",
                    "outputToken",
                    "inputAmount",
                    "userAddress"
                  ],
                  "type": "object"
                },
                "bodyType": {
                  "enum": [
                    "json",
                    "form-data",
                    "text"
                  ],
                  "type": "string"
                },
                "method": {
                  "enum": [
                    "POST"
                  ],
                  "type": "string"
                },
                "type": {
                  "const": "http",
                  "type": "string"
                }
              },
              "required": [
                "type",
                "method",
                "bodyType",
                "body"
              ],
              "type": "object"
            },
            "output": {
              "properties": {
                "example": {
                  "type": "object"
                },
                "type": {
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "type": "object"
            }
          },
          "required": [
            "input"
          ],
          "type": "object"
        }
      }
    }
  },
  "liveness": {
    "reliability": null
  },
  "verified": false,
  "featured": false,
  "provider": {
    "host": "app.ravn.exchange",
    "manifest_name": "app.ravn.exchange",
    "source": "cdp-mirror",
    "source_manifest_url": "https://api.cdp.coinbase.com/platform/v2/x402/discovery/resources",
    "submitted_at": "2026-10-14T01:15:01.050Z"
  },
  "exampleResponse": {
    "example": {},
    "type": "string"
  }
}