Payments are carried in payments[] on the invoice operation. The array accepts between 1 and 10 entries. Which fields you provide depends on whether the invoice has already been settled.
Payment already received
Select the payment type that applies — CASH, CARD, ONLINE, VOUCHER or OTHER — and provide details.amount. Some types require additional fields:
| Type | Additional required fields |
| CASH | — |
| CARD | number, kind |
| VOUCHER | number, kind |
| ONLINE | name |
| OTHER | — (name is optional) |
Optionally, details can also carry date , discount and properties. The currency of the first payment in the array sets the currency of the whole invoice and EUR is the only accepted value.
Payments of these types count as already settled — they reduce the amount the buyer still owes on the invoice. There are 2 possible scenarios:
- If they cover the invoice total, nothing further is needed.
- If they don't, add an
OUTSTANDINGpayment for the remainder; otherwise the invoice is rejected because the amounts don't add up.
Payment still outstanding
Use payments[].type: "OUTSTANDING". payments[].concept is required and indicates whether the outstanding amount concerns a GOOD, a SERVICE, or an INVOICE.
OUTSTANDING takes a details object:
details.amountis required and carries the amount still due.details.dateis also required and sets the payment due date — an outstanding payment without a due date is rejected.
If you send more than one OUTSTANDING payment, only the first one is used. The others are ignored, and a warning is recorded on the invoice record.
Payment instruction
Theinstructionobject is optional. Add it when the invoice should tell the buyer how to pay — for a bank transfer, it carries the IBAN the buyer should send the money to.If you leave it out, the invoice is still accepted and transmitted. fiskaly then reports the payment method as a bank transfer, without any account details. So include an
instructionwhen you want your account details on the invoice, or when the buyer is meant to pay some other way (by SEPA direct debit, for example).When
instructionis provided,instruction.typeisCREDIT_TRANSFERorDIRECT_DEBIT. An instruction missing any of these fields is rejected:CREDIT_TRANSFERrequirestype,account,nameandpayment_service_provider— all four. The IBAN goes inaccount, in ISO 13616 format (15–34 characters).payment_service_provideris the bank's BIC/SWIFT code (e.g. BCITITMM) — a bank name is not accepted.DIRECT_DEBITrequirestype,mandate_reference,creditor_idanddebited_account, with the IBAN indebited_account.Note that
creditor_idis an object rather than a string —{ "type": "SEPA", "identifier": "IT05ZZZ12345678901" }— and the identifier is to match the SEPA creditor identifier format (9–35 characters), where the character following the three-letter business code is a digit.Both variants also accept the optional fields
textandproperties. Properties has a different shape depending on where it appears: ondetailsit is an object of up to 16 entries whose values are strings of up to 64 characters, while oninstructionit is a single string of up to 128 characters.
Note: instruction.type: "UNKNOWN" is not supported for Italy. It exists to allow text and properties without a credit transfer or direct debit, and is relevant for other E-INVOICE countries. Sending it for Italy returns a validation error requiring the it-sdi-payment-means extension.
Example of outstanding payment via bank transfer
{
"payments": [
{
"type": "OUTSTANDING",
"concept": "INVOICE",
"details": {
"amount": "122.00",
"date": "2026-09-30"
},
"instruction": {
"type": "CREDIT_TRANSFER",
"account": "IT60X0542811101000000123456",
"name": "Officina Rossi S.r.l.",
"payment_service_provider": "BCITITMM"
}
}
]
}
| Field | In the example |
| details.amount | The amount still due — not the invoice total |
| details.date | The payment due date — not the issue date |
| account | Your IBAN — the account the money arrives in |
| name | The holder of that account, i.e. you, the invoice issuer |
| payment_service_provider | The BIC/SWIFT code of your bank — not its name |
Note: ModalitaPagamento is not a field you set. It is derived from the payment instruction on the outstanding payment, or defaulted to MP05 when no instruction is given. Bank transfer and SEPA direct debit are covered. Cheque and Riba are not currently supported — if you need them, contact fiskaly support so we can record the requirement.
Example of outstanding payment via SEPA direct debit
Only the instruction object differs from the bank transfer example above; type, concept and details are unchanged.
{
"instruction": {
"type": "DIRECT_DEBIT",
"mandate_reference": "MANDATE-2026-0042",
"creditor_id": {
"type": "SEPA",
"identifier": "IT05ZZZ12345678901"
},
"debited_account": "IT60X0542811101000000123456"
}
}
| Field | In this example |
|---|---|
mandate_reference | Your reference for the SEPA mandate the buyer signed |
creditor_id.identifier | Your SEPA creditor identifier — you collect the money |
debited_account | The buyer's IBAN — the account you debit |
Note the direction: in a credit transfer the IBAN is yours and the buyer pushes the money; in a direct debit the IBAN is the buyer's and you pull it.