Odoslanie e-faktúry cez endpoint SalesInvoice: upload v ľubovoľnom podporovanom formáte, routing a sledovanie stavu.
Odoslanie e-faktúry cez API PSB je najpoužívanejší endpoint. Odošlete XML dokument v ľubovoľnom podporovanom formáte (UBL 2.1, NLCIUS, BIS Billing V3, PINT, CII, XRechnung, Factur-X/ZUGFeRD a ďalšie) a PSB sa postará o automatickú detekciu formátu, validáciu, routing a doručenie cez príslušnú sieť.
POST /api/v1/{partyId}/salesInvoice/send
{partyId} v URL je Peppol identifikátor odosielajúcej organizácie (dodávateľa). Požiadavka obsahuje XML dokument ako body (content-type application/xml). PSB automaticky rozpozná formát dokumentu (UBL 2.1, NLCIUS, BIS Billing V3, PINT, CII, XRechnung, Factur-X/ZUGFeRD, FatturaPA a ďalšie) a validuje dokument voči príslušným pravidlám.
Dôležité: PSB určuje príjemcu na základe
EndpointIDvo Vašom XML dokumente. Ak tento element chýba alebo obsahuje nesprávny identifikátor, odoslanie zlyhá so stavomInvoiceSentError. Uistite sa, že Váš zdrojový systém správne vypĺňa EndpointID. Viac o identifikátoroch a routingu nájdete v článku o Peppol identifikátoroch.
PSB podporuje idempotency cez header požiadavky X-EConnect-DocumentId. Zahrnutím vlastného UUID pri každej upload požiadavke sa zabráni duplicitnému spracovaniu:
X-EConnect-DocumentId: 550e8400-e29b-41d4-a716-446655440000
Ak odošlete rovnaký documentId znova, API vráti 409 Conflict a odosielateľ vie, že dokument už bol spracovaný.
Dôležité: Vždy používajte UUID/GUID ako documentId. Nikdy nepoužívajte číslo faktúry, pretože to spôsobuje problémy pri opätovnom odoslaní opravenej verzie tej istej faktúry. DocumentId má najmenej 6 znakov a nesmie obsahovať
@ani_.
Pred odoslaním faktúry môžete cez queryRecipientParty skontrolovať, či a ako je príjemca dostupný:
POST /api/v1/{partyId}/salesInvoice/queryRecipientParty
V tele požiadavky odovzdávate zoznam identifikátorov, napríklad ["0106:12345678"], alebo objekt s partyIds a metaAttributes. Voliteľné parametre dotazu sú ?preferredDocumentTypeId a ?includeOptions.
Odpoveď obsahuje informácie o:
Pre pokročilé vyhľadávanie vrátane URL Access Pointu a certifikátu AP je k dispozícii samostatná cesta:
GET /api/v1/peppol/deliveryOption?partyIds={id}&documentFamily=Invoice&isCredit=false
Pri neúspešnom doručení PSB automaticky uplatňuje mechanizmus opakovania:
InvoiceSentRetryInvoiceSentError cez Váš webhookČasté chyby pri odosielaní:
InvoiceSentError ako konečný stav.Invalid payload — '{hodnota}' nie je platný xs:decimal na poli sumycbc:TaxInclusiveAmount, cbc:PriceAmount, cbc:LineExtensionAmount) vo vedeckom zápise, ako -1.336061E6 namiesto -1336061.00. Polia súm UBL sú typu xs:decimal a typ XML Schema neumožňuje exponenciálny zápis; platný je iba pevný desatinný zápis s maximálne 2 desatinnými miestami. Vyskytuje sa typicky pri veľkých alebo záporných sumách, ktoré sú interným spracovaním serializované ako double.E, žiadne oddeľovače tisícok). Nahláste problém dodávateľovi odosielajúceho softvéru; eConnect to nemôže opraviť, pretože hodnota sa nachádza v dodanom XML.The string '' is not a valid Decimal value v poli PriceAmountcbc:PriceAmount) obsahuje prázdny reťazec ("") namiesto desatinného čísla na jednom alebo viacerých riadkoch faktúry. xs:decimal neumožňuje prázdny reťazec ako lexikálnu hodnotu. Iná príčina ako vedecký zápis, rovnaká trieda chybového vzoru.queryRecipientPartyPoznámka: SI-UBL 1.2 (Simpler Invoicing 1.2) nie je povolený na sieti Peppol od 1. januára 2024. Faktúry v tomto formáte výsledkujú v
InvoiceSentError. Používajte NLCIUS (SI-UBL 2.0) alebo Peppol BIS Billing V3. SkontrolujteCustomizationIDvo Vašom XML dokumente, ak narazíte na túto chybu.
Úspešný upload vráti 200 OK s identifikátorom dokumentu v PSB. Tento identifikátor použite na sledovanie stavu dokumentu cez API alebo cez webhoky.
Na rozdiel od purchaseInvoice endpoint salesInvoice nemá DELETE. Ide o zámerné rozhodnutie, pretože odoslaná alebo odmietnutá predajná faktúra je udalosť významná pre audit: dokument zostáva dohl'adateľný v auditnej stope aj po tom, ako odoslanie zlyhalo.
Zákazníci sa niekedy pýtajú, či možno odmietnutú predajnú faktúru zastaviť alebo zmazať, napríklad po tom, ako faktúru interné už dobropisovali. Odpoveď znie:
Invalid payload): PSB umiestni dokument do konečného stavu InvoiceSentError. Na túto chybu validácie sa neopakuje. Opakovanie doručenia je oddelené od opakovania 5xx na vlastnom API alebo webhokoch. Dokument nie je dodatočne doručený príjemcovi. Na PSB nie je potrebná žiadna akcia; dokument je v konečnom stave a uchováva sa 90 dní na účely auditu.Tento rozdiel v životnom cykle medzi salesInvoice (bez DELETE) a purchaseInvoice (s DELETE) vyplýva z roly: odchodzia faktúra je obchodný úkon zaznamenaný odosielateľom, ktorý musí byť právne dohl'adateľný; prichodzia faktúra môže byť po úspešnom stiahnutí odstránená z vlastného systému príjemcu.
Štandardne PSB automaticky vyberá najlepší kanál. S parametrom dopytu ?channel={hookId} môžete vynútiť konkrétny kanál doručenia (napr. konkrétnu sieť alebo e-mailový fallback).
Prílohy (PDF, obrázky) sa môžu vložiť ako base64 do UBL dokumentu ako AdditionalDocumentReference. PSB spracúva vložené prílohy správne a doručuje ich spolu s faktúrou.
Poznámka: Endpoint odosielania akceptuje maximálne 24 MB na požiadavku (vrátane HTTP overheadu). Pri prílohách kódovaných v base64 payload narastie o približne 33%, takže 18 MB PDF výsledkuje v požiadavke o veľkosti približne 24 MB. Payloady presahujúce limit sú odmietnuté webovým serverom s HTTP 500 (nie 413), ešte pred aplikačnou validáciou. Zmenšite veľké prílohy alebo ich odošlite cez samostatný kanál.
Tip: Aktuálny štandard Peppol BIS Billing 3.0 podporuje maximálne jednu
OrderReferencena faktúru. Ak sa faktúra vzťahuje na viacero objednávok, musia sa odoslať viaceré faktúry.
Tip: Niektorí príjemcovia hlásia chyby pri faktúrach s XML namespace prefixom (napr.
<urn:Invoice>namiesto<Invoice>). Obe formy sú technicky správny XML podľa W3C špecifikácie. Ak príjemca uvádza toto ako dôvod odmietnutia, nie je to platné odmietnutie v rámci siete Peppol. Príjemca musí používať XML parser, ktorý správne spracúva prefixované aj predvolené namespacy.
Pri odoslaní faktúry môže PSB riešiť aj fiškálne reportovanie. Modul CTC podľa SMP konfigurácie party a cieľovej krajiny určí, či má odísť Peppol-CTC hlásenie (DRR) daňovému úradu. Samostatné volanie neposielate: kde to trasa vyžaduje, hlásenie sa odvodí z tej istej faktúry odoslanej bežným endpointom. Stavové správy a CTC hlásenia sú zahrnuté v cene dokumentu.
Nie každé odoslanie vytvorí DRR. Poľsko ide cez KSeF, nie cez Peppol CTC. Pre Slovensko platí TDD SK len pri domácich transakciách (SK do SK), nie pri každej faktúre BIS Billing do alebo zo Slovenska. Pozri Peppol CTC a ViDA.
Stavové správy o CTC reportovaní sú súčasťou štandardného webhook mechanizmu. PSB poskytuje dôkazové súbory (evidence files) pre každé hlásenie. CTC reportovanie je zahrnuté v cene dokumentu.
XML dokument odošlite ako body na POST /api/v1/{partyId}/salesInvoice/send s Content-Type: application/xml. PSB podporuje viac ako 20 formátov (UBL 2.1, NLCIUS, BIS Billing V3, PINT, CII, XRechnung, Factur-X/ZUGFeRD a ďalšie) a automaticky deteguje formát. Odošlite dokument vo vlastnom formáte a PSB ho validuje voči príslušným XSD a business rules. Príjemca sa určí podľa EndpointID vo Vašom XML; ak chýba alebo je nesprávny, dostanete InvoiceSentError.
Pri každom uploade pridajte hlavičku X-EConnect-DocumentId s unikátnym UUID. Ak zopakujete rovnaké documentId, API odpovie 409 Conflict, čím potvrdí, že dokument už bol spracovaný. Nikdy nepoužívajte číslo faktúry ako documentId, pretože pri opätovnom odoslaní opravenej verzie potrebujete nové ID.
Po úspešnom uploade API vráti identifikátor dokumentu v PSB na sledovanie stavu cez API alebo webhoky. Ak doručenie dokumentu zlyhá (napríklad cez Peppol), PSB zverejní pre každý pokus event InvoiceSentRetry a opakuje až 8-krát počas asi 35 hodín. To je oddelené od opakovania 5xx na vlastnom API alebo webhokoch. Pri definitívnom zlyhaní dostanete event InvoiceSentError.
Nie pri každej faktúre. Modul CTC podľa SMP konfigurácie party a cieľovej krajiny určí, či má odísť Peppol-CTC hlásenie (DRR). Samostatné volanie neposielate. Poľsko ide cez KSeF, nie cez Peppol CTC. Pre Slovensko platí TDD SK len pri domácich transakciách (SK do SK).
Chcete najprv otestovať, či je Váš dokument platný? Použite Validate API.
Vyskúšajte v API