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"]},
...
}
}
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
Request
{
"documentType": string,
"name": string,
"process": 0,
"origin": [
{
"name": string,
"type": string,
"page": number,
"data": "data:application/pdf;base64,JVBERi0xLj..."
},
...
]
}
Response
{
"id": ObjectID,
"success": true
}
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,
"name": string,
"title": string,
"type": string,
"data": "data:application/pdf;base64,JVBERi0xLj..."
}
Response
{
"_id": ObjectID
}
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,
"docId": ObjectID,
"userId": ObjectID,
"name": string,
"title": string,
"type": string,
"process": number,
"blobName": string,
"url": string,
"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,
"userId": ObjectID,
"name": string,
"title": string,
"type": string,
"process": number,
"blobName": string,
"url": string,
"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
}
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>
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>".
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,
"name": string,
"userId": ObjectID,
"ownerId": ObjectID,
"doctype": string,
"type": [...],
"step": number,
"paid": bool,
...
"predicted": bool,
"predictions": [...],
"fields": [...],
"pages": [...],
...
"createdAt": DATE,
"updatedAt": DATE,
"cachedAt": DATE,
...
}
Zoznam dokumentov
POST /documents/
Request
{
"sizePerPage": number,
"page": number,
"sortField": string,
"sortOrder": number,
"filters": objekt,
"q": string,
}
Zoznam ID dokumentov
POST /documents/ids
Response
{
"total": number,
"data": [ObjectID, ObjectID, ...],
}
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,
"createdAtTo": DATE,
"updatedAtFrom": DATE,
"updatedAtTo": DATE,
"taxDateFrom": DATE,
"taxDateTo": DATE,
"workflow": {
"incomingInvoice": [-1],
"receipt": [1,2,3,4,5,6, ...]
},
"doctype": ["incomingInvoice", ...],
"fields.issueDate": {
"operation": "between",
"value": [DATE, DATE],
},
"fields.supplierId": {
"operation": "in",
"value": [string, ...],
}
}
}
Zoznam projektov
Zoznam projektov/firiem, ktoré má používateľ k dispozícii
GET /owners
Response
[
{
"_id": string,
"companyId": string,
"companyName": string,
"emailDocsSplit": bool,
"iban": [
{
"iban": string,
"name": string
},
...
],
"mailbox": string,
"name": string,
"taxID": string,
"totalDocumentCount": number,
"type": string,
"vatId": string
},
...
]
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"]},
...
}
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,
"name": string,
"short": string,
"year": number,
"number": number,
"documentsCount": number,
"currentOwnerIban": string,
"currentOwnerMailbox": string,
"fields": [
{
"id": string,
"required": bool,
"validation": bool,
"invisible": bool,
"default": string
},
...
],
...
}
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,
"name": string,
"regular": [string, ...],
"formater": string|[string],
"option": [
{
"key": string,
"value": string
},
...
],
"doctypes": [string, ...]
},
...
]
Ú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": [
{
"key": string,
"value": string
},
...
]
}
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,
"options": [
{"key": string, "value": string},
...
]
},
...
]
Response
{
"success": true
}
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
{
"_": {
"doctype": "_",
"steps": [...]
},
"incomingInvoice": {
"doctype": "incomingInvoice",
"steps": [
{
"id": "start",
"name": "Start",
"type": "start",
"deletable": false,
"outputs": ["1"]
},
{
"id": string,
"name": string,
"type": "step",
"description": string,
"assign": [ObjectID, ...],
"outputs": [string, ...],
"bulk": bool,
"deletable": bool,
"automationSystem": string|null,
"automationSystemDuplicateDoctype": string|null
},
...
{
"id": "end",
"name": "End",
"type": "end",
"deletable": false,
"outputs": 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,
"steps": [...]
}
Ú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
}
]
Po úspešnej úprave server posiela cez WebSocket signál workflow_updated do roomu vlastníka.
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.
Vytvorenie nového modelu
Pre rôzne typy dokumentov, pre rôzne firmy, projekty či zákazníkov budete potrebovať vlastný model. Pre vytvorenie nového použite tento endpoint.
Každý model musí byť identifikovaný vašim unikátnym ID modelu (string) a taktiež potrebujete špecifikovať, ktoré parametre (fieldy/položky) bude model vyťažovať.
Zoznam všetkých povolených nájdete tu. Ak potrebujete pridať nový, kontaktujte nás.
POST /extractor/model/<id:string>
Request
{
"name": string,
"fields": ["invoiceNumber", "issueDate", "totalAmount", "paymentVS", "supplierId"]
}
Response
{
"success": bool,
"id": string
}
Informácie o modeli
Po vytvorení modelu môžete o ňom získať podrobnejšie informácie. Dôležité pre Vás môžu byť informácie o učení – teda kedy naposledy bol model pretrénovaný, na akej vzorke a s akou úspešnosťou.
GET /extractor/model/<id:string>
Response
{
"id": string,
"modelId": ObjectID,
"fields": ["invoiceNumber", "issueDate", "totalAmount", "paymentVS", "supplierId", ...],
"totalDocs": number,
"processDocs": number,
"datasetProcessingTime": float,
"trainingTime": float,
"trainedAt": DATE,
"accuracy": float,
"loss": float,
}
Zoznam modelov
Pre získanie zoznamu Vašich modelov slúži tento endpoint.
GET /extractor/models
Response
[
{
"id": string,
"name": string,
},
...
]
Nahratie dokumentu
V tomto prípade funguje nahrávanie tak, že pošlete telo dokumentu ako binárny súbor.
Povolené typy dokumentov (content-type) sú application/pdf, image/png, image/jpg, image/jpeg, image/gif, image/tiff.
V prípade PDF súboru, je súbor rozdelený na samostatné stránky, ktoré tvoria ucelený dokument.
POST /extractor/model/<id:string>/upload
Response
{
"success": bool,
"id": ObjectId,
"modelId": string,
}
Získanie údajov dokumentu
Po nahratí dokumentu môžete pomocou tohto endpointu získať vyťažené údaje vrátane jednotlivých polí, ich presnosti, OCR pozícií a zoznamu stránok dokumentu.
GET /extractor/doc/<id:ObjectId>
Response
{
"success": bool,
"id": ObjectId,
"modelId": string,
"name": string,
"fields": [
{
"id": string,
"value": string,
"verified": bool,
"accuracy": float,
"bboxIds": [string, string, ...]
},
...
],
"pages": [...],
}