BlendFi
OfframpOperations

Receiving the deposit

What BlendFi does when USDT arrives at the deposit address. Exact, partial, and overpayment paths.

After accept, BlendFi watches the on-chain deposit address. On every valid confirmation, the platform updates received_amount on the conversion and decides the next transition based on amount and window.

The three paths

1. Exact amount within window → funded → automatic settlement

The happy path. The end customer transfers exactly expected_source_amount before deposit_window_expires_at. The conversion transitions to funded, Pix settlement advances automatically, and the conversion ends in completed. You receive conversion.completed.

You do not need to call anything. Settlement is fully automatic from funded onward.

2. Amount below expected → immediate standby

Any deposit with received_amount < expected_source_amount takes the conversion to standby with standby_reason='under_funded', without waiting for the window to expire. The policy is deliberate: any divergence is your decision, not an error to be silently tolerated.

You receive conversion.standby. Decide between liquidating at the received amount (POST /v1/conversions/:id/liquidate) or handling case by case. See Standby and manual liquidation.

3. Amount above expected → immediate standby

Analogous to case 2, with standby_reason='over_funded'. The conversion transitions to standby at the moment of deposit; you decide the outcome.

Sub-case: window expired with deposit present

If the window expires (deposit_window_expires_at in the past) with received_amount > 0 but still in awaiting_deposit, the conversion transitions to standby with standby_reason='window_expired'. This covers late deposits that arrive after the 15-minute deadline.

Sub-case: window expired with no deposit

If the window expires with received_amount = 0, the conversion transitions to expired (terminal), the reserve is released, the lock is cleared. There is no deposit to handle.

Late deposits on a conversion already in standby

If an on-chain deposit confirms after the conversion is already in standby, it is credited to received_amount, but the conversion does not leave standby automatically. Exit only happens via /liquidate or via expiry to abandoned.

Webhooks you receive

ScenarioWebhook
Exact amount + window settlesconversion.completed
Exact amount + window fails to settleconversion.failed
Divergent amount (any kind)conversion.standby
Window expired with depositconversion.standby
Window expired with no deposit(no dedicated webhook; conversion sits in expired)

The full webhook semantics land in the Webhooks section once the conversion.* event catalog is published.

Do not recommend that the end customer adjust the amount

The correct UX is to show expected_source_amount to the end customer and require the exact amount. Treat divergence as an exception, not as a contract. An end customer who tries to "complete" a partial deposit with a second deposit ends up causing two confirmations, both standby (the first) or ignored (no automatic promotion out of standby).

Next step

On this page