FA(3)

FA(3): what the KSeF invoice format actually is

A plain-language explanation of the FA(3) format used by KSeF: the XML schema, what it describes and why you generate it rather than write it by hand.

Published 3 min readBy Tomek

Overview

FA(3) is the structured XML format that Poland's KSeF system uses to represent an e-invoice, defined by an official schema (XSD) published by the Ministry of Finance. It is not a printable document like a PDF — it is machine-readable data that encodes the seller, the buyer, the line items, the totals and the VAT fields. In practice you generate the XML from your invoice data and validate it against the schema, rather than writing it by hand.

What the format describes

KSeF (Krajowy System e-Faktur) is Poland's national e-invoicing platform run by the Ministry of Finance (Ministerstwo Finansów). The FA(3) schema is the contract for what a structured invoice must contain. It defines elements such as the issue date and invoice number, the seller and buyer parties with their identifiers, the line items with unit, quantity and price, and the totals broken down by VAT rate. Every field has a defined type, length and — where relevant — an allowed list of values.

Because it is a schema rather than a template, FA(3) is strict. A field that is missing, too long or of the wrong type fails validation, and KSeF rejects the invoice with an error code. That strictness is the point: it is what lets the platform process millions of invoices automatically and reliably.

XML, not a picture

A PDF or an image shows a human how an invoice looks; it does not tell a computer what each value means. FA(3) does the opposite: it labels every value — who sold, who bought, how much, at which rate — so the tax system can read it without interpretation. The visual PDF you send to a customer is a separate rendering of the same data, not the structured invoice itself.

Generate, validate, submit

The reliable way to produce FA(3) is to map your invoice data onto the schema, generate the XML, then validate it against the official XSD before sending it to KSeF. Hand-writing the XML invites the exact mistakes the schema is designed to catch. A KSeF API such as Notaly's takes your plain JSON invoice, generates the FA(3) XML, validates it against the official schema and submits it — returning the status and UPO through a webhook.

Disclaimer

Notaly is not a tax, accounting or legal advisor. This article is general information, not tax advice, and may be outdated. You are responsible for your own VAT compliance; confirm with a qualified accountant where required.

Sources

Source: crd.gov.pl

Frequently asked questions

Is FA(3) a file type like PDF?

No. FA(3) is a structured XML format defined by an official schema. A PDF is a visual document; FA(3) is machine-readable data.

Do I write FA(3) XML by hand?

You should not. You generate it from your invoice data and validate it against the official XSD; an API like Notaly does both for you.

Where does the FA(3) name come from?

It is the current schema version for structured invoices used by KSeF, published by the Ministry of Finance.

Issue your first KSeF test invoice today

Create a sandbox account: API key in seconds, 3 free test invoices on KSeF TEST, no credit card.