---
title: "Price a payout from your own balance"
method: POST
path: "/v1/quotes"
tags: ["Quotes"]
---

# Price a payout from your own balance

`POST /v1/quotes`

## Request

- Base URL: `https://api.sandbox.alfredpay.io`
- URL: `https://api.sandbox.alfredpay.io/v1/quotes`
- Auth: one of:
  - HTTP bearer
  - API key in header `api-key` and API key in header `api-secret`

Prices a conversion from your own stablecoin balance to local currency. Pass the returned `id` as `quoteId` on `POST /v1/payouts/fiat` before `expiresAt`.

Send `fromAmount` or `toAmount`, never both.

* `toAmount` is the exact amount the recipient receives. Alfred calculates the USDC owed and returns it in `fromAmount`, rounded up. `toAmount` takes at most two decimals and applies to payouts only, from USDC to local currency.
* `fromAmount` fixes the USDC you spend, and `toAmount` comes back as what the recipient receives.

A quote lasts about two minutes and can be used once.

## Headers

- `Idempotency-Key` string, uuid, required

## Request body

- OwnQuoteCreate: Send `fromAmount` or `toAmount`, never both.
  - `fromCurrency` 'USD' | 'HKD' | 'CNY' | 'MXN' | 'DOP' | 'COP' | 'BRL' | 'ARS' | 'CLP' | 'PEN' | 'BOB' | 'PYG' | 'USDC' | 'USDT', required: Fourteen members, reconciled to the countries a customer can be onboarded in. USDC and USDT are stablecoins and require `chain`.
  - `toCurrency` 'USD' | 'HKD' | 'CNY' | 'MXN' | 'DOP' | 'COP' | 'BRL' | 'ARS' | 'CLP' | 'PEN' | 'BOB' | 'PYG' | 'USDC' | 'USDT', required: Fourteen members, reconciled to the countries a customer can be onboarded in. USDC and USDT are stablecoins and require `chain`.
  - `fromAmount` string: The stablecoin amount to spend.
  - `toAmount` string: The exact amount the recipient receives. Payouts only, from USDC to local currency. A fiat amount takes at most two decimals; three to eight return 422 and more than eight return 400.
  - `chain` 'SOL' | 'ETH' | 'MATIC' | 'BASE' | 'ARB' | 'OP' | 'AVAX' | 'BNB' | 'TRX' | 'XLM' | 'CELO'

## Response `201`

Created

- Quote
  - `id` string
  - `customerId` string
  - `fromCurrency` 'USD' | 'HKD' | 'CNY' | 'MXN' | 'DOP' | 'COP' | 'BRL' | 'ARS' | 'CLP' | 'PEN' | 'BOB' | 'PYG' | 'USDC' | 'USDT': Fourteen members, reconciled to the countries a customer can be onboarded in. USDC and USDT are stablecoins and require `chain`.
  - `toCurrency` 'USD' | 'HKD' | 'CNY' | 'MXN' | 'DOP' | 'COP' | 'BRL' | 'ARS' | 'CLP' | 'PEN' | 'BOB' | 'PYG' | 'USDC' | 'USDT': Fourteen members, reconciled to the countries a customer can be onboarded in. USDC and USDT are stablecoins and require `chain`.
  - `fromAmount` string
  - `toAmount` string
  - `chain` string, nullable
  - `rail` string, nullable
  - `route` object: The route this quote prices. Execution must land on it.
    - `country` 'MEX' | 'ARG' | 'BRA' | 'COL' | 'CHL' | 'PER' | 'DOM' | 'USA' | 'CHN' | 'HKG' | 'BOL' | 'PRY': ISO 3166-1 alpha-3, the only form Alfred stores, filters on, reports or emits. Compatibility rule for integrations that can only send alpha-2: any inbound `country` value in alpha-2 (path, query or body) is normalized to alpha-3 at the boundary before validation, storage or routing. Unrecognized in either form → `422 validation_error`.
    - `currency` 'USD' | 'HKD' | 'CNY' | 'MXN' | 'DOP' | 'COP' | 'BRL' | 'ARS' | 'CLP' | 'PEN' | 'BOB' | 'PYG' | 'USDC' | 'USDT': Fourteen members, reconciled to the countries a customer can be onboarded in. USDC and USDT are stablecoins and require `chain`.
    - `rail` 'ACH' | 'WIRE' | 'SPEI' | 'PIX' | 'COELSA' | 'FPS' | 'CHATS' | 'WALLET': The scheme family a payment moves on. Never a country, provider or account identifier. `ACH` is any domestic batch bank transfer (US ACH, and the local clearing houses of COL, CHL, PER, BOL, PRY, DOM, CHN); `WIRE` is RTGS/SWIFT/Fedwire; `SPEI`, `PIX`, `COELSA`, `FPS` and `CHATS` are named instant schemes with their own semantics (COELSA is Argentina's instant transfer, deliberately not folded into ACH); `WALLET` is a stablecoin destination. Cash pickup is not in this release and has no rail value yet. Which rails a destination supports is derived by Alfred and returned as `supportedRails[]`; which `(country, currency, rail)` combinations are live is published by `GET /v1/countries/{country}`.
  - `rate` string
  - `fees` Fee[]
    - `type` 'provider' | 'network' | 'alfred' | 'conversion' | 'payout'
    - `amount` string
    - `currency` string
  - `rateLockedAt` string, date-time
  - `expiresAt` string, date-time: Typically ~2 minutes. Execute before this or re-quote.
  - `status` 'active' | 'expired' | 'consumed'

## Other responses

- `400`: `validation_error`. The reason is in `error.details.issues[].message`: * Both amounts sent: "provide fromAmount or toAmount, not both" * No amount sent: "fromAmount or toAmount is required" * `toAmount` isn't a number, or has more than 8 decimals: "must be a decimal amount with at most 8 fractional digits"
- `401`: Missing or invalid credentials.
- `422`: `validation_error`: * `toAmount` is 0: "toAmount must be greater than zero" * `toAmount` has 3 to 8 decimals, where fiat allows 2: "amount carries more precision than the currency allows" * `toAmount` is too small to quote, under about 14 ARS (0.01 USDC): "toAmount is below the minimum for this pair" `route_unsupported`: * `toAmount` sent on a pay-in, from fiat to stablecoin: "toAmount is supported for stablecoin → fiat (pay-out) quotes only" * The pair couldn't be priced, which is rare: "toAmount could not be priced for this pair"

## Changes

- **2026-11-03** `20fef4fd2ab3`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/alfredpay/apis/alfred-penny-api-client-documentation/changes/v1/quotes/post.md)

---

[API](https://skmtc.dev/alfredpay/apis/alfred-penny-api-client-documentation.md) - [All operations](https://skmtc.dev/alfredpay/apis/alfred-penny-api-client-documentation/llms.txt) - [OpenAPI document](https://skmtc.dev/alfredpay/apis/alfred-penny-api-client-documentation/revisions/20fef4fd2ab3?raw)
