Skip to main content
Glama

Execute a RAVN swap quote

ravn_execute

Turn a quoteToken from ravn_quote into an execution payload. Returns one of three shapes (executionType): TRANSACTION (sign and broadcast yourself), SIGNATURE (sign, RAVN submits), or DEPOSIT (send the input asset to a given address). RAVN never takes custody of funds — you always sign or send from your own wallet. TRANSACTION and SIGNATURE may also include an approval — an ERC-20 approve() you must broadcast and wait to be MINED before the transaction/signature, or it fails (reverts on TRANSACTION; on SIGNATURE the order is accepted and silently never fills). Only present when the sold token needs it — omitted for native-coin sells and already-approved tokens. An approval.reset (Ethereum USDT holding a partial allowance) goes first, mined, then the approval. A result with sandbox: true is a test: send nothing from it.

Input Schema

NameRequiredDescriptionDefault
apiKeyNoYour RAVN API key, if you have one — raises your rate limit
quoteTokenYesThe quoteToken returned by ravn_quote
refundAddressNoLate-bound refund recipient if the swap fails, honoured by venues that read one at execution time (Chainflip, Garden, NEAR Intents, Rift). Every other venue, Mayan, Layerswap and RAVN two-hop routes included, fixes the refund address when it prices: one that differs from the refund the quote was priced with is rejected rather than silently ignored. A quote priced without one refunds where it was priced (normally userAddress) at these venues, so a refundAddress here other than userAddress is rejected too, when userAddress is a valid address on the input chain (selling native Bitcoin with no quoted refund, a venue that can execute uses this one). Supply refundAddress on ravn_quote instead
destinationAddressNoLate-bound output recipient, honoured by venues that bind at execution time (Chainflip, Garden, Layerswap, Mayan, NEAR Intents, Rift, RAVN two-hop routes). Every other venue fixes the recipient when it prices: a DIFFERENT address here is rejected rather than silently ignored. Supply destinationAddress on ravn_quote instead, which every venue honours

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": {
      -          "approval": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "approvalData": {
      -            "additionalProperties": {},
      -            "description": "SIGNATURE only, 0x Gasless: a second EIP-712 payload some venues need signed for the approval itself",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "deposit": {
      -            "additionalProperties": {},
      -            "description": "DEPOSIT only",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "executionType": {
      -            "enum": [
      -              "DEPOSIT",
      -              "TRANSACTION",
      -              "SIGNATURE"
      -            ],
      -            "type": "string"
      -          },
      -          "fee": {
      -            "additionalProperties": {},
      -            "description": "When your key sets a fee on a route with none of its own: { amount, address, chainId, transaction? }, paid by the user to RAVN in the input token; deposit.amount (or the transaction) already leaves it out. On DEPOSIT (Rift, private swaps) and on EVM TRANSACTION (Eco, Layerswap, Mayan routes paying no referrer). EVM: send `transaction` exactly as given — on its own, or, for an ERC-20 fee, in the same wallet batch or relay as the swap (EIP-5792 / 7702 / 4337; one fee-bearing swap per batch). A native-coin deposit or fee is never batched: send each as a plain tx of its own from a regular wallet. Sent on its own, send the fee once the deposit or swap has confirmed: a fee paid on a swap the venue refunds stays with RAVN and nothing is owed on it. Then pass the on-chain hash of the tx that carried it (not a batch id or userOpHash) as txHash on every ravn_status poll — it counts once confirmed. Bitcoin (no `transaction`): pay `amount` sats to `address` as an extra output of the SAME transaction that pays the deposit — pass them to ravn_btc_prepare_send as feeAddress/feeAmountSats. Solana deposit (no `transaction`): add the fee to the SAME transaction that pays the deposit exactly deposit.amount — SOL: a System transfer of `amount` lamports to `address`; a token: createAssociatedTokenAccountIdempotent for `address` and the input mint (under the mint's token program), then transferChecked of `amount` to that associated token account; a fee in a transaction of its own isn't found. A Solana TRANSACTION RAVN builds has no `fee`: it's already inside transaction.serialized — send it from the signing wallet itself. Skip it and the swap still fills, but no fee is owed",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "quoteToken": {
      -            "description": "Pass to ravn_submit_signature and ravn_status. On compose this is the post-bind token from execute, not the original quote token",
      -            "type": "string"
      -          },
      -          "sandbox": {
      -            "const": true,
      -            "description": "A sandbox quote's execution: a test, send nothing from it",
      -            "type": "boolean"
      -          },
      -          "statusRef": {
      -            "description": "Poll ravn_status with this. Always set for DEPOSIT and SIGNATURE, and on a TRANSACTION whenever the venue tracks the swap by its own key (compose, Relay, Layerswap, Garden…); otherwise poll a TRANSACTION with the origin tx hash",
      -            "type": "string"
      -          },
      -          "submit": {
      -            "additionalProperties": {},
      -            "description": "SIGNATURE only: { url, payload? } — POST the signed payload(s) to ravn_status's ref via /api/v1/submit-signature",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "transaction": {
      -            "additionalProperties": {},
      -            "description": "TRANSACTION only. On Solana (chainId -2): `serialized`, a base64 versioned transaction — have the user's wallet sign it exactly as returned and send it within a minute; never modify it, it can carry RAVN's partial signatures",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "typedData": {
      -            "additionalProperties": {},
      -            "description": "SIGNATURE only",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          }
      -        },
      -        "required": [
      -          "executionType",
      -          "quoteToken"
      -        ],
      -        "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": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "approvalData": {
      +            "additionalProperties": {},
      +            "description": "SIGNATURE only, 0x Gasless: a second EIP-712 payload some venues need signed for the approval itself",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "batch": {
      +            "description": "Whether `calls` may go in one atomic wallet batch (EIP-5792); simulate first, and send them one by one if that fails",
      +            "type": "boolean"
      +          },
      +          "calls": {
      +            "description": "EVM: every transaction to send, in order ({ to, data, value, chainId }: approval reset, approval, the swap or the deposit transfer, RAVN's fee). Each once the one before has succeeded (stop if one reverts), or all in one atomic wallet batch when `batch` is true",
      +            "items": {
      +              "additionalProperties": {},
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "deposit": {
      +            "additionalProperties": {},
      +            "description": "DEPOSIT only: { address, amount, chainId?, expiresAt?, psbt?, transaction? }. psbt (Bitcoin, from a bc1q userAddress): the deposit, RAVN's fee output and change, ready to sign and broadcast. transaction (Solana deposit carrying RAVN's fee): deposit and fee in one unsigned transaction, to sign and send within a minute",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "executionType": {
      +            "enum": [
      +              "DEPOSIT",
      +              "TRANSACTION",
      +              "SIGNATURE"
      +            ],
      +            "type": "string"
      +          },
      +          "fee": {
      +            "additionalProperties": {},
      +            "description": "When your key sets a fee on a route with none of its own: { amount, address, chainId, transaction? }, paid by the user to RAVN in the input token; deposit.amount (or the transaction) already leaves it out. On DEPOSIT (Rift, private swaps) and on EVM TRANSACTION (Eco, Layerswap, Mayan routes paying no referrer). EVM: send `transaction` exactly as given — on its own, or, for an ERC-20 fee, in the same wallet batch or relay as the swap (EIP-5792 / 7702 / 4337; one fee-bearing swap per batch). A native-coin deposit or fee is batched only where `batch` says so (beside a NEAR deposit on Ethereum, Base or Polygon); otherwise send each as a plain tx of its own from a regular wallet. Sent on its own, send the fee once the deposit or swap has confirmed: a fee paid on a swap the venue refunds stays with RAVN and nothing is owed on it. Then pass the on-chain hash of the tx that carried it (not a batch id or userOpHash) as txHash on every ravn_status poll — it counts once confirmed. Bitcoin (no `transaction`): pay `amount` sats to `address` as an extra output of the SAME transaction that pays the deposit — pass them to ravn_btc_prepare_send as feeAddress/feeAmountSats. Solana deposit (no `transaction`): add the fee to the SAME transaction that pays the deposit exactly deposit.amount — SOL: a System transfer of `amount` lamports to `address`; a token: createAssociatedTokenAccountIdempotent for `address` and the input mint (under the mint's token program), then transferChecked of `amount` to that associated token account; a fee in a transaction of its own isn't found. A Solana TRANSACTION RAVN builds has no `fee`: it's already inside transaction.serialized — send it from the signing wallet itself. Skip it and the swap still fills, but no fee is owed",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "quoteToken": {
      +            "description": "Pass to ravn_submit_signature and ravn_status. On compose this is the post-bind token from execute, not the original quote token",
      +            "type": "string"
      +          },
      +          "sandbox": {
      +            "const": true,
      +            "description": "A sandbox quote's execution: a test, send nothing from it",
      +            "type": "boolean"
      +          },
      +          "statusRef": {
      +            "description": "Poll ravn_status with this. Always set for DEPOSIT and SIGNATURE, and on a TRANSACTION whenever the venue tracks the swap by its own key (compose, Relay, Layerswap, Garden…); otherwise poll a TRANSACTION with the origin tx hash",
      +            "type": "string"
      +          },
      +          "submit": {
      +            "additionalProperties": {},
      +            "description": "SIGNATURE only: { url, payload? } — POST the signed payload(s) to ravn_status's ref via /api/v1/submit-signature",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "transaction": {
      +            "additionalProperties": {},
      +            "description": "TRANSACTION only. On Solana (chainId -2): `serialized`, a base64 versioned transaction — have the user's wallet sign it exactly as returned and send it within a minute; never modify it, it can carry RAVN's partial signatures",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "typedData": {
      +            "additionalProperties": {},
      +            "description": "SIGNATURE only",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "executionType",
      +          "quoteToken"
      +        ],
      +        "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
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "approval": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "approvalData": {
      -            "additionalProperties": {},
      -            "description": "SIGNATURE only, 0x Gasless: a second EIP-712 payload some venues need signed for the approval itself",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "deposit": {
      -            "additionalProperties": {},
      -            "description": "DEPOSIT only",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "executionType": {
      -            "enum": [
      -              "DEPOSIT",
      -              "TRANSACTION",
      -              "SIGNATURE"
      -            ],
      -            "type": "string"
      -          },
      -          "fee": {
      -            "additionalProperties": {},
      -            "description": "When your key sets a fee on a route with none of its own: { amount, address, chainId, transaction? }, paid by the user to RAVN in the input token; deposit.amount (or the transaction) already leaves it out. On DEPOSIT (Rift, private swaps) and on EVM TRANSACTION (Eco, Layerswap, Mayan routes paying no referrer). EVM: send `transaction` exactly as given — on its own, or, for an ERC-20 fee, in the same wallet batch or relay as the swap (EIP-5792 / 7702 / 4337; one fee-bearing swap per batch). A native-coin deposit or fee is never batched: send each as a plain tx of its own from a regular wallet. Sent on its own, send the fee once the deposit or swap has confirmed: a fee paid on a swap the venue refunds stays with RAVN and nothing is owed on it. Then pass the on-chain hash of the tx that carried it (not a batch id or userOpHash) as txHash on every ravn_status poll — it counts once confirmed. Bitcoin (no `transaction`): pay `amount` sats to `address` as an extra output of the SAME transaction that pays the deposit — pass them to ravn_btc_prepare_send as feeAddress/feeAmountSats. Solana deposit (no `transaction`): add the fee to the SAME transaction that pays the deposit exactly deposit.amount — SOL: a System transfer of `amount` lamports to `address`; a token: createAssociatedTokenAccountIdempotent for `address` and the input mint (under the mint's token program), then transferChecked of `amount` to that associated token account; a fee in a transaction of its own isn't found. A Solana TRANSACTION RAVN builds has no `fee`: it's already inside transaction.serialized — send it from the signing wallet itself. Skip it and the swap still fills, but no fee is owed",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "quoteToken": {
      -            "description": "Pass to ravn_submit_signature and ravn_status. On compose this is the post-bind token from execute, not the original quote token",
      -            "type": "string"
      -          },
      -          "statusRef": {
      -            "description": "Poll ravn_status with this. Always set for DEPOSIT and SIGNATURE, and on a TRANSACTION whenever the venue tracks the swap by its own key (compose, Relay, Layerswap, Garden…); otherwise poll a TRANSACTION with the origin tx hash",
      -            "type": "string"
      -          },
      -          "submit": {
      -            "additionalProperties": {},
      -            "description": "SIGNATURE only: { url, payload? } — POST the signed payload(s) to ravn_status's ref via /api/v1/submit-signature",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "transaction": {
      -            "additionalProperties": {},
      -            "description": "TRANSACTION only. On Solana (chainId -2): `serialized`, a base64 versioned transaction — have the user's wallet sign it exactly as returned and send it within a minute; never modify it, it can carry RAVN's partial signatures",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "typedData": {
      -            "additionalProperties": {},
      -            "description": "SIGNATURE only",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          }
      -        },
      -        "required": [
      -          "executionType",
      -          "quoteToken"
      -        ],
      -        "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": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "approvalData": {
      +            "additionalProperties": {},
      +            "description": "SIGNATURE only, 0x Gasless: a second EIP-712 payload some venues need signed for the approval itself",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "deposit": {
      +            "additionalProperties": {},
      +            "description": "DEPOSIT only",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "executionType": {
      +            "enum": [
      +              "DEPOSIT",
      +              "TRANSACTION",
      +              "SIGNATURE"
      +            ],
      +            "type": "string"
      +          },
      +          "fee": {
      +            "additionalProperties": {},
      +            "description": "When your key sets a fee on a route with none of its own: { amount, address, chainId, transaction? }, paid by the user to RAVN in the input token; deposit.amount (or the transaction) already leaves it out. On DEPOSIT (Rift, private swaps) and on EVM TRANSACTION (Eco, Layerswap, Mayan routes paying no referrer). EVM: send `transaction` exactly as given — on its own, or, for an ERC-20 fee, in the same wallet batch or relay as the swap (EIP-5792 / 7702 / 4337; one fee-bearing swap per batch). A native-coin deposit or fee is never batched: send each as a plain tx of its own from a regular wallet. Sent on its own, send the fee once the deposit or swap has confirmed: a fee paid on a swap the venue refunds stays with RAVN and nothing is owed on it. Then pass the on-chain hash of the tx that carried it (not a batch id or userOpHash) as txHash on every ravn_status poll — it counts once confirmed. Bitcoin (no `transaction`): pay `amount` sats to `address` as an extra output of the SAME transaction that pays the deposit — pass them to ravn_btc_prepare_send as feeAddress/feeAmountSats. Solana deposit (no `transaction`): add the fee to the SAME transaction that pays the deposit exactly deposit.amount — SOL: a System transfer of `amount` lamports to `address`; a token: createAssociatedTokenAccountIdempotent for `address` and the input mint (under the mint's token program), then transferChecked of `amount` to that associated token account; a fee in a transaction of its own isn't found. A Solana TRANSACTION RAVN builds has no `fee`: it's already inside transaction.serialized — send it from the signing wallet itself. Skip it and the swap still fills, but no fee is owed",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "quoteToken": {
      +            "description": "Pass to ravn_submit_signature and ravn_status. On compose this is the post-bind token from execute, not the original quote token",
      +            "type": "string"
      +          },
      +          "sandbox": {
      +            "const": true,
      +            "description": "A sandbox quote's execution: a test, send nothing from it",
      +            "type": "boolean"
      +          },
      +          "statusRef": {
      +            "description": "Poll ravn_status with this. Always set for DEPOSIT and SIGNATURE, and on a TRANSACTION whenever the venue tracks the swap by its own key (compose, Relay, Layerswap, Garden…); otherwise poll a TRANSACTION with the origin tx hash",
      +            "type": "string"
      +          },
      +          "submit": {
      +            "additionalProperties": {},
      +            "description": "SIGNATURE only: { url, payload? } — POST the signed payload(s) to ravn_status's ref via /api/v1/submit-signature",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "transaction": {
      +            "additionalProperties": {},
      +            "description": "TRANSACTION only. On Solana (chainId -2): `serialized`, a base64 versioned transaction — have the user's wallet sign it exactly as returned and send it within a minute; never modify it, it can carry RAVN's partial signatures",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "typedData": {
      +            "additionalProperties": {},
      +            "description": "SIGNATURE only",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "executionType",
      +          "quoteToken"
      +        ],
      +        "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"
      +  }
      +]
  3. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "approval": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "approvalData": {
      -            "additionalProperties": {},
      -            "description": "SIGNATURE only, 0x Gasless: a second EIP-712 payload some venues need signed for the approval itself",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "deposit": {
      -            "additionalProperties": {},
      -            "description": "DEPOSIT only",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "executionType": {
      -            "enum": [
      -              "DEPOSIT",
      -              "TRANSACTION",
      -              "SIGNATURE"
      -            ],
      -            "type": "string"
      -          },
      -          "fee": {
      -            "additionalProperties": {},
      -            "description": "DEPOSIT only, when your key sets a fee on a venue with none of its own: { amount, address, chainId, transaction? }, paid by the user to RAVN. Bitcoin (no `transaction`): pay `amount` sats to `address` as an extra output of the SAME transaction that pays the deposit — pass them to ravn_btc_prepare_send as feeAddress/feeAmountSats. EVM: send `transaction` exactly as given, as its own tx from the user's regular wallet (bundled into a smart-wallet batch it can't be proven), then pass its hash as txHash on EVERY ravn_status poll — it only counts once confirmed. Skip it and the swap still fills, but no fee is owed",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "quoteToken": {
      -            "description": "Pass to ravn_submit_signature and ravn_status. On compose this is the post-bind token from execute, not the original quote token",
      -            "type": "string"
      -          },
      -          "statusRef": {
      -            "description": "Poll ravn_status with this. Always set for DEPOSIT and compose; TRANSACTION otherwise uses the origin tx hash",
      -            "type": "string"
      -          },
      -          "submit": {
      -            "additionalProperties": {},
      -            "description": "SIGNATURE only: { url, payload? } — POST the signed payload(s) to ravn_status's ref via /api/v1/submit-signature",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "transaction": {
      -            "additionalProperties": {},
      -            "description": "TRANSACTION only. On Solana (chainId -2): `serialized`, a base64 versioned transaction — have the user's wallet sign it exactly as returned and send it within a minute; never modify it, it can carry RAVN's partial signatures",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "typedData": {
      -            "additionalProperties": {},
      -            "description": "SIGNATURE only",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          }
      -        },
      -        "required": [
      -          "executionType",
      -          "quoteToken"
      -        ],
      -        "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": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "approvalData": {
      +            "additionalProperties": {},
      +            "description": "SIGNATURE only, 0x Gasless: a second EIP-712 payload some venues need signed for the approval itself",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "deposit": {
      +            "additionalProperties": {},
      +            "description": "DEPOSIT only",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "executionType": {
      +            "enum": [
      +              "DEPOSIT",
      +              "TRANSACTION",
      +              "SIGNATURE"
      +            ],
      +            "type": "string"
      +          },
      +          "fee": {
      +            "additionalProperties": {},
      +            "description": "When your key sets a fee on a route with none of its own: { amount, address, chainId, transaction? }, paid by the user to RAVN in the input token; deposit.amount (or the transaction) already leaves it out. On DEPOSIT (Rift, private swaps) and on EVM TRANSACTION (Eco, Layerswap, Mayan routes paying no referrer). EVM: send `transaction` exactly as given — on its own, or, for an ERC-20 fee, in the same wallet batch or relay as the swap (EIP-5792 / 7702 / 4337; one fee-bearing swap per batch). A native-coin deposit or fee is never batched: send each as a plain tx of its own from a regular wallet. Sent on its own, send the fee once the deposit or swap has confirmed: a fee paid on a swap the venue refunds stays with RAVN and nothing is owed on it. Then pass the on-chain hash of the tx that carried it (not a batch id or userOpHash) as txHash on every ravn_status poll — it counts once confirmed. Bitcoin (no `transaction`): pay `amount` sats to `address` as an extra output of the SAME transaction that pays the deposit — pass them to ravn_btc_prepare_send as feeAddress/feeAmountSats. Solana deposit (no `transaction`): add the fee to the SAME transaction that pays the deposit exactly deposit.amount — SOL: a System transfer of `amount` lamports to `address`; a token: createAssociatedTokenAccountIdempotent for `address` and the input mint (under the mint's token program), then transferChecked of `amount` to that associated token account; a fee in a transaction of its own isn't found. A Solana TRANSACTION RAVN builds has no `fee`: it's already inside transaction.serialized — send it from the signing wallet itself. Skip it and the swap still fills, but no fee is owed",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "quoteToken": {
      +            "description": "Pass to ravn_submit_signature and ravn_status. On compose this is the post-bind token from execute, not the original quote token",
      +            "type": "string"
      +          },
      +          "statusRef": {
      +            "description": "Poll ravn_status with this. Always set for DEPOSIT and SIGNATURE, and on a TRANSACTION whenever the venue tracks the swap by its own key (compose, Relay, Layerswap, Garden…); otherwise poll a TRANSACTION with the origin tx hash",
      +            "type": "string"
      +          },
      +          "submit": {
      +            "additionalProperties": {},
      +            "description": "SIGNATURE only: { url, payload? } — POST the signed payload(s) to ravn_status's ref via /api/v1/submit-signature",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "transaction": {
      +            "additionalProperties": {},
      +            "description": "TRANSACTION only. On Solana (chainId -2): `serialized`, a base64 versioned transaction — have the user's wallet sign it exactly as returned and send it within a minute; never modify it, it can carry RAVN's partial signatures",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "typedData": {
      +            "additionalProperties": {},
      +            "description": "SIGNATURE only",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "executionType",
      +          "quoteToken"
      +        ],
      +        "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": {
      -          "approval": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "approvalData": {
      -            "additionalProperties": {},
      -            "description": "SIGNATURE only, 0x Gasless: a second EIP-712 payload some venues need signed for the approval itself",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "deposit": {
      -            "additionalProperties": {},
      -            "description": "DEPOSIT only",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "executionType": {
      -            "enum": [
      -              "DEPOSIT",
      -              "TRANSACTION",
      -              "SIGNATURE"
      -            ],
      -            "type": "string"
      -          },
      -          "quoteToken": {
      -            "description": "Pass to ravn_submit_signature and ravn_status. On compose this is the post-bind token from execute, not the original quote token",
      -            "type": "string"
      -          },
      -          "statusRef": {
      -            "description": "Poll ravn_status with this. Always set for DEPOSIT and compose; TRANSACTION otherwise uses the origin tx hash",
      -            "type": "string"
      -          },
      -          "submit": {
      -            "additionalProperties": {},
      -            "description": "SIGNATURE only: { url, payload? } — POST the signed payload(s) to ravn_status's ref via /api/v1/submit-signature",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "transaction": {
      -            "additionalProperties": {},
      -            "description": "TRANSACTION only. On Solana (chainId -2): `serialized`, a base64 versioned transaction — have the user's wallet sign it exactly as returned and send it within a minute; never modify it, it can carry RAVN's partial signatures",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "typedData": {
      -            "additionalProperties": {},
      -            "description": "SIGNATURE only",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          }
      -        },
      -        "required": [
      -          "executionType",
      -          "quoteToken"
      -        ],
      -        "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": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "approvalData": {
      +            "additionalProperties": {},
      +            "description": "SIGNATURE only, 0x Gasless: a second EIP-712 payload some venues need signed for the approval itself",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "deposit": {
      +            "additionalProperties": {},
      +            "description": "DEPOSIT only",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "executionType": {
      +            "enum": [
      +              "DEPOSIT",
      +              "TRANSACTION",
      +              "SIGNATURE"
      +            ],
      +            "type": "string"
      +          },
      +          "fee": {
      +            "additionalProperties": {},
      +            "description": "DEPOSIT only, when your key sets a fee on a venue with none of its own: { amount, address, chainId, transaction? }, paid by the user to RAVN. Bitcoin (no `transaction`): pay `amount` sats to `address` as an extra output of the SAME transaction that pays the deposit — pass them to ravn_btc_prepare_send as feeAddress/feeAmountSats. EVM: send `transaction` exactly as given, as its own tx from the user's regular wallet (bundled into a smart-wallet batch it can't be proven), then pass its hash as txHash on EVERY ravn_status poll — it only counts once confirmed. Skip it and the swap still fills, but no fee is owed",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "quoteToken": {
      +            "description": "Pass to ravn_submit_signature and ravn_status. On compose this is the post-bind token from execute, not the original quote token",
      +            "type": "string"
      +          },
      +          "statusRef": {
      +            "description": "Poll ravn_status with this. Always set for DEPOSIT and compose; TRANSACTION otherwise uses the origin tx hash",
      +            "type": "string"
      +          },
      +          "submit": {
      +            "additionalProperties": {},
      +            "description": "SIGNATURE only: { url, payload? } — POST the signed payload(s) to ravn_status's ref via /api/v1/submit-signature",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "transaction": {
      +            "additionalProperties": {},
      +            "description": "TRANSACTION only. On Solana (chainId -2): `serialized`, a base64 versioned transaction — have the user's wallet sign it exactly as returned and send it within a minute; never modify it, it can carry RAVN's partial signatures",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "typedData": {
      +            "additionalProperties": {},
      +            "description": "SIGNATURE only",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "executionType",
      +          "quoteToken"
      +        ],
      +        "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
    • changedInput schema / properties / refundAddress / description
      Previous value: -"Late-bound refund recipient if the swap fails, honoured by the same venues as destinationAddress. Every other venue fixes the refund address when it prices, and a DIFFERENT one here is rejected rather than silently ignored; supply refundAddress on ravn_quote instead"New value: +"Late-bound refund recipient if the swap fails, honoured by venues that read one at execution time (Chainflip, Garden, NEAR Intents, Rift). Every other venue, Mayan, Layerswap and RAVN two-hop routes included, fixes the refund address when it prices: one that differs from the refund the quote was priced with is rejected rather than silently ignored. A quote priced without one refunds where it was priced (normally userAddress) at these venues, so a refundAddress here other than userAddress is rejected too, when userAddress is a valid address on the input chain (selling native Bitcoin with no quoted refund, a venue that can execute uses this one). Supply refundAddress on ravn_quote instead"
  6. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "approval": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "approvalData": {
      -            "additionalProperties": {},
      -            "description": "SIGNATURE only, 0x Gasless: a second EIP-712 payload some venues need signed for the approval itself",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "deposit": {
      -            "additionalProperties": {},
      -            "description": "DEPOSIT only",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "executionType": {
      -            "enum": [
      -              "DEPOSIT",
      -              "TRANSACTION",
      -              "SIGNATURE"
      -            ],
      -            "type": "string"
      -          },
      -          "quoteToken": {
      -            "description": "Pass to ravn_submit_signature and ravn_status. On compose this is the post-bind token from execute, not the original quote token",
      -            "type": "string"
      -          },
      -          "statusRef": {
      -            "description": "Poll ravn_status with this. Always set for DEPOSIT and compose; TRANSACTION otherwise uses the origin tx hash",
      -            "type": "string"
      -          },
      -          "submit": {
      -            "additionalProperties": {},
      -            "description": "SIGNATURE only: { url, payload? } — POST the signed payload(s) to ravn_status's ref via /api/v1/submit-signature",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "transaction": {
      -            "additionalProperties": {},
      -            "description": "TRANSACTION only",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "typedData": {
      -            "additionalProperties": {},
      -            "description": "SIGNATURE only",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          }
      -        },
      -        "required": [
      -          "executionType",
      -          "quoteToken"
      -        ],
      -        "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": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "approvalData": {
      +            "additionalProperties": {},
      +            "description": "SIGNATURE only, 0x Gasless: a second EIP-712 payload some venues need signed for the approval itself",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "deposit": {
      +            "additionalProperties": {},
      +            "description": "DEPOSIT only",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "executionType": {
      +            "enum": [
      +              "DEPOSIT",
      +              "TRANSACTION",
      +              "SIGNATURE"
      +            ],
      +            "type": "string"
      +          },
      +          "quoteToken": {
      +            "description": "Pass to ravn_submit_signature and ravn_status. On compose this is the post-bind token from execute, not the original quote token",
      +            "type": "string"
      +          },
      +          "statusRef": {
      +            "description": "Poll ravn_status with this. Always set for DEPOSIT and compose; TRANSACTION otherwise uses the origin tx hash",
      +            "type": "string"
      +          },
      +          "submit": {
      +            "additionalProperties": {},
      +            "description": "SIGNATURE only: { url, payload? } — POST the signed payload(s) to ravn_status's ref via /api/v1/submit-signature",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "transaction": {
      +            "additionalProperties": {},
      +            "description": "TRANSACTION only. On Solana (chainId -2): `serialized`, a base64 versioned transaction — have the user's wallet sign it exactly as returned and send it within a minute; never modify it, it can carry RAVN's partial signatures",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "typedData": {
      +            "additionalProperties": {},
      +            "description": "SIGNATURE only",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "executionType",
      +          "quoteToken"
      +        ],
      +        "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"
      +  }
      +]
  7. Changed1 schema field changed
    • changedInput schema / properties / destinationAddress / description
      Previous value: -"Late-bound output recipient, honoured by venues that bind at execution time (Chainflip, Garden, Layerswap, Mayan, NEAR Intents, Rift, 2-hop). Every other venue fixes the recipient when it prices: a DIFFERENT address here is rejected rather than silently ignored. Supply destinationAddress on ravn_quote instead, which every venue honours"New value: +"Late-bound output recipient, honoured by venues that bind at execution time (Chainflip, Garden, Layerswap, Mayan, NEAR Intents, Rift, RAVN two-hop routes). Every other venue fixes the recipient when it prices: a DIFFERENT address here is rejected rather than silently ignored. Supply destinationAddress on ravn_quote instead, which every venue honours"
  8. Changed2 schema fields changed
    • changedInput schema / properties / destinationAddress / description
      Previous value: -"Late-bound output recipient, for venues that support binding it at execution time (e.g. NEAR Intents, Garden, Chainflip, Rift). Does NOT apply to Relay, Across, Eco, or THORChain — those fix the recipient at quote time with no execute-time re-bind, so this is silently ignored for them; supply destinationAddress on ravn_quote instead"New value: +"Late-bound output recipient, honoured by venues that bind at execution time (Chainflip, Garden, Layerswap, Mayan, NEAR Intents, Rift, 2-hop). Every other venue fixes the recipient when it prices: a DIFFERENT address here is rejected rather than silently ignored. Supply destinationAddress on ravn_quote instead, which every venue honours"
    • changedInput schema / properties / refundAddress / description
      Previous value: -"Late-bound refund recipient if the swap fails, for venues that support binding it at execution time. Does NOT apply to a Bitcoin-source Relay or THORChain quote — both fix the refund address at quote time, so this is silently ignored for Relay and rejected outright for THORChain (a mismatch throws rather than executing against a stale address); supply refundAddress on ravn_quote instead"New value: +"Late-bound refund recipient if the swap fails, honoured by the same venues as destinationAddress. Every other venue fixes the refund address when it prices, and a DIFFERENT one here is rejected rather than silently ignored; supply refundAddress on ravn_quote instead"
  9. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "approval": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "approvalData": {
      -            "additionalProperties": {},
      -            "description": "SIGNATURE only, 0x Gasless: a second EIP-712 payload some venues need signed for the approval itself",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "deposit": {
      -            "additionalProperties": {},
      -            "description": "DEPOSIT only",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "executionType": {
      -            "enum": [
      -              "DEPOSIT",
      -              "TRANSACTION",
      -              "SIGNATURE"
      -            ],
      -            "type": "string"
      -          },
      -          "statusRef": {
      -            "description": "DEPOSIT only (the deposit address) — SIGNATURE gets its statusRef from submitting to /api/v1/submit-signature instead",
      -            "type": "string"
      -          },
      -          "submit": {
      -            "additionalProperties": {},
      -            "description": "SIGNATURE only: { url, payload? } — POST the signed payload(s) to ravn_status's ref via /api/v1/submit-signature",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "transaction": {
      -            "additionalProperties": {},
      -            "description": "TRANSACTION only",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "typedData": {
      -            "additionalProperties": {},
      -            "description": "SIGNATURE only",
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          }
      -        },
      -        "required": [
      -          "executionType"
      -        ],
      -        "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": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "approvalData": {
      +            "additionalProperties": {},
      +            "description": "SIGNATURE only, 0x Gasless: a second EIP-712 payload some venues need signed for the approval itself",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "deposit": {
      +            "additionalProperties": {},
      +            "description": "DEPOSIT only",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "executionType": {
      +            "enum": [
      +              "DEPOSIT",
      +              "TRANSACTION",
      +              "SIGNATURE"
      +            ],
      +            "type": "string"
      +          },
      +          "quoteToken": {
      +            "description": "Pass to ravn_submit_signature and ravn_status. On compose this is the post-bind token from execute, not the original quote token",
      +            "type": "string"
      +          },
      +          "statusRef": {
      +            "description": "Poll ravn_status with this. Always set for DEPOSIT and compose; TRANSACTION otherwise uses the origin tx hash",
      +            "type": "string"
      +          },
      +          "submit": {
      +            "additionalProperties": {},
      +            "description": "SIGNATURE only: { url, payload? } — POST the signed payload(s) to ravn_status's ref via /api/v1/submit-signature",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "transaction": {
      +            "additionalProperties": {},
      +            "description": "TRANSACTION only",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "typedData": {
      +            "additionalProperties": {},
      +            "description": "SIGNATURE only",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "executionType",
      +          "quoteToken"
      +        ],
      +        "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"
      +  }
      +]
  10. Changed1 schema field changed
    • changedInput schema / properties / refundAddress / description
      Previous value: -"Late-bound refund recipient if the swap fails, for venues that support binding it at execution time. Does NOT apply to a Bitcoin-source Relay quote — Relay bakes the refund address in at quote time, so this is silently ignored for those; supply refundAddress on ravn_quote instead"New value: +"Late-bound refund recipient if the swap fails, for venues that support binding it at execution time. Does NOT apply to a Bitcoin-source Relay or THORChain quote — both fix the refund address at quote time, so this is silently ignored for Relay and rejected outright for THORChain (a mismatch throws rather than executing against a stale address); supply refundAddress on ravn_quote instead"
  11. Changed1 schema field changed
    • changedInput schema / properties / destinationAddress / description
      Previous value: -"Late-bound output recipient, for venues that need it at execution time rather than quote time"New value: +"Late-bound output recipient, for venues that support binding it at execution time (e.g. NEAR Intents, Garden, Chainflip, Rift). Does NOT apply to Relay, Across, Eco, or THORChain — those fix the recipient at quote time with no execute-time re-bind, so this is silently ignored for them; supply destinationAddress on ravn_quote instead"
  12. Changed1 schema field changed
    • changedInput schema / properties / refundAddress / description
      Previous value: -"Late-bound refund recipient if the swap fails"New value: +"Late-bound refund recipient if the swap fails, for venues that support binding it at execution time. Does NOT apply to a Bitcoin-source Relay quote — Relay bakes the refund address in at quote time, so this is silently ignored for those; supply refundAddress on ravn_quote instead"
  13. Changed4 schema fields changed
    • addedInput schema / properties / apiKey / description
      Added value: +"Your RAVN API key, if you have one — raises your rate limit"
    • addedInput schema / properties / destinationAddress / description
      Added value: +"Late-bound output recipient, for venues that need it at execution time rather than quote time"
    • addedInput schema / properties / refundAddress / description
      Added value: +"Late-bound refund recipient if the swap fails"
    • 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": {},
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "approvalData": {
      +              "additionalProperties": {},
      +              "description": "SIGNATURE only, 0x Gasless: a second EIP-712 payload some venues need signed for the approval itself",
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "deposit": {
      +              "additionalProperties": {},
      +              "description": "DEPOSIT only",
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "executionType": {
      +              "enum": [
      +                "DEPOSIT",
      +                "TRANSACTION",
      +                "SIGNATURE"
      +              ],
      +              "type": "string"
      +            },
      +            "statusRef": {
      +              "description": "DEPOSIT only (the deposit address) — SIGNATURE gets its statusRef from submitting to /api/v1/submit-signature instead",
      +              "type": "string"
      +            },
      +            "submit": {
      +              "additionalProperties": {},
      +              "description": "SIGNATURE only: { url, payload? } — POST the signed payload(s) to ravn_status's ref via /api/v1/submit-signature",
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "transaction": {
      +              "additionalProperties": {},
      +              "description": "TRANSACTION only",
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "typedData": {
      +              "additionalProperties": {},
      +              "description": "SIGNATURE only",
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            }
      +          },
      +          "required": [
      +            "executionType"
      +          ],
      +          "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"
      +}
  14. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses the three return shapes, that approval must be broadcast and MINED first or the TRANSACTION reverts / the SIGNATURE silently never fills, that approval.reset must precede the approval, and that RAVN never takes custody. These are exactly the failure modes an agent cannot infer from readOnlyHint=false / destructiveHint=false.

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

Conciseness4/5

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

Front-loads the purpose and the three execution shapes before the approval caveats, and every sentence carries operational information. It is dense and somewhat long, but nothing is wasted or redundant.

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

Completeness5/5

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

Despite an output schema existing, the conditional shape semantics (TRANSACTION/SIGNATURE/DEPOSIT, approval, sandbox) are behavioral context an agent needs to act correctly, and the description supplies all of it. Nothing required to call the tool safely is missing.

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% and the schema text for refundAddress/destinationAddress is already extremely detailed (late-bound vs price-bound venues, rejection rules). The description adds no parameter-level syntax or format beyond that, so the baseline 3 applies.

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 ('Turn a quoteToken from ravn_quote into an execution payload') and enumerates the three executionType outcomes. An agent can distinguish this from ravn_quote (pricing) and ravn_submit_signature without opening any schema.

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?

The first sentence establishes the pipeline from ravn_quote and the description explains when an approval is or isn't present, plus what sandbox:true means. It never explicitly names ravn_submit_signature as the alternative for the SIGNATURE shape, so the routing is implied rather than stated.

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.