- Description
- Actions
- Workflows
- Documents
KSeF (Krajowy System e-Faktur) 2.0 is Poland’s mandatory national e-invoicing system operated by the Ministry of Finance. The system uses the FA(3) XML schema format for structured invoice data and provides real-time clearance for all B2B invoices.Electronic invoicing in Poland operates on a clearance model whereby every invoice must be validated against the FA(3) schema and business rules in real-time. Validated invoices receive a unique KSeF ID and official timestamp. The platform provides secure archiving for issued and received e-invoices.Invoices are encoded in FA(3), a strict XML format published and maintained by Polish tax authorities. The schema enforces standardized fields for both domestic and cross-border transactions, including buyer/seller data, VAT details, and item lines.Key Features
- Party Registration: Register suppliers in the KSeF system with their Polish Tax ID (NIP).
- API Certificate Upload: Upload KSeF certificates, private keys, and passwords programmatically via API for automated integration.
- Workflow Automation: Automated workflows for registering parties, issuing invoices, and importing received invoices through the KSeF 2.0 system.
- Real-Time Validation: Every invoice is validated in real-time against the FA(3) schema and business rules, ensuring compliance with Polish e-invoicing regulations.
- Invoice Import & Sync: Automatically poll KSeF for received invoices and import them into Invopop in GOBL format.
- Legally Compliant PDF Invoices: Invoices are generated with all mandatory fields and FA(3) QR codes linked to the KSeF portal.
- FA(3) XML Generation: Compliant XML generation is supported for the KSeF FA(3) schema.
- QR Code: Generates the FA(3) QR code according to KSeF specifications.
- KSeF 2.0 Integration: Direct integration with KSeF 2.0, Poland’s official national platform for electronic invoicing.
KSeF 2.0 Environment SupportInvopop supports KSeF 2.0 in sandbox (test and demo modes) and production environments. In sandbox, you can choose between test mode (with automatically generated certificates) or demo mode (simulating the real production flow). In production, all suppliers are registered directly with the KSeF production system.
The following workflow actions will be available once you install and enable this app:
1
Register a party (supplier) with the KSeF system using their Polish Tax ID (NIP).
1
Generate FA(3) XML from GOBL invoices for the KSeF system.
2
Submit FA(3) XML invoices to the KSeF clearance system and receive KSeF ID upon approval.
1
Import a received invoice from KSeF and convert it to GOBL format.
1
Query KSeF for received invoices in a time range and create import jobs for each invoice.
Register Party in KSeF (Poland)
Generate FA(3) XML
Send FA(3) XML to KSeF
Import Invoice from KSeF
Sync Received Invoices from KSeF
The following workflows are available to make your integration easier. Use them as templates to build upon.
Poland party registration workflow
Poland party registration workflow
This workflow registers a supplier in the KSeF system.Add to my workspace →
Example Register supplier for KSeF workflow with states
Copy
Ask AI
{
"name": "Register for KSeF",
"description": "Register a party in KSeF",
"schema": "org/party",
"steps": [
{
"id": "f6ca2240-fb6b-11f0-b2f4-37a8eb8f9eb9",
"name": "Set State",
"provider": "silo.state",
"summary": "Set state to `processing`{.state .processing}",
"config": {
"state": "processing"
}
},
{
"id": "f7315970-fb74-11f0-8137-27e02839a7ca",
"name": "Register for KSeF",
"provider": "gov-pl.register",
"config": {
"polling_interval": "0"
}
},
{
"id": "3166cb10-fdba-11f0-a562-870ebfef62f3",
"name": "Wait for KSeF Certificate Upload",
"provider": "gov-pl.wait.upload"
},
{
"id": "f0b45d30-fb6b-11f0-b2f4-37a8eb8f9eb9",
"name": "Set State",
"provider": "silo.state",
"summary": "Set state to `registered`{.state .registered}",
"config": {
"state": "registered"
}
}
],
"rescue": [
{
"id": "ebf99440-fb6b-11f0-b2f4-37a8eb8f9eb9",
"name": "Set State",
"provider": "silo.state",
"summary": "Set state to `error`{.state .error}",
"config": {
"state": "error"
}
}
]
}
Poland invoice sending workflow
Poland invoice sending workflow
This workflow automates FA(3) Polish invoice processing and tax compliance.Add to my workspace →
Example Send KSeF invoice workflow with states
Copy
Ask AI
{
"name": "Send KSeF invoice",
"description": "Generate FAVAT (3) XML and send it to KSeF",
"schema": "bill/invoice",
"steps": [
{
"id": "20bbac70-fb6e-11f0-8a4e-79beeb9e3cf2",
"name": "Set State",
"provider": "silo.state",
"summary": "Set state to `processing`{.state .processing}",
"config": {
"state": "processing"
}
},
{
"id": "9b5f5330-fb70-11f0-bcdd-bdb71eaf1fb4",
"name": "Add Sequential Code",
"provider": "sequence.enumerate",
"summary": "Dynamic · KSeF · 000001",
"config": {
"name": "KSeF",
"padding": 6,
"start": 1
}
},
{
"id": "2f41c860-fb6e-11f0-8a4e-79beeb9e3cf2",
"name": "Sign Envelope",
"provider": "silo.close"
},
{
"id": "2b064190-fb6e-11f0-8a4e-79beeb9e3cf2",
"name": "Generate FA_VAT v3 XML",
"provider": "gov-pl.generate"
},
{
"id": "36ec8550-fb6e-11f0-8a4e-79beeb9e3cf2",
"name": "Send FA_VAT v3 XML to KSeF",
"provider": "gov-pl.send"
},
{
"id": "3a3e2150-fb6e-11f0-8a4e-79beeb9e3cf2",
"name": "Set State",
"provider": "silo.state",
"summary": "Set state to `sent`{.state .sent}",
"config": {
"state": "sent"
}
}
],
"rescue": [
{
"id": "3eca1210-fb6e-11f0-8a4e-79beeb9e3cf2",
"name": "Set State",
"provider": "silo.state",
"summary": "Set state to `error`{.state .error}",
"config": {
"state": "error"
}
}
]
}
Poland invoice import workflow
Poland invoice import workflow
This workflow imports a received invoice from KSeF and converts it to GOBL format.Add to my workspace →
Example Import KSeF invoice workflow with states
Copy
Ask AI
{
"name": "Import KSeF invoice",
"description": "Import a received invoice from KSeF",
"schema": "bill/invoice",
"steps": [
{
"id": "ba8faad0-01d7-11f1-8b4e-fdb288ce1d84",
"name": "Import invoice from KSeF",
"provider": "gov-pl.import"
},
{
"id": "5efe18e0-01e7-11f1-8a2b-3f4babb9af4d",
"name": "Set Folder",
"provider": "silo.folder",
"summary": "Set folder to `Invoices · Expenses`{.font-medium}",
"config": {
"folder": "expenses"
}
},
{
"id": "653ff700-01e7-11f1-8a2b-3f4babb9af4d",
"name": "Set State",
"provider": "silo.state",
"summary": "Set state to `registered`{.state .registered}",
"config": {
"state": "registered"
}
}
],
"rescue": [
{
"id": "7d993da0-0275-11f1-94f6-05637523f70d",
"name": "Set State",
"provider": "silo.state",
"summary": "Set state to `error`{.state .error}",
"config": {
"state": "error"
}
}
]
}
Poland invoice sync workflow
Poland invoice sync workflow
This workflow syncs all received invoices for a party within a specific time range and creates import jobs for each invoice found.Add to my workspace →
Example Sync Received invoices from KSeF workflow with states
Copy
Ask AI
{
"name": "Sync Received invoices from KSeF",
"description": "Create import jobs for each received invoice of a party in KSeF",
"schema": "org/party",
"steps": [
{
"id": "5bddfd40-0220-11f1-bd80-c7df39ccdf0b",
"name": "Sync received invoices from KSeF",
"provider": "gov-pl.sync"
}
],
"rescue": []
}
The following examples show partial GOBL documents you can copy and paste directly into the Invopop Console or store via the API as silo entries.
For more examples and detailed documentation, visit the Poland Guide.
B2B Standard Invoice
B2B Standard Invoice
In this example, we’re issuing a standard B2B invoice from a Polish supplier to another Polish business customer.Notice:
- the minimal version (
ksef-b2b-standard.min.mdx) contains only the essential fields required to create the invoice, - the
pl-ksef-v1addon ensures the document will be validated using the KSeF rules built into the GOBL library, - there are no totals or calculations in the minimal version; all these will be calculated automatically when running
gobl build, - the built version (
ksef-b2b-standard.mdx) shows the normalized document with calculated totals, line item sums, tax breakdowns, and automatically generated fields likei(line index),sum, andtotal, and, - make sure to process it with the “Issue KSeF invoice” workflow created during setup.
Copy
Ask AI
{
"$schema": "https://gobl.org/draft-0/bill/invoice",
"$regime": "PL",
"$addons": [
"pl-favat-v3"
],
"series": "INVOICE",
"code": "001",
"issue_date": "2026-01-20",
"supplier": {
"name": "Testowa Firma Sp. z o.o.",
"tax_id": {
"country": "PL",
"code": "9876543210"
},
"addresses": [
{
"street": "ul. Główna 1",
"locality": "Warsaw",
"code": "00-001",
"country": "PL"
}
],
"emails": [
{
"addr": "kontakt@testowa.pl"
}
]
},
"customer": {
"name": "Klient Testowy Sp. z o.o.",
"tax_id": {
"country": "PL",
"code": "1111111111"
},
"addresses": [
{
"street": "ul. Testowa 10",
"locality": "Kraków",
"code": "30-001",
"country": "PL"
}
]
},
"lines": [
{
"quantity": "10",
"item": {
"name": "Software Development Services",
"price": "100.00",
"unit": "h"
},
"taxes": [
{
"cat": "VAT",
"rate": "general",
"key": "standard"
}
]
},
{
"quantity": "5",
"item": {
"name": "Consulting Services",
"price": "150.00",
"unit": "h"
},
"taxes": [
{
"cat": "VAT",
"rate": "reduced",
"key": "standard"
}
]
}
],
"payment": {
"instructions": {
"key": "credit-transfer",
"detail": "Transfer payment to our bank account",
"credit_transfer": [
{
"iban": "PL61109010140000071219812874",
"name": "Testowa Firma Sp. z o.o."
}
]
}
}
}
B2B Reverse Charge Invoice
B2B Reverse Charge Invoice
In this example, we’re issuing a reverse charge invoice from a Polish supplier to a customer in another EU member state.Notice:
- the customer has a valid EU VAT ID, indicating the transaction is subject to reverse charge mechanism,
- the minimal version contains only essential fields; totals and tax calculations are omitted,
- when running
gobl build, the system automatically calculates totals, applies reverse charge rules, and normalizes the document, - the built version shows all calculated fields including the reverse charge indicator, tax breakdowns, and final totals, and,
- the invoice is validated using the KSeF rules to ensure compliance with Polish e-invoicing requirements.
Copy
Ask AI
{
"$schema": "https://gobl.org/draft-0/bill/invoice",
"$regime": "PL",
"$addons": [
"pl-favat-v3"
],
"$tags": [
"reverse-charge"
],
"series": "RC",
"code": "001",
"issue_date": "2026-01-20",
"supplier": {
"name": "Testowa Firma Sp. z o.o.",
"tax_id": {
"country": "PL",
"code": "9876543210"
},
"addresses": [
{
"street": "ul. Główna 1",
"locality": "Warsaw",
"code": "00-001",
"country": "PL"
}
]
},
"customer": {
"name": "EU Business GmbH",
"tax_id": {
"country": "DE",
"code": "111111125"
},
"addresses": [
{
"street": "Hauptstraße 100",
"locality": "Berlin",
"code": "10115",
"country": "DE"
}
]
},
"lines": [
{
"quantity": "1",
"item": {
"name": "IT Services - EU Reverse Charge",
"price": "5000.00"
},
"taxes": [
{
"cat": "VAT",
"key": "reverse-charge"
}
]
}
],
"notes": [
{
"key": "legal",
"text": "Reverse charge mechanism applies - VAT to be accounted for by the customer."
}
]
}
B2B Credit Note
B2B Credit Note
In this example, we’re issuing a credit note to correct or refund a previous invoice.Notice:
- the
typefield is set tocredit-noteto indicate this is a corrective document, - the
precedingfield references the original invoice being corrected, - the minimal version contains only the essential fields; calculations are handled by GOBL,
- when running
gobl build, the system automatically calculates negative totals, tax refunds, and validates the credit note structure, - the built version shows all calculated fields including negative amounts for the refund, and,
- the document is validated using the KSeF rules to ensure compliance with Polish credit note requirements.
Copy
Ask AI
{
"$schema": "https://gobl.org/draft-0/bill/invoice",
"$regime": "PL",
"$addons": [
"pl-favat-v3"
],
"type": "credit-note",
"series": "KOR",
"code": "001",
"issue_date": "2026-01-20",
"preceding": [
{
"type": "standard",
"issue_date": "2026-01-20",
"series": "INVOICE",
"code": "001",
"reason": "Price correction",
"stamps": [
{
"prv": "favat-ksef-number",
"val": "1234567890-20260120-ABCD1234-EF"
}
],
"ext": {
"pl-favat-effective-date": "1"
}
}
],
"supplier": {
"name": "Testowa Firma Sp. z o.o.",
"tax_id": {
"country": "PL",
"code": "9876543210"
},
"addresses": [
{
"street": "ul. Główna 1",
"locality": "Warsaw",
"code": "00-001",
"country": "PL"
}
]
},
"customer": {
"name": "Klient Testowy Sp. z o.o.",
"tax_id": {
"country": "PL",
"code": "9876543210"
},
"addresses": [
{
"street": "ul. Testowa 10",
"locality": "Kraków",
"code": "30-001",
"country": "PL"
}
]
},
"lines": [
{
"quantity": "10",
"item": {
"name": "Software Development Services",
"price": "10.00",
"unit": "h"
},
"taxes": [
{
"cat": "VAT",
"rate": "general",
"ext": {
"pl-favat-tax-category": "1"
}
}
]
}
]
}
B2C Invoice (voluntary)
B2C Invoice (voluntary)
B2C invoices are excluded from the mandatory e-invoicing requirement. The tax authority already receives B2C sales data through online fiscal cash registers that transmit receipts to the Central Repository of Cash Registers (CRK). However, businesses may voluntarily issue B2C invoices through KSeF.
Copy
Ask AI
{
"$schema": "https://gobl.org/draft-0/bill/invoice",
"$regime": "PL",
"$addons": [
"pl-favat-v3"
],
"$tags": [
"simplified"
],
"uuid": "019c2849-dd61-7001-8c88-3c6d1aa83f8a",
"type": "standard",
"series": "SIMPLE",
"code": "236",
"issue_date": "2026-02-04",
"currency": "PLN",
"tax": {
"ext": {
"pl-favat-invoice-type": "UPR"
}
},
"supplier": {
"name": "Testowa Firma Sp. z o.o.",
"tax_id": {
"country": "PL",
"code": "9551893317"
},
"addresses": [
{
"street": "ul. Główna 1",
"locality": "Warsaw",
"code": "00-001",
"country": "PL"
}
],
"emails": [
{
"addr": "kontakt@testowa.pl"
}
]
},
"lines": [
{
"i": 1,
"quantity": "10",
"item": {
"name": "Software Development Services",
"price": "100.00",
"unit": "h"
},
"sum": "1000.00",
"taxes": [
{
"cat": "VAT",
"key": "standard",
"rate": "general",
"percent": "23.0%",
"ext": {
"pl-favat-tax-category": "1"
}
}
],
"total": "1000.00"
},
{
"i": 2,
"quantity": "5",
"item": {
"name": "Consulting Services",
"price": "150.00",
"unit": "h"
},
"sum": "750.00",
"taxes": [
{
"cat": "VAT",
"key": "standard",
"rate": "reduced",
"percent": "8.0%",
"ext": {
"pl-favat-tax-category": "2"
}
}
],
"total": "750.00"
}
],
"payment": {
"instructions": {
"key": "credit-transfer",
"detail": "Transfer payment to our bank account",
"credit_transfer": [
{
"iban": "PL61109010140000071219812874",
"name": "Testowa Firma Sp. z o.o."
}
],
"ext": {
"pl-favat-payment-means": "6"
}
}
},
"totals": {
"sum": "1750.00",
"total": "1750.00",
"taxes": {
"categories": [
{
"code": "VAT",
"rates": [
{
"key": "standard",
"ext": {
"pl-favat-tax-category": "1"
},
"base": "1000.00",
"percent": "23.0%",
"amount": "230.00"
},
{
"key": "standard",
"ext": {
"pl-favat-tax-category": "2"
},
"base": "750.00",
"percent": "8.0%",
"amount": "60.00"
}
],
"amount": "290.00"
}
],
"sum": "290.00"
},
"tax": "290.00",
"total_with_tax": "2040.00",
"payable": "2040.00"
}
}
🇵🇱 Invopop resources for Poland
🇵🇱 Invopop resources for Poland
| Compliance | Compliance timeline |
| Apps | |
| Guides | Poland Guide |
| FAQ | Poland FAQ |
| GOBL |
Participate in our community
Ask and answer questions about Poland App →