Skip to content

Stripe: Create a transfer

Stripe transfers.postTransfers: arguments, response, policy and SDK examples.

← Transfers operations · Get started

Operation stripe.posttransfers

Provider route: POST /v1/transfers. Alter supplies the connection’s credentials and routing.

Install @alter-ai/sdk @alter-ai/stripe with npm, or alter-sdk-stripe with pip. Supply your connected customer’s grant ID and the arguments described below.

import { App } from "@alter-ai/sdk";
import { StripeIntegration } from "@alter-ai/stripe";
async function execute(input: Parameters<StripeIntegration["transfers"]["postTransfers"]>[0]) {
const app = new App({ apiKey: process.env.ALTER_API_KEY! });
try {
const provider = new StripeIntegration(app, { grantId: process.env.PROVIDER_GRANT_ID! });
const call = await provider.transfers.postTransfers(input);
const result = await call.wait();
return result.bodyJson();
} finally {
await app.close();
}
}
import os
from alter_sdk import App
from alter_sdk_stripe import StripeIntegration
async def execute(arguments):
async with App(api_key=os.environ["ALTER_API_KEY"]) as app:
provider = StripeIntegration(app, {"grant_id": os.environ["PROVIDER_GRANT_ID"]})
call = await provider.transfers.post_transfers(arguments)
result = await call.wait()
return result.body_json()
FieldTypePresenceDescription and constraints
$objectRootAdditional keys: not allowed
headersobjectOptionalAdditional keys: not allowed
headers.Idempotency-KeystringOptionalMinimum length: 1
Maximum length: 255
bodyobjectRequired within parentAdditional keys: not allowed
body.amountintegerOptionalA positive integer in cents (or local equivalent) representing how much to transfer.
body.currencystringRequired within parentThree-letter [ISO code for currency](https://www.iso.org/iso-4217-currency-codes.html) in lowercase. Must be a [supported currency](https://docs.stripe.com/currencies).
Format: currency
body.descriptionstringOptionalAn arbitrary string attached to the object. Often useful for displaying to users.
Maximum length: 5000
body.destinationstringRequired within parentThe ID of a connected Stripe account. <a href=“/docs/connect/separate-charges-and-transfers”>See the Connect documentation</a> for details.
body.expandarrayOptionalSpecifies which fields in the response should be expanded.
body.expand[]stringEach itemMaximum length: 5000
body.metadataobjectOptionalSet of [key-value pairs](https://docs.stripe.com/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`.
Additional keys: see wildcard field
body.metadata.*stringAdditional keys
body.source_transactionstringOptionalYou can use this parameter to transfer funds from a charge before they are added to your available balance. A pending balance will transfer immediately but the funds will not become available until the original charge becomes available. [See the Connect documentation](https://docs.stripe.com/connect/separate-charges-and-transfers#transfer-availability) for details.
body.source_typestringOptionalThe source balance to use for this transfer. One of `bank_account`, `card`, or `fpx`. For most users, this will default to `card`.
One of: bank_account, card, fpx
Maximum length: 5000
body.transfer_groupstringOptionalA string that identifies this transaction as part of a group. See the [Connect documentation](https://docs.stripe.com/connect/separate-charges-and-transfers#transfer-options) for details.

Response media type: application/json. The table describes the pinned successful response. Referenced models link to their complete fields.

FieldTypePresenceDescription and constraints
$ModelRootExpand Create a transfer — response body

Referenced models: Create a transfer — response body

704 more schemas are linked from the tables above, on the schema pages.

Create a transfer — response body
FieldTypePresenceDescription and constraints
$objectRootA `Transfer` object is created when you move funds between Stripe accounts as
part of Connect.

Before April 6, 2017, transfers also represented movement of funds from a
Stripe account to a card or bank account. This behavior has since been split
out into a [Payout](https://docs.stripe.com/api#payout_object) object, with corresponding payout endpoints. For more
information, read about the
[transfer/payout split](https://docs.stripe.com/transfer-payout-split).

Related guide: [Creating separate charges and transfers](https://docs.stripe.com/connect/separate-charges-and-transfers)
amountJSONRequired within parent
amount (anyOf 1)integerAlternativeAmount in cents (or local equivalent) to be transferred.
amount (anyOf 2)stringAlternativePattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$
amount_reversedJSONRequired within parent
amount_reversed (anyOf 1)integerAlternativeAmount in cents (or local equivalent) reversed (can be less than the amount attribute on the transfer if a partial reversal was issued).
amount_reversed (anyOf 2)stringAlternativePattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$
balance_transactionJSONOptional
balance_transaction (anyOf 1)JSONAlternativeBalance transaction that describes the impact of this transfer on your account balance.
balance_transaction (anyOf 1) (anyOf 1)stringAlternativeMaximum length: 5000
balance_transaction (anyOf 1) (anyOf 2)ModelAlternativeExpand Retrieve a balance transaction — balance get Balance History Id — response body
balance_transaction (anyOf 2)nullAlternative
createdJSONRequired within parent
created (anyOf 1)integerAlternativeTime that this record of the transfer was first created.
Format: unix-time
created (anyOf 2)stringAlternativePattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$
currencystringRequired within parentThree-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies).
Format: currency
descriptionJSONOptional
description (anyOf 1)stringAlternativeAn arbitrary string attached to the object. Often useful for displaying to users.
Maximum length: 5000
description (anyOf 2)nullAlternative
destinationJSONOptional
destination (anyOf 1)JSONAlternativeID of the Stripe account the transfer was sent to.
destination (anyOf 1) (anyOf 1)stringAlternativeMaximum length: 5000
destination (anyOf 1) (anyOf 2)ModelAlternativeExpand Create an account — response body
destination (anyOf 2)nullAlternative
destination_paymentJSONOptionalIf the destination is a Stripe account, this will be the ID of the payment that the destination account received for the transfer.
destination_payment (anyOf 1)stringAlternativeMaximum length: 5000
destination_payment (anyOf 2)ModelAlternativeExpand Create a charge — response body
idstringRequired within parentUnique identifier for the object.
Maximum length: 5000
livemodebooleanRequired within parentIf the object exists in live mode, the value is `true`. If the object exists in test mode, the value is `false`.
metadataobjectRequired within parentSet of [key-value pairs](https://docs.stripe.com/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
Additional keys: see wildcard field
metadata.*stringAdditional keysMaximum length: 500
objectstringRequired within parentString representing the object's type. Objects of the same type share the same value.
Known values: transfer
reversalsobjectRequired within parentA list of reversals that have been applied to the transfer.
reversals.dataarrayRequired within parentDetails about each object.
reversals.data[]ModelEach itemExpand Update a reversal — response body
reversals.has_morebooleanRequired within parentTrue if this list has another page of items after this one that can be fetched.
reversals.objectstringRequired within parentString representing the object's type. Objects of the same type share the same value. Always has the value `list`.
Known values: list
reversals.urlstringRequired within parentThe URL where this list can be accessed.
Maximum length: 5000
reversedbooleanRequired within parentWhether the transfer has been fully reversed. If the transfer is only partially reversed, this attribute will still be false.
source_transactionJSONOptional
source_transaction (anyOf 1)JSONAlternativeID of the charge that was used to fund the transfer. If null, the transfer was funded from the available balance.
source_transaction (anyOf 1) (anyOf 1)stringAlternativeMaximum length: 5000
source_transaction (anyOf 1) (anyOf 2)ModelAlternativeExpand Create a charge — response body
source_transaction (anyOf 2)nullAlternative
source_typestringOptionalThe source balance this transfer came from. One of `card`, `fpx`, or `bank_account`.
Maximum length: 5000
transfer_groupJSONOptional
transfer_group (anyOf 1)stringAlternativeA string that identifies this transaction as part of a group. See the [Connect documentation](https://docs.stripe.com/connect/separate-charges-and-transfers#transfer-options) for details.
Maximum length: 5000
transfer_group (anyOf 2)nullAlternative

Referenced models: Create an account — response body, Retrieve a balance transaction — balance get Balance History Id — response body, Create a charge — response body, Update a reversal — response body

Create an account — response body — groups The groups associated with the account payments pricing
FieldTypePresenceDescription and constraints
$objectRoot
payments_pricingJSONOptional
payments_pricing (anyOf 1)stringAlternativeThe group the account is in to determine their payments pricing, and null if the account is on customized pricing. [See the Platform pricing tool documentation](https://docs.stripe.com/connect/platform-pricing-tools) for details.
Maximum length: 5000
payments_pricing (anyOf 2)nullAlternative
Create an account — response body — tos acceptance
FieldTypePresenceDescription and constraints
$objectRoot
dateJSONOptional
date (anyOf 1)JSONAlternative
date (anyOf 1) (anyOf 1)integerAlternativeThe Unix timestamp marking when the account representative accepted their service agreement
Format: unix-time
date (anyOf 1) (anyOf 2)stringAlternativePattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$
date (anyOf 2)nullAlternative
ipJSONOptional
ip (anyOf 1)stringAlternativeThe IP address from which the account representative accepted their service agreement
Maximum length: 5000
ip (anyOf 2)nullAlternative
service_agreementstringOptionalThe user's service agreement type
Maximum length: 5000
user_agentJSONOptional
user_agent (anyOf 1)stringAlternativeThe user agent of the browser from which the account representative accepted their service agreement
Maximum length: 5000
user_agent (anyOf 2)nullAlternative
Create an account — response body — controller
FieldTypePresenceDescription and constraints
$objectRoot
feesModelOptionalExpand Create an account — response body — controller fees
is_controllerbooleanOptional`true` if the Connect application retrieving the resource controls the account and can therefore exercise [platform controls](https://docs.stripe.com/connect/platform-controls-for-standard-accounts). Otherwise, this field is null.
lossesModelOptionalExpand Create an account — response body — controller losses
requirement_collectionstringOptionalA value indicating responsibility for collecting requirements on this account. Only returned when the Connect application retrieving the resource controls the account.
Known values: application, stripe
stripe_dashboardModelOptionalExpand Create an account — response body — controller stripe dashboard
typestringRequired within parentThe controller type. Can be `application`, if a Connect application controls the account, or `account`, if the account controls itself.
Known values: account, application

Referenced models: Create an account — response body — controller fees, Create an account — response body — controller losses, Create an account — response body — controller stripe dashboard

Create an account — response body — settings value bacs debit payments, branding, card issuing, card payments, dashboard, invoices, payments, payouts, paypay payments, sepa debit payments, treasury sepa debit payments
FieldTypePresenceDescription and constraints
$objectRoot
creditor_idstringOptionalSEPA creditor identifier that identifies the company making the payment.
Maximum length: 5000

SDK function policy ID: stripe.posttransfers. Catalog operation: PostTransfers. Rules can name either ID; function rules distinguish managed calls and conservatively cover raw calls sharing the route. Existing grant permissions and policy rules apply. wait() returns an immediate result or waits for a required approval; it never approves the request itself. Persist the approval ID to resume after a restart.

Provider errors retain their response; JSON decoding raises ProviderAPIError for provider failures. ManagedOperationError identifies contract/input/retention errors. See error handling and provider-specific behavior. Sensitive input may be refused before approval storage. A decoding error never resubmits a write.

Pinned headers: {"Stripe-Version": "2026-09-30.endive"}

Official provider source

Report an issue with this page

Necessary

Required for sign-in, security, authorization, and remembering your choices.

Always active

Analytics

Helps us understand which product and documentation features are useful.

Performance diagnostics

Uses performance tracing and privacy-masked session replay to diagnose problems.

You can change these choices at any time from Cookie settings.