ACH Origination
ACH
>
ACH Origination
Currently only available for Garden
These API’s are currently only available for the Garden FI. These cannot be used at any live financial institution.
openapi: 3.0.3
info:
title: Automated Clearing House (ACH) API - ACH Origination
version: v1
description: |
Automated Clearing House (JHPlatform ACH).
contact:
name: Platform Services - ACH
url: https://www.jackhenry.com/
email: DC-Operations@jackhenry.com
servers:
- url: https://banno.com
description: Production Endpoint
components:
securitySchemes:
OpenIDEnterprise:
type: openIdConnect
openIdConnectUrl: https://login.jackhenry.com/.well-known/openid-configuration
description: "Jack Henry Enterprise Authentication. \n\n### Supported Flows\n\n#### 1. Authorization Code Flow\n* **Use Case:** Person-at-keyboard logins (FI or JH Employees).\n* **Security:** Supports/recommends PKCE (S256). Supports Pushed Authorization Requests (PAR), and DPoP token binding.\n* **Client Auth:** Supports/recommends `client_assertion` (Private Key JWT), also supports `client_secret`.\n\n#### 2. Client Credentials Flow\n* **Use Case:** System services and machine-to-machine integrations.\n* **Security:** Supports DPoP token binding.\n* **Client Auth:** **Requires** `client_assertion` (Private Key JWT).\n"
OpenIDConsumer:
type: openIdConnect
openIdConnectUrl: https://digital.garden-fi.com/.well-known/openid-configuration
description: "Jack Henry Consumer Authentication. \n\n> **WARNING: FI-SPECIFIC ROUTING**\n> The authorization server is currently pointing to our **Sandbox Environment** (`digital.garden-fi.com`) so you can test this documentation. In production code, this domain **must** be replaced with the specific Financial Institution's domain.\n> Example: Replace `{API-ENVIRONMENT}` in `https://{API-ENVIRONMENT}/.well-known/openid-configuration` with `digital.garden-fi.com` for the Garden financial institution.\n\n### Supported Flows\n\n#### 1. Authorization Code Flow\n* **Use Case:** Person-at-keyboard logins (customer or member of FI).\n* **Security:** Supports/recommends PKCE (S256). Supports Pushed Authorization Requests (PAR), and DPoP token binding.\n* **Client Auth:** Supports `client_secret`.\n"
tags:
- name: ACH Origination
description: API operations in ACH Origination Service
paths:
/a/api/jh-ach/v1/{InstitutionUniversalId}/batches:
post:
operationId: AddOriginationAchBatch
tags:
- ACH Origination
summary: API to create an ach batch.
description: Method to create an ach batch.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
requestBody:
required: true
description: Create new ACH batch.
content:
application/json:
schema:
type: object
required:
- batchName
- secCode
- achCompanyId
- entryDescription
- discretionaryData
- restricted
- externalBatchId
properties:
batchName:
maxLength: 50
type: string
description: Name of the batch.
example: Batch 1
nullable: false
achCompanyId:
type: string
maxLength: 10
description: Id of the ACH Company of the batch.
example: '112345678'
nullable: false
secCode:
type: string
maxLength: 3
description: This is the Standard Entry Code (SEC) for the ACH batch being created.
enum:
- PPD
- CCD
- CTX
- WEB
- TEL
nullable: false
example: PPD
entryDescription:
maxLength: 10
type: string
description: Description of the batch.
nullable: false
discretionaryData:
maxLength: 20
type: string
description: Discretionary data of batch.
nullable: true
restricted:
example: true
type: boolean
description: True if the batch is restricted, false if not.
nullable: true
externalBatchId:
type: string
format: uuid
description: Required external identifier for the batch provided by the client system. Used as an idempotency key.
nullable: false
example: a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d
responses:
'201':
description: Created
content:
application/json:
schema:
type: object
properties:
batchId:
type: string
format: uuid
description: ACH Batch Id.
'400':
description: The server could not understand the request due to an invalid request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'404':
description: The server can not find the requested resource. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
get:
operationId: GetOriginationAchBatchList
tags:
- ACH Origination
summary: Retrieve list of ACH batches.
description: Retrieves a paginated list of ACH batches available to the user. User identity and type (enterprise/consumer) are determined from the JWT token.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
- name: offset
in: query
required: false
description: |
The value that determines the start index of the returned results within the overall result set.
This endpoint returns an array of batches within an overall data set. Due to the potentially large nature of the overall data set, the offset and limit parameters are necessary to constrain the number of results to a reasonable amount. Typical use of this parameter would be as follows:
* The initial request would send a value of "0", as this is the index of the first result.
* Subsequent requests would add 1 to the total number of results.
example: ?offset=0
schema:
type: string
default: '0'
- name: count
in: query
required: false
description: |
The number of batches to return. Maximum value is 200.
If count exceeds maximum, service will use 200.
example: ?count=10
schema:
type: string
default: '10'
- name: sort
in: query
required: false
description: |
Comma-separated list of field:direction pairs for sorting.
Direction must be 'asc' (ascending) or 'desc' (descending).
Available fields:
- Name
- AchCompanyName
- Status
- TotalCredits
- TotalDebits
Default sort: Status:asc
Examples:
- Status:desc
- Name:asc,Status:desc
- TotalCredits:desc,Name:asc
example: ?sort=Status:desc,Name:asc
schema:
type: string
- name: externalBatchId
in: query
required: false
description: Filter by external batch ID
schema:
type: string
maxLength: 36
- name: fileId
in: query
required: false
description: Filter by file ID
schema:
type: string
format: uuid
- name: batchName
in: query
required: false
description: Filter by batch name
schema:
type: string
maxLength: 50
- name: standardEntryClassCode
in: query
required: false
description: Identifies the type of entry based on NACHA rules. Always 3 characters.
schema:
type: string
minLength: 3
maxLength: 3
example: PPD
- name: companyName
in: query
required: false
description: Filter by company name
schema:
type: string
maxLength: 16
- name: companyDiscretionaryData
in: query
required: false
description: Filter by company discretionary data
schema:
type: string
maxLength: 20
- name: companyIdentification
in: query
required: false
description: Filter by company identification
schema:
type: string
maxLength: 10
- name: effectiveEntryDate
in: query
required: false
description: Filter by effective entry date (civil date format YYYY-MM-DD)
schema:
type: string
format: date
example: '2024-01-01'
- name: settlementDate
in: query
required: false
description: Filter by settlement date (civil date format YYYY-MM-DD)
schema:
type: string
format: date
example: '2024-01-01'
- name: direction
in: query
required: false
description: Filter by transaction direction
schema:
type: string
enum:
- incoming
- outgoing
- name: batchStatus
in: query
required: false
description: Filter by batch status
style: form
explode: true
schema:
type: array
items:
type: string
description: |
Lifecycle state of an ACH batch in the Batches table.
enum:
- draft
- scheduled
- processing
- generating
- completed
- canceled
- incomplete
example: draft
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
paging:
type: object
required:
- nextOffset
- results
properties:
nextOffset:
type: string
description: The next offset is the start position of the read pointer for pagination.
results:
type: integer
description: The number of records included in the response.
total:
type: integer
nullable: true
description: The total number of records the server has available for the request.
additionalProperties: false
batches:
type: array
items:
type: object
properties:
batchId:
type: string
format: uuid
description: ACH Batch Id.
fileId:
type: string
format: uuid
description: File identifier when the batch belongs to a file.
nullable: true
batchName:
type: string
description: Name of the batch.
example: Payroll Batch
nullable: false
achCompanyName:
type: string
description: Name of the ACH Company.
example: ABC Corp
nullable: false
achCompanyId:
type: string
description: Id of the ACH Company.
example: '1234567890'
nullable: false
secCode:
type: string
description: Standard Entry Code for the batch.
enum:
- PPD
- CCD
- CTX
- WEB
- TEL
- BOC
- ARC
example: PPD
nullable: false
entryDescription:
type: string
description: Description of the batch.
example: Payroll
nullable: false
discretionaryData:
type: string
description: Discretionary data of batch.
example: Optional data
nullable: true
status:
type: string
description: |
Lifecycle state of an ACH batch in the Batches table.
enum:
- draft
- scheduled
- processing
- generating
- completed
- canceled
- incomplete
example: draft
direction:
type: string
description: Direction of the batch (incoming or outgoing)
enum:
- incoming
- outgoing
example: outgoing
nullable: false
totalDebits:
type: number
format: decimal
description: Total debit amount for the batch.
example: 1500
nullable: false
totalCredits:
type: number
format: decimal
description: Total credit amount for the batch.
example: 1500
nullable: false
companyType:
type: string
description: Type of ACH company.
enum:
- balanced
- offset
- net difference
example: balanced
nullable: false
effectiveDate:
type: string
format: date
description: Effective date of the batch.
example: '2025-11-25'
nullable: false
steps:
allOf:
- type: object
description: Current status of each pre-flight check for the batch.
required:
- accountValidation
- nsf
properties:
ofac:
type: string
description: Status of an individual check step.
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
approval:
type: string
description: Status of an individual check step.
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
accountValidation:
type: string
description: Status of an individual check step.
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
nsf:
description: NSF (Non-Sufficient Funds) step status. Compares available balance against batch total.
type: string
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
entryPreFunding:
description: Entry-level pre-funding rollup status. Aggregates individual entry pre-funding results. Only present when pre-funding is configured.
type: string
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
businessAccountPreFunding:
description: Business account pre-funding status. Validates sufficient funds in the offset account for Fed-bound credit entries. Only present when pre-funding is configured.
type: string
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
description: Pre-flight check statuses for the batch. Null for incoming batches, which are not part of the origination workflow and therefore have no check steps.
nullable: true
description: Array of batch objects.
nullable: false
nullable: false
'400':
description: The server could not understand the request due to an invalid request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'404':
description: The server can not find the requested resource. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
/a/api/jh-ach/v1/{InstitutionUniversalId}/batches/{BatchId}:
put:
operationId: UpdateOriginationAchBatch
tags:
- ACH Origination
summary: API to update an existing ACH batch.
description: Method to update an existing ACH batch.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
- name: BatchId
in: path
required: true
description: ACH Batch Id.
schema:
type: string
format: uuid
description: ACH Batch Id.
requestBody:
required: true
description: Update existing ACH batch.
content:
application/json:
schema:
type: object
required:
- batchName
- secCode
- entryDescription
- discretionaryData
- restricted
properties:
batchName:
maxLength: 50
type: string
description: Name of the batch.
example: Batch 1
nullable: false
secCode:
type: string
maxLength: 3
description: This is the Standard Entry Code (SEC) for the ACH batch being created.
enum:
- PPD
- CCD
- CTX
- WEB
- TEL
nullable: false
example: PPD
entryDescription:
maxLength: 10
type: string
description: Description of the batch.
nullable: false
discretionaryData:
maxLength: 20
type: string
description: Discretionary data of batch.
nullable: true
restricted:
example: true
type: boolean
description: True if the batch is restricted, false if not.
nullable: true
responses:
'204':
description: No Content - Successful
'400':
description: The server could not understand the request due to an invalid request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'404':
description: The server can not find the requested resource. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
get:
operationId: GetAchBatchDetails
tags:
- ACH Origination
summary: API to get ACH batch details.
description: Method to get ACH batch details.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
- name: BatchId
in: path
required: true
description: ACH Batch Id.
schema:
type: string
format: uuid
description: ACH Batch Id.
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
batchId:
type: string
format: uuid
description: ACH Batch Id.
fileId:
type: string
format: uuid
description: File identifier when the batch belongs to a file.
nullable: true
batchName:
type: string
description: Name of the batch.
example: Payroll Batch
nullable: false
achCompanyName:
type: string
description: Name of the ACH Company.
example: ABC Corp
nullable: false
achCompanyId:
type: string
description: Id of the ACH Company.
example: '1234567890'
nullable: false
secCode:
type: string
description: Standard Entry Code for the batch.
enum:
- PPD
- CCD
- CTX
- WEB
- TEL
- BOC
- ARC
example: PPD
nullable: false
entryDescription:
type: string
description: Description of the batch.
example: Payroll
nullable: false
discretionaryData:
type: string
description: Discretionary data of batch.
example: Optional data
nullable: true
status:
type: string
description: |
Lifecycle state of an ACH batch in the Batches table.
enum:
- draft
- scheduled
- processing
- generating
- completed
- canceled
- incomplete
example: draft
direction:
type: string
description: Direction of the batch (incoming or outgoing)
enum:
- incoming
- outgoing
example: outgoing
nullable: false
totalDebits:
type: number
format: decimal
description: Total debit amount for the batch.
example: 1500
nullable: false
totalCredits:
type: number
format: decimal
description: Total credit amount for the batch.
example: 1500
nullable: false
companyType:
type: string
description: Type of ACH company.
enum:
- balanced
- offset
- net difference
example: balanced
nullable: false
effectiveDate:
type: string
format: date
description: Effective date of the batch.
example: '2025-11-25'
nullable: false
steps:
allOf:
- type: object
description: Current status of each pre-flight check for the batch.
required:
- accountValidation
- nsf
properties:
ofac:
type: string
description: Status of an individual check step.
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
approval:
type: string
description: Status of an individual check step.
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
accountValidation:
type: string
description: Status of an individual check step.
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
nsf:
description: NSF (Non-Sufficient Funds) step status. Compares available balance against batch total.
type: string
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
entryPreFunding:
description: Entry-level pre-funding rollup status. Aggregates individual entry pre-funding results. Only present when pre-funding is configured.
type: string
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
businessAccountPreFunding:
description: Business account pre-funding status. Validates sufficient funds in the offset account for Fed-bound credit entries. Only present when pre-funding is configured.
type: string
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
description: Pre-flight check statuses for the batch. Null for incoming batches, which are not part of the origination workflow and therefore have no check steps.
nullable: true
'400':
description: The server could not understand the request due to an invalid request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'404':
description: The server can not find the requested resource. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
delete:
operationId: DeleteOriginationAchBatch
tags:
- ACH Origination
summary: API to delete an existing ACH batch.
description: Method to delete an existing ACH batch.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
- name: BatchId
in: path
required: true
description: ACH Batch Id.
schema:
type: string
format: uuid
description: ACH Batch Id.
responses:
'204':
description: No Content - Successful
'400':
description: The server could not understand the request due to an invalid request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'404':
description: The server can not find the requested resource. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
/a/api/jh-ach/v1/{InstitutionUniversalId}/batches/{BatchId}/transactions:
get:
operationId: GetAchTransactionsList
tags:
- ACH Origination
summary: Retrieve list of ACH transactions for a specific batch.
description: Retrieves a paginated list of ACH transactions for a specific batch.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
- name: BatchId
in: path
required: true
description: ACH Batch Id.
schema:
type: string
format: uuid
description: ACH Batch Id.
- name: offset
in: query
required: false
description: |
The value that determines the start index of the returned results within the overall result set.
This endpoint returns an array of batches within an overall data set. Due to the potentially large nature of the overall data set, the offset and limit parameters are necessary to constrain the number of results to a reasonable amount. Typical use of this parameter would be as follows:
* The initial request would send a value of "0", as this is the index of the first result.
* Subsequent requests would add 1 to the total number of results.
example: ?offset=0
schema:
type: string
default: '0'
- name: count
in: query
required: false
description: |
The number of batches to return. Maximum value is 200.
If count exceeds maximum, service will use 200.
example: ?count=10
schema:
type: string
default: '10'
- name: externalBatchId
in: query
required: false
description: Filter by external batch ID
schema:
type: string
maxLength: 36
- name: externalEntryId
in: query
required: false
description: Filter by external entry ID
schema:
type: string
maxLength: 36
- name: entryId
in: query
required: false
description: Filter by entry ID
schema:
type: string
format: uuid
- name: batchId
in: query
required: false
description: Filter by batch ID
schema:
type: string
format: uuid
- name: startDate
in: query
required: false
description: |
The starting settlement date to retrieve transactions (inclusive).
If From Date is provided and To Date is null, it can be treated as searching for items equal to From Date.
(civil date format YYYY-MM-DD)
schema:
type: string
format: date
example: '2024-01-01'
- name: endDate
in: query
required: false
description: |
The ending settlement date to retrieve transactions (inclusive).
Must be greater than or equal to the start date.
(civil date format YYYY-MM-DD)
schema:
type: string
format: date
example: '2024-01-31'
- name: minAmount
in: query
required: false
description: |
The minimum amount to search by for the transaction.
Value cannot be less than zero. Maximum amount is $99,999,999.99.
If min Amount > 0 and max Amount is null, can be treated as searching for items equal to min Amount.
Format: Dollar amount as string (e.g., "100.00")
schema:
type: string
pattern: ^\d{1,8}(\.\d{2})?$
example: '100.00'
- name: maxAmount
in: query
required: false
description: |
The maximum amount to search by for the transaction.
Value cannot be less than zero. Maximum amount is $99,999,999.99.
Format: Dollar amount as string (e.g., "50000.00")
schema:
type: string
pattern: ^\d{1,8}(\.\d{2})?$
example: '50000.00'
- name: debitCredit
in: query
required: false
description: |
Identifier that determines if the transfer transaction is a debit or credit.
This value is based on the entry transaction code translation located in the entry detail record.
schema:
type: string
enum:
- credit
- debit
example: credit
- name: receiverAccountNumber
in: query
required: false
description: The receiver's account number that comes from the entry detail record
schema:
type: string
maxLength: 17
example: '1234567890'
- name: entryState
in: query
required: false
description: |
The state of the transaction. This value comes from the entry database table.
style: form
explode: true
schema:
type: array
items:
type: string
description: |
The state of the transaction. This value comes from the entry database table.
enum:
- unprocessed
- queued
- scheduled
- processing
- posted
- return_pending
- review
- returned
- pending
- failed
- canceled
- completed
example: posted
- name: originatorCompanyId
in: query
required: false
description: The identifier of the entity initiating the transaction from batch header record
schema:
type: string
maxLength: 10
example: '1234567890'
- name: originatorCompanyName
in: query
required: false
description: The name of the entity initiating the transaction from batch header record
schema:
type: string
maxLength: 16
example: ACME Corporation
- name: standardEntryClassCode
in: query
required: false
description: Identifies the type of entry based on NACHA rules. Always 3 characters.
schema:
type: string
minLength: 3
maxLength: 3
example: PPD
- name: receiverName
in: query
required: false
description: The name of the receiving customer from entry detail record
schema:
type: string
maxLength: 22
example: John Doe
- name: direction
in: query
required: false
description: Filter by transaction direction
schema:
type: string
enum:
- incoming
- outgoing
- name: query
in: query
required: false
description: General search query
schema:
type: string
minLength: 3
maxLength: 100
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
paging:
type: object
required:
- nextOffset
- results
properties:
nextOffset:
type: string
description: The next offset is the start position of the read pointer for pagination.
results:
type: integer
description: The number of records included in the response.
total:
type: integer
nullable: true
description: The total number of records the server has available for the request.
additionalProperties: false
transactions:
type: array
items:
type: object
properties:
transactionId:
type: string
format: uuid
description: Unique identifier of the transaction.
example: a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d
nullable: false
recipientName:
type: string
description: Name of the recipient.
example: John Doe
nullable: false
recipientId:
type: string
description: ID of the recipient.
example: JD010120A
nullable: true
recipientAmount:
type: object
properties:
value:
type: string
description: This defines the amount value.
nullable: false
currencyType:
type: string
description: The ISO 4217 three character currency type. USD is the default value.
nullable: true
default: usd
additionalProperties: false
recipientRoutingNumber:
type: string
description: Routing number of the recipient's financial institution.
example: '999999999'
nullable: false
recipientAccountNumber:
type: string
description: Account number of the recipient.
example: '11001111'
nullable: false
recipientAccountType:
type: string
description: Type of account.
enum:
- checking
- savings
- loan
- general_ledger
example: checking
nullable: false
recipientTransactionType:
type: string
description: Type of transaction.
enum:
- credit
- debit
example: credit
nullable: false
preNote:
type: boolean
description: Indicates if this is a prenote transaction.
example: false
nullable: false
recipientAddenda:
type: array
description: Array of addenda records with additional information for the recipient. Each record includes a backend-generated addendaId and the addenda data.
items:
type: object
required:
- addendaId
- addendaData
properties:
addendaId:
type: string
format: uuid
description: Unique identifier for the addenda record (generated by backend).
example: b2c3d4e5-f6a7-4b5c-9d0e-1f2a3b4c5d6e
nullable: false
addendaData:
type: string
maxLength: 80
description: Addenda record data (max 80 characters).
example: Payment for invoice 1234
nullable: false
nullable: true
paymentTypeCode:
type: string
description: Payment type code.
example: S
nullable: true
status:
type: string
description: Status of the transaction.
enum:
- draft
- processing
- posted
- return_pending
- returned
example: posted
nullable: false
preFunding:
description: 'DEPRECATED: Use steps.preFunding instead. Entry-level pre-funding status.'
type: string
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
steps:
description: Current status of each entry-level check step. Present only for outgoing entries that have been scheduled.
type: object
properties:
ofac:
description: Entry-level OFAC screening status.
type: string
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
preFunding:
description: Entry-level pre-funding status.
type: string
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
description: Array of transaction objects.
nullable: false
nullable: false
'400':
description: The server could not understand the request due to an invalid request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'404':
description: The server can not find the requested resource. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
post:
operationId: CreateAchTransactions
tags:
- ACH Origination
summary: API to create ACH transactions for a specific batch.
description: Create new entry and addenda records for a specific batch.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
- name: BatchId
in: path
required: true
description: ACH Batch Id.
schema:
type: string
format: uuid
description: ACH Batch Id.
requestBody:
required: true
description: Create new ACH transactions.
content:
application/json:
schema:
type: object
required:
- transactions
properties:
transactions:
type: array
minItems: 1
description: Array of transaction records to create.
items:
type: object
required:
- recipientName
- recipientAmount
- recipientRoutingNumber
- recipientAccountNumber
- recipientAccountType
- recipientTransactionType
- preNote
- paymentTypeCode
- status
- externalEntryId
properties:
recipientName:
type: string
minLength: 1
maxLength: 22
description: Alphanumeric value that represents the recipient (the person who is receiving the credit/debit).
example: John Doe
recipientId:
type: string
minLength: 0
maxLength: 15
description: Alphanumeric id the company has for the entity receiving the transaction.
example: JD010120A
recipientAmount:
type: object
properties:
value:
type: string
description: This defines the amount value.
nullable: false
currencyType:
type: string
description: The ISO 4217 three character currency type. USD is the default value.
nullable: true
default: usd
additionalProperties: false
recipientRoutingNumber:
type: string
minLength: 9
maxLength: 9
pattern: ^[0-9]{9}$
description: Nine (9) digit routing number of financial institution recipient's account is housed.
example: '999999999'
recipientAccountNumber:
type: string
minLength: 1
maxLength: 17
description: Account number of recipient's held at their financial institution.
example: '11001111'
recipientAccountType:
type: string
description: Type of account recipient has. ie Checking, Savings
enum:
- checking
- savings
- loan
- general_ledger
example: checking
recipientTransactionType:
type: string
description: Type of transaction posting to recipient's account. For loan account types, credit is the only available option.
enum:
- credit
- debit
example: credit
preNote:
type: boolean
description: Indicates if transaction is a test transaction sent by originator to verify recipient's account information is correct.
example: true
recipientAddenda:
type: array
minItems: 0
maxItems: 25
description: |
Array of addenda records containing additional information the originator wants to send to the recipient about the transaction.
Conditional limits based on batch SEC code:
- TEL batches: Addenda cannot be included (must be empty array or contain 0 items)
- Non-CTX batches (PPD, CCD, WEB): Maximum 1 addenda record
- CTX batches: Maximum 25 addenda records
Backend validation enforces these conditional limits based on the parent batch's secCode.
For CREATE operations, externalAddendaId is required and used as an idempotency key. The addendaId will be generated by the backend.
items:
type: object
required:
- addendaData
- externalAddendaId
properties:
externalAddendaId:
type: string
format: uuid
description: Required external identifier for the addenda record provided by the client system. Used as an idempotency key.
nullable: false
example: c3d4e5f6-a7b8-4c5d-0e1f-2a3b4c5d6e7f
addendaData:
type: string
maxLength: 80
description: Addenda record data (max 80 characters). Required when creating addenda records.
example: Payment for invoice 1234
nullable: false
paymentTypeCode:
type: string
minLength: 0
maxLength: 2
description: Allows an Originator to include a code for their own internal processing or identification purposes. Example being single occurrence or recurring. Can only be set when SEC code is TEL or WEB.
example: S
status:
type: string
description: Determines if transaction will process when batch is initiated. Any transaction in a "hold" status will not process.
enum:
- draft
externalEntryId:
type: string
format: uuid
description: Required external identifier for the transaction provided by the client system. Used as an idempotency key.
nullable: false
example: a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d
responses:
'202':
description: Accepted
'400':
description: The server could not understand the request due to an invalid request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'404':
description: The server can not find the requested resource. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
put:
operationId: UpdateAchTransactions
tags:
- ACH Origination
summary: API to update existing ACH transactions for a specific batch.
description: Update existing entry and addenda records for a specific batch.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
- name: BatchId
in: path
required: true
description: ACH Batch Id.
schema:
type: string
format: uuid
description: ACH Batch Id.
requestBody:
required: true
description: Update existing ACH transactions.
content:
application/json:
schema:
type: object
required:
- transactions
properties:
transactions:
type: array
minItems: 1
description: Array of transaction records to update.
items:
type: object
required:
- transactionId
- recipientName
- recipientAmount
- recipientRoutingNumber
- recipientAccountNumber
- recipientAccountType
- recipientTransactionType
- preNote
- paymentTypeCode
- status
properties:
transactionId:
type: string
format: uuid
description: Unique identifier of the transaction to update.
example: a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d
recipientName:
type: string
minLength: 1
maxLength: 22
description: Alphanumeric value that represents the recipient (the person who is receiving the credit/debit).
example: John Doe
recipientId:
type: string
minLength: 0
maxLength: 15
description: Alphanumeric id the company has for the entity receiving the transaction.
example: JD010120A
recipientAmount:
type: object
properties:
value:
type: string
description: This defines the amount value.
nullable: false
currencyType:
type: string
description: The ISO 4217 three character currency type. USD is the default value.
nullable: true
default: usd
additionalProperties: false
recipientRoutingNumber:
type: string
minLength: 9
maxLength: 9
pattern: ^[0-9]{9}$
description: Nine (9) digit routing number of financial institution recipient's account is housed.
example: '999999999'
recipientAccountNumber:
type: string
minLength: 1
maxLength: 17
description: Account number of recipient's held at their financial institution.
example: '11001111'
recipientAccountType:
type: string
description: Type of account recipient has. ie Checking, Savings
enum:
- checking
- savings
- loan
- general_ledger
example: checking
recipientTransactionType:
type: string
description: Type of transaction posting to recipient's account. For loan account types, credit is the only available option.
enum:
- credit
- debit
example: credit
preNote:
type: boolean
description: Indicates if transaction is a test transaction sent by originator to verify recipient's account information is correct.
example: true
recipientAddenda:
type: array
minItems: 0
maxItems: 25
description: |
Array of addenda records containing additional information the originator wants to send to the recipient about the transaction.
Conditional limits based on batch SEC code:
- TEL batches: Addenda cannot be included (must be empty array or contain 0 items)
- Non-CTX batches (PPD, CCD, WEB): Maximum 1 addenda record
- CTX batches: Maximum 25 addenda records
Backend validation enforces these conditional limits based on the parent batch's secCode.
For UPDATE operations, addendaId is required to match and update existing records.
items:
type: object
required:
- addendaId
- addendaData
properties:
addendaId:
type: string
format: uuid
description: Unique identifier for the addenda record (generated by backend). Required to match and update existing records.
example: b2c3d4e5-f6a7-4b5c-9d0e-1f2a3b4c5d6e
nullable: false
addendaData:
type: string
maxLength: 80
description: Addenda record data (max 80 characters). Required when addendaId is provided.
example: Payment for invoice 1234
nullable: false
paymentTypeCode:
type: string
minLength: 0
maxLength: 2
description: Allows an Originator to include a code for their own internal processing or identification purposes. Example being single occurrence or recurring. Can only be set when SEC code is TEL or WEB.
example: S
status:
type: string
description: Determines if transaction will process when batch is initiated. Any transaction in a "hold" status will not process.
enum:
- draft
example: draft
responses:
'204':
description: No Content
'400':
description: The server could not understand the request due to an invalid request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'404':
description: The server can not find the requested resource. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
/a/api/jh-ach/v1/{InstitutionUniversalId}/batches/{BatchId}/delete-transactions:
post:
operationId: DeleteAchTransactions
tags:
- ACH Origination
summary: API to delete ACH transactions from a specific batch.
description: Delete entry and addenda records for a specific batch.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
- name: BatchId
in: path
required: true
description: ACH Batch Id.
schema:
type: string
format: uuid
description: ACH Batch Id.
requestBody:
required: true
description: Delete ACH transactions.
content:
application/json:
schema:
type: object
required:
- transactionIds
properties:
transactionIds:
type: array
minItems: 1
description: Array of transaction IDs to delete.
items:
type: string
format: uuid
description: Unique identifier of the transaction to delete.
example: a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d
responses:
'202':
description: Accepted
'400':
description: The server could not understand the request due to an invalid request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'404':
description: The server can not find the requested resource. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
/a/api/jh-ach/v1/{InstitutionUniversalId}/originations/files:
post:
operationId: UploadNachaFile
tags:
- ACH Origination
summary: Upload NACHA file
description: |
Upload a NACHA file for processing.
## Authorization
Requires UploadNachaFile permission set to Allow.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
requestBody:
description: NACHA file upload request
required: true
content:
multipart/form-data:
schema:
type: object
required:
- filename
- file
properties:
filename:
type: string
description: Name of the NACHA file being uploaded
maxLength: 255
example: payroll_batch_20250125.nacha
file:
type: string
format: binary
description: Binary contents of the NACHA file
additionalProperties: false
encoding:
file:
contentType: text/plain
responses:
'202':
description: Accepted - File received for processing
content:
application/json:
schema:
type: object
description: |
Payload returned on successful NACHA upload. entriesCount is the number of entry detail (type 6) records across all batches. totalDebitAmount and totalCreditAmount are decimal strings derived from the NACHA file control debit/credit totals in cents.
required:
- fileId
- batchCount
- entriesCount
- totalDebitAmount
- totalCreditAmount
properties:
fileId:
type: string
format: uuid
description: Unique identifier for the uploaded NACHA file
example: f1a2b3c4-d5e6-4f7a-8b9c-0d1e2f3a4b5c
batchCount:
type: integer
description: Number of batches in the uploaded file.
example: 1
nullable: false
entriesCount:
type: integer
description: Number of entry detail (type 6) records across all batches.
example: 42
nullable: false
totalDebitAmount:
type: string
description: Total debit dollar amount from the file control record, as a decimal string (e.g. "1234.56").
example: '1000.00'
nullable: false
totalCreditAmount:
type: string
description: Total credit dollar amount from the file control record, as a decimal string (e.g. "1234.56").
example: '1000.00'
nullable: false
additionalProperties: false
'400':
description: The server could not understand the request due to an invalid request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'404':
description: The server can not find the requested resource. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
/a/api/jh-ach/v1/{InstitutionUniversalId}/originations/files/third-party:
post:
operationId: UploadNachaFileThirdParty
tags:
- ACH Origination
summary: Upload NACHA file (third-party)
description: |
Upload a NACHA file for processing using the third-party flow. The file is validated for
NACHA structure only; ACH company identification and FedInfo routing checks performed on
the standard upload path are not applied.
## Authorization
Requires UploadNachaFileThirdParty permission set to Allow.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
requestBody:
description: NACHA file upload request
required: true
content:
multipart/form-data:
schema:
type: object
required:
- filename
- file
properties:
filename:
type: string
description: Name of the NACHA file being uploaded
maxLength: 255
example: payroll_batch_20250125.nacha
file:
type: string
format: binary
description: Binary contents of the NACHA file
additionalProperties: false
encoding:
file:
contentType: text/plain
responses:
'202':
description: Accepted - File received for processing
content:
application/json:
schema:
type: object
description: |
Payload returned on successful NACHA upload. entriesCount is the number of entry detail (type 6) records across all batches. totalDebitAmount and totalCreditAmount are decimal strings derived from the NACHA file control debit/credit totals in cents.
required:
- fileId
- batchCount
- entriesCount
- totalDebitAmount
- totalCreditAmount
properties:
fileId:
type: string
format: uuid
description: Unique identifier for the uploaded NACHA file
example: f1a2b3c4-d5e6-4f7a-8b9c-0d1e2f3a4b5c
batchCount:
type: integer
description: Number of batches in the uploaded file.
example: 1
nullable: false
entriesCount:
type: integer
description: Number of entry detail (type 6) records across all batches.
example: 42
nullable: false
totalDebitAmount:
type: string
description: Total debit dollar amount from the file control record, as a decimal string (e.g. "1234.56").
example: '1000.00'
nullable: false
totalCreditAmount:
type: string
description: Total credit dollar amount from the file control record, as a decimal string (e.g. "1234.56").
example: '1000.00'
nullable: false
additionalProperties: false
'400':
description: The server could not understand the request due to an invalid request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'404':
description: The server can not find the requested resource. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
/a/api/jh-ach/v1/{InstitutionUniversalId}/originations/files/{fileId}:
post:
operationId: RetryNachaFile
tags:
- ACH Origination
summary: Retry processing of a NACHA file
description: |
Retry processing of a previously uploaded NACHA file.
## Authorization
Requires RetryNachaFile permission set to Allow.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
- name: fileId
in: path
required: true
description: Unique identifier for the file
schema:
type: string
format: uuid
example: f1a2b3c4-d5e6-4f7a-8b9c-0d1e2f3a4b5c
responses:
'202':
description: Accepted - File retry request received for processing
content:
application/json:
schema:
type: object
description: |
Payload returned on successful NACHA upload. entriesCount is the number of entry detail (type 6) records across all batches. totalDebitAmount and totalCreditAmount are decimal strings derived from the NACHA file control debit/credit totals in cents.
required:
- fileId
- batchCount
- entriesCount
- totalDebitAmount
- totalCreditAmount
properties:
fileId:
type: string
format: uuid
description: Unique identifier for the uploaded NACHA file
example: f1a2b3c4-d5e6-4f7a-8b9c-0d1e2f3a4b5c
batchCount:
type: integer
description: Number of batches in the uploaded file.
example: 1
nullable: false
entriesCount:
type: integer
description: Number of entry detail (type 6) records across all batches.
example: 42
nullable: false
totalDebitAmount:
type: string
description: Total debit dollar amount from the file control record, as a decimal string (e.g. "1234.56").
example: '1000.00'
nullable: false
totalCreditAmount:
type: string
description: Total credit dollar amount from the file control record, as a decimal string (e.g. "1234.56").
example: '1000.00'
nullable: false
additionalProperties: false
'400':
description: The server could not understand the request due to an invalid request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'404':
description: The server can not find the requested resource. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
/a/api/jh-ach/v1/{InstitutionUniversalId}/origination/process:
post:
operationId: ProcessOutgoingAchFile
tags:
- ACH Origination
summary: Trigger outgoing ACH file generation
description: |
Accepts a request to build and publish an outgoing NACHA file from queued
origination work. Processing is asynchronous; success means the request was accepted.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
responses:
'202':
description: Accepted — outgoing file generation started.
'400':
description: The server could not understand the request due to an invalid request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'404':
description: The server can not find the requested resource. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
/a/api/jh-ach/v1/{InstitutionUniversalId}/origination/files:
get:
operationId: ListOriginationOutgoingFiles
tags:
- ACH Origination
summary: List stored outgoing ACH files
description: |
Returns file names for outgoing ACH content in object storage for a given
calendar year and month, optionally narrowed by day.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
- name: year
in: query
required: false
description: Calendar year for listing stored outgoing ACH files (YYYY).
schema:
type: string
pattern: ^\d{4}$
example: '2025'
- name: month
in: query
required: false
description: Month (MM).
schema:
type: string
pattern: ^(0[1-9]|1[0-2])$
example: '03'
- name: day
in: query
required: false
description: Optional day of month (DD) to narrow the listing.
schema:
type: string
pattern: ^(0[1-9]|[12][0-9]|3[01])$
example: '15'
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
required:
- files
- total
properties:
files:
type: array
description: Outgoing ACH files for the requested date scope.
items:
type: object
required:
- name
properties:
name:
type: string
description: Object name of the file in storage.
example: ach-out-20250315120000.txt
nullable: false
total:
type: integer
description: Number of files in the response.
example: 12
nullable: false
'400':
description: The server could not understand the request due to an invalid request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'404':
description: The server can not find the requested resource. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
/a/api/jh-ach/v1/{InstitutionUniversalId}/origination/file:
get:
operationId: GetOriginationOutgoingFile
tags:
- ACH Origination
summary: Download an outgoing ACH file by file ID
description: |
Returns the raw NACHA file content for the given filename as plain text.
The response is suitable for download (Content-Disposition attachment).
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
- name: fileId
in: query
required: false
description: Name of the outgoing ACH file to download.
schema:
type: string
format: uuid
example: f1a2b3c4-d5e6-4f7a-8b9c-0d1e2f3a4b5c
responses:
'200':
description: OK — file body.
content:
text/plain:
schema:
type: string
'400':
description: The server could not understand the request due to an invalid request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'404':
description: The server can not find the requested resource. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
/a/api/jh-ach/v1/{InstitutionUniversalId}/batches-schedule/{BatchId}:
post:
operationId: ScheduleAchBatch
tags:
- ACH Origination
summary: Schedule an ACH batch for processing.
description: |
Validates limits, persists draft → processing, triggers OFAC screening,
approval request, and sync account validation (basic: exists + valid type).
NSF/balance checks deferred to Phase 2 (NACHA generation).
Returns the batch with initial check statuses.
## Authorization
Requires ScheduleAchBatch permission set to Allow.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
- name: BatchId
in: path
required: true
description: ACH Batch Id.
schema:
type: string
format: uuid
description: ACH Batch Id.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- achBusinessAccountId
- effectiveEntryDate
properties:
achBusinessAccountId:
type: string
format: uuid
description: Unique identifier of the ACH business account for the batch.
example: a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d
nullable: false
effectiveEntryDate:
type: string
format: date
description: Desired effective entry date for the batch (YYYY-MM-DD).
example: '2026-03-10'
nullable: false
responses:
'200':
description: Batch scheduled — now in processing
content:
application/json:
schema:
type: object
required:
- batchId
- status
- checkStatus
properties:
batchId:
type: string
format: uuid
description: Unique identifier of the batch.
example: a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d
nullable: false
status:
type: string
description: Current batch status after scheduling.
enum:
- processing
example: processing
nullable: false
checkStatus:
type: object
description: Current status of each pre-flight check for the batch.
required:
- accountValidation
- nsf
properties:
ofac:
type: string
description: Status of an individual check step.
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
approval:
type: string
description: Status of an individual check step.
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
accountValidation:
type: string
description: Status of an individual check step.
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
nsf:
description: NSF (Non-Sufficient Funds) step status. Compares available balance against batch total.
type: string
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
entryPreFunding:
description: Entry-level pre-funding rollup status. Aggregates individual entry pre-funding results. Only present when pre-funding is configured.
type: string
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
businessAccountPreFunding:
description: Business account pre-funding status. Validates sufficient funds in the offset account for Fed-bound credit entries. Only present when pre-funding is configured.
type: string
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
'400':
description: The server could not understand the request due to an invalid request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'404':
description: The server can not find the requested resource. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
/a/api/jh-ach/v1/{InstitutionUniversalId}/batches-approve/{BatchId}:
post:
operationId: ApproveAchBatch
tags:
- ACH Origination
summary: Approve or reject an ACH batch.
description: |
Submits an approval or rejection decision to the platform approval service
for a batch in processing. The approver must be a different user than the
scheduler (dual control). For enterprise users, the platform service enforces
dual-user control. For consumer users, gyro-packer enforces dual-user control
and verifies that the approver has the ach_approve entitlement enabled.
The batch status update happens asynchronously — the platform approval service
notifies ach-data-service via Pub/Sub, which updates the batch's approval
check status. The response reflects the submitted approval decision, not the
final batch state.
## Authorization
Requires ApproveAchBatch permission set to Allow.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
- name: BatchId
in: path
required: true
description: ACH Batch Id.
schema:
type: string
format: uuid
description: ACH Batch Id.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- status
properties:
status:
type: string
description: The approval decision for the batch.
enum:
- approved
- rejected
example: approved
nullable: false
comments:
type: string
maxLength: 500
description: Optional comments for the approval decision.
example: Approved for processing
nullable: true
responses:
'200':
description: Approval recorded
content:
application/json:
schema:
type: object
required:
- batchId
- status
- approval
- allChecksPassed
properties:
batchId:
type: string
format: uuid
description: Unique identifier of the batch.
example: a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d
nullable: false
status:
type: string
description: Current batch status. Remains processing because the approval decision is applied asynchronously by the platform approval service via Pub/Sub.
enum:
- processing
example: processing
nullable: false
approval:
type: string
description: Status of the approval decision submitted to the platform approval service.
enum:
- APPROVED
- REJECTED
- PENDING
example: APPROVED
nullable: false
allChecksPassed:
type: boolean
description: Whether all pre-flight checks have passed. Always false at request time because the approval decision is applied asynchronously via Pub/Sub.
example: false
nullable: false
'400':
description: The server could not understand the request due to an invalid request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'404':
description: The server can not find the requested resource. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
'503':
description: Approval service or entitlement service is temporarily unavailable.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
/a/api/jh-ach/v1/{InstitutionUniversalId}/batches-retry/{BatchId}:
post:
operationId: RetryFailedSteps
tags:
- ACH Origination
summary: Retry failed check steps for a batch in processing.
description: |
Moves all NotPassed steps back to InProcess and re-triggers the
corresponding checks. Returns the list of retried steps and the
updated check statuses.
## Authorization
Requires RetryFailedSteps permission set to Allow.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
- name: BatchId
in: path
required: true
description: ACH Batch Id.
schema:
type: string
format: uuid
description: ACH Batch Id.
responses:
'200':
description: Failed steps retried
content:
application/json:
schema:
type: object
required:
- batchId
- stepsRetried
- checkStatus
properties:
batchId:
type: string
format: uuid
description: Unique identifier of the batch.
example: a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d
nullable: false
stepsRetried:
type: array
description: |
List of step names that were retried (moved from NotPassed to InProcess).
Consumer users can only retry: Approval, AccountValidation, NSF.
Enterprise users can retry all steps including system-driven: Ofac, EntryPreFunding, BusinessAccountPreFunding.
minItems: 1
maxItems: 6
items:
type: string
enum:
- Ofac
- Approval
- AccountValidation
- NSF
- EntryPreFunding
- BusinessAccountPreFunding
example:
- Ofac
- AccountValidation
nullable: false
checkStatus:
type: object
description: Current status of each pre-flight check for the batch.
required:
- accountValidation
- nsf
properties:
ofac:
type: string
description: Status of an individual check step.
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
approval:
type: string
description: Status of an individual check step.
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
accountValidation:
type: string
description: Status of an individual check step.
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
nsf:
description: NSF (Non-Sufficient Funds) step status. Compares available balance against batch total.
type: string
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
entryPreFunding:
description: Entry-level pre-funding rollup status. Aggregates individual entry pre-funding results. Only present when pre-funding is configured.
type: string
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
businessAccountPreFunding:
description: Business account pre-funding status. Validates sufficient funds in the offset account for Fed-bound credit entries. Only present when pre-funding is configured.
type: string
enum:
- InProcess
- Passed
- NotPassed
- Bypassed
- Canceled
example: InProcess
nullable: false
'400':
description: The server could not understand the request due to an invalid request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'404':
description: The server can not find the requested resource. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
/a/api/jh-ach/v1/{InstitutionUniversalId}/batches-override/{BatchId}:
post:
operationId: OverrideStep
tags:
- ACH Origination
summary: Override (bypass) a batch check step.
description: |
Allows an enterprise user to override a failed or in-process check step
by setting it to Bypassed. Currently supports the NSF step; additional
steps may be added in the future.
The step status is updated to Bypassed with a comment recording who
performed the override and why. If all checks now pass, the batch
transitions to scheduled.
## Authorization
Enterprise users only. Consumer users receive 403 Forbidden.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
- name: BatchId
in: path
required: true
description: ACH Batch Id.
schema:
type: string
format: uuid
description: ACH Batch Id.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- step
properties:
step:
type: string
description: The step to override (bypass). Currently only NSF is supported; additional steps may be added in the future.
enum:
- NSF
example: NSF
nullable: false
comments:
type: string
maxLength: 500
description: Optional comments explaining why the step is being overridden.
example: Reviewed and approved by treasury manager
nullable: true
responses:
'200':
description: Step overridden
content:
application/json:
schema:
type: object
required:
- batchId
- step
- newStatus
- allChecksPassed
- batchStatus
properties:
batchId:
type: string
format: uuid
description: Unique identifier of the batch.
example: a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d
nullable: false
step:
type: string
description: The step that was overridden.
example: NSF
nullable: false
newStatus:
type: string
description: The new status of the step (always Bypassed for overrides).
enum:
- Bypassed
example: Bypassed
nullable: false
allChecksPassed:
type: boolean
description: Whether all pre-flight checks have now passed after the override.
example: true
nullable: false
batchStatus:
type: string
description: Current batch status after the override. May transition to scheduled if all checks now pass.
example: scheduled
nullable: false
'400':
description: The server could not understand the request due to an invalid request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
/a/api/jh-ach/v1/{InstitutionUniversalId}/batches-nsf-check:
post:
operationId: BeginFiNsfCheck
tags:
- ACH Origination
summary: Trigger FI-level NSF check for all scheduled batches.
description: |
Initiates an asynchronous NSF (Non-Sufficient Funds) check across all
scheduled batches at the institution. Batches are grouped by business
account, and each account's available balance is compared against the
total of its scheduled batches.
Returns immediately with the number of accounts queued for checking.
Use the GET /nsf-status endpoint to poll for results.
## Authorization
Enterprise users only. Consumer users receive 403 Forbidden.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
responses:
'200':
description: No scheduled batches to check
content:
application/json:
schema:
type: object
required:
- accountsQueued
properties:
accountsQueued:
type: integer
description: Number of distinct business accounts queued for NSF checking.
example: 3
nullable: false
'202':
description: NSF checks queued for processing
content:
application/json:
schema:
type: object
required:
- accountsQueued
properties:
accountsQueued:
type: integer
description: Number of distinct business accounts queued for NSF checking.
example: 3
nullable: false
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
/a/api/jh-ach/v1/{InstitutionUniversalId}/nsf-status:
get:
operationId: GetFiNsfStatus
tags:
- ACH Origination
summary: Get FI-level NSF check results.
description: |
Returns the most recent FI-level NSF check results for each business
account at the institution. Results are overwritten on each NSF check
run (point-in-time snapshot).
Poll this endpoint after triggering an NSF check via POST /batches-nsf-check
to see results transition from Pending to Sufficient/Insufficient/Error.
## Authorization
Enterprise users only. Consumer users receive 403 Forbidden.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
responses:
'200':
description: NSF check results
content:
application/json:
schema:
type: object
required:
- results
properties:
results:
type: array
description: NSF check results for each business account at the institution.
items:
type: object
required:
- achBusinessAccountId
- status
- checkedAt
properties:
achBusinessAccountId:
type: string
format: uuid
description: Unique identifier of the business account.
example: f91b75cf-8923-4b21-acad-0b7123d833fd
nullable: false
status:
type: string
description: NSF check result for this account.
enum:
- Pending
- Sufficient
- Insufficient
- Error
example: Sufficient
nullable: false
totalAmount:
type: integer
format: int64
description: Total entry amount in cents across all scheduled batches on this account.
example: 150000
nullable: true
availableBalance:
type: integer
format: int64
description: Available balance in cents from the core banking system.
example: 200000
nullable: true
batchCount:
type: integer
format: int64
description: Number of scheduled batches sharing this account.
example: 3
nullable: true
comments:
type: string
description: Details about the NSF check result.
example: 'insufficient funds: available 100000 cents, total 250000 cents across scheduled batches'
nullable: true
checkedAt:
type: string
format: date-time
description: Timestamp when the NSF check was performed.
example: '2026-08-20T17:30:00Z'
nullable: false
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
Did this page help you?
Why was this page helpful?
Why wasn't this page helpful?
Thank you for your feedback!
Last updated Wed Feb 11 2026