File-based check processing and bulk settlement
The Pismo platform includes an extensible, AWS‑based bulk processing framework that ingests and executes large‑scale, file‑based operational workflows using a plugin‑driven architecture. This infrastructure supports high‑volume batch operations such as bulk check posting and bulk check releases, and also powers the bulk‑settlements API, which allows multiple settlement operations to be executed simultaneously by specifying a division code and settlement date.
Check posting
The enhanced bulk processing platform supports these functions.
- Uploading files containing check posting and fund release instructions through a bulk upload endpoint.
- Running the same operations available in these endpoints.
- Processing fund releases in bulk using the Request bulk settlement endpoint, which settles all pending operations for a given division and settlement date.
File format
Bulk operations are processed from a UTF‑8 encoded file consisting of:
- a header line
- n-lines of NDJSON entries, each representing a single operation matching the schema for the chosen operation type
Input format
Header example
{
"bulk_id": "UniqueID",
"org_id": "tn-0000-0001",
"header_version": "1.0.0",
"operation_type": "CHECK_POST",
"n_entries": 10000
}
Header field definitions
| Field | Type | Required | Description |
|---|---|---|---|
bulk_id | string | yes | Unique ID for the batch. Alphanumeric + hyphens only, maximum 50 characters. Must be unique per org_id |
org_id | string | yes | Organization ID |
header_version | string | yes | Must be 1.0.0 |
operation_type | string | yes | CHECK_POST, CHECK_RELEASE. Identifies the type of check operation you perform |
n_entries | number | yes | Number of NDJSON entries that follow |
Each row is a JSON payload matching the schema for the specified operation_type.
Sample check posting bulk request
{"operation_type":"CHECK_POST","n_entries":1,"bulk_id":"16dfc4c4-c7eb-4002-baca-05098b15166e","header_version":"1.0.0","org_id":"TN-16dfc4c4-c7eb-4002-ANTEC-05098b15166e"}
{
"external_account_id": "6b6e32c3-6f67-453e-8221-bafa8993e113",
"check_id": "c462b2f3-55cc-42b4-ae9a-7614df3e8e72",
"check_amount": { "value": 2000, "currency": "USD" },
"description": "Check posting",
"settlement_type": "BEGINNING",
"settlements": [
{ "type": "HOLD", "tracking_id": "e219459f-9a7e-48ec-9c2b-1a40a62d5ca3", "settlement_date": "2025-01-10", "amount": 800 },
{ "type": "HOLD", "tracking_id": "e219459f-9a7e-48ec-9c2b-1a40a62d5ca3", "settlement_date": "2025-01-20", "amount": 1000 },
{ "type": "HOLD", "tracking_id": "e219459f-9a7e-48ec-9c2b-1a40a62d5ca3", "settlement_date": "2025-01-30", "amount": 200 }
]
}
Check posting field definitions
| Field | Type | Required | Description |
|---|---|---|---|
external_account_id | string | yes | Custom account ID used as the corporate‑layer reference key. |
check_id | string | yes | Check ID. Identifies your check posting or settlement request |
check_amount.value | decimal | yes | Total transaction amount |
check_amount.currency | string | no | Currency code |
description | string | no | Transaction description |
business_date | string | no | Posting business date. Defaults to current business date |
settlement_type | string | yes | When funds become available (BEGINNING, END) |
settlements.type | string | yes | DEPOSIT, PENDING, or HOLD |
settlements.tracking_id | string | yes | Tracking ID |
settlements.settlement_date | string | yes | Expected settlement date |
settlements.amount | decimal | yes | Amount to settle |
Sample check release bulk request
Header
{
"bulk_id":"bf4695d5-c53c-4da3-9255-e88485337aa9",
"org_id":"TN-097d9c0e-0331-492a-93e2-95c8c2019fd1",
"header_version":"1.0.0",
"operation_type":"CHECK_RELEASE",
"n_entries":2
}
Rows
{"external_account_id":"acc1","check_id":"963ae9db-b841-4fa3-8eb7-454602ca7d3d"}
{"external_account_id":"acc1","check_id":"98211b85-ae48-4c01-8e3a-d52720b24c94","tracking_id":"1e87d288-c82a-4858-8e02-96634de21002","settlement_date":"2025-10-31"}
Check release field definitions
| Field | Required | Description |
|---|---|---|
external_account_id | yes | Custom account ID |
check_id | yes | Check ID |
tracking_id | no | Tracking ID for the release. Auto-generated if omitted |
settlement_date | no | Specific settlement date to release. If empty, full amount is released |
Output format
After processing, two output files are generated.
| File Type | Description |
|---|---|
.original | Contains line‑by‑line processing results |
.sign | Signature file for authenticity verification |
Output header example
{
"bulk_id": "blk-0001",
"org_id": "tn-0000-0001",
"header_version": "1.0.0",
"operation_type": "CHECK_POST",
"n_entries": 10000,
"status": {
"description": "FAILED",
"error": {
"code": "WBLK-0001",
"message": "Malformatted input file"
}
}
}
Header status fields
| Field | Description |
|---|---|
status.description | FAILED or FINISHED |
status.error.code | Error code if failure |
status.error.message | Human‑readable error description |
Note: A FAILED header means no rows were processed.
Row examples
Success
{
"response_status": 202,
"tracking_id": "9d15bfd1-5db9-4e96-b846-8d8707454430",
"cid": "ex-cid-1",
"data": {
"check_id": "4a4060d5-3649-46e8-8d64-93949b212918"
}
}
Failure
{
"response_status": 400,
"tracking_id": "9d15bfd1-5db9-4e96-b846-8d8707454430",
"cid": "ex-cid-1",
"error": {
"code": "ERR9999",
"message": "Error while executing operation"
}
}
Bulk settlement API
Bulk settlement API allows all pending check operations for a division and settlement date to be executed at once.
Request example
{
"operation_type": "check-release",
"settlement_date": "2024-07-03",
"bulk_id": "74f8e8df",
"division_code": "74f8e8df-2c2b-412f-8d35-abdf17d896ec"
}
Field definitions
| Field | Description |
|---|---|
operation_type | Must be check-release |
settlement_date | Original pending settlement date (must be current or past business date) |
bulk_id | ID of the generated bulk file |
division_code | Division used to query settlement events |
Once the bulk settlement request is processed, the Pismo platform generates these events to indicate status.
Updated 2 days ago