REST API v1.0Aktualizácia: 22.2.2023

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.
  • 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
            },
            ...
        ],
    }
    ...
}