# API

## GET /v1/health - Health check endpoint.

> Returns the current health status of the service.

```json
{"openapi":"3.1.0","info":{"title":"fynd-rpc","version":"0.7.0"},"paths":{"/v1/health":{"get":{"tags":["health"],"summary":"GET /v1/health - Health check endpoint.","description":"Returns the current health status of the service.","operationId":"health","responses":{"200":{"description":"Service healthy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthStatus"}}}},"503":{"description":"Data stale","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthStatus"}}}}}}}},"components":{"schemas":{"HealthStatus":{"type":"object","description":"Health check response.","required":["healthy","last_update_ms","num_solver_pools"],"properties":{"derived_data_ready":{"type":"boolean","description":"Whether derived data has been computed at least once.\n\nThis indicates overall readiness, not per-block freshness. Some algorithms\nrequire fresh derived data for each block — they are ready to receive orders\nbut will wait for recomputation before solving."},"healthy":{"type":"boolean","description":"Whether the service is healthy."},"last_update_ms":{"type":"integer","format":"int64","description":"Time since last market update in milliseconds.","minimum":0},"num_solver_pools":{"type":"integer","description":"Number of active solver pools.","minimum":0}}}}}}
```

## POST /v1/quote - Request a quote.

> Accepts a \`QuoteRequest\` and returns a \`Quote\` with the best routes found, or an error\
> if the request could not be filled.\
> \
> \# Errors\
> \
> \- 400 Bad Request: Invalid request format\
> \- 422 Unprocessable Entity: No routes found\
> \- 503 Service Unavailable: Queue full or service overloaded\
> \- 504 Gateway Timeout: Quote timeout

```json
{"openapi":"3.1.0","info":{"title":"fynd-rpc","version":"0.7.0"},"paths":{"/v1/quote":{"post":{"tags":["solver"],"summary":"POST /v1/quote - Request a quote.","description":"Accepts a `QuoteRequest` and returns a `Quote` with the best routes found, or an error\nif the request could not be filled.\n\n# Errors\n\n- 400 Bad Request: Invalid request format\n- 422 Unprocessable Entity: No routes found\n- 503 Service Unavailable: Queue full or service overloaded\n- 504 Gateway Timeout: Quote timeout","operationId":"quote","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"}}},"required":true},"responses":{"200":{"description":"Quote completed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Quote"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"No route found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"Quote timeout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}},"components":{"schemas":{"QuoteRequest":{"type":"object","description":"Request to solve one or more swap orders.","required":["orders"],"properties":{"options":{"$ref":"#/components/schemas/QuoteOptions","description":"Optional solving parameters that apply to all orders."},"orders":{"type":"array","items":{"$ref":"#/components/schemas/Order"},"description":"Orders to solve."}}},"QuoteOptions":{"type":"object","description":"Options to customize the solving behavior.","properties":{"encoding_options":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EncodingOptions"}]},"max_gas":{"type":["string","null"],"description":"Maximum gas cost allowed for a solution. Quotes exceeding this are filtered out."},"min_responses":{"type":["integer","null"],"description":"Minimum number of solver responses to wait for before returning.\nIf `None` or `0`, waits for all solvers to respond (or timeout).\n\nUse the `/health` endpoint to check `num_solver_pools` before setting this value.\nValues exceeding the number of active solver pools are clamped internally.","minimum":0},"timeout_ms":{"type":["integer","null"],"format":"int64","description":"Timeout in milliseconds. If `None`, uses server default.","minimum":0}}},"EncodingOptions":{"type":"object","description":"Options to customize the encoding behavior.","required":["slippage"],"properties":{"permit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PermitSingle","description":"Permit2 single-token authorization. Required when using `transfer_from_permit2`."}]},"permit2_signature":{"type":["string","null"],"description":"Permit2 signature (65 bytes, hex-encoded). Required when `permit` is set."},"slippage":{"type":"number","format":"double"},"transfer_type":{"$ref":"#/components/schemas/UserTransferType","description":"Token transfer method. Defaults to `transfer_from`."}}},"PermitSingle":{"type":"object","description":"A single permit for permit2 token transfer authorization.","required":["details","spender","sig_deadline"],"properties":{"details":{"$ref":"#/components/schemas/PermitDetails","description":"The permit details (token, amount, expiration, nonce)."},"sig_deadline":{"type":"string","description":"Deadline timestamp for the permit signature."},"spender":{"type":"string","description":"Address authorized to spend the tokens (typically the router)."}}},"PermitDetails":{"type":"object","description":"Details for a permit2 single-token permit.","required":["token","amount","expiration","nonce"],"properties":{"amount":{"type":"string","description":"Amount of tokens approved."},"expiration":{"type":"string","description":"Expiration timestamp for the permit."},"nonce":{"type":"string","description":"Nonce to prevent replay attacks."},"token":{"type":"string","description":"Token address for which the permit is granted."}}},"UserTransferType":{"type":"string","description":"Token transfer method for moving funds into Tycho execution.","enum":["transfer_from_permit2","transfer_from","none"]},"Order":{"type":"object","description":"A single swap order to be solved.\n\nAn order specifies an intent to swap one token for another.","required":["token_in","token_out","amount","side","sender"],"properties":{"amount":{"type":"string","description":"Amount to swap, interpreted according to `side` (in token units, as decimal string)."},"receiver":{"type":["string","null"],"description":"Address that will receive the output tokens.\n\nDefaults to `sender` if not specified."},"sender":{"type":"string","description":"Address that will send the input tokens."},"side":{"$ref":"#/components/schemas/OrderSide","description":"Whether this is a sell (exact input) or buy (exact output) order."},"token_in":{"type":"string","description":"Input token address (the token being sold)."},"token_out":{"type":"string","description":"Output token address (the token being bought)."}}},"OrderSide":{"type":"string","description":"Specifies the side of an order: sell (exact input) or buy (exact output).\n\nCurrently only `Sell` is supported. `Buy` will be added in a future version.","enum":["sell"]},"Quote":{"type":"object","description":"Complete solution for a [`QuoteRequest`].\n\nContains a solution for each order in the request, along with aggregate\ngas estimates and timing information.","required":["orders","total_gas_estimate","solve_time_ms"],"properties":{"orders":{"type":"array","items":{"$ref":"#/components/schemas/OrderQuote"},"description":"Quotes for each order, in the same order as the request."},"solve_time_ms":{"type":"integer","format":"int64","description":"Time taken to compute this solution, in milliseconds.","minimum":0},"total_gas_estimate":{"type":"string","description":"Total estimated gas for executing all swaps (as decimal string)."}}},"OrderQuote":{"type":"object","description":"Quote for a single [`Order`].\n\nContains the route to execute (if found), along with expected amounts,\ngas estimates, and status information.","required":["order_id","status","amount_in","amount_out","gas_estimate","amount_out_net_gas","block"],"properties":{"amount_in":{"type":"string","description":"Amount of input token (in token units, as decimal string)."},"amount_out":{"type":"string","description":"Amount of output token (in token units, as decimal string)."},"amount_out_net_gas":{"type":"string","description":"Amount out minus gas cost in output token terms.\nUsed by OrderManager to compare solutions from different solvers."},"block":{"$ref":"#/components/schemas/BlockInfo","description":"Block at which this quote was computed."},"gas_estimate":{"type":"string","description":"Estimated gas cost for executing this route (as decimal string)."},"gas_price":{"type":["string","null"],"description":"Effective gas price (in wei) at the time the route was computed."},"order_id":{"type":"string","description":"ID of the order this solution corresponds to."},"price_impact_bps":{"type":["integer","null"],"format":"int32","description":"Price impact in basis points (1 bip = 0.01%)."},"route":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Route","description":"The route to execute, if a valid route was found."}]},"status":{"$ref":"#/components/schemas/QuoteStatus","description":"Status indicating whether a route was found."},"transaction":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Transaction","description":"An encoded EVM transaction ready to be submitted on-chain."}]}}},"BlockInfo":{"type":"object","description":"Block information at which a quote was computed.\n\nQuotes are only valid for the block at which they were computed. Market\nconditions may change in subsequent blocks.","required":["number","hash","timestamp"],"properties":{"hash":{"type":"string","description":"Block hash as a hex string."},"number":{"type":"integer","format":"int64","description":"Block number.","minimum":0},"timestamp":{"type":"integer","format":"int64","description":"Block timestamp in Unix seconds.","minimum":0}}},"Route":{"type":"object","description":"A route consisting of one or more sequential swaps.\n\nA route describes the path through liquidity pools to execute a swap.\nFor multi-hop swaps, the output of each swap becomes the input of the next.","required":["swaps"],"properties":{"swaps":{"type":"array","items":{"$ref":"#/components/schemas/Swap"},"description":"Ordered sequence of swaps to execute."}}},"Swap":{"type":"object","description":"A single swap within a route.\n\nRepresents an atomic swap on a specific liquidity pool (component).","required":["component_id","protocol","token_in","token_out","amount_in","amount_out","gas_estimate","split"],"properties":{"amount_in":{"type":"string","description":"Amount of input token (in token units, as decimal string)."},"amount_out":{"type":"string","description":"Amount of output token (in token units, as decimal string)."},"component_id":{"type":"string","description":"Identifier of the liquidity pool component."},"gas_estimate":{"type":"string","description":"Estimated gas cost for this swap (as decimal string)."},"protocol":{"type":"string","description":"Protocol system identifier (e.g., \"uniswap_v2\", \"uniswap_v3\", \"vm:balancer\")."},"split":{"type":"number","format":"double","description":"Decimal of the amount to be swapped in this operation (for example, 0.5 means 50%)"},"token_in":{"type":"string","description":"Input token address."},"token_out":{"type":"string","description":"Output token address."}}},"QuoteStatus":{"type":"string","description":"Status of an order quote.","enum":["success","no_route_found","insufficient_liquidity","timeout","not_ready"]},"Transaction":{"type":"object","description":"An encoded EVM transaction ready to be submitted on-chain.","required":["to","value","data"],"properties":{"data":{"type":"string","description":"ABI-encoded calldata as hex string."},"to":{"type":"string","description":"Contract address to call."},"value":{"type":"string","description":"Native token value to send with the transaction (as decimal string)."}}},"ErrorResponse":{"type":"object","description":"Error response body.","required":["error","code"],"properties":{"code":{"type":"string"},"details":{},"error":{"type":"string"}}}}}}
```

## The BlockInfo object

```json
{"openapi":"3.1.0","info":{"title":"fynd-rpc","version":"0.7.0"},"components":{"schemas":{"BlockInfo":{"type":"object","description":"Block information at which a quote was computed.\n\nQuotes are only valid for the block at which they were computed. Market\nconditions may change in subsequent blocks.","required":["number","hash","timestamp"],"properties":{"hash":{"type":"string","description":"Block hash as a hex string."},"number":{"type":"integer","format":"int64","description":"Block number.","minimum":0},"timestamp":{"type":"integer","format":"int64","description":"Block timestamp in Unix seconds.","minimum":0}}}}}}
```

## The EncodingOptions object

```json
{"openapi":"3.1.0","info":{"title":"fynd-rpc","version":"0.7.0"},"components":{"schemas":{"EncodingOptions":{"type":"object","description":"Options to customize the encoding behavior.","required":["slippage"],"properties":{"permit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PermitSingle","description":"Permit2 single-token authorization. Required when using `transfer_from_permit2`."}]},"permit2_signature":{"type":["string","null"],"description":"Permit2 signature (65 bytes, hex-encoded). Required when `permit` is set."},"slippage":{"type":"number","format":"double"},"transfer_type":{"$ref":"#/components/schemas/UserTransferType","description":"Token transfer method. Defaults to `transfer_from`."}}},"PermitSingle":{"type":"object","description":"A single permit for permit2 token transfer authorization.","required":["details","spender","sig_deadline"],"properties":{"details":{"$ref":"#/components/schemas/PermitDetails","description":"The permit details (token, amount, expiration, nonce)."},"sig_deadline":{"type":"string","description":"Deadline timestamp for the permit signature."},"spender":{"type":"string","description":"Address authorized to spend the tokens (typically the router)."}}},"PermitDetails":{"type":"object","description":"Details for a permit2 single-token permit.","required":["token","amount","expiration","nonce"],"properties":{"amount":{"type":"string","description":"Amount of tokens approved."},"expiration":{"type":"string","description":"Expiration timestamp for the permit."},"nonce":{"type":"string","description":"Nonce to prevent replay attacks."},"token":{"type":"string","description":"Token address for which the permit is granted."}}},"UserTransferType":{"type":"string","description":"Token transfer method for moving funds into Tycho execution.","enum":["transfer_from_permit2","transfer_from","none"]}}}}
```

## The ErrorResponse object

```json
{"openapi":"3.1.0","info":{"title":"fynd-rpc","version":"0.7.0"},"components":{"schemas":{"ErrorResponse":{"type":"object","description":"Error response body.","required":["error","code"],"properties":{"code":{"type":"string"},"details":{},"error":{"type":"string"}}}}}}
```

## The HealthStatus object

```json
{"openapi":"3.1.0","info":{"title":"fynd-rpc","version":"0.7.0"},"components":{"schemas":{"HealthStatus":{"type":"object","description":"Health check response.","required":["healthy","last_update_ms","num_solver_pools"],"properties":{"derived_data_ready":{"type":"boolean","description":"Whether derived data has been computed at least once.\n\nThis indicates overall readiness, not per-block freshness. Some algorithms\nrequire fresh derived data for each block — they are ready to receive orders\nbut will wait for recomputation before solving."},"healthy":{"type":"boolean","description":"Whether the service is healthy."},"last_update_ms":{"type":"integer","format":"int64","description":"Time since last market update in milliseconds.","minimum":0},"num_solver_pools":{"type":"integer","description":"Number of active solver pools.","minimum":0}}}}}}
```

## The Order object

```json
{"openapi":"3.1.0","info":{"title":"fynd-rpc","version":"0.7.0"},"components":{"schemas":{"Order":{"type":"object","description":"A single swap order to be solved.\n\nAn order specifies an intent to swap one token for another.","required":["token_in","token_out","amount","side","sender"],"properties":{"amount":{"type":"string","description":"Amount to swap, interpreted according to `side` (in token units, as decimal string)."},"receiver":{"type":["string","null"],"description":"Address that will receive the output tokens.\n\nDefaults to `sender` if not specified."},"sender":{"type":"string","description":"Address that will send the input tokens."},"side":{"$ref":"#/components/schemas/OrderSide","description":"Whether this is a sell (exact input) or buy (exact output) order."},"token_in":{"type":"string","description":"Input token address (the token being sold)."},"token_out":{"type":"string","description":"Output token address (the token being bought)."}}},"OrderSide":{"type":"string","description":"Specifies the side of an order: sell (exact input) or buy (exact output).\n\nCurrently only `Sell` is supported. `Buy` will be added in a future version.","enum":["sell"]}}}}
```

## The OrderSide object

```json
{"openapi":"3.1.0","info":{"title":"fynd-rpc","version":"0.7.0"},"components":{"schemas":{"OrderSide":{"type":"string","description":"Specifies the side of an order: sell (exact input) or buy (exact output).\n\nCurrently only `Sell` is supported. `Buy` will be added in a future version.","enum":["sell"]}}}}
```

## The OrderQuote object

```json
{"openapi":"3.1.0","info":{"title":"fynd-rpc","version":"0.7.0"},"components":{"schemas":{"OrderQuote":{"type":"object","description":"Quote for a single [`Order`].\n\nContains the route to execute (if found), along with expected amounts,\ngas estimates, and status information.","required":["order_id","status","amount_in","amount_out","gas_estimate","amount_out_net_gas","block"],"properties":{"amount_in":{"type":"string","description":"Amount of input token (in token units, as decimal string)."},"amount_out":{"type":"string","description":"Amount of output token (in token units, as decimal string)."},"amount_out_net_gas":{"type":"string","description":"Amount out minus gas cost in output token terms.\nUsed by OrderManager to compare solutions from different solvers."},"block":{"$ref":"#/components/schemas/BlockInfo","description":"Block at which this quote was computed."},"gas_estimate":{"type":"string","description":"Estimated gas cost for executing this route (as decimal string)."},"gas_price":{"type":["string","null"],"description":"Effective gas price (in wei) at the time the route was computed."},"order_id":{"type":"string","description":"ID of the order this solution corresponds to."},"price_impact_bps":{"type":["integer","null"],"format":"int32","description":"Price impact in basis points (1 bip = 0.01%)."},"route":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Route","description":"The route to execute, if a valid route was found."}]},"status":{"$ref":"#/components/schemas/QuoteStatus","description":"Status indicating whether a route was found."},"transaction":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Transaction","description":"An encoded EVM transaction ready to be submitted on-chain."}]}}},"BlockInfo":{"type":"object","description":"Block information at which a quote was computed.\n\nQuotes are only valid for the block at which they were computed. Market\nconditions may change in subsequent blocks.","required":["number","hash","timestamp"],"properties":{"hash":{"type":"string","description":"Block hash as a hex string."},"number":{"type":"integer","format":"int64","description":"Block number.","minimum":0},"timestamp":{"type":"integer","format":"int64","description":"Block timestamp in Unix seconds.","minimum":0}}},"Route":{"type":"object","description":"A route consisting of one or more sequential swaps.\n\nA route describes the path through liquidity pools to execute a swap.\nFor multi-hop swaps, the output of each swap becomes the input of the next.","required":["swaps"],"properties":{"swaps":{"type":"array","items":{"$ref":"#/components/schemas/Swap"},"description":"Ordered sequence of swaps to execute."}}},"Swap":{"type":"object","description":"A single swap within a route.\n\nRepresents an atomic swap on a specific liquidity pool (component).","required":["component_id","protocol","token_in","token_out","amount_in","amount_out","gas_estimate","split"],"properties":{"amount_in":{"type":"string","description":"Amount of input token (in token units, as decimal string)."},"amount_out":{"type":"string","description":"Amount of output token (in token units, as decimal string)."},"component_id":{"type":"string","description":"Identifier of the liquidity pool component."},"gas_estimate":{"type":"string","description":"Estimated gas cost for this swap (as decimal string)."},"protocol":{"type":"string","description":"Protocol system identifier (e.g., \"uniswap_v2\", \"uniswap_v3\", \"vm:balancer\")."},"split":{"type":"number","format":"double","description":"Decimal of the amount to be swapped in this operation (for example, 0.5 means 50%)"},"token_in":{"type":"string","description":"Input token address."},"token_out":{"type":"string","description":"Output token address."}}},"QuoteStatus":{"type":"string","description":"Status of an order quote.","enum":["success","no_route_found","insufficient_liquidity","timeout","not_ready"]},"Transaction":{"type":"object","description":"An encoded EVM transaction ready to be submitted on-chain.","required":["to","value","data"],"properties":{"data":{"type":"string","description":"ABI-encoded calldata as hex string."},"to":{"type":"string","description":"Contract address to call."},"value":{"type":"string","description":"Native token value to send with the transaction (as decimal string)."}}}}}}
```

## The PermitDetails object

```json
{"openapi":"3.1.0","info":{"title":"fynd-rpc","version":"0.7.0"},"components":{"schemas":{"PermitDetails":{"type":"object","description":"Details for a permit2 single-token permit.","required":["token","amount","expiration","nonce"],"properties":{"amount":{"type":"string","description":"Amount of tokens approved."},"expiration":{"type":"string","description":"Expiration timestamp for the permit."},"nonce":{"type":"string","description":"Nonce to prevent replay attacks."},"token":{"type":"string","description":"Token address for which the permit is granted."}}}}}}
```

## The PermitSingle object

```json
{"openapi":"3.1.0","info":{"title":"fynd-rpc","version":"0.7.0"},"components":{"schemas":{"PermitSingle":{"type":"object","description":"A single permit for permit2 token transfer authorization.","required":["details","spender","sig_deadline"],"properties":{"details":{"$ref":"#/components/schemas/PermitDetails","description":"The permit details (token, amount, expiration, nonce)."},"sig_deadline":{"type":"string","description":"Deadline timestamp for the permit signature."},"spender":{"type":"string","description":"Address authorized to spend the tokens (typically the router)."}}},"PermitDetails":{"type":"object","description":"Details for a permit2 single-token permit.","required":["token","amount","expiration","nonce"],"properties":{"amount":{"type":"string","description":"Amount of tokens approved."},"expiration":{"type":"string","description":"Expiration timestamp for the permit."},"nonce":{"type":"string","description":"Nonce to prevent replay attacks."},"token":{"type":"string","description":"Token address for which the permit is granted."}}}}}}
```

## The Route object

```json
{"openapi":"3.1.0","info":{"title":"fynd-rpc","version":"0.7.0"},"components":{"schemas":{"Route":{"type":"object","description":"A route consisting of one or more sequential swaps.\n\nA route describes the path through liquidity pools to execute a swap.\nFor multi-hop swaps, the output of each swap becomes the input of the next.","required":["swaps"],"properties":{"swaps":{"type":"array","items":{"$ref":"#/components/schemas/Swap"},"description":"Ordered sequence of swaps to execute."}}},"Swap":{"type":"object","description":"A single swap within a route.\n\nRepresents an atomic swap on a specific liquidity pool (component).","required":["component_id","protocol","token_in","token_out","amount_in","amount_out","gas_estimate","split"],"properties":{"amount_in":{"type":"string","description":"Amount of input token (in token units, as decimal string)."},"amount_out":{"type":"string","description":"Amount of output token (in token units, as decimal string)."},"component_id":{"type":"string","description":"Identifier of the liquidity pool component."},"gas_estimate":{"type":"string","description":"Estimated gas cost for this swap (as decimal string)."},"protocol":{"type":"string","description":"Protocol system identifier (e.g., \"uniswap_v2\", \"uniswap_v3\", \"vm:balancer\")."},"split":{"type":"number","format":"double","description":"Decimal of the amount to be swapped in this operation (for example, 0.5 means 50%)"},"token_in":{"type":"string","description":"Input token address."},"token_out":{"type":"string","description":"Output token address."}}}}}}
```

## The Quote object

```json
{"openapi":"3.1.0","info":{"title":"fynd-rpc","version":"0.7.0"},"components":{"schemas":{"Quote":{"type":"object","description":"Complete solution for a [`QuoteRequest`].\n\nContains a solution for each order in the request, along with aggregate\ngas estimates and timing information.","required":["orders","total_gas_estimate","solve_time_ms"],"properties":{"orders":{"type":"array","items":{"$ref":"#/components/schemas/OrderQuote"},"description":"Quotes for each order, in the same order as the request."},"solve_time_ms":{"type":"integer","format":"int64","description":"Time taken to compute this solution, in milliseconds.","minimum":0},"total_gas_estimate":{"type":"string","description":"Total estimated gas for executing all swaps (as decimal string)."}}},"OrderQuote":{"type":"object","description":"Quote for a single [`Order`].\n\nContains the route to execute (if found), along with expected amounts,\ngas estimates, and status information.","required":["order_id","status","amount_in","amount_out","gas_estimate","amount_out_net_gas","block"],"properties":{"amount_in":{"type":"string","description":"Amount of input token (in token units, as decimal string)."},"amount_out":{"type":"string","description":"Amount of output token (in token units, as decimal string)."},"amount_out_net_gas":{"type":"string","description":"Amount out minus gas cost in output token terms.\nUsed by OrderManager to compare solutions from different solvers."},"block":{"$ref":"#/components/schemas/BlockInfo","description":"Block at which this quote was computed."},"gas_estimate":{"type":"string","description":"Estimated gas cost for executing this route (as decimal string)."},"gas_price":{"type":["string","null"],"description":"Effective gas price (in wei) at the time the route was computed."},"order_id":{"type":"string","description":"ID of the order this solution corresponds to."},"price_impact_bps":{"type":["integer","null"],"format":"int32","description":"Price impact in basis points (1 bip = 0.01%)."},"route":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Route","description":"The route to execute, if a valid route was found."}]},"status":{"$ref":"#/components/schemas/QuoteStatus","description":"Status indicating whether a route was found."},"transaction":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Transaction","description":"An encoded EVM transaction ready to be submitted on-chain."}]}}},"BlockInfo":{"type":"object","description":"Block information at which a quote was computed.\n\nQuotes are only valid for the block at which they were computed. Market\nconditions may change in subsequent blocks.","required":["number","hash","timestamp"],"properties":{"hash":{"type":"string","description":"Block hash as a hex string."},"number":{"type":"integer","format":"int64","description":"Block number.","minimum":0},"timestamp":{"type":"integer","format":"int64","description":"Block timestamp in Unix seconds.","minimum":0}}},"Route":{"type":"object","description":"A route consisting of one or more sequential swaps.\n\nA route describes the path through liquidity pools to execute a swap.\nFor multi-hop swaps, the output of each swap becomes the input of the next.","required":["swaps"],"properties":{"swaps":{"type":"array","items":{"$ref":"#/components/schemas/Swap"},"description":"Ordered sequence of swaps to execute."}}},"Swap":{"type":"object","description":"A single swap within a route.\n\nRepresents an atomic swap on a specific liquidity pool (component).","required":["component_id","protocol","token_in","token_out","amount_in","amount_out","gas_estimate","split"],"properties":{"amount_in":{"type":"string","description":"Amount of input token (in token units, as decimal string)."},"amount_out":{"type":"string","description":"Amount of output token (in token units, as decimal string)."},"component_id":{"type":"string","description":"Identifier of the liquidity pool component."},"gas_estimate":{"type":"string","description":"Estimated gas cost for this swap (as decimal string)."},"protocol":{"type":"string","description":"Protocol system identifier (e.g., \"uniswap_v2\", \"uniswap_v3\", \"vm:balancer\")."},"split":{"type":"number","format":"double","description":"Decimal of the amount to be swapped in this operation (for example, 0.5 means 50%)"},"token_in":{"type":"string","description":"Input token address."},"token_out":{"type":"string","description":"Output token address."}}},"QuoteStatus":{"type":"string","description":"Status of an order quote.","enum":["success","no_route_found","insufficient_liquidity","timeout","not_ready"]},"Transaction":{"type":"object","description":"An encoded EVM transaction ready to be submitted on-chain.","required":["to","value","data"],"properties":{"data":{"type":"string","description":"ABI-encoded calldata as hex string."},"to":{"type":"string","description":"Contract address to call."},"value":{"type":"string","description":"Native token value to send with the transaction (as decimal string)."}}}}}}
```

## The QuoteOptions object

```json
{"openapi":"3.1.0","info":{"title":"fynd-rpc","version":"0.7.0"},"components":{"schemas":{"QuoteOptions":{"type":"object","description":"Options to customize the solving behavior.","properties":{"encoding_options":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EncodingOptions"}]},"max_gas":{"type":["string","null"],"description":"Maximum gas cost allowed for a solution. Quotes exceeding this are filtered out."},"min_responses":{"type":["integer","null"],"description":"Minimum number of solver responses to wait for before returning.\nIf `None` or `0`, waits for all solvers to respond (or timeout).\n\nUse the `/health` endpoint to check `num_solver_pools` before setting this value.\nValues exceeding the number of active solver pools are clamped internally.","minimum":0},"timeout_ms":{"type":["integer","null"],"format":"int64","description":"Timeout in milliseconds. If `None`, uses server default.","minimum":0}}},"EncodingOptions":{"type":"object","description":"Options to customize the encoding behavior.","required":["slippage"],"properties":{"permit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PermitSingle","description":"Permit2 single-token authorization. Required when using `transfer_from_permit2`."}]},"permit2_signature":{"type":["string","null"],"description":"Permit2 signature (65 bytes, hex-encoded). Required when `permit` is set."},"slippage":{"type":"number","format":"double"},"transfer_type":{"$ref":"#/components/schemas/UserTransferType","description":"Token transfer method. Defaults to `transfer_from`."}}},"PermitSingle":{"type":"object","description":"A single permit for permit2 token transfer authorization.","required":["details","spender","sig_deadline"],"properties":{"details":{"$ref":"#/components/schemas/PermitDetails","description":"The permit details (token, amount, expiration, nonce)."},"sig_deadline":{"type":"string","description":"Deadline timestamp for the permit signature."},"spender":{"type":"string","description":"Address authorized to spend the tokens (typically the router)."}}},"PermitDetails":{"type":"object","description":"Details for a permit2 single-token permit.","required":["token","amount","expiration","nonce"],"properties":{"amount":{"type":"string","description":"Amount of tokens approved."},"expiration":{"type":"string","description":"Expiration timestamp for the permit."},"nonce":{"type":"string","description":"Nonce to prevent replay attacks."},"token":{"type":"string","description":"Token address for which the permit is granted."}}},"UserTransferType":{"type":"string","description":"Token transfer method for moving funds into Tycho execution.","enum":["transfer_from_permit2","transfer_from","none"]}}}}
```

## The QuoteRequest object

```json
{"openapi":"3.1.0","info":{"title":"fynd-rpc","version":"0.7.0"},"components":{"schemas":{"QuoteRequest":{"type":"object","description":"Request to solve one or more swap orders.","required":["orders"],"properties":{"options":{"$ref":"#/components/schemas/QuoteOptions","description":"Optional solving parameters that apply to all orders."},"orders":{"type":"array","items":{"$ref":"#/components/schemas/Order"},"description":"Orders to solve."}}},"QuoteOptions":{"type":"object","description":"Options to customize the solving behavior.","properties":{"encoding_options":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EncodingOptions"}]},"max_gas":{"type":["string","null"],"description":"Maximum gas cost allowed for a solution. Quotes exceeding this are filtered out."},"min_responses":{"type":["integer","null"],"description":"Minimum number of solver responses to wait for before returning.\nIf `None` or `0`, waits for all solvers to respond (or timeout).\n\nUse the `/health` endpoint to check `num_solver_pools` before setting this value.\nValues exceeding the number of active solver pools are clamped internally.","minimum":0},"timeout_ms":{"type":["integer","null"],"format":"int64","description":"Timeout in milliseconds. If `None`, uses server default.","minimum":0}}},"EncodingOptions":{"type":"object","description":"Options to customize the encoding behavior.","required":["slippage"],"properties":{"permit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PermitSingle","description":"Permit2 single-token authorization. Required when using `transfer_from_permit2`."}]},"permit2_signature":{"type":["string","null"],"description":"Permit2 signature (65 bytes, hex-encoded). Required when `permit` is set."},"slippage":{"type":"number","format":"double"},"transfer_type":{"$ref":"#/components/schemas/UserTransferType","description":"Token transfer method. Defaults to `transfer_from`."}}},"PermitSingle":{"type":"object","description":"A single permit for permit2 token transfer authorization.","required":["details","spender","sig_deadline"],"properties":{"details":{"$ref":"#/components/schemas/PermitDetails","description":"The permit details (token, amount, expiration, nonce)."},"sig_deadline":{"type":"string","description":"Deadline timestamp for the permit signature."},"spender":{"type":"string","description":"Address authorized to spend the tokens (typically the router)."}}},"PermitDetails":{"type":"object","description":"Details for a permit2 single-token permit.","required":["token","amount","expiration","nonce"],"properties":{"amount":{"type":"string","description":"Amount of tokens approved."},"expiration":{"type":"string","description":"Expiration timestamp for the permit."},"nonce":{"type":"string","description":"Nonce to prevent replay attacks."},"token":{"type":"string","description":"Token address for which the permit is granted."}}},"UserTransferType":{"type":"string","description":"Token transfer method for moving funds into Tycho execution.","enum":["transfer_from_permit2","transfer_from","none"]},"Order":{"type":"object","description":"A single swap order to be solved.\n\nAn order specifies an intent to swap one token for another.","required":["token_in","token_out","amount","side","sender"],"properties":{"amount":{"type":"string","description":"Amount to swap, interpreted according to `side` (in token units, as decimal string)."},"receiver":{"type":["string","null"],"description":"Address that will receive the output tokens.\n\nDefaults to `sender` if not specified."},"sender":{"type":"string","description":"Address that will send the input tokens."},"side":{"$ref":"#/components/schemas/OrderSide","description":"Whether this is a sell (exact input) or buy (exact output) order."},"token_in":{"type":"string","description":"Input token address (the token being sold)."},"token_out":{"type":"string","description":"Output token address (the token being bought)."}}},"OrderSide":{"type":"string","description":"Specifies the side of an order: sell (exact input) or buy (exact output).\n\nCurrently only `Sell` is supported. `Buy` will be added in a future version.","enum":["sell"]}}}}
```

## The QuoteStatus object

```json
{"openapi":"3.1.0","info":{"title":"fynd-rpc","version":"0.7.0"},"components":{"schemas":{"QuoteStatus":{"type":"string","description":"Status of an order quote.","enum":["success","no_route_found","insufficient_liquidity","timeout","not_ready"]}}}}
```

## The Swap object

```json
{"openapi":"3.1.0","info":{"title":"fynd-rpc","version":"0.7.0"},"components":{"schemas":{"Swap":{"type":"object","description":"A single swap within a route.\n\nRepresents an atomic swap on a specific liquidity pool (component).","required":["component_id","protocol","token_in","token_out","amount_in","amount_out","gas_estimate","split"],"properties":{"amount_in":{"type":"string","description":"Amount of input token (in token units, as decimal string)."},"amount_out":{"type":"string","description":"Amount of output token (in token units, as decimal string)."},"component_id":{"type":"string","description":"Identifier of the liquidity pool component."},"gas_estimate":{"type":"string","description":"Estimated gas cost for this swap (as decimal string)."},"protocol":{"type":"string","description":"Protocol system identifier (e.g., \"uniswap_v2\", \"uniswap_v3\", \"vm:balancer\")."},"split":{"type":"number","format":"double","description":"Decimal of the amount to be swapped in this operation (for example, 0.5 means 50%)"},"token_in":{"type":"string","description":"Input token address."},"token_out":{"type":"string","description":"Output token address."}}}}}}
```

## The Transaction object

```json
{"openapi":"3.1.0","info":{"title":"fynd-rpc","version":"0.7.0"},"components":{"schemas":{"Transaction":{"type":"object","description":"An encoded EVM transaction ready to be submitted on-chain.","required":["to","value","data"],"properties":{"data":{"type":"string","description":"ABI-encoded calldata as hex string."},"to":{"type":"string","description":"Contract address to call."},"value":{"type":"string","description":"Native token value to send with the transaction (as decimal string)."}}}}}}
```

## The UserTransferType object

```json
{"openapi":"3.1.0","info":{"title":"fynd-rpc","version":"0.7.0"},"components":{"schemas":{"UserTransferType":{"type":"string","description":"Token transfer method for moving funds into Tycho execution.","enum":["transfer_from_permit2","transfer_from","none"]}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.fynd.xyz/reference/api.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
