Skip to main content
Sandbox Only - KSeF 2.0 Production Environment Not Yet AvailableKSeF 2.0 is currently only available in the sandbox environment. The production environment is expected to launch in February 2026 for large taxpayers. This guide uses sandbox credentials and test data.

Introduction

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. Invoices are encoded in FA(3), a strict XML format that enforces standardized fields for domestic and cross-border transactions. The KSeF system validates all submitted invoices in real-time and assigns a unique KSeF ID upon successful clearance. This guide covers two key processes:
  • Party Registration: Registering suppliers in the KSeF system
  • Invoice Issuance: Creating and sending FA(3) invoices through KSeF

Prerequisites

To issue invoices through KSeF, you will need:

Setup

There are three key processes to prepare:
  • Connect the Poland app
  • Configure a party registration workflow
  • Configure an invoice sending workflow
All of the following steps must be carried out from the Invopop Console.
1

Connect the Poland app

  1. Navigate to ConfigurationApps
  2. Find Poland in the app discovery list
  3. Click Connect to activate
Connect KSeF app
The initial connection requires no configuration.
2

Configure party registration workflow

3

Configure invoice sending workflow

KSeF send invoice workflow

Signs and converts the GOBL document into the FA(3) XML format and sends it to KSeF.

Running

In this section, we’ll provide details on how to first register a party (supplier) and then issue invoices on their behalf.
The recommended approach is to perform two steps: first upload the document to the silo, then create a job.

Register a Party

1

Create the Party with Tax ID

For Sandbox: You can use fake Polish Tax IDs (NIP) generated from http://generatory.it/. The sandbox environment doesn’t validate against real company data.
In the Invopop Console, navigate to PartiesSuppliers and click + New Supplier.Create a party entry with the following minimum information:
{
  "$schema": "https://gobl.org/draft-0/party",
  "name": "Test Supplier Sp. z o.o.",
  "tax_id": {
    "country": "PL",
    "code": "9876543210"
  }
}
Click Build, ensure there are no errors, and click Save.
2

Run the Registration Workflow

Once the party is created, find and click the Select Workflow button on the party details page.Select the KSeF Register Party workflow created during setup and click Run Workflow.
In the sandbox environment, registration completes immediately. No additional steps are required to start issuing invoices.
The party will now be in the Registered state and ready to issue invoices through KSeF.

Send an Invoice

Once a party is registered, you can issue invoices on their behalf. 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.
GOBL Invoices sent to KSeF require the following properties:
  • $regime set to PL
  • $addons must include pl-favat-v3 for FA(3) schema compliance
{
  "$schema": "https://gobl.org/draft-0/bill/invoice",
  "$regime": "PL",
  "$addons": ["pl-favat-v3"],
  "uuid": "01927639-c1a0-7f3a-88d9-5b1f2a5e3c4d",
  "type": "standard",
  "series": "INVOICE",
  "code": "001",
  "issue_date": "2026-01-20",
  "currency": "PLN",
  "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": "[email protected]"
      }
    ]
  },
  "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": [
    {
      "i": 1,
      "quantity": "10",
      "item": {
        "name": "Software Development Services",
        "price": "100.00",
        "unit": "h"
      },
      "taxes": [
        {
          "cat": "VAT",
          "key": "standard",
          "rate": "general"
        }
      ]
    },
    {
      "i": 2,
      "quantity": "5",
      "item": {
        "name": "Consulting Services",
        "price": "150.00",
        "unit": "h"
      },
      "taxes": [
        {
          "cat": "VAT",
          "key": "standard",
          "rate": "reduced"
        }
      ]
    }
  ],
  "payment": {
    "instructions": {
      "key": "credit-transfer",
      "detail": "Transfer payment to our bank account",
      "credit_transfer": [
        {
          "iban": "PL61109010140000071219812874",
          "name": "Testowa Firma Sp. z o.o."
        }
      ]
    }
  }
}

For reverse charge invoices, the process is the same but the customer will have a EU VAT ID:
{
  "$schema": "https://gobl.org/draft-0/bill/invoice",
  "$regime": "PL",
  "$addons": ["pl-favat-v3"],
  "$tags": ["reverse-charge"],
  "uuid": "01927639-c1a0-7f3a-88d9-5b1f2a5e3ccf",
  "type": "standard",
  "series": "RC",
  "code": "001",
  "issue_date": "2026-01-20",
  "currency": "PLN",
  "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": [
    {
      "i": 1,
      "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."
    }
  ]
}

{
  "$schema": "https://gobl.org/draft-0/bill/invoice",
  "$regime": "PL",
  "$addons": ["pl-favat-v3"],
  "uuid": "01927639-c1a0-7f3a-88d9-5b1f2a5e3c8b",
  "type": "credit-note",
  "series": "KOR",
  "code": "001",
  "issue_date": "2026-01-20",
  "currency": "PLN",
  "preceding": [
    {
      "type": "standard",
      "series": "INVOICE",
      "code": "001",
      "issue_date": "2026-01-20",
      "reason": "Price correction",
      "ext": {
        "pl-favat-effective-date": "1"
      },
      "stamps": [
        {
          "prv": "favat-ksef-number",
          "val": "1234567890-20260120-ABCD1234-EF"
        }
      ]
    }
  ],
  "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": [
    {
      "i": 1,
      "quantity": "10",
      "item": {
        "name": "Software Development Services",
        "price": "10.00",
        "unit": "h"
      },
      "taxes": [
        {
          "cat": "VAT",
          "key": "standard",
          "rate": "general"
        }
      ]
    }
  ]
}
After creating the invoice in the Console:
  1. Click Build to validate
  2. Click Save to store in the silo
  3. Click Select Workflow and choose the KSeF Send Invoice workflow
  4. Click Run Workflow
The invoice will be validated, converted to FA(3) XML format, and sent to KSeF. Upon successful clearance, it will receive a unique KSeF ID.
For international transactions, the invoice is created and cleared in KSeF just like domestic invoices. Because the foreign recipient cannot log into KSeF, delivery happens outside the platform (via email, EDI, etc.) with the KSeF QR code included for verification.

GOBL Addon Reference

Detailed information about the FA(3)-specific extensions and validations can be found in: You can also use the GOBL Builder to create custom invoices with the Polish regime and FA(3) addon.

Poland FAQ

Find answers to frequently asked questions about invoicing in Poland →

Participate in our community

Ask and answer questions about invoicing in Poland →