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

FieldTypeRequiredDescription
bulk_idstringyesUnique ID for the batch. Alphanumeric + hyphens only, maximum 50 characters. Must be unique per org_id
org_idstringyesOrganization ID
header_versionstringyesMust be 1.0.0
operation_typestringyesCHECK_POST, CHECK_RELEASE. Identifies the type of check operation you perform
n_entriesnumberyesNumber 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

FieldTypeRequiredDescription
external_account_idstringyesCustom account ID used as the corporate‑layer reference key.
check_idstringyesCheck ID. Identifies your check posting or settlement request
check_amount.valuedecimalyesTotal transaction amount
check_amount.currencystringnoCurrency code
descriptionstringnoTransaction description
business_datestringnoPosting business date. Defaults to current business date
settlement_typestringyesWhen funds become available (BEGINNING, END)
settlements.typestringyesDEPOSIT, PENDING, or HOLD
settlements.tracking_idstringyesTracking ID
settlements.settlement_datestringyesExpected settlement date
settlements.amountdecimalyesAmount 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

FieldRequiredDescription
external_account_idyesCustom account ID
check_idyesCheck ID
tracking_idnoTracking ID for the release. Auto-generated if omitted
settlement_datenoSpecific settlement date to release. If empty, full amount is released

Output format

After processing, two output files are generated.

File TypeDescription
.originalContains line‑by‑line processing results
.signSignature 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

FieldDescription
status.descriptionFAILED or FINISHED
status.error.codeError code if failure
status.error.messageHuman‑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

FieldDescription
operation_typeMust be check-release
settlement_dateOriginal pending settlement date (must be current or past business date)
bulk_idID of the generated bulk file
division_codeDivision used to query settlement events

Once the bulk settlement request is processed, the Pismo platform generates these events to indicate status.