Skip to main content
Fiat reaches an account in two ways: a bank transfer to the account’s virtual bank account, or a hosted pay-in session the payer completes online (coming soon — not yet available, so a virtual bank account is the way in today). Either way, what happens next is the same: the fiat is converted and crypto is credited to the account wallet. That settlement is a pay-in, and since 1.8.0 you can read it.

Three objects, one deposit

A bank transfer to a virtual bank account produces a pay-in and no session. A hosted payment produces a session and a pay-in — the session tracks initiation, the pay-in tracks settlement.
A pay-in session never reaches a “completed” status. On the happy path it stops at PAYMENT_RECEIVED. The statuses CONVERTING, MINTING and COMPLETED were removed in 1.8.0 — if you poll a session waiting for one of them, you will wait forever. Settlement lives on the pay-in, and PAY_IN_SETTLED is the event that announces it.

The pay-in record

Response (200)
Amounts are decimal strings — never floats.

Lifecycle

Build on the webhooks and use the reads for reconciliation and recovery — listing the ledger with status=RECEIVED or SETTLING older than your expected settlement time is a cheap stuck-deposit check.

Listing the ledger

GET /pay-ins spans every account in your company. All filters combine with AND: Sorted by createdAt descending; sortOn accepts only createdAt.

Reading sessions back

Before 1.8.0 a pay-in session could not be read after creation. Now List pay-in sessions and Get a pay-in session return the persisted state — never a live provider call — so you can render a deposits view or recover a session whose callbackUrl notification was missed. To poll for changes, sort updatedAt descending and read only the first page, sized above your expected change volume. from/to filter on createdAt, so there is no “changed since” filter, and a session that changes between your page-1 and page-2 requests shifts position and is skipped.

Errors worth knowing on session creation

1.8.0 added preconditions to creating a hosted pay-in session when the account settles through a EUR virtual bank account:

Next steps

Virtual bank accounts

Issuing — and now closing — the bank details pay-ins arrive on.

Webhooks

PAY_IN_SETTLED and PAY_IN_FAILED, and how to debug a delivery you didn’t get.

Wallets & balances

Where netCryptoAmount lands.