# Process sub-entity Bank Payouts
> **Information**
>
> This guide is for Bank Payouts to Platform sub-entities. For Enterprise Bank Payouts, see [Request Bank Payouts](https://www.checkout.com/docs/payments/request-payouts/bank-payouts.md).
If you're on the `Full` account type, you can send funds on demand or on a schedule to a sub-entity's bank account.
When you instruct a payout, the funds move from your platform currency account to the sub-entity's external bank account.
---
## Before you start
- Ensure that your sub-entity has passed the required [onboarding checks](https://www.checkout.com/docs/platforms/onboard-sub-entities/full-sub-entity-onboarding.md).
- Ensure the recipient bank account country is [supported by Checkout.com](https://www.checkout.com/docs/payments/request-payouts/bank-payouts/payout-formatting.md).
- Optionally, subscribe to [webhooks](https://www.checkout.com/docs/developer-resources/event-notifications/event-types.md#Platforms) to receive notifications.
---
## How it works
Follow these steps:
1. Add the recipient bank account details for Checkout.com to verify.
2. Check the bank account field formatting for the recipient account's country and currency.
3. Create a payment instrument.
4. Instruct an on-demand payout or schedule payouts.
---
## Add bank account details
Before you can send bank payouts, you must add recipient bank details using the Dashboard or API for Checkout.com to verify. If the sub-entity holds funds in multiple currencies, add a bank account for each currency.
### Add bank account details in the Dashboard
1. Sign in to the [Dashboard](https://dashboard.checkout.com).
2. Go to _Sub-entities_.
3. Select the relevant sub-entity from the list.
4. Go to _Manage account_ > _Payout methods_.
5. Select _Add a payout method_.
The _Add bank account_ page opens.
6. Enter the bank account details and upload a bank statement.
7. Select _Confirm and add_.
The bank account is added, with _Pending_ status.
When we've verified the bank account details, the status changes to _Verified_.
### Add bank account details using the API
Call the [Upload a file](https://api-reference.checkout.com/tag/Disputes/#operation/uploadFile) endpoint to upload a bank statement for Checkout.com to verify the bank details. For instructions, see [Upload a file](https://www.checkout.com/docs/platforms/onboard-sub-entities/full-sub-entity-onboarding/upload-a-file.md).
---
## Get bank account field formatting
To check the required bank account fields and format for the country and currency you want to pay out to, see [Bank account field formatting](https://www.checkout.com/docs/payments/request-payouts/bank-payouts/bank-account-field-formatting.md).
---
## Create a payment instrument
You can create a payment instrument for each bank account. The account details are saved securely in the Checkout.com [Vault](https://www.checkout.com/docs/payments/accept-payments/accept-a-payment-on-your-website/extend-your-flow-integration/accept-payments-with-stored-card-credentials.md). You receive a unique instrument ID to use in payout requests, instead of entering the bank details every time.
Call the [Add a payment instrument](https://api-reference.checkout.com/tag/Payment-instruments/#operation/addPlatformsPaymentInstrument) endpoint, and provide the sub-entity ID as the `{id}` path parameter.
In the request body, provide the following:
- `label` – Your reference for the payment instrument
- `type` – Set to `bank_account`.
- `currency` – The account's currency, as an ISO 4217 currency code
- `country`– The account's country, as an ISO 3166 alpha-2 country code
- `instrument_details.account_number` – The alphanumeric value that identifies the account
- `instrument_details.bank_code` – The code that identifies the bank
- `document.type`– Set to `bank_statement`.
- `document.file_id`– The file ID of the document uploaded when adding bank account details
If you're using a SEPA account, see the [API reference](https://api-reference.checkout.com/tag/Payment-instruments/#operation/addPlatformsPaymentInstrument) for more information.
> **Information**
>
> Your base URL's `{prefix}` value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox and production environments, see [API endpoints](https://www.checkout.com/docs/developer-resources/api/api-endpoints.md).
**Production**
`POST` `https://{prefix}.api.checkout.com/accounts/entities/{id}/payment-instruments`
**Sandbox**
`POST` `https://{prefix}.api.sandbox.checkout.com/accounts/entities/{id}/payment-instruments`
### Request example
```json
{
"label": "Bob's Bank Account",
"type": "bank_account",
"currency": "GBP",
"country": "GB",
"default": true,
"instrument_details": {
"account_number": "12345678",
"bank_code": "050389"
},
"document": {
"type": "bank_statement",
"file_id": "file_wxglze3wwywujg4nna5fb7ldli"
}
}
```
When you create a payment instrument, it automatically goes through a due diligence verification process.
It must successfully pass the verification process before you can proceed to the next step.
When the result is available, you receive one of the following webhooks:
- [Payment instrument verification passed](https://www.checkout.com/docs/developer-resources/event-notifications/event-types/payment_instrument_verification_passed.md)
- [Payment instrument verification failed](https://www.checkout.com/docs/developer-resources/event-notifications/event-types/payment_instrument_verification_failed.md)
The first payment instrument added for a specific currency is automatically associated to the payouts schedule for that currency. You need to associate any subsequent payment instruments to use as the destination when a payout is made. For more information, see [Scheduled payouts](#Scheduled_payouts).
---
## Instruct an on-demand payout
With on-demand payouts, sub-entity funds are paid out immediately, based on the payout instruction you make.
You can instruct a payout at any point in time, but if you do so on a weekend or public holiday, the payment instruction may be carried out the following working day.
### Instruct an on-demand payout in the Dashboard
1. Sign in to the [Dashboard](https://dashboard.checkout.com).
2. Go to _Sub-entities_.
3. Select the relevant sub-entity from the list.
4. Go to _Recent activity_ > _Send payout_.
5. Enter the required details.
You need the `instrument_id` value for the associated payment instrument to instruct an on-demand payout. To retrieve this value, call the [Get payment instrument details](https://api-reference.checkout.com/tag/Payment-instruments/#operation/getPlatformsPaymentInstrument) endpoint, and provide the:
- Sub-entity ID as the `{entityId}` path parameter
- Payment instrument ID as the `{id}` path parameter
> **Information**
>
> Your base URL's `{prefix}` value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox and production environments, see [API endpoints](https://www.checkout.com/docs/developer-resources/api/api-endpoints.md).
**Production**
`GET` `https://{prefix}.api.checkout.com/accounts/entities/{entityId}/payment-instruments/{id}`
**Sandbox**
`GET` `https://{prefix}.api.sandbox.checkout.com/accounts/entities/{entityId}/payment-instruments/{id}`
### Response example
```json
{
"id": "ppi_qn4nis4k3ykpzzu7cvtuvhqqga",
"label": "Bob's Bank Account",
"type": "bank_account",
"currency": "GBP",
"country": "GB",
"document": {
"type": "bank_statement",
"file_id": "file_wxglze3wwywujg4nna5fb7ldli"
},
"status": "verified",
"default": true,
"instrument_id": "src_pdasnoaxrtoevpyh3opgaxcrti"
}
```
Then, call the [Request a payment or payout](https://api-reference.checkout.com/tag/Payments/#operation/requestAPaymentOrPayout) endpoint.
In the request body, provide the following:
- `source.type`
- `source.id`
- `destination.type`– Set to `id`.
- `destination.id`– Set to the `instrument_id` value from the Get payment instrument details response.
- `amount`
- `currency`
- `billing_descriptor.reference`
- `processing_channel_id`
> **Information**
>
> Your base URL's `{prefix}` value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox and production environments, see [API endpoints](https://www.checkout.com/docs/developer-resources/api/api-endpoints.md).
**Production**
`POST` `https://{prefix}.api.checkout.com/payments`
**Sandbox**
`POST` `https://{prefix}.api.sandbox.checkout.com/payments`
#### Request example
```json
{
"source": {
"type": "entity",
"id": "ent_y3oqhf46pyzuxjbcn2giaqnb44"
},
"destination": {
"type": "id",
"id": "src_pdasnoaxrtoevpyh3opgaxcrti"
},
"amount": 1000,
"currency": "GBP",
"reference": "PO-215-5721",
"billing_descriptor": {
"reference": "Payout_descriptor"
},
"processing_channel_id": "pc_hpswyyx23geezflc2ocz3exn4y"
}
```
If your payout request was sent successfully, you receive a 202 response, with the status `Pending`.
If your request was unsuccessful, you receive a 422 or 429 response containing an error code. For more information, see [Bank payout response examples](https://www.checkout.com/docs/payouts/bank-payouts.md#Response_examples).
You receive one of the following webhooks notifying you of the payout status:
- [Payout paid](https://www.checkout.com/docs/developer-resources/event-notifications/event-types/payout_paid.md)
- [Payout declined](https://www.checkout.com/docs/developer-resources/event-notifications/event-types/payout_declined.md)
---
## Schedule a payout
You can schedule payouts for any day of the week. However, if scheduled on a weekend or public holiday, the instruction may be carried out on the following business day.
You can also configure different payout schedules for each currency the sub-entity holds funds in.
### Schedule payouts in the Dashboard
1. Sign in to the [Dashboard](https://dashboard.checkout.com).
2. Go to _Sub-entities_.
3. Select the relevant sub-entity from the list.
4. Go to _Manage account_ > _Payout schedule_.
5. Enter the required details and select _Save changes_.
You must first associate a payment instrument to the payout schedule before scheduling payouts using the API. To do this, call the [Update a sub-entity's payout schedule](https://api-reference.checkout.com/tag/Payout-schedules/#operation/putSubEntitysPayoutSchedule) endpoint, and provide the sub-entity ID as the `{id}` path parameter.
> **Information**
>
> Your base URL's `{prefix}` value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox and production environments, see [API endpoints](https://www.checkout.com/docs/developer-resources/api/api-endpoints.md).
**Production**
`PUT` `https://{prefix}.api.checkout.com/accounts/entities/{id}/payout-schedules`
**Sandbox**
`PUT` `https://{prefix}.api.sandbox.checkout.com/accounts/entities/{id}/payout-schedules`
### Request example
```json
{
"ISO": {
"enabled": true,
"threshold": 100,
"payment_instrument_id": "ppi_w4jelhppmfiufdnatam37wrfc4",
"recurrence": {
"frequency": "weekly",
"by_day": [
"monday"
]
}
}
}
```
You receive one of the following webhooks notifying you of the payout status:
- [Payout paid](https://www.checkout.com/docs/developer-resources/event-notifications/event-types/payout_paid.md)
- [Payout declined](https://www.checkout.com/docs/developer-resources/event-notifications/event-types/payout_declined.md)