Hromadné odoslanie z CSV

Hromadný ingest cez POST /v1/agent/peppol/csv. Nahráte kanonické CSV, z každej faktúry sa zostaví Peppol BIS 3.0 UBL a urobí preflight; v režime send sa každá pripravená faktúra skontroluje na kredit a odošle. Chybné riadky a zlyhania jednotlivých faktúr sa reportujú v odpovedi — nikdy sa ticho nezahodia.

Endpoint je súčasťou Agent API — autentifikuje sa hlavičkami X-API-Key a X-Organization-Id, scope invoice:send. Dodávateľom je vždy odosielajúca organizácia (nikdy sa neberie z CSV).

Endpoint

MetódaCestaScopeHlavičky
POST/v1/agent/peppol/csvinvoice:sendX-API-Key, X-Organization-Id

Telo požiadavky

PoleTypPovinnéPopis
csvBase64string (base64)ÁnoBase64 zakódované kanonické CSV (UTF-8, BOM tolerovaný; oddeľovač , alebo ;).
modepreflight | sendÁnopreflight = len validácia (nerezervuje kredit, neodosiela); send = validácia + rezervácia kreditu + odoslanie pre každú pripravenú faktúru.
autoRepairbooleanNieKeď true, normalizačné zmeny sa aplikujú a faktúra sa odošle; keď false (predvolené), faktúra vyžadujúca úpravu sa zamietne ako needs_repair (len v režime send).
POST /v1/agent/peppol/csv
X-API-Key: efk_pk_test_...
X-Organization-Id: 0a2c1f3e-…
Content-Type: application/json

{
  "csvBase64": "aW52b2ljZV9udW1iZXIsaXNzdWVfZGF0ZSxjdXJyZW5jeSwuLi4=",
  "mode": "preflight"
}

Kanonické CSV

Jeden riadok = jedna položka faktúry. Riadky sa zoskupia do faktúr podľa invoice_number — faktúra s viacerými položkami má viac riadkov s rovnakým číslom (hlavičkové polia sa na každom riadku skupiny opakujú). Dátumy sú vo formáte RRRR-MM-DD, desatinné čísla s desatinnou bodkou (napr. 12.50).

StĺpecPovinnýPopis
invoice_numberÁnoČíslo faktúry; riadky s rovnakým číslom sa zoskupia do jednej faktúry.
issue_dateÁnoDátum vystavenia (RRRR-MM-DD).
due_dateNieDátum splatnosti (RRRR-MM-DD).
tax_point_dateNieDátum dodania / daňový bod (RRRR-MM-DD).
currencyÁnoMena dokladu (napr. EUR).
payment_ibanNieIBAN na úhradu.
payment_vsNieVariabilný symbol.
buyer_nameÁnoNázov odberateľa.
buyer_icoNieIČO odberateľa.
buyer_ic_dphNieIČ DPH odberateľa.
buyer_peppol_idNiePeppol ID odberateľa (napr. 0245:DIČ); keď je uvedené, urobí sa aj SMP lookup.
buyer_streetNieUlica odberateľa.
buyer_cityNieMesto odberateľa.
buyer_zipNiePSČ odberateľa.
buyer_countryNieKód krajiny (napr. SK).
line_descriptionÁnoPopis položky.
line_quantityÁnoMnožstvo (desatinné s bodkou).
line_unitNieMerná jednotka (napr. ks, l, hod).
line_unit_priceÁnoJednotková cena (desatinné s bodkou).
line_vat_rateÁnoSadzba DPH v % (napr. 23).
line_discountNieZľava na riadok.

Príklad CSV

Faktúra OF2026001 s dvoma položkami = dva riadky s rovnakým invoice_number (hlavičkové polia sa opakujú):

invoice_number,issue_date,due_date,currency,payment_iban,payment_vs,buyer_name,buyer_ico,buyer_ic_dph,buyer_peppol_id,buyer_street,buyer_city,buyer_zip,buyer_country,line_description,line_quantity,line_unit,line_unit_price,line_vat_rate,line_discount
OF2026001,2026-06-22,2026-07-06,EUR,SK3112000000198742637541,2026001,Firma ABC s.r.o.,12345678,SK2012345678,0245:2012345678,Hlavná 1,Bratislava,81101,SK,Výmena oleja,1,ks,45.00,23,0
OF2026001,2026-06-22,2026-07-06,EUR,SK3112000000198742637541,2026001,Firma ABC s.r.o.,12345678,SK2012345678,0245:2012345678,Hlavná 1,Bratislava,81101,SK,Motorový olej 5W-30,4,l,12.50,23,0

Odpoveď

Odpoveď je 200 a obsahuje summary (počty), invoices (výsledok po jednotlivých faktúrach) a row_errors (chyby na úrovni riadkov CSV).

{
  "data": {
    "summary": { "total": 2, "ready_or_queued": 1, "failed": 1 },
    "invoices": [
      {
        "invoice_number": "OF2026001",
        "send_ready": true,
        "status": "queued",
        "invoice_id": "b1f0d7a2-…",
        "validation": { "ran": true, "valid": true, "error_count": 0, "warning_count": 0 },
        "repair": []
      },
      {
        "invoice_number": "OF2026002",
        "send_ready": false,
        "status": "rejected",
        "reason": "validation",
        "validation": { "ran": true, "valid": false, "error_count": 1, "warning_count": 0 },
        "repair": [
          {
            "code": "BR-CO-15",
            "message": "Invoice total with VAT must equal total without VAT plus the VAT amount.",
            "severity": "error"
          }
        ]
      }
    ],
    "row_errors": [
      { "row": 5, "column": "line_vat_rate", "message": "Neplatné číslo (sadzba DPH)." }
    ]
  }
}
PoleTypPopis
summaryobjekttotal = počet zostavených faktúr; ready_or_queued = pripravené (preflight) alebo zaradené (send); failed = neúspešné.
invoicespole objektovVýsledok po jednotlivých faktúrach — viď tabuľku nižšie.
row_errorspole objektovChyby na úrovni riadkov CSV: row (1-based), column (voliteľné), message.

Objekt invoice

PoleTypPopis
invoice_numberstringČíslo faktúry z CSV.
send_readyboolean | nullPreflight verdikt; null, keď validátor nebol dostupný.
statusstringLen v režime send: queued | rejected | needs_repair | failed.
reasonstringDôvod zamietnutia / zlyhania: validation | needs_repair | credit | validator_unavailable | build.
invoice_idstring | nullID vytvorenej faktúry (len pri queued).
validationobjektSúhrn behu: ran, valid, error_count, warning_count.
repairpole objektovNálezy validácie: field, code, message, severity.
recipientobjekt | nullVýsledok SMP lookupu, ak CSV obsahoval buyer_peppol_id; inak null.
messagestringĽudsky čitateľná správa (napr. dôvod build / credit zlyhania).
V režime send sa kredit rezervuje len pre faktúry, ktoré sú send_ready: true (a nevyžadujú úpravu, ak nie je autoRepair: true). Faktúra bez kreditu sa zamietne so reason: credit — ostatné faktúry v dávke sa spracujú nezávisle. Najprv si dávku otestujte v režime preflight.

Súvislosti

Na odoslanie jediného dokladu z hotového UBL/CII použite Konektor. Stav doručenia po odoslaní sledujte cez Prijímanie a stavy a Dôkaz o doručení.