# Submits an ACH invoice for processing

<a id="flute-v1-post-pay-int-api-invoices-invoiceId-ach-submit"></a>
<span class="api-endpoint">POST {{<a href="#urlbases">baseURL</a>}}/pay-int-api/invoices/{{invoiceId}}/ach/submit</span>
This endpoint submits an ACH invoice for processing.
Submitting an invoice for ACH charges a bank account directly against its total, without waiting for the customer to visit a hosted payment page.
The request carries the bank account and routing numbers, the account type and account holder type, and the customer's name and mailing address, along with an authorization consent timestamp confirming the customer agreed to the bank debit.
It can also save the payment method to the customer's record when `savePaymentMethod` is `true`.
The response confirms the payment succeeded, a new payment method was created, and the customer's info was saved.
A separate endpoint, `POST /pay-int-api/invoices/{invoiceId}/submit`, submits an invoice for card payment instead.
<span class="api-seealso">See Also:</span><br>
To retrieve an invoice by ID, see <a href="/api-reference/invoices/flute-v1-get-pay-int-api-invoices-invoiceid" style="text-decoration: underline;">GET /pay-int-api/invoices/{invoiceId}</a>.<br>
To submit an invoice for processing, see <a href="/api-reference/invoices/flute-v1-post-pay-int-api-invoices-invoiceid-submit" style="text-decoration: underline;">POST /pay-int-api/invoices/{invoiceId}/submit</a>.<br>
To cancel an invoice, see <a href="/api-reference/invoices/flute-v1-put-pay-int-api-invoices-invoiceid-cancel" style="text-decoration: underline;">PUT /pay-int-api/invoices/{invoiceId}/cancel</a>.<br>
To mark an invoice as paid, see <a href="/api-reference/invoices/flute-v1-put-pay-int-api-invoices-invoiceid-mark-as-paid" style="text-decoration: underline;">PUT /pay-int-api/invoices/{invoiceId}/mark-as-paid</a>.<br>

Endpoint: POST /pay-int-api/invoices/{invoiceId}/ach/submit
Version: V1
Security: Bearer

## Path parameters:

  - `invoiceId` (string, required)
    The identifier of the invoice to submit.

## Header parameters:

  - `x-api-version` (string)
    Specifies the API version to use for the request.

Example: 1.0

## Request fields (application/json):

  - `accountNumber` (string)
    Specifies the payment target's bank account number.
We recommend using `paymentMethodId` instead of `accountNumber`.
Example: 5413591081013511
    Example: 5413591081013511

  - `routingNumber` (string)
    Specifies the payment target's bank routing number.

Example: 026009593
    Example: 026009593

  - `accountType` (integer)
    Possible values:
| Value | Name |
|  --- | --- |
| 1 | Checking |
| 2 | Savings |

Example: 1
    Example: 1

  - `accountHolderType` (integer)
    Possible values:
| Value | Name |
|  --- | --- |
| 1 | Business |
| 2 | Personal |

Example: 1
    Example: 1

  - `firstName` (string)
    Indicates the customer's first name.

Example: Alexandro
    Example: Alexandro

  - `lastName` (string)
    Indicates the customer's last name.

Example: Peppared
    Example: Peppared

  - `companyName` (string)
    Indicates the name of the customer's company or organization.

Example: Peppared Street Cafe
    Example: Peppared Street Cafe

  - `email` (string)
    Indicates the customer's email.
Example: peppared@example.com
    Example: peppared@example.com

  - `mobilePhoneNumber` (string)
    Indicates the customer's mobile phone number.
Example: +14155552309
    Example: +14155552309

  - `smsNotification` (boolean)
    Specifies the customer is sent an SMS notification.
If `true`, the customer is sent an SMS notification.
If `false`, the customer is not sent an SMS notification.
Example: true
    Example: true

  - `addressLine1` (string)
    Indicates the street address.

Example: 21 E. Main Street
    Example: 21 E. Main Street

  - `addressLine2` (string)
    Specifies additional street address information.

Example: Office 3
    Example: Office 3

  - `city` (string)
    Specifies the name of the city.

Example: Chicago
    Example: Chicago

  - `stateId` (integer)
    Specifies the Flute US state or territory identifier code.
Example: 4
    Example: 4

  - `billingPostalCode` (string)
    Specifies the billing postal or ZIP code.
Examples:
60612
60612-0001
    Example: 60612

  - `savePaymentMethod` (boolean)
    Specifies the payment method is saved to the customer's record.
If `true`, the payment method is saved.
If `false`, the payment method is not saved.
Example: true
    Example: true

  - `authorizeBankWithdrawal` (boolean)
    Specifies the customer has authorized the bank withdrawal for this ACH payment.
If `true`, the customer has authorized the bank withdrawal.
If `false`, the customer has not authorized the bank withdrawal.
Example: true
    Example: true

  - `authorizationConsentTimestamp` (string)
    Indicates the date-time (in an ISO 8601 date-time UTC format) when customer checked the authorization checkbox.

This is required for ACH compliance audit logging.

Examples: 2026-02-19T20:24:52.934Z
    Example: 2026-02-19T20:24:52.934Z

## Response 200 fields (application/json):

  - `success` (boolean)
    Indicates the payment was successfully submitted.
If `true`, the payment was successfully submitted.
If `false`, the payment was not successfully submitted.
Example: true
    Example: true

  - `paymentMethodCreated` (boolean)
    Indicates the payment method was created.
If `true`, the payment method was created.
If `false`, the payment method was not created.
Example: true
    Example: true

  - `customerInfoSaved` (boolean)
    Indicates the customer info was saved.
If `true`, the customer info was saved.
If `false`, the customer info was not saved.
Example: true
    Example: true

## Response 400 fields (application/json):

  - `details` (string)
    Indicates details about the error.

Example: Validation failed: -- Email: 'Email' is not a valid email address. Severity: Error
    Example: Validation failed: -- Email: 'Email' is not a valid email address. Severity: Error

  - `statusCode` (integer)
    Specifies the HTTP response status code.
This is the HTTP status code returned by the attempted delivery.
The following is a list of HTTP response status codes that include but are not limited to:
| HTTP Status | Meaning |
|  --- | --- |
| 200 | Delivery succeeded |
| 400 | Bad request |
| 401 | Unauthorized |
| 404 | Endpoint not found |
| 429 | Rate limited |

Example: 401
    Example: 401

  - `source` (string)
    Indicates the source of the error.

Example: FluteOpsDeveloper.MSG322
    Example: FluteOpsDeveloper.MSG322

  - `exceptionType` (string)
    Indicates the error's exception type.

Example: FluentValidation.ValidationException
    Example: FluentValidation.ValidationException

  - `correlationId` (string)
    Indicates the correlation identifier.

Example: aa6cfcd0-0295-4a4c-b074-8c901f114fef
    Example: aa6cfcd0-0295-4a4c-b074-8c901f114fef

  - `entityId` (string)
    Indicates the entity identifier.
Example:
null

  - `errorCode` (string)
    Indicates the error code.
Example:
null

## Response 404 fields (application/json):

  - `details` (string)
    Indicates details about the error.

Example: Entity with ID 'aa6cfcd0-0295-4a4c-b074-8c901f114fef' was not found.
    Example: Entity with ID 'aa6cfcd0-0295-4a4c-b074-8c901f114fef' was not found.

  - `statusCode` (integer)
    Specifies the HTTP response status code.
This is the HTTP status code returned by the attempted delivery.
The following is a list of HTTP response status codes that include but are not limited to:
| HTTP Status | Meaning |
|  --- | --- |
| 200 | Delivery succeeded |
| 400 | Bad request |
| 401 | Unauthorized |
| 404 | Endpoint not found |
| 429 | Rate limited |

Example: 401
    Example: 401

  - `source` (string)
    Indicates the source of the error.

Example: FluteOpsDeveloper.MSG322
    Example: FluteOpsDeveloper.MSG322

  - `exceptionType` (string)
    Indicates the error's exception type.

Example: System.Collections.Generic.KeyNotFoundException
    Example: System.Collections.Generic.KeyNotFoundException

  - `correlationId` (string)
    Indicates the correlation identifier.

Example: aa6cfcd0-0295-4a4c-b074-8c901f114fef
    Example: aa6cfcd0-0295-4a4c-b074-8c901f114fef

  - `entityId` (string)
    Indicates the entity identifier.
Example:
null

  - `errorCode` (string)
    Indicates the error code.
Example:
null

## Response 500 fields (application/json):

  - `details` (string)
    Indicates details about the error.

Example: An unexpected error occurred while processing the request.
    Example: An unexpected error occurred while processing the request.

  - `statusCode` (integer)
    Specifies the HTTP response status code.
This is the HTTP status code returned by the attempted delivery.
The following is a list of HTTP response status codes that include but are not limited to:
| HTTP Status | Meaning |
|  --- | --- |
| 200 | Delivery succeeded |
| 400 | Bad request |
| 401 | Unauthorized |
| 404 | Endpoint not found |
| 429 | Rate limited |

Example: 401
    Example: 401

  - `source` (string)
    Indicates the source of the error.
Example: <Service>
    Example: (Service)

  - `exceptionType` (string)
    Indicates the error's exception type.

Example: System.Exception
    Example: System.Exception

  - `correlationId` (string)
    Indicates the correlation identifier.

Example: aa6cfcd0-0295-4a4c-b074-8c901f114fef
    Example: aa6cfcd0-0295-4a4c-b074-8c901f114fef

  - `entityId` (string)
    Indicates the entity identifier.
Example:
null

  - `errorCode` (string)
    Indicates the error code.
Example:
null

