Skip to main content
POST
Create a transfer

Authorizations

Authorization
string
header
required

Bearer token authentication. Pass your API key as Authorization: Bearer sk_.... See Authentication for keys, scopes, and sandbox vs production.

Headers

X-Account-Id
string

Act as this account, making it the debited side. Send it with destination: "self" to recover funds back to your platform.

Body

application/json
destination
string
required

The account to credit, or self to send funds back to your platform when acting as an account you own with X-Account-Id. The debited side is always whoever is authenticated, so there is no source field.

Example:

"acct_3Wq8ZfT1yHnJ5sVe"

amount
string
required

Amount to move as a decimal string in currency, e.g. "7000.00". Always two decimal places. Must be greater than zero.

Example:

"7000.00"

currency
string
required

Three-letter ISO 4217 currency code for the transfer, e.g. NGN. Both balances must already hold this currency; a transfer never converts.

Required string length: 3 - 10
Example:

"NGN"

description
string | null

An arbitrary string attached to the transfer and returned unchanged. Useful for naming the order or invoice the share belongs to.

Maximum string length: 500
Example:

"Order #4471 seller share"

metadata
object | null

Your own key-value data, returned unchanged on the transfer. Not used by Bachs for processing.

transfer_group
string | null

Tags this transfer as part of a group, so several shares funded by the same charge can be reconciled together. Reuse the same value across every transfer for one charge, including a later recovery.

Maximum string length: 255
Example:

"ch_9f4c1d2e7b6a4f8e9c0d1a2b3c4d5e6f"

Response

Transfer created and the balances updated.

id
string

Unique identifier for this transfer.

Example:

"tr_8c1e04a7b93f2d6540ab"

source
string

Whoever was debited. Your platform when sending a share to an account you own, the account when recovering one.

Example:

"acct_7KpQ2mNv4XbR9dLc"

destination
string

Whoever was credited.

Example:

"acct_3Wq8ZfT1yHnJ5sVe"

amount
string

The amount moved, as a decimal string in currency.

Example:

"7000.00"

currency
string

Three-letter ISO 4217 currency code the transfer moved.

Example:

"NGN"

status
enum<string>

Whether the funds have moved. paid: the balances have been updated. pending: the transfer exists but its movement has not been recorded yet. Derived from the underlying movement, so it never disagrees with the balances.

Available options:
pending,
paid
Example:

"paid"

description
string | null

The description you supplied on creation.

Example:

"Order #4471 seller share"

metadata
object

The metadata you supplied on creation, returned unchanged.

transfer_group
string | null

The group you supplied on creation, or null when the transfer was not tagged.

Example:

"ch_9f4c1d2e7b6a4f8e9c0d1a2b3c4d5e6f"

kind
enum<string>

What this movement is. payout is a seller's share of a sale you made, and manual is a transfer you created yourself. The platform's own cut of a sale is never a transfer; read it at Platform fees.

Available options:
payout,
manual
Example:

"manual"

source_charge_id
string | null

The charge that funded this movement, when one did. Null on a transfer you created yourself, which is tied to nothing.

Example:

null

created_at
string

When the transfer was created, ISO 8601 in UTC.

Example:

"2026-08-07T11:04:22.518Z"