REST API v1.2Aktualizácia: 04.05.2026

Pre náročnejších zákazníkov ponúkame možnosť využívať služby systému Docflow pomocou JSON REST API na adrese https://api.docflow.ai.

Základné nastavenie

  • Metódy: GET, POST, PUT, PATCH, DELETE
  • Hlavičky: Content-Type: application/json
  • Telo requestu: JSON formát

Používané dátové typy

  • string textový reťazec.
  • bool nadobúda true alebo false.
  • number číslo.
  • float číslo s desatinným miestom.
  • null je žiadna hodnota.
  • DATE je dátum v JSON formáte YYYY-MM-DDTHH:mm:ss.SSS. Viac info tu.
  • SHA256 je string o dĺžke 64 znakov, hexadecimal.
  • ObjectID je string o dĺžke 24 znakov, hexadecimal. Viac info tu.

Zoznam HTTP kódov

  • 200, 204, 205 – OK.
  • 400 – chybná požiadavka.
  • 401 – neprihlásený.
  • 403 – prístup bol zamietnutý kvôli právam.
  • 404 – záznam nebol nájdený.
  • 422 – požiadavka je v poriadku ale nastal iný dôvod zamietnutia.
  • 500 – chyba.

Prihlásenie

Prihlásenie prebieha odoslaním requestu na prihlásenie. API vráti odpoveď a vytvorenú cookie pre session, ktorú je potrebné pri ďalších requestov udržať.
Príklad: session=<xxxxxx>; Expires=Wed, 22 Mar 2023 16:36:40 GMT; HttpOnly; Path=/

Prihlásenie pomocou emailu a hesla

Pre prihlásenie pomocou emailu využívajte Váš účet alebo nový účet. Heslo musí byť zahešované už na strane klienta šifrou SHA256. Email a hash hesla sú súčasťou requestu.

POST /user/login
Headers
Content-Type: application/json
Request
{
    "email": "sample@email.org",
    "password": "29500ac16fcdea35efd35be91d8463fd8bdfa2f2a012955067266db03e46e4dd"
}

Prihlásenie pomocou tokenu

Token si môžete vytvoriť pomocou Web aplikácie, alebo požiadať nás emailom na api@docflow.ai. V requeste môžete posielať doplnkové informácie o zariadení, skripte alebo systéme pre lepšiu identifikáciu.

POST /user/login-by-token
Headers
Content-Type: application/json
Token: 1b722135f1c7d677802f487c73c3000ae8313986
Request
{
    "id": "a63a6ab1ef11b3b1021a9a6",
    "type": "phone",
    "model": "iPhone 13 Pro",
    "vendor": "Apple",
    "ip": "X.X.X.X"
}

Odpoveď

Odpoveď je pre oba spôsoby prihlásenia rovnaká. Nižšie je popísaná základná štruktúra.

{
    "success": true,
    "user": {
        "_id": ObjectID,
        "email": string,
        "name": string,
        "phone": string,
        "currentOwnerId": ObjectID,
        "currentOwnerName": string,
        "currentOwnerIban": string,
        "currentOwnerMailbox": string,
        "owners": {"_id": ObjectID, "name": string, "role": ["admin", "editor", "viewer"]},
        ...
    }
}

Nahrávanie

Nahratie dokumentu

Nahrávanie nefunguje formou multipart/form-data. Funguje formou JSON requestu, kde každá stránka je uvedená v poli origin a telo stránky je odosielané ako BASE64. Viac stránkové dokumenty je teda potrebné rozdeliť na samostatné stránky už na strane klienta. Takto potom môžete spájať rôzne súbory (PDF, PNG, JPEG) do jedného viac stránkového dokumentu.

POST /document
Headers
Content-Type: application/json
Cookie: session=<...>                  # session cookie z prihlásenia
X-DocFlow-OwnerId: <ObjectID>           # voliteľné – projekt pre tento request
Request
{
    "documentType": string, # ID typu dokumentu (napríklad "incomingInvoice")
    "name": string, # názov súboru dokumentu
    "process": 0, # počiatočný stav (0 = čaká na spracovanie)
    "tags": [string], # voliteľné – štítky dokumentu
    "origin": [ # zoznam stránok dokumentu (1-n)
        {
            "name": string, # názov
            "type": string, # MIME typ (napríklad "application/pdf")
            "page": number, # číslo stránky od 0
            "data": "data:application/pdf;base64,JVBERi0xLj..." # BASE64 samostatnej jedinej stránky
        },
        ...
    ]
}
Response
{
    "id": ObjectID, # ID nového dokumentu
    "success": true
}
  • Podporované MIME typy: application/pdf, image/png, image/jpeg a application/xml (napríklad e-faktúra UBL).
  • Viacstranové PDF rozdeľte na jednotlivé stránky na strane klienta – každá stránka je samostatná položka v origin.
  • Či dokument skončí rovno medzi dokumentmi, alebo v Nahrávaní (inbox), určuje nastavenie firmy – prepínač „Kontrola nahrávaných dokumentov". Ak chcete cielene nahrať do inboxu, použite POST /tempfiles.

Nahratie do inboxu (tempbox)

Endpoint nahrá súbor priamo do Nahrávania (inbox) bez vytvorenia dokumentu – v databáze vznikne iba súbor s príznakom temp: true a docId: null. Používateľ ho potom vo web aplikácii zaradí do dokumentu sám. Volá sa jeden request na stránku; stránky patriace k sebe dostanú rovnaké tempId.

POST /tempfiles
Headers
Content-Type: application/json
Cookie: session=<...>                  # session cookie z prihlásenia
X-DocFlow-OwnerId: <ObjectID>           # voliteľné – projekt pre tento request
Request
{
    "name": string, # názov súboru
    "type": string, # MIME typ (napríklad "application/pdf")
    "data": "data:...;base64,...", # BASE64 jednej stránky
    "tempId": string, # rovnaké pre všetky stránky jednej položky
    "index": number, # poradie položky v Nahrávaní
    "page": number, # číslo stránky
    "pageIndex": number, # poradie stránky v položke (od 0)
    "doctype": string # voliteľné – predvolený typ dokumentu
}
Response
{
    "success": true,
    "fileId": ObjectID, # ID súboru v Nahrávaní
    "tempId": string # tempId položky
}
  • Viacstranový súbor nahrávajte po stránkach – rovnaké tempId a index, rastúci pageIndex.
  • index zistíte z GET /tempfiles (najvyšší existujúci + 1).

Vyskúšať naživo

Vyplň token, vyber projekt a súbor a rovno ho nahraj cez toto API.


                        

Vytvorenie prílohy k dokumentu

K existujúcemu dokumentu je možné pripojiť ľubovoľný počet príloh (napríklad sken zmluvy, dodací list, e-mailovú konverzáciu). Príloha sa odosiela ako jeden samostatný súbor – nie je potrebné ju deliť po stránkach. Telo súboru posielate ako BASE64 v poli data.

POST /attachments
Request
{
    "docId": ObjectID, # ID rodičovského dokumentu
    "name": string, # názov súboru (napríklad "zmluva.pdf")
    "title": string, # popisný titulok prílohy
    "type": string, # MIME typ (napríklad "application/pdf")
    "data": "data:application/pdf;base64,JVBERi0xLj..." # BASE64 obsah súboru
}
Response
{
    "_id": ObjectID # ID novej prílohy
}

Zoznam príloh dokumentu

Zoznam všetkých nezmazaných príloh, ktoré patria k zadanému dokumentu.

GET /document/attachments/<doc_id:ObjectID>
Response
[
    {
        "_id": ObjectID, # ID prílohy
        "docId": ObjectID, # ID rodičovského dokumentu
        "userId": ObjectID, # ID používateľa, ktorý prílohu nahral
        "name": string, # názov súboru
        "title": string, # popisný titulok
        "type": string, # MIME typ
        "process": number, # stav spracovania
        "blobName": string, # interný identifikátor blobu (po spracovaní)
        "url": string, # dočasný odkaz na stiahnutie (ak je príloha už uložená v storage)
        "createdAt": DATE,
        "updatedAt": DATE
    },
    ...
]

Detail prílohy

Vráti metadáta jednej konkrétnej prílohy podľa jej ID.

GET /attachments/<id:ObjectID>
Response
{
    "docId": ObjectID, # ID rodičovského dokumentu
    "userId": ObjectID,
    "name": string,
    "title": string,
    "type": string,
    "process": number,
    "blobName": string,
    "url": string, # dočasný odkaz na stiahnutie
    "createdAt": DATE,
    "updatedAt": DATE
}

Úprava prílohy

Aktuálne podporovanou úpravou je zmena popisného titulku prílohy.

PUT /attachments/<id:ObjectID>
Request
{
    "title": string # nový titulok prílohy
}
Response
{}

Vymazanie prílohy

Príloha sa odstráni soft-delete spôsobom – v databáze sa označí ako zmazaná, ale fyzicky zostáva uložená.

DELETE /attachments/<id:ObjectID>
Response
{}

Stiahnutie prílohy

Vráti binárny obsah prílohy s hlavičkami pre stiahnutie. Endpoint je vhodné použiť, ak chcete priamo serverom poslať súbor klientovi. Alternatívne možno použiť dočasný odkaz url z detailu, resp. zoznamu príloh.

GET /attachments/download/<id:ObjectID>

Response tvorí telo súboru s hlavičkami Content-Type: application/octet-stream a Content-Disposition: attachment; filename="<name>".

Získanie informácií o dokumentoch

Verejné info dokumentu

Tento endpoint je verejný a slúži len rýchle overenie existencie dokumentu a získanie ID vlastníka (projektu / firmy). Endpoint nepotrebuje prihlásenie.

GET /document/info/<id:ObjectID>
Response
{
    "id": ObjectID,
    "ownerId": ObjectID
}

Detail dokumentu

GET /document/<id:ObjectID>
Response
{
    "id": ObjectID, # ID dokumentu
    "name": string, # meno dokumentu
    "userId": ObjectID, # ID pridelenej osoby
    "ownerId": ObjectID, # ID vlastníka (projektu / firmy)
    "doctype": string, # typ dokumentu (kategória)
    "type": [...], # zoznam typov suborov
    "step": number, # číslo kroku vo workflow
    "paid": bool, # príznak uhradenia
    ...
    "predicted": bool, # príznak či prebehla predikcia
    "predictions": [...], # zoznam predikcií podľa typu
    "fields": [...], # zoznam vyťažených a skontrolovaných údajov
    "pages": [...], # zoznam stránok s rozmermi, veľkosťou, typom, ocr a url na obrázok
    ...
    "createdAt": DATE, # dátum vytvorenia
    "updatedAt": DATE, # dátum poslednej zmeny
    "cachedAt": DATE,
    ...
}

Zoznam dokumentov

POST /documents/
Request
{
    "sizePerPage": number, # počet záznamov na stránku
    "page": number, # číslo stránky
    "sortField": string, # zoradenie poľa, napríklad "fields.issueDate"
    "sortOrder": number, # zoradenie smer (asc=1, desc=-1)
    "filters": objekt, # viac v sekcii Filtrovanie
    "q": string, # textová hodnota pre fulltext vyhľadávanie
}
Response
{
    "total": number, # počet vyhovujúcich dokumentov
    "data": [DocumentDetail, DocumentDetail, ...], # zoznam dokumentov
}

Zoznam ID dokumentov

POST /documents/ids

Request je rovnaký ako pri zozname dokumentov

Response
{
    "total": number, # počet vyhovujúcich dokumentov
    "data": [ObjectID, ObjectID, ...], # ID dokumentov
}

Filtrovanie

Filtrovať zoznam dokumentov je možné pomocou nasledovných spôsobov a údajov:

  • Fulltextu – použitie argumentu q
  • Parametrických filtrov – použitie argumentu filters
{
    "filters": {
        "createdAtFrom": DATE, # najbežnejšie dátumové filtre sú v roote
        "createdAtTo": DATE,
        "updatedAtFrom": DATE,
        "updatedAtTo": DATE,
        "taxDateFrom": DATE,
        "taxDateTo": DATE,
        "workflow": { # filtrovanie cez číslo kroku vo workflow
            "incomingInvoice": [-1],
            "receipt": [1,2,3,4,5,6, ...] # zoznam krokov pre konkrétny doctype
        },
        "doctype": ["incomingInvoice", ...], # filtrovanie cez doctype
        "exportSystemType": ["incomingInvoice", ...], # filtrovanie cez typ dokladu – viď nižšie
        "fields.issueDate": { # alebo použitie parametrov - údajov, ktoré sú vyťažené
            "operation": "between",
            "value": [DATE, DATE],
        },
        "fields.supplierId": {
            "operation": "in",
            "value": [string, ...],
        }
    }
}

Filtrovanie podľa typu dokladu – exportSystemType

Parameter exportSystemType filtruje dokumenty podľa jednotnej klasifikácie typu dokladu – napríklad prijatá faktúra alebo pokladničný doklad. Typy dokumentov (doctype) sú kategórie konkrétnej firmy: môžu mať vlastné ID a firma ich môže mať pre ten istý druh dokladu aj viac. Hodnoty exportSystemType sú rovnaké vo všetkých firmách aj účtovných systémoch – môžete tak vybrať napríklad všetky prijaté faktúry bez ohľadu na to, ako sa ich kategória v danej firme volá.

  • Hodnotou je zoznam typov; vrátia sa dokumenty, ktoré zodpovedajú ktorémukoľvek z nich. Rovnako ako pri doctype je prijatý aj tvar {"value": [...]}.
  • V kombinácii s doctype musia platiť obe podmienky súčasne.
  • Ak firma nemá žiaden typ dokumentu s danou klasifikáciou, výsledkom je prázdny zoznam. Prázdne pole [] znamená, že sa podľa typu nefiltruje.
  • Neznáma hodnota vráti chybu 400 s kódom INVALID_EXPORT_SYSTEM_TYPE a so zoznamom povolených hodnôt v poli allowed.
  • Filter funguje rovnako pre POST /documents aj POST /documents/ids.

Klasifikáciu má každý typ dokumentu nastavenú pre export do účtovného systému. Ktorý typ dokumentu má akú hodnotu, zistíte z poľa exportSystemType v zozname typov dokumentov.

HodnotaTyp dokladu
outcomingInvoiceVydaná faktúra
incomingInvoicePrijatá faktúra
foreignOutcomingInvoiceZahraničná vydaná faktúra
foreignIncomingInvoiceZahraničná prijatá faktúra
outcomingCreditNoteVydaný dobropis
incomingCreditNotePrijatý dobropis
outcomingAdvanceInvoiceVydaná zálohová faktúra
incomingAdvanceInvoicePrijatá zálohová faktúra
receiptPokladničný doklad
internalDocumentInterný doklad
payableDocumentZáväzkový doklad
receivableDocumentPohľadávkový doklad
Príklad – všetky prijaté faktúry vrátane zahraničných
{
    "filters": {
        "exportSystemType": ["incomingInvoice", "foreignIncomingInvoice"]
    }
}
Response pri neznámej hodnote – HTTP 400
{
    "success": false,
    "errorCode": "INVALID_EXPORT_SYSTEM_TYPE",
    "message": string, # popis chyby v jazyku requestu
    "allowed": ["outcomingInvoice", "incomingInvoice", ...] # všetky povolené hodnoty
}

Projekty

Zoznam projektov

Zoznam projektov/firiem, ktoré má používateľ k dispozícii

GET /owners
Response
[
    {
        "_id": string, # ID projektu
        "companyId": string, # IČO
        "companyName": string, # Oficiálny názov projektu
        "emailDocsSplit": bool, # príznak, či budú nahraté dokumenty rozdelené na jednotlivé strany
        "iban": [
            {
                "iban": string, # IBAN
                "name": string # názov účtu
            },
            ...
        ],
        "mailbox": string, # emailová schránka
        "name": string, # názov projektu
        "taxID": string, # DIČ
        "totalDocumentCount": number, # počet dokumentov
        "type": string, # typ platcu DPH (prázdne ak nie je platca)
        "vatId": string # IČ DPH
    },
    ...
]

Zmena projektu

Bežne budete potrebovať zmeniť vlastníka (projekt / firmu), s ktorou cez API pracujete.

POST /user/change-owner
Request
{
    "id": "a63a6ab1ef11b3b1021a9a2",
}
Response
{
    "_id": ObjectID,
    "email": string,
    "name": string,
    "phone": string,
    "currentOwnerId": ObjectID,
    "currentOwnerName": string,
    "currentOwnerIban": string,
    "currentOwnerMailbox": string,
    "owners": {"_id": ObjectID, "name": string, "role": ["admin", "editor", "viewer"]},
    ...
}

Typy dokumentov

Zoznam typov dokumentov

Typy dokumentu sú vlastne kategórie – priečinky. Každá kategória má vlastné nastavenie parametrov (fields), interného čísla a AI modelu.

GET /doctypes
Response
{
    "id": string, # systémové ID typu dokumentu (napríklad "incomingInvoice")
    "name": string, # názov typu dokumentu (kategórie)
    "short": string, # skratka kategórie
    "year": number, # počet znakov pre rok v internom čísle
    "number": number, # počet znakov pre číslo v internom čísle
    "exportSystemType": string, # klasifikácia typu dokladu pre účtovníctvo (hodnoty viď Filtrovanie)
    "documentsCount": number, # počet dokumentov v kategórii
    "currentOwnerIban": string,
    "currentOwnerMailbox": string,
    "fields": [
        {
            "id": string, # ID použitého fieldu (parametra)
            "required": bool, # príznak či má byť požadovaný
            "validation": bool, # príznak či má byť validovaný
            "invisible": bool, # príznak či má byť skrytý
            "default": string # defaultná hodnota
        },
        ...
    ],
    ...
}

Zoznam fieldov

Fieldy sú jednotlivé parametre, ktoré sa vyťažujú alebo zaznamenávajú pri dokumente (napr. supplierId, issueDate, totalAmount). Niektoré fieldy sú obyčajné textové/číselné položky, iné majú definovaný číselník – zoznam povolených hodnôt v poli option. Cez tieto endpointy si zoznam fieldov vyčítate a (ako admin) upravíte ich číselníky pre konkrétny doctype.

Vráti zoznam všetkých fieldov dostupných pre daného vlastníka – kombinuje systémové fieldy s vašimi vlastnými/upravenými. Ak zadáte doctype, dostanete fieldy upravené pre tento doctype, vrátane jeho číselníka v poli option.

GET /fields?doctype=<doctype>
Response
[
    {
        "_id": string, # ID fieldu (napríklad "supplierId")
        "name": string, # zobrazované meno
        "regular": [string, ...], # regex pre validáciu hodnoty
        "formater": string|[string], # formátovač hodnoty (string alebo zoznam)
        "option": [ # číselník: zoznam povolených hodnôt (môže chýbať)
            {
                "key": string, # kľúč ukladaný do dokumentu
                "value": string # zobrazovaný popis kľúča
            },
            ...
        ],
        "doctypes": [string, ...] # zoznam doctypov, pre ktoré platí prepísanie
    },
    ...
]

Úprava číselníka

Aktualizuje (alebo vytvorí) číselník pre konkrétny field jedného doctype. Endpoint je dostupný len pre admin používateľov. V tele requestu posielate kompletný zoznam položiek číselníka – existujúci sa nahradí. Každá položka musí mať vyplnené key aj value.

PATCH /fields/<doctype:string>/<field_id:string>
Request
{
    "option": [ # nový obsah číselníka (kompletný)
        {
            "key": string, # kľúč ukladaný do dokumentu
            "value": string # zobrazovaný popis kľúča
        },
        ...
    ]
}
Response
{
    "success": true
}

Hromadná úprava číselníkov

Hromadná verzia – v jednom requeste aktualizujete číselníky viacerých fieldov pre rovnaký doctype. Operácia beží v jednej transakcii: ak ktorákoľvek položka zlyhá, zmeny sa neuložia.

PATCH /fields/<doctype:string>
Request
[
    {
        "field": string, # ID fieldu, ktorému sa nastavuje číselník
        "options": [ # nový obsah číselníka (kompletný)
            {"key": string, "value": string},
            ...
        ]
    },
    ...
]
Response
{
    "success": true
}

Workflow

Zoznam workflow

Pre každý typ dokumentu (doctype) môžete mať nastavený vlastný workflow. Tento endpoint vráti workflow pre všetky doctypy naraz. Response obsahuje aj jeden špeciálny kľúč _, ktorý reprezentuje workflow pre dokumenty bez určeného typu.

Workflow je graf krokov. Každý workflow má pevne dané dva špeciálne kroky start a end; medzi nimi sú vlastné kroky (type: "step"). Nasledovník (alebo nasledovníci) každého kroku sú v poli outputs – ide o ID-čka ďalších krokov. Pre archivované a zamknuté dokumenty sa používa hodnota step = -1.

GET /workflow
Response
{
    "_": { # workflow pre dokumenty bez typu
        "doctype": "_",
        "steps": [...]
    },
    "incomingInvoice": { # kľúč = ID doctypu (napr. "incomingInvoice")
        "doctype": "incomingInvoice", # doctype, ku ktorému workflow patrí (alebo "_")
        "steps": [ # zoznam krokov vrátane "start" a "end"
            { # vstupný krok – vždy prítomný, nemazateľný
                "id": "start",
                "name": "Start",
                "type": "start",
                "deletable": false,
                "outputs": ["1"]
            },
            { # bežný krok
                "id": string, # ID kroku (string, použiteľné v outputs)
                "name": string, # názov kroku
                "type": "step", # typ kroku: "start", "step" alebo "end"
                "description": string, # popis kroku
                "assign": [ObjectID, ...], # zoznam ID zodpovedných osôb
                "outputs": [string, ...], # ID nasledujúcich krokov (pri "end" je null)
                "bulk": bool, # príznak či je možné použiť hromadnú akciu na tento krok
                "deletable": bool, # je možné krok vymazať? (start/end vždy false)
                "automationSystem": string|null, # ID napojenej automatizácie (alebo null)
                "automationSystemDuplicateDoctype": string|null # ID doctypu pre duplikát automatizáciou (alebo null)
            },
            ...
            { # výstupný krok – vždy prítomný, nemazateľný
                "id": "end",
                "name": "End",
                "type": "end",
                "deletable": false,
                "outputs": null # pre "end" krok je vždy null
            }
        ]
    },
    ...
}

Workflow konkrétneho doctype

Vráti workflow len pre konkrétny doctype. Pre dokumenty bez typu použite _ ako hodnotu doctype v ceste.

GET /workflow/<doctype:string>
Response
{
    "doctype": string, # doctype, ku ktorému workflow patrí (alebo "_")
    "steps": [...] # zoznam krokov vrátane "start" a "end"
}

Úprava workflow

Prepíše celý zoznam krokov pre daný doctype. Endpoint je dostupný len pre používateľov v role admin. V tele requestu posielate celé pole krokov vrátane start a end; každý krok musí mať unikátne id (nesmie byť 0 ani -1) a všetky ID v outputs musia odkazovať na existujúce kroky.

PUT /workflow/<doctype:string>
Request
[
    {
        "id": "start",
        "name": "Start",
        "type": "start",
        "outputs": ["1"]
    },
    {
        "id": "1",
        "name": string,
        "type": "step",
        "description": string,
        "assign": [ObjectID, ...],
        "outputs": ["end"],
        "bulk": bool,
        "automationSystem": string|null,
        "automationSystemDuplicateDoctype": string|null
    },
    {
        "id": "end",
        "name": "End",
        "type": "end",
        "outputs": null
    }
]
Response
[...] # zoznam krokov vrátane "start" a "end"

Po úspešnej úprave server posiela cez WebSocket signál workflow_updated do roomu vlastníka.

e-Faktúra (UBL)

Docflow vymieňa e-faktúry v štandarde UBL 2.1 / EN 16931 cez sieť Peppol. Každé UBL, ktoré systémom prejde – prijaté zo siete, odovzdané poštárovi, aj nahrané ručne alebo e-mailom – sa archivuje spolu s metadátami o tom, kto, kedy a čo odoslal, a čo na to odpovedal prístupový bod.

Stiahnutie e-faktúr

Čakajúce e-faktúry sa sťahujú automaticky – prístupový bod zavolá náš webhook vždy, keď niečo pribudne. Tento endpoint je záloha pre prípad, že sa tak nestane (chýbajúca registrácia, zlyhané doručenie, výpadok prístupového bodu). Vyvolá presne to isté stiahnutie. Opakované volanie nie je problém: dokument sa z prístupového bodu potvrdí až po tom, čo je naozaj naimportovaný, a súbežné sťahovania si dokumenty medzi sebou rozdelia tak, aby sa každý naimportoval práve raz.

POST /document/pull

Vyžaduje rolu admin alebo editor a aktívny UBL konektor firmy.

Response
{
    "success": true,
    "message": string
}
  • 202 – sťahovanie bolo zaradené
  • 403 FORBIDDEN – používateľ nie je admin ani editor
  • 409 UBL_NOT_ACTIVE – firma nemá aktívny UBL konektor
  • 503 ENQUEUE_FAILED – sťahovanie sa nepodarilo zaradiť

Archív e-faktúry

Vráti, čo je k dokumentu archivované. Dokument môže mať aj obidva smery naraz – prijatý aj odoslaný. Prijatá e-faktúra je vedená pod ID súboru, odoslaná pod ID dokumentu; to je hodnota id, ktorou sa dá vybrať konkrétny záznam pri sťahovaní.

GET /document/<id:ObjectID>/ubl
Response
{
    "success": true,
    "items": [{
        "id": ObjectID, # identifikátor archívneho záznamu
        "fileId": ObjectID, # súbor, ako ktorý bola e-faktúra naimportovaná (null pri odoslanej)
        "direction": "inbound" | "outbound", # prijaté alebo odoslané
        "source": "peppol" | "upload" | "email", # odkiaľ sa UBL vzalo
        "status": string, # stav zo strany prístupového bodu, napr. ACKNOWLEDGED, DELIVERED, ERROR
        "documentId": string, # identifikátor správy v sieti, resp. číslo faktúry
        "providerDocumentId": string, # identifikátor pridelený poštárom (len pri odoslanej)
        "sha256": string, # kontrolný súčet archivovaných bajtov
        "storedAt": DATE,
        "parts": [{ # ktoré časti sú k dispozícii na stiahnutie
            "part": "xml" | "sbdh" | "metadata",
            "size": number,
            "type": string
        }]
    }]
}

Prílohy e-faktúry

Prílohy sa prenášajú priamo v UBL (EN 16931, BG-24) – zabalené v samotnom XML, nie ako samostatné súbory vedľa neho.

  • Pri odoslaní sa do UBL zabalia všetky prílohy dokumentu. Platí to rovnako pre odoslanie poštárovi aj pre stiahnutie XML, takže stiahnutý súbor je presne ten doklad, ktorý dostane príjemca.
  • Pri prijatí sa prílohy z UBL vybalia, uložia do úložiska a objavia sa medzi prílohami dokladu – teda aj v zozname príloh dokumentu.

Čo je možné priložiť, určuje štandard Peppol, nie Docflow:

  • Formáty: pdf, png, jpeg, csv, xlsx, ods
  • Veľkosť: celé UBL vrátane príloh max 16 MB; prílohy sa kódujú do base64 (≈ +33 %), reálne sa teda zmestí asi 11 MB súborov
  • Všetko alebo chyba: ak niektorú prílohu UBL uniesť nevie, odoslanie aj stiahnutie skončí chybou 422 s jej názvom. Doklad nikdy neodíde potichu bez prílohy, o ktorej si odosielateľ myslí, že ju priložil.

Stiahnutie XML a metadát

GET /document/<id:ObjectID>/ubl/<part>

Hodnotou part je jedna z týchto častí:

  • xml – samotná faktúra v UBL
  • sbdh – obálka presne v tej podobe, v akej ju doručila sieť. Je to tá kópia, na ktorej sedí sha256, a existuje len pri prijatých dokumentoch
  • metadata – JSON záznam o výmene vrátane celej odpovede prístupového bodu

Ak má dokument archivovaných viac záznamov (prijatý aj odoslaný), vyberie sa konkrétny parametrom ?id= s hodnotou id zo zoznamu vyššie. Bez neho sa použije prvý záznam.

Response tvorí telo súboru s hlavičkami na stiahnutie. Obsah sa prenáša cez API, nie cez odkaz do úložiska, takže prístup k nemu podlieha rovnakým právam ako samotný dokument.

  • 400 INVALID_UBL_PART – neznáma časť; povolené hodnoty vráti odpoveď v poli allowed
  • 404 UBL_NOT_ARCHIVED – k dokumentu nie je archivované žiadne UBL, UBL_PART_NOT_FOUND – požadovaná časť preň neexistuje
  • 503 STORAGE_UNAVAILABLE – úložisko je nedostupné

Ostatné endpointy

Stiahnutie digitálneho PDF súboru

Pre získanie vygenerovaného PDF kompletného dokumentu so všetkými stranami a metadátami vyťažených údajov môžete použiť nasledovný request. Pre zobrazenie dokumentu vrátane metadát môžete použiť náš Metadata reader

GET /document/download/<id:ObjectID>

Response tvorí potom telo PDF dokumentu s príslušnými hlavičkami na stiahnutie dokumentu. Vygenerovanie PDF môže trvať niekoľko sekúnd. Záleží od počtu stránok.