> For the complete documentation index, see [llms.txt](https://docs.turbine.exchange/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.turbine.exchange/reference/api/readme/models.md).

# Models

## The AddLiquidity object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"AddLiquidity":{"type":"object","description":"Represents a liquidity addition with SignatureTransfer permit functionality.\n\nThis struct encapsulates all necessary information needed to submit a new intent to add\nliquidity to the system, including the intent and SignatureTransfer permit data for approvals.\nUser authentication is handled via session-based SIWE verification.\n\n# Fields\n* `add_liquidity` The intent to add liquidity\n* `permit_tokens` The batch SignatureTransfer permit and signature for token0 and token1","required":["addLiquidity","permitTokens"],"properties":{"addLiquidity":{"$ref":"#/components/schemas/AddLiquidityIntent"},"permitTokens":{"$ref":"#/components/schemas/SignedBatchSignatureTransferDTO"}}},"AddLiquidityIntent":{"type":"object","required":["owner","token0","token1","fee","token0Amount","token1Amount","exact","salt"],"properties":{"exact":{"type":"boolean","description":"Whether the user wants to provide exactly the specified amounts (and is willing to\npay a swap fee first) or would rather like to provide liquidity in current ratio of pool\nreserves (in such case the specified token amounts are treated as maximum amounts)."},"fee":{"type":"integer","format":"uint32","description":"The fee for the pool","minimum":0},"owner":{"type":"string","format":"address","description":"The address of the user submitting the intent"},"salt":{"type":"string","format":"bytes32","description":"Used to differentiate between intents with the same parameters"},"token0":{"type":"string","format":"address","description":"The token0 of the pool. Tokens must be sorted ascending by address so that\n`token0 < token1`; unordered intents are rejected."},"token0Amount":{"type":"string","format":"uint256","description":"The amount of token0 to provide. If `exact` is true, this is the exact amount of token0 to\nprovide. If `exact` is false, this is the maximum amount of token0 to provide."},"token1":{"type":"string","format":"address","description":"The token1 of the pool. Must be greater than `token0` (see `token0`)."},"token1Amount":{"type":"string","format":"uint256","description":"The amount of token1 to provide. If `exact` is true, this is the exact amount of token1 to\nprovide. If `exact` is false, this is the maximum amount of token1 to provide."}}},"SignedBatchSignatureTransferDTO":{"type":"object","description":"Signed batch SignatureTransfer permit (for add liquidity token0 and token1 transfer)","required":["permit","signature"],"properties":{"permit":{"$ref":"#/components/schemas/PermitBatchTransferFrom"},"signature":{"$ref":"#/components/schemas/PermitSignature"}}},"PermitBatchTransferFrom":{"type":"object","description":"DTO for ISignatureTransfer.PermitBatchTransferFrom - batch token transfer authorization","required":["permitted","nonce","deadline"],"properties":{"deadline":{"type":"string","format":"uint256"},"nonce":{"type":"string","format":"uint256"},"permitted":{"type":"array","items":{"$ref":"#/components/schemas/TokenPermissions"}}}},"TokenPermissions":{"type":"object","description":"Token permissions for ISignatureTransfer permits.\nUsed in PermitTransferFrom and PermitBatchTransferFrom.","required":["token","amount"],"properties":{"amount":{"type":"string","format":"uint256","description":"The maximum amount that can be transferred"},"token":{"type":"string","format":"address","description":"The token address"}}},"PermitSignature":{"type":"object","required":["r","s","yParity"],"properties":{"r":{"type":"string","format":"uint256"},"s":{"type":"string","format":"uint256"},"yParity":{"type":"boolean","format":"boolean"}}}}}}
```

## The AddLiquidityEip712 object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"AddLiquidityEip712":{"allOf":[{"$ref":"#/components/schemas/AddLiquidity"}],"description":"Inner payload of add_liquidity endpoint."},"AddLiquidity":{"type":"object","description":"Represents a liquidity addition with SignatureTransfer permit functionality.\n\nThis struct encapsulates all necessary information needed to submit a new intent to add\nliquidity to the system, including the intent and SignatureTransfer permit data for approvals.\nUser authentication is handled via session-based SIWE verification.\n\n# Fields\n* `add_liquidity` The intent to add liquidity\n* `permit_tokens` The batch SignatureTransfer permit and signature for token0 and token1","required":["addLiquidity","permitTokens"],"properties":{"addLiquidity":{"$ref":"#/components/schemas/AddLiquidityIntent"},"permitTokens":{"$ref":"#/components/schemas/SignedBatchSignatureTransferDTO"}}},"AddLiquidityIntent":{"type":"object","required":["owner","token0","token1","fee","token0Amount","token1Amount","exact","salt"],"properties":{"exact":{"type":"boolean","description":"Whether the user wants to provide exactly the specified amounts (and is willing to\npay a swap fee first) or would rather like to provide liquidity in current ratio of pool\nreserves (in such case the specified token amounts are treated as maximum amounts)."},"fee":{"type":"integer","format":"uint32","description":"The fee for the pool","minimum":0},"owner":{"type":"string","format":"address","description":"The address of the user submitting the intent"},"salt":{"type":"string","format":"bytes32","description":"Used to differentiate between intents with the same parameters"},"token0":{"type":"string","format":"address","description":"The token0 of the pool. Tokens must be sorted ascending by address so that\n`token0 < token1`; unordered intents are rejected."},"token0Amount":{"type":"string","format":"uint256","description":"The amount of token0 to provide. If `exact` is true, this is the exact amount of token0 to\nprovide. If `exact` is false, this is the maximum amount of token0 to provide."},"token1":{"type":"string","format":"address","description":"The token1 of the pool. Must be greater than `token0` (see `token0`)."},"token1Amount":{"type":"string","format":"uint256","description":"The amount of token1 to provide. If `exact` is true, this is the exact amount of token1 to\nprovide. If `exact` is false, this is the maximum amount of token1 to provide."}}},"SignedBatchSignatureTransferDTO":{"type":"object","description":"Signed batch SignatureTransfer permit (for add liquidity token0 and token1 transfer)","required":["permit","signature"],"properties":{"permit":{"$ref":"#/components/schemas/PermitBatchTransferFrom"},"signature":{"$ref":"#/components/schemas/PermitSignature"}}},"PermitBatchTransferFrom":{"type":"object","description":"DTO for ISignatureTransfer.PermitBatchTransferFrom - batch token transfer authorization","required":["permitted","nonce","deadline"],"properties":{"deadline":{"type":"string","format":"uint256"},"nonce":{"type":"string","format":"uint256"},"permitted":{"type":"array","items":{"$ref":"#/components/schemas/TokenPermissions"}}}},"TokenPermissions":{"type":"object","description":"Token permissions for ISignatureTransfer permits.\nUsed in PermitTransferFrom and PermitBatchTransferFrom.","required":["token","amount"],"properties":{"amount":{"type":"string","format":"uint256","description":"The maximum amount that can be transferred"},"token":{"type":"string","format":"address","description":"The token address"}}},"PermitSignature":{"type":"object","required":["r","s","yParity"],"properties":{"r":{"type":"string","format":"uint256"},"s":{"type":"string","format":"uint256"},"yParity":{"type":"boolean","format":"boolean"}}}}}}
```

## The AddLiquidityIntent object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"AddLiquidityIntent":{"type":"object","required":["owner","token0","token1","fee","token0Amount","token1Amount","exact","salt"],"properties":{"exact":{"type":"boolean","description":"Whether the user wants to provide exactly the specified amounts (and is willing to\npay a swap fee first) or would rather like to provide liquidity in current ratio of pool\nreserves (in such case the specified token amounts are treated as maximum amounts)."},"fee":{"type":"integer","format":"uint32","description":"The fee for the pool","minimum":0},"owner":{"type":"string","format":"address","description":"The address of the user submitting the intent"},"salt":{"type":"string","format":"bytes32","description":"Used to differentiate between intents with the same parameters"},"token0":{"type":"string","format":"address","description":"The token0 of the pool. Tokens must be sorted ascending by address so that\n`token0 < token1`; unordered intents are rejected."},"token0Amount":{"type":"string","format":"uint256","description":"The amount of token0 to provide. If `exact` is true, this is the exact amount of token0 to\nprovide. If `exact` is false, this is the maximum amount of token0 to provide."},"token1":{"type":"string","format":"address","description":"The token1 of the pool. Must be greater than `token0` (see `token0`)."},"token1Amount":{"type":"string","format":"uint256","description":"The amount of token1 to provide. If `exact` is true, this is the exact amount of token1 to\nprovide. If `exact` is false, this is the maximum amount of token1 to provide."}}}}}}
```

## The AddLiquidityResponse object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"AddLiquidityResponse":{"type":"object","description":"Response returned after successfully submitting a liquidity intent to the system.\nContains the unique identifier assigned to the submitted intent.\n\n# Fields\n* `hash` - Unique identifier assigned to the liquidity intent","required":["intentHash"],"properties":{"intentHash":{"type":"string","format":"bytes32"}}}}}}
```

## The AddOrder object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"AddOrder":{"type":"object","description":"Represents an order submission with optional permit functionality.\n\nThis struct encapsulates all necessary information needed to submit a new order to the system.\n`signed_permit` is required only for non-smart orders.","required":["order"],"properties":{"annotations":{"$ref":"#/components/schemas/OrderAnnotations","description":"Optional informational annotations stored alongside the order in order history\nand echoed back from the order-state endpoints. Not part of the signed order."},"order":{"$ref":"#/components/schemas/OrderIntent"},"signedPermit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SignedPermitDTO","description":"The optional signed permit. Only required for non-smart orders.\nDefaults to None in the JSON input.\nBut defaults to a permit in the API schema, as an example."}],"default":{"permit":{"details":{"token":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","amount":"1461501637330902918203684832716283019655932542975","expiration":1630003600,"nonce":0},"spender":"0x346a33009161ed9085b75c9194a523322236f74e","sigDeadline":"1630003600"},"signature":{"r":"93806474433608546370310852361160557641089548055391845313596357890102999855022","s":"44967894251262473816400307202805291026637879676677543909166458416059363900630","yParity":true}}}}},"OrderAnnotations":{"type":"object","description":"Additional data attached to an order, provided by the user. Purely informational —\nnot part of the signed order and not used by the protocol.","properties":{"spreadAtSubmissionHbp":{"type":["integer","null"],"format":"int64","description":"The market spread (in hundredths of a basis point, 10_000 hbp = 1%) quoted to the\nuser at submission time, as returned by `/api/quote` (`amm_spread_hbp`).","minimum":0}}},"OrderIntent":{"type":"object","description":"The swap intent for a user","required":["owner","sellToken","buyToken","sellAmount","minBuyAmount","spreadCurve","startTime","endTime","partialFill","callData","callDataTarget","calldataSellAmountOffset","calldataBuyAmountOffset","salt"],"properties":{"buyToken":{"type":"string","format":"address","description":"The token being bought"},"callData":{"type":"string","format":"bytes","description":"Optional call data for smart orders, allowing custom routing"},"callDataTarget":{"type":"string","format":"address","description":"The address of the target contract for the calldata"},"calldataBuyAmountOffset":{"type":"integer","format":"uint64","description":"The offset of the buy amount in the calldata\nIf Some, used to update the calldata with the actual buy amount","minimum":0},"calldataSellAmountOffset":{"type":"integer","format":"uint64","description":"The offset of the sell amount in the calldata\nIf Some, used to update the calldata with the actual sell amount","minimum":0},"endTime":{"type":"integer","format":"uint256","description":"Block timestamp until when the order is valid.","minimum":0},"minBuyAmount":{"type":"string","format":"uint256","description":"The minimum amount of tokens being bought, effectively defining limit price."},"owner":{"type":"string","format":"address","description":"The address of the user submitting the order"},"partialFill":{"type":"boolean","format":"boolean","description":"Flag allowing partial fills"},"salt":{"type":"string","format":"bytes32","description":"The offset of the buy amount in the calldata\nUsed to differentiate between orders with the same parameters"},"sellAmount":{"type":"string","format":"uint196","description":"The amount of tokens being sold"},"sellToken":{"type":"string","format":"address","description":"The token being sold"},"spreadCurve":{"$ref":"#/components/schemas/SpreadCurveDto","description":"A piecewise-linear spread curve mapping a fraction of the order window to a mid-price\ndelta in basis points. Each interior point's `windowBps` is a fraction of the order\nduration in basis points (5_000 = halfway)."},"startTime":{"type":"integer","format":"uint256","description":"Block timestamp since when the order is valid","minimum":0}}},"SpreadCurveDto":{"type":"object","description":"Piecewise-linear spread curve. Interior `points` express knot positions as a fraction\nof the order's `[start_time, end_time]` window in basis points (`windowBps`), so the\ncurve is portable across orders of different durations.","required":["startDeltaBps","endDeltaBps"],"properties":{"endDeltaBps":{"type":"integer","format":"int32","description":"Mid-price delta at the order's `end_time`, in basis points."},"points":{"type":"array","items":{"$ref":"#/components/schemas/CurvePointDto"},"description":"Interior knots. Each `windowBps` must lie in `[1, 9_999]` and values must be\nstrictly increasing across `points`. Defaults to `[]` if absent, yielding a single\nlinear segment from `startDeltaBps` to `endDeltaBps`."},"startDeltaBps":{"type":"integer","format":"int32","description":"Mid-price delta at the order's `start_time`, in basis points."}}},"CurvePointDto":{"type":"object","description":"A single interior knot in a [`SpreadCurveDto`].","required":["windowBps","deltaBps"],"properties":{"deltaBps":{"type":"integer","format":"int32","description":"Mid-price delta in basis points at this knot."},"windowBps":{"type":"integer","format":"int32","description":"Knot position as a fraction of the order window in basis points. Must lie in\n`(0, 10_000)` exclusive — `5_000` is the order midpoint.","maximum":9999,"minimum":1}}},"SignedPermitDTO":{"type":"object","required":["permit","signature"],"properties":{"permit":{"$ref":"#/components/schemas/PermitSingle"},"signature":{"$ref":"#/components/schemas/PermitSignature"}}},"PermitSingle":{"type":"object","required":["details","spender","sigDeadline"],"properties":{"details":{"$ref":"#/components/schemas/PermitDetails"},"sigDeadline":{"type":"string","format":"uint256"},"spender":{"type":"string","format":"address"}}},"PermitDetails":{"type":"object","required":["token","amount","expiration","nonce"],"properties":{"amount":{"type":"string","format":"uint160"},"expiration":{"type":"integer","format":"uint64","minimum":0},"nonce":{"type":"integer","format":"uint64","minimum":0},"token":{"type":"string","format":"address"}}},"PermitSignature":{"type":"object","required":["r","s","yParity"],"properties":{"r":{"type":"string","format":"uint256"},"s":{"type":"string","format":"uint256"},"yParity":{"type":"boolean","format":"boolean"}}}}}}
```

## The AddOrderEip712 object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"AddOrderEip712":{"type":"object","description":"Inner payload of add_order endpoint.","required":["order","spreadCurve"],"properties":{"annotations":{"$ref":"#/components/schemas/OrderAnnotations","description":"Informational only; deliberately outside the signature, as in the session API."},"order":{"$ref":"#/components/schemas/OrderIntentEip712"},"signedPermit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SignedPermitDTO","description":"Permit2 signature funding the order; same semantics as the session API."}]},"spreadCurve":{"$ref":"#/components/schemas/SpreadCurveDto","description":"The full spread curve, signed as part of the inner payload."}}},"OrderAnnotations":{"type":"object","description":"Additional data attached to an order, provided by the user. Purely informational —\nnot part of the signed order and not used by the protocol.","properties":{"spreadAtSubmissionHbp":{"type":["integer","null"],"format":"int64","description":"The market spread (in hundredths of a basis point, 10_000 hbp = 1%) quoted to the\nuser at submission time, as returned by `/api/quote` (`amm_spread_hbp`).","minimum":0}}},"OrderIntentEip712":{"type":"object","description":"The EIP-712 API wire form of an order intent. Unlike the session-API DTO,\nit carries no spread curve inline. The curve is a required payload-level sibling.","required":["owner","sellToken","buyToken","sellAmount","minBuyAmount","startTime","endTime","partialFill","callData","callDataTarget","salt"],"properties":{"buyToken":{"type":"string","format":"address"},"callData":{"type":"string","format":"bytes"},"callDataTarget":{"type":"string","format":"address"},"endTime":{"type":"integer","format":"uint256","description":"Block timestamp until when the order is valid","minimum":0},"minBuyAmount":{"type":"string","format":"uint256"},"owner":{"type":"string","format":"address"},"partialFill":{"type":"boolean"},"salt":{"type":"string","format":"bytes32","description":"Differentiates orders that are otherwise identical (including their full spread\ncurve); SDKs should randomize it."},"sellAmount":{"type":"string","format":"uint256"},"sellToken":{"type":"string","format":"address"},"startTime":{"type":"integer","format":"uint256","description":"Block timestamp since when the order is valid","minimum":0}}},"SignedPermitDTO":{"type":"object","required":["permit","signature"],"properties":{"permit":{"$ref":"#/components/schemas/PermitSingle"},"signature":{"$ref":"#/components/schemas/PermitSignature"}}},"PermitSingle":{"type":"object","required":["details","spender","sigDeadline"],"properties":{"details":{"$ref":"#/components/schemas/PermitDetails"},"sigDeadline":{"type":"string","format":"uint256"},"spender":{"type":"string","format":"address"}}},"PermitDetails":{"type":"object","required":["token","amount","expiration","nonce"],"properties":{"amount":{"type":"string","format":"uint160"},"expiration":{"type":"integer","format":"uint64","minimum":0},"nonce":{"type":"integer","format":"uint64","minimum":0},"token":{"type":"string","format":"address"}}},"PermitSignature":{"type":"object","required":["r","s","yParity"],"properties":{"r":{"type":"string","format":"uint256"},"s":{"type":"string","format":"uint256"},"yParity":{"type":"boolean","format":"boolean"}}},"SpreadCurveDto":{"type":"object","description":"Piecewise-linear spread curve. Interior `points` express knot positions as a fraction\nof the order's `[start_time, end_time]` window in basis points (`windowBps`), so the\ncurve is portable across orders of different durations.","required":["startDeltaBps","endDeltaBps"],"properties":{"endDeltaBps":{"type":"integer","format":"int32","description":"Mid-price delta at the order's `end_time`, in basis points."},"points":{"type":"array","items":{"$ref":"#/components/schemas/CurvePointDto"},"description":"Interior knots. Each `windowBps` must lie in `[1, 9_999]` and values must be\nstrictly increasing across `points`. Defaults to `[]` if absent, yielding a single\nlinear segment from `startDeltaBps` to `endDeltaBps`."},"startDeltaBps":{"type":"integer","format":"int32","description":"Mid-price delta at the order's `start_time`, in basis points."}}},"CurvePointDto":{"type":"object","description":"A single interior knot in a [`SpreadCurveDto`].","required":["windowBps","deltaBps"],"properties":{"deltaBps":{"type":"integer","format":"int32","description":"Mid-price delta in basis points at this knot."},"windowBps":{"type":"integer","format":"int32","description":"Knot position as a fraction of the order window in basis points. Must lie in\n`(0, 10_000)` exclusive — `5_000` is the order midpoint.","maximum":9999,"minimum":1}}}}}}
```

## The AddOrderResponse object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"AddOrderResponse":{"type":"object","description":"Response returned after successfully submitting an order to the system.\nContains the unique identifier assigned to the submitted order.\n\n# Fields\n* `order_hash` - Unique identifier assigned to the submitted order","required":["orderHash"],"properties":{"orderHash":{"type":"string","format":"bytes32"}}}}}}
```

## The AuthBlock object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"AuthBlock":{"type":"object","description":"Auth block carried by every EIP-712 request body.","required":["signer","nonce","deadline","signature"],"properties":{"deadline":{"type":"integer","format":"int64","description":"Unix seconds; not more than `maxSignatureLifetimeS` (from the config endpoint) into the\nfuture.","minimum":0},"nonce":{"type":"string","description":"Random per-request value, unique per signer among un-expired requests."},"signature":{"$ref":"#/components/schemas/PermitSignature"},"signer":{"type":"string","format":"address","description":"Claimed signer. Must match the recovered address."}}},"PermitSignature":{"type":"object","required":["r","s","yParity"],"properties":{"r":{"type":"string","format":"uint256"},"s":{"type":"string","format":"uint256"},"yParity":{"type":"boolean","format":"boolean"}}}}}}
```

## The CancelOrder object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"CancelOrder":{"type":"object","required":["orderHash"],"properties":{"orderHash":{"type":"string","format":"bytes32"}}}}}}
```

## The CancelOrderEip712 object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"CancelOrderEip712":{"type":"object","description":"Inner payload of cancel_order endpoint.","required":["orderHash"],"properties":{"orderHash":{"type":"string","format":"bytes32"}}}}}}
```

## The CancelOrderResponse object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"CancelOrderResponse":{"type":"object","required":["orderHash"],"properties":{"orderHash":{"type":"string","format":"bytes32"}}}}}}
```

## The ConfigResponse object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"ConfigResponse":{"type":"object","required":["version","turbineSettlerAddress","turbineSignerAddress","lpHookAddress","lpRouterAddress","poolManagerAddress","submitSettlements","siweDomain","siweUri","minTradeSizeUsdc","minLiquidityVolumeUsdc","eip712Domain","maxSignatureLifetimeS","tokens"],"properties":{"eip712Domain":{"$ref":"#/components/schemas/Eip712DomainInfo","description":"The EIP-712 domain that `/api/eip712/` request signatures are verified against."},"lpHookAddress":{"type":"string","format":"address"},"lpRouterAddress":{"type":"string","format":"address"},"maxSignatureLifetimeS":{"type":"integer","format":"int64","description":"Maximum allowed remaining validity of an EIP-712 auth signature, in seconds.","minimum":0},"minLiquidityVolumeUsdc":{"type":"string","format":"uint256","description":"Minimum total USDC volume for a liquidity provision intent, in native USDC units\n(6 decimals). A value of `10000000` is 10 USDC."},"minTradeSizeUsdc":{"type":"string","format":"uint256","description":"Minimum trade size in native USDC units (6 decimals). A value of `10000000`\nis 10 USDC."},"poolManagerAddress":{"type":"string","format":"address"},"siweDomain":{"type":"string"},"siweUri":{"type":"string"},"submitSettlements":{"type":"boolean"},"tokens":{"type":"array","items":{"$ref":"#/components/schemas/TokenInfo"}},"turbineSettlerAddress":{"type":"string","format":"address"},"turbineSignerAddress":{"type":"string","format":"address"},"version":{"type":"string"}}},"Eip712DomainInfo":{"type":"object","description":"Wire form of the EIP-712 signing domain served by `/api/config`. This is the single\nsource of truth for the domain: both `/api/config` and signature verification read\ntheir alloy [`Eip712Domain`] from it, so what clients sign against is exactly what\nthe server verifies.","required":["name","version","chainId","verifyingContract","salt"],"properties":{"chainId":{"type":"integer","format":"int64","minimum":0},"name":{"type":"string"},"salt":{"type":"string","format":"bytes32"},"verifyingContract":{"type":"string","format":"address"},"version":{"type":"string"}}},"TokenInfo":{"type":"object","description":"Public metadata for a token in the allowlist, returned by `/api/config`.","required":["address","symbol","decimals"],"properties":{"address":{"type":"string","format":"address"},"class":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenClass"}]},"decimals":{"type":"integer","format":"int32","minimum":0},"oracles":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/OracleFeed"},"propertyNames":{"type":"string"}},"symbol":{"type":"string"}}},"TokenClass":{"type":"string","enum":["Stable","Regular","Meme"]},"OracleFeed":{"oneOf":[{"type":"object","description":"Binance WebSocket depth feed.","required":["ticker_symbol"],"properties":{"ticker_symbol":{"type":"string"}}},{"type":"object","description":"Coinbase WebSocket feed.","required":["product_id"],"properties":{"product_id":{"type":"string"}}},{"type":"object","description":"Kraken WebSocket feed.","required":["wsname"],"properties":{"wsname":{"type":"string"}}},{"type":"object","description":"Lighter WebSocket feed.","required":["market_id","symbol"],"properties":{"market_id":{"type":"string"},"symbol":{"type":"string"}}},{"type":"object","description":"Hyperliquid WebSocket feed.","required":["coin"],"properties":{"coin":{"type":"string"}}},{"type":"object","description":"Bitget WebSocket feed.","required":["symbol"],"properties":{"symbol":{"type":"string"}}}],"description":"OpenAPI schema for an oracle feed entry.\n\nThe wire format flattens the oracle configuration: the map key in\n`TokenInfo.oracles` identifies the oracle (e.g. `binance`, `kraken`),\nand the value carries only the provider-specific fields — the internal\n`type` discriminator is stripped by `serialize_feeds`.\n\nThis type is documentation-only: runtime (de)serialization goes through\n[`ExchangeFeedInfo`]. The `#[serde(untagged)]` attribute here merely keeps\n`ToSchema` output consistent with the flat wire shape."}}}}
```

## The CurvePoint object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"CurvePoint":{"type":"object","description":"A single knot in a [`SpreadCurve`], binding a wall-clock time to a delta in basis points.","required":["timeSecs","deltaBps"],"properties":{"deltaBps":{"type":"integer","format":"int32"},"timeSecs":{"type":"integer","format":"int64","minimum":0}}}}}}
```

## The CurvePointDto object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"CurvePointDto":{"type":"object","description":"A single interior knot in a [`SpreadCurveDto`].","required":["windowBps","deltaBps"],"properties":{"deltaBps":{"type":"integer","format":"int32","description":"Mid-price delta in basis points at this knot."},"windowBps":{"type":"integer","format":"int32","description":"Knot position as a fraction of the order window in basis points. Must lie in\n`(0, 10_000)` exclusive — `5_000` is the order midpoint.","maximum":9999,"minimum":1}}}}}}
```

## The Eip712DomainInfo object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"Eip712DomainInfo":{"type":"object","description":"Wire form of the EIP-712 signing domain served by `/api/config`. This is the single\nsource of truth for the domain: both `/api/config` and signature verification read\ntheir alloy [`Eip712Domain`] from it, so what clients sign against is exactly what\nthe server verifies.","required":["name","version","chainId","verifyingContract","salt"],"properties":{"chainId":{"type":"integer","format":"int64","minimum":0},"name":{"type":"string"},"salt":{"type":"string","format":"bytes32"},"verifyingContract":{"type":"string","format":"address"},"version":{"type":"string"}}}}}}
```

## The Eip712RequestBodyAddOrderBatch object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"Eip712RequestBodyAddOrderBatch":{"type":"array","items":{"$ref":"#/components/schemas/Eip712RequestBody_AddOrderEip712"},"description":"A batch of independently signed add-order requests."},"Eip712RequestBody_AddOrderEip712":{"type":"object","description":"EIP-712 request body: the semantic payload plus its auth block. The EIP-712\nsignature covers the payload's typed struct together with `nonce` and `deadline`.","required":["payload","auth"],"properties":{"auth":{"$ref":"#/components/schemas/AuthBlock"},"payload":{"type":"object","description":"Inner payload of add_order endpoint.","required":["order","spreadCurve"],"properties":{"annotations":{"$ref":"#/components/schemas/OrderAnnotations","description":"Informational only; deliberately outside the signature, as in the session API."},"order":{"$ref":"#/components/schemas/OrderIntentEip712"},"signedPermit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SignedPermitDTO","description":"Permit2 signature funding the order; same semantics as the session API."}]},"spreadCurve":{"$ref":"#/components/schemas/SpreadCurveDto","description":"The full spread curve, signed as part of the inner payload."}}}}},"AuthBlock":{"type":"object","description":"Auth block carried by every EIP-712 request body.","required":["signer","nonce","deadline","signature"],"properties":{"deadline":{"type":"integer","format":"int64","description":"Unix seconds; not more than `maxSignatureLifetimeS` (from the config endpoint) into the\nfuture.","minimum":0},"nonce":{"type":"string","description":"Random per-request value, unique per signer among un-expired requests."},"signature":{"$ref":"#/components/schemas/PermitSignature"},"signer":{"type":"string","format":"address","description":"Claimed signer. Must match the recovered address."}}},"PermitSignature":{"type":"object","required":["r","s","yParity"],"properties":{"r":{"type":"string","format":"uint256"},"s":{"type":"string","format":"uint256"},"yParity":{"type":"boolean","format":"boolean"}}},"OrderAnnotations":{"type":"object","description":"Additional data attached to an order, provided by the user. Purely informational —\nnot part of the signed order and not used by the protocol.","properties":{"spreadAtSubmissionHbp":{"type":["integer","null"],"format":"int64","description":"The market spread (in hundredths of a basis point, 10_000 hbp = 1%) quoted to the\nuser at submission time, as returned by `/api/quote` (`amm_spread_hbp`).","minimum":0}}},"OrderIntentEip712":{"type":"object","description":"The EIP-712 API wire form of an order intent. Unlike the session-API DTO,\nit carries no spread curve inline. The curve is a required payload-level sibling.","required":["owner","sellToken","buyToken","sellAmount","minBuyAmount","startTime","endTime","partialFill","callData","callDataTarget","salt"],"properties":{"buyToken":{"type":"string","format":"address"},"callData":{"type":"string","format":"bytes"},"callDataTarget":{"type":"string","format":"address"},"endTime":{"type":"integer","format":"uint256","description":"Block timestamp until when the order is valid","minimum":0},"minBuyAmount":{"type":"string","format":"uint256"},"owner":{"type":"string","format":"address"},"partialFill":{"type":"boolean"},"salt":{"type":"string","format":"bytes32","description":"Differentiates orders that are otherwise identical (including their full spread\ncurve); SDKs should randomize it."},"sellAmount":{"type":"string","format":"uint256"},"sellToken":{"type":"string","format":"address"},"startTime":{"type":"integer","format":"uint256","description":"Block timestamp since when the order is valid","minimum":0}}},"SignedPermitDTO":{"type":"object","required":["permit","signature"],"properties":{"permit":{"$ref":"#/components/schemas/PermitSingle"},"signature":{"$ref":"#/components/schemas/PermitSignature"}}},"PermitSingle":{"type":"object","required":["details","spender","sigDeadline"],"properties":{"details":{"$ref":"#/components/schemas/PermitDetails"},"sigDeadline":{"type":"string","format":"uint256"},"spender":{"type":"string","format":"address"}}},"PermitDetails":{"type":"object","required":["token","amount","expiration","nonce"],"properties":{"amount":{"type":"string","format":"uint160"},"expiration":{"type":"integer","format":"uint64","minimum":0},"nonce":{"type":"integer","format":"uint64","minimum":0},"token":{"type":"string","format":"address"}}},"SpreadCurveDto":{"type":"object","description":"Piecewise-linear spread curve. Interior `points` express knot positions as a fraction\nof the order's `[start_time, end_time]` window in basis points (`windowBps`), so the\ncurve is portable across orders of different durations.","required":["startDeltaBps","endDeltaBps"],"properties":{"endDeltaBps":{"type":"integer","format":"int32","description":"Mid-price delta at the order's `end_time`, in basis points."},"points":{"type":"array","items":{"$ref":"#/components/schemas/CurvePointDto"},"description":"Interior knots. Each `windowBps` must lie in `[1, 9_999]` and values must be\nstrictly increasing across `points`. Defaults to `[]` if absent, yielding a single\nlinear segment from `startDeltaBps` to `endDeltaBps`."},"startDeltaBps":{"type":"integer","format":"int32","description":"Mid-price delta at the order's `start_time`, in basis points."}}},"CurvePointDto":{"type":"object","description":"A single interior knot in a [`SpreadCurveDto`].","required":["windowBps","deltaBps"],"properties":{"deltaBps":{"type":"integer","format":"int32","description":"Mid-price delta in basis points at this knot."},"windowBps":{"type":"integer","format":"int32","description":"Knot position as a fraction of the order window in basis points. Must lie in\n`(0, 10_000)` exclusive — `5_000` is the order midpoint.","maximum":9999,"minimum":1}}}}}}
```

## The Eip712RequestBody\_AddLiquidityEip712 object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"Eip712RequestBody_AddLiquidityEip712":{"type":"object","description":"EIP-712 request body: the semantic payload plus its auth block. The EIP-712\nsignature covers the payload's typed struct together with `nonce` and `deadline`.","required":["payload","auth"],"properties":{"auth":{"$ref":"#/components/schemas/AuthBlock"},"payload":{"allOf":[{"$ref":"#/components/schemas/AddLiquidity"}],"description":"Inner payload of add_liquidity endpoint."}}},"AuthBlock":{"type":"object","description":"Auth block carried by every EIP-712 request body.","required":["signer","nonce","deadline","signature"],"properties":{"deadline":{"type":"integer","format":"int64","description":"Unix seconds; not more than `maxSignatureLifetimeS` (from the config endpoint) into the\nfuture.","minimum":0},"nonce":{"type":"string","description":"Random per-request value, unique per signer among un-expired requests."},"signature":{"$ref":"#/components/schemas/PermitSignature"},"signer":{"type":"string","format":"address","description":"Claimed signer. Must match the recovered address."}}},"PermitSignature":{"type":"object","required":["r","s","yParity"],"properties":{"r":{"type":"string","format":"uint256"},"s":{"type":"string","format":"uint256"},"yParity":{"type":"boolean","format":"boolean"}}},"AddLiquidity":{"type":"object","description":"Represents a liquidity addition with SignatureTransfer permit functionality.\n\nThis struct encapsulates all necessary information needed to submit a new intent to add\nliquidity to the system, including the intent and SignatureTransfer permit data for approvals.\nUser authentication is handled via session-based SIWE verification.\n\n# Fields\n* `add_liquidity` The intent to add liquidity\n* `permit_tokens` The batch SignatureTransfer permit and signature for token0 and token1","required":["addLiquidity","permitTokens"],"properties":{"addLiquidity":{"$ref":"#/components/schemas/AddLiquidityIntent"},"permitTokens":{"$ref":"#/components/schemas/SignedBatchSignatureTransferDTO"}}},"AddLiquidityIntent":{"type":"object","required":["owner","token0","token1","fee","token0Amount","token1Amount","exact","salt"],"properties":{"exact":{"type":"boolean","description":"Whether the user wants to provide exactly the specified amounts (and is willing to\npay a swap fee first) or would rather like to provide liquidity in current ratio of pool\nreserves (in such case the specified token amounts are treated as maximum amounts)."},"fee":{"type":"integer","format":"uint32","description":"The fee for the pool","minimum":0},"owner":{"type":"string","format":"address","description":"The address of the user submitting the intent"},"salt":{"type":"string","format":"bytes32","description":"Used to differentiate between intents with the same parameters"},"token0":{"type":"string","format":"address","description":"The token0 of the pool. Tokens must be sorted ascending by address so that\n`token0 < token1`; unordered intents are rejected."},"token0Amount":{"type":"string","format":"uint256","description":"The amount of token0 to provide. If `exact` is true, this is the exact amount of token0 to\nprovide. If `exact` is false, this is the maximum amount of token0 to provide."},"token1":{"type":"string","format":"address","description":"The token1 of the pool. Must be greater than `token0` (see `token0`)."},"token1Amount":{"type":"string","format":"uint256","description":"The amount of token1 to provide. If `exact` is true, this is the exact amount of token1 to\nprovide. If `exact` is false, this is the maximum amount of token1 to provide."}}},"SignedBatchSignatureTransferDTO":{"type":"object","description":"Signed batch SignatureTransfer permit (for add liquidity token0 and token1 transfer)","required":["permit","signature"],"properties":{"permit":{"$ref":"#/components/schemas/PermitBatchTransferFrom"},"signature":{"$ref":"#/components/schemas/PermitSignature"}}},"PermitBatchTransferFrom":{"type":"object","description":"DTO for ISignatureTransfer.PermitBatchTransferFrom - batch token transfer authorization","required":["permitted","nonce","deadline"],"properties":{"deadline":{"type":"string","format":"uint256"},"nonce":{"type":"string","format":"uint256"},"permitted":{"type":"array","items":{"$ref":"#/components/schemas/TokenPermissions"}}}},"TokenPermissions":{"type":"object","description":"Token permissions for ISignatureTransfer permits.\nUsed in PermitTransferFrom and PermitBatchTransferFrom.","required":["token","amount"],"properties":{"amount":{"type":"string","format":"uint256","description":"The maximum amount that can be transferred"},"token":{"type":"string","format":"address","description":"The token address"}}}}}}
```

## The Eip712RequestBody\_AddOrderEip712 object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"Eip712RequestBody_AddOrderEip712":{"type":"object","description":"EIP-712 request body: the semantic payload plus its auth block. The EIP-712\nsignature covers the payload's typed struct together with `nonce` and `deadline`.","required":["payload","auth"],"properties":{"auth":{"$ref":"#/components/schemas/AuthBlock"},"payload":{"type":"object","description":"Inner payload of add_order endpoint.","required":["order","spreadCurve"],"properties":{"annotations":{"$ref":"#/components/schemas/OrderAnnotations","description":"Informational only; deliberately outside the signature, as in the session API."},"order":{"$ref":"#/components/schemas/OrderIntentEip712"},"signedPermit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SignedPermitDTO","description":"Permit2 signature funding the order; same semantics as the session API."}]},"spreadCurve":{"$ref":"#/components/schemas/SpreadCurveDto","description":"The full spread curve, signed as part of the inner payload."}}}}},"AuthBlock":{"type":"object","description":"Auth block carried by every EIP-712 request body.","required":["signer","nonce","deadline","signature"],"properties":{"deadline":{"type":"integer","format":"int64","description":"Unix seconds; not more than `maxSignatureLifetimeS` (from the config endpoint) into the\nfuture.","minimum":0},"nonce":{"type":"string","description":"Random per-request value, unique per signer among un-expired requests."},"signature":{"$ref":"#/components/schemas/PermitSignature"},"signer":{"type":"string","format":"address","description":"Claimed signer. Must match the recovered address."}}},"PermitSignature":{"type":"object","required":["r","s","yParity"],"properties":{"r":{"type":"string","format":"uint256"},"s":{"type":"string","format":"uint256"},"yParity":{"type":"boolean","format":"boolean"}}},"OrderAnnotations":{"type":"object","description":"Additional data attached to an order, provided by the user. Purely informational —\nnot part of the signed order and not used by the protocol.","properties":{"spreadAtSubmissionHbp":{"type":["integer","null"],"format":"int64","description":"The market spread (in hundredths of a basis point, 10_000 hbp = 1%) quoted to the\nuser at submission time, as returned by `/api/quote` (`amm_spread_hbp`).","minimum":0}}},"OrderIntentEip712":{"type":"object","description":"The EIP-712 API wire form of an order intent. Unlike the session-API DTO,\nit carries no spread curve inline. The curve is a required payload-level sibling.","required":["owner","sellToken","buyToken","sellAmount","minBuyAmount","startTime","endTime","partialFill","callData","callDataTarget","salt"],"properties":{"buyToken":{"type":"string","format":"address"},"callData":{"type":"string","format":"bytes"},"callDataTarget":{"type":"string","format":"address"},"endTime":{"type":"integer","format":"uint256","description":"Block timestamp until when the order is valid","minimum":0},"minBuyAmount":{"type":"string","format":"uint256"},"owner":{"type":"string","format":"address"},"partialFill":{"type":"boolean"},"salt":{"type":"string","format":"bytes32","description":"Differentiates orders that are otherwise identical (including their full spread\ncurve); SDKs should randomize it."},"sellAmount":{"type":"string","format":"uint256"},"sellToken":{"type":"string","format":"address"},"startTime":{"type":"integer","format":"uint256","description":"Block timestamp since when the order is valid","minimum":0}}},"SignedPermitDTO":{"type":"object","required":["permit","signature"],"properties":{"permit":{"$ref":"#/components/schemas/PermitSingle"},"signature":{"$ref":"#/components/schemas/PermitSignature"}}},"PermitSingle":{"type":"object","required":["details","spender","sigDeadline"],"properties":{"details":{"$ref":"#/components/schemas/PermitDetails"},"sigDeadline":{"type":"string","format":"uint256"},"spender":{"type":"string","format":"address"}}},"PermitDetails":{"type":"object","required":["token","amount","expiration","nonce"],"properties":{"amount":{"type":"string","format":"uint160"},"expiration":{"type":"integer","format":"uint64","minimum":0},"nonce":{"type":"integer","format":"uint64","minimum":0},"token":{"type":"string","format":"address"}}},"SpreadCurveDto":{"type":"object","description":"Piecewise-linear spread curve. Interior `points` express knot positions as a fraction\nof the order's `[start_time, end_time]` window in basis points (`windowBps`), so the\ncurve is portable across orders of different durations.","required":["startDeltaBps","endDeltaBps"],"properties":{"endDeltaBps":{"type":"integer","format":"int32","description":"Mid-price delta at the order's `end_time`, in basis points."},"points":{"type":"array","items":{"$ref":"#/components/schemas/CurvePointDto"},"description":"Interior knots. Each `windowBps` must lie in `[1, 9_999]` and values must be\nstrictly increasing across `points`. Defaults to `[]` if absent, yielding a single\nlinear segment from `startDeltaBps` to `endDeltaBps`."},"startDeltaBps":{"type":"integer","format":"int32","description":"Mid-price delta at the order's `start_time`, in basis points."}}},"CurvePointDto":{"type":"object","description":"A single interior knot in a [`SpreadCurveDto`].","required":["windowBps","deltaBps"],"properties":{"deltaBps":{"type":"integer","format":"int32","description":"Mid-price delta in basis points at this knot."},"windowBps":{"type":"integer","format":"int32","description":"Knot position as a fraction of the order window in basis points. Must lie in\n`(0, 10_000)` exclusive — `5_000` is the order midpoint.","maximum":9999,"minimum":1}}}}}}
```

## The Eip712RequestBody\_CancelOrderEip712 object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"Eip712RequestBody_CancelOrderEip712":{"type":"object","description":"EIP-712 request body: the semantic payload plus its auth block. The EIP-712\nsignature covers the payload's typed struct together with `nonce` and `deadline`.","required":["payload","auth"],"properties":{"auth":{"$ref":"#/components/schemas/AuthBlock"},"payload":{"type":"object","description":"Inner payload of cancel_order endpoint.","required":["orderHash"],"properties":{"orderHash":{"type":"string","format":"bytes32"}}}}},"AuthBlock":{"type":"object","description":"Auth block carried by every EIP-712 request body.","required":["signer","nonce","deadline","signature"],"properties":{"deadline":{"type":"integer","format":"int64","description":"Unix seconds; not more than `maxSignatureLifetimeS` (from the config endpoint) into the\nfuture.","minimum":0},"nonce":{"type":"string","description":"Random per-request value, unique per signer among un-expired requests."},"signature":{"$ref":"#/components/schemas/PermitSignature"},"signer":{"type":"string","format":"address","description":"Claimed signer. Must match the recovered address."}}},"PermitSignature":{"type":"object","required":["r","s","yParity"],"properties":{"r":{"type":"string","format":"uint256"},"s":{"type":"string","format":"uint256"},"yParity":{"type":"boolean","format":"boolean"}}}}}}
```

## The Eip712RequestBody\_LiquidityIntentsQueryEip712 object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"Eip712RequestBody_LiquidityIntentsQueryEip712":{"type":"object","description":"EIP-712 request body: the semantic payload plus its auth block. The EIP-712\nsignature covers the payload's typed struct together with `nonce` and `deadline`.","required":["payload","auth"],"properties":{"auth":{"$ref":"#/components/schemas/AuthBlock"},"payload":{"type":"object","description":"Inner payload for querying liquidity intents.","properties":{"hashes":{"type":"array","items":{"type":"string","format":"bytes32"},"description":"Intent hashes to look up. Max 30 per request; at least one is required."}}}}},"AuthBlock":{"type":"object","description":"Auth block carried by every EIP-712 request body.","required":["signer","nonce","deadline","signature"],"properties":{"deadline":{"type":"integer","format":"int64","description":"Unix seconds; not more than `maxSignatureLifetimeS` (from the config endpoint) into the\nfuture.","minimum":0},"nonce":{"type":"string","description":"Random per-request value, unique per signer among un-expired requests."},"signature":{"$ref":"#/components/schemas/PermitSignature"},"signer":{"type":"string","format":"address","description":"Claimed signer. Must match the recovered address."}}},"PermitSignature":{"type":"object","required":["r","s","yParity"],"properties":{"r":{"type":"string","format":"uint256"},"s":{"type":"string","format":"uint256"},"yParity":{"type":"boolean","format":"boolean"}}}}}}
```

## The Eip712RequestBody\_OrdersQueryEip712 object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"Eip712RequestBody_OrdersQueryEip712":{"type":"object","description":"EIP-712 request body: the semantic payload plus its auth block. The EIP-712\nsignature covers the payload's typed struct together with `nonce` and `deadline`.","required":["payload","auth"],"properties":{"auth":{"$ref":"#/components/schemas/AuthBlock"},"payload":{"type":"object","description":"Inner payload of GET orders endpoint.\nField semantics mirror the session API's query parameters; zero values mean \"unset\".","properties":{"cursor":{"type":"string","description":"Opaque cursor from a previous response; empty for the first page."},"hashes":{"type":"array","items":{"type":"string","format":"bytes32"},"description":"Direct lookup by order hash. Max 30 per request; pagination is skipped."},"limit":{"type":"integer","format":"int64","description":"Max orders per page; 0 selects the server default, and larger values are capped.","minimum":0},"statuses":{"type":"array","items":{"$ref":"#/components/schemas/OrderStatus"},"description":"Filter by order status. Multiple values are OR'd."}}}}},"AuthBlock":{"type":"object","description":"Auth block carried by every EIP-712 request body.","required":["signer","nonce","deadline","signature"],"properties":{"deadline":{"type":"integer","format":"int64","description":"Unix seconds; not more than `maxSignatureLifetimeS` (from the config endpoint) into the\nfuture.","minimum":0},"nonce":{"type":"string","description":"Random per-request value, unique per signer among un-expired requests."},"signature":{"$ref":"#/components/schemas/PermitSignature"},"signer":{"type":"string","format":"address","description":"Claimed signer. Must match the recovered address."}}},"PermitSignature":{"type":"object","required":["r","s","yParity"],"properties":{"r":{"type":"string","format":"uint256"},"s":{"type":"string","format":"uint256"},"yParity":{"type":"boolean","format":"boolean"}}},"OrderStatus":{"type":"string","enum":["Active","Invalid","Expired","Filled","PendingCancellation","Canceled","Incompatible"]}}}}
```

## The Eip712RequestBody\_RemoveLiquidityEip712 object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"Eip712RequestBody_RemoveLiquidityEip712":{"type":"object","description":"EIP-712 request body: the semantic payload plus its auth block. The EIP-712\nsignature covers the payload's typed struct together with `nonce` and `deadline`.","required":["payload","auth"],"properties":{"auth":{"$ref":"#/components/schemas/AuthBlock"},"payload":{"allOf":[{"$ref":"#/components/schemas/RemoveLiquidity"}],"description":"Inner payload of remove_liquidity endpoint."}}},"AuthBlock":{"type":"object","description":"Auth block carried by every EIP-712 request body.","required":["signer","nonce","deadline","signature"],"properties":{"deadline":{"type":"integer","format":"int64","description":"Unix seconds; not more than `maxSignatureLifetimeS` (from the config endpoint) into the\nfuture.","minimum":0},"nonce":{"type":"string","description":"Random per-request value, unique per signer among un-expired requests."},"signature":{"$ref":"#/components/schemas/PermitSignature"},"signer":{"type":"string","format":"address","description":"Claimed signer. Must match the recovered address."}}},"PermitSignature":{"type":"object","required":["r","s","yParity"],"properties":{"r":{"type":"string","format":"uint256"},"s":{"type":"string","format":"uint256"},"yParity":{"type":"boolean","format":"boolean"}}},"RemoveLiquidity":{"type":"object","description":"Represents a liquidity removal with SignatureTransfer permit functionality.\n\nThis struct encapsulates all necessary information needed to submit a new intent to remove\nliquidity to the system, including the intent and SignatureTransfer permit data for approvals.\nUser authentication is handled via session-based SIWE verification.\n\n# Fields\n* `remove_liquidity` The intent to remove liquidity\n* `permit_lp_token` The SignatureTransfer permit and signature for the LP token","required":["removeLiquidity","permitLpToken"],"properties":{"permitLpToken":{"$ref":"#/components/schemas/SignedSignatureTransferDTO"},"removeLiquidity":{"$ref":"#/components/schemas/RemoveLiquidityIntent"}}},"SignedSignatureTransferDTO":{"type":"object","description":"Signed single SignatureTransfer permit (for remove liquidity LP token transfer)","required":["permit","signature"],"properties":{"permit":{"$ref":"#/components/schemas/PermitTransferFrom"},"signature":{"$ref":"#/components/schemas/PermitSignature"}}},"PermitTransferFrom":{"type":"object","description":"DTO for ISignatureTransfer.PermitTransferFrom - single token transfer authorization","required":["permitted","nonce","deadline"],"properties":{"deadline":{"type":"string","format":"uint256"},"nonce":{"type":"string","format":"uint256"},"permitted":{"$ref":"#/components/schemas/TokenPermissions"}}},"TokenPermissions":{"type":"object","description":"Token permissions for ISignatureTransfer permits.\nUsed in PermitTransferFrom and PermitBatchTransferFrom.","required":["token","amount"],"properties":{"amount":{"type":"string","format":"uint256","description":"The maximum amount that can be transferred"},"token":{"type":"string","format":"address","description":"The token address"}}},"RemoveLiquidityIntent":{"type":"object","required":["owner","token0","token1","fee","lpToken","lpTokenAmount","salt"],"properties":{"fee":{"type":"integer","format":"uint32","description":"The fee for the pool","minimum":0},"lpToken":{"type":"string","format":"address","description":"The LP token of the pool"},"lpTokenAmount":{"type":"string","format":"uint256","description":"The amount of LP tokens to burn"},"owner":{"type":"string","format":"address","description":"The address of the user submitting the intent"},"salt":{"type":"string","format":"bytes32","description":"Used to differentiate between intents with the same parameters"},"token0":{"type":"string","format":"address","description":"The token0 of the pool. Tokens must be sorted ascending by address so that\n`token0 < token1`; unordered intents are rejected."},"token1":{"type":"string","format":"address","description":"The token1 of the pool. Must be greater than `token0` (see `token0`)."}}}}}}
```

## The ErrorResponsePayload object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"ErrorResponsePayload":{"type":"object","description":"Structured error response returned by the API","required":["code","message"],"properties":{"code":{"type":"string","description":"Error code in SNAKE_CASE format"},"inner":{"type":["array","null"],"items":{"$ref":"#/components/schemas/InnerErrorResponsePayload"},"description":"Optional array of nested errors (only present for validation errors)"},"message":{"type":"string","description":"Human-readable error message"}}},"InnerErrorResponsePayload":{"type":"object","description":"Individual error within a validation error response","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}
```

## The GetLiquidityIntentStates object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"GetLiquidityIntentStates":{"type":"object","required":["intentHashes"],"properties":{"intentHashes":{"type":"array","items":{"type":"string","format":"bytes32"}}}}}}}
```

## The GetOrderStates object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"GetOrderStates":{"type":"object","required":["orderHashes"],"properties":{"orderHashes":{"type":"array","items":{"type":"string","format":"bytes32"}}}}}}}
```

## The GetOrderStatus object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"GetOrderStatus":{"type":"object","required":["orderHash"],"properties":{"orderHash":{"type":"string","format":"bytes32"}}}}}}
```

## The InnerErrorResponsePayload object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"InnerErrorResponsePayload":{"type":"object","description":"Individual error within a validation error response","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}
```

## The LiquidityIntentState object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"LiquidityIntentState":{"type":"object","required":["hash","intent","status"],"properties":{"hash":{"type":"string","format":"bytes32"},"intent":{"type":"object"},"status":{"$ref":"#/components/schemas/LiquidityIntentStatus"}}},"LiquidityIntentStatus":{"type":"string","enum":["Pending","Invalid","Expired","Executed","PendingCancellation","Canceled"]}}}}
```

## The LiquidityIntentStatus object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"LiquidityIntentStatus":{"type":"string","enum":["Pending","Invalid","Expired","Executed","PendingCancellation","Canceled"]}}}}
```

## The LiquidityIntentsQueryEip712 object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"LiquidityIntentsQueryEip712":{"type":"object","description":"Inner payload for querying liquidity intents.","properties":{"hashes":{"type":"array","items":{"type":"string","format":"bytes32"},"description":"Intent hashes to look up. Max 30 per request; at least one is required."}}}}}}
```

## The MeResponse object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"MeResponse":{"type":"object","required":["address","authenticated"],"properties":{"address":{"type":"string","format":"address"},"authenticated":{"type":"boolean"}}}}}}
```

## The MidPrice object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"MidPrice":{"type":"object","description":"Reference midprice for a token pair, expressed as the rational\n`numerator / denominator` in atomic units (buy-wei per sell-wei).","required":["numerator","denominator"],"properties":{"denominator":{"type":"string","format":"uint256"},"numerator":{"type":"string","format":"uint256"}}}}}}
```

## The OracleFeed object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"OracleFeed":{"oneOf":[{"type":"object","description":"Binance WebSocket depth feed.","required":["ticker_symbol"],"properties":{"ticker_symbol":{"type":"string"}}},{"type":"object","description":"Coinbase WebSocket feed.","required":["product_id"],"properties":{"product_id":{"type":"string"}}},{"type":"object","description":"Kraken WebSocket feed.","required":["wsname"],"properties":{"wsname":{"type":"string"}}},{"type":"object","description":"Lighter WebSocket feed.","required":["market_id","symbol"],"properties":{"market_id":{"type":"string"},"symbol":{"type":"string"}}},{"type":"object","description":"Hyperliquid WebSocket feed.","required":["coin"],"properties":{"coin":{"type":"string"}}},{"type":"object","description":"Bitget WebSocket feed.","required":["symbol"],"properties":{"symbol":{"type":"string"}}}],"description":"OpenAPI schema for an oracle feed entry.\n\nThe wire format flattens the oracle configuration: the map key in\n`TokenInfo.oracles` identifies the oracle (e.g. `binance`, `kraken`),\nand the value carries only the provider-specific fields — the internal\n`type` discriminator is stripped by `serialize_feeds`.\n\nThis type is documentation-only: runtime (de)serialization goes through\n[`ExchangeFeedInfo`]. The `#[serde(untagged)]` attribute here merely keeps\n`ToSchema` output consistent with the flat wire shape."}}}}
```

## The OrderAnnotations object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"OrderAnnotations":{"type":"object","description":"Additional data attached to an order, provided by the user. Purely informational —\nnot part of the signed order and not used by the protocol.","properties":{"spreadAtSubmissionHbp":{"type":["integer","null"],"format":"int64","description":"The market spread (in hundredths of a basis point, 10_000 hbp = 1%) quoted to the\nuser at submission time, as returned by `/api/quote` (`amm_spread_hbp`).","minimum":0}}}}}}
```

## The OrderDetails object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"OrderDetails":{"type":"object","description":"Display subset of an `Order`, copied verbatim onto `OrderState` at insertion time.\n\nCarrying these fields on the state record keeps display detail available even after the\nunderlying `Order` is dropped at terminal-status transition.","required":["sellToken","buyToken","sellAmount","limitPrice","startTime","endTime","spreadCurve","createdTimestamp"],"properties":{"annotations":{"$ref":"#/components/schemas/OrderAnnotations","description":"User-provided annotations, snapshotted at insertion. Defaults for order\nhistory entries persisted before annotations existed."},"buyToken":{"type":"string","format":"address"},"createdTimestamp":{"type":"string","format":"date-time"},"endTime":{"type":"string","format":"uint256"},"limitPrice":{"type":"object"},"sellAmount":{"type":"string","format":"uint256"},"sellToken":{"type":"string","format":"address"},"spreadCurve":{"$ref":"#/components/schemas/SpreadCurve","description":"Piecewise-linear curve defining the allowed mid-price deviation over the order\nwindow. Snapshotted from the submitted [`Order`] at insertion so the curve remains\navailable after the underlying `Order` is dropped."},"startTime":{"type":"string","format":"uint256"}}},"OrderAnnotations":{"type":"object","description":"Additional data attached to an order, provided by the user. Purely informational —\nnot part of the signed order and not used by the protocol.","properties":{"spreadAtSubmissionHbp":{"type":["integer","null"],"format":"int64","description":"The market spread (in hundredths of a basis point, 10_000 hbp = 1%) quoted to the\nuser at submission time, as returned by `/api/quote` (`amm_spread_hbp`).","minimum":0}}},"SpreadCurve":{"type":"object","description":"A piecewise-linear curve mapping wall-clock time to a mid-price delta in basis points.\n\nThe curve carries its own `[start_secs, end_secs]` window: the order's `start_time`\nand `end_time` must match these for validation to succeed (enforced at the API layer).\nBetween interior knots, `delta_bps` is interpolated linearly using i64 arithmetic.\nOutside the curve window the value clamps to `start_delta_bps` / `end_delta_bps`.","required":["startSecs","endSecs","startDeltaBps","endDeltaBps","points"],"properties":{"endDeltaBps":{"type":"integer","format":"int32"},"endSecs":{"type":"integer","format":"int64","minimum":0},"points":{"type":"array","items":{"$ref":"#/components/schemas/CurvePoint"}},"startDeltaBps":{"type":"integer","format":"int32"},"startSecs":{"type":"integer","format":"int64","minimum":0}}},"CurvePoint":{"type":"object","description":"A single knot in a [`SpreadCurve`], binding a wall-clock time to a delta in basis points.","required":["timeSecs","deltaBps"],"properties":{"deltaBps":{"type":"integer","format":"int32"},"timeSecs":{"type":"integer","format":"int64","minimum":0}}}}}}
```

## The OrderExecution object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"OrderExecution":{"type":"object","required":["blockNumber","soldAmount","boughtAmount","surplusBuyAmount"],"properties":{"batchId":{"type":["integer","null"],"format":"int64","minimum":0},"blockNumber":{"type":"integer","format":"int64","minimum":0},"boughtAmount":{"type":"string","format":"uint256"},"midPrice":{"type":"object","description":"Mid-price for the order's (sell → buy) pair at the clearing batch."},"soldAmount":{"type":"string","format":"uint256"},"surplusBuyAmount":{"type":"string","format":"uint256"},"txHash":{"type":["string","null"],"format":"bytes32"}}}}}}
```

## The OrderIntent object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"OrderIntent":{"type":"object","description":"The swap intent for a user","required":["owner","sellToken","buyToken","sellAmount","minBuyAmount","spreadCurve","startTime","endTime","partialFill","callData","callDataTarget","calldataSellAmountOffset","calldataBuyAmountOffset","salt"],"properties":{"buyToken":{"type":"string","format":"address","description":"The token being bought"},"callData":{"type":"string","format":"bytes","description":"Optional call data for smart orders, allowing custom routing"},"callDataTarget":{"type":"string","format":"address","description":"The address of the target contract for the calldata"},"calldataBuyAmountOffset":{"type":"integer","format":"uint64","description":"The offset of the buy amount in the calldata\nIf Some, used to update the calldata with the actual buy amount","minimum":0},"calldataSellAmountOffset":{"type":"integer","format":"uint64","description":"The offset of the sell amount in the calldata\nIf Some, used to update the calldata with the actual sell amount","minimum":0},"endTime":{"type":"integer","format":"uint256","description":"Block timestamp until when the order is valid.","minimum":0},"minBuyAmount":{"type":"string","format":"uint256","description":"The minimum amount of tokens being bought, effectively defining limit price."},"owner":{"type":"string","format":"address","description":"The address of the user submitting the order"},"partialFill":{"type":"boolean","format":"boolean","description":"Flag allowing partial fills"},"salt":{"type":"string","format":"bytes32","description":"The offset of the buy amount in the calldata\nUsed to differentiate between orders with the same parameters"},"sellAmount":{"type":"string","format":"uint196","description":"The amount of tokens being sold"},"sellToken":{"type":"string","format":"address","description":"The token being sold"},"spreadCurve":{"$ref":"#/components/schemas/SpreadCurveDto","description":"A piecewise-linear spread curve mapping a fraction of the order window to a mid-price\ndelta in basis points. Each interior point's `windowBps` is a fraction of the order\nduration in basis points (5_000 = halfway)."},"startTime":{"type":"integer","format":"uint256","description":"Block timestamp since when the order is valid","minimum":0}}},"SpreadCurveDto":{"type":"object","description":"Piecewise-linear spread curve. Interior `points` express knot positions as a fraction\nof the order's `[start_time, end_time]` window in basis points (`windowBps`), so the\ncurve is portable across orders of different durations.","required":["startDeltaBps","endDeltaBps"],"properties":{"endDeltaBps":{"type":"integer","format":"int32","description":"Mid-price delta at the order's `end_time`, in basis points."},"points":{"type":"array","items":{"$ref":"#/components/schemas/CurvePointDto"},"description":"Interior knots. Each `windowBps` must lie in `[1, 9_999]` and values must be\nstrictly increasing across `points`. Defaults to `[]` if absent, yielding a single\nlinear segment from `startDeltaBps` to `endDeltaBps`."},"startDeltaBps":{"type":"integer","format":"int32","description":"Mid-price delta at the order's `start_time`, in basis points."}}},"CurvePointDto":{"type":"object","description":"A single interior knot in a [`SpreadCurveDto`].","required":["windowBps","deltaBps"],"properties":{"deltaBps":{"type":"integer","format":"int32","description":"Mid-price delta in basis points at this knot."},"windowBps":{"type":"integer","format":"int32","description":"Knot position as a fraction of the order window in basis points. Must lie in\n`(0, 10_000)` exclusive — `5_000` is the order midpoint.","maximum":9999,"minimum":1}}}}}}
```

## The OrderIntentEip712 object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"OrderIntentEip712":{"type":"object","description":"The EIP-712 API wire form of an order intent. Unlike the session-API DTO,\nit carries no spread curve inline. The curve is a required payload-level sibling.","required":["owner","sellToken","buyToken","sellAmount","minBuyAmount","startTime","endTime","partialFill","callData","callDataTarget","salt"],"properties":{"buyToken":{"type":"string","format":"address"},"callData":{"type":"string","format":"bytes"},"callDataTarget":{"type":"string","format":"address"},"endTime":{"type":"integer","format":"uint256","description":"Block timestamp until when the order is valid","minimum":0},"minBuyAmount":{"type":"string","format":"uint256"},"owner":{"type":"string","format":"address"},"partialFill":{"type":"boolean"},"salt":{"type":"string","format":"bytes32","description":"Differentiates orders that are otherwise identical (including their full spread\ncurve); SDKs should randomize it."},"sellAmount":{"type":"string","format":"uint256"},"sellToken":{"type":"string","format":"address"},"startTime":{"type":"integer","format":"uint256","description":"Block timestamp since when the order is valid","minimum":0}}}}}}
```

## The OrderState object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"OrderState":{"type":"object","required":["hash","owner","status","execution","orderDetails"],"properties":{"execution":{"type":"array","items":{"$ref":"#/components/schemas/OrderExecution"}},"hash":{"type":"string","format":"bytes32"},"orderDetails":{"$ref":"#/components/schemas/OrderDetails"},"owner":{"type":"string","format":"address"},"status":{"$ref":"#/components/schemas/OrderStatus"}}},"OrderExecution":{"type":"object","required":["blockNumber","soldAmount","boughtAmount","surplusBuyAmount"],"properties":{"batchId":{"type":["integer","null"],"format":"int64","minimum":0},"blockNumber":{"type":"integer","format":"int64","minimum":0},"boughtAmount":{"type":"string","format":"uint256"},"midPrice":{"type":"object","description":"Mid-price for the order's (sell → buy) pair at the clearing batch."},"soldAmount":{"type":"string","format":"uint256"},"surplusBuyAmount":{"type":"string","format":"uint256"},"txHash":{"type":["string","null"],"format":"bytes32"}}},"OrderDetails":{"type":"object","description":"Display subset of an `Order`, copied verbatim onto `OrderState` at insertion time.\n\nCarrying these fields on the state record keeps display detail available even after the\nunderlying `Order` is dropped at terminal-status transition.","required":["sellToken","buyToken","sellAmount","limitPrice","startTime","endTime","spreadCurve","createdTimestamp"],"properties":{"annotations":{"$ref":"#/components/schemas/OrderAnnotations","description":"User-provided annotations, snapshotted at insertion. Defaults for order\nhistory entries persisted before annotations existed."},"buyToken":{"type":"string","format":"address"},"createdTimestamp":{"type":"string","format":"date-time"},"endTime":{"type":"string","format":"uint256"},"limitPrice":{"type":"object"},"sellAmount":{"type":"string","format":"uint256"},"sellToken":{"type":"string","format":"address"},"spreadCurve":{"$ref":"#/components/schemas/SpreadCurve","description":"Piecewise-linear curve defining the allowed mid-price deviation over the order\nwindow. Snapshotted from the submitted [`Order`] at insertion so the curve remains\navailable after the underlying `Order` is dropped."},"startTime":{"type":"string","format":"uint256"}}},"OrderAnnotations":{"type":"object","description":"Additional data attached to an order, provided by the user. Purely informational —\nnot part of the signed order and not used by the protocol.","properties":{"spreadAtSubmissionHbp":{"type":["integer","null"],"format":"int64","description":"The market spread (in hundredths of a basis point, 10_000 hbp = 1%) quoted to the\nuser at submission time, as returned by `/api/quote` (`amm_spread_hbp`).","minimum":0}}},"SpreadCurve":{"type":"object","description":"A piecewise-linear curve mapping wall-clock time to a mid-price delta in basis points.\n\nThe curve carries its own `[start_secs, end_secs]` window: the order's `start_time`\nand `end_time` must match these for validation to succeed (enforced at the API layer).\nBetween interior knots, `delta_bps` is interpolated linearly using i64 arithmetic.\nOutside the curve window the value clamps to `start_delta_bps` / `end_delta_bps`.","required":["startSecs","endSecs","startDeltaBps","endDeltaBps","points"],"properties":{"endDeltaBps":{"type":"integer","format":"int32"},"endSecs":{"type":"integer","format":"int64","minimum":0},"points":{"type":"array","items":{"$ref":"#/components/schemas/CurvePoint"}},"startDeltaBps":{"type":"integer","format":"int32"},"startSecs":{"type":"integer","format":"int64","minimum":0}}},"CurvePoint":{"type":"object","description":"A single knot in a [`SpreadCurve`], binding a wall-clock time to a delta in basis points.","required":["timeSecs","deltaBps"],"properties":{"deltaBps":{"type":"integer","format":"int32"},"timeSecs":{"type":"integer","format":"int64","minimum":0}}},"OrderStatus":{"type":"string","enum":["Active","Invalid","Expired","Filled","PendingCancellation","Canceled","Incompatible"]}}}}
```

## The OrderStatus object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"OrderStatus":{"type":"string","enum":["Active","Invalid","Expired","Filled","PendingCancellation","Canceled","Incompatible"]}}}}
```

## The OrdersQueryEip712 object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"OrdersQueryEip712":{"type":"object","description":"Inner payload of GET orders endpoint.\nField semantics mirror the session API's query parameters; zero values mean \"unset\".","properties":{"cursor":{"type":"string","description":"Opaque cursor from a previous response; empty for the first page."},"hashes":{"type":"array","items":{"type":"string","format":"bytes32"},"description":"Direct lookup by order hash. Max 30 per request; pagination is skipped."},"limit":{"type":"integer","format":"int64","description":"Max orders per page; 0 selects the server default, and larger values are capped.","minimum":0},"statuses":{"type":"array","items":{"$ref":"#/components/schemas/OrderStatus"},"description":"Filter by order status. Multiple values are OR'd."}}},"OrderStatus":{"type":"string","enum":["Active","Invalid","Expired","Filled","PendingCancellation","Canceled","Incompatible"]}}}}
```

## The OrdersResponse object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"OrdersResponse":{"type":"object","description":"Response body for `GET /api/orders`.","required":["orders","hasMore"],"properties":{"cursor":{"type":["string","null"],"description":"Opaque token to pass back as `cursor` in the next request. `null` on the last page."},"hasMore":{"type":"boolean","description":"Mirrors `cursor.is_some()`."},"orders":{"type":"array","items":{"$ref":"#/components/schemas/OrderState"}}}},"OrderState":{"type":"object","required":["hash","owner","status","execution","orderDetails"],"properties":{"execution":{"type":"array","items":{"$ref":"#/components/schemas/OrderExecution"}},"hash":{"type":"string","format":"bytes32"},"orderDetails":{"$ref":"#/components/schemas/OrderDetails"},"owner":{"type":"string","format":"address"},"status":{"$ref":"#/components/schemas/OrderStatus"}}},"OrderExecution":{"type":"object","required":["blockNumber","soldAmount","boughtAmount","surplusBuyAmount"],"properties":{"batchId":{"type":["integer","null"],"format":"int64","minimum":0},"blockNumber":{"type":"integer","format":"int64","minimum":0},"boughtAmount":{"type":"string","format":"uint256"},"midPrice":{"type":"object","description":"Mid-price for the order's (sell → buy) pair at the clearing batch."},"soldAmount":{"type":"string","format":"uint256"},"surplusBuyAmount":{"type":"string","format":"uint256"},"txHash":{"type":["string","null"],"format":"bytes32"}}},"OrderDetails":{"type":"object","description":"Display subset of an `Order`, copied verbatim onto `OrderState` at insertion time.\n\nCarrying these fields on the state record keeps display detail available even after the\nunderlying `Order` is dropped at terminal-status transition.","required":["sellToken","buyToken","sellAmount","limitPrice","startTime","endTime","spreadCurve","createdTimestamp"],"properties":{"annotations":{"$ref":"#/components/schemas/OrderAnnotations","description":"User-provided annotations, snapshotted at insertion. Defaults for order\nhistory entries persisted before annotations existed."},"buyToken":{"type":"string","format":"address"},"createdTimestamp":{"type":"string","format":"date-time"},"endTime":{"type":"string","format":"uint256"},"limitPrice":{"type":"object"},"sellAmount":{"type":"string","format":"uint256"},"sellToken":{"type":"string","format":"address"},"spreadCurve":{"$ref":"#/components/schemas/SpreadCurve","description":"Piecewise-linear curve defining the allowed mid-price deviation over the order\nwindow. Snapshotted from the submitted [`Order`] at insertion so the curve remains\navailable after the underlying `Order` is dropped."},"startTime":{"type":"string","format":"uint256"}}},"OrderAnnotations":{"type":"object","description":"Additional data attached to an order, provided by the user. Purely informational —\nnot part of the signed order and not used by the protocol.","properties":{"spreadAtSubmissionHbp":{"type":["integer","null"],"format":"int64","description":"The market spread (in hundredths of a basis point, 10_000 hbp = 1%) quoted to the\nuser at submission time, as returned by `/api/quote` (`amm_spread_hbp`).","minimum":0}}},"SpreadCurve":{"type":"object","description":"A piecewise-linear curve mapping wall-clock time to a mid-price delta in basis points.\n\nThe curve carries its own `[start_secs, end_secs]` window: the order's `start_time`\nand `end_time` must match these for validation to succeed (enforced at the API layer).\nBetween interior knots, `delta_bps` is interpolated linearly using i64 arithmetic.\nOutside the curve window the value clamps to `start_delta_bps` / `end_delta_bps`.","required":["startSecs","endSecs","startDeltaBps","endDeltaBps","points"],"properties":{"endDeltaBps":{"type":"integer","format":"int32"},"endSecs":{"type":"integer","format":"int64","minimum":0},"points":{"type":"array","items":{"$ref":"#/components/schemas/CurvePoint"}},"startDeltaBps":{"type":"integer","format":"int32"},"startSecs":{"type":"integer","format":"int64","minimum":0}}},"CurvePoint":{"type":"object","description":"A single knot in a [`SpreadCurve`], binding a wall-clock time to a delta in basis points.","required":["timeSecs","deltaBps"],"properties":{"deltaBps":{"type":"integer","format":"int32"},"timeSecs":{"type":"integer","format":"int64","minimum":0}}},"OrderStatus":{"type":"string","enum":["Active","Invalid","Expired","Filled","PendingCancellation","Canceled","Incompatible"]}}}}
```

## The PermitBatchTransferFrom object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"PermitBatchTransferFrom":{"type":"object","description":"DTO for ISignatureTransfer.PermitBatchTransferFrom - batch token transfer authorization","required":["permitted","nonce","deadline"],"properties":{"deadline":{"type":"string","format":"uint256"},"nonce":{"type":"string","format":"uint256"},"permitted":{"type":"array","items":{"$ref":"#/components/schemas/TokenPermissions"}}}},"TokenPermissions":{"type":"object","description":"Token permissions for ISignatureTransfer permits.\nUsed in PermitTransferFrom and PermitBatchTransferFrom.","required":["token","amount"],"properties":{"amount":{"type":"string","format":"uint256","description":"The maximum amount that can be transferred"},"token":{"type":"string","format":"address","description":"The token address"}}}}}}
```

## The PermitDetails object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"PermitDetails":{"type":"object","required":["token","amount","expiration","nonce"],"properties":{"amount":{"type":"string","format":"uint160"},"expiration":{"type":"integer","format":"uint64","minimum":0},"nonce":{"type":"integer","format":"uint64","minimum":0},"token":{"type":"string","format":"address"}}}}}}
```

## The PermitSignature object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"PermitSignature":{"type":"object","required":["r","s","yParity"],"properties":{"r":{"type":"string","format":"uint256"},"s":{"type":"string","format":"uint256"},"yParity":{"type":"boolean","format":"boolean"}}}}}}
```

## The PermitSingle object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"PermitSingle":{"type":"object","required":["details","spender","sigDeadline"],"properties":{"details":{"$ref":"#/components/schemas/PermitDetails"},"sigDeadline":{"type":"string","format":"uint256"},"spender":{"type":"string","format":"address"}}},"PermitDetails":{"type":"object","required":["token","amount","expiration","nonce"],"properties":{"amount":{"type":"string","format":"uint160"},"expiration":{"type":"integer","format":"uint64","minimum":0},"nonce":{"type":"integer","format":"uint64","minimum":0},"token":{"type":"string","format":"address"}}}}}}
```

## The PermitTransferFrom object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"PermitTransferFrom":{"type":"object","description":"DTO for ISignatureTransfer.PermitTransferFrom - single token transfer authorization","required":["permitted","nonce","deadline"],"properties":{"deadline":{"type":"string","format":"uint256"},"nonce":{"type":"string","format":"uint256"},"permitted":{"$ref":"#/components/schemas/TokenPermissions"}}},"TokenPermissions":{"type":"object","description":"Token permissions for ISignatureTransfer permits.\nUsed in PermitTransferFrom and PermitBatchTransferFrom.","required":["token","amount"],"properties":{"amount":{"type":"string","format":"uint256","description":"The maximum amount that can be transferred"},"token":{"type":"string","format":"address","description":"The token address"}}}}}}
```

## The QuoteFee object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"QuoteFee":{"type":"object","description":"Protocol fee for a quoted trade.\n\n`total_amount` is in `buy_token` atomic units, computed against the\ngross `buy_amount` Fynd quoted.","required":["totalHbp","totalAmount"],"properties":{"totalAmount":{"type":"string","format":"uint256","description":"Absolute fee in `buy_token` atomic units."},"totalHbp":{"type":"integer","format":"int64","description":"Sum of fee components in hundredths of a basis point. 10_000 hbp = 1%.","minimum":0}}}}}}
```

## The QuoteRequest object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"QuoteRequest":{"type":"object","description":"Minimal inputs for a Fynd passthrough quote.","required":["sellToken","buyToken","sellAmount"],"properties":{"buyToken":{"type":"string","format":"address"},"sellAmount":{"type":"string","format":"uint256"},"sellToken":{"type":"string","format":"address"}}}}}}
```

## The QuoteResponse object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"QuoteResponse":{"type":"object","description":"Pared-down Fynd quote: amounts, gas, and a reference midprice.","required":["sellToken","buyToken","sellAmount","buyAmount","ammSpreadHbp","spread","midPrice","fee"],"properties":{"ammSpreadHbp":{"type":"integer","format":"int64","description":"DEX-derived spread in hundredths of a basis point. 10_000 hbp = 1%.\nDeprecated: use `spread` instead.","minimum":0},"buyAmount":{"type":"string","format":"uint256"},"buyToken":{"type":"string","format":"address"},"fee":{"$ref":"#/components/schemas/QuoteFee","description":"Protocol fee for this trade."},"midPrice":{"$ref":"#/components/schemas/MidPrice","description":"Oracle-aggregated reference midprice for `sell_token → buy_token`."},"sellAmount":{"type":"string","format":"uint256"},"sellToken":{"type":"string","format":"address"},"spread":{"$ref":"#/components/schemas/QuoteResponseSpread"}}},"QuoteFee":{"type":"object","description":"Protocol fee for a quoted trade.\n\n`total_amount` is in `buy_token` atomic units, computed against the\ngross `buy_amount` Fynd quoted.","required":["totalHbp","totalAmount"],"properties":{"totalAmount":{"type":"string","format":"uint256","description":"Absolute fee in `buy_token` atomic units."},"totalHbp":{"type":"integer","format":"int64","description":"Sum of fee components in hundredths of a basis point. 10_000 hbp = 1%.","minimum":0}}},"MidPrice":{"type":"object","description":"Reference midprice for a token pair, expressed as the rational\n`numerator / denominator` in atomic units (buy-wei per sell-wei).","required":["numerator","denominator"],"properties":{"denominator":{"type":"string","format":"uint256"},"numerator":{"type":"string","format":"uint256"}}},"QuoteResponseSpread":{"type":"object","required":["ammSpreadHbp","gasHbp"],"properties":{"ammSpreadHbp":{"type":"integer","format":"int64","description":"DEX-derived spread in hundredths of a basis point. 10_000 hbp = 1%.","minimum":0},"gasHbp":{"type":"integer","format":"int64","description":"Extra spread due to gas cost. Add to `amm_spread_hbp` to get the spread accounting for gas.","minimum":0}}}}}}
```

## The QuoteResponseSpread object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"QuoteResponseSpread":{"type":"object","required":["ammSpreadHbp","gasHbp"],"properties":{"ammSpreadHbp":{"type":"integer","format":"int64","description":"DEX-derived spread in hundredths of a basis point. 10_000 hbp = 1%.","minimum":0},"gasHbp":{"type":"integer","format":"int64","description":"Extra spread due to gas cost. Add to `amm_spread_hbp` to get the spread accounting for gas.","minimum":0}}}}}}
```

## The RemoveLiquidity object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"RemoveLiquidity":{"type":"object","description":"Represents a liquidity removal with SignatureTransfer permit functionality.\n\nThis struct encapsulates all necessary information needed to submit a new intent to remove\nliquidity to the system, including the intent and SignatureTransfer permit data for approvals.\nUser authentication is handled via session-based SIWE verification.\n\n# Fields\n* `remove_liquidity` The intent to remove liquidity\n* `permit_lp_token` The SignatureTransfer permit and signature for the LP token","required":["removeLiquidity","permitLpToken"],"properties":{"permitLpToken":{"$ref":"#/components/schemas/SignedSignatureTransferDTO"},"removeLiquidity":{"$ref":"#/components/schemas/RemoveLiquidityIntent"}}},"SignedSignatureTransferDTO":{"type":"object","description":"Signed single SignatureTransfer permit (for remove liquidity LP token transfer)","required":["permit","signature"],"properties":{"permit":{"$ref":"#/components/schemas/PermitTransferFrom"},"signature":{"$ref":"#/components/schemas/PermitSignature"}}},"PermitTransferFrom":{"type":"object","description":"DTO for ISignatureTransfer.PermitTransferFrom - single token transfer authorization","required":["permitted","nonce","deadline"],"properties":{"deadline":{"type":"string","format":"uint256"},"nonce":{"type":"string","format":"uint256"},"permitted":{"$ref":"#/components/schemas/TokenPermissions"}}},"TokenPermissions":{"type":"object","description":"Token permissions for ISignatureTransfer permits.\nUsed in PermitTransferFrom and PermitBatchTransferFrom.","required":["token","amount"],"properties":{"amount":{"type":"string","format":"uint256","description":"The maximum amount that can be transferred"},"token":{"type":"string","format":"address","description":"The token address"}}},"PermitSignature":{"type":"object","required":["r","s","yParity"],"properties":{"r":{"type":"string","format":"uint256"},"s":{"type":"string","format":"uint256"},"yParity":{"type":"boolean","format":"boolean"}}},"RemoveLiquidityIntent":{"type":"object","required":["owner","token0","token1","fee","lpToken","lpTokenAmount","salt"],"properties":{"fee":{"type":"integer","format":"uint32","description":"The fee for the pool","minimum":0},"lpToken":{"type":"string","format":"address","description":"The LP token of the pool"},"lpTokenAmount":{"type":"string","format":"uint256","description":"The amount of LP tokens to burn"},"owner":{"type":"string","format":"address","description":"The address of the user submitting the intent"},"salt":{"type":"string","format":"bytes32","description":"Used to differentiate between intents with the same parameters"},"token0":{"type":"string","format":"address","description":"The token0 of the pool. Tokens must be sorted ascending by address so that\n`token0 < token1`; unordered intents are rejected."},"token1":{"type":"string","format":"address","description":"The token1 of the pool. Must be greater than `token0` (see `token0`)."}}}}}}
```

## The RemoveLiquidityEip712 object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"RemoveLiquidityEip712":{"allOf":[{"$ref":"#/components/schemas/RemoveLiquidity"}],"description":"Inner payload of remove_liquidity endpoint."},"RemoveLiquidity":{"type":"object","description":"Represents a liquidity removal with SignatureTransfer permit functionality.\n\nThis struct encapsulates all necessary information needed to submit a new intent to remove\nliquidity to the system, including the intent and SignatureTransfer permit data for approvals.\nUser authentication is handled via session-based SIWE verification.\n\n# Fields\n* `remove_liquidity` The intent to remove liquidity\n* `permit_lp_token` The SignatureTransfer permit and signature for the LP token","required":["removeLiquidity","permitLpToken"],"properties":{"permitLpToken":{"$ref":"#/components/schemas/SignedSignatureTransferDTO"},"removeLiquidity":{"$ref":"#/components/schemas/RemoveLiquidityIntent"}}},"SignedSignatureTransferDTO":{"type":"object","description":"Signed single SignatureTransfer permit (for remove liquidity LP token transfer)","required":["permit","signature"],"properties":{"permit":{"$ref":"#/components/schemas/PermitTransferFrom"},"signature":{"$ref":"#/components/schemas/PermitSignature"}}},"PermitTransferFrom":{"type":"object","description":"DTO for ISignatureTransfer.PermitTransferFrom - single token transfer authorization","required":["permitted","nonce","deadline"],"properties":{"deadline":{"type":"string","format":"uint256"},"nonce":{"type":"string","format":"uint256"},"permitted":{"$ref":"#/components/schemas/TokenPermissions"}}},"TokenPermissions":{"type":"object","description":"Token permissions for ISignatureTransfer permits.\nUsed in PermitTransferFrom and PermitBatchTransferFrom.","required":["token","amount"],"properties":{"amount":{"type":"string","format":"uint256","description":"The maximum amount that can be transferred"},"token":{"type":"string","format":"address","description":"The token address"}}},"PermitSignature":{"type":"object","required":["r","s","yParity"],"properties":{"r":{"type":"string","format":"uint256"},"s":{"type":"string","format":"uint256"},"yParity":{"type":"boolean","format":"boolean"}}},"RemoveLiquidityIntent":{"type":"object","required":["owner","token0","token1","fee","lpToken","lpTokenAmount","salt"],"properties":{"fee":{"type":"integer","format":"uint32","description":"The fee for the pool","minimum":0},"lpToken":{"type":"string","format":"address","description":"The LP token of the pool"},"lpTokenAmount":{"type":"string","format":"uint256","description":"The amount of LP tokens to burn"},"owner":{"type":"string","format":"address","description":"The address of the user submitting the intent"},"salt":{"type":"string","format":"bytes32","description":"Used to differentiate between intents with the same parameters"},"token0":{"type":"string","format":"address","description":"The token0 of the pool. Tokens must be sorted ascending by address so that\n`token0 < token1`; unordered intents are rejected."},"token1":{"type":"string","format":"address","description":"The token1 of the pool. Must be greater than `token0` (see `token0`)."}}}}}}
```

## The RemoveLiquidityIntent object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"RemoveLiquidityIntent":{"type":"object","required":["owner","token0","token1","fee","lpToken","lpTokenAmount","salt"],"properties":{"fee":{"type":"integer","format":"uint32","description":"The fee for the pool","minimum":0},"lpToken":{"type":"string","format":"address","description":"The LP token of the pool"},"lpTokenAmount":{"type":"string","format":"uint256","description":"The amount of LP tokens to burn"},"owner":{"type":"string","format":"address","description":"The address of the user submitting the intent"},"salt":{"type":"string","format":"bytes32","description":"Used to differentiate between intents with the same parameters"},"token0":{"type":"string","format":"address","description":"The token0 of the pool. Tokens must be sorted ascending by address so that\n`token0 < token1`; unordered intents are rejected."},"token1":{"type":"string","format":"address","description":"The token1 of the pool. Must be greater than `token0` (see `token0`)."}}}}}}
```

## The RemoveLiquidityResponse object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"RemoveLiquidityResponse":{"type":"object","description":"Response returned after successfully submitting an intent to the system.\nContains the unique identifier assigned to the submitted intent.\n\n# Fields\n* `hash` - Unique identifier assigned to the submitted intent","required":["intentHash"],"properties":{"intentHash":{"type":"string","format":"bytes32"}}}}}}
```

## The SignedBatchSignatureTransferDTO object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"SignedBatchSignatureTransferDTO":{"type":"object","description":"Signed batch SignatureTransfer permit (for add liquidity token0 and token1 transfer)","required":["permit","signature"],"properties":{"permit":{"$ref":"#/components/schemas/PermitBatchTransferFrom"},"signature":{"$ref":"#/components/schemas/PermitSignature"}}},"PermitBatchTransferFrom":{"type":"object","description":"DTO for ISignatureTransfer.PermitBatchTransferFrom - batch token transfer authorization","required":["permitted","nonce","deadline"],"properties":{"deadline":{"type":"string","format":"uint256"},"nonce":{"type":"string","format":"uint256"},"permitted":{"type":"array","items":{"$ref":"#/components/schemas/TokenPermissions"}}}},"TokenPermissions":{"type":"object","description":"Token permissions for ISignatureTransfer permits.\nUsed in PermitTransferFrom and PermitBatchTransferFrom.","required":["token","amount"],"properties":{"amount":{"type":"string","format":"uint256","description":"The maximum amount that can be transferred"},"token":{"type":"string","format":"address","description":"The token address"}}},"PermitSignature":{"type":"object","required":["r","s","yParity"],"properties":{"r":{"type":"string","format":"uint256"},"s":{"type":"string","format":"uint256"},"yParity":{"type":"boolean","format":"boolean"}}}}}}
```

## The SignedPermitDTO object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"SignedPermitDTO":{"type":"object","required":["permit","signature"],"properties":{"permit":{"$ref":"#/components/schemas/PermitSingle"},"signature":{"$ref":"#/components/schemas/PermitSignature"}}},"PermitSingle":{"type":"object","required":["details","spender","sigDeadline"],"properties":{"details":{"$ref":"#/components/schemas/PermitDetails"},"sigDeadline":{"type":"string","format":"uint256"},"spender":{"type":"string","format":"address"}}},"PermitDetails":{"type":"object","required":["token","amount","expiration","nonce"],"properties":{"amount":{"type":"string","format":"uint160"},"expiration":{"type":"integer","format":"uint64","minimum":0},"nonce":{"type":"integer","format":"uint64","minimum":0},"token":{"type":"string","format":"address"}}},"PermitSignature":{"type":"object","required":["r","s","yParity"],"properties":{"r":{"type":"string","format":"uint256"},"s":{"type":"string","format":"uint256"},"yParity":{"type":"boolean","format":"boolean"}}}}}}
```

## The SignedSignatureTransferDTO object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"SignedSignatureTransferDTO":{"type":"object","description":"Signed single SignatureTransfer permit (for remove liquidity LP token transfer)","required":["permit","signature"],"properties":{"permit":{"$ref":"#/components/schemas/PermitTransferFrom"},"signature":{"$ref":"#/components/schemas/PermitSignature"}}},"PermitTransferFrom":{"type":"object","description":"DTO for ISignatureTransfer.PermitTransferFrom - single token transfer authorization","required":["permitted","nonce","deadline"],"properties":{"deadline":{"type":"string","format":"uint256"},"nonce":{"type":"string","format":"uint256"},"permitted":{"$ref":"#/components/schemas/TokenPermissions"}}},"TokenPermissions":{"type":"object","description":"Token permissions for ISignatureTransfer permits.\nUsed in PermitTransferFrom and PermitBatchTransferFrom.","required":["token","amount"],"properties":{"amount":{"type":"string","format":"uint256","description":"The maximum amount that can be transferred"},"token":{"type":"string","format":"address","description":"The token address"}}},"PermitSignature":{"type":"object","required":["r","s","yParity"],"properties":{"r":{"type":"string","format":"uint256"},"s":{"type":"string","format":"uint256"},"yParity":{"type":"boolean","format":"boolean"}}}}}}
```

## The SiweVerify object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"SiweVerify":{"type":"object","required":["message","signature"],"properties":{"message":{"type":"string"},"signature":{"type":"string"}}}}}}
```

## The SpreadCurve object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"SpreadCurve":{"type":"object","description":"A piecewise-linear curve mapping wall-clock time to a mid-price delta in basis points.\n\nThe curve carries its own `[start_secs, end_secs]` window: the order's `start_time`\nand `end_time` must match these for validation to succeed (enforced at the API layer).\nBetween interior knots, `delta_bps` is interpolated linearly using i64 arithmetic.\nOutside the curve window the value clamps to `start_delta_bps` / `end_delta_bps`.","required":["startSecs","endSecs","startDeltaBps","endDeltaBps","points"],"properties":{"endDeltaBps":{"type":"integer","format":"int32"},"endSecs":{"type":"integer","format":"int64","minimum":0},"points":{"type":"array","items":{"$ref":"#/components/schemas/CurvePoint"}},"startDeltaBps":{"type":"integer","format":"int32"},"startSecs":{"type":"integer","format":"int64","minimum":0}}},"CurvePoint":{"type":"object","description":"A single knot in a [`SpreadCurve`], binding a wall-clock time to a delta in basis points.","required":["timeSecs","deltaBps"],"properties":{"deltaBps":{"type":"integer","format":"int32"},"timeSecs":{"type":"integer","format":"int64","minimum":0}}}}}}
```

## The SpreadCurveDto object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"SpreadCurveDto":{"type":"object","description":"Piecewise-linear spread curve. Interior `points` express knot positions as a fraction\nof the order's `[start_time, end_time]` window in basis points (`windowBps`), so the\ncurve is portable across orders of different durations.","required":["startDeltaBps","endDeltaBps"],"properties":{"endDeltaBps":{"type":"integer","format":"int32","description":"Mid-price delta at the order's `end_time`, in basis points."},"points":{"type":"array","items":{"$ref":"#/components/schemas/CurvePointDto"},"description":"Interior knots. Each `windowBps` must lie in `[1, 9_999]` and values must be\nstrictly increasing across `points`. Defaults to `[]` if absent, yielding a single\nlinear segment from `startDeltaBps` to `endDeltaBps`."},"startDeltaBps":{"type":"integer","format":"int32","description":"Mid-price delta at the order's `start_time`, in basis points."}}},"CurvePointDto":{"type":"object","description":"A single interior knot in a [`SpreadCurveDto`].","required":["windowBps","deltaBps"],"properties":{"deltaBps":{"type":"integer","format":"int32","description":"Mid-price delta in basis points at this knot."},"windowBps":{"type":"integer","format":"int32","description":"Knot position as a fraction of the order window in basis points. Must lie in\n`(0, 10_000)` exclusive — `5_000` is the order midpoint.","maximum":9999,"minimum":1}}}}}}
```

## The TokenClass object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"TokenClass":{"type":"string","enum":["Stable","Regular","Meme"]}}}}
```

## The TokenInfo object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"TokenInfo":{"type":"object","description":"Public metadata for a token in the allowlist, returned by `/api/config`.","required":["address","symbol","decimals"],"properties":{"address":{"type":"string","format":"address"},"class":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenClass"}]},"decimals":{"type":"integer","format":"int32","minimum":0},"oracles":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/OracleFeed"},"propertyNames":{"type":"string"}},"symbol":{"type":"string"}}},"TokenClass":{"type":"string","enum":["Stable","Regular","Meme"]},"OracleFeed":{"oneOf":[{"type":"object","description":"Binance WebSocket depth feed.","required":["ticker_symbol"],"properties":{"ticker_symbol":{"type":"string"}}},{"type":"object","description":"Coinbase WebSocket feed.","required":["product_id"],"properties":{"product_id":{"type":"string"}}},{"type":"object","description":"Kraken WebSocket feed.","required":["wsname"],"properties":{"wsname":{"type":"string"}}},{"type":"object","description":"Lighter WebSocket feed.","required":["market_id","symbol"],"properties":{"market_id":{"type":"string"},"symbol":{"type":"string"}}},{"type":"object","description":"Hyperliquid WebSocket feed.","required":["coin"],"properties":{"coin":{"type":"string"}}},{"type":"object","description":"Bitget WebSocket feed.","required":["symbol"],"properties":{"symbol":{"type":"string"}}}],"description":"OpenAPI schema for an oracle feed entry.\n\nThe wire format flattens the oracle configuration: the map key in\n`TokenInfo.oracles` identifies the oracle (e.g. `binance`, `kraken`),\nand the value carries only the provider-specific fields — the internal\n`type` discriminator is stripped by `serialize_feeds`.\n\nThis type is documentation-only: runtime (de)serialization goes through\n[`ExchangeFeedInfo`]. The `#[serde(untagged)]` attribute here merely keeps\n`ToSchema` output consistent with the flat wire shape."}}}}
```

## The TokenPermissions object

```json
{"openapi":"3.1.0","info":{"title":"turbine","version":"0.149.3"},"components":{"schemas":{"TokenPermissions":{"type":"object","description":"Token permissions for ISignatureTransfer permits.\nUsed in PermitTransferFrom and PermitBatchTransferFrom.","required":["token","amount"],"properties":{"amount":{"type":"string","format":"uint256","description":"The maximum amount that can be transferred"},"token":{"type":"string","format":"address","description":"The token address"}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.turbine.exchange/reference/api/readme/models.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
