Pipelines

What is a Pipeline?

A Pipeline chains the features you already configured (Splitters, Collections, flows, agents, Matchers, Inspectors, Fillers and Buckets) into one end-to-end process that you draw on a canvas. You send in one document; the Pipeline carries it through every step and delivers the result where you want it.

Each node on the canvas points at a feature that already exists. The Pipeline does not copy its configuration: when you improve a flow's fields or an Inspector's checks, every Pipeline that uses it picks up the change. What the Pipeline adds is the order: which step receives the document, which runs follow, and where the output goes.

Beta

Pipelines are in beta. They are available to every organisation, and the canvas and its node types may still change.

Pipelines vs the Pipeline Map

The Pipeline Map is a read-only picture of the connections configured on the features themselves (a flow's Bucket export, a Collection's flows, a Splitter's document types). A Pipeline is a graph you build and run on purpose, with its own entry, executions and outputs.

When to use a Pipeline

  • A bundle has to be split, each document extracted by its own flow, and the results checked together
  • Extracted data should go on to an agent, a Matcher comparison or an Inspector checklist without anyone clicking through
  • You want one inbox address or one API call that runs the whole process, not one per feature
  • The result should land in Slack, Teams, Google Chat, an automation platform or an inbox as the final step

If a single flow with its own webhook, email or Bucket export already does the job, you don't need a Pipeline. Features keep working on their own.

Node types

Every canvas starts with one Entry node. You add the rest from “Add node”, which groups them by the stage they play: “Receive & route”, “Extract”, “Process & check” and “Deliver”.

NodeWhat it doesCan connect to
EntryEvery execution starts here with the uploaded document.Splitter, Collection, Flow
SplitterCuts a bundle into its documents and sends each one on.Flow, Splitter, Collection
CollectionRoutes an unknown document to the right flow.Flow, Output
FlowExtracts structured fields from a document.Agent, Bucket write, Output, Matcher, Inspector, Filler
AgentActs on the extracted data in a browser.Agent, Bucket write, Output
MatcherCompares a run against previous ones.Agent, Bucket write, Output
InspectorRuns a checklist across one or more runs.Agent, Bucket write, Output
FillerFills a template with data from the runs.Output
Bucket write (Buckets)Stores the extracted rows in a Bucket, with field mappings you define on the node.Nothing (end of a branch)
OutputSends the result to email, Slack, Teams, Google Chat, Zapier, Make, n8n or a webhook.Nothing (end of a branch)

When a node is selected, “Add node” dims the kinds that can't follow it and wires the new node automatically. Picking a flow also suggests the Matchers, Inspectors and Fillers whose inputs already expect runs of that flow (“Connected to this flow”), added pre-wired. Agent nodes need agents, which are enabled per organisation on request.

Ports and slots

A connection out of a Splitter asks which document type travels it (or “Any document”). A connection into an Inspector or a Filler asks which input slot receives the run. A benchmark-mode Matcher needs one of its inputs chosen as the “Benchmark input”, and only accepts runs of its own flow.

Building a Pipeline

  1. 1Open “Pipelines” in the sidebar and click “New Pipeline”. Give it a name and, optionally, a description.
  2. 2The canvas opens with its Entry node. Select it and choose how documents arrive (see Sources below).
  3. 3Click “Add node”, pick a step, then pick which of your features to use. Or drag from the handle on the right of a node onto another node to connect them.
  4. 4Select a node to open its panel: its linked feature, what it receives from and sends to, and its settings (the Bucket write's field mappings, the Output's destination, the Matcher's benchmark input).
  5. 5Fix anything listed under “Fix these before running” until the chip reads “Ready to run”, then click “Save”.
  6. 6Click “Run pipeline” and upload a document to test it.

The canvas has “Tidy up” (automatic layout), undo and “Redo”, “Duplicate”, shift-click and shift-drag multi-selection, and an “Overview” minimap on larger graphs. Scroll to pan, ⌘ + scroll to zoom, and Delete removes the selection. Unsaved edits are kept in your browser and restored if you come back.

Runs use the saved pipeline

Executions always run the last saved version of the graph. If you have unsaved changes, save them before clicking “Run pipeline”. An execution keeps a frozen copy of the graph it started with, so later edits never change a run in progress.

Draft a Pipeline with AI

Instead of placing nodes by hand, click “Draft with AI” on the canvas and describe the process in a sentence, for example: “When invoices arrive: extract them with the Invoices flow, run the control checklist, and store the rows in the Invoices DB bucket.”

  • The assistant reads the features your organisation already has, designs the graph and validates the connections, then lays the draft on the canvas.
  • If a step needs a feature you don't have yet (a flow, Splitter, Inspector or Bucket), the node is marked “New” and its panel shows what will be created. “Create this feature” (or “Create N features”) builds them for real; review them and save.
  • “Keep” accepts the draft; “Discard” restores the canvas as it was before. A draft replaces every node and connection on the canvas, so you are asked first if one already exists.

Drafting does not run anything.

Sources: how documents get in

Select the Entry node to see its three sources.

SourceHow it works
Manual uploadAlways on. “Run pipeline” accepts one PDF or image (PNG, JPG, JPEG, JFIF) per execution.
EmailTurn it on to get an inbox address of the form <pipeline-id>-pipeline@mg.tavnit.io. Each attachment starts its own execution. You can restrict which senders are accepted. See Email integration.
APIAlways on. POST the document with your API key; the panel has a ready-to-copy snippet. See API below.

The email trigger, the “Pipeline ID” and the “Active” switch are also on the “Settings” tab. Inactive pipelines reject new executions from every source.

Outputs: where the result goes

An Output node sends everything its upstream steps produced. Pick a destination in the node's panel:

DestinationWhat you enterWhat arrives
Email“Recipient emails”An email titled “Pipeline output: <name>” with the result as JSON.
SlackAn Incoming Webhooks URL for the channelA message with the document and its key fields.
TeamsThe URL of a Teams Workflow that posts to a channel when a webhook request is receivedAn Adaptive Card with the key fields.
Google ChatAn incoming webhook URL from the space settingsA card with the key fields.
Webhook, Zapier, Make, n8nThe webhook URL from your endpoint or scenarioThe JSON payload below.
JSON — Output payload
{
  "pipeline_id": "…",
  "execution_id": "…",
  "pipeline_name": "Invoice intake",
  "original_filename": "document.pdf",
  "outputs": [
    {
      "node": "Invoices",
      "node_type": "flow",
      "output": { "invoice_number": "…", "total": 1250.5 }
    }
  ]
}

The panel shows an “Example payload” built from the upstream flow's fields; the real one carries the extracted values. Files in the output arrive as time-limited links. The chat destinations show up to eight key fields from the first upstream result.

Completion notice

When an execution you started finishes successfully, you also get an in-app “Pipeline completed” notification.

Wiring warnings

A feature keeps its own behaviour inside a Pipeline: a flow still fires its own webhook, email, Bucket export, Cleaner, human review and linked agent. The canvas points out where that overlaps with what you drew.

  • A Bucket write into the same Bucket the upstream flow already exports to would store the rows twice.
  • A webhook Output after a flow that already sends a webhook would post the result twice.
  • An email Output after a flow that already emails its results would send a second email.

These appear as warnings under “Worth a look — it will still run”. They never block a run. Cards also carry small marks for what the feature delivers on its own (“Webhook”, email recipients, “Human review”, agent delivery), listed in the node panel under “Also delivers to”.

A flow node's panel also shows “Also used in”: the Collections, Splitters and other Pipelines that depend on the same flow, so you know what else an edit to it affects.

Human review pauses the execution

If a flow sends runs to human review, the execution waits at that node until the run is approved, then continues.

Rules the canvas enforces

“Run pipeline” and the API refuse a graph that breaks any of these; the canvas badges the node at fault.

  • Exactly one Entry node, with no inbound connections. No cycles and no self-connections.
  • Every other node needs an inbound connection and a linked feature (an Output needs a recipient or a webhook URL).
  • Flows, Splitters and Collections take one document from one source: the Entry, a Splitter, or (for flows) a Collection.
  • Every connection into an Inspector or Filler needs an input slot; a Filler can't receive two connections into the same slot.
  • At most 50 nodes per Pipeline.

Matchers, Inspectors and Fillers (and any node fed by more than one source) wait until everything upstream has finished, then run once. After a Splitter, each matched document becomes its own branch, and the steps after it run once per branch.

Executions

Each document that enters a Pipeline creates one execution. The “Executions” tab lists them with the document, time, source, sender, duration and status.

Execution statusMeaning
Pending / RunningThe execution is in progress.
CompletedEvery node finished without a failure.
FailedAt least one node failed or was cancelled; the error names the first one.
CancelledSomeone stopped the execution.

Open an execution to see the canvas as it ran, tinted by node status, with progress (“X of Y nodes done”) and live updates. Each node shows Pending, Waiting, Queued, Running, Completed, Failed, Skipped or Cancelled, with a chip per branch after a Splitter. Select a node and use “View result” to open the run, split, match, inspection or fill it produced.

“Cancel execution” stops the rest of the graph: nodes that haven't started are cancelled, while feature runs already in progress finish on their own.

API

Copy the ID from “Pipeline ID” on the Settings tab. Start an execution by posting the document as multipart file (or as JSON with file_base64 and filename):

bash — start an execution
curl -X POST https://run.tavnit.io/api/pipelines/PIPELINE_ID/execute \
  -H "X-API-Key: $TAVNIT_API_KEY" \
  -F "file=@document.pdf"
JSON — 202 response
{
  "success": true,
  "execution_id": "…",
  "pipeline_id": "…",
  "org_id": "…",
  "status": "running"
}

A definition that isn't executable returns 400 with validation_errors; a 402 means your organization can't start new work right now (contact the Tavnit team); an inactive Pipeline returns 400. Follow progress on the Executions tab. To stop an execution:

bash — cancel an execution
curl -X POST https://run.tavnit.io/api/pipelines/executions/EXECUTION_ID/cancel \
  -H "X-API-Key: $TAVNIT_API_KEY"

Cancelling an execution that already finished returns 409. Authentication and error handling are the same as the rest of the REST API.

Who can do what

ActionRoles
Create, edit and delete PipelinesOwner, Admin
Run a PipelineOwner, Admin, Member

Deleting a Pipeline removes it and its canvas; past executions keep their records. See User roles.

Troubleshooting

SymptomWhat to check
“Run pipeline” says to save firstYou have unsaved canvas changes. Save, then run.
A node says it “needs a document source”Flows, Splitters and Collections must be fed by the Entry, a Splitter, or (flows only) a Collection, not by a flow or agent.
The execution is stuck on one nodeCheck whether the run is waiting in human review, or open the node's result to see the feature's own status.
Results were stored or sent twiceLook for wiring warnings: the upstream flow already has its own Bucket export, webhook or email.
A branch shows SkippedIts upstream step failed or produced nothing for that branch, so the steps after it had nothing to run on.
Email to the pipeline address does nothingCheck that the email trigger is on, the Pipeline is active and the sender is allowed.