> ## Documentation Index
> Fetch the complete documentation index at: https://docs.monk.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SFTP Bank format

> Columns, file names, and validation for the bank transaction files you send to Monk over SFTP

# SFTP Bank format

This page specifies the bank transaction files you send to Monk over SFTP, for
Cash App. Each file lists your bank transactions, and Monk matches the incoming payments in it to your open invoices,
the same way it matches payments from any other bank connection. For how the
integration works, see [File integration (SFTP)](https://docs.monk.com/integrations/sftp), and for
how to connect and authenticate, see [Connecting](https://docs.monk.com/integrations/sftp#connecting).

Bank files are separate from the batches your ERP sends. They have their own
folder, need no manifest, and can arrive on their own schedule, such as when
your bank's prior-day file is ready each morning.

If your bank exports transactions in any other format, whether CSV or its own,
talk to your Monk contact.

## Folders and file names

| | Monk-hosted SFTP | Your SFTP server |
| - | - | - |
| Where you upload | `/inbound/bank` | The bank folder you give Monk during setup |
| After processing | Monk removes the file from `/inbound/bank` | Monk leaves the file where it is; your job removes it when it likes |

Upload each file directly into the bank folder, with no subfolders. Each file
is imported on its own, and file names are lowercase:

```
/inbound/bank/
  20261019-060000_transactions.csv
  20261020-060000_transactions.csv
```

* Files are named `<timestamp>_transactions.csv`, where `<timestamp>` is when
  your job produced the file, in UTC, as `yyyymmdd-hhmmss`. Each file has its
  own timestamp, and Monk processes files in timestamp order.
* A file whose name Monk already processed is ignored. File names are
  case-sensitive, so a name with uppercase letters is not picked up.
* Upload each file under a temporary name ending in `.tmp` and rename it once
  the upload is complete. Monk ignores `.tmp` files, so it never reads a partly
  written file.

## File conventions

The CSV conventions are the same as for the files your ERP sends; see
[File conventions](https://docs.monk.com/integrations/sftp-import-format.md#file-conventions). In
short: CSV (RFC 4180), UTF-8, comma-delimited, with a header row using the
exact column names below, in any order. Columns not on this page are ignored
and listed as warnings. In addition:

* `posted_at` as an ISO 8601 date and time with a time zone, such as
  `2026-10-19T14:32:00Z`. If your bank reports only a date, send midnight in
  your bank's time zone, such as `2026-10-19T00:00:00-05:00`.
* Amounts as decimals in major units with a dot, such as `1234.50`, with no
  currency symbols or thousands separators, below 100,000,000.00. Amounts are
  signed: positive for money into the account, such as a customer payment, and
  negative for money out.

## Columns

One row per transaction, as it appears on your bank statement.

| Column | Required | Description |
| - | - | - |
| `posted_at` | Yes | When the bank posted the transaction to the account |
| `amount` | Yes | Signed amount: positive for money in, negative for money out |
| `counterparty` | Yes | Who sent the money, for money in, or who received it, for money out, as the bank reports it. The column is required, but its value may be blank when the bank reports no name, such as for a branch deposit |
| `memo` | | Your bank's reference for the transaction, such as the bank reference, ACH trace number, or wire reference |
| `bank_description` | | The bank's description of the transaction, as it appears on your statement |
| `note` | | Remittance details that came with the payment, such as ACH addenda, wire remittance text, or the payer's reference. Several fields can be joined, one per line |
| `status` | | The bank's status for the transaction, such as `posted` or `pending`. If left out, the transaction is treated as posted |
| `account_id` | | Your identifier for the bank account, such as its last four digits or a name. Send it when files come from more than one account so Monk can tell them apart. |

Monk imports rows marked `pending` or `processing` but does not create a
payment-reconciliation task for them yet. When a later file re-sends the same
transaction as `posted`, Monk updates it and creates its task.

* **Money out.** Send every transaction, including debits. Monk
  imports them with the rest, but only matches money in to invoices.
* **Who paid.** Monk uses `counterparty`, `bank_description`, and `note` to
  identify the customer who paid. When `counterparty` is blank, Monk reads the
  payer from `bank_description` where it can.
* **Invoice references.** Monk matches invoice numbers and amounts found in
  `note`, `memo` and `bank_description`, so pass the bank's remittance text
  through as it is.

### Example

```csv theme={null}
posted_at,amount,counterparty,memo,bank_description,note
2026-10-19T00:00:00-05:00,7500.00,ACME FOODS INC,0269600012345,ACH CREDIT CCD ACME FOODS INC,INV-2026-0451
2026-10-19T00:00:00-05:00,4200.00,,FT2629212345,BRANCH DEPOSIT,
2026-10-19T00:00:00-05:00,-1250.00,STAPLES,0269600012399,ACH DEBIT STAPLES,
```

## Sending transactions again

Monk recognizes a transaction by the date of its `posted_at`, its `amount`, and
its `counterparty` (compared ignoring case and extra spaces). When several rows
in one file match on all of these, such as two equal payments from the same
customer on the same day, Monk tells them apart by their order in the file.

A row that matches a transaction Monk imported from an earlier file on all of
these, and also on `memo` and `bank_description`, is the same transaction sent
again, such as when two of your bank's files overlap. It is not imported twice:
Monk updates that transaction's `note` and `status` from the latest file and
counts the row as already imported in sync history.

A row that matches on `posted_at`, `amount`, and `counterparty` but has a
different `memo` or `bank_description` is never merged: Monk imports it as a
separate transaction and flags both for review in sync history. If your bank
rewrites descriptions between files, these flags show where.

Files only add or update transactions, so a transaction missing from a later
file stays in Monk. Do not change a transaction's `counterparty` between files,
or Monk imports it as a new transaction.

## Validation

| Check | If it fails |
| - | - |
| Required columns present and values match this format | File rejected with a row-numbered error report |
| Only columns on this page | Extra columns ignored and listed as warnings; the file imports |

A rejected file blocks nothing. Fix it and send it again with a new
timestamp. Every file appears in Monk's sync history with the rows accepted
and rejected, any warnings, and a downloadable error report. During setup,
upload test files to validate your export without importing anything.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.