Skip to main content
POST
Create a quotation
Changed in this version.

Authorizations

Authorization
string
header
required

Access token from POST /auth (the data.access_token value).

x-api-key
string
header
required

API key issued by Kira. Required on every request, including /auth.

Headers

X-Api-Version
string

Optional. The date-versioned API version to apply for this request (e.g. 2026-04-14). When sent it always wins, even over your pinned account default. When omitted, the API uses your account's pinned version if set, otherwise a baseline default.

Example:

"2026-06-01"

Body

application/json
virtual_account_id
string<uuid>
required
amount
string
required

Amount to quote, as a 2-decimal DECIMAL STRING (e.g. "1000.00"). For a virtual_account_id quote it's in the virtual account's own currency (USD for a fiat VA; USDC/USDT for a crypto VA — quoting a crypto VA returns source.currency: "USDC"). For a quote_for preview it's in quote_for.currency. When inverse: true, this is instead the desired amount the RECIPIENT should receive. Must be > 0 (the pattern rejects 0.00).

Pattern: ^(?!0+\.0+$)\d+\.\d{2}$
quote_for
object

Pre-account preview target. rail and currency must be coherent: TRONUSDT, SOLANA/POLYGONUSDC, and bank rails (ACH_STANDARD/ACH_SAME_DAY/WIRE_DOMESTIC) → USD. A mismatch returns 400.

target
object

The delivery side you want the recipient to receive: currency (USD, USDC, or USDT) and, for a stablecoin, the delivery network. network is required when currency is USDC/USDT — omitting it returns 400 "network is required when currency is a stablecoin". Omit target entirely for a same-currency quote.

inverse
boolean
default:false

When false (default), amount is the source amount and the engine computes what the recipient receives. When true, amount is the desired recipient amount and the engine grosses up the source amount instead. Quoting amount: "1000.00", inverse: true returned recipient.amount: 100001 ($1000.01, rounded up by 1 cent) and a grossed-up source.amount: 100081 — the recipient receives at least the requested amount.

rail
enum<string>

Optional outbound bank-rail hint, for virtual_account_id quotes only (a fiat VA accepts several rails on one account number). Adding rail: "WIRE_DOMESTIC" adds a wire_domestic_inbound line to the response fees[] that isn't present without it. Rejected with 400 when combined with quote_for — "top-level rail applies to virtual_account_id quotes only; quote_for carries its own rail".

Available options:
ACH_STANDARD,
ACH_SAME_DAY,
WIRE_DOMESTIC
payment_instructions
object

Supply to price a CRYPTO-FUNDED quote: the stablecoin (currency: USDC/USDT) and blockchain (network: solana/polygon/tron) you will deposit to fund the payout. Adding this to a quote against a FIAT virtual account prices the crypto leg (same result as quoting a crypto virtual account directly) and adds the funding network's fee line to fees[]. A USD-pegged stablecoin is priced on its USD face value (1:1), so source still reports USD with precision: 2conversion.pair is what names the stablecoin you deposit.

effective_at
string<date-time>

Optional ISO 8601 timestamp (with timezone offset). Prices the quote as of this time; defaults to the current time.

from_held_balance
boolean
default:false
client_markup
object

Per-quote markup override that replaces your configured markup for this quote only. Provide at least one of fixed_minor (minor units of the currency you fund with) or percentage_bps (basis points) with a value greater than 0.

Response

Created.

quote_id
string<uuid> | null
required

UUID of the persisted, redeemable quote. null on a quote_for (pre-account preview) quote, which is informational only; a real UUID on a virtual_account_id quote.

quote_expires_at
string
required

ISO-8601 timestamp when this quote (and its locked conversion rate) expires. Always exactly 900 seconds (15 minutes) after conversion.locked_at.

source
object
required
recipient
object
required
pricing_context
object
required
conversion
object
required
fees
object[]
required
totals
object
required
balance_sufficient
boolean