Loans
Symitar in Platform
>
Loans
openapi: 3.0.1
info:
title: Symitar in Platform API - Loans
version: v1
description: API to interact with Symitar in Platform
contact:
name: Picard
url: https://www.jackhenry.com/
email: DC-Picard-Product@jackhenry.com
servers:
- url: https://platform.banno.com
description: Production Endpoint
components:
securitySchemes:
OpenIDEnterprise:
type: openIdConnect
openIdConnectUrl: https://login.jackhenry.com/.well-known/openid-configuration
description: "Jack Henry Enterprise Authentication. \n\n ### Supported Flows\n \n #### 1. Authorization Code Flow\n * **Use Case:** Person-at-keyboard logins (FI or JH Employees).\n * **Security:** Supports/recommends PKCE (S256). Supports Pushed Authorization Requests (PAR), and DPoP token binding.\n * **Client Auth:** Supports/recommends `client_assertion` (Private Key JWT), also supports `client_secret`.\n \n #### 2. Client Credentials Flow\n * **Use Case:** System services and machine-to-machine integrations.\n * **Security:** Supports DPoP token binding.\n * **Client Auth:** **Requires** `client_assertion` (Private Key JWT).\n"
OpenIDConsumer:
type: openIdConnect
openIdConnectUrl: https://digital.garden-fi.com/.well-known/openid-configuration
description: "Jack Henry Consumer Authentication. \n\n> **WARNING: FI-SPECIFIC ROUTING**\n> The authorization server is currently pointing to our **Sandbox Environment** (`digital.garden-fi.com`) so you can test this documentation. In production code, this domain **must** be replaced with the specific Financial Institution's domain.\n> Example: Replace `{API-ENVIRONMENT}` in `https://{API-ENVIRONMENT}/.well-known/openid-configuration` with `digital.garden-fi.com` for the Garden financial institution.\n\n### Supported Flows\n\n#### 1. Authorization Code Flow\n* **Use Case:** Person-at-keyboard logins (customer or member of FI).\n* **Security:** Supports/recommends PKCE (S256). Supports Pushed Authorization Requests (PAR), and DPoP token binding.\n* **Client Auth:** Supports `client_secret`.\n"
tags:
- name: Loans
description: Loan account operations
paths:
/a/api/picard/v1/{InstitutionUniversalId}/loan-payoff-quotes:
post:
operationId: calculateLoanPayoffQuote
tags:
- Loans
summary: Calculate Loan Payoff Quote
description: |
Calculates a loan payoff quote for a specific date using a two-step PowerOn
execution (`GETPRELOADDATA` followed by `PERFORMLOANPAYOFFCALC`).
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
description: Request body for getting a loan payoff quote
required:
- accountNumber
- loanId
- payoffDate
properties:
accountNumber:
type: string
description: 10-digit account number
example: 0000379758
loanId:
type: string
description: Loan ID
example: '0002'
payoffDate:
type: string
description: Payoff date (YYYY-MM-DD)
example: '2026-04-22'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
description: The loan payoff quote response calculated by PowerOn
properties:
totalPayoffAmount:
type: string
payoffDate:
type: string
loanEligible:
type: boolean
maxDays:
type: integer
disclaimerText:
type: array
items:
type: string
summaryText:
type: array
items:
type: string
accountDetails:
type: object
description: Account details returned within the loan payoff quote
properties:
principalBalance:
type: string
interestType:
type: string
interestRate:
type: string
interestDue:
type: string
dueDate:
type: string
amountPastDueByPayoffDate:
type: string
pastDuePayoffCount:
type: string
lateChargeDue:
type: string
'400':
description: Bad request
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
/a/api/picard/v1/{InstitutionUniversalId}/loan-principal-payments:
post:
operationId: postLoanPrincipalPayment
tags:
- Loans
summary: Post Principal-Only Loan Payment
description: |
Posts a **principal-only** loan payment funded from a member share on the
**same account**. Internally issues a SymXchange `transfer` operation
with `PrincipalAmount` set equal to `TransferAmount` and
`LoanPaymentType=ADDITIONAL`, so the full amount bypasses the
interest/escrow/late-fee waterfall and is applied to principal.
Both same-member (`donorAccountNumber == recipientAccountNumber`) and
cross-member transfers are supported.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
description: |
Request body for posting a principal-only loan payment funded from a
member share. The donor share and recipient loan may belong to the
same account (intra-member) or different accounts (cross-member).
required:
- donorAccountNumber
- shareId
- recipientAccountNumber
- loanId
- amount
properties:
donorAccountNumber:
type: string
description: 10-digit member account number that owns the funding share.
example: 0000379758
shareId:
type: string
description: Share ID on the donor account that funds the payment.
example: '0001'
recipientAccountNumber:
type: string
description: |
10-digit member account number that owns the destination loan.
May equal `donorAccountNumber` for same-member transfers.
example: 0000379758
loanId:
type: string
description: Loan ID on the recipient account that receives the principal-only payment.
example: '0015'
amount:
type: string
description: Decimal amount to move from the share to the loan's principal (must be greater than zero).
example: '100.00'
comment:
type: string
maxLength: 132
description: Optional transaction comment recorded on the Symitar posting.
example: principal-only payment
effectiveDate:
type: string
format: date
description: Optional posting effective date (YYYY-MM-DD). Defaults to the current posting date in Symitar.
example: '2026-04-22'
forcePost:
type: boolean
description: |
When `true`, sends `ForcePostRequested=true` on the SOAP transfer
so Symitar bypasses its warning system (e.g. past-due loan,
insufficient share funds). Defaults to `false`.
example: false
responses:
'200':
description: Payment posted — returns the Symitar confirmation number.
content:
application/json:
schema:
type: object
description: Response from a successful principal-only loan payment posting.
properties:
confirmationNumber:
type: string
description: Symitar confirmation number for the posted transfer.
example: CONF-123
donorAccountNumber:
type: string
example: 0000379758
shareId:
type: string
example: '0001'
recipientAccountNumber:
type: string
example: 0000379758
loanId:
type: string
example: '0015'
amount:
type: string
example: '100.00'
effectiveDate:
type: string
format: date
example: '2026-04-22'
'400':
description: Bad request — validation error or SymXchange rejection.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
/a/api/picard/v1/{InstitutionUniversalId}/loan-recasts-verify:
post:
operationId: verifyLoanRecast
tags:
- Loans
summary: Verify Loan Recast
description: |
**Dry-run (no write to Symitar).** Accepts a list of additive `transactions`
and returns the full set of transactions that *would* be posted — including a
system-computed interest adjustment — if `POST /loan-recasts` were called with the
same payload.
Both `verify` and `post` run identical eligibility and interest-delta calculations.
The only difference is that `post` also commits the result to Symitar via `loanAddon` SOAP calls.
**Interest calculation** uses the loan's current `interestRate` and `interestType` read live
from Symitar — neither is supplied by the caller:
| `interestType` (from loan) | Basis | Day-count denominator |
|---|---|---|
| `0` | Daily 365 | 365 — standard daily simple interest |
| `2` | Daily 365.25 | 365.25 — averages leap-year days over a 4-year cycle |
| `5` | Actual/360 | 360 — money-market convention, slightly higher effective rate |
The interest delta is computed per transaction using `balance = transaction.amount` and `days = effectiveDate − startDate`.
> **Note:** Because `verify` reads live Symitar state, loan data may change between a
> `verify` call and the subsequent `post` call. Clients should treat the verify response
> as advisory, not a guarantee.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
description: |
Request body for both `POST /loan-recasts-verify` and `POST /loan-recasts`.
`transactions` are additive only — each entry is a new transaction to add
to the loan history from `startDate` forward.
required:
- accountNumber
- loanId
- shareId
- startDate
- transactions
properties:
accountNumber:
type: string
description: 10-digit account number.
example: 0000379758
loanId:
type: string
description: Loan ID within the account.
example: '0001'
shareId:
type: string
description: Share ID to fund the recast transactions from. The share must belong to the same account.
example: '0000'
startDate:
type: string
format: date
description: Recast start date (YYYY-MM-DD). All `transactions` must have `effectiveDate >= startDate`.
example: '2026-01-01'
comment:
type: string
description: Optional recast reason recorded on the Symitar posting.
example: Correct missed payment
transactions:
type: array
minItems: 1
description: Ordered list of additive transactions to apply from `startDate`.
items:
type: object
required:
- transactionType
- effectiveDate
- amount
properties:
transactionType:
type: string
description: |
Symitar transaction type code for the new transaction (e.g. `payment`, `addon`, `fee`).
`fee` entries are posted through the fee-reversal backend path; other
transaction types are posted via a share-to-loan transfer.
example: payment
effectiveDate:
type: string
format: date
description: Effective date of this transaction (YYYY-MM-DD). Must be >= `startDate`.
example: '2026-01-06'
amount:
type: string
description: |
Transaction amount as a decimal string. Positive for credits (e.g. payments),
negative for debits (e.g. add-ons or reversals). Must be non-zero.
example: '100.00'
description:
type: string
description: Optional human-readable description recorded on the Symitar transaction.
example: Missed January payment
responses:
'200':
description: Would-post payload — no changes written to Symitar.
content:
application/json:
schema:
type: object
description: |
Would-post payload returned by `POST /loan-recasts-verify` (and embedded in the
`POST /loan-recasts` response). Describes all transactions that would be written to
Symitar, including the system-computed interest adjustment.
properties:
accountNumber:
type: string
example: 0000379758
loanId:
type: string
example: '0001'
startDate:
type: string
format: date
example: '2026-01-01'
transactions:
type: array
description: |
Full ordered list of transactions to post — caller-supplied diffs followed by
a system-generated `interest-adjustment` entry (if the delta is non-zero).
items:
type: object
description: A single transaction that is (or would be) posted to Symitar.
properties:
source:
type: string
description: '`diff` for caller-supplied transactions; `system` for the computed interest adjustment.'
enum:
- diff
- system
example: diff
transactionType:
type: string
example: payment
effectiveDate:
type: string
format: date
example: '2026-01-06'
amount:
type: string
example: '100.00'
description:
type: string
example: Missed January payment
interestAdjustment:
type: object
description: Computed interest delta across all `transactions`.
properties:
interestType:
type: integer
enum:
- 0
- 2
- 5
example: 0
annualRate:
type: string
description: Loan annual interest rate used for calculation (decimal string, 6dp).
example: '6.250000'
dayCountBasis:
type: string
description: Day-count convention selected by `interestType`.
enum:
- DAILY_365
- DAILY_365_25
- ACTUAL_360
example: DAILY_365
totalInterestDelta:
type: string
description: Net interest adjustment derived from all diffs (positive = interest owed, negative = credit).
example: '0.09'
totalDiffAmount:
type: string
description: Sum of all caller-supplied diff amounts.
example: '100.00'
totalPostingAmount:
type: string
description: Sum of `totalDiffAmount` + `interestAdjustment.totalInterestDelta`.
example: '100.09'
'400':
description: Validation error — missing/invalid field or ineligible loan.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
/a/api/picard/v1/{InstitutionUniversalId}/loan-recasts-eligible:
post:
operationId: searchLoanRecastsEligible
tags:
- Loans
summary: Search Loan Recast Eligible Loans
description: |
Returns loans for the provided account that are eligible for loan recast.
A loan is eligible only when all criteria are met:
- `loanCode` is `0`, `1`, or `2`.
- no `LoanSchedule` records exist.
- `BilledFeeUnpaid` is zero.
- all `BilledFeeBucketAmount` entries (1-8) are zero.
- `interestType` is `0`, `2`, or `5`.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
description: |
Request body for `POST /loans-search`. Supply the 10-digit account
number to retrieve all loan accounts for that member.
required:
- accountNumber
properties:
accountNumber:
type: string
description: |
10-digit account number. Use the `accountNumber` field from an `AccountInfo` response.
example: 0000379758
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: array
items:
type: object
description: Loan account information with relationships
required:
- account
- accountStatus
- relationships
- notes
- accountWarnings
- loanWarnings
properties:
account:
type: object
description: Account identifier
required:
- accountId
properties:
accountId:
type: string
description: Account ID (alphanumeric, 1-34 characters)
minLength: 1
maxLength: 34
pattern: ^[a-zA-Z0-9]+$
example: S1234560001
restrict:
type: integer
description: Symitar account restriction code
currentRelationshipCode:
type: integer
description: Symitar CURRENTRELATIONSHIPCODE value for the parent account
nullable: true
currentRelationshipName:
type: string
description: Institution-configured description for `currentRelationshipCode`, resolved from the Symitar Relationship Code Description parameter. Omitted when the code has no configured description or the parameter lookup is unavailable.
example: Premier Member
negativeBalanceDate:
type: string
description: Symitar NEGATIVEBALANCEDATE value from the share record. SymXchange only defines this field on shares, so it is omitted for loans.
nullable: true
accountNumber:
type: string
description: 10-digit account number
nullable: true
example: 0000379758
loanId:
type: string
description: Loan ID within the account
nullable: true
example: '0001'
balance:
type: string
description: Loan balance (outstanding principal)
example: '15000.00'
accountStatus:
type: string
description: Loan status (Active/Closed)
enum:
- Active
- Closed
relationships:
type: array
description: Loan relationships (borrowers, co-signers, etc.)
items:
type: object
description: Account relationship identity/role information returned from SymX name records. Postal address data is not included.
required:
- memberName
- relationshipCode
properties:
memberName:
type: string
description: Name of the related member
memberRecordNumber:
type: string
description: 17-digit member record number, usable as the {memberRecordNumber} path parameter in GET /members/{memberRecordNumber}
nullable: true
example: '20190510000000000'
relationshipCode:
type: string
description: Type of relationship
enum:
- Primary
- Joint
- Mailing Only
- Alternate mailing
- Beneficiary
- Custodian
- Trustee
- Responsible Individual
- Power of attorney
- Authorized Signer
- Dividend payee
- Maturity Payee
- Coverdell ESA Beneficiary
- Next of Kin
- Representative Payee
- Grantor
- Guarantor
- Loan Co-Maker
- Loan Co-Applicant
- Trustor
- Co-Borrower
- Co-Signer
- CTR Owner Address/ID
- CTR Transactor
- DBA
- Attorney Trust
- Safe Deposit Box Co-Lessee
- Safe Deposit Box Deputy
- CTR Common Carrier
- Property Address
- Successor in Interest
- Information Only
nullable: true
accountWarnings:
type: array
description: |
Warning codes set at the **account** level in Symitar. Shared
across all shares and loans on the account. Only populated slots
(code ≠ 0) are returned, enriched with description and privilege
flags (Inquiry (IQ), File Maintenance (FM), Transaction (TR))
from the institution's Parameter configuration. Always
present; empty array if there are no active warnings.
items:
type: object
description: |
A single warning code entry enriched with the institution's parameter
definitions. Symitar warning codes are integers 0–999 configured per
institution. The restriction fields indicate what actions are affected
when this warning is present on an account, share, or loan.
required:
- entryId
- code
- description
- inquiryRestriction
- maintenanceRestriction
- tellerRestriction
properties:
entryId:
type: integer
description: Positional slot index of this warning (0–19).
minimum: 0
maximum: 19
example: 0
code:
type: integer
description: The warning code number as configured in Symitar (0–999).
minimum: 0
maximum: 999
example: 5
description:
type: string
description: |
Human-readable label for the warning code, resolved from the
institution's Parameter configuration (e.g. "Deceased Member",
"Legal Hold – Do Not Release Funds"). Empty if the code could
not be resolved.
example: Deceased Member
inquiryRestriction:
type: integer
description: |
Controls whether a user can **inquire** on (view) the account,
share, or loan carrying this warning. Institution-specific;
typically `0` = no restriction, `1` = restricted.
example: 0
maintenanceRestriction:
type: integer
description: |
Controls whether a user can perform **file maintenance** (modify)
on the account, share, or loan carrying this warning.
Typically `0` = no restriction, `1` = restricted.
example: 1
tellerRestriction:
type: integer
description: |
Controls whether this warning is displayed in the **Teller
Transaction** work area and whether teller transactions are
restricted. Typically `0` = no restriction, `1` = displayed /
restricted.
example: 1
expirationDate:
type: string
description: |
Expiration date for this warning slot (YYYY-MM-DD). Omitted if
the warning does not expire.
nullable: true
example: '2027-12-31'
loanWarnings:
type: array
description: |
Warning codes set at the **loan** level in Symitar. Scoped to
this individual loan record. Same structure as `accountWarnings`.
Always present; empty array if there are no active warnings.
items:
type: object
description: |
A single warning code entry enriched with the institution's parameter
definitions. Symitar warning codes are integers 0–999 configured per
institution. The restriction fields indicate what actions are affected
when this warning is present on an account, share, or loan.
required:
- entryId
- code
- description
- inquiryRestriction
- maintenanceRestriction
- tellerRestriction
properties:
entryId:
type: integer
description: Positional slot index of this warning (0–19).
minimum: 0
maximum: 19
example: 0
code:
type: integer
description: The warning code number as configured in Symitar (0–999).
minimum: 0
maximum: 999
example: 5
description:
type: string
description: |
Human-readable label for the warning code, resolved from the
institution's Parameter configuration (e.g. "Deceased Member",
"Legal Hold – Do Not Release Funds"). Empty if the code could
not be resolved.
example: Deceased Member
inquiryRestriction:
type: integer
description: |
Controls whether a user can **inquire** on (view) the account,
share, or loan carrying this warning. Institution-specific;
typically `0` = no restriction, `1` = restricted.
example: 0
maintenanceRestriction:
type: integer
description: |
Controls whether a user can perform **file maintenance** (modify)
on the account, share, or loan carrying this warning.
Typically `0` = no restriction, `1` = restricted.
example: 1
tellerRestriction:
type: integer
description: |
Controls whether this warning is displayed in the **Teller
Transaction** work area and whether teller transactions are
restricted. Typically `0` = no restriction, `1` = displayed /
restricted.
example: 1
expirationDate:
type: string
description: |
Expiration date for this warning slot (YYYY-MM-DD). Omitted if
the warning does not expire.
nullable: true
example: '2027-12-31'
notes:
type: array
description: Loan-level notes/comments. Always present; empty array if there are no notes.
items:
type: object
description: A note/comment record on an account, share, or loan.
properties:
locator:
type: integer
description: Unique identifier for the note within its parent
example: 1
code:
type: integer
description: Note category/type code
example: 10
enterDate:
type: string
description: Date the note was entered (YYYY-MM-DD)
example: '2026-01-15'
enterTime:
type: integer
description: Time the note was entered (HHMM format)
example: 1430
expirationDate:
type: string
description: When the note expires
id:
type: string
description: Identifier of the user/process that created the note
example: TELLER01
idType:
type: integer
description: Type of the id field
recordChangeDate:
type: string
description: Last modification date
text:
type: string
description: |
Note text. Multiple text lines from Symitar are aggregated into a single space-separated string.
example: Member called about account balance. Verified identity via security questions.
user:
allOf:
- type: object
description: |
Symitar system user (teller, employee, etc.). Retrieved via the
SymXchange `getUserSelectFields` operation on the User CRUD service.
This is **not** a credit union member — see the `Member` schema for
member information.
When embedded in a `Note`, only `number` is guaranteed to be present.
The remaining fields are populated when the user record is available
in the cache.
required:
- number
properties:
number:
type: integer
description: Symitar user number
example: 42
name:
type: string
description: Full name of the user
example: Jean-Luc Picard
email:
type: string
description: Email address
example: jlpicard@example.com
phone:
type: string
description: Phone number
example: 555-0100
extension:
type: string
description: Phone extension
jobTitle:
type: string
description: Job title
example: Branch Manager
jobFunction:
type: string
description: Job function
deptName:
type: string
description: Department name
example: Operations
location:
type: string
description: Location
managersName:
type: string
description: Manager's name
assignedBranch:
type: integer
description: Assigned branch number
example: 1
type:
type: integer
description: User type code
onlineAccess:
type: integer
description: Online access flag
activeMode:
type: integer
description: Active mode flag
lastLogonDate:
type: string
description: Last logon date (YYYY-MM-DD)
example: '2026-03-09'
lastLogonTime:
type: integer
description: Last logon time (HHMM format)
example: 1430
secondaryId:
type: string
description: Secondary identifier
directory:
type: string
description: Directory path
recordChangeDate:
type: string
description: Record change date (YYYY-MM-DD)
securityCodes:
type: array
description: List of enabled security codes for the user.
items:
type: object
properties:
code:
type: integer
description: Security code identifier
description:
type: string
description: Human-readable security code description
description: |
The user who created the note. Always contains at least `number`. When the user record is available in the cache the remaining fields (name, email, etc.) are populated.
voidFlag:
type: integer
description: Whether the note has been voided (0 = active, 1 = voided)
example: 0
voidedBy:
type: integer
description: User ID who voided the note
example: 0
description:
type: string
description: Loan description (e.g. "AUTO LOAN")
nullable: true
example: AUTO LOAN
loanType:
type: string
description: Loan type code
nullable: true
loanCode:
type: string
description: Raw loan code value from SymXchange
nullable: true
loanCodeName:
type: string
description: Human-readable loan account type name (e.g. "Closed end", "Open end", "Line of credit", "Credit card", "Lease")
nullable: true
branch:
type: string
description: Branch number for the loan
nullable: true
openDate:
type: string
description: Loan open date (YYYY-MM-DD)
nullable: true
example: '2022-03-15'
closeDate:
type: string
description: Loan close date (YYYY-MM-DD)
nullable: true
nickname:
type: string
description: Loan nickname
nullable: true
activityDate:
type: string
description: Last activity date (YYYY-MM-DD)
nullable: true
recordChangeDate:
type: string
description: Record change date (YYYY-MM-DD)
nullable: true
lastFmDate:
type: string
description: Last FM date (YYYY-MM-DD)
nullable: true
lastTranDate:
type: string
description: Last transaction date (YYYY-MM-DD)
nullable: true
createdAtBranch:
type: string
description: Branch where the loan was created
nullable: true
createdByUser:
type: string
description: User who created the loan
nullable: true
originalBalance:
type: string
description: Original loan balance
nullable: true
creditLimit:
type: string
description: Credit limit (for LOC/credit card loans)
nullable: true
availableCredit:
type: string
description: Available credit remaining
nullable: true
payoffAmount:
type: string
description: Current payoff amount
nullable: true
pastDueAmount:
type: string
description: Past due amount
nullable: true
chargeOffAmount:
type: string
description: Charge-off amount
nullable: true
chargeOffType:
type: string
description: Charge-off type code
nullable: true
chargeOffDate:
type: string
description: Charge-off date (YYYY-MM-DD)
nullable: true
interestRate:
type: string
description: Current interest rate
nullable: true
example: '5.250'
apr:
type: string
description: Annual percentage rate
nullable: true
interestYtd:
type: string
description: Interest paid year-to-date
nullable: true
interestLastYear:
type: string
description: Interest paid last year
nullable: true
intUnpaidBilled:
type: string
description: Unpaid billed interest
nullable: true
payment:
type: string
description: Regular payment amount
nullable: true
example: '350.00'
paymentDue:
type: string
description: Current payment due amount
nullable: true
minimumPayment:
type: string
description: Minimum payment amount
nullable: true
dueDate:
type: string
description: Next due date (YYYY-MM-DD)
nullable: true
example: '2026-04-01'
lastPaymentDate:
type: string
description: Last payment date (YYYY-MM-DD)
nullable: true
lastPaymentAmount:
type: string
description: Last payment amount
nullable: true
maturityDate:
type: string
description: Loan maturity date (YYYY-MM-DD)
nullable: true
example: '2028-03-15'
'400':
description: Bad request — missing or invalid accountNumber
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
/a/api/picard/v1/{InstitutionUniversalId}/loan-recasts:
post:
operationId: postLoanRecast
tags:
- Loans
summary: Post Loan Recast
description: |
Runs the same eligibility and interest-delta computation as `POST /loan-recasts-verify`
and then commits the result to Symitar via direct SymXchange SOAP operations.
The response includes the full computed breakdown **plus** a confirmation reference.
Posting behavior by transaction type:
- `fee` entries use fee-reversal backend logic.
- all other caller entries use `loanAddon`.
- system `interest-adjustment` is posted last, after all caller entries.
`transactions` are **additive only** — each entry represents a new transaction to be
added to the loan history from `startDate` forward. Revise or delete operations are not
supported; the UI manages pre-submission state.
No session state is stored server-side. The UI is responsible for retaining the
`transactions` array between the verify and post calls.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
description: |
Request body for both `POST /loan-recasts-verify` and `POST /loan-recasts`.
`transactions` are additive only — each entry is a new transaction to add
to the loan history from `startDate` forward.
required:
- accountNumber
- loanId
- shareId
- startDate
- transactions
properties:
accountNumber:
type: string
description: 10-digit account number.
example: 0000379758
loanId:
type: string
description: Loan ID within the account.
example: '0001'
shareId:
type: string
description: Share ID to fund the recast transactions from. The share must belong to the same account.
example: '0000'
startDate:
type: string
format: date
description: Recast start date (YYYY-MM-DD). All `transactions` must have `effectiveDate >= startDate`.
example: '2026-01-01'
comment:
type: string
description: Optional recast reason recorded on the Symitar posting.
example: Correct missed payment
transactions:
type: array
minItems: 1
description: Ordered list of additive transactions to apply from `startDate`.
items:
type: object
required:
- transactionType
- effectiveDate
- amount
properties:
transactionType:
type: string
description: |
Symitar transaction type code for the new transaction (e.g. `payment`, `addon`, `fee`).
`fee` entries are posted through the fee-reversal backend path; other
transaction types are posted via a share-to-loan transfer.
example: payment
effectiveDate:
type: string
format: date
description: Effective date of this transaction (YYYY-MM-DD). Must be >= `startDate`.
example: '2026-01-06'
amount:
type: string
description: |
Transaction amount as a decimal string. Positive for credits (e.g. payments),
negative for debits (e.g. add-ons or reversals). Must be non-zero.
example: '100.00'
description:
type: string
description: Optional human-readable description recorded on the Symitar transaction.
example: Missed January payment
responses:
'200':
description: Recast posted — returns the full computed breakdown and Symitar confirmation.
content:
application/json:
schema:
type: object
description: |
Response from `POST /loan-recasts`. Contains the full would-post breakdown plus the
Symitar confirmation number from the last `loanAddon` SOAP call.
properties:
result:
type: object
description: |
Would-post payload returned by `POST /loan-recasts-verify` (and embedded in the
`POST /loan-recasts` response). Describes all transactions that would be written to
Symitar, including the system-computed interest adjustment.
properties:
accountNumber:
type: string
example: 0000379758
loanId:
type: string
example: '0001'
startDate:
type: string
format: date
example: '2026-01-01'
transactions:
type: array
description: |
Full ordered list of transactions to post — caller-supplied diffs followed by
a system-generated `interest-adjustment` entry (if the delta is non-zero).
items:
type: object
description: A single transaction that is (or would be) posted to Symitar.
properties:
source:
type: string
description: '`diff` for caller-supplied transactions; `system` for the computed interest adjustment.'
enum:
- diff
- system
example: diff
transactionType:
type: string
example: payment
effectiveDate:
type: string
format: date
example: '2026-01-06'
amount:
type: string
example: '100.00'
description:
type: string
example: Missed January payment
interestAdjustment:
type: object
description: Computed interest delta across all `transactions`.
properties:
interestType:
type: integer
enum:
- 0
- 2
- 5
example: 0
annualRate:
type: string
description: Loan annual interest rate used for calculation (decimal string, 6dp).
example: '6.250000'
dayCountBasis:
type: string
description: Day-count convention selected by `interestType`.
enum:
- DAILY_365
- DAILY_365_25
- ACTUAL_360
example: DAILY_365
totalInterestDelta:
type: string
description: Net interest adjustment derived from all diffs (positive = interest owed, negative = credit).
example: '0.09'
totalDiffAmount:
type: string
description: Sum of all caller-supplied diff amounts.
example: '100.00'
totalPostingAmount:
type: string
description: Sum of `totalDiffAmount` + `interestAdjustment.totalInterestDelta`.
example: '100.09'
confirmationRef:
type: string
description: |
Symitar confirmation number from the final `loanAddon` SOAP call.
May be empty if the posting succeeded but Symitar did not return a confirmation number.
example: CONF-RECAST-1
'400':
description: Validation error — missing/invalid field, ineligible loan, or Symitar rejection.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
/a/api/picard/v1/{InstitutionUniversalId}/loan-refinances:
post:
operationId: refinanceLoan
tags:
- Loans
summary: Post Loan Refinance
description: |
Posts a **Loan Refinance (LR)** transaction which pays off the existing
loan balance (plus any accrued interest and late charges) and optionally
disburses new funds to the member. Internally issues a SymXchange
`loanAddon` operation.
The refinance automatically recalculates loan balances, resets specific
interest and payment fields, and updates transaction dates within the
system record. Late charges and interest due on the existing balance are
added to the new principal balance, along with any additional funds
disbursed.
**Optional loan updates** (InterestRate, DueDate, PaymentAmount) may be
specified and take effect after the monetary transaction posts.
Set `additionalAmount` to "0.00" to perform a **rate-only refinance**
without disbursing extra funds.
**Restrictions**: Refinancing is not allowed for:
- Credit card loans
- SymChoice combination loans
- 360-day interest loans
- Participation loans
- Loans with multiple repayment programs per loan
- Loans with escrow or escrow analysis records
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
description: |
Request body for posting a Loan Refinance (LR) transaction. A refinance
pays off the existing loan balance (plus accrued interest and late charges)
and optionally disburses new funds. The system automatically recalculates
balances, resets interest and payment fields, and updates transaction dates.
Set `additionalAmount` to "0.00" to perform a rate-only refinance without
advancing extra funds.
The optional `interestRate`, `dueDate`, and `paymentAmount` fields may be
specified to adjust loan terms; changes take effect after the monetary
transaction posts.
required:
- accountNumber
- loanId
- additionalAmount
properties:
accountNumber:
type: string
description: 10-digit member account number that owns the loan.
example: 0000379758
loanId:
type: string
description: Loan ID to refinance.
example: '0015'
additionalAmount:
type: string
description: |
Decimal amount of new funds to disburse as part of the refinance
(must be >= 0.00). Set to "0.00" for a rate-only refinance.
example: '5000.00'
interestRate:
type: string
description: |
Optional new interest rate (as a decimal percentage, e.g., "7.500").
If provided, the system logs the rate change: "%% Rate change from
9.5000% to 7.000%". Takes effect after the transaction posts.
example: '7.500'
dueDate:
type: string
format: date
description: |
Optional new first due date (YYYY-MM-DD). Takes effect after the
transaction posts.
example: '2026-07-01'
paymentAmount:
type: string
description: |
Optional new regular payment amount (as a decimal). Takes effect after
the transaction posts.
example: '500.00'
comment:
type: string
maxLength: 132
description: Optional transaction comment recorded on the Symitar posting.
example: refinance for lower rate
effectiveDate:
type: string
format: date
description: Optional posting effective date (YYYY-MM-DD). Defaults to the current posting date in Symitar.
example: '2026-06-01'
forcePost:
type: boolean
description: |
When `true`, sends `ForcePostRequested=true` on the SOAP loanAddon
so Symitar bypasses its warning system. Defaults to `false`.
example: false
responses:
'200':
description: Refinance posted — returns the Symitar confirmation number.
content:
application/json:
schema:
type: object
description: Response from a successful loan refinance posting.
properties:
confirmationNumber:
type: string
description: Symitar confirmation number for the posted refinance transaction.
example: CONF-456
accountNumber:
type: string
description: 10-digit member account number.
example: 0000379758
loanId:
type: string
description: Loan ID that was refinanced.
example: '0015'
additionalAmount:
type: string
description: Additional funds disbursed in the refinance.
example: '5000.00'
interestRate:
type: string
description: New interest rate if adjusted (echoed from request).
example: '7.500'
dueDate:
type: string
format: date
description: New due date if adjusted (echoed from request).
example: '2026-07-01'
paymentAmount:
type: string
description: New payment amount if adjusted (echoed from request).
example: '500.00'
effectiveDate:
type: string
format: date
description: Effective date of the refinance posting.
example: '2026-06-01'
'400':
description: Bad request — validation error, refinance restriction, or SymXchange rejection.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
/a/api/picard/v1/{InstitutionUniversalId}/loans-search:
post:
operationId: searchLoans
tags:
- Loans
summary: Search Loans
description: |
Retrieve all loan accounts for a given 10-digit account number.
Returns loan details including balance, interest rate, payment
information, late charges, and related metadata.
The response mirrors the shape of `accounts-search` (which returns
shares) but uses loan-specific fields such as `interestRate`,
`paymentDue`, `creditLimit`, `maturityDate`, etc.
Each `LoanInfo` in the response includes **warning codes**
(`accountWarnings`, `loanWarnings`) enriched with human-readable
descriptions and privilege flags — Inquiry (IQ), File Maintenance (FM), Transaction (TR) (IQ Priv / FM Priv / TR Priv) from
the institution's Parameter configuration. See the `WarningDetail`
schema for details.
parameters:
- name: InstitutionUniversalId
in: path
description: A unique identifier to establish the identity of an Institution/Environment/Brand combination
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
description: |
Request body for `POST /loans-search`. Supply the 10-digit account
number to retrieve all loan accounts for that member.
required:
- accountNumber
properties:
accountNumber:
type: string
description: |
10-digit account number. Use the `accountNumber` field from an `AccountInfo` response.
example: 0000379758
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: array
items:
type: object
description: Loan account information with relationships
required:
- account
- accountStatus
- relationships
- notes
- accountWarnings
- loanWarnings
properties:
account:
type: object
description: Account identifier
required:
- accountId
properties:
accountId:
type: string
description: Account ID (alphanumeric, 1-34 characters)
minLength: 1
maxLength: 34
pattern: ^[a-zA-Z0-9]+$
example: S1234560001
restrict:
type: integer
description: Symitar account restriction code
currentRelationshipCode:
type: integer
description: Symitar CURRENTRELATIONSHIPCODE value for the parent account
nullable: true
currentRelationshipName:
type: string
description: Institution-configured description for `currentRelationshipCode`, resolved from the Symitar Relationship Code Description parameter. Omitted when the code has no configured description or the parameter lookup is unavailable.
example: Premier Member
negativeBalanceDate:
type: string
description: Symitar NEGATIVEBALANCEDATE value from the share record. SymXchange only defines this field on shares, so it is omitted for loans.
nullable: true
accountNumber:
type: string
description: 10-digit account number
nullable: true
example: 0000379758
loanId:
type: string
description: Loan ID within the account
nullable: true
example: '0001'
balance:
type: string
description: Loan balance (outstanding principal)
example: '15000.00'
accountStatus:
type: string
description: Loan status (Active/Closed)
enum:
- Active
- Closed
relationships:
type: array
description: Loan relationships (borrowers, co-signers, etc.)
items:
type: object
description: Account relationship identity/role information returned from SymX name records. Postal address data is not included.
required:
- memberName
- relationshipCode
properties:
memberName:
type: string
description: Name of the related member
memberRecordNumber:
type: string
description: 17-digit member record number, usable as the {memberRecordNumber} path parameter in GET /members/{memberRecordNumber}
nullable: true
example: '20190510000000000'
relationshipCode:
type: string
description: Type of relationship
enum:
- Primary
- Joint
- Mailing Only
- Alternate mailing
- Beneficiary
- Custodian
- Trustee
- Responsible Individual
- Power of attorney
- Authorized Signer
- Dividend payee
- Maturity Payee
- Coverdell ESA Beneficiary
- Next of Kin
- Representative Payee
- Grantor
- Guarantor
- Loan Co-Maker
- Loan Co-Applicant
- Trustor
- Co-Borrower
- Co-Signer
- CTR Owner Address/ID
- CTR Transactor
- DBA
- Attorney Trust
- Safe Deposit Box Co-Lessee
- Safe Deposit Box Deputy
- CTR Common Carrier
- Property Address
- Successor in Interest
- Information Only
nullable: true
accountWarnings:
type: array
description: |
Warning codes set at the **account** level in Symitar. Shared
across all shares and loans on the account. Only populated slots
(code ≠ 0) are returned, enriched with description and privilege
flags (Inquiry (IQ), File Maintenance (FM), Transaction (TR))
from the institution's Parameter configuration. Always
present; empty array if there are no active warnings.
items:
type: object
description: |
A single warning code entry enriched with the institution's parameter
definitions. Symitar warning codes are integers 0–999 configured per
institution. The restriction fields indicate what actions are affected
when this warning is present on an account, share, or loan.
required:
- entryId
- code
- description
- inquiryRestriction
- maintenanceRestriction
- tellerRestriction
properties:
entryId:
type: integer
description: Positional slot index of this warning (0–19).
minimum: 0
maximum: 19
example: 0
code:
type: integer
description: The warning code number as configured in Symitar (0–999).
minimum: 0
maximum: 999
example: 5
description:
type: string
description: |
Human-readable label for the warning code, resolved from the
institution's Parameter configuration (e.g. "Deceased Member",
"Legal Hold – Do Not Release Funds"). Empty if the code could
not be resolved.
example: Deceased Member
inquiryRestriction:
type: integer
description: |
Controls whether a user can **inquire** on (view) the account,
share, or loan carrying this warning. Institution-specific;
typically `0` = no restriction, `1` = restricted.
example: 0
maintenanceRestriction:
type: integer
description: |
Controls whether a user can perform **file maintenance** (modify)
on the account, share, or loan carrying this warning.
Typically `0` = no restriction, `1` = restricted.
example: 1
tellerRestriction:
type: integer
description: |
Controls whether this warning is displayed in the **Teller
Transaction** work area and whether teller transactions are
restricted. Typically `0` = no restriction, `1` = displayed /
restricted.
example: 1
expirationDate:
type: string
description: |
Expiration date for this warning slot (YYYY-MM-DD). Omitted if
the warning does not expire.
nullable: true
example: '2027-12-31'
loanWarnings:
type: array
description: |
Warning codes set at the **loan** level in Symitar. Scoped to
this individual loan record. Same structure as `accountWarnings`.
Always present; empty array if there are no active warnings.
items:
type: object
description: |
A single warning code entry enriched with the institution's parameter
definitions. Symitar warning codes are integers 0–999 configured per
institution. The restriction fields indicate what actions are affected
when this warning is present on an account, share, or loan.
required:
- entryId
- code
- description
- inquiryRestriction
- maintenanceRestriction
- tellerRestriction
properties:
entryId:
type: integer
description: Positional slot index of this warning (0–19).
minimum: 0
maximum: 19
example: 0
code:
type: integer
description: The warning code number as configured in Symitar (0–999).
minimum: 0
maximum: 999
example: 5
description:
type: string
description: |
Human-readable label for the warning code, resolved from the
institution's Parameter configuration (e.g. "Deceased Member",
"Legal Hold – Do Not Release Funds"). Empty if the code could
not be resolved.
example: Deceased Member
inquiryRestriction:
type: integer
description: |
Controls whether a user can **inquire** on (view) the account,
share, or loan carrying this warning. Institution-specific;
typically `0` = no restriction, `1` = restricted.
example: 0
maintenanceRestriction:
type: integer
description: |
Controls whether a user can perform **file maintenance** (modify)
on the account, share, or loan carrying this warning.
Typically `0` = no restriction, `1` = restricted.
example: 1
tellerRestriction:
type: integer
description: |
Controls whether this warning is displayed in the **Teller
Transaction** work area and whether teller transactions are
restricted. Typically `0` = no restriction, `1` = displayed /
restricted.
example: 1
expirationDate:
type: string
description: |
Expiration date for this warning slot (YYYY-MM-DD). Omitted if
the warning does not expire.
nullable: true
example: '2027-12-31'
notes:
type: array
description: Loan-level notes/comments. Always present; empty array if there are no notes.
items:
type: object
description: A note/comment record on an account, share, or loan.
properties:
locator:
type: integer
description: Unique identifier for the note within its parent
example: 1
code:
type: integer
description: Note category/type code
example: 10
enterDate:
type: string
description: Date the note was entered (YYYY-MM-DD)
example: '2026-01-15'
enterTime:
type: integer
description: Time the note was entered (HHMM format)
example: 1430
expirationDate:
type: string
description: When the note expires
id:
type: string
description: Identifier of the user/process that created the note
example: TELLER01
idType:
type: integer
description: Type of the id field
recordChangeDate:
type: string
description: Last modification date
text:
type: string
description: |
Note text. Multiple text lines from Symitar are aggregated into a single space-separated string.
example: Member called about account balance. Verified identity via security questions.
user:
allOf:
- type: object
description: |
Symitar system user (teller, employee, etc.). Retrieved via the
SymXchange `getUserSelectFields` operation on the User CRUD service.
This is **not** a credit union member — see the `Member` schema for
member information.
When embedded in a `Note`, only `number` is guaranteed to be present.
The remaining fields are populated when the user record is available
in the cache.
required:
- number
properties:
number:
type: integer
description: Symitar user number
example: 42
name:
type: string
description: Full name of the user
example: Jean-Luc Picard
email:
type: string
description: Email address
example: jlpicard@example.com
phone:
type: string
description: Phone number
example: 555-0100
extension:
type: string
description: Phone extension
jobTitle:
type: string
description: Job title
example: Branch Manager
jobFunction:
type: string
description: Job function
deptName:
type: string
description: Department name
example: Operations
location:
type: string
description: Location
managersName:
type: string
description: Manager's name
assignedBranch:
type: integer
description: Assigned branch number
example: 1
type:
type: integer
description: User type code
onlineAccess:
type: integer
description: Online access flag
activeMode:
type: integer
description: Active mode flag
lastLogonDate:
type: string
description: Last logon date (YYYY-MM-DD)
example: '2026-03-09'
lastLogonTime:
type: integer
description: Last logon time (HHMM format)
example: 1430
secondaryId:
type: string
description: Secondary identifier
directory:
type: string
description: Directory path
recordChangeDate:
type: string
description: Record change date (YYYY-MM-DD)
securityCodes:
type: array
description: List of enabled security codes for the user.
items:
type: object
properties:
code:
type: integer
description: Security code identifier
description:
type: string
description: Human-readable security code description
description: |
The user who created the note. Always contains at least `number`. When the user record is available in the cache the remaining fields (name, email, etc.) are populated.
voidFlag:
type: integer
description: Whether the note has been voided (0 = active, 1 = voided)
example: 0
voidedBy:
type: integer
description: User ID who voided the note
example: 0
description:
type: string
description: Loan description (e.g. "AUTO LOAN")
nullable: true
example: AUTO LOAN
loanType:
type: string
description: Loan type code
nullable: true
loanCode:
type: string
description: Raw loan code value from SymXchange
nullable: true
loanCodeName:
type: string
description: Human-readable loan account type name (e.g. "Closed end", "Open end", "Line of credit", "Credit card", "Lease")
nullable: true
branch:
type: string
description: Branch number for the loan
nullable: true
openDate:
type: string
description: Loan open date (YYYY-MM-DD)
nullable: true
example: '2022-03-15'
closeDate:
type: string
description: Loan close date (YYYY-MM-DD)
nullable: true
nickname:
type: string
description: Loan nickname
nullable: true
activityDate:
type: string
description: Last activity date (YYYY-MM-DD)
nullable: true
recordChangeDate:
type: string
description: Record change date (YYYY-MM-DD)
nullable: true
lastFmDate:
type: string
description: Last FM date (YYYY-MM-DD)
nullable: true
lastTranDate:
type: string
description: Last transaction date (YYYY-MM-DD)
nullable: true
createdAtBranch:
type: string
description: Branch where the loan was created
nullable: true
createdByUser:
type: string
description: User who created the loan
nullable: true
originalBalance:
type: string
description: Original loan balance
nullable: true
creditLimit:
type: string
description: Credit limit (for LOC/credit card loans)
nullable: true
availableCredit:
type: string
description: Available credit remaining
nullable: true
payoffAmount:
type: string
description: Current payoff amount
nullable: true
pastDueAmount:
type: string
description: Past due amount
nullable: true
chargeOffAmount:
type: string
description: Charge-off amount
nullable: true
chargeOffType:
type: string
description: Charge-off type code
nullable: true
chargeOffDate:
type: string
description: Charge-off date (YYYY-MM-DD)
nullable: true
interestRate:
type: string
description: Current interest rate
nullable: true
example: '5.250'
apr:
type: string
description: Annual percentage rate
nullable: true
interestYtd:
type: string
description: Interest paid year-to-date
nullable: true
interestLastYear:
type: string
description: Interest paid last year
nullable: true
intUnpaidBilled:
type: string
description: Unpaid billed interest
nullable: true
payment:
type: string
description: Regular payment amount
nullable: true
example: '350.00'
paymentDue:
type: string
description: Current payment due amount
nullable: true
minimumPayment:
type: string
description: Minimum payment amount
nullable: true
dueDate:
type: string
description: Next due date (YYYY-MM-DD)
nullable: true
example: '2026-04-01'
lastPaymentDate:
type: string
description: Last payment date (YYYY-MM-DD)
nullable: true
lastPaymentAmount:
type: string
description: Last payment amount
nullable: true
maturityDate:
type: string
description: Loan maturity date (YYYY-MM-DD)
nullable: true
example: '2028-03-15'
'400':
description: Bad request — missing or invalid accountNumber
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the clients identity is known to the server.
'500':
description: An unexpected internal server error occurred while processing the request.
content:
application/problem+json:
schema:
type: object
required:
- type
- title
- details
properties:
type:
description: A string path which uniquely classifies the domain of the error.
type: string
nullable: false
example: jackhenry/operation-failed
title:
description: A end-user readable string title of the error type.
nullable: false
type: string
details:
description: An array of end-user readable strings which provide additional details for the error message.
type: array
nullable: false
items:
type: string
data:
type: object
description: |
Additional data that could be useful to a developer or for handing the error programmatically. The schema for the data in this object is intentionally left undefined.
nullable: true
examples:
internalServerError:
summary: Internal server error
value:
type: general/internal-server-error
title: Internal server error
details:
- Unexpected internal server error
Did this page help you?
Why was this page helpful?
Why wasn't this page helpful?
Thank you for your feedback!
Last updated Tue Sep 15 2026