Invoice Splitter

What is Invoice Splitter

Users may have to manage in production, multi invoices documents without knowing boundaries of each single invoices. The Invoice Splitter API allows users to get these boundaries, enabling then an Invoices API call on each single invoices.

How it Works

You need first to subscribe to the API, by going on the platform : https://platform.mindee.com/ and under Utilities clicking on the product card.

Invoice Splitter is asynchronous it requires:

📘

Note that you can use the sdk

from mindee import Client, product
from time import sleep
from mindee.parsing.common import AsyncPredictResponse

# Init a new client
mindee_client = Client(api_key="my-api-key-here")

# Load a file from disk
input_doc = mindee_client.source_from_path("/path/to/the/file.ext")

# Load a file from disk and enqueue it.
result: AsyncPredictResponse = mindee_client.enqueue_and_parse(
    product.InvoiceSplitterV1,
    input_doc,
)

# Print a brief summary of the parsed data
print(result.document)
const mindee = require("mindee");
// for TS or modules:
// import * as mindee from "mindee";

// Init a new client
const mindeeClient = new mindee.Client({ apiKey: "my-api-key-here" });

// Load a file from disk
const inputSource = mindeeClient.docFromPath("/path/to/the/file.ext");

// Parse the file asynchronously.
const asyncApiResponse = mindeeClient.enqueueAndParse(
  mindee.product.InvoiceSplitterV1,
  inputSource
);

// Handle the response Promise
asyncApiResponse.then((resp) => {
  // print a string summary
  console.log(resp.document.toString());
});
using Mindee;
using Mindee.Input;
using Mindee.Product.InvoiceSplitter;

string apiKey = "my-api-key-here";
string filePath = "/path/to/the/file.ext";

// Construct a new client
MindeeClient mindeeClient = new MindeeClient(apiKey);

// load an input source
var inputSource = new LocalInputSource(filePath);

// call the product asynchronously with auto-polling
var response = await mindeeClient
    .EnqueueAndParseAsync<InvoiceSplitterV1>(inputSource);

// Print a summary of all the predictions
System.Console.WriteLine(response.Document.ToString());

// Print only the document-level predictions
// System.Console.WriteLine(response.Document.Inference.Prediction.ToString());
  • Replace my-api-key-here with your new API key, or use the select an API key feature and it will be filled automatically.
  • Copy and paste the sample code of your desired choice in your application, code environment, terminal etc.
  • Replace /path/to/your/file/png with the path to your document.

API Response

Below is the full sample JSON response you get when you call the API. Since the response is quite verbose, we will walk through the fields section by section.

{
    "api_request": {
        "error": {},
        "resources": [
            "document",
            "job"
        ],
        "status": "success",
        "status_code": 200,
        "url": "https://api.mindee.net/v1/products/mindee/invoice_splitter/v1/documents/9c98445f-b2ae-46eb-99d7-1fb3c2b973a5"
    },
    "document": {
        "id": "9c98445f-b2ae-46eb-99d7-1fb3c2b973a5",
        "inference": {
            "extras": {},
            "finished_at": "2024-01-09T16:16:24.395000",
            "is_rotation_applied": null,
            "pages": [
                {
                    "extras": {},
                    "id": 0,
                    "orientation": {
                        "value": null
                    },
                    "prediction": {}
                },
                {
                    "extras": {},
                    "id": 1,
                    "orientation": {
                        "value": null
                    },
                    "prediction": {}
                },
                {
                    "extras": {},
                    "id": 2,
                    "orientation": {
                        "value": null
                    },
                    "prediction": {}
                }
            ],
            "prediction": {...},
            "processing_time": 2.6746561527252197,
            "product": {
                "features": [
                    "invoice_page_groups"
                ],
                "name": "mindee/invoice_splitter",
                "type": "standard",
                "version": "1.2"
            },
            "started_at": "2024-01-09T16:16:21.580548+00:00"
        },
        "n_pages": 3,
        "name": "mydocument.pdf"
    },
    "job": {
        "available_at": "2024-01-09T16:16:24.406040",
        "id": "0e34b684-c12b-403d-9df7-7865b9976f37",
        "issued_at": "2024-01-09T16:16:21.580548",
        "status": "completed"
    }
}

You can find the prediction within the prediction key found in two locations:

  • In document > inference > prediction for document-level predictions: it contains the invoice page groups: the list of page indexes and its confidence score.
  • In document > inference > pages[ ] > prediction for page-level predictions: it is always empty, as the split i done at document level and not page level.

Each predicted invoice_page_groups contains:

  • a page_indexesdefining the pages belonging to a single invoice
  • a confidence representing a binary score
    • 0: in case the model is not confident in the split.
    • 1: in case the model is confident in the split
{ 
  "prediction": {
    "invoice_page_groups": [
      {
        "confidence": 1.0,
        "page_indexes": [
          0
        ]
      },
      {
        "confidence": 1.0,
        "page_indexes": [
          1,
          2
        ]
      }
    ]
  },
}