---
title: "POST /v3/quote/exact-token"
method: POST
path: "/v3/quote/exact-token"
tags: ["Quotes V3"]
---

# POST /v3/quote/exact-token

`POST /v3/quote/exact-token`

Quote minimum fiat input for an exact token output amount.

## Headers

- `x-pp-key` string — Optional env-configured Peer Pay service key

## Request body

- object — Request for quoting minimum fiat input for an exact token output
  - `paymentPlatforms` string[], required — Payment platforms
  - `fiatCurrency` string, required — Fiat currency
  - `user` string, required — User submitting transactions
  - `recipient` string, required — Final recipient address
  - `destinationChainId` integer, required — Destination chain ID
  - `destinationToken` string, required — Destination token address
  - `referrer` string — Referrer
  - `referralFees` object[] — Caller-provided referral fees that will be sent at intent time. Curator uses the sum to gross up signalIntentAmount, and uses the entry whose recipient matches serviceFee.recipient as the donor for maker-referrer carve.
    - `recipient` string, required — Referral fee recipient address
    - `feeBps` integer, required — Referral fee in basis points
  - `useMultihop` boolean — Use multihop from a base asset
  - `escrowAddresses` string[], required — List of escrow contract addresses to search (e.g., ['0xabc...', '0xdef...']).
  - `supportBusinessAccounts` boolean — Whether quotes may include business accounts (default: false)
  - `minDepositSuccessRateBps` integer — Minimum historical deposit success rate in basis points (0–10000). Defaults to 0 when omitted
  - `mode` 'eligible' | 'eligible_with_chargeback' | 'eligible_with_chargeback_staked' — eligible returns quotes the user can take via the direct route: whitelist-off deposits without dispute, plus whitelist-enabled deposits the user is whitelisted for (whitelisted takers bypass dispute staking); eligible_with_chargeback also returns dispute-route quotes, where stake is locked at signal; eligible_with_chargeback_staked returns dispute-route quotes only when the user's free stake covers the signal amount
  - `maxTakerConversionRate` string — Maximum acceptable taker conversion rate, scaled by 1e18. Candidates quoting above this are excluded from both exact and nearby searches. Omit for no ceiling.
  - `quotePreference` 'EXCLUSIVE_SAR' | 'PREFER_SAR' | 'PREFER_BUYER_TEE' | 'EXCLUSIVE_BUYER_TEE' — Preferred quote pool and fallback behavior
  - `excludedPayToValues` string[] — Payee values to exclude from quote selection
  - `exactTokenAmount` string, required — Exact amount of tokens user wants to receive
  - `includeNearbyQuotes` boolean — Include nearby quote suggestions when no exact match
  - `nearbySearchRange` number — Max percentage deviation to search (1-100%). Unlimited if omitted
  - `nearbyQuotesCount` number — Max quotes per direction (default: 3, max: 10)

## Response `200`

Success

- object
  - `success` boolean, required
  - `message` string, required
  - `responseObject` object
    - `fiat` object, required
      - `currencyCode` string, required — Hashed fiat currency code
      - `currencyName` string, required — Fiat currency name
      - `currencySymbol` string, required — Fiat currency symbol
      - `countryCode` string, required — Fiat currency country code
    - `token` object, required
      - `token` string, required — Token address
      - `decimals` number, required — Token amount decimals
      - `name` string, required — Token name
      - `symbol` string, required — Token symbol
      - `chainId` number, required — Chain ID
    - `quotes` object[], required
      - `fiatAmount` string, required — Fiat amount
      - `fiatAmountFormatted` string, required — Fiat amount formatted
      - `tokenAmount` string, required — Net token output amount after curator-enforced ZKP2P protocol fees and any caller-provided referral fees.
      - `tokenAmountFormatted` string, required — Net token output amount formatted
      - `signalIntentAmount` string — Gross token amount to pass to signalIntent for this quote. Net of manager fee (takerConversionRate is manager-fee-inclusive) and pre protocol-fee deduction. Equal to `intent.amount`.
      - `signalIntentAmountFormatted` string — signalIntent amount formatted
      - `zkp2pFeeAmount` string — Curator-enforced ZKP2P protocol fee amount deducted from signalIntentAmount.
      - `zkp2pFeeAmountFormatted` string — Curator-enforced ZKP2P protocol fee amount formatted
      - `serviceFeeBps` integer — Actual curator service fee rate used for this quote, in basis points.
      - `takerReferralFeeBps` integer — Total caller-provided referral fee rate used for this quote, in basis points.
      - `takerReferralFeeAmount` string — Total caller-provided referral fee amount deducted from signalIntentAmount.
      - `takerReferralFeeAmountFormatted` string — Total caller-provided referral fee amount formatted
      - `managerFeeAmount` string — Informational deposit manager fee amount in token units already baked into takerConversionRate (NOT deducted from signalIntentAmount).
      - `managerFeeAmountFormatted` string — Informational manager fee amount formatted
      - `totalFeeAmount` string — Combined display total of protocol fee + caller referral fees + rate-implicit manager fee.
      - `totalFeeAmountFormatted` string — Combined display total formatted
      - `paymentMethod` string, required — Payment method
      - `payeeAddress` string, required
      - `conversionRate` string, required — Conversion rate
      - `sellerAutomatedReleaseAvailable` boolean, required — Whether seller automated release is currently available for this quote
      - `depositSuccessRateBps` integer, required — Deposit success rate in basis points (0–10000)
      - `depositIntentStats` object, required — Per-deposit historical intent counters
        - `totalIntents` integer, required
        - `signaledIntents` integer, required
        - `fulfilledIntents` integer, required
        - `prunedIntents` integer, required
      - `whitelistEnabled` boolean, required — Whether the deposit's V3 whitelist policy is enabled, copied from the indexer without reinterpretation.
      - `allowedGroupIds` string[], required — Allowed V3 address-group identifiers. Empty unless whitelistEnabled.
      - `disputeProtectionOptedOut` boolean, required — Depositor explicitly opted this deposit/payment-method tuple out of default-on dispute protection on the active policy.
      - `disputeProtectionRequiresStake` boolean, required — Active policy routes non-whitelisted takers through stake-backed admission for this tuple (not opted out and nonzero risk window). Neither field proves request-level routing, locked stake, or live coverage.
      - `intent` object, required
        - `depositId` integer, required — Deposit identifier
        - `processorName` string, required
        - `amount` string, required — Token amount to pass to signalIntent. Net of manager fee (takerConversionRate is manager-fee-inclusive) and pre protocol-fee deduction. On exact-token endpoints this is the smallest gross amount `s` such that `s - floor(s * serviceFee / P) >= requestedToken` (i.e. the contract's floor-truncated fee deduction yields at least the requested net amount; the closed-form `ceil(requestedToken * P / (P - serviceFee))` is a safe upper bound but the actual returned value walks that ceiling down to the true minimum). On exact-fiat endpoints this is `floor(fiat * P / takerConversionRate)`.
        - `toAddress` string, required
        - `payeeDetails` string, required
        - `processorIntentData` object, required
        - `fiatCurrencyCode` string, required
        - `chainId` string, required
        - `escrowAddress` string, required
        - `managerFee` string — Manager fee in preciseUnits (1e18 = 100%, 1e16 = 1%) when the quote deposit is delegated
        - `managerFeeFormatted` string — Human-readable manager fee percentage
        - `whitelistHookAddress` string, nullable — Whitelist hook contract address, if configured
        - `preIntentHookAddress` string, nullable — Compatibility alias for whitelistHookAddress
      - `maker` object — Maker (payee) details when available
        - `id` number, required
        - `processorName` string, required
        - `offchainId` string, required
        - `telegramUsername` string, nullable
        - `hashedOnchainId` string, required
        - `isBusiness` boolean
        - `revoked` boolean
        - `metadata` object, nullable
        - `createdAt` string, date-time, required
    - `fees` object, required
      - `zkp2pFee` string, required — Service fee in preciseUnits (1e18 = 100%, 1e16 = 1%). '0' when disabled.
      - `zkp2pFeeFormatted` string, required — Service fee as human-readable percentage (e.g. '1%')
      - `swapFee` string, required — Swap fee
      - `swapFeeFormatted` string, required — Swap fee formatted
    - `nearbySuggestions` object — Nearby quote suggestions when no exact match found
      - `below` object[], required — Quotes for amounts below requested (sorted by amount DESC, closest first)
        - `suggestedTokenAmount` string — Suggested token amount to request (raw, for exact-token mode)
        - `suggestedTokenAmountFormatted` string — Human-readable suggested token amount
        - `tokenPercentDifference` string — Token amount difference from requested, e.g., '-5.2%' or '+3.8%'
        - `suggestedFiatAmount` string — Suggested fiat amount to request (raw, for exact-fiat mode)
        - `suggestedFiatAmountFormatted` string — Human-readable suggested fiat amount
        - `fiatPercentDifference` string — Fiat amount difference from requested, e.g., '-5.2%' or '+3.8%'
        - `quote` object, required — Full quote details at the suggested amount
          - `fiatAmount` string, required — Fiat amount
          - `fiatAmountFormatted` string, required — Fiat amount formatted
          - `tokenAmount` string, required — Net token output amount after curator-enforced ZKP2P protocol fees and any caller-provided referral fees.
          - `tokenAmountFormatted` string, required — Net token output amount formatted
          - `signalIntentAmount` string — Gross token amount to pass to signalIntent for this quote. Net of manager fee (takerConversionRate is manager-fee-inclusive) and pre protocol-fee deduction. Equal to `intent.amount`.
          - `signalIntentAmountFormatted` string — signalIntent amount formatted
          - `zkp2pFeeAmount` string — Curator-enforced ZKP2P protocol fee amount deducted from signalIntentAmount.
          - `zkp2pFeeAmountFormatted` string — Curator-enforced ZKP2P protocol fee amount formatted
          - `serviceFeeBps` integer — Actual curator service fee rate used for this quote, in basis points.
          - `takerReferralFeeBps` integer — Total caller-provided referral fee rate used for this quote, in basis points.
          - `takerReferralFeeAmount` string — Total caller-provided referral fee amount deducted from signalIntentAmount.
          - `takerReferralFeeAmountFormatted` string — Total caller-provided referral fee amount formatted
          - `managerFeeAmount` string — Informational deposit manager fee amount in token units already baked into takerConversionRate (NOT deducted from signalIntentAmount).
          - `managerFeeAmountFormatted` string — Informational manager fee amount formatted
          - `totalFeeAmount` string — Combined display total of protocol fee + caller referral fees + rate-implicit manager fee.
          - `totalFeeAmountFormatted` string — Combined display total formatted
          - `paymentMethod` string, required — Payment method
          - `payeeAddress` string, required
          - `conversionRate` string, required — Conversion rate
          - `sellerAutomatedReleaseAvailable` boolean, required — Whether seller automated release is currently available for this quote
          - `depositSuccessRateBps` integer, required — Deposit success rate in basis points (0–10000)
          - `depositIntentStats` object, required — Per-deposit historical intent counters
            - `totalIntents` integer, required
            - `signaledIntents` integer, required
            - `fulfilledIntents` integer, required
            - `prunedIntents` integer, required
          - `whitelistEnabled` boolean, required — Whether the deposit's V3 whitelist policy is enabled, copied from the indexer without reinterpretation.
          - `allowedGroupIds` string[], required — Allowed V3 address-group identifiers. Empty unless whitelistEnabled.
          - `disputeProtectionOptedOut` boolean, required — Depositor explicitly opted this deposit/payment-method tuple out of default-on dispute protection on the active policy.
          - `disputeProtectionRequiresStake` boolean, required — Active policy routes non-whitelisted takers through stake-backed admission for this tuple (not opted out and nonzero risk window). Neither field proves request-level routing, locked stake, or live coverage.
          - `intent` object, required
            - `depositId` integer, required — Deposit identifier
            - `processorName` string, required
            - `amount` string, required — Token amount to pass to signalIntent. Net of manager fee (takerConversionRate is manager-fee-inclusive) and pre protocol-fee deduction. On exact-token endpoints this is the smallest gross amount `s` such that `s - floor(s * serviceFee / P) >= requestedToken` (i.e. the contract's floor-truncated fee deduction yields at least the requested net amount; the closed-form `ceil(requestedToken * P / (P - serviceFee))` is a safe upper bound but the actual returned value walks that ceiling down to the true minimum). On exact-fiat endpoints this is `floor(fiat * P / takerConversionRate)`.
            - `toAddress` string, required
            - `payeeDetails` string, required
            - `processorIntentData` object, required
            - `fiatCurrencyCode` string, required
            - `chainId` string, required
            - `escrowAddress` string, required
            - `managerFee` string — Manager fee in preciseUnits (1e18 = 100%, 1e16 = 1%) when the quote deposit is delegated
            - `managerFeeFormatted` string — Human-readable manager fee percentage
            - `whitelistHookAddress` string, nullable — Whitelist hook contract address, if configured
            - `preIntentHookAddress` string, nullable — Compatibility alias for whitelistHookAddress
          - `maker` object — Maker (payee) details when available
            - `id` number, required
            - `processorName` string, required
            - `offchainId` string, required
            - `telegramUsername` string, nullable
            - `hashedOnchainId` string, required
            - `isBusiness` boolean
            - `revoked` boolean
            - `metadata` object, nullable
            - `createdAt` string, date-time, required
      - `above` object[], required — Quotes for amounts above requested (sorted by amount ASC, closest first)
        - `suggestedTokenAmount` string — Suggested token amount to request (raw, for exact-token mode)
        - `suggestedTokenAmountFormatted` string — Human-readable suggested token amount
        - `tokenPercentDifference` string — Token amount difference from requested, e.g., '-5.2%' or '+3.8%'
        - `suggestedFiatAmount` string — Suggested fiat amount to request (raw, for exact-fiat mode)
        - `suggestedFiatAmountFormatted` string — Human-readable suggested fiat amount
        - `fiatPercentDifference` string — Fiat amount difference from requested, e.g., '-5.2%' or '+3.8%'
        - `quote` object, required — Full quote details at the suggested amount
          - `fiatAmount` string, required — Fiat amount
          - `fiatAmountFormatted` string, required — Fiat amount formatted
          - `tokenAmount` string, required — Net token output amount after curator-enforced ZKP2P protocol fees and any caller-provided referral fees.
          - `tokenAmountFormatted` string, required — Net token output amount formatted
          - `signalIntentAmount` string — Gross token amount to pass to signalIntent for this quote. Net of manager fee (takerConversionRate is manager-fee-inclusive) and pre protocol-fee deduction. Equal to `intent.amount`.
          - `signalIntentAmountFormatted` string — signalIntent amount formatted
          - `zkp2pFeeAmount` string — Curator-enforced ZKP2P protocol fee amount deducted from signalIntentAmount.
          - `zkp2pFeeAmountFormatted` string — Curator-enforced ZKP2P protocol fee amount formatted
          - `serviceFeeBps` integer — Actual curator service fee rate used for this quote, in basis points.
          - `takerReferralFeeBps` integer — Total caller-provided referral fee rate used for this quote, in basis points.
          - `takerReferralFeeAmount` string — Total caller-provided referral fee amount deducted from signalIntentAmount.
          - `takerReferralFeeAmountFormatted` string — Total caller-provided referral fee amount formatted
          - `managerFeeAmount` string — Informational deposit manager fee amount in token units already baked into takerConversionRate (NOT deducted from signalIntentAmount).
          - `managerFeeAmountFormatted` string — Informational manager fee amount formatted
          - `totalFeeAmount` string — Combined display total of protocol fee + caller referral fees + rate-implicit manager fee.
          - `totalFeeAmountFormatted` string — Combined display total formatted
          - `paymentMethod` string, required — Payment method
          - `payeeAddress` string, required
          - `conversionRate` string, required — Conversion rate
          - `sellerAutomatedReleaseAvailable` boolean, required — Whether seller automated release is currently available for this quote
          - `depositSuccessRateBps` integer, required — Deposit success rate in basis points (0–10000)
          - `depositIntentStats` object, required — Per-deposit historical intent counters
            - `totalIntents` integer, required
            - `signaledIntents` integer, required
            - `fulfilledIntents` integer, required
            - `prunedIntents` integer, required
          - `whitelistEnabled` boolean, required — Whether the deposit's V3 whitelist policy is enabled, copied from the indexer without reinterpretation.
          - `allowedGroupIds` string[], required — Allowed V3 address-group identifiers. Empty unless whitelistEnabled.
          - `disputeProtectionOptedOut` boolean, required — Depositor explicitly opted this deposit/payment-method tuple out of default-on dispute protection on the active policy.
          - `disputeProtectionRequiresStake` boolean, required — Active policy routes non-whitelisted takers through stake-backed admission for this tuple (not opted out and nonzero risk window). Neither field proves request-level routing, locked stake, or live coverage.
          - `intent` object, required
            - `depositId` integer, required — Deposit identifier
            - `processorName` string, required
            - `amount` string, required — Token amount to pass to signalIntent. Net of manager fee (takerConversionRate is manager-fee-inclusive) and pre protocol-fee deduction. On exact-token endpoints this is the smallest gross amount `s` such that `s - floor(s * serviceFee / P) >= requestedToken` (i.e. the contract's floor-truncated fee deduction yields at least the requested net amount; the closed-form `ceil(requestedToken * P / (P - serviceFee))` is a safe upper bound but the actual returned value walks that ceiling down to the true minimum). On exact-fiat endpoints this is `floor(fiat * P / takerConversionRate)`.
            - `toAddress` string, required
            - `payeeDetails` string, required
            - `processorIntentData` object, required
            - `fiatCurrencyCode` string, required
            - `chainId` string, required
            - `escrowAddress` string, required
            - `managerFee` string — Manager fee in preciseUnits (1e18 = 100%, 1e16 = 1%) when the quote deposit is delegated
            - `managerFeeFormatted` string — Human-readable manager fee percentage
            - `whitelistHookAddress` string, nullable — Whitelist hook contract address, if configured
            - `preIntentHookAddress` string, nullable — Compatibility alias for whitelistHookAddress
          - `maker` object — Maker (payee) details when available
            - `id` number, required
            - `processorName` string, required
            - `offchainId` string, required
            - `telegramUsername` string, nullable
            - `hashedOnchainId` string, required
            - `isBusiness` boolean
            - `revoked` boolean
            - `metadata` object, nullable
            - `createdAt` string, date-time, required
    - `quoteExpiresAt` string, required — ISO 8601 timestamp after which the quote should be re-fetched
    - `orchestratorAddress` string, required
    - `mode` 'eligible' | 'eligible_with_chargeback' | 'eligible_with_chargeback_staked', required
  - `statusCode` number, required
  - `errorCode` string

---

[API](https://skmtc.dev/peer/apis/swagger-api.md) · [All operations](https://skmtc.dev/peer/apis/swagger-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/peer/swagger-api/revisions/d5fcf4abb61a/schema)
