GET /v1/merchant-users— your Blink users, with each user’s total deposited and the embedded wallets they used. Look a user up by their embedded wallet to answer “has this user deposited with Blink before?”GET /v1/merchant-deposits— settled deposits across both funding rails, filterable by user, chain, and date range, each with the on-chain transactions that credited your wallet.
On the testnet sandbox? Swap the host for
https://api-sandbox.blink.cash.Authentication
Every request is authenticated with a signedX-Merchant-Authorization header — the same
identity credential used across the server-to-server API. See
Merchant Authentication for how to build it.
Typical flow
The two endpoints compose. To check whether a returning user has deposited before and then pull their history:1
Look the user up by their embedded wallet
GET /v1/merchant-users?embeddedWalletAddress=0x1a5F…&chainId=8453. An empty items array means they
have never deposited to you. A hit returns their userId and total deposited.2
Pull that user's deposits
Take the
userId from step 1 and call GET /v1/merchant-deposits?userId=<userId>.userId is an opaque Blink-internal identifier — stable for a given user, safe to store, and the
join key between the two endpoints.
Pagination
Both endpoints are cursor-paginated. Each response includes anextCursor:
- If
nextCursoris a string, pass it back as?cursor=<nextCursor>to fetch the next page. - If
nextCursorisnull, you have reached the last page.
limit (1–100, default 25) to set the page size. Treat the cursor as opaque — don’t parse or
construct it. Deposits are returned newest-first; users are returned in a stable order suitable for
walking the full list.
List Blink users
GET https://api.blink.cash/v1/merchant-users
Lists the users who have deposited to you, each with their total completed deposits and the distinct
embedded wallets they deposited into. Supply embeddedWalletAddress (optionally narrowed by chainId)
to return only the user owning that wallet.
Query parameters
Response
amounts holds bucketed totals: total (all statuses, gross intended) and completed (money actually
received). More status facets (for example a pending breakdown) can be added later without a breaking
change.List deposits
GET https://api.blink.cash/v1/merchant-deposits
Lists settled deposits into your platform, newest first.
Deposits that have not landed are never returned. Both funding rails create a
record long before money moves — a wallet deposit the moment it is authorized, a
manual transfer the moment a user picks a source — and most are abandoned. Those
are intents, not deposits, so status on every item is always completed.
Both funding rails appear in one list, distinguished by type:
blink— the user paid from a wallet they connected to the Blink widget.manual_transfer— the user sent funds to a Blink deposit address themselves, typically a withdrawal from an exchange.
manual_transfer deposits having no signed-in user:
userId is always null for them, so filtering by userId returns blink
deposits only — and /v1/merchant-users totals likewise cover blink deposits
only.
Query parameters
Response
transactions[]
Usually one element. A manual transfer sent straight to the deposit address can be
funded by more than one transfer, and each one is its own
settlement.
Only transactions on your side of the deposit are listed. The transaction that
funded a deposit is deliberately not exposed — it sits on the source chain and
would identify the wallet your user paid from.
Settled deposits only. Pending and failed deposits are not returned, so you never
have to filter abandoned checkout attempts out of your reconciliation. If you need
visibility into deposits that failed or were refunded, tell us — it is not exposed here today.