Budgets
General Ledger
>
API Reference
>
v1
>
Budgets
openapi: 3.0.3
info:
title: General Ledger API - Budgets
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://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: Budgets
description: APIs for importing and searching institution specific general ledger budget amounts
paths:
/a/api/general-ledger/v1/{InstitutionUniversalId}/budgets/{FiscalYear}:
post:
operationId: BudgetImport
tags:
- Budgets
summary: Import or update General Ledger budget amounts.
description: API to upload a CSV file of budget amounts for the given fiscal year. Rows matching an existing account/branch/cost center combination are updated; all others are created.
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: FiscalYear
in: path
required: true
description: The 4 digit fiscal year to import or update budget amounts for.
schema:
type: string
pattern: ^\d{4}$
nullable: false
example: '2025'
requestBody:
description: A CSV file containing the budget records to import.
required: true
content:
multipart/form-data:
schema:
type: object
required:
- file
properties:
file:
type: string
format: binary
description: The CSV file containing the budget records to import.
responses:
'201':
description: Created
'400':
description: The request 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:
invalidContentType:
summary: Invalid content type
value:
type: jackhenry/operation-failed
title: Bad Request
details:
- Content-Type must be multipart/form-data
missingFile:
summary: Missing file in request body
value:
type: jackhenry/operation-failed
title: Bad Request
details:
- Could not find file in request body
invalidFiscalYearFormat:
summary: Invalid fiscal year format
value:
type: general-ledger/request-constraint-violation
title: Bad request
details:
- Fiscal year must be a 4 digit year
invalidFiscalYearRange:
summary: Fiscal year out of range
value:
type: general-ledger/request-constraint-violation
title: Bad request
details:
- Fiscal year must be between 1900 and 9999
accountNotFound:
summary: Account number not found
value:
type: jackhenry/operation-failed
title: Bad Request
details:
- Account number {accountNumber} not found
accountClosed:
summary: Account is closed
value:
type: jackhenry/operation-failed
title: Bad Request
details:
- Budgeted an amount for account number {accountNumber} which has a closed status
'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}/budgets-search:
post:
operationId: BudgetSearch
tags:
- Budgets
summary: Search General Ledger budget amounts.
description: API to search for aggregated budget amounts for a fiscal year, account, branch, and cost center.
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: The budget search criteria.
content:
application/json:
schema:
type: object
required:
- fiscalYear
- accountId
properties:
fiscalYear:
type: string
description: The 4 digit fiscal year to search budget amounts for.
nullable: false
example: '2025'
accountId:
type: string
format: uuid
description: The unique identifier of the GL account to search budget amounts for.
nullable: false
branchId:
type: string
description: Filter budget amounts to a specific branch under the account.
nullable: true
maxLength: 36
costCenter:
type: string
description: Filter budget amounts to a specific cost center under the account.
nullable: true
maxLength: 36
additionalProperties: false
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
required:
- fiscalYear
- accountId
- branchId
- costCenter
- months
properties:
fiscalYear:
type: integer
format: int64
nullable: false
example: 2025
accountId:
type: string
format: uuid
nullable: false
branchId:
type: string
nullable: true
costCenter:
type: string
nullable: true
months:
type: array
description: The aggregated budget amount for each of the institution's 12 fiscal months.
items:
type: object
required:
- calendarMonth
- amount
properties:
calendarMonth:
type: integer
description: The calendar month (1-12) that the fiscal month maps to, based on the institution's first fiscal month setting.
nullable: false
minimum: 1
maximum: 12
amount:
type: object
required:
- value
- currencyType
properties:
value:
type: string
description: The aggregated budgeted amount for the month, as a decimal string.
nullable: false
example: '1000.50'
currencyType:
type: string
description: The ISO 4217 three character currency type. USD is the default value.
nullable: false
default: USD
additionalProperties: false
additionalProperties: false
nullable: false
additionalProperties: false
'400':
description: The request is invalid, or no budget was found for the given search criteria. 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:
validationErrors:
summary: Validation errors
value:
type: general-ledger/request-constraint-violation
title: Bad request
details:
- Fiscal year is required
- Account is required
- Account must be a valid account id, not an account number
- Branch must be less than or equal to 36 characters
- Cost center must be less than or equal to 36 characters
fiscalYearNotSetUp:
summary: Budget not set up for the fiscal year
value:
type: general-ledger/budget-search-no-results
title: Results were not found given the search criteria
details:
- A budget has not been set up for the provided fiscal year.
accountIdNotSetUp:
summary: Budget not set up for the account
value:
type: general-ledger/budget-search-no-results
title: Results were not found given the search criteria
details:
- A budget has not been set up for the provided account.
branchIdNotSetUp:
summary: Budget not set up for the branch
value:
type: general-ledger/budget-search-no-results
title: Results were not found given the search criteria
details:
- A budget has not been set up for the provided branch under this account.
costCenterNotSetUp:
summary: Budget not set up for the cost center
value:
type: general-ledger/budget-search-no-results
title: Results were not found given the search criteria
details:
- A budget has not been set up for the provided cost center under this account.
combinationNotSetUp:
summary: Budget not set up for the branch or cost center combination
value:
type: general-ledger/budget-search-no-results
title: Results were not found given the search criteria
details:
- A budget has not been set up for the provided branch or cost center under this account
'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 Sep 9 2026