Hooky KSeF: registrace a příjem faktur v polském KSeF

Konfigurace outbound hooku KSeF pro automatickou registraci faktur v polském systému elektronické fakturace.

PSB má dva hooky KSeF: outbound hook pro odchozí faktury (prodávající strana / Podmiot1) a inbound hook pro příchozí faktury (kupující strana / Podmiot2). Oba automatizují výměnu s Krajowým Systemem e-Faktur (KSeF), polským národním systémem elektronické fakturace. Outbound hook je popsán níže jako první; inbound hook je uveden na konci této stránky.

Outbound hook KSeF (odchozí, Podmiot1)

Outbound hook KSeF automatizuje registraci odchozích faktur v KSeF. Faktury se transformují z formátu Peppol BIS Billing 3.0 / UBL (interně také BisV3) do polského formátu FA(3) a registrují jako dávka (batch). Zákazník může FA(3) dodat i sám, pak se krok transformace přeskočí. Po úspěšném zpracování hook vrátí UPO (Urzędowe Poswiadczenie Odbioru, oficiální potvrzení o přijetí) a PDF důkaz přes platformu PSB.

Prostředí KSeF (státní správa)

Pro testování a akceptaci nabízí polská státní správa vedle produkčního prostředí ještě dvě další:

ProstředíURLDemohttps://ksef-demo.mf.gov.pl/Testhttps://ksef-test.mf.gov.pl/

Hook podporuje online tok (přímá registrace) i offline tok (když KSeF je dočasně nedostupný, například během denního výpadku). V offline toku se vygeneruje offline PDF na základě offline certifikátu.

Předpoklady
  • Platný online certifikát pro KSeF (.key + .crt; autentizace během online toku)
  • Platný offline certifikát pro KSeF (.key + .crt; QR kódy ve výstupním PDF, jak při online, tak při offline zpracování)
  • Příslušná hesla obou certifikátů
  • Hook musí být aktivován v konfiguraci
Pracovní tok

Po přijetí upozornění na fakturu hook projde sedmi kroky:

KrokAkcePopis1UploadNahraje balík faktur jako dávku do KSeF (POST /v2/sessions/batch)2StatusDotazuje se na stav dávky, dokud se zpracování nedokončí (GET /v2/sessions/{referenceNumber}/status)3RetrieveInvoicesZíská výsledky zpracovaných faktur po stránkách (GET /v2/sessions/{referenceNumber}/invoices)4RetrieveUpoZíská dokument UPO pro danou relaci (GET /v2/sessions/{referenceNumber}/upo)5PrintVygeneruje PDF pro každý dokument na základě dat UPO a verifikačního odkazu a zaregistruje jej jako přílohu6DispatchOdešle všechny uložené události v jedné dávce do Ingestoru7FinalizeVyčistí stav a uzavře relaci

Když KSeF není dostupný (denní výpadek nebo porucha), offline tok se spustí automaticky: vygeneruje se offline PDF přes offline certifikát, poté se faktura odešle běžným kanálem.

Konfigurace

Zaregistrujte hook přes API Hooks:

{
  "id": "ksef-sender",
  "action": "ksef",
  "name": "KSeF Hook Sender",
  "topics": [
    "ClearInvoiceBatched"
  ],
  "output": [
    {
      "when": "200",
      "topic": "SendInvoice"
    },
    {
      "when": "410",
      "topic": "SendInvoice"
    }
  ],
  "init": {
    "onlineCertificate": "{{cesta-k-online-certifikatu}}",
    "onlineCertificatePassword": "{{heslo}}",
    "offlineCertificate": "{{cesta-k-offline-certifikatu}}",
    "offlineCertificatePassword": "{{heslo}}"
  },
  "isActive": true
}
Parametry
ParametrPopisonlineCertificateCesta k souboru online certifikátu pro autentizaci u KSeF během online tokuonlineCertificatePasswordHeslo k online certifikátuofflineCertificateCesta k souboru offline certifikátu, používaného pro generování QR kódů ve výstupním PDFofflineCertificatePasswordHeslo k offline certifikátutopicsTémata, na kterých hook naslouchá. Použijte ClearInvoiceBatched pro odchozí fakturyoutputDefinuje, které téma se odešle pro daný stavový kódisActiveMusí být nastaveno na true pro aktivaci hooku

Důležité: Všechna čtyři pole certifikátu jsou povinná. Online certifikát je potřebný pro autentizaci během online toku. Offline certifikát je potřebný pro generování QR kódů v PDF, při online i offline zpracování.

Stavové kódy
KódPopisVýstupní téma200Faktura úspěšně zaregistrována v KSeF (online)SendInvoice201Faktura úspěšně zaregistrována po offline zpracováníInvoiceCleared410KSeF je offline; spustí se offline tokSendInvoice429Dočasně nedostupný; automatické opakování je naplánovánoInvoiceClearedRetry500Interní chyba serveruInvoiceClearedError

Při stavovém kódu 410 PSB automaticky spustí offline tok. Faktura se pak zpracuje lokálně s offline certifikátem a odešle se, jakmile bude KSeF opět dostupný. Při 429 PSB naplánuje automatické opakování.

Online vs. offline tok

KSeF má denní odstávku, během které systém není dostupný pro dávkovou registraci. Přibližně po 23:00 polského místního času se spustí offline tok, jakmile je KSeF nedosažitelný (stavový kód 410):

  • Online: faktura se přímo zaregistruje v KSeF, stáhne se UPO a vygeneruje se PDF s QR kódy
  • Offline: faktura se zpracuje lokálně, vygeneruje se offline PDF s offline QR kódem přes offline certifikát. Faktura se odešle příjemci, aniž by již byla zaregistrována u KSeF.

Po návratu KSeF se offline zpracované faktury dodatečně zaregistrují a faktura obdrží stavový kód 201 (InvoiceCleared). Faktura se pak znovu neposílá příjemci; dříve odeslaný offline QR kód po této pozdější registraci odkazuje na potvrzenou registraci KSeF.

Referenční číslo KSeF (clearance)

Po online clearance vrátí KSeF referenční číslo. Toto číslo je uvedeno v UPO a v podrobnostech odchozího webhooku, například:

"details": {
  "clearanceReference": "234563218-20260220-50683A000001-11",
  "clearanceSystem": "KSeF"
}

Uchovejte referenční číslo v odesílajícím ERP jako doklad o registraci u KSeF.

Dávkový hook před KSeF (omezení rychlosti)

Při vysokých objemech: umístěte dávkový hook před hook KSeF, aby faktury odcházely do KSeF periodicky (například každých 15 sekund až 1 minutu, nebo maximálně 100 kusů najednou) jako dávka. Integrace tak méně často naráží na rate limity KSeF. Preferovaný vzor témat: ClearInvoice → dávka → ClearInvoiceBatched → hook KSeF. Navíc je potřeba samostatný hook, který publikuje odchozí faktury na téma ClearInvoice (v závislosti na toku).

Příklad dávkového hooku (preferovaný; parametry upravit dle zákazníka):

{
  "id": "batchClearInvoice",
  "name": "Batch Invoices for KSeF",
  "action": "batch://zip?period=00:01:00&maxBatchSize=100&excludePrimaryAttachment=false&includeAdditionalAttachments=true&hashAlgorithm=sha256&includeRefToMetaAttributes=true&targetDocumentTypeId=econnect-docid%3A%3Ahttp%3A%2F%2Fcrd.gov.pl%2Fwzor%2F2025%2F06%2F25%2F13775%3A%3AFaktura%23%23ksef%3A%3A3.0",
  "topics": ["ClearInvoice"],
  "isActive": true
}

Krátká forma akce (stejný cíl FA(3); period například 00:00:15):

batch://zip?period=00:00:15&maxBatchSize=100&excludePrimaryAttachment=false&includeAdditionalAttachments=true&hashAlgorithm=sha256&includeRefToMetaAttributes=true&targetDocumentTypeId=econnect-docid%3A%3Ahttp%3A%2F%2Fcrd.gov.pl%2Fwzor%2F2025%2F06%2F25%2F13775%3A%3AFaktura%23%23ksef%3A%3A3.0
Alternativa: bez tématu ClearInvoice (například Business Central)

Někteří zákazníci nemohou odesílat faktury s tématem ClearInvoice (například Business Central). V takovém případě upravte dávkový hook tak, aby naslouchal na SendInvoice a přesto publikoval ClearInvoiceBatched:

{
  "id": "batchClearInvoice",
  "name": "Batch Invoices for KSeF",
  "action": "batch://zip?period=00:01:00&maxBatchSize=100&excludePrimaryAttachment=false&includeAdditionalAttachments=true&hashAlgorithm=sha256&includeRefToMetaAttributes=true&targetDocumentTypeId=econnect-docid%3A%3Ahttp%3A%2F%2Fcrd.gov.pl%2Fwzor%2F2025%2F06%2F25%2F13775%3A%3AFaktura%23%23ksef%3A%3A3.0",
  "topics": ["SendInvoice"],
  "output": [
    { "when": "200", "topic": "ClearInvoiceBatched" },
    { "when": "500", "topic": "ClearInvoiceBatchedError" },
    { "when": "429", "topic": "ClearInvoiceBatchedRetry" }
  ],
  "isActive": true
}
Často kladené otázky
Proč jsou v init konfiguraci potřebné online i offline certifikát?

PSB používá online certifikát k autentizaci vůči KSeF během online registračního toku. Offline certifikát je potřebný pro QR kódy ve výstupním PDF, a to jak při online, tak při offline zpracování. Všechna čtyři pole (obě cesty k certifikátům a hesla) musí být proto vyplněna.

Co dělá PSB při stavovém kódu 410 nebo 429 od KSeF?

Při 410 je KSeF offline (například během odstávky); PSB spustí offline tok s offline PDF a následně odešle běžným kanálem. Při 429 dočasně není kapacita; PSB automaticky naplánuje opakování na InvoiceClearedRetry.

Jaký topic mám nastavit na hooku pro odchozí faktury do KSeF?

Použijte ClearInvoiceBatched v topics, aby hook naslouchal na správné dávkové notifikace. Objekt output mapuje HTTP stavové kódy na navazující témata jako SendInvoice nebo InvoiceCleared, v závislosti na výsledku registrace.


Inbound hook KSeF (příchozí, Podmiot2)

Inbound hook KSeF zpracovává příchozí faktury pro kupující stranu (Podmiot2). Hook periodicky dotazuje KSeF na nové faktury, získává XML faktury podle čísla KSeF a doručuje jej přes platformu PSB.

Autentizace vůči KSeF probíhá výhradně přes online certifikát (.key + .crt + heslo). Inbound tok nemá offline variantu, na rozdíl od outbound hooku. Při dočasné nedostupnosti KSeF se dotazování opakuje podle nakonfigurované retry-politiky.

Pracovní tok v rámci cyklu dotazování
KrokAkcePopis1FetchDotazuje KSeF na metadata nových faktur v rámci časového okna (POST /v2/invoices/query/metadata). Stránkování přes HasMore / NextPageOffset (vnitřní smyčka); zkrácení přes IsTruncated / HwmDate (vnější smyčka) při více než 10 000 položkách.2ProcessZíská XML faktury podle čísla KSeF (GET /v2/invoices/ksef/{ksefNumber}) a nahraje jej do DocumentCarrier. Duplicitní faktury (HTTP 409) se přeskočí. Po každém úspěšném nahrání se odstraní pending klíč, takže krok lze při opakování zcela obnovit.3CompleteUloží checkpoint (HwmDate ?? ToDate) a naplánuje další cyklus dotazování na následující pevný časový slot.

Pokud během Fetch není nalezena žádná faktura, hook přeskočí přímo na Complete: nic se nezpracuje ani nepublikuje.

Předpoklady inbound hooku
  • Platný online certifikát pro KSeF (.key + .crt) plus odpovídající heslo.
  • Hook musí být aktivován v konfiguraci.
  • Init pole onlineCertificate a onlineCertificatePassword jsou povinná (žádná pole offline certifikátu).

Inbound hook se nastavuje přes TechSupport: zpracování certifikátů je postup výhradně pro technickou podporu, není self-service.

Konfigurace inbound hooku

Parametr action určuje časové okno, do kterého se hook dívá zpět: ksef:inbound?lookbackWindow=<okno>. V init je uveden pouze online certifikát.

Standardní (publikuje na téma ReceiveInvoice):

{
  "id": "ksef-inbound",
  "action": "ksef:inbound?lookbackWindow=08:00:00",
  "name": "KSeF Hook Inbound",
  "publishTopics": ["ReceiveInvoice"],
  "init": {
    "onlineCertificate": "{{cesta-k-online-certifikatu}}",
    "onlineCertificatePassword": "{{heslo}}"
  },
  "isActive": true
}

Po inbound hooku musí vždy následovat navazující hook, který přijatou fakturu dále zpracuje.

Varianta platformy Collabrr: na platformě Collabrr hook naslouchá v tenantu s publishTopics: ["InvoiceReceived"]. Organizace musí být na platformě registrována pro příjem Peppol. Příklad akce: ksef:inbound?lookbackWindow=08.00:00:00.

Parametr lookbackWindow

Parametr lookbackWindow určuje časové okno, do kterého se hook dívá zpět při dotazování/vytváření:

  • V hodinách, například "08:00:00"
  • Ve dnech, například "60.00:00:00"

KSeF omezuje zpětné hledání na maximálně 3 měsíce. Při překročení dojde k chybě:

21405: Błąd walidacji danych wejściowych. - 'dateRange' must not exceed 3 months.

Navíc platí limit rychlosti požadavků vůči KSeF. Vezměte to v úvahu při aktivaci více subjektů s (velkým) lookbackWindow.


Chcete se dozvědět více o elektronické fakturaci v Polsku? Přečtěte si stránku země o polské povinnosti KSeF.

Zobrazit dokumentaci API