Run a write or a large export across many connected users in one asynchronous call. You submit a job, poll its status, and (for exports and writes) download a results file.Runs a bulk operation across your connected users in one call. Unlike the synchronous reads (Get Bulk Balances, Get Bulk Transactions),
submitBulkOperation is asynchronous: it validates the request, creates a job plus one item per target, and returns immediately with a jobId. The work runs in the background — track the job to follow progress and retrieve results.
Available in
staging only at this point.operation field:
Requirements
Authorization: Basic <API_KEY>- The bulk API capability on your application.
- The scopes the chosen operation needs, granted by each target user (see the table above). A target missing them becomes a per-item failure — it never fails the whole job.
Every submit must carry an idempdempotencyKey
input or anIdempotency-Key` header (if both are sent they must match). Re-submitting the same key returns the original job instead of creating a dequest is byte-for-byte identical; a different request under the same key is rejected. There is no safe default for a fan-out write, so the key is required.Mutation
QUEUED status. acceptedItemCount is how many targets will be processed; skippedItemCountd up front (e.g. missing the required scope). Poll the job to watch succeededItemCount/failedItemCount` fill in — see Track a Bulk Job.
Variables — export balances / transactions
exportOptions bounds the window (defaults to the last 90 days; GET_BALANCES_EXPORT is a point-in-time snapshot and ignores tselection](/bulk-api#selecting-target-users) like the reads.
Variables — create transfer
Each item names its ownfrom and to endpoint, so one job can mix directions: operator→user, user→operator, and user→user. An endpoint is either { "operator": true } (your application’s payout account) or { "externalReferenceId": "…" } (a connected user). from and to must differ. The source user’s grant RANSFER_SEND; the destination onlyneeds to be connected. A transfer stays within one sponsor bank. targetSpec` is not required for transfers — participants are taken f
Variables — deposit cash balance
Funds a connected user’s spend account from a payment method they own — exactly one ofbankCardId or bankAccountId per own target user, so there’s notargetSpec — the deposit targets are derived from the items (each user at most once). userCashBalanceId is optional (defted/default spend account).
Variables — update transaction metadata
Editsmemo and/or transactionCateions. Each item names its own targetuser, so there's no targetSpec— the targets are derived from the items (each user at most once). **At most 100 edits in total** per submission. A field set tonull` clears it; an omitted field is left untouched. Metadata edits execute synchronously — the returned job is already terminal, so you can read per-edit results immediately without polling.
Response
Arguments
Response fields
Failures are per item — one target’s failure never fails the job (see the [per-target failure contract](/bulk-api#per-target-failu itself is only rejected for an authfailure, an invalid operation, a cap exceeded, or when every target is unresolvable. After a terminal status, read per-item detai each write produced — with Track aBulk Job.