Introduction

bem turns documents into structured JSON, against a schema you define

Hand off to an LLM

bem turns documents — PDFs, emails, spreadsheets, images, audio, video — into structured JSON, against a schema you define. You compose small typed functions into a workflow, call the workflow with a file, and bem returns extracted data ready to write to your systems.

How it fits together

PrimitiveWhat it is
FunctionA single processing step. One of extract, classify, split, join, enrich, parse, payload_shaping, or send. Versioned.
WorkflowA directed graph of functions with one entry point. Versioned.
CallA single execution of a workflow against a specific input.
EventThe output of a function within a call. Successful events carry a transformation; failed events carry an error.
SubscriptionA binding from a function to a webhook URL.

The function types

FunctionWhat it does
ExtractPulls structured JSON from any supported file against your outputSchema.
ClassifySends the input down one of several labeled paths based on content.
SplitBreaks a multi-document file into individual pieces for downstream processing.
JoinCombines the outputs of upstream nodes into a single payload.
EnrichAugments extracted data with context from a collection via semantic search.
ParseRenders documents into a navigable structure — sections, entities, relationships — for an LLM agent to walk via the File System API.
Payload ShapingReshapes JSON with JMESPath for ingestion into downstream systems.
SendDelivers workflow outputs to a webhook, S3 bucket, or Google Drive folder.

bem is SOC 2 Type 2, HIPAA and GDPR compliant. Outputs are validated against the schema you provide, and low-confidence transformations can be routed to human review automatically.

Get started

SDKs and tools

Official client libraries cover TypeScript, Python, Go, and C#. There's also a CLI, an MCP server for agent-driven access, and a Terraform provider for declarative configuration. All read BEM_API_KEY from the environment by default.

See SDKs for the install commands and links, or jump to the Quickstart for side-by-side examples.

V3 and the legacy API

If you have an existing integration on V1 or V2, see V3 migration for the rename map and endpoint changes. Legacy types (transform, analyze, route) remain readable and callable — no migration is required for deployed pipelines.

On this page