Lending Products
Account Services
>
API Reference
>
v1
>
Lending Products
openapi: 3.0.3
info:
title: Account Services APIs - Lending Products
version: v1
description: APIs for Account Services
contact:
name: Digital Core @ Jack Henry and Associates, inc.
url: https://www.jackhenry.com/
email: DC-Operations@jackhenry.com
servers:
- url: http://jx-r.jhacorp.com
description: Corporate Test Server
security:
- OpenIDEnterprise: []
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: Lending Products
description: V1 APIs for Lending Product Management
paths:
/a/api/acct-svcs/v1/{InstitutionUniversalId}/lending-products:
post:
operationId: LendingProductAdd
tags:
- Lending Products
summary: API to create a Lending Product record
description: Create a lending product configuration that defines the terms, rates, and rules for a loan product offering
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 Lending Product record to be created
content:
application/json:
schema:
type: object
required:
- productDescriptionInternal
- productDescriptionExternal
- productStatus
- productType
- collateralClass
- structureClass
- billingFrequency
- interestTiers
properties:
productDescriptionInternal:
type: string
description: The institution-facing lending product description
maxLength: 128
nullable: false
productDescriptionExternal:
type: string
description: The consumer-facing lending product description
maxLength: 128
nullable: false
productStatus:
type: string
description: The status of the lending product. Create accepts DRAFT or ACTIVE; update additionally permits INACTIVE, which marks the product inactive (terminal).
enum:
- DRAFT
- ACTIVE
- INACTIVE
nullable: false
productType:
type: string
description: |
The catalog classification of the product, independent of StructureClass. ProductType is the business/catalog label; StructureClass drives the mechanical terms. The two must agree.
enum:
- CREDIT_CARD
- LINE_OF_CREDIT
- HELOC
- PERSONAL_LOAN
- AUTO_LOAN
- MORTGAGE
- STUDENT_LOAN
nullable: false
collateralClass:
type: string
description: The collateral class of the lending product
enum:
- UNSECURED
- SECURED
nullable: false
structureClass:
type: string
description: The structure class of the lending product
enum:
- REVOLVING
- INSTALLMENT
nullable: false
billingFrequency:
type: string
description: The frequency of billing/repayment
enum:
- MONTHLY
nullable: false
lateFeeGracePeriodDays:
type: integer
format: int64
description: The number of days after a missed payment before a late fee is assessed. Sole late-fee timing knob.
minimum: 0
nullable: true
minCreditScore:
type: integer
format: int64
description: The minimum credit score required for loan approval
nullable: true
maxDebtToIncomeRatio:
type: string
description: The maximum debt-to-income ratio allowed for loan approval
maxLength: 128
nullable: true
regZApplicable:
type: boolean
description: Whether Regulation Z (Truth in Lending) disclosures apply to this product
default: false
nullable: true
disclosureTemplateId:
type: string
description: The identifier of the disclosure template associated with the product
maxLength: 64
nullable: true
interestTiers:
type: array
description: |
Required pricing tiers. Supply exactly one DEFAULT tier and, optionally, additional risk-based tiers.
minItems: 1
items:
type: object
description: |
A single risk-based pricing tier. A product may carry multiple tiers (e.g. A / B / C) instead of a single flat rate. Pricing is either a fixed annual rate or an indexed variable margin.
required:
- riskTier
- pricing
- accrualMethod
- dayCountConvention
properties:
riskTier:
type: string
description: The risk tier label (e.g. DEFAULT, A, B, C)
maxLength: 32
nullable: false
pricing:
description: The fixed or variable pricing definition for this tier.
nullable: false
oneOf:
- type: object
description: Fixed annual interest-rate pricing for a tier.
required:
- type
- annualRate
properties:
type:
type: string
enum:
- FIXED
nullable: false
annualRate:
type: string
description: The fixed annual interest rate in percentage points; 7.5 means 7.5%.
maxLength: 128
nullable: false
additionalProperties: false
- type: object
description: Indexed variable-rate pricing for a tier.
required:
- type
- indexName
- margin
properties:
type:
type: string
enum:
- VARIABLE
nullable: false
indexName:
type: string
description: The reference index used to calculate the variable rate.
maxLength: 32
nullable: false
margin:
type: string
description: The margin added to the reference index in percentage points; 2 means 2%.
maxLength: 128
nullable: false
additionalProperties: false
discriminator:
propertyName: type
accrualMethod:
type: string
description: The interest accrual method for this tier
enum:
- ACTUAL_365
- ACTUAL_360
nullable: false
dayCountConvention:
type: string
description: The day-count convention for this tier
enum:
- ACTUAL_365
- ACTUAL_360
- ACTUAL_366
nullable: false
additionalProperties: false
nullable: false
paymentWaterfall:
type: array
description: Optional ordered payment waterfall (how a payment allocates across fees/interest/principal).
items:
type: object
description: A single ordered payment allocation step.
required:
- stepOrder
- allocationTarget
properties:
stepOrder:
type: integer
format: int64
description: The unique, contiguous one-based order in which this allocation step is applied
minimum: 1
nullable: false
allocationTarget:
type: string
description: The target bucket a payment allocates to at this step
enum:
- FEES
- INTEREST
- PRINCIPAL
nullable: false
additionalProperties: false
nullable: true
minimumPaymentRules:
type: array
description: Optional minimum-payment rules (minimum due = greatest of all rules).
items:
description: |
A single minimum-payment rule. When a product carries multiple rules, the minimum due is the greatest of all rule outcomes.
oneOf:
- type: object
required:
- ruleType
- amount
properties:
ruleType:
type: string
enum:
- FLAT_AMOUNT
nullable: false
amount:
type: string
description: The minimum payment amount as a decimal string
maxLength: 128
nullable: false
additionalProperties: false
- type: object
required:
- ruleType
- percentage
properties:
ruleType:
type: string
enum:
- PCT_OF_BALANCE
- INTEREST_PLUS_PCT_PRINCIPAL
nullable: false
percentage:
type: string
description: The minimum payment percentage in percentage points
maxLength: 128
nullable: false
additionalProperties: false
nullable: true
delinquencyStages:
type: array
description: |
Optional delinquency progression (lifecycle actions only). Late-fee timing is owned by lateFeeGracePeriodDays, not a delinquency stage.
items:
type: object
description: A single stage of the delinquency progression.
required:
- daysPastDueThreshold
- action
properties:
daysPastDueThreshold:
type: integer
format: int64
description: The days-past-due threshold at which this stage's action is triggered
minimum: 1
nullable: false
action:
type: string
description: The action taken when this delinquency stage is reached
enum:
- FREEZE_DRAWS
- BUREAU_REPORT
- CHARGE_OFF
- OTHER
nullable: false
additionalProperties: false
nullable: true
stateAvailability:
type: array
description: Optional list of state codes the product is available in.
items:
type: string
enum:
- AL
- AK
- AZ
- AR
- CA
- CO
- CT
- DE
- FL
- GA
- HI
- ID
- IL
- IN
- IA
- KS
- KY
- LA
- ME
- MD
- MA
- MI
- MN
- MS
- MO
- MT
- NE
- NV
- NH
- NJ
- NM
- NY
- NC
- ND
- OH
- OK
- OR
- PA
- RI
- SC
- SD
- TN
- TX
- UT
- VT
- VA
- WA
- WV
- WI
- WY
- DC
nullable: true
installmentTerms:
description: Structure-specific block for INSTALLMENT products. Mutually exclusive with RevolvingTerms.
allOf:
- type: object
description: Fields specific to INSTALLMENT-structured products.
required:
- minPrincipalAmount
- maxPrincipalAmount
- amortizationType
- minTermMonths
- maxTermMonths
properties:
minPrincipalAmount:
type: string
description: The minimum principal amount for loans under this product
maxLength: 128
nullable: false
maxPrincipalAmount:
type: string
description: The maximum principal amount for loans under this product
maxLength: 128
nullable: false
amortizationType:
type: string
description: The amortization type for loan repayment
enum:
- FIXED
- INTEREST_ONLY
- BALLOON
nullable: false
minTermMonths:
type: integer
format: int64
description: The minimum term length in months
minimum: 1
nullable: false
maxTermMonths:
type: integer
format: int64
description: The maximum term length in months
minimum: 1
nullable: false
additionalProperties: false
nullable: true
revolvingTerms:
description: Structure-specific block for REVOLVING products. Mutually exclusive with InstallmentTerms.
allOf:
- type: object
description: |
Fields specific to REVOLVING-structured products. The optional draw/repayment phase fields model HELOC-style lines: a draw period (interest-only, re-drawable) followed by a repayment period (amortizing). IsEvergreen distinguishes an evergreen line (no phase transition) from a phased one. When IsEvergreen is omitted it is inferred from the phase fields: all three phase fields absent encodes an evergreen line, all three present encodes a phased line. A partial specification is rejected during validation.
required:
- minCreditLimit
- maxCreditLimit
- cycleDayOfMonth
- paymentDueDaysAfterCycleClose
properties:
minCreditLimit:
type: string
description: The minimum credit limit for lines under this product
maxLength: 128
nullable: false
maxCreditLimit:
type: string
description: The maximum credit limit for lines under this product
maxLength: 128
nullable: false
isEvergreen:
type: boolean
description: |
Whether the line is evergreen (no draw/repayment phase transition). When omitted it is inferred from the draw/repayment phase fields.
nullable: true
overLimitAllowed:
type: boolean
description: Whether balances are permitted to exceed the credit limit
nullable: true
drawPeriodMonths:
type: integer
format: int64
description: The length of the draw period in months (phased lines only)
nullable: true
repaymentPeriodMonths:
type: integer
format: int64
description: The length of the repayment period in months (phased lines only)
nullable: true
drawPhasePaymentType:
type: string
description: The payment type applied during the draw phase of a phased line
enum:
- INTEREST_ONLY
nullable: true
cycleDayOfMonth:
type: integer
format: int64
description: The monthly billing-cycle day
minimum: 1
maximum: 28
nullable: false
paymentDueDaysAfterCycleClose:
type: integer
format: int64
description: The number of days after cycle close that payment is due
minimum: 1
nullable: false
additionalProperties: false
nullable: true
additionalProperties: false
responses:
'201':
description: Success - Created
content:
application/json:
schema:
type: object
required:
- lendingProductId
properties:
lendingProductId:
type: string
format: uuid
description: The unique identifier of the created lending product
nullable: false
additionalProperties: false
'400':
description: The server could not process 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
fieldDetails:
type: array
description: An array of objects which provide additional details to specific fields in the request that caused the error.
items:
type: object
properties:
field:
type: string
description: The name or path of the field in the request that caused the error.
detail:
type: string
description: A end-user readable message describing the error related to the field.
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: Bad request
value:
type: acct-svcs/bad-request
title: Rule violation
details:
- exampleField is invalid or malformed.
fieldDetails:
- field: exampleField
detail: Provide a valid value for this field.
'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: acct-svcs/internal-server-error
title: Unexpected error
details:
- An unexpected error occurred. Please contact your service provider and/or try again later.
get:
operationId: LendingProductList
tags:
- Lending Products
summary: API to list Lending Product records
description: List the institution's current lending products, optionally filtered by status, with offset/count pagination
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: status
in: query
required: false
description: |
Optional filter restricting the list to a single lending product status. Case-insensitive; accepted values are DRAFT and ACTIVE (for example "active" and "ACTIVE" are equivalent).
example: ?status=ACTIVE
schema:
type: string
- name: offset
in: query
required: false
description: When returning a list of results, the offset determines the number of records to skip before returning the result. If the offset is not provided, the server will return the first set of records.
example: ?offset=50
schema:
type: string
default: '0'
- name: count
in: query
required: false
description: The count of records requested. The server may limit the number of records returned in a single response. If the count is not provided, the server will return a default number of records.
example: ?count=100
schema:
type: string
default: '100'
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
description: |
A page of current lending products for an institution. Pagination follows the shared account-services offset/count model: pass the returned paging.nextOffset back as the offset query parameter to fetch the next page. An empty match returns an empty list, never a 404.
required:
- lendingProducts
- paging
properties:
lendingProducts:
type: array
description: The current lending products for the institution on this page.
items:
type: object
required:
- lendingProductId
- version
- productDescriptionInternal
- productDescriptionExternal
- productStatus
- productType
- collateralClass
- structureClass
- billingFrequency
- regZApplicable
- interestTiers
- createdAt
- updatedAt
properties:
lendingProductId:
type: string
format: uuid
description: The unique identifier of the lending product
nullable: false
version:
type: integer
format: int64
description: The version number of the lending product record
nullable: false
productDescriptionInternal:
type: string
description: The institution-facing lending product description
nullable: false
productDescriptionExternal:
type: string
description: The consumer-facing lending product description
nullable: false
productStatus:
type: string
description: The status of the lending product
enum:
- DRAFT
- ACTIVE
- INACTIVE
nullable: false
productType:
type: string
description: The catalog classification of the product
enum:
- CREDIT_CARD
- LINE_OF_CREDIT
- HELOC
- PERSONAL_LOAN
- AUTO_LOAN
- MORTGAGE
- STUDENT_LOAN
nullable: false
collateralClass:
type: string
description: The collateral class of the lending product
enum:
- UNSECURED
- SECURED
nullable: false
structureClass:
type: string
description: The structure class of the lending product
enum:
- REVOLVING
- INSTALLMENT
nullable: false
billingFrequency:
type: string
description: The frequency of billing/repayment
enum:
- MONTHLY
nullable: false
lateFeeGracePeriodDays:
type: integer
format: int64
description: The number of days after a missed payment before a late fee is assessed
nullable: true
regZApplicable:
type: boolean
description: Whether Regulation Z (Truth in Lending) disclosures apply to this product
nullable: false
disclosureTemplateId:
type: string
description: The identifier of the disclosure template associated with the product
nullable: true
minCreditScore:
type: integer
format: int64
description: The minimum credit score required for loan approval
nullable: true
maxDebtToIncomeRatio:
type: string
description: The maximum debt-to-income ratio allowed for loan approval
nullable: true
effectiveDate:
type: string
format: date
description: The date on which this product version becomes effective
nullable: true
interestTiers:
type: array
description: The risk-based pricing tiers configured for the product
items:
type: object
description: |
A single risk-based pricing tier. A product may carry multiple tiers (e.g. A / B / C) instead of a single flat rate. Pricing is either a fixed annual rate or an indexed variable margin.
required:
- riskTier
- pricing
- accrualMethod
- dayCountConvention
properties:
riskTier:
type: string
description: The risk tier label (e.g. DEFAULT, A, B, C)
maxLength: 32
nullable: false
pricing:
description: The fixed or variable pricing definition for this tier.
nullable: false
oneOf:
- type: object
description: Fixed annual interest-rate pricing for a tier.
required:
- type
- annualRate
properties:
type:
type: string
enum:
- FIXED
nullable: false
annualRate:
type: string
description: The fixed annual interest rate in percentage points; 7.5 means 7.5%.
maxLength: 128
nullable: false
additionalProperties: false
- type: object
description: Indexed variable-rate pricing for a tier.
required:
- type
- indexName
- margin
properties:
type:
type: string
enum:
- VARIABLE
nullable: false
indexName:
type: string
description: The reference index used to calculate the variable rate.
maxLength: 32
nullable: false
margin:
type: string
description: The margin added to the reference index in percentage points; 2 means 2%.
maxLength: 128
nullable: false
additionalProperties: false
discriminator:
propertyName: type
accrualMethod:
type: string
description: The interest accrual method for this tier
enum:
- ACTUAL_365
- ACTUAL_360
nullable: false
dayCountConvention:
type: string
description: The day-count convention for this tier
enum:
- ACTUAL_365
- ACTUAL_360
- ACTUAL_366
nullable: false
additionalProperties: false
nullable: false
paymentWaterfall:
type: array
description: The ordered payment waterfall configured for the product
items:
type: object
description: A single ordered payment allocation step.
required:
- stepOrder
- allocationTarget
properties:
stepOrder:
type: integer
format: int64
description: The unique, contiguous one-based order in which this allocation step is applied
minimum: 1
nullable: false
allocationTarget:
type: string
description: The target bucket a payment allocates to at this step
enum:
- FEES
- INTEREST
- PRINCIPAL
nullable: false
additionalProperties: false
nullable: true
minimumPaymentRules:
type: array
description: The minimum-payment rules configured for the product
items:
description: |
A single minimum-payment rule. When a product carries multiple rules, the minimum due is the greatest of all rule outcomes.
oneOf:
- type: object
required:
- ruleType
- amount
properties:
ruleType:
type: string
enum:
- FLAT_AMOUNT
nullable: false
amount:
type: string
description: The minimum payment amount as a decimal string
maxLength: 128
nullable: false
additionalProperties: false
- type: object
required:
- ruleType
- percentage
properties:
ruleType:
type: string
enum:
- PCT_OF_BALANCE
- INTEREST_PLUS_PCT_PRINCIPAL
nullable: false
percentage:
type: string
description: The minimum payment percentage in percentage points
maxLength: 128
nullable: false
additionalProperties: false
nullable: true
delinquencyStages:
type: array
description: The delinquency progression configured for the product
items:
type: object
description: A single stage of the delinquency progression.
required:
- daysPastDueThreshold
- action
properties:
daysPastDueThreshold:
type: integer
format: int64
description: The days-past-due threshold at which this stage's action is triggered
minimum: 1
nullable: false
action:
type: string
description: The action taken when this delinquency stage is reached
enum:
- FREEZE_DRAWS
- BUREAU_REPORT
- CHARGE_OFF
- OTHER
nullable: false
additionalProperties: false
nullable: true
stateAvailability:
type: array
description: The state codes the product is available in
items:
type: string
enum:
- AL
- AK
- AZ
- AR
- CA
- CO
- CT
- DE
- FL
- GA
- HI
- ID
- IL
- IN
- IA
- KS
- KY
- LA
- ME
- MD
- MA
- MI
- MN
- MS
- MO
- MT
- NE
- NV
- NH
- NJ
- NM
- NY
- NC
- ND
- OH
- OK
- OR
- PA
- RI
- SC
- SD
- TN
- TX
- UT
- VT
- VA
- WA
- WV
- WI
- WY
- DC
nullable: true
installmentTerms:
description: Structure-specific block for INSTALLMENT products
allOf:
- type: object
description: Fields specific to INSTALLMENT-structured products.
required:
- minPrincipalAmount
- maxPrincipalAmount
- amortizationType
- minTermMonths
- maxTermMonths
properties:
minPrincipalAmount:
type: string
description: The minimum principal amount for loans under this product
maxLength: 128
nullable: false
maxPrincipalAmount:
type: string
description: The maximum principal amount for loans under this product
maxLength: 128
nullable: false
amortizationType:
type: string
description: The amortization type for loan repayment
enum:
- FIXED
- INTEREST_ONLY
- BALLOON
nullable: false
minTermMonths:
type: integer
format: int64
description: The minimum term length in months
minimum: 1
nullable: false
maxTermMonths:
type: integer
format: int64
description: The maximum term length in months
minimum: 1
nullable: false
additionalProperties: false
nullable: true
revolvingTerms:
description: Structure-specific block for REVOLVING products
allOf:
- type: object
description: |
Fields specific to REVOLVING-structured products. The optional draw/repayment phase fields model HELOC-style lines: a draw period (interest-only, re-drawable) followed by a repayment period (amortizing). IsEvergreen distinguishes an evergreen line (no phase transition) from a phased one. When IsEvergreen is omitted it is inferred from the phase fields: all three phase fields absent encodes an evergreen line, all three present encodes a phased line. A partial specification is rejected during validation.
required:
- minCreditLimit
- maxCreditLimit
- cycleDayOfMonth
- paymentDueDaysAfterCycleClose
properties:
minCreditLimit:
type: string
description: The minimum credit limit for lines under this product
maxLength: 128
nullable: false
maxCreditLimit:
type: string
description: The maximum credit limit for lines under this product
maxLength: 128
nullable: false
isEvergreen:
type: boolean
description: |
Whether the line is evergreen (no draw/repayment phase transition). When omitted it is inferred from the draw/repayment phase fields.
nullable: true
overLimitAllowed:
type: boolean
description: Whether balances are permitted to exceed the credit limit
nullable: true
drawPeriodMonths:
type: integer
format: int64
description: The length of the draw period in months (phased lines only)
nullable: true
repaymentPeriodMonths:
type: integer
format: int64
description: The length of the repayment period in months (phased lines only)
nullable: true
drawPhasePaymentType:
type: string
description: The payment type applied during the draw phase of a phased line
enum:
- INTEREST_ONLY
nullable: true
cycleDayOfMonth:
type: integer
format: int64
description: The monthly billing-cycle day
minimum: 1
maximum: 28
nullable: false
paymentDueDaysAfterCycleClose:
type: integer
format: int64
description: The number of days after cycle close that payment is due
minimum: 1
nullable: false
additionalProperties: false
nullable: true
createdAt:
type: string
format: date-time
description: The timestamp when the lending product was created
nullable: false
updatedAt:
type: string
format: date-time
description: The timestamp when the lending product was last updated
nullable: false
additionalProperties: false
nullable: false
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
additionalProperties: false
'400':
description: The server could not process 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
fieldDetails:
type: array
description: An array of objects which provide additional details to specific fields in the request that caused the error.
items:
type: object
properties:
field:
type: string
description: The name or path of the field in the request that caused the error.
detail:
type: string
description: A end-user readable message describing the error related to the field.
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: Bad request
value:
type: acct-svcs/bad-request
title: Rule violation
details:
- exampleField is invalid or malformed.
fieldDetails:
- field: exampleField
detail: Provide a valid value for this field.
'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: acct-svcs/internal-server-error
title: Unexpected error
details:
- An unexpected error occurred. Please contact your service provider and/or try again later.
/a/api/acct-svcs/v1/{InstitutionUniversalId}/enterprise/{EnterpriseUserId}/lending-products:
post:
operationId: LendingProductAddWithEnterpriseUserId
tags:
- Lending Products
summary: API to create a Lending Product record
description: Create a lending product configuration that defines the terms, rates, and rules for a loan product offering
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
- in: path
name: EnterpriseUserId
required: true
schema:
type: string
format: uuid
description: The ID of the enterprise user.
requestBody:
description: The Lending Product record to be created
content:
application/json:
schema:
type: object
required:
- productDescriptionInternal
- productDescriptionExternal
- productStatus
- productType
- collateralClass
- structureClass
- billingFrequency
- interestTiers
properties:
productDescriptionInternal:
type: string
description: The institution-facing lending product description
maxLength: 128
nullable: false
productDescriptionExternal:
type: string
description: The consumer-facing lending product description
maxLength: 128
nullable: false
productStatus:
type: string
description: The status of the lending product. Create accepts DRAFT or ACTIVE; update additionally permits INACTIVE, which marks the product inactive (terminal).
enum:
- DRAFT
- ACTIVE
- INACTIVE
nullable: false
productType:
type: string
description: |
The catalog classification of the product, independent of StructureClass. ProductType is the business/catalog label; StructureClass drives the mechanical terms. The two must agree.
enum:
- CREDIT_CARD
- LINE_OF_CREDIT
- HELOC
- PERSONAL_LOAN
- AUTO_LOAN
- MORTGAGE
- STUDENT_LOAN
nullable: false
collateralClass:
type: string
description: The collateral class of the lending product
enum:
- UNSECURED
- SECURED
nullable: false
structureClass:
type: string
description: The structure class of the lending product
enum:
- REVOLVING
- INSTALLMENT
nullable: false
billingFrequency:
type: string
description: The frequency of billing/repayment
enum:
- MONTHLY
nullable: false
lateFeeGracePeriodDays:
type: integer
format: int64
description: The number of days after a missed payment before a late fee is assessed. Sole late-fee timing knob.
minimum: 0
nullable: true
minCreditScore:
type: integer
format: int64
description: The minimum credit score required for loan approval
nullable: true
maxDebtToIncomeRatio:
type: string
description: The maximum debt-to-income ratio allowed for loan approval
maxLength: 128
nullable: true
regZApplicable:
type: boolean
description: Whether Regulation Z (Truth in Lending) disclosures apply to this product
default: false
nullable: true
disclosureTemplateId:
type: string
description: The identifier of the disclosure template associated with the product
maxLength: 64
nullable: true
interestTiers:
type: array
description: |
Required pricing tiers. Supply exactly one DEFAULT tier and, optionally, additional risk-based tiers.
minItems: 1
items:
type: object
description: |
A single risk-based pricing tier. A product may carry multiple tiers (e.g. A / B / C) instead of a single flat rate. Pricing is either a fixed annual rate or an indexed variable margin.
required:
- riskTier
- pricing
- accrualMethod
- dayCountConvention
properties:
riskTier:
type: string
description: The risk tier label (e.g. DEFAULT, A, B, C)
maxLength: 32
nullable: false
pricing:
description: The fixed or variable pricing definition for this tier.
nullable: false
oneOf:
- type: object
description: Fixed annual interest-rate pricing for a tier.
required:
- type
- annualRate
properties:
type:
type: string
enum:
- FIXED
nullable: false
annualRate:
type: string
description: The fixed annual interest rate in percentage points; 7.5 means 7.5%.
maxLength: 128
nullable: false
additionalProperties: false
- type: object
description: Indexed variable-rate pricing for a tier.
required:
- type
- indexName
- margin
properties:
type:
type: string
enum:
- VARIABLE
nullable: false
indexName:
type: string
description: The reference index used to calculate the variable rate.
maxLength: 32
nullable: false
margin:
type: string
description: The margin added to the reference index in percentage points; 2 means 2%.
maxLength: 128
nullable: false
additionalProperties: false
discriminator:
propertyName: type
accrualMethod:
type: string
description: The interest accrual method for this tier
enum:
- ACTUAL_365
- ACTUAL_360
nullable: false
dayCountConvention:
type: string
description: The day-count convention for this tier
enum:
- ACTUAL_365
- ACTUAL_360
- ACTUAL_366
nullable: false
additionalProperties: false
nullable: false
paymentWaterfall:
type: array
description: Optional ordered payment waterfall (how a payment allocates across fees/interest/principal).
items:
type: object
description: A single ordered payment allocation step.
required:
- stepOrder
- allocationTarget
properties:
stepOrder:
type: integer
format: int64
description: The unique, contiguous one-based order in which this allocation step is applied
minimum: 1
nullable: false
allocationTarget:
type: string
description: The target bucket a payment allocates to at this step
enum:
- FEES
- INTEREST
- PRINCIPAL
nullable: false
additionalProperties: false
nullable: true
minimumPaymentRules:
type: array
description: Optional minimum-payment rules (minimum due = greatest of all rules).
items:
description: |
A single minimum-payment rule. When a product carries multiple rules, the minimum due is the greatest of all rule outcomes.
oneOf:
- type: object
required:
- ruleType
- amount
properties:
ruleType:
type: string
enum:
- FLAT_AMOUNT
nullable: false
amount:
type: string
description: The minimum payment amount as a decimal string
maxLength: 128
nullable: false
additionalProperties: false
- type: object
required:
- ruleType
- percentage
properties:
ruleType:
type: string
enum:
- PCT_OF_BALANCE
- INTEREST_PLUS_PCT_PRINCIPAL
nullable: false
percentage:
type: string
description: The minimum payment percentage in percentage points
maxLength: 128
nullable: false
additionalProperties: false
nullable: true
delinquencyStages:
type: array
description: |
Optional delinquency progression (lifecycle actions only). Late-fee timing is owned by lateFeeGracePeriodDays, not a delinquency stage.
items:
type: object
description: A single stage of the delinquency progression.
required:
- daysPastDueThreshold
- action
properties:
daysPastDueThreshold:
type: integer
format: int64
description: The days-past-due threshold at which this stage's action is triggered
minimum: 1
nullable: false
action:
type: string
description: The action taken when this delinquency stage is reached
enum:
- FREEZE_DRAWS
- BUREAU_REPORT
- CHARGE_OFF
- OTHER
nullable: false
additionalProperties: false
nullable: true
stateAvailability:
type: array
description: Optional list of state codes the product is available in.
items:
type: string
enum:
- AL
- AK
- AZ
- AR
- CA
- CO
- CT
- DE
- FL
- GA
- HI
- ID
- IL
- IN
- IA
- KS
- KY
- LA
- ME
- MD
- MA
- MI
- MN
- MS
- MO
- MT
- NE
- NV
- NH
- NJ
- NM
- NY
- NC
- ND
- OH
- OK
- OR
- PA
- RI
- SC
- SD
- TN
- TX
- UT
- VT
- VA
- WA
- WV
- WI
- WY
- DC
nullable: true
installmentTerms:
description: Structure-specific block for INSTALLMENT products. Mutually exclusive with RevolvingTerms.
allOf:
- type: object
description: Fields specific to INSTALLMENT-structured products.
required:
- minPrincipalAmount
- maxPrincipalAmount
- amortizationType
- minTermMonths
- maxTermMonths
properties:
minPrincipalAmount:
type: string
description: The minimum principal amount for loans under this product
maxLength: 128
nullable: false
maxPrincipalAmount:
type: string
description: The maximum principal amount for loans under this product
maxLength: 128
nullable: false
amortizationType:
type: string
description: The amortization type for loan repayment
enum:
- FIXED
- INTEREST_ONLY
- BALLOON
nullable: false
minTermMonths:
type: integer
format: int64
description: The minimum term length in months
minimum: 1
nullable: false
maxTermMonths:
type: integer
format: int64
description: The maximum term length in months
minimum: 1
nullable: false
additionalProperties: false
nullable: true
revolvingTerms:
description: Structure-specific block for REVOLVING products. Mutually exclusive with InstallmentTerms.
allOf:
- type: object
description: |
Fields specific to REVOLVING-structured products. The optional draw/repayment phase fields model HELOC-style lines: a draw period (interest-only, re-drawable) followed by a repayment period (amortizing). IsEvergreen distinguishes an evergreen line (no phase transition) from a phased one. When IsEvergreen is omitted it is inferred from the phase fields: all three phase fields absent encodes an evergreen line, all three present encodes a phased line. A partial specification is rejected during validation.
required:
- minCreditLimit
- maxCreditLimit
- cycleDayOfMonth
- paymentDueDaysAfterCycleClose
properties:
minCreditLimit:
type: string
description: The minimum credit limit for lines under this product
maxLength: 128
nullable: false
maxCreditLimit:
type: string
description: The maximum credit limit for lines under this product
maxLength: 128
nullable: false
isEvergreen:
type: boolean
description: |
Whether the line is evergreen (no draw/repayment phase transition). When omitted it is inferred from the draw/repayment phase fields.
nullable: true
overLimitAllowed:
type: boolean
description: Whether balances are permitted to exceed the credit limit
nullable: true
drawPeriodMonths:
type: integer
format: int64
description: The length of the draw period in months (phased lines only)
nullable: true
repaymentPeriodMonths:
type: integer
format: int64
description: The length of the repayment period in months (phased lines only)
nullable: true
drawPhasePaymentType:
type: string
description: The payment type applied during the draw phase of a phased line
enum:
- INTEREST_ONLY
nullable: true
cycleDayOfMonth:
type: integer
format: int64
description: The monthly billing-cycle day
minimum: 1
maximum: 28
nullable: false
paymentDueDaysAfterCycleClose:
type: integer
format: int64
description: The number of days after cycle close that payment is due
minimum: 1
nullable: false
additionalProperties: false
nullable: true
additionalProperties: false
responses:
'201':
description: Success - Created
content:
application/json:
schema:
type: object
required:
- lendingProductId
properties:
lendingProductId:
type: string
format: uuid
description: The unique identifier of the created lending product
nullable: false
additionalProperties: false
'400':
description: The server could not process 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
fieldDetails:
type: array
description: An array of objects which provide additional details to specific fields in the request that caused the error.
items:
type: object
properties:
field:
type: string
description: The name or path of the field in the request that caused the error.
detail:
type: string
description: A end-user readable message describing the error related to the field.
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: Bad request
value:
type: acct-svcs/bad-request
title: Rule violation
details:
- exampleField is invalid or malformed.
fieldDetails:
- field: exampleField
detail: Provide a valid value for this field.
'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: acct-svcs/internal-server-error
title: Unexpected error
details:
- An unexpected error occurred. Please contact your service provider and/or try again later.
get:
operationId: LendingProductListWithEnterpriseUserId
tags:
- Lending Products
summary: API to list Lending Product records
description: List the institution's current lending products, optionally filtered by status, with offset/count pagination
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
- in: path
name: EnterpriseUserId
required: true
schema:
type: string
format: uuid
description: The ID of the enterprise user.
- name: status
in: query
required: false
description: |
Optional filter restricting the list to a single lending product status. Case-insensitive; accepted values are DRAFT and ACTIVE (for example "active" and "ACTIVE" are equivalent).
example: ?status=ACTIVE
schema:
type: string
- name: offset
in: query
required: false
description: When returning a list of results, the offset determines the number of records to skip before returning the result. If the offset is not provided, the server will return the first set of records.
example: ?offset=50
schema:
type: string
default: '0'
- name: count
in: query
required: false
description: The count of records requested. The server may limit the number of records returned in a single response. If the count is not provided, the server will return a default number of records.
example: ?count=100
schema:
type: string
default: '100'
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
description: |
A page of current lending products for an institution. Pagination follows the shared account-services offset/count model: pass the returned paging.nextOffset back as the offset query parameter to fetch the next page. An empty match returns an empty list, never a 404.
required:
- lendingProducts
- paging
properties:
lendingProducts:
type: array
description: The current lending products for the institution on this page.
items:
type: object
required:
- lendingProductId
- version
- productDescriptionInternal
- productDescriptionExternal
- productStatus
- productType
- collateralClass
- structureClass
- billingFrequency
- regZApplicable
- interestTiers
- createdAt
- updatedAt
properties:
lendingProductId:
type: string
format: uuid
description: The unique identifier of the lending product
nullable: false
version:
type: integer
format: int64
description: The version number of the lending product record
nullable: false
productDescriptionInternal:
type: string
description: The institution-facing lending product description
nullable: false
productDescriptionExternal:
type: string
description: The consumer-facing lending product description
nullable: false
productStatus:
type: string
description: The status of the lending product
enum:
- DRAFT
- ACTIVE
- INACTIVE
nullable: false
productType:
type: string
description: The catalog classification of the product
enum:
- CREDIT_CARD
- LINE_OF_CREDIT
- HELOC
- PERSONAL_LOAN
- AUTO_LOAN
- MORTGAGE
- STUDENT_LOAN
nullable: false
collateralClass:
type: string
description: The collateral class of the lending product
enum:
- UNSECURED
- SECURED
nullable: false
structureClass:
type: string
description: The structure class of the lending product
enum:
- REVOLVING
- INSTALLMENT
nullable: false
billingFrequency:
type: string
description: The frequency of billing/repayment
enum:
- MONTHLY
nullable: false
lateFeeGracePeriodDays:
type: integer
format: int64
description: The number of days after a missed payment before a late fee is assessed
nullable: true
regZApplicable:
type: boolean
description: Whether Regulation Z (Truth in Lending) disclosures apply to this product
nullable: false
disclosureTemplateId:
type: string
description: The identifier of the disclosure template associated with the product
nullable: true
minCreditScore:
type: integer
format: int64
description: The minimum credit score required for loan approval
nullable: true
maxDebtToIncomeRatio:
type: string
description: The maximum debt-to-income ratio allowed for loan approval
nullable: true
effectiveDate:
type: string
format: date
description: The date on which this product version becomes effective
nullable: true
interestTiers:
type: array
description: The risk-based pricing tiers configured for the product
items:
type: object
description: |
A single risk-based pricing tier. A product may carry multiple tiers (e.g. A / B / C) instead of a single flat rate. Pricing is either a fixed annual rate or an indexed variable margin.
required:
- riskTier
- pricing
- accrualMethod
- dayCountConvention
properties:
riskTier:
type: string
description: The risk tier label (e.g. DEFAULT, A, B, C)
maxLength: 32
nullable: false
pricing:
description: The fixed or variable pricing definition for this tier.
nullable: false
oneOf:
- type: object
description: Fixed annual interest-rate pricing for a tier.
required:
- type
- annualRate
properties:
type:
type: string
enum:
- FIXED
nullable: false
annualRate:
type: string
description: The fixed annual interest rate in percentage points; 7.5 means 7.5%.
maxLength: 128
nullable: false
additionalProperties: false
- type: object
description: Indexed variable-rate pricing for a tier.
required:
- type
- indexName
- margin
properties:
type:
type: string
enum:
- VARIABLE
nullable: false
indexName:
type: string
description: The reference index used to calculate the variable rate.
maxLength: 32
nullable: false
margin:
type: string
description: The margin added to the reference index in percentage points; 2 means 2%.
maxLength: 128
nullable: false
additionalProperties: false
discriminator:
propertyName: type
accrualMethod:
type: string
description: The interest accrual method for this tier
enum:
- ACTUAL_365
- ACTUAL_360
nullable: false
dayCountConvention:
type: string
description: The day-count convention for this tier
enum:
- ACTUAL_365
- ACTUAL_360
- ACTUAL_366
nullable: false
additionalProperties: false
nullable: false
paymentWaterfall:
type: array
description: The ordered payment waterfall configured for the product
items:
type: object
description: A single ordered payment allocation step.
required:
- stepOrder
- allocationTarget
properties:
stepOrder:
type: integer
format: int64
description: The unique, contiguous one-based order in which this allocation step is applied
minimum: 1
nullable: false
allocationTarget:
type: string
description: The target bucket a payment allocates to at this step
enum:
- FEES
- INTEREST
- PRINCIPAL
nullable: false
additionalProperties: false
nullable: true
minimumPaymentRules:
type: array
description: The minimum-payment rules configured for the product
items:
description: |
A single minimum-payment rule. When a product carries multiple rules, the minimum due is the greatest of all rule outcomes.
oneOf:
- type: object
required:
- ruleType
- amount
properties:
ruleType:
type: string
enum:
- FLAT_AMOUNT
nullable: false
amount:
type: string
description: The minimum payment amount as a decimal string
maxLength: 128
nullable: false
additionalProperties: false
- type: object
required:
- ruleType
- percentage
properties:
ruleType:
type: string
enum:
- PCT_OF_BALANCE
- INTEREST_PLUS_PCT_PRINCIPAL
nullable: false
percentage:
type: string
description: The minimum payment percentage in percentage points
maxLength: 128
nullable: false
additionalProperties: false
nullable: true
delinquencyStages:
type: array
description: The delinquency progression configured for the product
items:
type: object
description: A single stage of the delinquency progression.
required:
- daysPastDueThreshold
- action
properties:
daysPastDueThreshold:
type: integer
format: int64
description: The days-past-due threshold at which this stage's action is triggered
minimum: 1
nullable: false
action:
type: string
description: The action taken when this delinquency stage is reached
enum:
- FREEZE_DRAWS
- BUREAU_REPORT
- CHARGE_OFF
- OTHER
nullable: false
additionalProperties: false
nullable: true
stateAvailability:
type: array
description: The state codes the product is available in
items:
type: string
enum:
- AL
- AK
- AZ
- AR
- CA
- CO
- CT
- DE
- FL
- GA
- HI
- ID
- IL
- IN
- IA
- KS
- KY
- LA
- ME
- MD
- MA
- MI
- MN
- MS
- MO
- MT
- NE
- NV
- NH
- NJ
- NM
- NY
- NC
- ND
- OH
- OK
- OR
- PA
- RI
- SC
- SD
- TN
- TX
- UT
- VT
- VA
- WA
- WV
- WI
- WY
- DC
nullable: true
installmentTerms:
description: Structure-specific block for INSTALLMENT products
allOf:
- type: object
description: Fields specific to INSTALLMENT-structured products.
required:
- minPrincipalAmount
- maxPrincipalAmount
- amortizationType
- minTermMonths
- maxTermMonths
properties:
minPrincipalAmount:
type: string
description: The minimum principal amount for loans under this product
maxLength: 128
nullable: false
maxPrincipalAmount:
type: string
description: The maximum principal amount for loans under this product
maxLength: 128
nullable: false
amortizationType:
type: string
description: The amortization type for loan repayment
enum:
- FIXED
- INTEREST_ONLY
- BALLOON
nullable: false
minTermMonths:
type: integer
format: int64
description: The minimum term length in months
minimum: 1
nullable: false
maxTermMonths:
type: integer
format: int64
description: The maximum term length in months
minimum: 1
nullable: false
additionalProperties: false
nullable: true
revolvingTerms:
description: Structure-specific block for REVOLVING products
allOf:
- type: object
description: |
Fields specific to REVOLVING-structured products. The optional draw/repayment phase fields model HELOC-style lines: a draw period (interest-only, re-drawable) followed by a repayment period (amortizing). IsEvergreen distinguishes an evergreen line (no phase transition) from a phased one. When IsEvergreen is omitted it is inferred from the phase fields: all three phase fields absent encodes an evergreen line, all three present encodes a phased line. A partial specification is rejected during validation.
required:
- minCreditLimit
- maxCreditLimit
- cycleDayOfMonth
- paymentDueDaysAfterCycleClose
properties:
minCreditLimit:
type: string
description: The minimum credit limit for lines under this product
maxLength: 128
nullable: false
maxCreditLimit:
type: string
description: The maximum credit limit for lines under this product
maxLength: 128
nullable: false
isEvergreen:
type: boolean
description: |
Whether the line is evergreen (no draw/repayment phase transition). When omitted it is inferred from the draw/repayment phase fields.
nullable: true
overLimitAllowed:
type: boolean
description: Whether balances are permitted to exceed the credit limit
nullable: true
drawPeriodMonths:
type: integer
format: int64
description: The length of the draw period in months (phased lines only)
nullable: true
repaymentPeriodMonths:
type: integer
format: int64
description: The length of the repayment period in months (phased lines only)
nullable: true
drawPhasePaymentType:
type: string
description: The payment type applied during the draw phase of a phased line
enum:
- INTEREST_ONLY
nullable: true
cycleDayOfMonth:
type: integer
format: int64
description: The monthly billing-cycle day
minimum: 1
maximum: 28
nullable: false
paymentDueDaysAfterCycleClose:
type: integer
format: int64
description: The number of days after cycle close that payment is due
minimum: 1
nullable: false
additionalProperties: false
nullable: true
createdAt:
type: string
format: date-time
description: The timestamp when the lending product was created
nullable: false
updatedAt:
type: string
format: date-time
description: The timestamp when the lending product was last updated
nullable: false
additionalProperties: false
nullable: false
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
additionalProperties: false
'400':
description: The server could not process 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
fieldDetails:
type: array
description: An array of objects which provide additional details to specific fields in the request that caused the error.
items:
type: object
properties:
field:
type: string
description: The name or path of the field in the request that caused the error.
detail:
type: string
description: A end-user readable message describing the error related to the field.
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: Bad request
value:
type: acct-svcs/bad-request
title: Rule violation
details:
- exampleField is invalid or malformed.
fieldDetails:
- field: exampleField
detail: Provide a valid value for this field.
'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: acct-svcs/internal-server-error
title: Unexpected error
details:
- An unexpected error occurred. Please contact your service provider and/or try again later.
/a/api/acct-svcs/v1/{InstitutionUniversalId}/lending-products/{LendingProductId}:
get:
operationId: LendingProductGet
tags:
- Lending Products
summary: API to retrieve a Lending Product record
description: Retrieve lending product information by lending product identifier
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: LendingProductId
in: path
description: A unique identifier for a lending product
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
required:
- lendingProductId
- version
- productDescriptionInternal
- productDescriptionExternal
- productStatus
- productType
- collateralClass
- structureClass
- billingFrequency
- regZApplicable
- interestTiers
- createdAt
- updatedAt
properties:
lendingProductId:
type: string
format: uuid
description: The unique identifier of the lending product
nullable: false
version:
type: integer
format: int64
description: The version number of the lending product record
nullable: false
productDescriptionInternal:
type: string
description: The institution-facing lending product description
nullable: false
productDescriptionExternal:
type: string
description: The consumer-facing lending product description
nullable: false
productStatus:
type: string
description: The status of the lending product
enum:
- DRAFT
- ACTIVE
- INACTIVE
nullable: false
productType:
type: string
description: The catalog classification of the product
enum:
- CREDIT_CARD
- LINE_OF_CREDIT
- HELOC
- PERSONAL_LOAN
- AUTO_LOAN
- MORTGAGE
- STUDENT_LOAN
nullable: false
collateralClass:
type: string
description: The collateral class of the lending product
enum:
- UNSECURED
- SECURED
nullable: false
structureClass:
type: string
description: The structure class of the lending product
enum:
- REVOLVING
- INSTALLMENT
nullable: false
billingFrequency:
type: string
description: The frequency of billing/repayment
enum:
- MONTHLY
nullable: false
lateFeeGracePeriodDays:
type: integer
format: int64
description: The number of days after a missed payment before a late fee is assessed
nullable: true
regZApplicable:
type: boolean
description: Whether Regulation Z (Truth in Lending) disclosures apply to this product
nullable: false
disclosureTemplateId:
type: string
description: The identifier of the disclosure template associated with the product
nullable: true
minCreditScore:
type: integer
format: int64
description: The minimum credit score required for loan approval
nullable: true
maxDebtToIncomeRatio:
type: string
description: The maximum debt-to-income ratio allowed for loan approval
nullable: true
effectiveDate:
type: string
format: date
description: The date on which this product version becomes effective
nullable: true
interestTiers:
type: array
description: The risk-based pricing tiers configured for the product
items:
type: object
description: |
A single risk-based pricing tier. A product may carry multiple tiers (e.g. A / B / C) instead of a single flat rate. Pricing is either a fixed annual rate or an indexed variable margin.
required:
- riskTier
- pricing
- accrualMethod
- dayCountConvention
properties:
riskTier:
type: string
description: The risk tier label (e.g. DEFAULT, A, B, C)
maxLength: 32
nullable: false
pricing:
description: The fixed or variable pricing definition for this tier.
nullable: false
oneOf:
- type: object
description: Fixed annual interest-rate pricing for a tier.
required:
- type
- annualRate
properties:
type:
type: string
enum:
- FIXED
nullable: false
annualRate:
type: string
description: The fixed annual interest rate in percentage points; 7.5 means 7.5%.
maxLength: 128
nullable: false
additionalProperties: false
- type: object
description: Indexed variable-rate pricing for a tier.
required:
- type
- indexName
- margin
properties:
type:
type: string
enum:
- VARIABLE
nullable: false
indexName:
type: string
description: The reference index used to calculate the variable rate.
maxLength: 32
nullable: false
margin:
type: string
description: The margin added to the reference index in percentage points; 2 means 2%.
maxLength: 128
nullable: false
additionalProperties: false
discriminator:
propertyName: type
accrualMethod:
type: string
description: The interest accrual method for this tier
enum:
- ACTUAL_365
- ACTUAL_360
nullable: false
dayCountConvention:
type: string
description: The day-count convention for this tier
enum:
- ACTUAL_365
- ACTUAL_360
- ACTUAL_366
nullable: false
additionalProperties: false
nullable: false
paymentWaterfall:
type: array
description: The ordered payment waterfall configured for the product
items:
type: object
description: A single ordered payment allocation step.
required:
- stepOrder
- allocationTarget
properties:
stepOrder:
type: integer
format: int64
description: The unique, contiguous one-based order in which this allocation step is applied
minimum: 1
nullable: false
allocationTarget:
type: string
description: The target bucket a payment allocates to at this step
enum:
- FEES
- INTEREST
- PRINCIPAL
nullable: false
additionalProperties: false
nullable: true
minimumPaymentRules:
type: array
description: The minimum-payment rules configured for the product
items:
description: |
A single minimum-payment rule. When a product carries multiple rules, the minimum due is the greatest of all rule outcomes.
oneOf:
- type: object
required:
- ruleType
- amount
properties:
ruleType:
type: string
enum:
- FLAT_AMOUNT
nullable: false
amount:
type: string
description: The minimum payment amount as a decimal string
maxLength: 128
nullable: false
additionalProperties: false
- type: object
required:
- ruleType
- percentage
properties:
ruleType:
type: string
enum:
- PCT_OF_BALANCE
- INTEREST_PLUS_PCT_PRINCIPAL
nullable: false
percentage:
type: string
description: The minimum payment percentage in percentage points
maxLength: 128
nullable: false
additionalProperties: false
nullable: true
delinquencyStages:
type: array
description: The delinquency progression configured for the product
items:
type: object
description: A single stage of the delinquency progression.
required:
- daysPastDueThreshold
- action
properties:
daysPastDueThreshold:
type: integer
format: int64
description: The days-past-due threshold at which this stage's action is triggered
minimum: 1
nullable: false
action:
type: string
description: The action taken when this delinquency stage is reached
enum:
- FREEZE_DRAWS
- BUREAU_REPORT
- CHARGE_OFF
- OTHER
nullable: false
additionalProperties: false
nullable: true
stateAvailability:
type: array
description: The state codes the product is available in
items:
type: string
enum:
- AL
- AK
- AZ
- AR
- CA
- CO
- CT
- DE
- FL
- GA
- HI
- ID
- IL
- IN
- IA
- KS
- KY
- LA
- ME
- MD
- MA
- MI
- MN
- MS
- MO
- MT
- NE
- NV
- NH
- NJ
- NM
- NY
- NC
- ND
- OH
- OK
- OR
- PA
- RI
- SC
- SD
- TN
- TX
- UT
- VT
- VA
- WA
- WV
- WI
- WY
- DC
nullable: true
installmentTerms:
description: Structure-specific block for INSTALLMENT products
allOf:
- type: object
description: Fields specific to INSTALLMENT-structured products.
required:
- minPrincipalAmount
- maxPrincipalAmount
- amortizationType
- minTermMonths
- maxTermMonths
properties:
minPrincipalAmount:
type: string
description: The minimum principal amount for loans under this product
maxLength: 128
nullable: false
maxPrincipalAmount:
type: string
description: The maximum principal amount for loans under this product
maxLength: 128
nullable: false
amortizationType:
type: string
description: The amortization type for loan repayment
enum:
- FIXED
- INTEREST_ONLY
- BALLOON
nullable: false
minTermMonths:
type: integer
format: int64
description: The minimum term length in months
minimum: 1
nullable: false
maxTermMonths:
type: integer
format: int64
description: The maximum term length in months
minimum: 1
nullable: false
additionalProperties: false
nullable: true
revolvingTerms:
description: Structure-specific block for REVOLVING products
allOf:
- type: object
description: |
Fields specific to REVOLVING-structured products. The optional draw/repayment phase fields model HELOC-style lines: a draw period (interest-only, re-drawable) followed by a repayment period (amortizing). IsEvergreen distinguishes an evergreen line (no phase transition) from a phased one. When IsEvergreen is omitted it is inferred from the phase fields: all three phase fields absent encodes an evergreen line, all three present encodes a phased line. A partial specification is rejected during validation.
required:
- minCreditLimit
- maxCreditLimit
- cycleDayOfMonth
- paymentDueDaysAfterCycleClose
properties:
minCreditLimit:
type: string
description: The minimum credit limit for lines under this product
maxLength: 128
nullable: false
maxCreditLimit:
type: string
description: The maximum credit limit for lines under this product
maxLength: 128
nullable: false
isEvergreen:
type: boolean
description: |
Whether the line is evergreen (no draw/repayment phase transition). When omitted it is inferred from the draw/repayment phase fields.
nullable: true
overLimitAllowed:
type: boolean
description: Whether balances are permitted to exceed the credit limit
nullable: true
drawPeriodMonths:
type: integer
format: int64
description: The length of the draw period in months (phased lines only)
nullable: true
repaymentPeriodMonths:
type: integer
format: int64
description: The length of the repayment period in months (phased lines only)
nullable: true
drawPhasePaymentType:
type: string
description: The payment type applied during the draw phase of a phased line
enum:
- INTEREST_ONLY
nullable: true
cycleDayOfMonth:
type: integer
format: int64
description: The monthly billing-cycle day
minimum: 1
maximum: 28
nullable: false
paymentDueDaysAfterCycleClose:
type: integer
format: int64
description: The number of days after cycle close that payment is due
minimum: 1
nullable: false
additionalProperties: false
nullable: true
createdAt:
type: string
format: date-time
description: The timestamp when the lending product was created
nullable: false
updatedAt:
type: string
format: date-time
description: The timestamp when the lending product was last updated
nullable: false
additionalProperties: false
'400':
description: The server could not process 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
fieldDetails:
type: array
description: An array of objects which provide additional details to specific fields in the request that caused the error.
items:
type: object
properties:
field:
type: string
description: The name or path of the field in the request that caused the error.
detail:
type: string
description: A end-user readable message describing the error related to the field.
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: Bad request
value:
type: acct-svcs/bad-request
title: Rule violation
details:
- exampleField is invalid or malformed.
fieldDetails:
- field: exampleField
detail: Provide a valid value for this field.
'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: acct-svcs/internal-server-error
title: Unexpected error
details:
- An unexpected error occurred. Please contact your service provider and/or try again later.
put:
operationId: LendingProductUpdate
tags:
- Lending Products
summary: API to update a Lending Product record
description: Update a lending product configuration that defines the terms, rates, and rules for a loan product offering
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: LendingProductId
in: path
description: A unique identifier for a lending product
required: true
schema:
type: string
format: uuid
requestBody:
description: The Lending Product record to be updated
content:
application/json:
schema:
description: The lending product record to update
allOf:
- type: object
required:
- productDescriptionInternal
- productDescriptionExternal
- productStatus
- productType
- collateralClass
- structureClass
- billingFrequency
- interestTiers
properties:
productDescriptionInternal:
type: string
description: The institution-facing lending product description
maxLength: 128
nullable: false
productDescriptionExternal:
type: string
description: The consumer-facing lending product description
maxLength: 128
nullable: false
productStatus:
type: string
description: The status of the lending product. Create accepts DRAFT or ACTIVE; update additionally permits INACTIVE, which marks the product inactive (terminal).
enum:
- DRAFT
- ACTIVE
- INACTIVE
nullable: false
productType:
type: string
description: |
The catalog classification of the product, independent of StructureClass. ProductType is the business/catalog label; StructureClass drives the mechanical terms. The two must agree.
enum:
- CREDIT_CARD
- LINE_OF_CREDIT
- HELOC
- PERSONAL_LOAN
- AUTO_LOAN
- MORTGAGE
- STUDENT_LOAN
nullable: false
collateralClass:
type: string
description: The collateral class of the lending product
enum:
- UNSECURED
- SECURED
nullable: false
structureClass:
type: string
description: The structure class of the lending product
enum:
- REVOLVING
- INSTALLMENT
nullable: false
billingFrequency:
type: string
description: The frequency of billing/repayment
enum:
- MONTHLY
nullable: false
lateFeeGracePeriodDays:
type: integer
format: int64
description: The number of days after a missed payment before a late fee is assessed. Sole late-fee timing knob.
minimum: 0
nullable: true
minCreditScore:
type: integer
format: int64
description: The minimum credit score required for loan approval
nullable: true
maxDebtToIncomeRatio:
type: string
description: The maximum debt-to-income ratio allowed for loan approval
maxLength: 128
nullable: true
regZApplicable:
type: boolean
description: Whether Regulation Z (Truth in Lending) disclosures apply to this product
default: false
nullable: true
disclosureTemplateId:
type: string
description: The identifier of the disclosure template associated with the product
maxLength: 64
nullable: true
interestTiers:
type: array
description: |
Required pricing tiers. Supply exactly one DEFAULT tier and, optionally, additional risk-based tiers.
minItems: 1
items:
type: object
description: |
A single risk-based pricing tier. A product may carry multiple tiers (e.g. A / B / C) instead of a single flat rate. Pricing is either a fixed annual rate or an indexed variable margin.
required:
- riskTier
- pricing
- accrualMethod
- dayCountConvention
properties:
riskTier:
type: string
description: The risk tier label (e.g. DEFAULT, A, B, C)
maxLength: 32
nullable: false
pricing:
description: The fixed or variable pricing definition for this tier.
nullable: false
oneOf:
- type: object
description: Fixed annual interest-rate pricing for a tier.
required:
- type
- annualRate
properties:
type:
type: string
enum:
- FIXED
nullable: false
annualRate:
type: string
description: The fixed annual interest rate in percentage points; 7.5 means 7.5%.
maxLength: 128
nullable: false
additionalProperties: false
- type: object
description: Indexed variable-rate pricing for a tier.
required:
- type
- indexName
- margin
properties:
type:
type: string
enum:
- VARIABLE
nullable: false
indexName:
type: string
description: The reference index used to calculate the variable rate.
maxLength: 32
nullable: false
margin:
type: string
description: The margin added to the reference index in percentage points; 2 means 2%.
maxLength: 128
nullable: false
additionalProperties: false
discriminator:
propertyName: type
accrualMethod:
type: string
description: The interest accrual method for this tier
enum:
- ACTUAL_365
- ACTUAL_360
nullable: false
dayCountConvention:
type: string
description: The day-count convention for this tier
enum:
- ACTUAL_365
- ACTUAL_360
- ACTUAL_366
nullable: false
additionalProperties: false
nullable: false
paymentWaterfall:
type: array
description: Optional ordered payment waterfall (how a payment allocates across fees/interest/principal).
items:
type: object
description: A single ordered payment allocation step.
required:
- stepOrder
- allocationTarget
properties:
stepOrder:
type: integer
format: int64
description: The unique, contiguous one-based order in which this allocation step is applied
minimum: 1
nullable: false
allocationTarget:
type: string
description: The target bucket a payment allocates to at this step
enum:
- FEES
- INTEREST
- PRINCIPAL
nullable: false
additionalProperties: false
nullable: true
minimumPaymentRules:
type: array
description: Optional minimum-payment rules (minimum due = greatest of all rules).
items:
description: |
A single minimum-payment rule. When a product carries multiple rules, the minimum due is the greatest of all rule outcomes.
oneOf:
- type: object
required:
- ruleType
- amount
properties:
ruleType:
type: string
enum:
- FLAT_AMOUNT
nullable: false
amount:
type: string
description: The minimum payment amount as a decimal string
maxLength: 128
nullable: false
additionalProperties: false
- type: object
required:
- ruleType
- percentage
properties:
ruleType:
type: string
enum:
- PCT_OF_BALANCE
- INTEREST_PLUS_PCT_PRINCIPAL
nullable: false
percentage:
type: string
description: The minimum payment percentage in percentage points
maxLength: 128
nullable: false
additionalProperties: false
nullable: true
delinquencyStages:
type: array
description: |
Optional delinquency progression (lifecycle actions only). Late-fee timing is owned by lateFeeGracePeriodDays, not a delinquency stage.
items:
type: object
description: A single stage of the delinquency progression.
required:
- daysPastDueThreshold
- action
properties:
daysPastDueThreshold:
type: integer
format: int64
description: The days-past-due threshold at which this stage's action is triggered
minimum: 1
nullable: false
action:
type: string
description: The action taken when this delinquency stage is reached
enum:
- FREEZE_DRAWS
- BUREAU_REPORT
- CHARGE_OFF
- OTHER
nullable: false
additionalProperties: false
nullable: true
stateAvailability:
type: array
description: Optional list of state codes the product is available in.
items:
type: string
enum:
- AL
- AK
- AZ
- AR
- CA
- CO
- CT
- DE
- FL
- GA
- HI
- ID
- IL
- IN
- IA
- KS
- KY
- LA
- ME
- MD
- MA
- MI
- MN
- MS
- MO
- MT
- NE
- NV
- NH
- NJ
- NM
- NY
- NC
- ND
- OH
- OK
- OR
- PA
- RI
- SC
- SD
- TN
- TX
- UT
- VT
- VA
- WA
- WV
- WI
- WY
- DC
nullable: true
installmentTerms:
description: Structure-specific block for INSTALLMENT products. Mutually exclusive with RevolvingTerms.
allOf:
- type: object
description: Fields specific to INSTALLMENT-structured products.
required:
- minPrincipalAmount
- maxPrincipalAmount
- amortizationType
- minTermMonths
- maxTermMonths
properties:
minPrincipalAmount:
type: string
description: The minimum principal amount for loans under this product
maxLength: 128
nullable: false
maxPrincipalAmount:
type: string
description: The maximum principal amount for loans under this product
maxLength: 128
nullable: false
amortizationType:
type: string
description: The amortization type for loan repayment
enum:
- FIXED
- INTEREST_ONLY
- BALLOON
nullable: false
minTermMonths:
type: integer
format: int64
description: The minimum term length in months
minimum: 1
nullable: false
maxTermMonths:
type: integer
format: int64
description: The maximum term length in months
minimum: 1
nullable: false
additionalProperties: false
nullable: true
revolvingTerms:
description: Structure-specific block for REVOLVING products. Mutually exclusive with InstallmentTerms.
allOf:
- type: object
description: |
Fields specific to REVOLVING-structured products. The optional draw/repayment phase fields model HELOC-style lines: a draw period (interest-only, re-drawable) followed by a repayment period (amortizing). IsEvergreen distinguishes an evergreen line (no phase transition) from a phased one. When IsEvergreen is omitted it is inferred from the phase fields: all three phase fields absent encodes an evergreen line, all three present encodes a phased line. A partial specification is rejected during validation.
required:
- minCreditLimit
- maxCreditLimit
- cycleDayOfMonth
- paymentDueDaysAfterCycleClose
properties:
minCreditLimit:
type: string
description: The minimum credit limit for lines under this product
maxLength: 128
nullable: false
maxCreditLimit:
type: string
description: The maximum credit limit for lines under this product
maxLength: 128
nullable: false
isEvergreen:
type: boolean
description: |
Whether the line is evergreen (no draw/repayment phase transition). When omitted it is inferred from the draw/repayment phase fields.
nullable: true
overLimitAllowed:
type: boolean
description: Whether balances are permitted to exceed the credit limit
nullable: true
drawPeriodMonths:
type: integer
format: int64
description: The length of the draw period in months (phased lines only)
nullable: true
repaymentPeriodMonths:
type: integer
format: int64
description: The length of the repayment period in months (phased lines only)
nullable: true
drawPhasePaymentType:
type: string
description: The payment type applied during the draw phase of a phased line
enum:
- INTEREST_ONLY
nullable: true
cycleDayOfMonth:
type: integer
format: int64
description: The monthly billing-cycle day
minimum: 1
maximum: 28
nullable: false
paymentDueDaysAfterCycleClose:
type: integer
format: int64
description: The number of days after cycle close that payment is due
minimum: 1
nullable: false
additionalProperties: false
nullable: true
additionalProperties: false
- type: object
required:
- productStatus
responses:
'204':
description: Success - No Content
'400':
description: The server could not process 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
fieldDetails:
type: array
description: An array of objects which provide additional details to specific fields in the request that caused the error.
items:
type: object
properties:
field:
type: string
description: The name or path of the field in the request that caused the error.
detail:
type: string
description: A end-user readable message describing the error related to the field.
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: Bad request
value:
type: acct-svcs/bad-request
title: Rule violation
details:
- exampleField is invalid or malformed.
fieldDetails:
- field: exampleField
detail: Provide a valid value for this field.
'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: acct-svcs/internal-server-error
title: Unexpected error
details:
- An unexpected error occurred. Please contact your service provider and/or try again later.
delete:
operationId: LendingProductDelete
tags:
- Lending Products
summary: API to delete a Lending Product record
description: Soft-delete a lending product that is still in draft; the active version is marked deleted and prior versions are retained as history
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: LendingProductId
in: path
description: A unique identifier for a lending product
required: true
schema:
type: string
format: uuid
responses:
'204':
description: Success - No Content
'400':
description: The server could not process 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
fieldDetails:
type: array
description: An array of objects which provide additional details to specific fields in the request that caused the error.
items:
type: object
properties:
field:
type: string
description: The name or path of the field in the request that caused the error.
detail:
type: string
description: A end-user readable message describing the error related to the field.
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: Bad request
value:
type: acct-svcs/bad-request
title: Rule violation
details:
- exampleField is invalid or malformed.
fieldDetails:
- field: exampleField
detail: Provide a valid value for this field.
'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: acct-svcs/internal-server-error
title: Unexpected error
details:
- An unexpected error occurred. Please contact your service provider and/or try again later.
/a/api/acct-svcs/v1/{InstitutionUniversalId}/enterprise/{EnterpriseUserId}/lending-products/{LendingProductId}:
put:
operationId: LendingProductUpdateWithEnterpriseUserId
tags:
- Lending Products
summary: API to update a Lending Product record
description: Update a lending product configuration that defines the terms, rates, and rules for a loan product offering
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
- in: path
name: EnterpriseUserId
required: true
schema:
type: string
format: uuid
description: The ID of the enterprise user.
- name: LendingProductId
in: path
description: A unique identifier for a lending product
required: true
schema:
type: string
format: uuid
requestBody:
description: The Lending Product record to be updated
content:
application/json:
schema:
description: The lending product record to update
allOf:
- type: object
required:
- productDescriptionInternal
- productDescriptionExternal
- productStatus
- productType
- collateralClass
- structureClass
- billingFrequency
- interestTiers
properties:
productDescriptionInternal:
type: string
description: The institution-facing lending product description
maxLength: 128
nullable: false
productDescriptionExternal:
type: string
description: The consumer-facing lending product description
maxLength: 128
nullable: false
productStatus:
type: string
description: The status of the lending product. Create accepts DRAFT or ACTIVE; update additionally permits INACTIVE, which marks the product inactive (terminal).
enum:
- DRAFT
- ACTIVE
- INACTIVE
nullable: false
productType:
type: string
description: |
The catalog classification of the product, independent of StructureClass. ProductType is the business/catalog label; StructureClass drives the mechanical terms. The two must agree.
enum:
- CREDIT_CARD
- LINE_OF_CREDIT
- HELOC
- PERSONAL_LOAN
- AUTO_LOAN
- MORTGAGE
- STUDENT_LOAN
nullable: false
collateralClass:
type: string
description: The collateral class of the lending product
enum:
- UNSECURED
- SECURED
nullable: false
structureClass:
type: string
description: The structure class of the lending product
enum:
- REVOLVING
- INSTALLMENT
nullable: false
billingFrequency:
type: string
description: The frequency of billing/repayment
enum:
- MONTHLY
nullable: false
lateFeeGracePeriodDays:
type: integer
format: int64
description: The number of days after a missed payment before a late fee is assessed. Sole late-fee timing knob.
minimum: 0
nullable: true
minCreditScore:
type: integer
format: int64
description: The minimum credit score required for loan approval
nullable: true
maxDebtToIncomeRatio:
type: string
description: The maximum debt-to-income ratio allowed for loan approval
maxLength: 128
nullable: true
regZApplicable:
type: boolean
description: Whether Regulation Z (Truth in Lending) disclosures apply to this product
default: false
nullable: true
disclosureTemplateId:
type: string
description: The identifier of the disclosure template associated with the product
maxLength: 64
nullable: true
interestTiers:
type: array
description: |
Required pricing tiers. Supply exactly one DEFAULT tier and, optionally, additional risk-based tiers.
minItems: 1
items:
type: object
description: |
A single risk-based pricing tier. A product may carry multiple tiers (e.g. A / B / C) instead of a single flat rate. Pricing is either a fixed annual rate or an indexed variable margin.
required:
- riskTier
- pricing
- accrualMethod
- dayCountConvention
properties:
riskTier:
type: string
description: The risk tier label (e.g. DEFAULT, A, B, C)
maxLength: 32
nullable: false
pricing:
description: The fixed or variable pricing definition for this tier.
nullable: false
oneOf:
- type: object
description: Fixed annual interest-rate pricing for a tier.
required:
- type
- annualRate
properties:
type:
type: string
enum:
- FIXED
nullable: false
annualRate:
type: string
description: The fixed annual interest rate in percentage points; 7.5 means 7.5%.
maxLength: 128
nullable: false
additionalProperties: false
- type: object
description: Indexed variable-rate pricing for a tier.
required:
- type
- indexName
- margin
properties:
type:
type: string
enum:
- VARIABLE
nullable: false
indexName:
type: string
description: The reference index used to calculate the variable rate.
maxLength: 32
nullable: false
margin:
type: string
description: The margin added to the reference index in percentage points; 2 means 2%.
maxLength: 128
nullable: false
additionalProperties: false
discriminator:
propertyName: type
accrualMethod:
type: string
description: The interest accrual method for this tier
enum:
- ACTUAL_365
- ACTUAL_360
nullable: false
dayCountConvention:
type: string
description: The day-count convention for this tier
enum:
- ACTUAL_365
- ACTUAL_360
- ACTUAL_366
nullable: false
additionalProperties: false
nullable: false
paymentWaterfall:
type: array
description: Optional ordered payment waterfall (how a payment allocates across fees/interest/principal).
items:
type: object
description: A single ordered payment allocation step.
required:
- stepOrder
- allocationTarget
properties:
stepOrder:
type: integer
format: int64
description: The unique, contiguous one-based order in which this allocation step is applied
minimum: 1
nullable: false
allocationTarget:
type: string
description: The target bucket a payment allocates to at this step
enum:
- FEES
- INTEREST
- PRINCIPAL
nullable: false
additionalProperties: false
nullable: true
minimumPaymentRules:
type: array
description: Optional minimum-payment rules (minimum due = greatest of all rules).
items:
description: |
A single minimum-payment rule. When a product carries multiple rules, the minimum due is the greatest of all rule outcomes.
oneOf:
- type: object
required:
- ruleType
- amount
properties:
ruleType:
type: string
enum:
- FLAT_AMOUNT
nullable: false
amount:
type: string
description: The minimum payment amount as a decimal string
maxLength: 128
nullable: false
additionalProperties: false
- type: object
required:
- ruleType
- percentage
properties:
ruleType:
type: string
enum:
- PCT_OF_BALANCE
- INTEREST_PLUS_PCT_PRINCIPAL
nullable: false
percentage:
type: string
description: The minimum payment percentage in percentage points
maxLength: 128
nullable: false
additionalProperties: false
nullable: true
delinquencyStages:
type: array
description: |
Optional delinquency progression (lifecycle actions only). Late-fee timing is owned by lateFeeGracePeriodDays, not a delinquency stage.
items:
type: object
description: A single stage of the delinquency progression.
required:
- daysPastDueThreshold
- action
properties:
daysPastDueThreshold:
type: integer
format: int64
description: The days-past-due threshold at which this stage's action is triggered
minimum: 1
nullable: false
action:
type: string
description: The action taken when this delinquency stage is reached
enum:
- FREEZE_DRAWS
- BUREAU_REPORT
- CHARGE_OFF
- OTHER
nullable: false
additionalProperties: false
nullable: true
stateAvailability:
type: array
description: Optional list of state codes the product is available in.
items:
type: string
enum:
- AL
- AK
- AZ
- AR
- CA
- CO
- CT
- DE
- FL
- GA
- HI
- ID
- IL
- IN
- IA
- KS
- KY
- LA
- ME
- MD
- MA
- MI
- MN
- MS
- MO
- MT
- NE
- NV
- NH
- NJ
- NM
- NY
- NC
- ND
- OH
- OK
- OR
- PA
- RI
- SC
- SD
- TN
- TX
- UT
- VT
- VA
- WA
- WV
- WI
- WY
- DC
nullable: true
installmentTerms:
description: Structure-specific block for INSTALLMENT products. Mutually exclusive with RevolvingTerms.
allOf:
- type: object
description: Fields specific to INSTALLMENT-structured products.
required:
- minPrincipalAmount
- maxPrincipalAmount
- amortizationType
- minTermMonths
- maxTermMonths
properties:
minPrincipalAmount:
type: string
description: The minimum principal amount for loans under this product
maxLength: 128
nullable: false
maxPrincipalAmount:
type: string
description: The maximum principal amount for loans under this product
maxLength: 128
nullable: false
amortizationType:
type: string
description: The amortization type for loan repayment
enum:
- FIXED
- INTEREST_ONLY
- BALLOON
nullable: false
minTermMonths:
type: integer
format: int64
description: The minimum term length in months
minimum: 1
nullable: false
maxTermMonths:
type: integer
format: int64
description: The maximum term length in months
minimum: 1
nullable: false
additionalProperties: false
nullable: true
revolvingTerms:
description: Structure-specific block for REVOLVING products. Mutually exclusive with InstallmentTerms.
allOf:
- type: object
description: |
Fields specific to REVOLVING-structured products. The optional draw/repayment phase fields model HELOC-style lines: a draw period (interest-only, re-drawable) followed by a repayment period (amortizing). IsEvergreen distinguishes an evergreen line (no phase transition) from a phased one. When IsEvergreen is omitted it is inferred from the phase fields: all three phase fields absent encodes an evergreen line, all three present encodes a phased line. A partial specification is rejected during validation.
required:
- minCreditLimit
- maxCreditLimit
- cycleDayOfMonth
- paymentDueDaysAfterCycleClose
properties:
minCreditLimit:
type: string
description: The minimum credit limit for lines under this product
maxLength: 128
nullable: false
maxCreditLimit:
type: string
description: The maximum credit limit for lines under this product
maxLength: 128
nullable: false
isEvergreen:
type: boolean
description: |
Whether the line is evergreen (no draw/repayment phase transition). When omitted it is inferred from the draw/repayment phase fields.
nullable: true
overLimitAllowed:
type: boolean
description: Whether balances are permitted to exceed the credit limit
nullable: true
drawPeriodMonths:
type: integer
format: int64
description: The length of the draw period in months (phased lines only)
nullable: true
repaymentPeriodMonths:
type: integer
format: int64
description: The length of the repayment period in months (phased lines only)
nullable: true
drawPhasePaymentType:
type: string
description: The payment type applied during the draw phase of a phased line
enum:
- INTEREST_ONLY
nullable: true
cycleDayOfMonth:
type: integer
format: int64
description: The monthly billing-cycle day
minimum: 1
maximum: 28
nullable: false
paymentDueDaysAfterCycleClose:
type: integer
format: int64
description: The number of days after cycle close that payment is due
minimum: 1
nullable: false
additionalProperties: false
nullable: true
additionalProperties: false
- type: object
required:
- productStatus
responses:
'204':
description: Success - No Content
'400':
description: The server could not process 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
fieldDetails:
type: array
description: An array of objects which provide additional details to specific fields in the request that caused the error.
items:
type: object
properties:
field:
type: string
description: The name or path of the field in the request that caused the error.
detail:
type: string
description: A end-user readable message describing the error related to the field.
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: Bad request
value:
type: acct-svcs/bad-request
title: Rule violation
details:
- exampleField is invalid or malformed.
fieldDetails:
- field: exampleField
detail: Provide a valid value for this field.
'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: acct-svcs/internal-server-error
title: Unexpected error
details:
- An unexpected error occurred. Please contact your service provider and/or try again later.
delete:
operationId: LendingProductDeleteWithEnterpriseUserId
tags:
- Lending Products
summary: API to delete a Lending Product record
description: Soft-delete a lending product that is still in draft; the active version is marked deleted and prior versions are retained as history
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
- in: path
name: EnterpriseUserId
required: true
schema:
type: string
format: uuid
description: The ID of the enterprise user.
- name: LendingProductId
in: path
description: A unique identifier for a lending product
required: true
schema:
type: string
format: uuid
responses:
'204':
description: Success - No Content
'400':
description: The server could not process 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
fieldDetails:
type: array
description: An array of objects which provide additional details to specific fields in the request that caused the error.
items:
type: object
properties:
field:
type: string
description: The name or path of the field in the request that caused the error.
detail:
type: string
description: A end-user readable message describing the error related to the field.
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: Bad request
value:
type: acct-svcs/bad-request
title: Rule violation
details:
- exampleField is invalid or malformed.
fieldDetails:
- field: exampleField
detail: Provide a valid value for this field.
'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: acct-svcs/internal-server-error
title: Unexpected error
details:
- An unexpected error occurred. Please contact your service provider and/or try again later.
get:
operationId: LendingProductGetWithEnterpriseUserId
tags:
- Lending Products
summary: API to retrieve a Lending Product record
description: Retrieve lending product information by lending product identifier
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
- in: path
name: EnterpriseUserId
required: true
schema:
type: string
format: uuid
description: The ID of the enterprise user.
- name: LendingProductId
in: path
description: A unique identifier for a lending product
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
required:
- lendingProductId
- version
- productDescriptionInternal
- productDescriptionExternal
- productStatus
- productType
- collateralClass
- structureClass
- billingFrequency
- regZApplicable
- interestTiers
- createdAt
- updatedAt
properties:
lendingProductId:
type: string
format: uuid
description: The unique identifier of the lending product
nullable: false
version:
type: integer
format: int64
description: The version number of the lending product record
nullable: false
productDescriptionInternal:
type: string
description: The institution-facing lending product description
nullable: false
productDescriptionExternal:
type: string
description: The consumer-facing lending product description
nullable: false
productStatus:
type: string
description: The status of the lending product
enum:
- DRAFT
- ACTIVE
- INACTIVE
nullable: false
productType:
type: string
description: The catalog classification of the product
enum:
- CREDIT_CARD
- LINE_OF_CREDIT
- HELOC
- PERSONAL_LOAN
- AUTO_LOAN
- MORTGAGE
- STUDENT_LOAN
nullable: false
collateralClass:
type: string
description: The collateral class of the lending product
enum:
- UNSECURED
- SECURED
nullable: false
structureClass:
type: string
description: The structure class of the lending product
enum:
- REVOLVING
- INSTALLMENT
nullable: false
billingFrequency:
type: string
description: The frequency of billing/repayment
enum:
- MONTHLY
nullable: false
lateFeeGracePeriodDays:
type: integer
format: int64
description: The number of days after a missed payment before a late fee is assessed
nullable: true
regZApplicable:
type: boolean
description: Whether Regulation Z (Truth in Lending) disclosures apply to this product
nullable: false
disclosureTemplateId:
type: string
description: The identifier of the disclosure template associated with the product
nullable: true
minCreditScore:
type: integer
format: int64
description: The minimum credit score required for loan approval
nullable: true
maxDebtToIncomeRatio:
type: string
description: The maximum debt-to-income ratio allowed for loan approval
nullable: true
effectiveDate:
type: string
format: date
description: The date on which this product version becomes effective
nullable: true
interestTiers:
type: array
description: The risk-based pricing tiers configured for the product
items:
type: object
description: |
A single risk-based pricing tier. A product may carry multiple tiers (e.g. A / B / C) instead of a single flat rate. Pricing is either a fixed annual rate or an indexed variable margin.
required:
- riskTier
- pricing
- accrualMethod
- dayCountConvention
properties:
riskTier:
type: string
description: The risk tier label (e.g. DEFAULT, A, B, C)
maxLength: 32
nullable: false
pricing:
description: The fixed or variable pricing definition for this tier.
nullable: false
oneOf:
- type: object
description: Fixed annual interest-rate pricing for a tier.
required:
- type
- annualRate
properties:
type:
type: string
enum:
- FIXED
nullable: false
annualRate:
type: string
description: The fixed annual interest rate in percentage points; 7.5 means 7.5%.
maxLength: 128
nullable: false
additionalProperties: false
- type: object
description: Indexed variable-rate pricing for a tier.
required:
- type
- indexName
- margin
properties:
type:
type: string
enum:
- VARIABLE
nullable: false
indexName:
type: string
description: The reference index used to calculate the variable rate.
maxLength: 32
nullable: false
margin:
type: string
description: The margin added to the reference index in percentage points; 2 means 2%.
maxLength: 128
nullable: false
additionalProperties: false
discriminator:
propertyName: type
accrualMethod:
type: string
description: The interest accrual method for this tier
enum:
- ACTUAL_365
- ACTUAL_360
nullable: false
dayCountConvention:
type: string
description: The day-count convention for this tier
enum:
- ACTUAL_365
- ACTUAL_360
- ACTUAL_366
nullable: false
additionalProperties: false
nullable: false
paymentWaterfall:
type: array
description: The ordered payment waterfall configured for the product
items:
type: object
description: A single ordered payment allocation step.
required:
- stepOrder
- allocationTarget
properties:
stepOrder:
type: integer
format: int64
description: The unique, contiguous one-based order in which this allocation step is applied
minimum: 1
nullable: false
allocationTarget:
type: string
description: The target bucket a payment allocates to at this step
enum:
- FEES
- INTEREST
- PRINCIPAL
nullable: false
additionalProperties: false
nullable: true
minimumPaymentRules:
type: array
description: The minimum-payment rules configured for the product
items:
description: |
A single minimum-payment rule. When a product carries multiple rules, the minimum due is the greatest of all rule outcomes.
oneOf:
- type: object
required:
- ruleType
- amount
properties:
ruleType:
type: string
enum:
- FLAT_AMOUNT
nullable: false
amount:
type: string
description: The minimum payment amount as a decimal string
maxLength: 128
nullable: false
additionalProperties: false
- type: object
required:
- ruleType
- percentage
properties:
ruleType:
type: string
enum:
- PCT_OF_BALANCE
- INTEREST_PLUS_PCT_PRINCIPAL
nullable: false
percentage:
type: string
description: The minimum payment percentage in percentage points
maxLength: 128
nullable: false
additionalProperties: false
nullable: true
delinquencyStages:
type: array
description: The delinquency progression configured for the product
items:
type: object
description: A single stage of the delinquency progression.
required:
- daysPastDueThreshold
- action
properties:
daysPastDueThreshold:
type: integer
format: int64
description: The days-past-due threshold at which this stage's action is triggered
minimum: 1
nullable: false
action:
type: string
description: The action taken when this delinquency stage is reached
enum:
- FREEZE_DRAWS
- BUREAU_REPORT
- CHARGE_OFF
- OTHER
nullable: false
additionalProperties: false
nullable: true
stateAvailability:
type: array
description: The state codes the product is available in
items:
type: string
enum:
- AL
- AK
- AZ
- AR
- CA
- CO
- CT
- DE
- FL
- GA
- HI
- ID
- IL
- IN
- IA
- KS
- KY
- LA
- ME
- MD
- MA
- MI
- MN
- MS
- MO
- MT
- NE
- NV
- NH
- NJ
- NM
- NY
- NC
- ND
- OH
- OK
- OR
- PA
- RI
- SC
- SD
- TN
- TX
- UT
- VT
- VA
- WA
- WV
- WI
- WY
- DC
nullable: true
installmentTerms:
description: Structure-specific block for INSTALLMENT products
allOf:
- type: object
description: Fields specific to INSTALLMENT-structured products.
required:
- minPrincipalAmount
- maxPrincipalAmount
- amortizationType
- minTermMonths
- maxTermMonths
properties:
minPrincipalAmount:
type: string
description: The minimum principal amount for loans under this product
maxLength: 128
nullable: false
maxPrincipalAmount:
type: string
description: The maximum principal amount for loans under this product
maxLength: 128
nullable: false
amortizationType:
type: string
description: The amortization type for loan repayment
enum:
- FIXED
- INTEREST_ONLY
- BALLOON
nullable: false
minTermMonths:
type: integer
format: int64
description: The minimum term length in months
minimum: 1
nullable: false
maxTermMonths:
type: integer
format: int64
description: The maximum term length in months
minimum: 1
nullable: false
additionalProperties: false
nullable: true
revolvingTerms:
description: Structure-specific block for REVOLVING products
allOf:
- type: object
description: |
Fields specific to REVOLVING-structured products. The optional draw/repayment phase fields model HELOC-style lines: a draw period (interest-only, re-drawable) followed by a repayment period (amortizing). IsEvergreen distinguishes an evergreen line (no phase transition) from a phased one. When IsEvergreen is omitted it is inferred from the phase fields: all three phase fields absent encodes an evergreen line, all three present encodes a phased line. A partial specification is rejected during validation.
required:
- minCreditLimit
- maxCreditLimit
- cycleDayOfMonth
- paymentDueDaysAfterCycleClose
properties:
minCreditLimit:
type: string
description: The minimum credit limit for lines under this product
maxLength: 128
nullable: false
maxCreditLimit:
type: string
description: The maximum credit limit for lines under this product
maxLength: 128
nullable: false
isEvergreen:
type: boolean
description: |
Whether the line is evergreen (no draw/repayment phase transition). When omitted it is inferred from the draw/repayment phase fields.
nullable: true
overLimitAllowed:
type: boolean
description: Whether balances are permitted to exceed the credit limit
nullable: true
drawPeriodMonths:
type: integer
format: int64
description: The length of the draw period in months (phased lines only)
nullable: true
repaymentPeriodMonths:
type: integer
format: int64
description: The length of the repayment period in months (phased lines only)
nullable: true
drawPhasePaymentType:
type: string
description: The payment type applied during the draw phase of a phased line
enum:
- INTEREST_ONLY
nullable: true
cycleDayOfMonth:
type: integer
format: int64
description: The monthly billing-cycle day
minimum: 1
maximum: 28
nullable: false
paymentDueDaysAfterCycleClose:
type: integer
format: int64
description: The number of days after cycle close that payment is due
minimum: 1
nullable: false
additionalProperties: false
nullable: true
createdAt:
type: string
format: date-time
description: The timestamp when the lending product was created
nullable: false
updatedAt:
type: string
format: date-time
description: The timestamp when the lending product was last updated
nullable: false
additionalProperties: false
'400':
description: The server could not process 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
fieldDetails:
type: array
description: An array of objects which provide additional details to specific fields in the request that caused the error.
items:
type: object
properties:
field:
type: string
description: The name or path of the field in the request that caused the error.
detail:
type: string
description: A end-user readable message describing the error related to the field.
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: Bad request
value:
type: acct-svcs/bad-request
title: Rule violation
details:
- exampleField is invalid or malformed.
fieldDetails:
- field: exampleField
detail: Provide a valid value for this field.
'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: acct-svcs/internal-server-error
title: Unexpected error
details:
- An unexpected error occurred. Please contact your service provider and/or try again later.
Did this page help you?
Why was this page helpful?
Why wasn't this page helpful?
Thank you for your feedback!
Last updated Wed Jul 29 2026