Only this pageAll pages
Powered by GitBook
1 of 52

English

Loading...

Getting Started

Loading...

Loading...

Loading...

DATA EXTRACTION APP

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

API Setup

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Miscellaneous

Loading...

What is a document template?

In Koncile, a document template is a configuration that defines which information should be automatically extracted from a specific type of document (invoice, contract, etc.).

The application is organized around these document templates, which appear in the sidebar and as cards when you click on the "Documents" tab.

A document template can be fully edited, modified, completed, and even generated by AI within the Koncile interface.

By clicking on a document template, you can access all the files you have processed using that template.

Take a 3-minute test

How to create the perfect extraction schema for your documents

1

Click on "import my documents"

This button allows you to upload any documents into the Koncile application.

2

Select "automatic classification"

Drag and drop your document into the designated area. You can then choose

  • to import it using an existing from your session, or

  • select . In that case, Koncile will determine the appropriate template based on the document.

3

Click on the newly created document template

‍Once the file has been processed, a new document template is created in your interface. Click on it to access the list of documents linked to that template.

4

Select your file

In the list of documents for this template, open your file. In this case, "INVOICE-testfiles.png".

View the extracted data.

5

Download as CSV format

In the options at the top right of your screen, select "Download all document data".

A ZIP folder will be downloaded containing two CSV files:

Welcome to Koncile

Koncile is a next-generation tool for . It goes beyond traditional OCR technology. It is not just about recognizing characters, but about transforming raw, unstructured data into structured and actionable information.

Our platform is designed for all industries and requires no training to get started. Here are some concrete examples of how Koncile is used on a daily basis:

  • Accountants automatically extract pre-tax amounts from invoices. Explore our .

  • Compliance officers retrieve key customer data to speed up KYC checks. Explore our or .

Set up an extraction template

Add and edit fieldsFormat the extracted dataAdd context and instructions

Import and extract documents

Import into a templateClassify automaticallyImport via emailImport supplements or amendmentsRerun extraction

Python guide

Please note that for demo accounts, you can only upload one document at a time.

Depending on the size of the document, processing may take between 5 and 20 seconds.

[Template name]_general.csv which includes the general extracted data

  • [Template name]_lines.csv which includes the extracted table data

  • You can also download data from multiple documents.

    document template
    automatic classification

    Procurement teams build complete databases from the line items listed in supplier invoices.

  • Warehouse managers extract key codes from delivery notes to match them with the corresponding invoices.

  • Explore our library of document templates available in the application.

    You can create or customize what we call “extraction templates”, which are flexible lists of fields to identify in any type of document.

    Every document that enters the platform can be classified with the right template, split if needed, and processed for data extraction. The extracted data can also be enriched, corrected, and matched against a database.

    What sets Koncile apart from traditional OCR tools? You are not limited to data extraction. The platform also allows you to define rules, transform the data, and analyze it directly from the interface.

    Curious to experience the future of data extraction? Try the application and see for yourself how powerful and easy to use Koncile really is.

    document data extraction
    invoice OCR
    ID document OCR
    bank statement OCR

    Duplicate a document template

    1

    Click on the settings of a document templat

    The settings can be accessed by clicking the three dots on each template card.

    2

    Select "Duplicate"

    Add context and instructions

    For each document template, you can add instructions.

    Why add instructions?

    Instructions or context are pieces of information you provide to the tool to help it extract data from your documents more accurately.

    Do the instructions apply to general fields or table fields ?

    Instructions can be provided either for general fields or for repeated fields. The option is available in the context menu.

    Examples of instructions?

    For general fields:

    1. The processed documents are energy bills.

    2. Make sure to include all information from the annexes.

    For table fields:

    1. Ignore total lines.

    2. Only consider rows related to purchased products; ignore transport lines.

    3. Format all extracted countries using the three-letter international code. Example: FRA.

    Create a template from scratch

    You can create a blank document template to add the fields you need.

    1

    Click on "New document template"

    The button is available in the "Documents" tab.

    Use a ready-to-use template

    Koncile offers a of over 100 ready-to-use document templates.

    1

    Click on "New document template"

    The button is available in the "Documents" tab.

    Add and edit fields

    Each document template can be edited. You can add, modify, or delete general fields or table fields.

    1

    Click on "Edit template"

    2

    Classify automatically

    What is auto-classification?

    The Koncile application automatically sorts uploaded documents into the appropriate document template.

    Organize by folders

    All document templates are displayed in the sidebar.

    You can organize them into folders. To create a new folder, click the "New Folder" button in the document templates list.

    You can then move a document template into a folder by clicking the three dots on the template card and selecting "Move Template".

    Next, choose the folder where you want to move the template.

    SDK Libraries

    Set up your development environment to use the Koncile API with an SDK in your preferred language. At the moment, only a python sdk is available.

    You can use the . Get started by installing the SDK using pip :

    Start uploading file, following the page.

    Context Limits

    Each document template includes technical limits designed to ensure optimal performance during data extraction.

    Fields and Instructions

    • General fields: up to 100

    Download raw text data

    You can download the raw text data extracted from the document. Click on a document, then on the three dots in the top right corner of the screen, and select "Download raw text only".

    A .txt file will be generated containing all the textual content of the document.

    Export data

    Rerun extraction

    Rerun the extraction of a document When you've modified a document template, you can rerun the AI extraction by clicking on "Rerun". All fields will be updated accordingly.

    Rerun the extraction for multiple documents In the list of documents within a template, select the files you want to rerun, then click on "Actions", and choose "Rerun".

    Credits Rerun pages will be counted toward your account credits. It is not possible to rerun extraction if the template has not been modified.

    Organize documents

    Move a document to a different template

    Have you uploaded a document to one template but want to move it to another?

    Select the file in question and click on "Assign to another template".

    The extraction will be reprocessed using the target document template, and the initial extracted data will be deleted.

    Export document data

    To download the structured extracted data from a document, click on the document, then on the three dots in the top right corner of your screen, and select "Download extracted data".

    The downloaded ZIP folder will contain two CSV files: one named "general", which includes the general data that appears only once in the document, and another named "lines", which contains the table data.

    Swagger

    The swagger of the Koncile API is available at the following address:

    Delete documents

    By default, documents are stored in the application. If you wish to delete them, select the relevant files from the document list of a template, then click on "Actions" and choose "Delete".

    Security limits

    From an administrator account, you can configure daily and monthly security limits. Once these thresholds are reached, the extraction of new pages is automatically blocked. The application and API will then return a clear error message.

    Accessing security limits

    Click on your name at the bottom left of the screen to open the application settings.

    Then go to "Billing & Usage".

    You can then adjust your daily limits and the number of pages allowed. These limits apply to all users within your company.

    Table fields: up to 15
  • Instructions: up to 5 (combined for general and table fields)

  • Content Size

    • General fields: up to 5,000 characters

    • Table fields: up to 2,000 characters

    • Instructions: up to 2,000 characters

    These limits apply to each document template independently and help maintain stability and processing speed, even with large volumes of data.

    Download raw text data
    Export document data
    Export data from multiple documents
    Organize by folders
    Delete documents
    Move a document to a different template
    Default security limits are displayed when the custom limits are disabled.

    Quick test

    Discover Koncile in 3 minutes

    Application

    Learn how to extract data without coding

    API

    Access the full documentation

    Cover
    Cover
    Cover

    Import supplements or amendments

    Koncile allows you to enrich an existing document by importing one or more supplementary files and selecting the original document to be completed.

    These files are automatically merged with the initial document, which is then fully reprocessed by the tool to extract the updated information.

    API use

    When importing one or multiple files, selecte the document id from the original document, and specify in your request parameters doc_id = the original document id

    2

    Select "From scratch"

    This option allows you to create a blank document template that the user can customize.

    Then enter the template name and, optionally, instructions for automatic classification.

    3

    Click on your template, then select " Edit this document template"

    4

    Fill in your extraction fields and click "Add"

    5

    Import a test file

    6

    Run extraction on the test file

    The extracted data will be displayed directly below the field names.

    You can also generate fields using AI, based on the content of the test document.

    2

    Select "Ready- to use templates""

    In the dropdown list, choose the template you want to use for example, "invoice".

    3

    Click on your template, then select " Edit this document template"

    4

    Customize the template

    You can add, edit, or delete general fields or table fields.

    5

    Run extraction on the test file

    The extracted data will appear directly below the field names.

    library

    Select "General fields" or "Table fields"

    If you want to extract single-instance fields from your document, meaning fields that appear only once, select "General fields".

    If you want to extract repeated fields found in tables, rows, or line items, select "Table fields".

    3

    Add or update fields

    Add the fields you want to extract by providing a name, a description, and a format.

    How to enable auto-classification?

    Method 1: Select "Automatic classification" when uploading

    The tool will automatically choose the most relevant template from the ones available in your interface. If none match, it will select a suitable template from the Koncile template library.

    Method 2: Select "Manual classification" and choose multiple templates

    You can select multiple templates, and for each uploaded document, the tool will determine the most appropriate one.

    How does auto-classification work?

    The tool analyzes the document’s content, title, and metadata to match it with the correct template.

    It also relies on the classification instructions defined for each template to improve accuracy.

    What happens if auto-classification fails?

    If the uploaded file doesn't match any of the templates in your interface, it will appear in the alerts section.

    Official Koncile SDK
    File Uploading
    pip install koncile

    Generate extracted fields using AI

    Koncile’s “Generate with AI” feature allows you to automatically generate field suggestions based on a sample document.

    The tool analyzes the test document and identifies the relevant fields to extract.

    1

    Create a "Blank document template"

    Click on "New document template", then select "From scratch"

    See details on .

    2

    Import a test document

    The imported document will be used by the AI to generate the fields to extract.

    3

    Click on "Generate with AI"

    The tool analyzes the document content to identify fields to extract.

    The creation process may take between 20 seconds and 1 minute.

    4

    Edit the extracted fields

    Then customize the fields generated by the AI.

    How the "Generate with Ai feature works"

    This feature does not delete any existing fields. If you already have fields in place, the tool will simply create additional complementary fields.

    It can only be activated once a test file has been uploaded. Using this feature consumes 1 page credit.

    Import into a template

    After creating your document template, import a document to extract its data based on that template.

    1

    Click on "Import my documents"

    2

    Select "Manual classification"

    You choose the template that will be used to extract your document. For example, below, we select the "Invoice" template.

    Then, click on "Import".

    3

    Check the document processing status

    Click on "See more" at the bottom of the sidebar to check your document's status. It will be marked as "Completed" once the extraction is finished.

    You can click directly on the link to access the extracted data.

    4

    Click on the document template

    To access all the files within a document template, select the template from your sidebar.

    Polling task retrieval

    This example demonstrates how to use the Python requests library to integrate the Koncile API. The script illustrates the following steps:

    1. File Upload: The file is sent to the API via a dedicated endpoint, along with the necessary parameters such as the extraction template and the folder ID.

    2. Retrieval of the Task ID: Once the file is processed, the task ID generated by the API is used to track its status.

    3. Task Processing Monitoring: A polling function periodically checks whether the task is completed before extracting the returned information.

    This script can serve as a starting point for integrating Koncile into your automated systems. Be sure to replace placeholder values (e.g., your-api-key, folder-id, template-id, path-to-file) with your own data.

    API Key generation

    You can generate your API key in the user settings of the application by following the path: Settings > API. Please note, this feature is only accessible to admin users.

    Import via email

    To import an email attachment into the Koncile application, use your unique forwarding address.

    Please note that only attachments sent from the email address associated with your account will be accepted.

    1

    Go to the application settings

    2

    Then click on "Integration email"

    Send your attachments to Koncile by emailing them to this address from the email associated with your account.

    Note

    Each attachment sent by email will be processed as a separate file.

    However, if a PDF contains multiple documents, it will still be treated as a single document.

    Documents will be automatically organized using the features.

    Export data from multiple documents

    To export data from multiple documents, select the documents, then click on "Actions", followed by "Download".

    Next, go to the Downloads tab in the application.

    Once your export is ready, it will appear at the top of the downloads list.

    Use case

    Extract data from a contract

    creating a blank template
    auto-classification
    import requests
    import time
    
    api_key = "your-api-key"
    api_url = "https://api.koncile.ai"
    
    upload_url = f"{api_url}/v1/upload_file/"
    fetch_url = f"{api_url}/v1/fetch_tasks_results/"
    params = {"config_id": 'use-case-id', "class_id": 'file-type-id'}
    file_path = './path-to-file'
    headers = {
        "accept": "application/json",
        "Authorization": f"Bearer {api_key}"
    }
    files = [
        ('files', open(file_path, 'rb')),
    ]
    response = requests.post(upload_url, params=params, headers=headers, files=files)
    
    if response.status_code != 200:
        print(response.status_code)
        print(response.json())
        exit(1)
    
    task_id = response.json()["task_ids"][0]
    
    def poll_until_done(task_id, headers):
        while True:
            response = requests.get(f"{fetch_url}?task_id={task_id}/", headers=headers)
            status = response.json()["status"]
            if status != "IN PROGRESS":
                return response
            print("Task in progress")
            time.sleep(2)
    
    response = poll_until_done(task_id, headers)
    print(response.json()["status"])
    print(response.json()["status_message"])
    
    print(response.json()["General_fields"])
    print(response.json()["Line_fields"])

    Format the extracted data

    You can apply auto-formatting to any extracted field, whether it’s general or repeated.

    The supported formats include:

    Type
    Formatted output

    Text

    Default format. Extracted text without any post-processing.

    Number

    Number format without thousand separators. By default, the comma is used as the decimal separator. Examples: 1034045 or 1,2. You can change the separator to a dot in the settings.

    Date

    Date format. By default, DD/MM/AAAA. You can switch to the American format in the settings.

    Price

    How to choose a field format?

    When creating a field to extract, use the dropdown menu to the right of "Name".

    Template library

    Koncile offers ready-to-use document templates. Start with these templates and then modify them to fit your specific needs.

    Administrative & Legal Documents

    • Certificate of Entitlement

    • Certificate of Incorporation

    • Custom Declaration

    • European Health Insurance Card

    • Identity document

    • IRS notice

    • Passport

    • Residence Permit

    • Single Administrative Document (SAD)

    Banking & Finance

    • Bank Account Details

    • Bank check

    • Bank Statement

    • Checks (bundle)

    Contracts & Agreements

    • Employment contract

    • Non-Disclosure Agreement (NDA)

    • Procurement Contract

    • Purchase order

    Energy & Utilities

    • Energy bill

    • Energy Performance Certificate (EPC)

    • Vodafone invoice

    Healthcare & Insurance

    • Employee’s statement of sickness

    • Home insurance certificate

    • Insurance Claim

    • Prescription

    Identification & Immigration

    • Birth Certificate

    • Certificate of Live Birth

    • Driving license

    • European Health Insurance Card

    Invoicing & Commercial Documents

    • Express transport invoice

    • Invoice

    • Maritime transport invoice

    • Quote

    Logistics & Trade

    • Air Waybill (AWB)

    • Bill of Lading

    • Delivery Note

    • Packing list

    Professional & HR

    • Business card

    • Business card (bundle)

    • Payslip

    • Resume

    Real Estate & Property

    • ALTA Settlement Statement

    • Building Permit Statement

    • Property Status Report

    • Rent Receipt

    Tax & Compliance

    • Property Tax Notice

    • U.S. Corporation Income Tax Return (Form 1120)

    • VAT return (Form VAT100)

    Bubble Plugin

    You can use the Koncile API directly in your Bubble applications thanks to our plugin:

    https://bubble.io/plugin/koncile-ai---advanced-ocr-1733836054037x247444812903219200

    You'll need to create a Koncile account to be able to use the Bubble Plugin.

    Step 1 - Post file

    The plugin gives you access to API actions. To send a file for extraction, select the “Post file” action:

    On your koncile app, you can access the koncile_ids of your folders and extraction templates:

    Use these IDs to fill out the config_id and class_id parameters of the call in the Bubble action:

    You can generate your API key in the user settings of the application by following the path: Settings > API. Please note, this feature is only accessible to admin users:

    Simply copy-paste your API key after “Bearer “ in the Authorization header.

    Note: You might need to trigger this call in a batch or in a loop to send multiple files at once. 1 file - 1 call.

    Step 2 - Fetch results

    Once the file has been sent, you can retrieve the results using the “fetch results” action:

    Trigger this action preferably once the Post file call returns a success code (200). You might need to trigger this call in a loop to make sure you get the full results once the task status is “DONE”. Take a look at the way it is implemented on the Bubble's plugin demo app, with a frontend workflow to post a file followed by a trigger of a backend looping workflow to fetch results.

    The API returns a JSON to exploit as you wish within your Bubble app: to create things for instance. Here is a typical output to exploit:

    Contact us at [email protected] if you have any questions about using the Bubble Koncile plugin!

    API status codes

    Errors

    Koncile uses conventional HTTP response codes to indicate the success or failure of an API request. In general: Codes in the 2xx range indicate success. Codes in the 4xx range indicate an error that failed given the information provided (e.g., a required parameter was omitted, a charge failed, etc.). Codes in the 5xx range indicate an error with Koncile's servers (these are rare).

    Some 4xx errors that could be handled programmatically, with an error message that briefly explains the error reported.

    Status codes

    Status code
    Details
    Definition

    Prompt writing tips

    To achieve the best field extraction quality, you may need to add your own custom fields and/or adjust the description of certain fields.

    Our interface is designed to make your interaction with the tool as simple as possible: just explain what you expect, and the tool will apply your instructions to the relevant extraction template.

    Talk to the tool like an assistant

    Use natural, complete sentences instead of short keywords. For example, instead of writing just total price, say: Add up the prices from all line items.

    Don’t hesitate to share your business expertise: supplier lists, synonyms for the same value, typical field positions on your documents, or specific rules like:

    Web-hook task retrieval

    As an option, you can chose instead of polling, to set up an endpoint that will automatically receive the document's extracted data whenever it is done parsing.

    Setting up

    The setting up of the webhook is made through the platform. You can only set up the web hook if you are a company administrator. This menu can be found in settings -> api.

    Insert the url from your webhook, and test out your path. Once you have a working webhook, the setup is complete on koncile's side. You can move to the Webhook call segment to set up your receival endpoint.

    Public API Documentationapi.koncile.ai
    GitHub - Koncile/koncile-python: The official Python SDK for Koncile, providing a seamless interface to interact with the Koncile API.GitHub
    Merchant statement
  • Payment confirmation

  • Transaction notice

  • Reservation Agreement
  • Residential lease

  • Sales agreement

  • Rental liability insurance certificate
  • Treatment form

  • Identity document
  • Passport

  • Residence Permit

  • Receipt
  • Road transport invoice

  • Product catalog
  • Property Status Report

  • Reservation Agreement
  • Residential lease

  • codes always start with the letter M
    , etc.

    Also define general rules to handle edge cases

    Service or product lines may appear twice in a row. They must be extracted separately, even if they look very similar. Every visible line must be extracted, including duplicates.

    Each extracted line must include a price. Do not extract lines without a price.

    Extract only billing lines. These refer to freight services for international shipments. Each line must always include a label and a price. Do not include headers or totals.

    Always use the same units and currency format for amounts and prices.

    Add examples

    Examples significantly improve extraction quality and help format the output to your needs.

    Field name: Service or product description

    Description: For example: “Pre-carriage (excl. tax)”, “Relocation fees”, “Export handling/documentation charges”, “Ocean freight”, “AMS/ACI security fees”, “Fuel surcharge – pre-carriage”, “BUC – Bunker charge”, etc. Provide the full label including units and amounts.

    Format: Text


    Field name: Transport reference

    Description: On invoices, it’s a 9-digit number starting with 61, located at the end. On credit notes, it appears after the “page 1” number, e.g., “41A0234141”, “21A0620427”, “610156703”.

    Format: Text

    Avoid common errors

    If the tool encounters ambiguities, provide clear instructions.

    Field name: Net amount (excl. tax) per line

    Description: If multiple amounts appear on the line, extract the highest one. If multiple currencies are present, prioritize euros (EUR, €).

    Format: Price


    Field name: Recipient address

    Description: If there are multiple addresses, use the one related to the transport reference with the greatest distance in km, or otherwise the last one listed. If the same address applies to multiple lines, repeat it for each sub-line. This field is rarely empty.

    Format: Text


    Field name: Document date

    Description: Even in French documents, the date may follow the US format (MM/DD/YYYY). Be careful not to confuse the month and day.

    Format: Date

    Leverage the tool's intelligence

    The tool can enrich, validate, and reformat extracted data automatically.

    Field name: Issuing country

    Description: Provide the country code using ISO 3166 standard.

    Format: Text


    Field name: Product category

    Description: Categorize the product using the following options: fruits and vegetables, grains and legumes, dairy products, meats, fish and seafood, fats and oils, sweet products, salt, water, others.

    Format: Text


    Field name: Accounting category

    Description: Specify if it’s fixed expenses, variable costs, salaries, machine maintenance, bank fees, taxes, insurance, subscriptions, or local charges.

    Format: Text


    Field name: Airport code

    Description: Provide the ICAO code for the mentioned airport.

    Format: Text


    Field name: Lease transfer conditions summary

    Description: Summarize in about 20 words the conditions for transferring the lease to a third party, if applicable.

    Format: Text

    Additional tips

    AI doesn’t like blanks

    Models tend to try and fill in everything. If you want to ignore certain lines (e.g., annexes), it’s better to give a clear instruction like: Return “Annex” rather than Do not extract.

    Better to categorize than exclude

    If an invoice includes line items, summaries or annexes that you don't want to use, it’s more effective to extract everything and add a multi-option categorization field such as: Invoice line, Subtotal line, Annex line, Summary line, Estimate line, etc., so you can filter results easily in your system.

    Number format with currency sign. Example : 590€

    Empty

    Field will remain empty. Example :

    Multiple choice

    Values are limited to a predefined list provided by the user. Only selected values will be returned. Example : Choice A

    Boolean

    Logical format. By default, the values are true and false.

    Currency

    Currency according to the ISO 4217 currency standard. Examples: USD, EUR or RMB.

    Unit

    Unit symbols, according to the international standard ISO/IEC 80000, where relevant.

    402

    Request Failed

    The parameters were valid but the request failed.

    403

    Forbidden

    The API key doesn’t have permissions to perform the request.

    404

    Not Found

    The requested resource doesn’t exist.

    422

    Unprocessable Entity

    The request parameters are invalid.

    500, 502, 503, 504

    Server Errors

    Something went wrong on Koncile's end. (These are rare.)

    200

    OK

    Everything worked as expected.

    307

    Temporary Redirect

    The request url is missing the final '/'

    400

    Bad Request

    The request was unacceptable, often due to missing a required parameter.

    401

    Unauthorized

    No valid API key provided.

    Webhook call

    The message sent by the webhook follows the same output as the task retrieval and document fetching

    Example endpoint

    Then go to Koncile, paste http://${your-url}:8000/web-hook/ as the webhook URL, and trigger a test document.

    Then go to Koncile, paste http://${your-url}:8000/web-hook/ as the webhook URL, and trigger a test document.

    Settings page for the web hook
    {
    	"status": DONE | DUPLICATE | IN PROGRESS | FAILED,
    	"document_id": ID,
    	"status_message": "",
    	"General_fields":
    		{
    			"Date" : {"value": "05/08/2022", "confidence_score": 0.99},
    			"Price" : {"value": "23$", "confidence_score": 0.98},
    			"Supplier name" : {"value": "Koncile", "confidence_score": 1}
    		}
    	,
    	"Line_fields":
    		{
    			"Date" : [{"value": "05/08/2022", "confidence_score": 0.97}, {"value" : "05/09/2022", "confidence_score": 0.98}, {"value": "03/02/2023", "confidence_score": 0.99}],
    			"Price" : [{"value": "23$", "confidence_score": 0.98}, {"value": "12$", "confidence_score": 0.97}, {"value": "5$", "confidence_score": 0.98}],
    			"Supplier name" : [{"value": "Koncile", "confidence_score": 0.97}, {"value": "Koncile", "confidence_score": 0.99}, {"value": "Koncile", "confidence_score": 1}]
    		}
    }
    npm init -y
    npm install express body-parser
    webhookReceiver.js
    const express = require("express");
    const bodyParser = require("body-parser");
    
    const app = express();
    app.use(bodyParser.json());
    
    app.post("/web-hook/", (req, res) => {
      console.log("Webhook received:");
      console.log(JSON.stringify(req.body, null, 2));
      res.json({ message: "Webhook received successfully" });
    });
    
    const PORT = 8000;
    app.listen(PORT, () => {
      console.log(`Listening on http://localhost:${PORT}/web-hook/`);
    });
    node webhookReceiver.js
    pip install fastapi uvicorn
    main.py
    from fastapi import FastAPI, Request
    import uvicorn
    
    
    app = FastAPI()
    
    
    @app.post("/web-hook/")
    async def receive_webhook(request: Request):
        payload = await request.json()
        print("\n Webhook received:")
        print(payload)
        return {"message": "Webhook received successfully"}
    
    
    if name == "main":
        print("Listening on http://localhost:8000/web-hook/")
        uvicorn.run("webhook_receiver:app", host="0.0.0.0", port=8000, reload=True)
    
    python webhook_receiver.py
    {
    	"status": DONE | DUPLICATE | IN PROGRESS | FAILED,
    	"document_id": ID,
    	"document_name": str,
    	"status_message": str,
    	"General_fields":
    		{
    			"field_name" : {"value": str, "confidence_score": float},
    			"field_name" : {"value": str, "confidence_score": float}
    		}
    	,
    	"Line_fields":
    		{
    			"field_name" : [{"value": str, "confidence_score": float}, {"value": str, "confidence_score": float}, {"value": str, "confidence_score": float}],
    			"field_name" : [{"value": str, "confidence_score": float}, {"value": str, "confidence_score": float}, {"value": str, "confidence_score": float}]
    		}
    }

    File Uploading

    File upload is a key step to initiate data processing in Koncile. This endpoint allows you to send files for analysis while specifying the necessary parameters, such as the folder identifier (folder_id) and the extraction template (template_id). Once the file is uploaded, the API returns a list of task IDs (task_ids), corresponding to the individual processes associated with your file.

    Auto-classification is applied when the folder id or template id are left empty. Auto-classification will select the folder and templates that fit best the uploaded document. When auto-classification fails, the files have to manually be classified on the platform. Only use this feature if you are using both the api and the platform. For more information, check out the Auto-classify documents

    Upload file

    POSThttps://api.koncile.ai/v1/upload_file

    Upload a list of files to the koncile API

    Limitations

    Maximum number of pages per document: 150

    Supported file formats: PDF, JPEG & PNG

    Maximum file size in MB: 300MB for PDF | 10 MB for PNG/JPEG

    Rate limits: We don't enforce rate limits, but we ask that you use the API responsibly

    Path / Query parameters

    folder_id Integer The id of the folder in which the document will be stored

    template_id Integer The id of the template containing the fields to extract

    doc_id Integer Feature The id from the document the uploaded file will complete. For more informations check the Amendment logic.

    Request body

    files files Required The list of File object (not file name) to be uploaded.

    Returns

    task_ids Integer A list of task ids, used to the generated document

    The example below demonstrates how to make a cURL request to upload a file, including the essential information to be included in the headers and parameters.

    Detailed Response Schema (Returned Schemas)

    Task Retrieval

    The Tasks Retrieval feature of the Koncile API allows you to monitor the real-time status of tasks related to the processing of submitted documents. This feature is essential for integrating automated tracking into your workflows, ensuring optimal management of documents and extracted information.

    When you submit a document to Koncile, it is processed in the background. Using the dedicated Tasks Retrieval endpoint, you can:

    • Check the status of a specific task, whether it is completed (DONE), in progress (IN PROGRESS), duplicate (DUPLICATE), or failed (FAILED).

    • Access general extracted information, such as dates, prices, and supplier names, through structured fields.

    • Retrieve detailed line-level data for more precise and granular processing.

    Retrieve tasks

    GEThttps://api.koncile.ai/v1/fetch_tasks_results

    Fetch the results from the file upload

    Path parameters

    task_id Integer Required The id of the task to retrieve

    Returns

    document_id Integer The id from the extracted document

    status String The document extraction status, can be DONE | DUPLICATE | IN PROGRESS | FAILED

    status_message String More informations about the extraction

    General_Fields Dict The extracted fields present once in the document

    Line_Fields Dict The extracted fields present multiple time in the document lines

    To query a specific task via the Koncile API, use the following command. This cURL command allows you to retrieve the status and associated data of a given task using its `task_id`. Be sure to replace `{task_id}` with the task ID and `$API_KEY` with your personal authentication key.

    Detailed Response Schema (Returned Schemas)

    The API returns a JSON structure containing all the necessary information to analyze the status and extracted data of a task. The response is organized into two main sections:

    1. General_fields: Groups the global data extracted from the document, such as the date, total price, and supplier.

    2. Line_fields: Contains detailed line-level information, allowing for a more granular analysis of individual elements.

    Below, you will find the exact schema of the response, with the various available fields, their types, and examples of values. This structured format makes it easy to integrate the data into your systems or workflows.

    Q&A

    Administration & Settings

    What languages does Koncile support?

    Koncile can analyze documents in any language. The platform itself is currently available in French and English

    Can I create an account for someone else in the same company on Koncile?

    We offer multi-user accounts as part of our Enterprise plan. All users in the company will have access to shared files, extraction templates, and extracted data.

    How can I update my account information?

    To update your account information:

    1. Go to the menu at the bottom left of your screen;

    2. Click on “Settings”;

    Data Extraction

    Why should I describe each field I want to extract?

    This allows the tool to adapt to the document format.

    For example, indicate that the "description" should include the product or service category subtitle, or specify that the weight should be expressed in kilograms rather than tons.

    What document formats are supported?

    You can import the following types of documents into Koncile:

    • PDFs (including PDF/A)

    • Images: PNG, JPEG, and JPG

    The extracted fields on my documents are incorrect, what should I do?

    You can verify that the document does not contain anomalies, such as erased, hidden, or unreadable lines, that might hinder information extraction.

    In some cases, extraction templates may need refinement to account for the specificities of certain documents.

    What type of document can I import into Koncile?

    Koncile supports all types of documents for parsing. Explore our template library to discover the wide variety of documents that can be processed. If your document isn’t listed, you can easily create a template from scratch.

    What is processing time?

    Processing a document in the app typically takes between 10 seconds and 1 minute. Larger or more complex documents may require additional time.

    Is it possible to download all the data on the platform?

    In the use case page, you can select all use case and click Download then Data.

    Pricing

    Koncile offers flexible subscription plans to match your document processing needs. You can upgrade anytime from your demo account by clicking Upgrade account in the navigation bar.

    All subscriptions include access to both extraction models: Koncile Pro (the most powerful) and Koncile Lite (the most cost-efficient).

    📅 Monthly plan

    • Billed monthly on the day of enrollment

    You can change your general information, password, and also the platform language here.
    Logo
    retrieve
    curl api.koncile.ai/v1/upload_file/ \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $API_KEY" \
      -d '{
    	  "folder_id": $folder-id,
    	  "template_id": $template-id
       }' \
      -F "[email protected]"
    from koncile_sdk.client import KoncileAPIClient
    from koncile_sdk.clients.fields import FieldFormat
    
    client = KoncileAPIClient(
        api_key=API_KEY
    )
    
    files = [
        "./files/invoice_2f05c4c2-ca00-441a-8efc-f6d0c5a86402.pdf", # exemple file path
        "./files/invoice_31462760-3070-4f7c-ba55-da3fdd6cddf6.pdf", # exemple file path
    ]
    
    response = client.files.upload(
        folder_id=folder_id,
        template_id=template_id,
        file_paths=files
    )
    const { Koncile } = require('koncile-js');
    require('dotenv').config();
    
    const sdk = new Koncile(process.env.API_KEY);
    
    files = [
        "./files/invoice_2f05c4c2-ca00-441a-8efc-f6d0c5a86402.pdf", # exemple file path
        "./files/invoice_31462760-3070-4f7c-ba55-da3fdd6cddf6.pdf", # exemple file path
    ]
    
    const response = await sdk.files.upload(
      folderId,
      templateId,
      files,
    );
    
    {
        "task_ids": ["EOBdOSUX4Uv57YWsLYc4JQ", "cUrsd2ClWXa8vzupWQ2zGQ"]
    }
    curl api.koncile.ai/v1/fetch_tasks_results/?task_id={task_id} \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $API_KEY"
    from koncile_sdk.client import KoncileAPIClient
    
    client = KoncileAPIClient(
        api_key=API_KEY,
    )
    
    response = client.tasks.fetch_tasks_results(task_id=task_id)
    const { Koncile } = require('koncile-js');
    require('dotenv').config();
    
    const sdk = new Koncile(process.env.API_KEY);
    
    const response = await sdk.tasks.fetchResults(taskId);
    
    
    {
    	"status": DONE | DUPLICATE | IN PROGRESS | FAILED,
    	"document_id": ID,
    	"document_name": "name",
    	"status_message": "",
    	"General_fields":
    		{
    			"Date" : {"value": "05/08/2022", "confidence_score": 0.99},
    			"Price" : {"value": "23$", "confidence_score": 0.98},
    			"Supplier name" : {"value": "Koncile", "confidence_score": 1}
    		}
    	,
    	"Line_fields":
    		{
    			"Date" : [{"value": "05/08/2022", "confidence_score": 0.97}, {"value" : "05/09/2022", "confidence_score": 0.98}, {"value": "03/02/2023", "confidence_score": 0.99}],
    			"Price" : [{"value": "23$", "confidence_score": 0.98}, {"value": "12$", "confidence_score": 0.97}, {"value": "5$", "confidence_score": 0.98}],
    			"Supplier name" : [{"value": "Koncile", "confidence_score": 0.97}, {"value": "Koncile", "confidence_score": 0.99}, {"value": "Koncile", "confidence_score": 1}]
    		}
    }
  • Cancel anytime, no commitment

  • Manage your subscription in Settings > Usage and Billings > Billing Portal

  • If you exceed your monthly quota, additional credits will be billed at the rate shown in the table below.

  • # Credits
    Monthly price
    Extra credit

    500

    € 109.00

    € 0.22

    1000

    € 199.00

    € 0.20

    1500

    € 289.00

    € 0.19

    2000

    € 379.00

    📆 Annual plan - save more!

    • Billed once upfront at the start of the plan

    • All annual credits are available immediately for use throughout the year

    • If you exceed your annual quota, additional credits will be billed at the rate shown in the table below.

    • Credits are valid only within the subscription period and cannot be carried over past the contract

    # Credits
    Monthly price
    Yearly price
    Extra credit

    6000

    € 99.00

    € 1,188.00

    € 0.20

    12000

    € 179.00

    € 2,148.00

    € 0.18

    18000

    € 259.00

    € 3,108.00

    🔑 How credits work

    • 1 credit = 1 Koncile Pro page

    • 1 credit = 2 Koncile Lite pages

    • Rerun (reprocessing a page): consumes the same credits as the initial extraction

    • Unused credits expire at the end of each billing period and do not carry over

    Example: With the 500 credits plan, you can process either 500 Pro pages or 1000 Lite pages (or any combination of the two).

    👥 Users & team management

    • Each subscription includes 2 users

    • Additional users: €5/month (excl. VAT)

    💳 Billing & Taxes

    • All prices are excluding VAT or applicable local taxes

    • Payments are processed securely via our partner Stripe

    • All your invoices are available in the Billing Portal, accessible via Settings > Billing and Usage

    Instructions

    Instructions are taken into account by Koncile to extract the general fields of the line fields.

    Create instruction

    POSThttps://api.openai.com/v1/create_instruction

    Creates an instruction

    Request body

    template_id Integer Required The ID of the template to create the instruction in

    content String Required The instruction's text

    type String Required Defines whether instruction is targetting the fields extracted once (General fields) or for every line (Line fields)

    Returns

    The created object

    Fetching instruction

    GEThttps://api.openai.com/v1/fetch_instruction/{instruction_id}

    Fetches all information about an instruction, using the instruction_id

    Path parameters

    instruction_id Integer Required The id of the instruction to fetch

    Returns

    The object

    Update instruction

    PUThttps://api.openai.com/v1/update_instruction/{instruction_id}

    Updates an instruction, using the instruction_id

    Path parameters

    instruction_id Integer Required The id of the instruction to update

    Request body

    content String The instruction's text

    type String Defines whether instruction is targetting the fields extracted once (General fields) or for every line (Line fields)

    Returns

    The object

    Delete instruction

    DELETEhttps://api.openai.com/v1/delete_instruction/{instruction_id}

    Deletes an instruction, using the instruction_id

    Path parameters

    Instruction_id Integer Required The id of the instruction to update

    Instruction Object

    id Integer

    content String The instruction's text

    type String Whether the instruction has to be extracted once, or for every line. Can be "General fields" or "Line fields"

    template_id Integer The id from the template the instruction is linked to

    Templates

    Templates are created and managed within folders.

    Create template

    POSThttps://api.openai.com/v1/create_template/

    Creates a template

    Path parameters

    template_id Integer Optional Logic for copying another template, using their template_id

    Request body

    folder_id Integer Required The id of the folder inside which the template is created

    name String Required The name of the template to create, unique

    desc String The description of the template to create

    type String Spend accounts only Can be invoice, regular, or grid

    Returns

    The created object

    Fetching template

    GEThttps://api.openai.com/v1/fetch_template/{template_id}

    Fetches all informations about a template, using the template_id

    Path parameters

    template_id Integer Required The id of the template to fetch

    Returns

    The object

    Update template

    PUThttps://api.openai.com/v1/update_template/{template_id}

    Updates a template, using the template_id

    Path parameters

    template_id Integer Required The id of the template to update

    Request body

    name String

    desc String

    type String Spend accounts only Can be invoice, regular, or grid

    Returns

    The object

    Delete template

    DELETEhttps://api.openai.com/v1/delete_template/{template_id}

    Deletes a template, using the template_id

    Path parameters

    template_id Integer Required The id of the template to update

    override Boolean If True forces deletion. Default False

    Template Object

    id Integer

    name String The name of the template

    desc String A more detailled description of the template. Informations can have an impact on the document output.

    type String Spend accounts only Can be invoice, regular, or grid

    folder_id Integer The id from the folder the template is linked to

    Folders

    Folders hold the different types of documents and templates.

    Create folder

    POSThttps://api.openai.com/v1/create_folder

    Creates a folder

    Request body

    Name String Required The name of the folder to create

    Desc String A detailed description of the folder's purpose or content

    Returns

    The created object

    Fetching folder

    GEThttps://api.openai.com/v1/fetch_folder/{folder_id}

    Fetches all information about a folder, using the folder_id

    Path parameters

    Folder_id Integer Required The id of the folder to fetch

    Returns

    The object

    Update folder

    PUThttps://api.openai.com/v1/update_folder/{folder_id}

    Updates a folder, using the folder_id

    Path parameters

    Folder_id Integer Required The id of the folder to update

    Request body

    name String The name of the folder to update

    desc String A detailed description of the folder's purpose or content to update

    Returns

    The object

    Delete folder

    DELETEhttps://api.openai.com/v1/delete_folder/{folder_id}

    Deletes a folder, using the folder_id

    Path parameters

    folder_id Integer Required The id of the folder to delete

    override Boolean If True forces deletion. Default False

    Folder Object

    id Integer

    name String The name of the folder

    desc String A detailed description of the folder's purpose or content

    Fields

    Fields to be extracted

    Create field

    POSThttps://api.openai.com/v1/create_field Creates a field to extract

    Request body

    template_id Integer Required The id of the folder inside which the field is created

    name String Required The name of the field to create, unique

    type String Require Defines whether the field is extracted once (General fields) or for every line (Line fields)

    desc String The description of the field to create

    format String The kind of field to extract, with their custom formatting. By default "text". For all the field formats, please refer to this .

    position Integer The field position in the output, relative to the other fields. Default: appended to the end

    Returns

    The created object

    Fetching field

    GEThttps://api.openai.com/v1/fetch_field/{field_id} Fetches all the informations about a field, using the field_id

    Path parameters

    field_id Integer Required The id of the field to fetch

    Returns

    The object

    Update field

    PUThttps://api.openai.com/v1/update_field/{field_id} Updates a field, using the field

    Path parameters

    field_id Integer Required The id of the field to update

    Request body

    name String The name of the field to create, unique

    desc String The description of the field to create

    format String The kind of field to extract, with their custom formatting. By default "text". For all the field formats, please refer to this .

    type String Defines whether the field is extracted once (General fields) or for every line (Line fields)

    position Integer The field position in the output, relative to the other fields. Default: appended to the end

    Returns

    The object

    Delete field

    DELETEhttps://api.openai.com/v1/delete_field/{field_id} Deletes a field, using the field_id

    Path parameters

    field_id Integer Required The id of the field to update

    Field Object

    id Integer

    name String The name of the field, unique

    desc String The description of the field

    format String The kind of field to extract, with their custom formatting. By default "text". For all the field formats, please refer to this .

    type String Defines whether the field is extracted once (General fields) or for every line (Line fields)

    position Integer The field position in the output, relative to the other fields. Default: appended to the end

    Template_id Integer The id from the template the field is linked to

    € 0.19

    2500

    € 459.00

    € 0.18

    3000

    € 539.00

    € 0.18

    3500

    € 609.00

    € 0.17

    4000

    € 679.00

    € 0.17

    4500

    € 739.00

    € 0.17

    5000

    € 799.00

    € 0.16

    € 0.18

    24000

    € 339.00

    € 4,068.00

    € 0.17

    30000

    € 409.00

    € 4,908.00

    € 0.16

    36000

    € 489.00

    € 5,868.00

    € 0.16

    42000

    € 549.00

    € 6,588.00

    € 0.16

    48000

    € 609.00

    € 7,308.00

    € 0.15

    54000

    € 669.00

    € 8,028.00

    € 0.15

    60000

    € 719.00

    € 8,628.00

    € 0.14

    instruction
    instruction
    instruction
    from koncile_sdk.client import KoncileAPIClient
    
    
    client = KoncileAPIClient(
        api_key=API_KEY
    )
    
    response = client.instructions.create(
        template_id=template_id,
        content=content,
        type=type
    )
    curl api.koncile.ai/v1/create_instruction/ \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $API_KEY" \
      -d '{
        "content": string,
        "template_id": integer
      }'
    const { Koncile } = require('koncile-js');
    require('dotenv').config();
    
    const sdk = new Koncile(process.env.API_KEY);
    
    const response = await sdk.instructions.create(templateId, content, type);
    
    template
    template
    template
    from koncile_sdk.client import KoncileAPIClient
    
    
    client = KoncileAPIClient(
        api_key=API_KEY
    )
    
    response = client.templates.create(
        folder_id=folder_id,
        name=name
    )
    curl api.koncile.ai/v1/create_template/ \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $API_KEY" \
      -d '{
      "name": string,
      "folder_id": int
    }'
    const { Koncile } = require('koncile-js');
    require('dotenv').config();
    
    const sdk = new Koncile(process.env.API_KEY);
    
    const response = await sdk.templates.create(folderId, name);
    
    folder
    folder
    folder
    from koncile_sdk.client import KoncileAPIClient
    
    
    client = KoncileAPIClient(
        api_key=API_KEY
    )
    
    response = client.folders.create(
        name=name,
        desc=desc
    )
    curl api.koncile.ai/v1/create_folder/ \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $API_KEY" \
      -d '{
        "name": "string",
        "desc": "string"
      }'
    const { Koncile } = require('koncile-js');
    require('dotenv').config();
    
    const sdk = new Koncile(process.env.API_KEY);
    
    const response = await sdk.folders.create(
      name,
      desc
    );
    
    page
    field
    field
    page
    field
    page
    from koncile_sdk.client import KoncileAPIClient
    
    
    client = KoncileAPIClient(
        api_key=API_KEY
    )
    
    response = client.fields.create(
        template_id=template_id,
        name=name,
        type=type
    )
    curl api.koncile.ai/v1/create_field/ \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $API_KEY" \
      -d '{
        "template_id": integer,
        "name": "string",
        "type": "string"
      }'
    const { Koncile } = require('koncile-js');
    require('dotenv').config();
    
    const sdk = new Koncile(process.env.API_KEY);
    
    const response = await sdk.fields.create(templateId, name, type);
    curl api.koncile.ai/v1/fetch_instruction/?instruction_id=instruction_id \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $API_KEY"
    from koncile_sdk.client import KoncileAPIClient
    
    
    client = KoncileAPIClient(
        api_key=API_KEY
    )
    
    response = client.instructions.get(
        instruction_id=instruction_id
    )
    const { Koncile } = require('koncile-js');
    require('dotenv').config();
    
    const sdk = new Koncile(process.env.API_KEY);
    
    const response = await sdk.instructions.get(instructionId);
    curl api.koncile.ai/v1/update_instruction/?instruction_id=instruction_id \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $API_KEY"
    from koncile_sdk.client import KoncileAPIClient
    
    
    client = KoncileAPIClient(
        api_key=API_KEY
    )
    
    response = client.instructions.update(
        instruction_id=instruction_id
    )
    const { Koncile } = require('koncile-js');
    require('dotenv').config();
    
    const sdk = new Koncile(process.env.API_KEY);
    
    const response = await sdk.instructions.update(instructionId);
     curl api.koncile.ai/v1/delete_instruction/?instruction_id=instruction_id \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $API_KEY"
    from koncile_sdk.client import KoncileAPIClient
    
    
    client = KoncileAPIClient(
        api_key=API_KEY
    )
    
    response = client.instructions.delete(
        instruction_id=instruction_id
    )
    const { Koncile } = require('koncile-js');
    require('dotenv').config();
    
    const sdk = new Koncile(process.env.API_KEY);
    
    const response = await sdk.instructions.delete(instructionId);
    curl api.koncile.ai/v1/fetch_template/?template_id=template_id \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $API_KEY"
    from koncile_sdk.client import KoncileAPIClient
    
    
    client = KoncileAPIClient(
        api_key=API_KEY
    )
    
    response = client.templates.get(template_id=template_id)
    const { Koncile } = require('koncile-js');
    require('dotenv').config();
    
    const sdk = new Koncile(process.env.API_KEY);
    
    const response = await sdk.templates.get(templateId);
    
    curl api.koncile.ai/v1/update_template/?template_id=template_id \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $API_KEY"
    from koncile_sdk.client import KoncileAPIClient
    
    
    client = KoncileAPIClient(
        api_key=API_KEY
    )
    
    response = client.templates.update(template_id=template_id)
    const { Koncile } = require('koncile-js');
    require('dotenv').config();
    
    const sdk = new Koncile(process.env.API_KEY);
    
    const response = await sdk.templates.update(templateId);
    
    curl api.koncile.ai/v1/delete_template/?template_id=template_id \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $API_KEY"
    from koncile_sdk.client import KoncileAPIClient
    
    
    client = KoncileAPIClient(
        api_key=API_KEY
    )
    
    response = client.templates.delete(template_id=template_id)
    const { Koncile } = require('koncile-js');
    require('dotenv').config();
    
    const sdk = new Koncile(process.env.API_KEY);
    
    const response = await sdk.templates.delete(templateId);
    curl api.koncile.ai/v1/fetch_folder/?folder_id=folder_id \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $API_KEY"
    from koncile_sdk.client import KoncileAPIClient
    
    
    client = KoncileAPIClient(
        api_key=API_KEY
    )
    
    response = client.folders.get(folder_id=folder_id)
    const { Koncile } = require('koncile-js');
    require('dotenv').config();
    
    const sdk = new Koncile(process.env.API_KEY);
    
    const response = await sdk.folders.get(folderId);
    
    
    curl api.koncile.ai/v1/update_folder/?folder_id=folder_id \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $API_KEY"
    from koncile_sdk.client import KoncileAPIClient
    
    
    client = KoncileAPIClient(
        api_key=API_KEY
    )
    
    response = client.folders.update(folder_id=folder_id)
    const { Koncile } = require('koncile-js');
    require('dotenv').config();
    
    const sdk = new Koncile(process.env.API_KEY);
    
    const response = await sdk.folders.update(folderId);
    curl api.koncile.ai/v1/delete_folder/?folder_id=folder_id \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $API_KEY"
    from koncile_sdk.client import KoncileAPIClient
    
    
    client = KoncileAPIClient(
        api_key=API_KEY
    )
    
    response = client.folders.delete(folder_id=folder_id)
    const { Koncile } = require('koncile-js');
    require('dotenv').config();
    
    const sdk = new Koncile(process.env.API_KEY);
    
    const response = await sdk.folders.delete(folderId);
    
    curl api.koncile.ai/v1/fetch_field/?field_id=field_id \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $API_KEY"
    from koncile_sdk.client import KoncileAPIClient
    
    
    client = KoncileAPIClient(
        api_key=API_KEY
    )
    
    response = client.fields.get(field_id=field_id)
    const { Koncile } = require('koncile-js');
    require('dotenv').config();
    
    const sdk = new Koncile(process.env.API_KEY);
    
    const response = await sdk.fields.get(fieldId);
    
    curl api.koncile.ai/v1/update_field/?field_id=field_id \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $API_KEY"
    from koncile_sdk.client import KoncileAPIClient
    
    
    client = KoncileAPIClient(
        api_key=API_KEY
    )
    
    response = client.fields.update(field_id=field_id)
    const { Koncile } = require('koncile-js');
    require('dotenv').config();
    
    const sdk = new Koncile(process.env.API_KEY);
    
    const response = await sdk.fields.update(fieldId);
    curl api.koncile.ai/v1/delete_field/?field_id=field_id \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $API_KEY"
    from koncile_sdk.client import KoncileAPIClient
    
    
    client = KoncileAPIClient(
        api_key=API_KEY
    )
    
    response = client.fields.delete(field_id=field_id)
    const { Koncile } = require('koncile-js');
    require('dotenv').config();
    
    const sdk = new Koncile(process.env.API_KEY);
    
    const response = await sdk.fields.delete(fieldId);
    

    General fields vs. Repeated fields

    Koncile distinguishes between two types of fields:

    • General fields: These appear only once in a document, such as the date, supplier name, or total invoice amount.

    • Repeated fields: These occur multiple times, like invoice line items (e.g., unit price, service description, or table fields).

    Logo

    Create a document template

    Create a template from scratchUse a ready-to-use templateGenerate extracted fields using AIDuplicate a document template