---
title: "Klippa DocHorizon Integration"
description: "Klippa DocHorizon, now presented as Doxis AI.dp, extracts structured data from invoices, receipts, identity documents, and bank statements. Agents capture documents with pretrained or custom models, prompt for their own fields, manipulate files, and route results to a human reviewer before release."
url: https://flowrunner.ai/integrations/klippa-dochorizon
date_modified: 2026-09-04T14:07:24-07:00
---

# Klippa DocHorizon

[Document Processing](https://flowrunner.ai/integrations/category/documents-forms)

Klippa DocHorizon, now presented as Doxis AI.dp, extracts structured data from invoices, receipts, identity documents, and bank statements. Agents capture documents with pretrained or custom models, prompt for their own fields, manipulate files, and route results to a human reviewer before release.

27 actions · API key · available

[Klippa DocHorizon website](https://dochorizon.klippa.com/) · [Platform Documentation](https://dochorizon.klippa.com/) · Capability data verified 2026-08-13

1.  A scanned batch of supplier invoices lands in the AP mailbox as a single file
2.  Get Document Info reports the page count and page dimensions without spending a metered read
3.  Render Document produces a thumbnail of every page in the batch
4.  Agent proposes where each invoice starts and ends, and marks the boundaries it is least sure about
5.  List Enabled Models confirms the Financial model is available on the project before anything is spent
6.  Agent posts the contact sheet with the proposed boundaries to the finance channel
7.  The AP lead confirms the boundaries, and only then does the agent split the batch and capture each invoice

## What This Integration Enables

Klippa DocHorizon, which the vendor now presents as Doxis AI.dp, takes a different position from most extraction platforms: you do not build an extractor, you pick a model. Financial reads invoices and receipts, Identity reads identity documents, Salary Slip and Bank Statement read their own document types, and Generic reads anything without a fixed schema. When the pretrained set does not cover a document, Prompt Builder holds a prompt-driven extraction of your own and Model Builder holds a trained model, both addressed by slug and both listed through the same connector. Get Capture Model Schema returns exactly what a model produces, so a flow can be built against real field names rather than against a guess, and List Capture Presets shows the saved configurations that narrow or extend a base model.

Around that sits a document toolkit that does the preparation: merging, splitting by page range, rendering pages as images at whatever sizes you need, and converting mixed incoming formats into one type before any of them are read. Storage matters more here than it looks, because Upload File To Storage returns a file id that every other operation accepts in place of the file, so a document that has to meet three models is sent once and referenced three times. Klippa can also route an extraction to its own reviewer before releasing it, and a job in that state reports back as hitl. FlowRunner treats that as one input among several rather than as the whole answer, because [Orchestration as a Service](https://flowrunner.ai/concepts/orchestration-as-a-service) is about where a decision belongs in the process, not about which vendor happens to own the review screen.

### Without FlowRunner

**Batches separated and keyed by hand**: A scanned run of invoices gets pulled apart page by page and typed into the ledger one document at a time

**An extractor per supplier layout**: Every new supplier means a rule somebody writes and then has to maintain when the template changes

**Processing spend found in arrears**: What document capture cost last month shows up as a line item rather than as a signal during the run

### With FlowRunner

**Boundaries confirmed with the pages in view**: Splits are proposed from rendered thumbnails and agreed before any metered read runs

**A pretrained model per document type**: Invoices, receipts, identity documents, salary slips and bank statements each meet a model built for them

**Spend readable during the month**: Usage statistics are queryable, grouped and filtered, so a run can be checked before it is repeated

## Use Case Scenarios

### Inbox to ledger without a keying step

Supplier invoices arrive as attachments in [Gmail](https://flowrunner.ai/integrations/gmail-service) in every format a supplier might use. Convert Document normalizes them to PDF, Upload File To Storage puts each one in Klippa storage and hands back a file id, and Capture Document Async queues each with the Financial model rather than holding a request open. The agent polls Get Capture Job Status until done, reads the fields with Get Capture Job Result, and posts amounts, tax, dates and line items into [Xero](https://flowrunner.ai/integrations/xero) or [Acumatica](https://flowrunner.ai/integrations/acumatica) with the source file attached to the bill. A digest of what posted and what did not goes to [Slack](https://flowrunner.ai/integrations/slack). Get Usage Statistics runs on a schedule so the finance team sees what the pipeline is spending while the month is still open.

### One document, several questions

An onboarding packet contains a salary slip, a bank statement and an identity document, and each one needs a different model. Rather than sending the content three times, the agent calls Upload File To Storage once per document and reuses the file ids. Get Capture Model Schema is read first so the flow knows the exact field names each model returns, and List Enabled Models confirms which models the project may actually call, since a model that is not enabled is refused before a request is spent. Capture Document To Spreadsheet handles the case where the output is going to a person rather than to a system, returning the extracted data as a spreadsheet instead of JSON. Where the project is hosted matters here: Klippa serves a default host and a German one, and a project exists in one region only, which is worth setting deliberately when the documents carry personal data.

### When Klippa's own reviewer says no

Capture Document Async can carry a Human in the Loop configuration, which routes the extracted data to a Klippa reviewer before it is released. A job in that state reports hitl, and when the reviewer refuses it the job reports rejected with the reason recorded alongside it. The agent reads both, and instead of retrying blindly it acts on the reason. A poor scan goes back to the supplier for a better copy. A wrong document type is rerouted to the model that should have read it. A genuine dispute goes to the AP lead with the rejection text quoted. Get Capture Job Logs is where a job that reached error explains itself, so failures produce a cause rather than a retry loop. One detail governs all of this: a job that reaches closed has had its data purged from Klippa servers, and Cancel Capture Job removes a job and its data too, so the flow reads the result before it does either.

## Human-in-Loop Highlight

Klippa treats several files sent in one capture call as pages of the same document and returns a single result. That is exactly right for a two-page invoice and exactly wrong for a batch scan cut in the wrong place. A split boundary that is one page off does not produce an error: the last page of invoice seven joins invoice eight, one blended record comes back carrying two suppliers and a total that belongs to neither, and every automated check it faces passes, because it is a well-formed result. Every capture is metered per page, so rerunning the batch spends again. FlowRunner's [human-in-the-loop](https://flowrunner.ai/concepts/human-in-the-loop) step therefore lands before the split rather than after the extraction. The agent reads the batch with Get Document Info, renders every page with Render Document, proposes the boundaries, and posts to the finance channel: "Batch scan 2261, 46 pages, 11 invoices proposed. Pages 22 to 24 read as either one invoice with a continuation sheet or two invoices from the same supplier. Confirm the split, or mark 22 to 24 for manual handling." The AP lead answers from a contact sheet in about the time it takes to scroll it, and only then does Split Document run and the metered captures begin.

Agent processes routinely

Detects exception requiring judgment

Clear match Continues automatically

Ambiguous Routes to human via preferred channel

Human decides

Agent resumes with decision

## Agent Capabilities

27 actions

### Document Toolkit

5

-   **Get Document Info** Returns what Klippa can tell about a document without extracting anything from it: content type, metadata, the dimensions of every page, and the permissions the file carries. A cheap first step for deciding how to route a document.
-   **Merge Documents** Merges several documents into one file in the order given, optionally taking only selected page ranges from each. The result comes back as content or is written into Klippa storage for reuse by file id.
-   **Split Document** Splits one document into several files by page range, so a single call can cut an invoice batch into one file per invoice. Each range produces its own file.
-   **Render Document** Renders pages as images at the sizes given, and several sizes can be produced in one call. The operation behind a contact sheet a person can scan quickly.
-   **Convert Document** Converts a document into a PDF or a PNG. Used to normalize mixed incoming formats into one type before anything reads them.

### Storage

2

-   **Upload File To Storage** Uploads a file and returns the file id that every other operation accepts in place of the file itself. Upload once and reference the id when the same document has to meet several models.
-   **Get Storage File** Returns a file previously uploaded to Klippa storage, by its file id.

### Document Capturing

15

-   **Capture Document** Extracts structured data and waits for the result. The model chosen decides what is extracted, from the pretrained Financial, Identity, Salary Slip and Bank Statement models through Generic, and on to Prompt Builder and Model Builder for configurations and models of your own.
-   **Capture Document Async** Queues a document for extraction and returns a job id immediately instead of holding the request open. A Human in the Loop configuration can be attached, which routes the result to a reviewer before release, and a webhook URL can be supplied for the callback.
-   **Capture Document To Spreadsheet** Runs the Generic model over a document and returns the extracted data as a spreadsheet rather than as JSON. Used when the output is going to a person rather than to another system.
-   **List Capture Jobs** Lists the asynchronous capture jobs of one model, newest first, optionally filtered by status, with paging data reporting the total.
-   **Get Capture Job Status** Returns the state of one job: in\_queue, processing, hitl while it waits for a reviewer, done, error, rejected, or closed once the data has been purged. Review details and any rejection reason come back with it.
-   **Get Capture Job Result** Returns the extracted data of a finished job. Read it once the status reports done, and read it before anything moves the job toward closed.
-   **Get Capture Job Logs** Returns the processing log of one job. This is where a job in the error state explains itself, so it is the first thing to read when a capture fails.
-   **Cancel Capture Job** Cancels a job that has not finished, or removes one that has. The job and its data are gone afterwards, so fetch the result first if it is still wanted.
-   **Get Capture Model Schema** Returns the JSON schema of what a capture model produces, so a flow can be built against the exact field names it will receive.
-   **List Capture Presets** Lists the saved presets of a capture model, each with the components it turns on. A preset slug replaces spelling out a configuration on every call.
-   **Get Capture Preset Schema** Returns the JSON schema produced by one preset. A preset can narrow or extend the base model, so this is the schema to build against when one is in use.
-   **List Enabled Models** Lists the capture models enabled on the project. A model that is not enabled cannot be called, so this is the first thing to check when a capture is refused.
-   **List Prompt Builder Configurations** Lists the Prompt Builder configurations on the project, each a prompt-driven extraction of your own addressed by slug.
-   **List Custom Models** Lists the Model Builder models on the project with their slugs and whether each is published. Unpublished models can be included, which helps while one is still being trained.
-   **List Custom Model Versions** Lists the versions of one Model Builder model, reporting which is the default, which is deployed, and each version's training status. Pass a version to pin it rather than following the deployed one.

### Account

5

-   **Get API Key Info** Returns what the configured key is, which organization and project it belongs to, and what it may do. The cheapest authenticated call in the API, so it doubles as a connection check.
-   **Get Usage Statistics** Returns platform usage for the project, which is what the account is billed on. Results can be grouped, ordered and narrowed with filters, so spend is readable during the month rather than after it.
-   **List Human In The Loop Configurations** Lists the review configurations on the project. A configuration slug attached to an asynchronous capture routes the extracted data to a Klippa reviewer before it is released.
-   **Create API Key** Mints a new key on an existing credential and returns it. The key is shown only in that response, so whatever reads it has to store it there and then.
-   **Delete API Key** Revokes a key. Anything still authenticating with it stops working immediately, and the key cannot be restored.

## Frequently Asked Questions

### What can FlowRunner do with Klippa DocHorizon?

FlowRunner agents can run Get Document Info, Merge Documents, and Split Document in Klippa DocHorizon, plus 24 more actions.

### Does connecting Klippa DocHorizon to FlowRunner require OAuth?

No. Klippa DocHorizon connects to FlowRunner with an API key, no OAuth flow required.

### Can Klippa DocHorizon trigger a FlowRunner workflow automatically?

Klippa DocHorizon doesn't currently expose triggers in FlowRunner. It connects as an action step inside workflows started by another trigger.

**Work at Klippa DocHorizon?** This integration exposes Klippa DocHorizon to AI agents on every FlowRunner plan, including through MCP, at no cost to you. [See what FlowRunner offers integration partners](https://flowrunner.ai/integrations/partners), including how to keep this page current.

---
Markdown version of https://flowrunner.ai/integrations/klippa-dochorizon. Site index: https://flowrunner.ai/llms.txt
