Skip to main content
Move funds between your application’s balance and your users’ balances, or between two users.
“Requirement: Your application must be a public app.”

Quick Start

Send $10 from a user to your application:
Send $10 from your application to a user:

Authentication

Transfers support two authentication methods. The method you choose determines who the sender is.

Bearer Token

Use a user OAuth token obtained via generateUserAccessToken or through the OAuth refresh flow. The token must include the MAKE_PAYOUT_TRANSFER_SEND scope.

Basic Auth

Use your application’s Api Key.

Input

CreateTransferInput

“Only one funding source can be specified per request. If none is provided, the transfer draws from the sender’s cash balance. Funding sources are not available with Basic Auth.”
📘 See Add Expense Details for full details on uploading attachments and working with memos and categories.

TransferDirection

Identify the recipient by account ID or by the external reference ID you assigned when creating the user. Provide one or the other, not both.
“The recipient must be a registered user of your application.”

Response


Examples

Collect payment from a user (Bearer)

No destination needed — defaults to your application. Optionally include bankCardId, bankAccountId, or paypalVaultId to fund from an external source instead of the user’s cash balance.

Disburse funds to a user (Basic Auth)

Use externalReferenceId instead of accountId to identify the recipient by the ID you assigned.

Transfer between two users (Bearer)

Success response


Idempotency

Every request must include a unique idempotencyKey (a string you generate). If the same key is sent more than once, the API returns the result of the original request without creating a duplicate transfer. Keys are valid for 10 minutes.

Errors

Errors follow the standard GraphQL error format:

Common Error