Tidepooltestnet

Request a swap quote

POST /v0/quote · 1Click-compatible

POST/v0/quote

Returns HTTP 201 on success (the spec lists 200, matching 1Click). With dry: false the response adds quote.depositAddress, deadline and timeWhenInactive. See Quotes and pricing and Swap types.

Generates a swap quote based on input parameters such as the assets, amount, slippage tolerance, and recipient/refund information. Returns pricing details, estimated time, and a unique deposit address to which tokens must be transferred to initiate the swap. You can set the dry parameter to true to simulate the quote request without generating a deposit address or initiating the swap process. This is useful for previewing swap parameters or validating input data without committing to an actual swap. This endpoint is the first required step in the swap process. Tidepool v1 supports EXACT_INPUT, EXACT_OUTPUT and FLEX_INPUT; ORIGIN_CHAIN and INTENTS deposit/refund types; DESTINATION_CHAIN and INTENTS recipient types. Other values return 400.

Operation id: getQuote · Auth: optional (X-API-Key or Authorization: Bearer, any value)

Request

curl -X POST "https://www.usetidepool.tech/v0/quote" \
  -H 'content-type: application/json' \
  -d '{
  "dry": true,
  "swapType": "EXACT_INPUT",
  "slippageTolerance": 100,
  "originAsset": "nep141:usdc.tidepool-sandbox.testnet",
  "depositType": "INTENTS",
  "destinationAsset": "nep141:wnear.tidepool-sandbox.testnet",
  "amount": "10000000",
  "refundTo": "alice.testnet",
  "refundType": "INTENTS",
  "recipient": "alice.testnet",
  "recipientType": "DESTINATION_CHAIN",
  "deadline": "2030-01-01T00:00:00.000Z"
}'

Try it

POST

Body

FieldTypeRequiredDescription
drybooleanyesFlag indicating whether this is a dry run request. If true, the response will NOT contain the following fields: - depositAddress - timeWhenInactive - deadline
depositMode"SIMPLE" \"MEMO"
swapType"EXACT_INPUT" \"EXACT_OUTPUT" \"FLEX_INPUT" \
slippageTolerancenumberyesSlippage tolerance for the swap. This value is in basis points (1/100th of a percent), e.g. 100 for 1% slippage.
originAssetstringyesID of the origin asset.
depositType"ORIGIN_CHAIN" \"INTENTS" \"CONFIDENTIAL_INTENTS"
destinationAssetstringyesID of the destination asset.
amountstringyesAmount to swap as the base amount. It is interpreted as the input or output amount based on the swapType flag and is specified in the smallest unit of the currency (e.g., wei for ETH). Must be an integer string; decimal values like "0.01" are invalid—use base units (e.g. "10000000000000000" for 0.01 with 18 decimals).
refundTostringyesAddress used for refunds.
refundType"ORIGIN_CHAIN" \"INTENTS" \"CONFIDENTIAL_INTENTS"
recipientstringyesRecipient address. The format must match recipientType. Destination routing metadata, when required, must be encoded according to the destination chain address format.
connectedWalletsstring[]Addresses of connected wallets.
sessionIdstringUnique client session identifier for 1Click.
virtualChainRecipientstringEVM address of a transfer recipient in a virtual chain
virtualChainRefundRecipientstringEVM address of a refund recipient in a virtual chain
customRecipientMsgstringHIGHLY EXPERIMENTAL Message to pass to ft_transfer_call when withdrawing assets to NEAR. Otherwise, ft_transfer will be used. WARNING: Funds will be lost if used with non NEP-141 tokens, in case of insufficient storage_deposit or if the recipient does not implement ft_on_transfer method.
recipientType"DESTINATION_CHAIN" \"INTENTS" \"CONFIDENTIAL_INTENTS"
deadlinestringyesTimestamp in ISO format that identifies when the user refund begins if the swap isn't completed by then. It must exceed the time required for the deposit transaction to be mined. For example, Bitcoin may require around one hour depending on the fees paid.
confidentiality"public" \"basic" \"advanced"
referralstringDistribution channel / venue identifier (for example: ledger, trustwallet). Keep lowercase for consistency.
rebatesRebate[]Rebate distribution for this quote. Provide up to 3 confidential Intents recipients (for example, rebate-recipient.near on confidential Intents); each item defines a recipient and its percent share, and all shares must add up to 100.
rebates[].[]recipientstringyesConfidential Intents account identifier that receives this rebate share. Rebate delivery uses signed transfer intent on Confidential Intents; direct token transfers are not supported.
rebates[].[]sharenumberyesRebate share for this recipient in percent.
quoteWaitingTimeMsnumberTime in milliseconds the user is willing to wait for a quote from the relay. **Defaults to 0ms delay if not specified, if you want to receive the fastest quote.
appFeesAppFee[]List of recipients and their fees
appFees[].[]recipientstringyesAccount ID within Intents to which this fee will be transferred
appFees[].[]feenumberyesFee for this recipient as part of amountIn in basis points (1/100th of a percent), e.g. 100 for 1% fee
insuredbooleanOpt into an insured swap. When true, an additional 0.02% (2 basis points) insurance fee is charged on top of any other fees.

Responses

200

{
  "correlationId": "922a68ad-3d13-4a3f-a396-2965f8cc79d4",
  "timestamp": "2026-10-24T21:31:23.183Z",
  "quoteRequest": {
    "dry": true,
    "swapType": "EXACT_INPUT",
    "slippageTolerance": 100,
    "originAsset": "nep141:usdc.tidepool-sandbox.testnet",
    "depositType": "INTENTS",
    "destinationAsset": "nep141:wnear.tidepool-sandbox.testnet",
    "amount": "10000000",
    "refundTo": "alice.testnet",
    "refundType": "INTENTS",
    "recipient": "alice.testnet",
    "recipientType": "DESTINATION_CHAIN",
    "deadline": "2030-01-01T00:00:00.000Z"
  },
  "quote": {
    "amountIn": "10000000",
    "amountInFormatted": "10",
    "amountInUsd": "9.9958",
    "minAmountIn": "10000000",
    "amountOut": "2241186638513513306880000",
    "amountOutFormatted": "2.24118663851351330688",
    "amountOutUsd": "9.9509",
    "minAmountOut": "2218774772128378173811200",
    "timeEstimate": 10
  },
  "signature": "ed25519:peWDyRaujC7pRHxRRU7DnSTWiw1vuiu8T5Pz9gNdfFYbGPedmnYLYKv7nfgLh9JbvZ5Nu6otgbKscHkDYU3JPaL"
}

400 Bad Request - Invalid input data

{
  "message": "swapType is required"
}

401 Unauthorized - API key or JWT token is invalid

On this page