BlendFi
OfframpConcepts

Conversion

Central offramp entity. Represents the operation from quote accept to Pix settlement. Full state list.

The conversion is the central entity of the offramp. It exists from the quote accept and traverses the full lifecycle to either Pix settlement or an alternative terminal outcome. It is the resource you read (GET /v1/conversions/:id) and act on (/cancel, /liquidate).

Why conversion is separate from quote

Quote and conversion answer different questions:

  • Quote answers: "what is the rate now?". A frozen, disposable price with no side effect.
  • Conversion answers: "what operation is in flight, in what state, with how much received?". The executable operation, with deposit address, window, limit reservation, and state machine.

Separating them keeps discarded quotes from polluting the history of real operations and keeps the conversion state machine compact.

State diagram

States, one by one

StateMeaningWhat you are waiting forAvailable actions
awaiting_depositConversion created, deposit address issued, 15-minute window runningThe end customer to deposit USDTcancel
fundedOn-chain deposit confirmed at the exact amount within the windowPix settlement to advance automatically(none)
standbyDivergent deposit, window expired with a deposit, or both. Conversion does not advance automaticallyYour decision between liquidate or supportliquidate
liquidatedManual liquidation triggered via /liquidate; new rate appliedPix settlement to advance automatically(none)
completedPix delivered to the recipient. Terminal(terminal)(none)
failedIrrecoverable error after funded or liquidated. See failure_reason. Terminal(terminal)(none)
expiredWindow passed with no deposit. Reserve released. Terminal(terminal)(none)
canceledYou canceled in awaiting_deposit. Reserve released. Terminal(terminal)(none)
abandoned7 days in standby with no action. Manual off-platform resolution. TerminalContact BlendFi support(none)

`partially_funded` is internal

The schema reserves the partially_funded status for a transient case which, under the current policy, resolves immediately to standby with standby_reason='under_funded'. You never observe partially_funded on the wire. Documented here for completeness.

Key fields

The conversion exposes (among others):

  • id, quote_id, liquidation_quote_id, status, transaction_type (pix_offramp).
  • expected_source_amount (the USDT expected, fixed at accept) and received_amount (the sum actually received on-chain).
  • deposit_address, deposit_address_network, deposit_window_expires_at.
  • standby_at, standby_expires_at, standby_reason (when applicable).
  • Execution fields populated after settlement: end-to-end Pix identifiers, USDT transaction hash, timestamps, failure_reason.

The complete field list lands in the API reference once published.

Webhooks per transition

TransitionEvent
(creation)awaiting_depositconversion.created
awaiting_depositstandbyconversion.standby
awaiting_depositexpiredconversion.expired
awaiting_depositcanceledconversion.canceled
fundedcompleted, liquidatedcompletedconversion.completed
fundedfailed, liquidatedfailedconversion.failed
standbyabandonedconversion.abandoned

There is no intermediate webhook for funded or liquidated: the event of interest is the outcome (completed, failed, standby, expired, canceled, abandoned). Manual liquidation is synchronous and the subsequent outcome arrives via conversion.completed.

Next steps

On this page