Imports
General Ledger
>
API Reference
>
v1
>
Imports
Overview
The Imports API supports bulk creation of General Ledger (GL) data using CSV files.
These endpoints allow institutions to import accounts and transactions in a single request. Uploaded files are validated before processing, and requests fail if validation errors are found.
Available endpoints
Account imports
Bulk creation of GL accounts using a CSV file.
- Each row represents a single account
- Required and optional columns are defined in the API contract
- All records are validated before accounts are created
Transaction imports
Bulk creation of transactions using a CSV file.
- Each row represents a single transaction
- Transactions may be grouped into transaction sets
- Transactions are validated before posting
CSV uploads
- Files are uploaded using
multipart/form-data - A header row is required
- Column order does not matter
- Accepted columns and validation rules are defined in the API contract
Import behavior
You can learn more about import behavior, validation rules, transaction grouping, and error handling in our Imports Guide.
openapi: 3.0.3
info:
title: General Ledger API - Imports
version: v1
description: API to interact with General Ledger
contact:
name: General Ledger
url: https://www.jackhenry.com/
email: DC-LedgerServices-Product@jackhenry.com
servers:
- url: https://{API_ENDPOINT}
variables:
API_ENDPOINT:
default: digital.garden-fi.com
security:
- bearerAuth: []
tags:
- name: Imports
description: APIs for bulk importing data into general ledger
paths:
/a/api/general-ledger/v1/{InstitutionUniversalId}/accounts-import:
post:
operationId: AccountsImport
tags:
- Imports
summary: API to import multiple GL Accounts at once.
description: Allows an institution to import multiple GL Accounts at once via a csv file.
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: A CSV containing the GL accounts records to be created.
content:
multipart/form-data:
schema:
type: object
properties:
file:
type: string
format: binary
description: |
The csv file containing the GL Accounts to be imported. The first line of the csv file must be a header with the columns expected. The columns can be in any order. The accepted column options are: Account Number, Account Title, Account Type, Account Status, Currency Type. Only Account Number, Account Title, and Account Type are required.
responses:
'201':
description: Accounts imported successfully
'400':
description: The request body is invalid. See the response body for more information.
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:
duplicateAccountNumber:
summary: Duplicate Account Number
value:
type: general-ledger/request-constraint-violation
title: Bad request
details:
- A GL account with Account Number {accountNumber} already exists
duplicateAccountNumberInImport:
summary: Duplicate Account Number in Import
value:
type: general-ledger/request-constraint-violation
title: Bad request
details:
- Account Numbers {accountNumbers} appear more than once in the import
badRequest:
summary: Validation Errors
value:
type: general-ledger/request-constraint-violation
title: Bad request
details:
- Account Number must be a valid number
- Account Number must be between 1 and 8 digits
- A GL account with this Account Number already exists
- Account Title cannot be blank
- Account Title cannot be more than 40 characters
- Account Type must be either Asset, Liability, Equity, Income, or Expense
- Currency Type must be USD
- Account Status not valid
- GL {Income or Expense} accounts cannot have a status of Control
tooManyAccounts:
summary: Too many accounts
value:
type: general-ledger/request-constraint-violation
title: Bad request
details:
- Too many accounts added at once. The maximum number of accounts that can be added at once is 1000
invalidAccountStatus:
summary: Account status must be open or closed in import
value:
type: general-ledger/request-constraint-violation
title: Bad request
details:
- Only open or closed accounts are allowed in an Account Import
'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/general-ledger/v1/{InstitutionUniversalId}/transactions-import:
post:
operationId: TransactionsImport
tags:
- Imports
summary: API to import large sets of transactions into GL.
description: Allows an institution to import multiple transactions into GL via a csv file.
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:
content:
multipart/form-data:
schema:
type: object
properties:
file:
type: string
format: binary
description: |
The csv file containing the transactions to be imported. The first line of the csv file must be a header with the columns expected. The columns can be in any order. The accepted column options are: Id, Account Number, Account Id, DebitCredit, Amount, Effective Date, Description, Posted Date, Entry Type, Branch Id, Transaction Id, and Transaction Set Id. Only the Account Number or Account Id, DebitCredit, and Amount are required.
responses:
'201':
description: Successful transactions import
content:
application/json:
schema:
type: object
required:
- transactionSetId
properties:
transactionSetId:
type: string
format: uuid
description: The transaction set id the transaction is tied to.
nullable: false
additionalProperties: false
'400':
description: The request body is invalid. See the response body for more information.
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:
badRequest:
summary: Validation errors
value:
type: general-ledger/request-constraint-violation
title: Bad request
details:
- The Entry Type must be less than or equal to 36 characters
- Transaction Set must contain at least two transactions
- Transaction Set cannot exceed 6500 transactions
- The amount must be greater than 0
- DebitCredit must be debit or credit
- Currency Type must be USD
- The description must be less than or equal to 100 characters
- Effective date must be a valid date
- Effective date must be less than or equal to the current date
- Prior month effective date limit exceeded
- A GL Account with account number {0} has a status of {1} and cannot be posted to
unbalanced:
summary: Transaction set unbalanced
value:
type: general-ledger/transaction-set-unbalanced
title: Transaction set is out balance
details:
- Entries do not balance by effective date
accountNotPostable:
summary: Account not postable
value:
type: general-ledger/account-not-postable
title: Account not postable
details:
- The account is closed and cannot be posted to
accountInTransactionSetNotFound:
summary: Account in transaction set not found
value:
type: general-ledger/account-in-transaction-set-not-found
title: An account in the transaction set was not found
details:
- Every account in the transaction set must exist
priorMonthEffectiveDateLimitExceeded:
summary: Prior Month Effective Date Limit Exceeded
value:
type: general-ledger/prior-month-effective-date-limit-exceeded
title: Prior Month Effective Date Limit Exceeded
details:
- Transactions cannot be posted to prior months outside of the prior month effective date limit
'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 Tue Feb 17 2026