REST API v1.1Aktualizácia: 27.5.2024

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 desatiný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 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žiadavkaje 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 potom posielajte 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

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, # ID typu dokumentu (napríklad "incomingInvoice")
    "name": string, # názov súboru dokumentu
    "process": 0,
    "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
}

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í podla 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, ...], # ID 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": { # filktrovanie 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
        "fields.issueDate": { # alebo použitie parametrov - údajov, ktoré sú vyťažené
            "operation": "between",
            "value": [DATE, DATE],
        },
        "fields.supplierId": {
            "operation": "in",
            "value": [string, ...],
        }
    }
}

Ostatné endpointy

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 (nepovinné), # 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 (nepovinné), # DIČ
        "totalDocumentCount": number, # počet dokumentov
        "type": string, # typ platcu dph (prázdne ak nie je platca)
        "vatId": string (nepovinné) # IČ DPH
    },
    ...
]

Zmena projektu

Bežne budete potrebovať zmenit vlastníka (projekt / firmu), s ktoru 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, # 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
    "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
        },
        ...
    ],
    ...
}

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žit nasledovný request. Pre zobrazenie dokumentu vrátane metadát môžete použit 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.

Zoznam workflow

Pre každý typ dokumentu môžete mať nastavený Váš workflow. Ku získaniu jeho krokov použite tento endpoint. Response obsahuje aj jeden špeciálny krok _, ktorý sa používa pri dokumentoch, ktoré ešte nemajú určený typ.

Zoznam krokov sa potom nachádza v poli steps a tvoria ho JSON objekty. Číslo kroku je potom offsetom objektu v rámci poľa, teda číslované od 0.
Pre archivované a zamknuté dokumenty sa používa číslo kroku -1.

GET /workflow
Response
{
    _: { # krok pre dokumenty bez typu
        "name": string,
        "steps": [...]
    },
    string: { # doctype ID kroku
        "name": string, # systémové ID typu dokumentu (napríklad "incomingInvoice")
        "steps": [ # zoznam krokov
            { # krok číslo 0
                "assign": ObjectID, # ID zodpovednej osoby
                "name": string, # názov kroku
                "description": string, # popis kroku
                "bulk": bool # príznak či je možné použiť hromadnú akciu na tento krok
            },
            { # krok číslo 1
                "assign": ObjectID,
                "name": string,
                "description": string,
                "bulk": bool
            },
            { # krok číslo 2
                "assign": ObjectID,
                "name": string,
                "description": string,
                "bulk": bool
            },
            ...
        ],
    }
    ...
}

Embedovaný editor

Pre spoločnosti, ktoré majú záujem využívať možnosti vyťažovania údajov zo svojich dokumentov pomocou našej umelej inteligencie priamo v ich informačnom systéme prinášame embedovaný editor. Jednoducho si môžete integrovať náš javascriptový editor do Vašeho IT sytému. Embedovaný editor používa niekoľko endpointov, ktoré sú popísané nižšie a niektoré z nich môžete využiť priamo vo vašom systéme ako napríklad nahrávanie súborov (vrátene preprocessingu), alebo ich vyťažovanie - teda získanie vyťažených údajov.

Video ukážku práce s editorom si môžete pozrieť v tomto videu.

Pre testovanie použite testovací token 15b029f95bf3928cf0f5487276adec1d7f367491265d4aa3a518aeec24d13b0a.
Komunikácia s API potrebuje zadielanie tokenu v hlavičkách.

Headers
Content-Type: application/json
Token: 15b029f95bf3928cf0f5487276adec1d7f367491265d4aa3a518aeec24d13b0a

Testovací editor v JS si môžete stiahnut tu

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 naájete tu. Ak potrebujete pridať nový, kontaktujte nás.

POST /extractor/model/<id:string>
Request
{
    "name": string, # vaše pomenovanie modelu pre lepšiu prehľadnosť
    "fields": ["invoiceNumber", "issueDate", "totalAmount", "paymentVS", "supplierId"] # zoznam fieldov, ktoré model bude vyťažovať
}
Response
{
    "success": bool,
    "id": string
}

Informácie o modeli

Po vytvorení modelu možete o ňom získať podrobnejšie informácie o. Dôležité pre Vás môžu byť informácie o učení. teda kedy naposledy bol model pretrénovaný, na akej vzorke, s akou úspešnosťou.

GET /extractor/model/<id:string>
Response
{
    "id": string, # vaše ID modelu
    "modelId": ObjectID, # naše ID modelu
    "fields": ["invoiceNumber", "issueDate", "totalAmount", "paymentVS", "supplierId", ...] # zoznam fieldov, ktoré model vyťažuje
    "totalDocs": number, # počet dokumentov
    "processDocs": number, # počet dokumentoch vhodných a použitých pre trénovanie
    "datasetProcessingTime": float, # dĺžka prípravy dát pre tréning v sekundách
    "trainingTime": float, # dĺžka tréningu v sekundách
    "trainedAt": DATE, # dátum a čas natrénovania
    "accuracy": float, # úspešnosť (0-1)
    "loss": float, # strata (0-1)
}

Zoznam modelov

Pre získanie zoznamu Vašich modelov slúži tento endpoint.

GET /extractor/models
Response
[
    {
        "id": string, # vaše ID modelu
        "name": string, # vaše pomenovanie
    },
    ...
]

Nahratie dokumetu

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/git, image/ttif. 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, # ID nového dokumentu
    "modelId": string, # vaše ID modelu
}

Získanie údajov dokumentu

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

GET /extractor/doc/<id:ObjectId>
Response
{
    "success": bool,
    "id": ObjectId, # ID dokumentu
    "modelId": string, # vaše ID modelu
    "name": string, # automaticky generovaný názov dokumentu
    "fields": [
        {
            "id": string, # ID fieldu (parametra)
            "value": string, # vyťažená hodnota
            "verified": bool, # príznak či hodnota bola verifikovaná človenok
            "accuracy": float, # presnosť (0-1)
            "bboxIds": [string, string, ...] # formát pageId-wordId (pageId: ObjectId = ID stránky, wordId: number = číslo slova z OCR)
        },
        ...
    ],
    "pages": [...], # zoznam stránok s rozmermi, veľkosťou, typom, ocr a url na obrázok
}