Stripe: Create a payout
Stripe payouts.postPayouts: arguments, response, policy and SDK examples.
← Payouts operations · Get started
Operation stripe.postpayouts
Provider route: POST /v1/payouts. Alter supplies the connection’s credentials and routing.
Call through Alter
Section titled “Call through Alter”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["payouts"]["postPayouts"]>[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.payouts.postPayouts(input); const result = await call.wait(); return result.bodyJson(); } finally { await app.close(); }}import osfrom alter_sdk import Appfrom 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.payouts.post_payouts(arguments) result = await call.wait() return result.body_json()| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | Additional keys: not allowed |
headers | object | Optional | Additional keys: not allowed |
headers.Idempotency-Key | string | Optional | Minimum length: 1 Maximum length: 255 |
body | object | Required within parent | Additional keys: not allowed |
body.amount | integer | Required within parent | A positive integer in cents representing how much to pay out. |
body.currency | string | Required within parent | Three-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 |
body.description | string | Optional | An arbitrary string attached to the object. Often useful for displaying to users. Maximum length: 5000 |
body.destination | string | Optional | The ID of a bank account or a card to send the payout to. If you don’t provide a destination, we use the default external account for the specified currency. |
body.expand | array | Optional | Specifies which fields in the response should be expanded. |
body.expand[] | string | Each item | Maximum length: 5000 |
body.metadata | object | Optional | Set 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.* | string | Additional keys | |
body.method | string | Optional | The method used to send this payout, which is `standard` or `instant`. We support `instant` for payouts to debit cards and bank accounts in certain countries. Learn more about [bank support for Instant Payouts](https://stripe.com/docs/payouts/instant-payouts-banks). One of: instant, standard Maximum length: 5000 |
body.payout_method | string | Optional | The ID of a v2 FinancialAccount to send funds to. |
body.source_type | string | Optional | The balance type of your Stripe balance to draw this payout from. Balances for different payment sources are kept separately. You can find the amounts with the Balances API. One of `bank_account`, `card`, or `fpx`. One of: bank_account, card, fpx Maximum length: 5000 |
body.statement_descriptor | string | Optional | A string that displays on the recipient’s bank or card statement (up to 22 characters). A `statement_descriptor` that’s longer than 22 characters return an error. Most banks truncate this information and display it inconsistently. Some banks might not display it at all. For US ACH payouts, this maps to the ACH Company Entry Description field, which the NACHA standard limits to 10 characters. Stripe truncates descriptors longer than 10 characters for US ACH payouts. Maximum length: 22 |
Response
Section titled “Response”Response media type: application/json. The table describes the pinned successful response. Referenced models link to their complete fields.
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | Model | Root | Expand Cancel a payout — response body |
Referenced models: Cancel a payout — response body
Schemas
Section titled “Schemas”702 more schemas are linked from the tables above, on the schema pages.
Post Application Fees Id Refund — response body
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | |
account | JSON | Required within parent | ID of the Stripe account this fee was taken from. |
account (anyOf 1) | string | Alternative | Maximum length: 5000 |
account (anyOf 2) | Model | Alternative | Expand Create an account — response body |
amount | JSON | Required within parent | |
amount (anyOf 1) | integer | Alternative | Amount earned, in cents (or local equivalent). |
amount (anyOf 2) | string | Alternative | Pattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$ |
amount_refunded | JSON | Required within parent | |
amount_refunded (anyOf 1) | integer | Alternative | Amount in cents (or local equivalent) refunded (can be less than the amount attribute on the fee if a partial refund was issued) |
amount_refunded (anyOf 2) | string | Alternative | Pattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$ |
application | JSON | Required within parent | ID of the Connect application that earned the fee. |
application (anyOf 1) | string | Alternative | Maximum length: 5000 |
application (anyOf 2) | Model | Alternative | Expand PostApplicationFeesIdRefund — response body — application / object: application |
balance_transaction | JSON | Optional | |
balance_transaction (anyOf 1) | JSON | Alternative | Balance transaction that describes the impact of this collected application fee on your account balance (not including refunds). |
balance_transaction (anyOf 1) (anyOf 1) | string | Alternative | Maximum length: 5000 |
balance_transaction (anyOf 1) (anyOf 2) | Model | Alternative | Expand Retrieve a balance transaction — balance get Balance History Id — response body |
balance_transaction (anyOf 2) | null | Alternative | |
charge | JSON | Required within parent | ID of the charge that the application fee was taken from. |
charge (anyOf 1) | string | Alternative | Maximum length: 5000 |
charge (anyOf 2) | Model | Alternative | Expand Create a charge — response body |
created | JSON | Required within parent | |
created (anyOf 1) | integer | Alternative | Time at which the object was created. Measured in seconds since the Unix epoch. Format: unix-time |
created (anyOf 2) | string | Alternative | Pattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$ |
currency | string | Required within parent | Three-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 |
fee_source | JSON | Optional | |
fee_source (anyOf 1) | JSON | Alternative | Polymorphic source of the application fee. Includes the ID of the object the application fee was created from. |
fee_source (anyOf 1) (anyOf 1) | Model | Alternative | Expand PostApplicationFeesIdRefund — response body — fee_source / value / type: charge, payout |
fee_source (anyOf 2) | null | Alternative | |
id | string | Required within parent | Unique identifier for the object. Maximum length: 5000 |
livemode | boolean | Required within parent | If the object exists in live mode, the value is `true`. If the object exists in test mode, the value is `false`. |
object | string | Required within parent | String representing the object's type. Objects of the same type share the same value. Known values: application_fee |
originating_transaction | JSON | Optional | |
originating_transaction (anyOf 1) | JSON | Alternative | ID of the corresponding charge on the platform account, if this fee was the result of a charge using the `destination` parameter. |
originating_transaction (anyOf 1) (anyOf 1) | string | Alternative | Maximum length: 5000 |
originating_transaction (anyOf 1) (anyOf 2) | Model | Alternative | Expand Create a charge — response body |
originating_transaction (anyOf 2) | null | Alternative | |
refunded | boolean | Required within parent | Whether the fee has been fully refunded. If the fee is only partially refunded, this attribute will still be false. |
refunds | object | Required within parent | A list of refunds that have been applied to the fee. |
refunds.data | array | Required within parent | Details about each object. |
refunds.data[] | Model | Each item | Expand Create an application fee refund — response body |
refunds.has_more | boolean | Required within parent | True if this list has another page of items after this one that can be fetched. |
refunds.object | string | Required within parent | String representing the object's type. Objects of the same type share the same value. Always has the value `list`. Known values: list |
refunds.url | string | Required within parent | The URL where this list can be accessed. Maximum length: 5000 |
Referenced models: Create an account — response body, PostApplicationFeesIdRefund — response body — application / object: application, Retrieve a balance transaction — balance get Balance History Id — response body, Create a charge — response body, Create an application fee refund — response body, PostApplicationFeesIdRefund — response body — fee_source / value / type: charge, payout
Delete an external account — accounts.deleteAccountsAccountBankAccountsId — response body — deleted: True, object: bank account
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | |
currency | JSON | Optional | |
currency (anyOf 1) | string | Alternative | Three-letter [ISO code for the currency](https://stripe.com/docs/payouts) paid out to the bank account. Maximum length: 5000 |
currency (anyOf 2) | null | Alternative | |
deleted | boolean | Required within parent | Always true for a deleted object Known values: True |
id | string | Required within parent | Unique identifier for the object. Maximum length: 5000 |
object | string | Required within parent | String representing the object's type. Objects of the same type share the same value. Known values: bank_account |
Delete an external account — accounts.deleteAccountsAccountBankAccountsId — response body — deleted: True, object: card
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | |
currency | JSON | Optional | |
currency (anyOf 1) | string | Alternative | Three-letter [ISO code for the currency](https://stripe.com/docs/payouts) paid out to the bank account. Maximum length: 5000 |
currency (anyOf 2) | null | Alternative | |
deleted | boolean | Required within parent | Always true for a deleted object Known values: True |
id | string | Required within parent | Unique identifier for the object. Maximum length: 5000 |
object | string | Required within parent | String representing the object's type. Objects of the same type share the same value. Known values: card |
Cancel a payout — response body — trace id value status, value
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | |
status | string | Required within parent | Possible values are `pending`, `supported`, and `unsupported`. When `payout.status` is `pending` or `in_transit`, this will be `pending`. When the payout transitions to `paid`, `failed`, or `canceled`, this status will become `supported` or `unsupported` shortly after in most cases. In some cases, this may appear as `pending` for up to 10 days after `arrival_date` until transitioning to `supported` or `unsupported`. Maximum length: 5000 |
value | JSON | Optional | |
value (anyOf 1) | string | Alternative | The trace ID value if `trace_id.status` is `supported`, otherwise `nil`. Maximum length: 5000 |
value (anyOf 2) | null | Alternative |
PostApplicationFeesIdRefund — response body — application / object: application
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | |
id | string | Required within parent | Unique identifier for the object. Maximum length: 5000 |
name | JSON | Optional | |
name (anyOf 1) | string | Alternative | The name of the application. Maximum length: 5000 |
name (anyOf 2) | null | Alternative | |
object | string | Required within parent | String representing the object's type. Objects of the same type share the same value. Known values: application |
PostApplicationFeesIdRefund — response body — fee_source / value / type: charge, payout
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | |
charge | string | Optional | Charge ID that created this application fee. Maximum length: 5000 |
payout | string | Optional | Payout ID that created this application fee. Maximum length: 5000 |
type | string | Required within parent | Type of object that created the application fee. Known values: charge, payout |
Delete a customer — response body
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | |
deleted | boolean | Required within parent | Always true for a deleted object Known values: True |
id | string | Required within parent | Unique identifier for the object. Maximum length: 5000 |
object | string | Required within parent | String representing the object's type. Objects of the same type share the same value. Known values: customer |
Policy, approvals and errors
Section titled “Policy, approvals and errors”SDK function policy ID: stripe.postpayouts. Catalog operation: PostPayouts. 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"}