Developers

One API. The whole document pipeline.

Send documents and data through one API. An agentic workflow parses, extracts, checks and cites them, then hands the results back as an app for your customers or as an API of your own. Nothing to stitch together.

  • One API and MCPREST with OpenAPI, and one MCP endpoint
  • Python SDKsSteps, connectors, parsing and agents in code
  • Yours or oursOur vector store and storage, or bring your own

Pipeline as code

Design the whole pipeline in code.

Define every step from ingestion to the app your customers open, in Python, JSON or straight over REST. Run it, stream every event and version it like the rest of your code.

covenant_review.py
1from workbricks import Workbricks, steps2from schemas import ComplianceCertificate3 4wb = Workbricks()  # reads WORKBRICKS_API_KEY5 6flow = wb.workflows.create(7    name="covenant-review",8    trigger=steps.on_file_added(source="gmail"),9    jobs=[10        steps.parse(id="parse", ocr=True, tables=True),11        steps.extract(id="fields", after="parse",12                      schema=ComplianceCertificate, cite=True),13        steps.embed(id="index", after="parse",14                    store="workbricks"),  # or your own15        steps.agent(id="check", after="fields",16                    tools=["credit.lookup_covenant"],17                    instructions="Compare the cited ratio with the agreement threshold. Queue breaches for review."),18        steps.publish(id="out", after="check",19                      app="covenant-monitor", api=True),20    ],21)22 23run = flow.run(files=["q3_compliance.pdf"])24for event in run.stream():25    print(event.step, event.status)
covenant-reviewrun_8f2c · running
gmailon_file_addedparseocr · tablesfieldsextractindexembedcheckagentoutapp + apigmailon_file_addedparseocr · tablesfieldsextractindexembedcheckagentoutapp + api

    Totally flexible

    Every stage is yours to swap.

    Use what Strive runs for you, or plug in your own at any stage. Mix both in the same workflow.

    01Ingest
    Built inConnectors for drives, inboxes, databases and APIs
    YoursYour own connector in Python, or push records over the API
    02Parse
    Built inLayout, tables and OCR across PDFs, Office files and images
    YoursYour parser, dropped in as a custom step
    03Chunk
    Built inHeading-aware chunks sized to a token budget
    YoursYour own chunking strategy
    04Embed
    Built inHosted or local embedding models
    YoursThe embedding model you choose
    05Store
    Built inStrive vector store, database and file storage
    YoursYour vector database and your own bucket
    06Reason
    Built inAgents with tools, conditions, retries and review
    YoursYour code in sandboxed Python or a container
    07Deliver
    Built inAn app your customers open, under your name
    YoursAn API your own product calls

    Workflow functions

    Every function a workflow needs.

    Agents, document processing, retrieval, code, data and delivery. Chain them in any order, from code or on the canvas, and add your own when you need something new.

    41 functions
    • steps.agentAgents and AI

      Plans, calls tools and decides, within the limits you set.

      in · recordsout · records

      Settings

      instructionsstring
      What the agent should do
      toolsstring[]
      Connector, MCP and workflow tools it may call
      max_stepsint
      Upper bound on tool calls
      reviewpolicy
      When a person approves before it acts
      1steps.agent(2    id="agent",3    instructions="...",4    tools=[...],5    max_steps=5,6)
    steps.agentAgents and AI

    Plans, calls tools and decides, within the limits you set.

    in · recordsout · records

    Settings

    instructionsstring
    What the agent should do
    toolsstring[]
    Connector, MCP and workflow tools it may call
    max_stepsint
    Upper bound on tool calls
    reviewpolicy
    When a person approves before it acts
    1steps.agent(2    id="agent",3    instructions="...",4    tools=[...],5    max_steps=5,6)

    Python SDKs

    The same building blocks we use.

    Write your own steps, connectors and MCP servers with the SDKs the platform itself is built on. Package them, register them, and they show up in the workflow builder for your whole team.

    $ pip install workbricks-workflow
    • workbricks-workflowSteps, ports and workflow composition
    • workbricks-connectorsSources and destinations, with OAuth handled
    • workbricks-docparseThe document parser, with page-anchored citations
    • workbricks-agentsAgents, tools and human review
    • workbricks-mcpStart an MCP server from a template, or from an OpenAPI spec
    • workbricks-sandboxRun untrusted code in isolated sandboxes
    match_purchase_order.pya custom step
    1from workbricks.workflow import handler, PortSpec, StepContext2 3@handler(4    name="match_purchase_order",5    version="1.2.0",6    inputs={"invoices": PortSpec(kind="records")},7    outputs={"matched": PortSpec(kind="records")},8    side_effect="none",9)10class MatchPurchaseOrder:11    async def execute(self, ctx: StepContext, invoices: list[dict]) -> list[dict]:12        erp = await ctx.connector("erp")13        out = []14        for inv in invoices:15            po = await erp.get("purchase_orders", inv["po_number"])16            gap = inv["total"] - po["total"]17            out.append({**inv, "po_total": po["total"], "flag": gap > 10_000})18        ctx.log.info("matched", count=len(out))19        return out

    Production ready

    Built to run, not just to demo.

    Everything you need to put a pipeline in front of customers and keep it there.

    • REST and OpenAPIEvery service publishes an OpenAPI reference. Generate a client in any language.GET /v1/openapi.json
    • One MCP endpointEvery tool through a single endpoint, each call recorded and changed tools held for review.POST /mcp
    • Streaming eventsFollow every step of every run as it happens, over server-sent events.Accept: text/event-stream
    • Retries and timeoutsPer-step retries with backoff, timeouts and an error policy for each step.max_retries: 3
    • Versioned workflowsEvery change is a version. Restore any one, and runs keep the version they started on.PUT ?expected_version=12
    • Tracing and metricsOpenTelemetry traces and metrics for every run, step and model call.workflow_step_duration_seconds
    • Webhooks and schedulesStart runs from a webhook, a schedule, a new file or a new record.trigger: cron 0 6 * * 1-5
    • Your cloud or oursRun on Strive, or install it in your own Kubernetes cluster with Helm.helm install workbricks

    Questions

    What engineers ask.

    Is our data used to train models?

    No. Your documents and results are never used to train a model, by us or by the AI services we use. Our data processing addendum puts that in writing.

    Is our data encrypted?

    Yes. AES-256 at rest and TLS in transit, and each organization's data is kept apart at the database level. Our security controls are independently audited under SOC 2 Type II.

    Is API access included?

    Yes, on every agreement. The API calls the same workflow as your app, and runs are unlimited.

    What happens when a step fails?

    It retries with backoff up to the limit you set, then follows that step's error policy. Point the Assistant at a failed run. It reads the run history, explains the problem and proposes a fix.

    Where does custom Python run?

    In a sandbox. Your code runs in an isolated container with limits on what it can reach on the network, and with a hard timeout you set.

    Can we self-host it?

    Yes. Install it in your own Kubernetes cluster with Helm, in your own cloud account or on your own hardware. Self-hosted installations come with metrics, logs, traces, dashboards and alerts.

    Can I use my own model API key?

    Yes, on any agreement. Model costs then go straight to your account with the vendor. The AI that reads pages and pulls out fields is already included in the page price.

    Start building.

    Read the docs, get an API key and run your first workflow in minutes.