Zynergy Payment Requirements
This document outlines the data requirements for a Bank Integration Service to support Zynergy's payment processing - both incoming payments (from banks to Zynergy) and outgoing payments (from Zynergy to banks).
...
Incoming Payments (Bank → Zynergy)
Zynergy receives payment files from banks to match against invoices and apply payments.
Supported Formats
Zynergy processes the following incoming payment file formats:
- BGMax
- TotalIn
- Inbetalningsservice OCR
- ISO 20022 camt.054 (Nordea, Swedbank)
- Autogiro
- OCR Giro
- Betalingsservice
- Leverandorservice
- EDI Light
- OCR Kortart71
- OFUXML (international transfers)
Data Hierarchy
The schema follows a three-level hierarchy: file (metadata and duplicate detection), headers (payment batches with shared properties), and transactions (individual payments).
File-Level Fields
These fields identify the file and enable duplicate detection:
| Field | Purpose |
|---|---|
file.uniqueId | SHA-256 hash of file content for duplicate detection |
file.timestamp | When file was created/generated |
file.format | Format identifier for routing |
file.provider | Bank/provider name |
Required Fields
These fields are essential for Zynergy to process and reconcile payments:
| Field | Purpose | Source Examples |
|---|---|---|
transactionId | Unique identifier for the payment transaction (bank-assigned or payer-provided) | ISO20022: EndToEndId / AcctSvcrRef, BGMax: TransactionSerialNumber |
references | Array of invoice references/OCRs for matching* | ISO20022: CdtrRefInf.Ref / RfrdDocInf.Nb |
amount | Payment amount (negative for refunds**) | ISO20022: RmtdAmt |
currency | ISO currency code | ISO20022: Ccy |
paymentDate | When payment was recorded (booking date) | ISO20022: BookgDt |
receivingAccount | Destination bank account | ISO20022: CdtrAcct, Autogiro: bankgiro number |
messages | Free-text payment information (payers sometimes put reference here) | ISO20022: Ustrd / AddtlRmtInf |
payer | Payer information object (all sub-fields nullable) | See below |
payer.id | Payer identification | ISO20022: Dbtr.Id, Autogiro: payer number, BGMax/TotalIn: LegalIdentityNumber |
payer.name | Payer's full name | ISO20022: Dbtr.Nm |
payer.address | Payer's address (structured or string) | ISO20022: Dbtr.PstlAdr |
payer.country | Payer's country code | ISO20022: Dbtr.PstlAdr.Ctry |
payer.bankAccount | Payer's bank account number | BGMax/TotalIn: SendingAccount |
Some formats support multiple references per transaction (e.g., split payments where one payment covers multiple invoices). Each reference includes its portion of the total amount. First element is the primary reference.
...
Note: When multiple ISO 20022 source fields are listed, Zynergy's existing parsers resolve them as follows: - transactionId: Use EndToEndId (payer-provided), fall back to AcctSvcrRef (bank-assigned) if unavailable - references: Use RfrdDocInf.Nb for invoices/credit notes (CINV/CREN), or CdtrRefInf.Ref for structured OCR references (SCOR) - messages: Use Ustrd (unstructured free-text), fall back to AddtlRmtInf (additional remittance info) if unavailable
Suggested Fields
These fields are useful for validation, reconciliation, and international payments:
| Field | Purpose | Source Examples |
|---|---|---|
transactionCount | Number of transactions in batch | File/header level counts |
totalAmount | Sum of transaction amounts | File/header level totals |
conversion | Currency conversion details (only present when conversion occurred) | See below |
conversion.amount | Amount in original currency (before conversion) | ISO20022: InstdAmt, OFUXML: original transfer amount |
conversion.currency | Original currency code | ISO20022: InstdAmt.Ccy, OFUXML: sender currency |
conversion.rate | Exchange rate applied | ISO20022: XchgRate, OFUXML: exchange rate |
fees | Bank fees (only present for international payments) | See below |
fees.correspondentBank | Correspondent bank fees with amount and currency | OFUXML/TotalIn: CostsOtherBank |
fees.sendingBank | Sending bank fees with amount and currency | OFUXML/TotalIn: CostsSendingBank |
Extensions (Format-Specific Data)
Extensions provide a mechanism to preserve format-specific data that doesn't fit the common schema. This data is:
- Not required for core payment processing
- Useful for troubleshooting, auditing, and display purposes
- Variable across formats (most fields only exist in 1-3 formats)
How Extensions Work
The service returns format-specific data in an extensions object at both header and transaction levels. Consuming systems can:
- Ignore extensions entirely - Core processing works without them
- Store extensions as-is - Preserve for display/audit without parsing
- Extract specific fields - Use known extension fields when present
Example Extension Fields
| Field | Formats | Purpose |
|---|---|---|
sender | TotalIn, International | Original sender info for forwarded payments |
discountCode | BGMax, TotalIn | Early payment discount indicator |
bankReference | Various | Bank's internal reference number |
accountStatementRef | ISO20022 | Bank statement identifier (header-level) |
Example Schema
Core fields always present, format-specific data isolated in extensions.
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
{
"file": {
"uniqueId": "a1b2c3d4e5f6...",
"timestamp": "2024-01-15T10:30:00Z",
"format": "ISO20022_CAMT054",
"provider": "Nordea"
},
"headers": [
{
"paymentDate": "2024-01-15",
"currency": "SEK",
"receivingAccount": "5555-1234567",
"transactionCount": 2,
"totalAmount": 14000.00,
"transactions": [
{
"transactionId": "TXN-2024-001",
"amount": 10500.00,
"references": [{ "reference": "7340012345678", "amount": 10500.00 }],
"messages": ["Invoice 12345"],
"payer": {
"id": "SE5501011234",
"name": "Acme Corporation AB",
"address": "Storgatan 1, Stockholm",
"country": "SE",
"bankAccount": "1234-5678901"
},
"extensions": {
"discountCode": "0"
}
},
{
"transactionId": "TXN-2024-002",
"amount": 3500.00,
"references": [
{ "reference": "9912345678901", "amount": 2000.00 },
{ "reference": "9912345678902", "amount": 1500.00 }
],
"messages": [],
"payer": {
"id": "SE6601025678",
"name": null,
"address": null,
"country": null,
"bankAccount": null
},
"extensions": {}
}
],
"extensions": {
"accountStatementRef": "STMT-2024-001"
}
}
]
} |
...
Outgoing Payments (Zynergy → Bank)
Zynergy generates outgoing payment files that instruct banks to transfer funds from company accounts to creditors (suppliers, customers receiving refunds, etc.).
Supported Formats
- ISO 20022 pain.001.001.03 - SEPA Credit Transfer Initiation
- Nordea Corporate Access
- Danske Bank
- Swedbank
Data Hierarchy
The schema follows a three-level hierarchy: file/header (metadata for the entire export), payment information (batches grouped by date/account), and transactions (individual credit transfers).
Header Level
| Field | Type | Description |
|---|---|---|
fileId | string (GUID) | Unique identifier for the entire payment file |
timestamp | datetime | UTC timestamp when file was generated |
transactionCount | integer | Total count of all transactions in file |
provider | string | Bank/provider identifier (e.g., Nordea, DanskeBank, Swedbank) |
initiatingParty.id | string | Identifier for the party initiating the payment (company) |
Payment Information Level
| Field | Type | Description |
|---|---|---|
batchId | string (GUID) | Unique identifier for this payment batch |
paymentMethod | enum | TRF (transfer) or CHK (check) |
requestedExecutionDate | date | When the bank should execute the payments |
debtor.name | string | Company name (payer) |
debtor.countryCode | string (2) | ISO country code of debtor |
debtor.accountNumber | string | Company's bank account (IBAN/BBAN/Bankgiro) |
debtor.accountType | enum | IBAN, BBAN, or Bankgiro |
debtor.accountCurrency | string (3) | ISO currency code of debtor account |
debtor.bic | string (8-11) | SWIFT BIC code of debtor's bank |
Transaction Level
| Field | Type | Max Length | Description |
|---|---|---|---|
transactionId | string (GUID) | 35 | Unique identifier for the transaction |
amount | decimal(19,2) | - | Payment amount |
currency | string | 3 | ISO currency code (EUR, SEK, NOK, etc.) |
creditor.name | string | 140 | Recipient name |
creditor.countryCode | string | 2 | ISO country code |
creditor.accountNumber | string | - | Recipient's bank account |
creditor.accountType | enum | - | IBAN, BBAN, Bankgiro, Check |
paymentText | string | 140 | Payment description (typically contains invoice reference) |
Conditional Fields
Fields required based on account type or payment method:
For IBAN Accounts
| Field | Required | Description |
|---|---|---|
creditor.bic | Yes | SWIFT BIC code is mandatory for IBAN |
For Check Payments
| Field | Required | Description |
|---|---|---|
creditor.streetName | Yes | Street address required |
creditor.postalCode | Yes | Postal/ZIP code required |
creditor.townName | Yes | City/town name required |
For Swedish Clearing (BBAN/Bankgiro)
| Field | Required | Description |
|---|---|---|
clearingNumber | Conditional | Swedish bank clearing number |