KSeF Kit

Rejections & troubleshooting

KSeF is never a dead end. A known code gets a calm explanation and a concrete next step; an unknown code routes to us. The invoice is held safely — you can always resubmit.

Rejected, held, or queued

First tell three situations apart — they look similar but have completely different causes:

  • Rejected — KSeF actively refused: it didn't accept the invoice and returned a code. Something in the data or the connection needs fixing. See Rejections.
  • Held — we deliberately did not send it, because it isn't a KSeF document or it's a shape we don't file yet. Nothing failed — KSeF simply doesn't apply here, or that invoice shape is on the way. See Held.
  • Queued / blocked — it's waiting to be sent because the free quota is used up or the company profile is incomplete. It's not a KSeF error. See Plans & billing.

In all cases the invoice waits safely and you can resubmit it once the cause is cleared.

Held

Held is a deliberate non-filing — nothing failed. Nothing went to KSeF because either the sale isn't a KSeF document at all, or it's an invoice in a shape we don't file yet. There's no error code, no email alert, and nothing turns red. Each reason below explains what it means, why nothing was filed, and what to do next.

Out of KSeF scope

What it means: a consumer (B2C) sale, or there's no buyer tax ID. KSeF covers business-to-business (B2B) invoices with a Polish NIP — this sale doesn't fall under it.

Why nothing was filed: it simply isn't a KSeF document, so there's nothing to send.

What to do: handle the sale through your usual process (receipt / VAT records). If it was meant to be a business invoice, add the buyer's NIP in Stripe and resubmit.

Out of KSeF scope (EU OSS)

What it means: the sale looks like a digital service to a consumer in another EU country. Those are settled through VAT-OSS (One Stop Shop), not KSeF.

Why nothing was filed: KSeF covers domestic B2B invoices, not EU B2C — that's a different settlement path.

What to do: account for the VAT in your OSS return. There's nothing to do on the KSeF side.

Unsupported domestic rate

What it means: this is a domestic business invoice, but at a 0% or exempt VAT rate. Today we file invoices at 23%, 8% and 5%.

Why nothing was filed: we don't build that rate into FA(3) yet, so we'd rather file nothing than file it wrong. This rate is on the way.

What to do: if the invoice is due now, file it manually in the KSeF taxpayer app for now. Once we add the rate, future invoices like it will file automatically.

Self-invoice

What it means: the buyer's NIP is the same as your own. KSeF won't accept an invoice you issue to yourself (in the schema: Podmiot1 = Podmiot2).

Why nothing was filed: KSeF would reject it anyway — we stop it earlier, before it reaches the authority.

What to do: check the customer's tax ID on the Stripe invoice. If it's a typo, correct the buyer NIP and resubmit.

Multi-rate invoice

What it means: the invoice mixes more than one VAT rate (for example 23% and 8% line items on one document). Today we file single-rate invoices.

Why nothing was filed: we don't build a multi-rate document yet, and we won't file one incorrectly.

What to do: split the sale in Stripe into separate invoices — one per rate — and resubmit them, or file this invoice manually for now. Multi-rate support is on the way.

Foreign-currency correction

What it means: this is a correction (KOR) in a foreign currency carrying Polish VAT. That correction needs the VAT restated in PLN, which we don't file yet.

Why nothing was filed: we don't build this particular correction shape yet. Ordinary PLN corrections and foreign-currency invoices file normally — see Corrections and Currency & NBP.

What to do: if the correction is due, file it manually for now. Support for this case is on the way.

Rejections

From here on these are rejections — cases where KSeF actively refused the invoice and returned a code. Unlike a held invoice, something here needs fixing, on your side or in the connection.

Where the fix lives

Every rejection has a fix target:

  • Stripe — correct the data on the invoice in Stripe and resubmit.
  • KSeF — a connection / token problem; reconnect. See Connecting KSeF.
  • Auto — a transient transmission- or KSeF-side issue; we retry automatically, or you just resubmit.
  • Support — contact us.

Most common codes

Code Meaning Fix
21401 Invoice failed FA(3) schema validation Stripe — check seller/buyer details (NIP, address, country)
21402 Submitted invoice size mismatch Auto — resubmit
21403 Invoice hash mismatch Auto — resubmit with fresh data
21405 Invalid invoice date Stripe — fix the issue date
21407 VAT totals don't add up Stripe — fix amounts / VAT rates
21408 Duplicate — invoice already in KSeF Support — already filed, no action
21301 Invalid NIP number Stripe — fix the buyer NIP
21304 Required NIP is missing Stripe — add the buyer NIP
21478 NIP is not an active VAT payer Stripe — verify the buyer NIP
21440 KSeF session was closed Auto — resubmit
440 Session canceled Auto — resubmit
21470 KSeF key / token is stale KSeF — generate a fresh token and reconnect
450 Authentication failed — invalid token KSeF — see below
401 / 403 / 415 / 425 / 460 Authentication / permission problem KSeF — check the connection and permissions
429 Too many requests to KSeF Auto — wait, we retry
500 / 550 KSeF server error Auto — temporary KSeF issue, we retry

A code not listed here falls through to the generic handler: the invoice waits, and we'll help resolve it.

Authentication failed (450)

This is the most common first-time blocker, and it's not an invoice problem — KSeF couldn't accept your token. Codes 450, 415, 425, 460, 401, 403, 21111 and 21115 all land here.

450 ("invalid token") almost always means one of these:

  1. The token is for the wrong environment. A token generated in the KSeF PROD/DEMO taxpayer app will always fail on TEST (and vice versa). This is the #1 cause for a first TEST filing.
  2. It's an old KSeF 1.0 token. KSeF 1.0 was retired in September 2025 — legacy tokens no longer authenticate.
  3. The token expired, was revoked, or is inactive.
  4. NIP / context mismatch — the token wasn't issued for the company NIP you're filing under.

Fix:

  1. Open the KSeF taxpayer app for the right environment — TEST: https://ap-test.ksef.mf.gov.pl, production: https://ap.ksef.mf.gov.pl. Confirm you're not in PROD/DEMO by mistake.
  2. Generate a fresh KSeF 2.0 token for the company NIP, with the invoice-sending permission.
  3. In Connecting KSeF, confirm the environment selector matches (TEST vs PROD), then paste the new token. The secret fields are write-only — leaving one blank keeps the old value, so actually paste it.
  4. Click Test connection — wait for success before resubmitting.

Codes 415 / 403 mean the token authenticated but lacks the invoice-sending permission — grant it in the taxpayer app, then reconnect. Code 460 is an XAdES certificate problem — check the certificate and private key (PEM) haven't expired and match the environment. Code 21111 is a single-use challenge that expired — just try again.

Authentication blocked (480)

KSeF blocked authentication because it suspects a security incident (code 480), or an attempt used a deceased person's authorization methods (code 470). These are rare and need a manual report to the Ministry of Finance — contact us and we'll help you raise it. The invoice waits safely.

Token expired (21470)

The KSeF token expired or was revoked. Generate a fresh token in the taxpayer app and paste it again in Connecting KSeF. The fix is the same family as Authentication failed (450).

Schema validation (21401)

The invoice structure doesn't match the required FA(3) schema — usually a missing or wrongly-formatted required field. Check the seller/buyer details (NIP, address, country) on the Stripe invoice, correct them, and resubmit.

NIP issues

Covers a missing buyer NIP (21304), an invalid NIP (21301 — wrong checksum or format), and a NIP that isn't an active VAT payer (21478 — the white list). All are fixed on the Stripe invoice: add or correct the customer's Tax ID (type pl_nip), then resubmit. For 21478, confirm the party is genuinely an active VAT payer.

Invoice data issues

The invoice date is invalid (21405) or the VAT totals don't reconcile (21407). Fix the issue date or the line-item amounts / VAT rates on the Stripe invoice and resubmit.

Duplicate invoice

An invoice with this number is already registered in KSeF (21408) or was already sent within the same session (21176). Check whether it was already filed — if so, no action is needed. If you meant to issue a correction, use a credit note (KOR). See Corrections.

Session issues

The submission session was closed (21440), cancelled or timed out (440), accepted no valid invoices (445), is in a state that doesn't allow the operation (21180), or the upload timed out (21208). These are session-level — just resubmit and we'll open a fresh session.

Transmission issues

The uploaded document's size (21402) or hash (21403) didn't match what was declared — usually a transient transmission glitch. Resubmit with fresh data pulled from Stripe.

KSeF-side issues

Rate limiting (429), a server error (500), or an operation cancelled by KSeF for an internal reason (550). These are on the authority's side, not your invoice — we retry automatically. If it persists, we'll look into it for you.

Unknown codes

If KSeF returns a code we haven't mapped yet, the invoice isn't lost — it waits safely and you can resubmit. We route you to us so we can explain it and, if needed, add it to this list. You never hit a dead end.