---
title: "Create an ACH Transfer"
method: POST
path: "/ach_transfers"
---

# Create an ACH Transfer

`POST /ach_transfers`

## Request body

- CreateAnAchTransferParameters
  - `account_id` string, required — The Increase identifier for the account that will send the transfer.
  - `account_number` string — The receiver's account number. For credit transfers (positive `amount`) this is the account that funds will be sent to. For debit transfers (negative `amount`) this is the account that funds will be pulled from.
  - `addenda` object — Additional information passed through to the receiving bank with the transfer. Most ACH transfers do not need this. Only set this if your recipient has asked for addendum data, typically unstructured remittance information. Corporate Trade Exchange (CTX) flows can carry structured X12 remittance advice instead.
    - `category` 'freeform' | 'payment_order_remittance_advice', required — The type of addenda to pass with the transfer.
    - `freeform` object — Unstructured `payment_related_information` passed through with the transfer. Required if and only if `category` is `freeform`.
      - `entries` object[], required — Each entry represents an addendum sent with the transfer. Sending more than one addendum is only supported for transfers with `standard_entry_class_code` of `corporate_trade_exchange` (CTX).
        - `payment_related_information` string, required — The payment related information passed in the addendum.
    - `payment_order_remittance_advice` object — Structured ASC X12 820 remittance advice records. Please reach out to [support@increase.com](mailto:support@increase.com) for more information. Required if and only if `category` is `payment_order_remittance_advice`.
      - `invoices` object[], required — ASC X12 RMR records for this specific transfer.
        - `invoice_number` string, required — The invoice number for this reference, determined in advance with the receiver.
        - `paid_amount` integer, required — The amount that was paid for this invoice in the minor unit of its currency. For dollars, for example, this is cents.
  - `amount` integer, required — The transfer amount in USD cents. A positive amount originates a credit transfer pushing funds to the receiving account. A negative amount originates a debit transfer pulling funds from the receiving account.
  - `company_descriptive_date` string — A description of the transfer date (typically `YYMMDD`), sent in the company batch header. This value is informational and does not affect funds movement, settlement timing, or returns. Only set this if your recipient has asked for it.
  - `company_discretionary_data` string — Custom data sent in the company batch header. This value is informational and does not affect funds movement, settlement timing, or returns. Most ACH transfers do not need this. Only set this if your recipient has asked for it.
  - `company_entry_description` string — A short description sent in the company batch header. Most receivers do not surface this. Only set this if your recipient has asked for a specific value or if Nacha mandates one for your Standard Entry Class (SEC) code and use case. For example, Prearranged Payment and Deposit (PPD) payroll credits must use `PAYROLL`, and reversals must use `REVERSAL`.
  - `company_name` string — The name by which the recipient knows you, sent in the company batch header. We recommend setting this on every transfer; if you do not, we fall back to the ACH company name configured on your account.
  - `destination_account_holder` 'business' | 'individual' | 'unknown' — The type of entity that owns the receiver's account.
  - `external_account_id` string — The ID of an External Account to initiate a transfer to. If this parameter is provided, `account_number`, `routing_number`, and `funding` must be absent.
  - `funding` 'checking' | 'savings' | 'loan' | 'general_ledger' — The type of the receiver's bank account.
  - `individual_id` string — Your internal identifier for the transfer recipient. This value is informational and not verified by the recipient's bank. Most callers can leave this unset.
  - `individual_name` string — The name of the transfer recipient. This value is informational and not verified by the recipient's bank.
  - `preferred_effective_date` object — Configuration for how the effective date of the transfer will be set. This determines same-day vs future-dated settlement timing. If not set, defaults to a `settlement_schedule` of `same_day`. If set, exactly one of the child attributes must be set.
    - `date` string, date — A specific date in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format to use as the effective date when submitting this transfer.
    - `settlement_schedule` 'same_day' | 'future_dated' — A schedule by which Increase will choose an effective date for the transfer.
  - `require_approval` boolean — Whether the transfer requires explicit approval via the dashboard or API.
  - `routing_number` string — The American Bankers' Association (ABA) Routing Transit Number (RTN) of the receiver's bank.
  - `standard_entry_class_code` 'corporate_credit_or_debit' | 'corporate_trade_exchange' | 'prearranged_payments_and_deposit' | 'internet_initiated' — The [Standard Entry Class (SEC) code](/documentation/ach-standard-entry-class-codes) to use for the transfer. If not provided, the default is `corporate_credit_or_debit`.
  - `statement_descriptor` string, required — A description you choose to give the transfer. This will be saved with the transfer details, displayed in the dashboard, and returned by the API. If `individual_name` and `company_name` are not explicitly set by this API, the `statement_descriptor` will be sent in those fields to the receiving bank to help the customer recognize the transfer. You are highly encouraged to pass `individual_name` and `company_name` instead of relying on this fallback.

## Response `200`

ACH Transfer

- AchTransfer — ACH transfers move funds between your Increase account and any other account accessible by the Automated Clearing House (ACH).
  - `account_id` string, required — The Account to which the transfer belongs.
  - `account_number` string, required — The receiver's account number.
  - `acknowledgement` object, nullable, required — After the transfer is acknowledged by FedACH, this will contain supplemental details. The Federal Reserve sends an acknowledgement message for each file that Increase submits.
    - `acknowledged_at` string, required — When the Federal Reserve acknowledged the submitted file containing this transfer.
  - `addenda` object, nullable, required — Additional information that will be sent to the recipient.
    - `category` 'freeform' | 'payment_order_remittance_advice' | 'other', required — The type of the resource. We may add additional possible values for this enum over time; your application should be able to handle such additions gracefully.
    - `freeform` object, nullable — Unstructured `payment_related_information` passed through with the transfer.
      - `entries` object[], required — Each entry represents an addendum sent with the transfer.
        - `payment_related_information` string, required — The payment related information passed in the addendum.
    - `payment_order_remittance_advice` object, nullable — Structured ASC X12 820 remittance advice records. Please reach out to [support@increase.com](mailto:support@increase.com) for more information.
      - `invoices` object[], required — ASC X12 RMR records for this specific transfer.
        - `invoice_number` string, required — The invoice number for this reference, determined in advance with the receiver.
        - `paid_amount` integer, required — The amount that was paid for this invoice in the minor unit of its currency. For dollars, for example, this is cents.
  - `amount` integer, required — The transfer amount in USD cents. A positive amount indicates a credit transfer pushing funds to the receiving account. A negative amount indicates a debit transfer pulling funds from the receiving account.
  - `approval` object, nullable, required — If your account requires approvals for transfers and the transfer was approved, this will contain details of the approval.
    - `approved_at` string, date-time, required — The [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date and time at which the transfer was approved.
    - `approved_by` string, nullable, required — If the Transfer was approved by a user in the dashboard, the email address of that user.
  - `cancellation` object, nullable, required — If your account requires approvals for transfers and the transfer was not approved, this will contain details of the cancellation.
    - `canceled_at` string, date-time, required — The [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date and time at which the Transfer was canceled.
    - `canceled_by` string, nullable, required — If the Transfer was canceled by a user in the dashboard, the email address of that user.
  - `company_descriptive_date` string, nullable, required — The description of the date of the transfer.
  - `company_discretionary_data` string, nullable, required — The data you chose to associate with the transfer.
  - `company_entry_description` string, nullable, required — The description of the transfer you set to be shown to the recipient.
  - `company_id` string, required — The company ID associated with the transfer.
  - `company_name` string, nullable, required — The name by which the recipient knows you.
  - `created_at` string, date-time, required — The [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date and time at which the transfer was created.
  - `created_by` object, nullable, required — What object created the transfer, either via the API or the dashboard.
    - `api_key` object, nullable — If present, details about the API key that created the transfer.
      - `description` string, nullable, required — The description set for the API key when it was created.
    - `category` 'api_key' | 'oauth_application' | 'user', required — The type of object that created this transfer.
    - `oauth_application` object, nullable — If present, details about the OAuth Application that created the transfer.
      - `name` string, required — The name of the OAuth Application.
    - `user` object, nullable — If present, details about the User that created the transfer.
      - `email` string, required — The email address of the User.
  - `currency` 'USD', required — The [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code for the transfer's currency. For ACH transfers this is always equal to `usd`.
  - `destination_account_holder` 'business' | 'individual' | 'unknown', required — The type of entity that owns the receiver's account.
  - `external_account_id` string, nullable, required — The identifier of the External Account the transfer was made to, if any.
  - `funding` 'checking' | 'savings' | 'loan' | 'general_ledger', required — The type of the receiver's bank account.
  - `id` string, required — The ACH transfer's identifier.
  - `idempotency_key` string, nullable, required — The idempotency key you chose for this object. This value is unique across Increase and is used to ensure that a request is only processed once. Learn more about [idempotency](https://increase.com/documentation/idempotency-keys).
  - `inbound_funds_hold` InboundFundsHold, required — We hold funds for certain transaction types to account for return windows where funds might still be clawed back by the sending institution.
    - `amount` integer, required — The held amount in the minor unit of the account's currency. For dollars, for example, this is cents.
    - `automatically_releases_at` string, date-time, required — When the hold will be released automatically. Certain conditions may cause it to be released before this time.
    - `created_at` string, date-time, required — The [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) time at which the hold was created.
    - `currency` 'USD', required — The [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code for the hold's currency.
    - `held_transaction_id` string, nullable, required — The ID of the Transaction for which funds were held.
    - `pending_transaction_id` string, nullable, required — The ID of the Pending Transaction representing the held funds.
    - `released_at` string, date-time, nullable, required — When the hold was released (if it has been released).
    - `status` 'held' | 'complete', required — The status of the hold.
    - `type` 'inbound_funds_hold', required — A constant representing the object's type. For this resource it will always be `inbound_funds_hold`.
  - `individual_id` string, nullable, required — Your internal identifier for the transfer recipient. This value is informational and not verified by the recipient's bank.
  - `individual_name` string, nullable, required — The name of the transfer recipient. This value is informational and not verified by the recipient's bank.
  - `network` 'ach', required — The transfer's network.
  - `notifications_of_change` object[], required — If the receiving bank notifies that future transfers should use different details, this will contain those details.
    - `change_code` 'incorrect_account_number' | 'incorrect_routing_number' | 'incorrect_routing_number_and_account_number' | 'incorrect_transaction_code' | 'incorrect_account_number_and_transaction_code' | 'incorrect_routing_number_account_number_and_transaction_code' | 'incorrect_receiving_depository_financial_institution_identification' | 'incorrect_individual_identification_number' | 'addenda_format_error' | 'incorrect_standard_entry_class_code_for_outbound_international_payment' | 'misrouted_notification_of_change' | 'incorrect_trace_number' | 'incorrect_company_identification_number' | 'incorrect_identification_number' | 'incorrectly_formatted_corrected_data' | 'incorrect_discretionary_data' | 'routing_number_not_from_original_entry_detail_record' | 'depository_financial_institution_account_number_not_from_original_entry_detail_record' | 'incorrect_transaction_code_by_originating_depository_financial_institution', required — The required type of change that is being signaled by the receiving financial institution.
    - `corrected_account_funding` 'checking' | 'savings' | 'loan' | 'general_ledger', nullable, required — The corrected account funding type that should be used in future ACHs to this account. This is derived from the corrected transaction code.
    - `corrected_account_number` string, nullable, required — The corrected account number that should be used in future ACHs to this account.
    - `corrected_individual_id` string, nullable, required — The corrected individual identifier that should be used in future ACHs.
    - `corrected_routing_number` string, nullable, required — The corrected routing number that should be used in future ACHs to this account.
    - `created_at` string, date-time, required — The [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date and time at which the notification occurred.
  - `pending_transaction_id` string, nullable, required — The ID for the pending transaction representing the transfer. A pending transaction is created when the transfer [requires approval](https://increase.com/documentation/transfer-approvals#transfer-approvals) by someone else in your organization.
  - `preferred_effective_date` object, required — Configuration for how the effective date of the transfer will be set. This determines same-day vs future-dated settlement timing. If not set, defaults to a `settlement_schedule` of `same_day`. If set, exactly one of the child attributes must be set.
    - `date` string, date, nullable, required — A specific date in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format to use as the effective date when submitting this transfer.
    - `settlement_schedule` 'same_day' | 'future_dated', nullable, required — A schedule by which Increase will choose an effective date for the transfer.
  - `return` object, nullable, required — If your transfer is returned, this will contain details of the return.
    - `addenda_information` string, nullable, required — Additional free-form information included by the receiving bank in the return's addenda record. This is raw, uninterpreted text whose presence and format are not guaranteed. For a `file_record_edit_criteria` (R17) return the receiving bank may set this to `QUESTIONABLE` (optionally followed by more text) to indicate it believes the transfer was initiated under questionable circumstances.
    - `created_at` string, date-time, required — The [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date and time at which the transfer was created.
    - `raw_return_reason_code` string, required — The three character ACH return code, in the range R01 to R85.
    - `return_reason_code` 'insufficient_fund' | 'no_account' | 'account_closed' | 'invalid_account_number_structure' | 'account_frozen_entry_returned_per_ofac_instruction' | 'credit_entry_refused_by_receiver' | 'unauthorized_debit_to_consumer_account_using_corporate_sec_code' | 'corporate_customer_advised_not_authorized' | 'payment_stopped' | 'non_transaction_account' | 'uncollected_funds' | 'routing_number_check_digit_error' | 'customer_advised_unauthorized_improper_ineligible_or_incomplete' | 'amount_field_error' | 'authorization_revoked_by_customer' | 'invalid_ach_routing_number' | 'file_record_edit_criteria' | 'enr_invalid_individual_name' | 'returned_per_odfi_request' | 'limited_participation_dfi' | 'incorrectly_coded_outbound_international_payment' | 'account_sold_to_another_dfi' | 'addenda_error' | 'beneficiary_or_account_holder_deceased' | 'customer_advised_not_within_authorization_terms' | 'corrected_return' | 'duplicate_entry' | 'duplicate_return' | 'enr_duplicate_enrollment' | 'enr_invalid_dfi_account_number' | 'enr_invalid_individual_id_number' | 'enr_invalid_representative_payee_indicator' | 'enr_invalid_transaction_code' | 'enr_return_of_enr_entry' | 'enr_routing_number_check_digit_error' | 'entry_not_processed_by_gateway' | 'field_error' | 'foreign_receiving_dfi_unable_to_settle' | 'iat_entry_coding_error' | 'improper_effective_entry_date' | 'improper_source_document_source_document_presented' | 'invalid_company_id' | 'invalid_foreign_receiving_dfi_identification' | 'invalid_individual_id_number' | 'item_and_rck_entry_presented_for_payment' | 'item_related_to_rck_entry_is_ineligible' | 'mandatory_field_error' | 'misrouted_dishonored_return' | 'misrouted_return' | 'no_errors_found' | 'non_acceptance_of_r62_dishonored_return' | 'non_participant_in_iat_program' | 'permissible_return_entry' | 'permissible_return_entry_not_accepted' | 'rdfi_non_settlement' | 'rdfi_participant_in_check_truncation_program' | 'representative_payee_deceased_or_unable_to_continue_in_that_capacity' | 'return_not_a_duplicate' | 'return_of_erroneous_or_reversing_debit' | 'return_of_improper_credit_entry' | 'return_of_improper_debit_entry' | 'return_of_xck_entry' | 'source_document_presented_for_payment' | 'state_law_affecting_rck_acceptance' | 'stop_payment_on_item_related_to_rck_entry' | 'stop_payment_on_source_document' | 'timely_original_return' | 'trace_number_error' | 'untimely_dishonored_return' | 'untimely_return', required — Why the ACH Transfer was returned. This reason code is sent by the receiving bank back to Increase.
    - `trace_number` string, required — A 15 digit number that was generated by the bank that initiated the return. The trace number of the return is different than that of the original transfer. ACH trace numbers are not unique, but along with the amount and date this number can be used to identify the ACH return at the bank that initiated it.
    - `transaction_id` string, required — The identifier of the Transaction associated with this return.
    - `transfer_id` string, required — The identifier of the ACH Transfer associated with this return. This matches the original Transaction's `source.ach_transfer_intention.transfer_id`.
  - `routing_number` string, required — The American Bankers' Association (ABA) Routing Transit Number (RTN) of the receiver's bank.
  - `settlement` object, nullable, required — A subhash containing information about when and how the transfer settled at the Federal Reserve.
    - `settled_at` string, date-time, required — When the funds for this transfer have settled at the destination bank at the Federal Reserve.
  - `standard_entry_class_code` 'corporate_credit_or_debit' | 'corporate_trade_exchange' | 'prearranged_payments_and_deposit' | 'internet_initiated', required — The [Standard Entry Class (SEC) code](/documentation/ach-standard-entry-class-codes) to use for the transfer.
  - `statement_descriptor` string, required — The descriptor that will show on the recipient's bank statement.
  - `status` 'pending_approval' | 'pending_transfer_session_confirmation' | 'canceled' | 'pending_submission' | 'pending_reviewing' | 'requires_attention' | 'rejected' | 'submitted' | 'returned', required — The lifecycle status of the transfer.
  - `submission` object, nullable, required — After the transfer is submitted to FedACH, this will contain supplemental details. Increase batches transfers and submits a file to the Federal Reserve roughly every 30 minutes. The Federal Reserve processes ACH transfers during weekdays according to their [posted schedule](https://www.frbservices.org/resources/resource-centers/same-day-ach/fedach-processing-schedule.html).
    - `administrative_returns_expected_by` string, date-time, required — The timestamp by which any administrative returns are expected to be received by. This follows the Nacha guidelines for return windows, which are: "In general, return entries must be received by the RDFI’s ACH Operator by its deposit deadline for the return entry to be made available to the ODFI no later than the opening of business on the second banking day following the Settlement Date of the original entry.".
    - `effective_date` string, date, required — The ACH transfer's effective date as sent to the Federal Reserve. If a specific date was configured using `preferred_effective_date`, this will match that value. Otherwise, it will be the date selected (following the specified settlement schedule) at the time the transfer was submitted.
    - `expected_funds_settlement_at` string, date-time, required — When the transfer is expected to settle in the recipient's account. Credits may be available sooner, at the receiving bank's discretion. The FedACH schedule is published [here](https://www.frbservices.org/resources/resource-centers/same-day-ach/fedach-processing-schedule.html).
    - `expected_settlement_schedule` 'same_day' | 'future_dated', required — The settlement schedule the transfer is expected to follow. This expectation takes into account the `effective_date`, `submitted_at`, and the amount of the transfer.
    - `submitted_at` string, date-time, required — When the ACH transfer was sent to FedACH.
    - `trace_number` string, required — A 15 digit number recorded in the Nacha file and transmitted to the receiving bank. Along with the amount, date, and originating routing number, this can be used to identify the ACH transfer at the receiving bank. ACH trace numbers are not unique, but are [used to correlate returns](https://increase.com/documentation/ach-returns#ach-returns).
  - `transaction_id` string, nullable, required — The ID for the transaction funding the transfer.
  - `type` 'ach_transfer', required — A constant representing the object's type. For this resource it will always be `ach_transfer`.

## Other responses

- `4XX` — Error
- `5XX` — Error

---

[API](https://skmtc.net/increase/apis/increase-api-2.md) · [All operations](https://skmtc.net/increase/apis/increase-api-2/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/increase/increase-api-2/versions/c6111f49e8b7/schema)
