> ## Documentation Index
> Fetch the complete documentation index at: https://docs.primevault.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get a Ramp Quote

> Request priced quotes for an on-ramp or off-ramp by describing the source, destination, assets, and exactly one amount.

**POST** `/api/external/transactions/v2/quote/`

**Example:** an off-ramp quote to sell 10,000 USDC from an Ethereum treasury vault and receive USD in a payroll bank account over ACH.

## Request body

<ParamField body="intent" type="TransactionIntentRequest" required>
  Quote criteria for the requested ramp. See [TransactionIntentRequest](/api-basics/data-models#transactionintentrequest).

  <Expandable title="Properties">
    <ParamField body="intent.input" type="IntentAsset" required>
      What you spend. See [IntentAsset](/api-basics/data-models#intentasset).

      <Expandable title="Properties">
        <ParamField body="intent.input.asset" type="string" required>
          Asset symbol, such as `USDC` or `USD`.
        </ParamField>

        <ParamField body="intent.input.amount" type="string">
          Decimal amount to spend. Provide either this or `intent.output.amount`, not both.
        </ParamField>

        <ParamField body="intent.input.vaultId" type="string">
          Vault or account that holds the input asset.
        </ParamField>
      </Expandable>
    </ParamField>

    <ParamField body="intent.output" type="IntentAsset" required>
      What you receive. See [IntentAsset](/api-basics/data-models#intentasset).

      <Expandable title="Properties">
        <ParamField body="intent.output.asset" type="string" required>
          Asset symbol, such as `USD` or `USDC`.
        </ParamField>

        <ParamField body="intent.output.amount" type="string">
          Decimal amount to receive. Provide either this or `intent.input.amount`, not both.
        </ParamField>

        <ParamField body="intent.output.vaultId" type="string">
          Vault or account that receives the output asset.
        </ParamField>
      </Expandable>
    </ParamField>

    <ParamField body="intent.source" type="TransferPartyData" required>
      Source endpoint. Set `chain` for a crypto leg or `paymentRail` for a fiat leg. See [TransferPartyData](/api-basics/data-models#transferpartydata).
    </ParamField>

    <ParamField body="intent.destination" type="TransferPartyData" required>
      Destination endpoint. Set `chain` for a crypto leg or `paymentRail` for a fiat leg. See [TransferPartyData](/api-basics/data-models#transferpartydata).
    </ParamField>
  </Expandable>
</ParamField>

<Note>
  Supply both assets and exactly one non-null amount, as a decimal string. Omit the other amount.
</Note>

## Response

<ResponseField name="quotes" type="QuoteResponseItem[]">
  Available quotes for the intent. See [QuoteResponseItem](/api-basics/data-models#quoteresponseitem).

  <Expandable title="Properties">
    <ResponseField name="quoteId" type="string">
      Quote identifier. Pass it to [Execute Quote](/transactions/ramps/execute-quote).
    </ResponseField>

    <ResponseField name="rate" type="string | null">
      Quoted conversion rate.
    </ResponseField>

    <ResponseField name="fees" type="Fees | null">
      Fee `amount`, `asset`, and optional `amountInFiat`. See [Fees](/api-basics/data-models#fees).
    </ResponseField>

    <ResponseField name="input" type="IntentAsset">
      Quoted input asset and amount. See [IntentAsset](/api-basics/data-models#intentasset).
    </ResponseField>

    <ResponseField name="output" type="IntentAsset">
      Quoted output asset and amount. See [IntentAsset](/api-basics/data-models#intentasset).
    </ResponseField>

    <ResponseField name="source" type="TransferPartyData">
      Source endpoint for the ramp. See [TransferPartyData](/api-basics/data-models#transferpartydata).
    </ResponseField>

    <ResponseField name="destination" type="TransferPartyData">
      Destination endpoint for the ramp. See [TransferPartyData](/api-basics/data-models#transferpartydata).
    </ResponseField>

    <ResponseField name="expiresAt" type="string">
      ISO 8601 time when the quote expires. Execute the quote before this time.
    </ResponseField>
  </Expandable>
</ResponseField>

<RequestExample dropdown>
  ```json Request example theme={null}
  {
    "intent": {
      "input": { "asset": "USDC", "amount": "10000.00" },
      "output": { "asset": "USD", "vaultId": "vault_usd_settlement" },
      "source": { "type": "VAULT", "id": "vault_usdc_treasury", "chain": "ETHEREUM" },
      "destination": { "type": "BANK_ACCOUNT", "id": "bank_account_usd_payroll", "paymentRail": "ACH" }
    }
  }
  ```

  ```bash cURL theme={null}
  # Sample only. Generate a new signed token for each request
  # (see Authentication). Tokens expire after 120 seconds.
  curl --request POST \
    --url "https://api.primevault.com/api/external/transactions/v2/quote/" \
    --header "Authorization: Bearer <signed JWT>" \
    --header "Api-Key: <API key>" \
    --header "Content-Type: application/json" \
    --data '{
      "intent": {
        "input": { "asset": "USDC", "amount": "10000.00" },
        "output": { "asset": "USD", "vaultId": "vault_usd_settlement" },
        "source": { "type": "VAULT", "id": "vault_usdc_treasury", "chain": "ETHEREUM" },
        "destination": { "type": "BANK_ACCOUNT", "id": "bank_account_usd_payroll", "paymentRail": "ACH" }
      }
    }'
  ```

  ```typescript JavaScript SDK theme={null}
  const quoteResponse = await apiClient.getQuote({
    intent: {
      input: { asset: "USDC", amount: "10000.00" },
      output: { asset: "USD", vaultId: "vault_usd_settlement" },
      source: { type: "VAULT", id: "vault_usdc_treasury", chain: "ETHEREUM" },
      destination: { type: "BANK_ACCOUNT", id: "bank_account_usd_payroll", paymentRail: "ACH" },
    },
  });
  console.log(quoteResponse.quotes);
  ```
</RequestExample>

<ResponseExample>
  ```json JSON example theme={null}
  {
    "quotes": [
      {
        "quoteId": "quote_ramp_payroll_1042",
        "rate": "1",
        "fees": { "amount": "25.00", "asset": "USDC" },
        "input": { "asset": "USDC", "amount": "10000.00" },
        "output": { "asset": "USD", "amount": "9975.00", "vaultId": "vault_usd_settlement" },
        "source": { "type": "VAULT", "id": "vault_usdc_treasury", "chain": "ETHEREUM" },
        "destination": { "type": "BANK_ACCOUNT", "id": "bank_account_usd_payroll", "paymentRail": "ACH" },
        "expiresAt": "2026-09-30T10:00:30+00:00"
      }
    ]
  }
  ```
</ResponseExample>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.