KSeF FA(3) XML
Main route: POST /wp-json/api/v2/create-ksef-xml — generates FA(3) XML locally. With
integration.use = ksef in the payload, it generates and sends in one step via KSeF via POP.
Helper routes (connected accounts): POST /wp-json/api/v2/ksef/document-get (document status),
POST /wp-json/api/v2/ksef/upo-get (UPO receipt).
What you need
- supplier with country
PLand a valid Polish NIP customer_typemust becompanyorfreelance(notprivate)- sending via KSeF via POP requires a registered legal entity and completed onboarding; on Shopify
it also requires the
Basicplan or higher (on WordPress, direct API, n8n, and MCP, sending no longer requires a paid plan, it uses available credits)
Output
- local generation: raw XML
- KSeF via POP send (
integration.use = ksef): JSON ksef/upo-get: raw XML;ksef/document-get: JSON- errors: always JSON
Good to know
- supported payment codes:
MP01,MP02,MP03,MP05,MP08 - supported fiscal variants: standard VAT, exempt, reverse charge, intra-EU 0% (
ZERO_WDT), export 0% (ZERO_EXPORT) - for credit notes, set
type = credit_notein the shared payload integration.usealso accepts the aliasksef-via-popksef/document-getreturns the provider status (in_queue,processing,valid,invalid,rejected,blocked,approved,draft) translated into a human-readable message- main public error codes:
insufficient_level(Shopify only, plan belowBasic),pop_api_ksef_legal_entity_missing(legal entity not registered),pop_api_ksef_onboarding_required(onboarding incomplete),pop_api_ksef_generation_failed(FA(3) XML could not be generated) connector_exclusive_channel_active(403) — KSeF delivery is blocked while Zoho is the account’s active, connected billing channel; local XML generation is not affected