---
title: "Create bulk transfer schedules"
method: POST
path: "/v1/transfers/bulk"
tags: ["Schedules"]
---

# Create bulk transfer schedules

`POST /v1/transfers/bulk`

Create multiple transfer schedules in a single request. This request triggers an asynchronous process to create the schedules. Once processing is complete, the [Bulk transfer schedules created](https://developers.pismo.io/events/docs/scheduler-payments-bulk-transfer-scheduled-payments-1) event is sent with the result of the operation.

This endpoint accepts a `defaults` object that can be used to set common values for all schedules in the request. Individual schedules can override any default value by specifying the field in their own definition.

Transfer amounts can be set as follows.
- If you fill out the `strategy` field, the platform uses the strategy logic to determine transfer amounts.
- If you don't fill out the `strategy` field, you must specify the `amount` field for each transfer in the `transfers` array, or provide a default amount in `transfer_defaults`.

In some cases, due to errors and retries, execution of the scheduled transaction might occur on the following day instead of the originally scheduled date. To address this, the `allow_execution_after_day_change` flag in `schedule_details` enables you to pre-authorize execution of the scheduled transaction on the next day. This flag must be set to `true` for schedules that are set to be executed at the end of the day (after 11:30pm UTC). If the schedule is not executed on the expected day for any reason, and this field isn't set to `true`, the schedule is not executed and is marked as `EXECUTED_WITH_ERROR_NEXT_DAY_NOT_ALLOWED`.

This endpoint generates the [Scheduled payment created or modified](https://developers.pismo.io/events/docs/scheduler-payments-scheduled-payments-1) event with the `status` field set to `CREATED`.

Each execution of the schedule also generates the [Scheduled payment executed](https://developers.pismo.io/events/docs/scheduler-payments-scheduled-payments-execution-1) event.

Refer to the [Payment scheduler](https://developers.pismo.io/pismo-docs/docs/payment-scheduler) guide for more information.

## Request body

- BulkTransferScheduleRequest — Request to create multiple transfer schedules in bulk
  - `defaults` BulkTransferScheduleDefaults — Default values applied to all transfer schedules in the request. Individual schedules can override these values.
    - `description` string — Challenge result
    - `schedule_details` BulkTransferScheduleDetailsDefault — Default schedule details that can be applied to all transfer schedules
      - `type` 'authentication' | 'challenge-request' — Evaluation intention
      - `interval` 'DAY' | 'WEEK' | 'MONTH' — Scheduler interval
      - `day_type` 'BUSINESS_DAY' | 'CALENDAR_DAY' — `BUSINESS_DAY` type ignores weekends and holidays, `CALENDAR_DAY` includes all calendar days.
      - `start_date` string, date-time — Start date of executions in the UTC-0 RFC3339 format. Format: YYYY-MM-DDTHH:mm:ss.sssZ.
      - `end_date` string, date-time — End date for link (GMT-3). When the final charge for a link is made, `end_date` gets populated.
      - `allow_execution_after_day_change` boolean — Can the schedule be executed after the day changes? For single and transfer schedules that are scheduled for after 11:30pm UTC, this field is required to be `true`.
    - `strategy` 'OVERDRAFT_SWEEP' | 'SWEEP' — If the `strategy` field is not specified, you must provide the `amount` field for each transfer in the `transfers` array. The following strategy types determine the transfer amounts when a strategy is specified. - `SWEEP`: Transfers the entire balance from the child account to the parent account. The terms "parent" and "child" refer to account roles, but no relationship validation is performed. Child → Parent - `OVERDRAFT_SWEEEP`: Follows the same logic as `SWEEP`, except when a child account is negative, in which case the main account sends enough money to zero out the child account. Parent → Child
    - `transfer_defaults` BulkTransferDefaults — Default values for individual transfers within schedules
      - `amount` number, double — Fee amount.
      - `description` string — Challenge result
      - `from_processing_code` string — Processing code for the debit transaction. If `split_transaction` is `false` (the default), each installment payment is recorded as one debit transaction equal to the installment amount minus the discount, and `processing_code` is the processing code for that transaction. If `split_transaction` is `true`, each installment payment is recorded as two transactions: a debit transaction for the installment amount and a credit transaction for the discount. In this case, `processing_code` is the processsing code for the debit transaction, and `second_processing_code` is the processing code for the credit transaction.
      - `to_processing_code` string — Processing code for the debit transaction. If `split_transaction` is `false` (the default), each installment payment is recorded as one debit transaction equal to the installment amount minus the discount, and `processing_code` is the processing code for that transaction. If `split_transaction` is `true`, each installment payment is recorded as two transactions: a debit transaction for the installment amount and a credit transaction for the discount. In this case, `processing_code` is the processsing code for the debit transaction, and `second_processing_code` is the processing code for the credit transaction.
      - `metadata` string — Any data object with key/value pairs. No limit on length. **Note**: This field must not be used to send Personally Identifiable Information (PII), Payment Card Industry (PCI) data, or any sensitive/regulated information. Metadata fields are intended for operational, non-sensitive data only. For sensitive data, use the specific parameters designed for that purpose. For more information, refer to [Get started with Pismo APIs](https://developers.pismo.io/pismo-docs/reference/get-started-with-pismo-apis#metadata).
  - `schedules` BulkTransferScheduleItem[], required — List of transfer schedules to create. Each schedule can override any default value.
    - `schedule_id` string, required — Schedule ID (idempotency field for this operation)
    - `description` string — Challenge result
    - `schedule_details` BulkTransferScheduleDetailsOverride — Schedule details that override the defaults for this specific transfer schedule
      - `type` 'authentication' | 'challenge-request' — Evaluation intention
      - `interval` 'DAY' | 'WEEK' | 'MONTH' — Scheduler interval
      - `day_type` 'BUSINESS_DAY' | 'CALENDAR_DAY' — `BUSINESS_DAY` type ignores weekends and holidays, `CALENDAR_DAY` includes all calendar days.
      - `start_date` string, date-time — Start date of executions in the UTC-0 RFC3339 format. Format: YYYY-MM-DDTHH:mm:ss.sssZ.
      - `end_date` string, date-time — End date for link (GMT-3). When the final charge for a link is made, `end_date` gets populated.
      - `allow_execution_after_day_change` boolean — Can the schedule be executed after the day changes? For single and transfer schedules that are scheduled for after 11:30pm UTC, this field is required to be `true`.
    - `strategy` 'OVERDRAFT_SWEEP' | 'SWEEP' — If the `strategy` field is not specified, you must provide the `amount` field for each transfer in the `transfers` array. The following strategy types determine the transfer amounts when a strategy is specified. - `SWEEP`: Transfers the entire balance from the child account to the parent account. The terms "parent" and "child" refer to account roles, but no relationship validation is performed. Child → Parent - `OVERDRAFT_SWEEEP`: Follows the same logic as `SWEEP`, except when a child account is negative, in which case the main account sends enough money to zero out the child account. Parent → Child
    - `transfers` BulkTransferItemRequest[], required — List of transfers for this schedule. At least one transfer is required.
      - `amount` number, double — Fee amount.
      - `description` string — Challenge result
      - `from` BulkTransferFrom, required — Source of a transfer. `account_id` is required; `processing_code` can use the default value.
        - `account_id` integer, required — Account ID
        - `processing_code` string — Processing code for the debit transaction. If `split_transaction` is `false` (the default), each installment payment is recorded as one debit transaction equal to the installment amount minus the discount, and `processing_code` is the processing code for that transaction. If `split_transaction` is `true`, each installment payment is recorded as two transactions: a debit transaction for the installment amount and a credit transaction for the discount. In this case, `processing_code` is the processsing code for the debit transaction, and `second_processing_code` is the processing code for the credit transaction.
      - `to` BulkTransferTo, required — Destination of a transfer. `account_id` is required; `processing_code` can use the default value.
        - `account_id` integer, required — Account ID
        - `processing_code` string — Processing code for the debit transaction. If `split_transaction` is `false` (the default), each installment payment is recorded as one debit transaction equal to the installment amount minus the discount, and `processing_code` is the processing code for that transaction. If `split_transaction` is `true`, each installment payment is recorded as two transactions: a debit transaction for the installment amount and a credit transaction for the discount. In this case, `processing_code` is the processsing code for the debit transaction, and `second_processing_code` is the processing code for the credit transaction.
      - `metadata` string — Any data object with key/value pairs. No limit on length. **Note**: This field must not be used to send Personally Identifiable Information (PII), Payment Card Industry (PCI) data, or any sensitive/regulated information. Metadata fields are intended for operational, non-sensitive data only. For sensitive data, use the specific parameters designed for that purpose. For more information, refer to [Get started with Pismo APIs](https://developers.pismo.io/pismo-docs/reference/get-started-with-pismo-apis#metadata).

## Response `202`

Request was accepted and schedules will be processed asynchronously.

## Other responses

- `400` — Bad request
- `403` — The request has been lost
- `500` — Internal server error

---

[API](https://skmtc.net/pismo/apis/platform-authentication.md) · [All operations](https://skmtc.net/pismo/apis/platform-authentication/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/pismo/platform-authentication/revisions/935b62e16de4/schema)
