MT940 file format
SWIFT MT940 Customer Statement Message
MT940 is the SWIFT end-of-day customer statement. It reports an account's opening balance, each booked transaction and its closing balances in tagged text fields.
Banks worldwide send MT940 to corporates, payment companies and treasury systems, over SWIFT or host-to-host channels. ERPs and reconciliation tools import it to post cash and match transactions daily.
File structure
| Code | Name | Purpose | Required |
|---|---|---|---|
:20: | Transaction Reference Number | Sender's reference for this statement message. | Yes |
:21: | Related Reference | Optional link to a related message. Many banks leave it out. | No |
:25: | Account Identification | Account number or IBAN being reported, up to 35 characters. | Yes |
:28C: | Statement Number/Sequence Number | Statement number, optionally followed by a slash and the page sequence number. | Yes |
:60F: / :60M: | Opening Balance | F is the first opening balance; M is an intermediate opening balance on later pages. | Yes |
:61: | Statement Line | One booked entry: dates, debit or credit mark, amount, type code and references. | No |
:86: | Information to Account Owner | Free-text or bank-structured narrative for the preceding :61:, up to 6 lines of 65. | No |
:62F: / :62M: | Closing Balance (Booked Funds) | F is the final closing balance; M is an intermediate closing balance for a continued page. | Yes |
:64: | Closing Available Balance | Funds available to the owner at close, which can differ from booked balance. | No |
:65: | Forward Available Balance | Available balance for a future value date. Can repeat for several dates. | No |
:86: (statement level) | Information to Account Owner | Optional closing narrative after the balances, used by some banks for summaries. | No |
Key codes
| Code | Meaning | Source | Category |
|---|---|---|---|
:60F: | First opening booked balance of the statement | NBC; ING; Westpac | Balance tag |
:60M: | Intermediate opening balance, used when a statement continues across messages | NBC; Goldman Sachs | Balance tag |
:62F: | Final closing booked balance | NBC; ING; Westpac | Balance tag |
:62M: | Intermediate closing balance on a page that is not the last | NBC | Balance tag |
:64: | Closing available balance | NBC; ING; Westpac | Balance tag |
:65: | Forward available balance for a stated future date | NBC; ING | Balance tag |
Balance layout 1!a6!n3!a15d | D/C mark, date YYMMDD, ISO currency, amount with comma decimal | NBC; Lloyds; ING | Balance format |
:61: subfield 1 (6!n) | Value date, YYMMDD. Mandatory. | NBC; Lloyds; Handelsbanken | :61: layout |
:61: subfield 2 [4!n] | Entry (booking) date, MMDD. Optional. | NBC; Lloyds; Handelsbanken | :61: layout |
:61: subfield 3 (2a) | Debit/credit mark: C, D, RC (reversal of credit) or RD (reversal of debit) | Handelsbanken; ING | :61: layout |
:61: subfield 4 [1!a] | Funds code. Optional, and many banks leave it unused. | Lloyds; Handelsbanken | :61: layout |
:61: subfield 5 (15d) | Amount with comma as decimal separator, no sign | NBC; Lloyds; Handelsbanken | :61: layout |
:61: subfield 6 (1!a3!c) | Transaction type identification code, such as NTRF | NBC; Lloyds; Handelsbanken | :61: layout |
:61: subfield 7 (16x) | Reference for the account owner, or NONREF when none exists | Lloyds; Handelsbanken | :61: layout |
:61: subfield 8 [//16x] | Account servicing institution's reference, introduced by // | NBC; Lloyds; Handelsbanken | :61: layout |
:61: subfield 9 [34x] | Supplementary details on a new line | NBC; Lloyds; Handelsbanken | :61: layout |
S + 3 digits | Entry linked to a SWIFT message; digits give the MT type, such as S103 | Handelsbanken; NBC | Type code prefix |
N + 3 characters | Entry from a non-SWIFT instruction, such as NTRF or NCHG | Handelsbanken; ING | Type code prefix |
F + 3 characters | Entry first advised by the statement, originated by the bank | Handelsbanken | Type code prefix |
NTRF | Transfer | ING; NBC | Common type code |
NCHG | Charges and other expenses | ING | Common type code |
NMSC | Miscellaneous | Lloyds | Common type code |
NINT | Interest | Lloyds | Common type code |
NSTO | Standing order | Lloyds; Handelsbanken | Common type code |
Sample file
Synthetic example with a fictional bank and account. Real files vary by bank.
:20:STMT261025001
:25:0001234567
:28C:298/1
:60F:C261024USD15000,00
:61:2610251025C1500,00NTRFINV-1001//FT2610250001
:86:INCOMING TRANSFER ACME TRADING LTD INV-1001
:61:2610251025D287,50NTRFPO-7788//FT2610250002
:86:PAYMENT TO FICTIONAL SUPPLIES CO PO-7788
:61:2610251025D12,50NCHGNONREF//FT2610250003
:86:OUTGOING PAYMENT FEE
:62F:C261025USD16200,00
:64:C261025USD15700,00
:65:C261026USD16200,00
-
Reading balances
Take the opening ledger balance from :60F: and the closing ledger balance from :62F:. If the statement spans several messages, use :60F: from the first page and :62F: from the last; :60M: and :62M: are page carry-forwards. Closing available balance is in :64:. Apply the D/C mark as the sign and convert the comma decimal.
Parsing and reconciliation pitfalls
- :86: content varies by bank. Some use free text, others structured codewords such as /EREF/ or ?20 subfields. Build bank-specific parsers rather than one generic regex.
- One file can hold many statements or many pages. Group by :25: and :28C:, and chain :60M: and :62M: pages before checking balances.
- RC and RD are reversals. RD is a credit that reverses a debit, so do not sign entries from the first letter alone.
- Value date and entry date differ in :61:. The entry date has no year, so infer it from the value date near year end.
- Host-to-host files may omit SWIFT header blocks, while network files include {1:}{2:}{4: wrappers. Strip envelopes and handle the terminating dash before parsing tags.
How it compares
MT940 is the end-of-day booked statement. MT942 is its intraday sibling without balance tags. BAI2 does a similar job in North America using numeric codes. camt.053 is the ISO 20022 XML replacement, with structured parties, references and remittance data that MT940 squeezes into :86:.
Polynopsis reads statement files like this one through a forwarding inbox and turns them into a live position alongside your API-connected accounts. See how it works.
Frequently asked questions
What is an MT940 file?
An MT940 is a SWIFT customer statement message in tagged text. It reports one account's opening balance, booked entries in :61: lines with narrative in :86:, and closing balances. Banks send it daily over SWIFT or host-to-host channels.
What is the difference between :60F: and :60M:?
:60F: is the first opening balance of a statement. :60M: is an intermediate opening balance, used when one statement is split across several messages. The same pattern applies to :62F: and :62M: for closing balances.
Is MT940 being replaced by camt.053?
Yes, gradually. Swift's CBPR+ roadmap makes camt reporting mandatory to receive by November 2027, with end of coexistence planned for SR 2028. That roadmap covers bank-to-bank traffic only; corporate MT940 delivery depends on each bank.
Other formats
Sources
- User Guide: MT940 and MT101 · National Bank of Canada
- MT940 and MT942 Format Description for InsideBusiness Payments · ING
- SWIFT MT940 Standard · Lloyds Bank
- MT942 Interim Transaction Report format description · Handelsbanken
- CBPR+ roadmap beyond November 2025 (v6, September 2026) · Swift
Know where all your money is.
Polynopsis gives cross-border payment teams one live position across every bank, payout partner, exchange and wallet, including money in flight, and warns before a corridor runs dry.