Entries
ACH
>
Entries
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 - Entries
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://{API_ENDPOINT}
variables:
API_ENDPOINT:
default: digital.garden-fi.com
security: []
tags:
- name: Entries
description: APIs for getting ACH entries (collection and single)
paths:
/a/api/jh-ach/v1/{InstitutionUniversalId}/entries:
get:
operationId: GetEntries
tags:
- Entries
summary: Get entries
description: |
Get ACH entries for the institution. Supports optional query parameters for
filtering and paging. Returns entries with batch context.
## Sorting
Default sort is settlement date descending, then amount ascending.
## Query
- **offset**: Default 0
- **count**: Default 50
- Other query parameters filter the result set.
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
description: The service offset provided by the API provider
schema:
type: string
- name: Count
in: query
description: 'The count of records requested <br>Example: `.../resource?Count=value`'
schema:
type: string
default: '0'
- 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: fileId
in: query
required: false
description: Filter by file 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: traceNumber
in: query
required: false
description: |
A unique identifier assigned to each transaction. Must equal 15 numeric characters.
If trace number is used, no additional criteria is required, but it may be used
in conjunction with other values.
schema:
type: string
pattern: ^\d{15}$
maxLength: 15
example: '123456789012345'
- 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.
schema:
type: string
description: |
The state of the transaction. This value comes from the entry database table.
enum:
- unprocessed
- queued
- processing
- posted
- return_pending
- returned
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: Success
content:
application/json:
schema:
type: object
description: |
Response body for GET /{institutionId}/entries. List of entries with batch and
enrichment; each item has entry, batch, and enrichment. Sorted by settlement date
descending, then amount ascending. Paging defaults: offset 0, count 50.
required:
- entries
- paging
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
entries:
type: array
description: Array of entry-with-batch-enrichment items (entry, batch, enrichment)
items:
type: object
description: |
One item in the entries list: entry summary, batch summary, and enrichment (debit/credit).
All three keys are always present (same as GET entry by ID). Batch may be empty when no batch context.
required:
- entry
- batch
- enrichment
properties:
entry:
type: object
description: Entry summary for list responses. Use id to fetch full entry details.
required:
- id
- receiverAccountNumber
- amount
- transactionCode
- entryState
- direction
- externalEntryId
- batchId
properties:
id:
type: string
format: uuid
description: Unique identifier for the entry (use for GET by id)
settlementDate:
type: string
format: date
nullable: true
description: Settlement date when present (e.g. incoming)
receiverAccountNumber:
type: string
maxLength: 17
description: Receiver account number from entry detail
receiverName:
type: string
maxLength: 22
nullable: true
description: Receiver name from entry detail
amount:
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
traceNumber:
type: string
nullable: true
description: Trace number
transactionCode:
type: integer
format: int64
description: Transaction code from entry detail record
entryState:
type: string
description: |
The state of the transaction. This value comes from the entry database table.
enum:
- unprocessed
- queued
- processing
- posted
- return_pending
- returned
example: posted
createdAt:
type: string
format: date-time
nullable: true
description: Entry creation timestamp
direction:
type: string
description: Transaction direction (incoming/outgoing)
externalEntryId:
type: string
description: External entry identifier
batchId:
type: string
format: uuid
description: Batch identifier this entry belongs to
fileId:
type: string
format: uuid
nullable: true
description: File identifier when entry has file context
additionalProperties: false
batch:
description: Batch summary; always present. Empty or partial when no batch context.
type: object
required:
- id
- externalBatchId
- originatorCompanyId
- standardEntryClassCode
properties:
id:
type: string
format: uuid
description: Batch identifier
externalBatchId:
type: string
description: External batch identifier from batch header
originatorCompanyName:
type: string
maxLength: 16
nullable: true
description: Originator company name from batch header
originatorCompanyId:
type: string
maxLength: 10
description: Originator company identifier from batch header
standardEntryClassCode:
type: string
maxLength: 3
minLength: 3
description: Standard Entry Class code (e.g. PPD, CCD)
batchNumber:
type: integer
format: int64
nullable: true
description: Batch number when present
additionalProperties: false
enrichment:
type: object
description: |
Derived debit/credit, account type, and SEC-specific fields for list responses.
Optional fields are populated only when the entry's SEC code defines them.
required:
- debitCredit
- accountType
properties:
debitCredit:
type: string
enum:
- debit
- credit
description: Derived from entry transaction code
accountType:
type: string
description: Derived from entry transaction code (e.g. checking, savings)
checkSerialNumber:
type: string
nullable: true
description: SEC-specific (e.g. POP, ARC, BOC, RCK, POS, TRC, XCK)
terminalCity:
type: string
nullable: true
description: SEC-specific (e.g. POP)
terminalState:
type: string
nullable: true
description: SEC-specific (e.g. POP)
paymentTypeCode:
type: string
nullable: true
description: SEC-specific (e.g. TEL, WEB)
cardTransactionTypeCode:
type: string
nullable: true
description: SEC-specific (e.g. POS, SHR)
cardExpirationDate:
type: string
nullable: true
description: SEC-specific (e.g. SHR)
documentReferenceNumber:
type: string
nullable: true
description: SEC-specific (e.g. SHR)
cardAccountNumber:
type: string
nullable: true
description: SEC-specific (e.g. SHR)
processControlField:
type: string
nullable: true
description: SEC-specific (e.g. TRC, XCK)
itemResearchNumber:
type: string
nullable: true
description: SEC-specific (e.g. TRC, XCK)
numberOfAddendaRecords:
type: string
nullable: true
description: SEC-specific (e.g. CTX, ATX)
receivingCompanyName:
type: string
nullable: true
description: SEC-specific (e.g. CTX, ATX, ACK)
originalEntryTraceNumber:
type: string
nullable: true
description: SEC-specific (e.g. ACK)
additionalProperties: false
additionalProperties: 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}/entries/{entryId}:
get:
operationId: GetEntry
tags:
- Entries
summary: Get entry
description: |
Retrieve a single ACH entry. Response includes entry details, batch and file
context when present, addenda when present, and enrichment when available.
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: entryId
in: path
description: Unique identifier for the ACH entry
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Success - Entry details returned
content:
application/json:
schema:
type: object
description: |
Full entry response for GET .../entries/{entryId}. All five keys are always present.
When there is no data for file, batch, entry, or enrichment, the value is an empty object {}.
When there are no addenda records, addendas is an empty array []. Never omit keys or use null.
required:
- file
- batch
- entry
- addendas
- enrichment
properties:
file:
description: File header when entry has file context; empty object when no file context
type: object
required:
- id
- immediateOrigin
- creationDate
- creationTime
- fileIdModifier
properties:
id:
type: string
format: uuid
description: Unique identifier for the ACH file
immediateOrigin:
type: string
description: Nine-digit routing transit number of the originating institution (10 chars)
creationDate:
type: string
description: File creation date (YYMMDD)
creationTime:
type: string
description: File creation time 24-hour format (HHMM)
fileIdModifier:
type: string
description: Unique file ID modifier for the processing day (1 character)
additionalProperties: false
batch:
description: Batch header when entry has batch context; empty object when no batch context
type: object
required:
- recordType
- serviceClassCode
- originatorCompanyId
- standardEntryClassCode
- effectiveEntryDate
- originatingDFIId
properties:
recordType:
type: string
description: ACH record type for batch header (e.g. "5")
example: '5'
serviceClassCode:
type: string
description: Type of entries in the batch (credits, debits)
originatorCompanyName:
type: string
maxLength: 16
nullable: true
description: Name of the originator
companyDiscretionaryData:
type: string
nullable: true
description: Internal tracking data (max 20 chars)
originatorCompanyId:
type: string
maxLength: 10
description: Company id assigned by FI
standardEntryClassCode:
type: string
description: Type of ACH transaction (3 chars)
companyEntryDescription:
type: string
nullable: true
description: Purpose of the entry (max 10 chars)
companyDescriptiveDate:
type: string
nullable: true
description: Descriptive date for receiver (max 6 chars)
effectiveEntryDate:
type: string
description: Intended settlement date (YYMMDD)
originatorStatusCode:
type: string
nullable: true
description: Type of originating entity (1 char)
originatingDFIId:
type: string
description: ODFI routing number (8 chars)
batch:
type: integer
format: int64
nullable: true
description: Sequential batch number
additionalProperties: false
entry:
type: object
description: |
Entry detail for the single-entry response.
required:
- id
- recordType
- transactionCode
- receivingDFIId
- receiverAccountNumber
- amount
- numberOfAddenda
- entryState
properties:
id:
type: string
format: uuid
description: Unique identifier for the entry
recordType:
type: string
description: ACH record type for entry detail (e.g. "6")
example: '6'
transactionCode:
type: integer
format: int64
description: Transaction code (2 digits)
receivingDFIId:
type: string
description: RDFI routing number (8 chars)
checkDigit:
type: string
nullable: true
description: Check digit for routing number
receiverAccountNumber:
type: string
maxLength: 17
description: Receiver account number
amount:
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
identificationNumber:
type: string
nullable: true
description: Customer identification (max 15 chars)
receiverName:
type: string
maxLength: 22
nullable: true
description: Receiver name
discretionaryData:
type: string
nullable: true
description: Discretionary data (max 2 chars)
addendaIndicator:
type: integer
format: int64
nullable: true
description: Indicates addenda record(s) present
traceNumber:
type: string
nullable: true
description: Unique transaction identifier (15 chars)
entryState:
type: string
description: |
The state of the transaction. This value comes from the entry database table.
enum:
- unprocessed
- queued
- processing
- posted
- return_pending
- returned
example: posted
fileId:
type: string
format: uuid
nullable: true
description: File identifier
numberOfAddenda:
type: integer
format: int64
minimum: 0
description: Number of addenda records
settlementDate:
type: string
format: date
nullable: true
description: Settlement date of the entry when present (civil date, e.g. incoming); null for outgoing.
createdAt:
type: string
format: date-time
nullable: true
description: Entry creation timestamp
direction:
type: string
description: Transaction direction (incoming/outgoing)
externalEntryId:
type: string
description: External entry identifier
batchId:
type: string
format: uuid
description: Batch identifier this entry belongs to
additionalProperties: false
addendas:
type: array
description: Addenda records; empty array when none. POP entries include terminalCity and terminalState
items:
type: object
description: |
One addenda record in the GET entry by id response. Identifiers and addendaType are always present;
other properties are optional and populated only when stored for that addenda type and SEC code.
IAT-only and audit fields are not included in this schema.
required:
- id
- externalEntryAddendaId
- entryId
- batchId
- addendaType
properties:
id:
type: string
description: Unique identifier for the addenda record.
externalEntryAddendaId:
type: string
description: External addenda identifier from the originating system or file.
entryId:
type: string
format: uuid
description: Parent entry identifier.
batchId:
type: string
format: uuid
description: Parent batch identifier.
addendaType:
type: string
description: Addenda type code (2 characters).
lineNumber:
type: integer
format: int64
nullable: true
description: Line number of this addenda record in the source file.
sequenceNumber:
type: integer
format: int64
nullable: true
description: Addenda sequence number.
entryDetailSequenceNumber:
type: integer
format: int64
nullable: true
description: Entry detail sequence number linked to this addenda.
paymentRelatedInformation:
type: string
nullable: true
description: Payment-related information from the addenda (max 80 characters).
changeCode:
type: string
nullable: true
description: NOC change code when present (addenda type 98).
originalTrace:
type: string
nullable: true
description: Original entry trace number when present (NOC/return addenda).
correctedData:
type: string
nullable: true
description: Corrected data field when present (NOC addenda).
traceNumber:
type: string
nullable: true
description: Trace number from the addenda when present.
returnCode:
type: string
nullable: true
description: Return reason code when present (addenda type 99).
dateOfDeath:
type: string
nullable: true
description: Date of death when present (return addenda).
originalDfi:
type: string
nullable: true
description: Original receiving DFI identification when present.
addendaInformation:
type: string
nullable: true
description: Addenda information field when present (e.g. addenda type 02).
transactionTypeCode:
type: string
nullable: true
description: Transaction type code when present.
terminalIdentificationCode:
type: string
nullable: true
description: Terminal identification code when present.
terminalCity:
type: string
nullable: true
description: Terminal city from the addenda when present (max 4 characters).
terminalState:
type: string
nullable: true
description: Terminal state from the addenda when present (max 2 characters).
transactionDescription:
type: string
maxLength: 7
nullable: true
description: Transaction description from the addenda (max 7 characters).
networkIdentificationCode:
type: string
maxLength: 3
nullable: true
description: Network identification code from the addenda (max 3 characters).
transactionSerialNumber:
type: string
maxLength: 6
nullable: true
description: Transaction serial number from the addenda (max 6 characters).
transactionDate:
type: string
maxLength: 4
nullable: true
description: Transaction date from the addenda (max 4 characters).
transactionTime:
type: string
maxLength: 6
nullable: true
description: Transaction time from the addenda (max 6 characters).
terminalLocation:
type: string
maxLength: 27
nullable: true
description: Terminal location from the addenda (max 27 characters).
referenceInformation1:
type: string
maxLength: 7
nullable: true
description: First reference information field from the addenda (max 7 characters).
referenceInformation2:
type: string
maxLength: 3
nullable: true
description: Second reference information field from the addenda (max 3 characters).
authorizationCodeOrCardExpirationDate:
type: string
maxLength: 6
nullable: true
description: Authorization code or card expiration date from the addenda (max 6 characters).
additionalProperties: false
enrichment:
type: object
description: |
Enrichment for the full entry response. Derived and SEC-specific fields when applicable.
Optional fields are populated only for the entry's SEC code (e.g. POP: checkSerialNumber, terminalCity, terminalState).
required:
- debitCredit
- accountType
properties:
debitCredit:
type: string
enum:
- debit
- credit
description: Derived from transaction code
accountType:
type: string
description: Derived from transaction code
paymentTypeCode:
type: string
nullable: true
description: SEC-specific (e.g. TEL, WEB)
checkSerialNumber:
type: string
nullable: true
description: SEC-specific (e.g. ARC, BOC, RCK, POP)
cardTransactionTypeCode:
type: string
nullable: true
description: SEC-specific (e.g. POS, SHR)
cardExpirationDate:
type: string
nullable: true
description: SEC-specific (e.g. SHR)
documentReferenceNumber:
type: string
nullable: true
description: SEC-specific (e.g. SHR)
cardAccountNumber:
type: string
nullable: true
description: SEC-specific (e.g. SHR)
terminalCity:
type: string
nullable: true
description: SEC-specific (e.g. POP); terminal city from entry detail
terminalState:
type: string
nullable: true
description: SEC-specific (e.g. POP); terminal state from entry detail
processControlField:
type: string
nullable: true
description: SEC-specific (e.g. TRC, XCK); process control field from entry detail
itemResearchNumber:
type: string
nullable: true
description: SEC-specific (e.g. TRC, XCK); item research number from entry detail
numberOfAddendaRecords:
type: string
nullable: true
description: SEC-specific (e.g. CTX, ATX); from entry detail positions 55-58 when applicable
receivingCompanyName:
type: string
nullable: true
description: SEC-specific (e.g. CTX, ATX, ACK); receiving company name from entry detail
originalEntryTraceNumber:
type: string
nullable: true
description: SEC-specific (e.g. ACK); original entry trace number from entry detail
additionalProperties: 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
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