# PaperOffice AI API
> AI-powered document automation: OCR, IDP, PDF, e-signatures, translation, voice, workflows. Comprehensive REST API with native MCP server support — organized by category below.
## Quick Start
- **Base URL:** `https://api.paperoffice.ai/latest`
- **Auth:** `Authorization: Bearer po_sk_xxx` (System Key), `Bearer po_ut_xxx` (User Token), or `Bearer po_pk_xxx` (Publishable Key)
- **Landing page:** https://paperoffice.ai/l/developer-llms/ (language auto; EN: https://paperoffice.ai/en/developer/llms/)
- **Postman Collection:** [https://api.paperoffice.ai/latest/docs/postman](https://api.paperoffice.ai/latest/docs/postman) (for Postman / Insomnia / Bruno apps)
- **MCP (canonical DMS):** `https://mcp.paperoffice.ai/dms` · **Claude:** `https://mcp.paperoffice.ai/claude` · **Cursor:** `https://mcp.paperoffice.ai/cursor` · **ChatGPT / OpenAI:** `https://mcp.paperoffice.ai/openai` · **Document AI:** `https://mcp.paperoffice.ai/mcp-document-ai` · **Workflow AI:** `https://mcp.paperoffice.ai/mcp-workflow-ai` · **Full surface (300+):** `https://mcp.paperoffice.ai/mcp-full`. Same Bearer token as REST. Legacy aliases: `/mcp-headless` → `/mcp-document-ai`, `/mcp-headless-plus` → `/mcp-document-workflow-ai`.
- **Get a token:** https://paperoffice.ai
## Authentication
All endpoints require a Bearer Token in the `Authorization` header, except **VISITOR** infra: `/docs/*`, `GET /health`, `GET /ping`, public compliance verify (0 credits on `/docs/*`). Product APIs including `/ip2location/*` and `/currency_exchange/*` always require `po_sk_`, `po_ut_`, or `po_pk_`.
```http
Authorization: Bearer po_sk_EXAMPLE_TOKEN_REPLACE_WITH_YOUR_KEY
```
| Prefix | Type | Usage | Browser-safe? |
|--------|------|-------|---------------|
| `po_sk_` | **Secret Key** | Server-to-server, full access | No — **never** expose in browser code |
| `po_ut_` | **User Token** | User-scoped, tier-limited | No — never expose in browser code |
| `po_pk_` | **Publishable Key** | Browser/AI-Artifact direct calls | **Yes** — scoped, budget-limited, origin-locked |
### HTTP methods (PaperOffice convention)
PaperOffice is **not** a strict REST CRUD API. Most mutations use **`POST`** with action-style paths (`template-delete`, `import-delete`, tag/note removal, …). The only standard **`DELETE`** in the public surface is `DELETE /documents/document-delete` — do not assume REST-style `DELETE` elsewhere.
## Request bodies (JSON and multipart)
Most `POST` endpoints accept **either** `application/json` **or** `multipart/form-data` with the same field names. JSON fields override duplicate form keys. Exceptions are noted per endpoint.
**Notable exception:** `POST /job/add/workflow` accepts **multipart `file` or `pofid` only** — JSON `files` URL arrays are **not** supported (unlike most `/job/add/{pipeline}` endpoints).
## Response envelopes
Success payloads are **not** uniform across the API: some endpoints return top-level IDs (`note_id`), others nest under `workspace`, `results[]`, or async `job` objects. Use the per-endpoint response schema below — do not assume one global wrapper.
**`_billing` variants:** (1) **Standard** — `_billing.credits.total_monthly` / `remaining_monthly`; (2) **Free info** — `_billing.plan.tier` = `FREE_ENDPOINT`, `credits.used` = 0 (e.g. `workflow_tasks/list`, `voices_info`); (3) **Legacy flat** — `credits: null` with `remaining_credits` / `total_monthly` at `_billing` top level (some template list routes). See **Response Format** below for examples.
**MCP / `tools/call`:** Full `_billing` is replaced by **`_billing_summary`** (`credits_billed`, `remaining_credits`, `remaining_scope`=`prepaid_monthly_pool`, `total_monthly`, `plan_tier`, `job_name`; when present: `overage_can_continue`, `overage_funding_healthy`, `overage_alarm_kind`) — no tokens, IPs, or wallet amounts. Query balance before expensive work: `GET /billing/credits/balance` (`po_billing_credits_balance_get`), `GET /billing/status` (`po_billing_status_get`), usage audit: `GET /billing/usage-detail` (`po_billing_usage_detail_get`). Requires `po_sk_` or `po_ut_` (not `po_pk_`).
### Publishable Keys (po_pk_) — Browser-Direct Calls
Publishable Keys let you **call the PaperOffice API directly from the browser** — from Claude Artifacts, ChatGPT Canvas, Gemini, Grok, or your own web app — without a server. They are Stripe-style: safe to embed in frontend code because they are scope-limited, budget-capped, rate-limited and origin-locked.
**Security model (hardcoded, not overridable):**
- `DELETE` is **never** allowed (only `GET`/`POST`/`PUT`/`PATCH`, default `GET`+`POST`)
- Admin/auth/billing/webhook/oauth endpoints are **always blocked** (regardless of scope)
- Every request must include an `Origin` header matching the token's allowlist (exact host or subdomain wildcard, e.g. `https://*.example.com` includes `example.com` and all subdomains)
- A lifetime **credit budget** caps total spend — exhausted = 402
- A per-minute **rate limit** protects against burst-abuse — exceeded = 429
- Max TTL: 365 days. Max budget: 100000 Credits. Max rate: 600 req/min.
**Create a Publishable Key:** In the PaperOffice app go to **Account → API**, choose **Publishable Key (po_pk_)**, set allowed origins and credit budget, then copy the token once.
**Use the Publishable Key from the browser:**
```javascript
const form = new FormData();
form.append('source_url', 'https://api.paperoffice.ai/latest/download/demo/demo_invoice.pdf');
form.append('processing_lane', 'instant');
form.append('client_wait', 'true');
const response = await fetch('https://api.paperoffice.ai/latest/job/add/paperoffice_aiocr___generate', {
method: 'POST',
headers: { 'Authorization': 'Bearer po_pk_EXAMPLE_REPLACE_ME' },
body: form
});
const data = await response.json();
```
**Manage tokens:** Create, list, rotate, and revoke Publishable Keys in the PaperOffice app under **Account → API** (not listed in this public endpoint export).
**Error codes specific to Publishable Keys:**
| HTTP | Code | Meaning |
|------|------|---------|
| 402 | `BUDGET_EXHAUSTED` | Token credit budget reached — raise `credit_budget_ceiling` or create a new token |
| 403 | `METHOD_FORBIDDEN_FOR_BROWSER` | `DELETE` is hardcoded-blocked for all `po_pk_` |
| 403 | `METHOD_NOT_IN_ALLOWLIST` | HTTP method not in `allowed_http_methods` |
| 403 | `SCOPE_NOT_GRANTED` | Token lacks the scope required for this endpoint |
| 403 | `ORIGIN_HEADER_REQUIRED` | Missing `Origin` header (no server-to-server) |
| 403 | `DOMAIN_NOT_ALLOWED` | Origin not in token's allowlist |
| 400 | `ORIGINS_REQUIRED` | No origin allowlist provided when creating/updating a Publishable Key |
| 400 | `ORIGINS_INVALID` | Malformed origin pattern (use `https://host` or `https://*.example.com`) |
| 403 | `ENDPOINT_HARDCODED_FORBIDDEN` | Admin/auth/billing endpoint — always blocked |
| 404 | `ENDPOINT_NOT_FOUND_IN_REGISTRY` | Endpoint not in API registry (no `browser_scope`) |
| 404 | `ENDPOINT_NOT_BROWSER_ENABLED` | Endpoint exists but no `browser_scope` assigned (destructive/admin) |
| 429 | `RATE_LIMIT_EXCEEDED` | `rate_limit_per_minute` hit — wait until next minute |
## Job workflow (Hybrid Client-Wait)
**Default:** `client_wait=true` — API holds the HTTP connection while the job runs (dynamic timeout per pipeline/lane/pages; typically 20s–several minutes, infrastructure cap about 295s). Returns the result inline or HTTP 202 with `poll_url` and `max_wait_seconds`.
**Force async:** `client_wait=false` or `async_only=true` — immediate `job_id`, then:
1. `POST /job/add/{pipeline}` → `{ "job_id": "abc123" }`
2. `GET /job/get/{job_id}` → poll until `job_status` is `completed` — **JSON result is here**
3. (Optional) `GET /job/download/{token}` — only when `job_result` contains a file URL (not part of Quickstart ①–④)
`processing_lane` is the Start-SLA (wait-to-start): `no_sla`|`sla_24h`|`sla_12h`|`sla_6h`|`sla_1h`|`instant`. Omit = workspace default / fair-use. Guarantee = start, not completion. Separate from inline wait. Legacy `priority` remains for compatibility; lane wins when both are sent.
**HTTP 202** is success-path continuation, not an error: the client-wait window ended while the job is still running. Follow `poll_url` or `GET /job/get/{job_id}` until `job_status` is `completed`. See `max_wait_seconds` in the 202 body.
### Job pipeline URL slugs
The path segment after `/job/add/` must be the **queue job name** in `handler___command` form (triple underscore `___`), e.g. `paperoffice_aiocr___generate`. Dot notation (`handler.command`) returns HTTP 400 (`JOB_CONFIG_INVALID`). Labels such as **API reference:** `po-*` in endpoint sections are documentation identifiers only — they are **not** valid pipeline slugs. Use `_billing.job.api_job_name` from a prior response when unsure.
Handwriting, government forms, and US tax forms use `POST /job/add/paperoffice_aiocr___generate` (vision / form OCR). Structured IDP (invoices, IDs, DATEV, contracts, and similar) uses `POST /job/add/workflow` with an IDP agent. These are two different pipelines — not aliases.
List prices start at **Basic** (about €0.01 OCR / ~€0.03 IDP). **Premium** and **Ultra** lanes are higher (indicatively 4 ct / 10 ct). Exact rates: https://paperoffice.ai/en/pricing/ and `GET /billing/plans`.
## Response Format
All responses are JSON. On success, `status` is `"success"`. Most REST endpoints return endpoint-specific fields at the **top level** (not wrapped in `data`). Exceptions:
| Pattern | Where | Key fields |
|---------|--------|------------|
| Standard REST | documents, analytics, utilities, … | top-level fields + `status` |
| Job submit (sync complete) | `POST /job/add/{pipeline}` | `status`, `job_id`, **`result`** |
| Job poll | `GET /job/get/{job_id}` | envelope `status`, **`job_status`**, **`job_result`** |
| Account / workspace resources | e.g. `workspace_telephony_agent` | **`data`** object + `status` |
Many billed calls also include `_billing` and `processing_time`.
**`_billing` shapes (three variants):**
| Variant | When | `credits` shape |
|---------|------|-----------------|
| **Standard** | Most billed REST/job endpoints | `{ "total_monthly", "remaining_monthly", "credit_source", … }` |
| **Free info** | e.g. `workflow_tasks/list`, `voices_info`, `model_info` | `{ "used": 0, "remaining": null, "monthly": null }` + `plan.tier: "FREE_ENDPOINT"` |
| **Legacy flat** | Some template/list handlers | top-level `credits: null` with `remaining_credits` / `total_monthly` siblings |
Do not assume one JSON Schema for `_billing` across all endpoints — inspect the live response per route.
```json
{
"status": "success",
"partners": [],
"processing_time": "123.45ms",
"_billing": { "credits": { "remaining_monthly": 1000 } }
}
```
Errors use HTTP 4xx/5xx. Most handlers return `status`, `code`, and `message`; some also include `error`, `error_code`, or `example_curl` — treat any of these as machine-readable failure signals.
**Localization:** The `message` field may reflect the account locale (for example German text while reading English docs). **Clients must branch on stable `code` values** (English, documented below) — never parse or assert exact `message` strings.
```json
{
"status": "error",
"code": "AUTH_REQUIRED",
"message": "Authentication required. Please provide a valid Bearer token.",
"processing_time": "12.34ms"
}
```
Job endpoints may return `job_id`, `poll_url`, or HTTP `202` when client-wait times out — see **Job workflow** above. Use the `job_id` from step ③ when polling in step ④.
## Standard Error Codes
Canonical codes below; some legacy aliases may still appear in older clients (`AUTH_REQUIRED` ≈ `NOT_AUTHENTICATED`, `INVALID_REQUEST` ≈ `BAD_REQUEST`, `NOT_FOUND` ≈ `UNKNOWN_API_ENDPOINT`).
| HTTP | Code | Meaning |
|------|------|---------|
| 400 | `BAD_REQUEST` / `INVALID_REQUEST` | Missing/invalid parameters |
| 400 | — | Wrong HTTP method on a POST-only endpoint (API returns 400, not HTTP 405) |
| 400 | `MISSING_PARAMETER` / `MISSING_QUERY` | Required query or body field missing |
| 400 | `INVALID_QUERY` | Search/query syntax not supported (e.g. wildcard-only) |
| 400 | `INPUT_TOO_LARGE` | Input exceeds endpoint limit (e.g. 15k chars for /translate/text) |
| 401 | `NOT_AUTHENTICATED` / `AUTH_REQUIRED` | Invalid or missing Bearer on endpoints that require a **known** token |
| 401 | `TOKEN_NOT_FOUND` | Unknown or revoked API token |
| 401 | `INVALID_TOKEN` | Malformed or expired token |
| 402 | `INSUFFICIENT_CREDITS` | Not enough credits |
| 403 | `TIER_RESTRICTED` | **No Bearer at all** on a product API — VISITOR tier (not the same as 401) |
| 403 | `UI_ONLY_ENDPOINT` | Allowed only via PaperOffice web UI (browser session) |
| 404 | `NOT_FOUND` / `UNKNOWN_API_ENDPOINT` | Endpoint or resource not found |
| 404 | `DOCUMENT_NOT_FOUND` | Document ID/POFID not found |
| 429 | `RATE_LIMIT_EXCEEDED` | Retry after `Retry-After` header |
| 500 | `INTERNAL_ERROR` / `GENERAL_ERROR` | Retry with exponential backoff |
| 500 | `TRANSLATION_FAILED` | LLM pipeline failure (endpoint-specific, e.g. /translate/text) |
## UI-only operations (security policy)
These destructive/compliance actions are **not** available via REST, MCP, or Postman — only through the PaperOffice web app with a browser session: **workspace delete**, **empty trash**, **legal hold release**. API calls return HTTP `403` with code `UI_ONLY_ENDPOINT`. Legal holds can be **placed** via `POST /documents/document-legal-hold`; release requires the UI.
## Trash and restore (tier-dependent)
Move-to-trash, restore, and trash listing require `trash_enabled: true` on the account/workspace tier. On tiers without trash, `DELETE /documents/document-delete` performs permanent deletion (POST alias accepted for legacy clients). Before `POST /documents/document-restore`, check `GET /documents/trash-settings` and `GET /documents/workspaces-list` (field `_capabilities.trash_enabled`) — restore on tiers without trash returns HTTP `404`.
## Rate Limits
Per-token (authenticated) or per-IP (visitor). Minimum limits (all tiers): 5/sec, 30/min, 100/hr, 500/day. Paid tiers get higher limits. Check `RateLimit-*` and `X-RateLimit-*` response headers.
## Billing semantics
- **`_billing.credits`:** `total_monthly` is the plan baseline; `remaining_monthly` may exceed it when carryover, promotional grants, or unlimited-tier metering apply — do not assume `remaining_monthly <= total_monthly`.
- **HTTP 400 validation:** Most endpoints bill only after successful handler work. Some high-abuse endpoints (e.g. `GET /analytics/workspaces-compare` without required parameters) may deduct the **minimum 1 credit** on client validation failures (anti-abuse). Check `_billing.job.credits_billed` (top-level alias `_billing.credits_billed` when present) on every billed response.
## API Endpoints (Index)
For full endpoint specs, request [https://api.paperoffice.ai/latest/docs/llms-full.txt](https://api.paperoffice.ai/latest/docs/llms-full.txt) or [https://api.paperoffice.ai/latest/docs/postman](https://api.paperoffice.ai/latest/docs/postman).
**Note:** `llms-full.txt` is about 584 KB (about 150k tokens). Many LLM fetch tools truncate near about 100 KB — fetch the file directly (do not paste into a prompt) or use this index plus targeted `llms-full` sections when context is limited.
### Analytics AI — Analytics & BI
- **Get activity heatmap** — `GET /analytics/activity-heatmap` — Overview Activity heatmap — daily upload/change intensity over a year (or selected window) for capacity planning...
- **Get analytics overview** — `GET /analytics/overview` — Dashboard KPIs for the document estate — document counts, storage usage, DMS distribution, and high-level activity...
- **Get audit center findings** — `GET /analytics/audit-center` — Overview Workflow audit center — compliance-oriented findings with severity (low/medium/high/critical) and review...
- **Get contact financial statistics** — `GET /analytics/contact-stats-financial` — Financial totals per business contact — total_amount, invoice_count, and amounts_available from extracted IDP meta...
- **Get contact statistics** — `GET /analytics/contact-stats` — Business partner / contact statistics — document counts, storage, first/last document dates, and optional addresses...
- **Get document activity history** — `GET /analytics/activity-document` — Overview Complete activity history for a single document — revisions, processing events, and user actions where...
- **Get document distribution stats** — `GET /analytics/distribution` — Overview Document distribution breakdown — by document type, workspace, processing state, or other dimensions...
- **Get document trends** — `GET /analytics/trends` — Overview Time-based trends — upload volume, processed pages, storage growth, and related metrics over a selectable...
- **Get financial flow analytics** — `GET /analytics/financial-flow` — Overview Cash-flow style analysis — money movement between business partners (Sankey-style aggregates) for the...
- **Get financial summary** — `GET /analytics/financial-summary` — Financial summary — incoming/outgoing invoice totals, top partners, and period aggregates derived from extracted...
- **Get meta field analysis** — `GET /analytics/meta-fields-analysis` — Meta field usage analysis — which IDP extraction fields appear across documents, with coverage and quality metrics.
- **Get overdue financial items** — `GET /analytics/financial-overdue` — Overview Overdue invoices — documents past due date with amounts, aging buckets, and partner references where...
- **Get upcoming due dates** — `GET /analytics/calendar-due-dates` — Overview Upcoming and past due dates from documents — invoice due dates, contract deadlines, recall dates, and...
- **Get user activity ranking** — `GET /analytics/activity-users` — Rank users by uploads and document revisions in the selected time period (not login events).
- **Get embedding clusters** — `GET /analytics/embeddings-clusters` — Returns embedding counts grouped by type (summary, page, paragraph, entity, metadata). For semantic document...
- **Get embedding statistics** — `GET /analytics/embedding-stats` — Overview Embedding statistics — count per type, coverage rate, average quality. Shows semantic index processing status.
- **Get embedding topics** — `GET /analytics/embeddings-topics` — Overview Topic distribution based on embeddings — how documents are distributed across detected topics. Shows...
- **Get entity network graph** — `GET /analytics/entities-network` — Entity network graph — connections between persons, companies, and organizations based on shared documents. Returns...
- **Compare workspaces** — `GET /analytics/workspaces-compare` — Overview Compare workspaces side by side — document count, storage, pages, AI processing rate.
### Analytics AI — Knowledge Graph
- **Get business case graph** — `GET /knowledge_graph/business_case` — Overview Business case analysis — all documents belonging to a reference/transaction (invoice number, order number...
- **Get document relations (path param)** — `GET /document_intelligence/relations/{pofid}` — Get document relationships — references, supersedes, attachment_of, invoice_for, payment_for, contract_with. Shows...
- **Get document timeline** — `GET /knowledge_graph/timeline` — Overview Chronological timeline — documents and events sorted by date, filterable by partner and workspace.
- **Get image embeddings** — `GET /document_intelligence/image_embeddings/{documents_id}` — Overview Get image embeddings of a document — visual representations of logos, stamps, signatures, page previews...
- **Get intelligence statistics (Document AI)** — `GET /document_intelligence/stats` — Overview Get global Document Intelligence statistics — total entities, embeddings, relations, topics, vision...
- **Get knowledge graph document entities** — `GET /document_intelligence/entities/{pofid}` — Returns all extracted entities for a document — companies, persons, amounts, dates, locations, IBANs, products, and...
- **Get knowledge graph for document (path param)** — `GET /document_intelligence/knowledge_graph/document/{pofid}` — Returns an interactive graph centered on one document — nodes, edges, group styling, and layout...
- **Get knowledge graph statistics (KG counts)** — `GET /knowledge_graph/stats` — Returns knowledge graph statistics — document, relation, and entity counts, breakdowns by relation and entity type...
- **Get knowledge graph universe** — `GET /knowledge_graph/universe` — Sampled knowledge-graph view for visualization — not an unbounded export of every document.
- **Get partner graph detail** — `GET /knowledge_graph/partner/{partner_name}` — Overview Detailed view of a single business partner — all documents, business cases, graph connections, statistics...
- **Get publisher profile** — `GET /document_intelligence/publisher/{documents_id}` — Detect the sender/publisher of a document from logos, letterheads, and metadata. Returns company name, logo URL...
- **Get workspace knowledge graph (path param)** — `GET /document_intelligence/knowledge_graph/workspace/{workspace_id}` — Returns an interactive graph for an entire workspace — all documents and their relationships...
- **List document topics** — `GET /document_intelligence/topics` — List document topics in the account — finance, contracts, HR, legal, projects, customers, suppliers — with document...
- **List knowledge graph business partners** — `GET /knowledge_graph/partners` — List business partners extracted from the Knowledge Graph — companies and persons linked across documents, with...
- **List knowledge graph types** — `GET /knowledge_graph/types` — Overview Available relationship, document and reference types in the knowledge graph. Schema/vocabulary reference.
- **List publishers** — `GET /document_intelligence/publishers` — Overview List all automatically detected publishers/senders across all documents. Shows frequency, industry and logo.
- **List reference numbers** — `GET /knowledge_graph/references` — Overview Reference network — all detected reference numbers (invoice, order, contract numbers) and how many...
- **Search entities across documents** — `GET /document_intelligence/entities/search` — Search for entities (companies, persons, IBANs, amounts, etc.) across all documents. Uses the entity index...
### Data AI — Currency Exchange
- **Convert currency** — `POST /currency_exchange/convert` — Convert an amount between two currencies using current exchange rates from the PaperOffice currency service.
- **Get currency exchange rates** — `GET /currency_exchange/get_rates` — Get current exchange rates for supported currency pairs. Base currency and quote symbols are configurable.
### Data AI — Geocoding
Address and place lookup (`/geocoding/*`). Distinct from IP geolocation (`/ip2location/*`) and from weather.
- **Forward geocoding** — `POST /geocoding/forward` — Forward geocoding: resolve a street address or place name to latitude/longitude coordinates.
- **Get geocoding service status** — `GET /geocoding/status` — Geocoding service health. Success uses status: "operational" (not the generic status: "success" envelope).
- **Reverse-geocode coordinates** — `GET /geocoding/reverse` — Resolves GPS coordinates to a human-readable address.
### Data AI — IP Geolocation
IP-derived location. **IP-based weather** is `/ip2location/weather`. City/GPS weather lives under **Data AI — Weather** (`/weather`, `/location2weather`).
- **Detect IP VPN usage** — `POST /ip2location/vpn` — Detect VPN, proxy, and hosting-provider usage for an IP address. Returns confidence and provider metadata.
- **Get IP device fingerprint** — `POST /ip2location/device` — Analyzes device/browser signals and returns a device fingerprint hash plus risk indicators.
- **Get IP full information** — `GET /ip2location/full` — Overview Full IP Information Get complete IP geolocation and ISP data.
- **Get IP location only** — `POST /ip2location/location` — Overview IP Location Only Get basic location data for an IP.
- **List IP countries** — `POST /ip2location/countrylist` — Overview Get list of all supported countries with basic info. Returns: - Country codes ISO 2-letter - Country names...
- **Get weather by IP** — `GET /ip2location/weather` — Weather for an IP address (geolocation + weather).
- **List weather icons** — `GET /ip2location/weathericon_get` — Returns weather icons (Base64 PNG or CDN fallback) for one or more WMO condition_code values from weather responses.
### Data AI — Map Tiles
- **Get map tile** — `GET /maptiles/tiles/get/{z}/{x}/{y}.pbf` — Returns a Mapbox Vector Tile (.pbf, gzip) for the slippy-map indices z, x, y.
- **Get static map by coordinates** — `POST /maptiles/staticmap` — Generates a static map image (PNG) or JSON metadata from GPS coordinates.
- **Get static map by IP address** — `GET /maptiles/staticmap` — Generates a static map image centered on an IP address (geolocation lookup).
- **Style json** — `GET /maptiles/style.json` — Overview Get MapLibre/Mapbox style configuration. Returns: JSON style definition for MapLibre GL JS Use this URL...
### Data AI — Validation & VAT
- **Validate All (Email + Phone + Website)** — `POST /validate/all` — Overview Validate email, phone, and/or website in one request. Only provided fields are checked. Pricing: 20...
- **Validate Email Address** — `POST /validate/email` — Validate an email address (syntax and MX lookup).
- **Validate Phone Number** — `POST /validate/phone` — Validate a phone number (E.164 format and carrier lookup).
- **Validate Website URL** — `POST /validate/website` — Validate a website URL (DNS, SSL certificate, reachability).
- **Get EU VAT Rates** — `GET /vat/rates` — Overview Get EU VAT Rates
- **Validate EU VAT ID** — `POST /vat/validate` — Validate a European VAT identification number against the EU VIES database. Returns company name, address, validity...
- **Calculate Global Tax Quote** — `POST /vat/quote` — Overview Calculate global B2B tax quote for appointments or software without Stripe Tax. Supports EU VAT, Reverse...
### Data AI — Weather
City/GPS weather (`/weather`, `/location2weather`). IP-derived weather is under **Data AI — IP Geolocation** (`/ip2location/weather`).
- **Get weather by city** — `GET /weather?city=` — Returns current weather and forecast for a city name (geocoded server-side).
- **Get weather by coordinates** — `GET /weather?lat=&lon=` — Returns current weather and a multi-day forecast for GPS coordinates.
### Document AI — AI Document Operations
- **Get document metadata** — `GET /document_intelligence/meta_fields/{pofid}` — Get document analysis metadata including extraction confidence, model hints, and field coverage for a processed...
- **Get document embeddings (read)** — `GET /document_intelligence/embeddings/{documents_id}` — Read all embedding types of a document — summary, full, page, paragraph, metadata, entity, and vision layers where...
- **Search embeddings** — `POST /document_intelligence/embeddings/search` — Overview Direct semantic vector search over Document Intelligence embeddings. Choose embedding type...
- **Get canonical entities (entity index)** — `GET /document_intelligence/entities/canonical` — Overview Canonical deduplicated entities across all documents. Shows how often an entity appears in different documents.
- **Get document summary** — `GET /document_intelligence/summary/{pofid}` — Overview Compact summary of all Document Intelligence data. An endpoint for all key metrics and API links.
- **Get vision data** — `GET /document_intelligence/vision/{pofid}` — Overview Vision-extracted data Ultra-Tier. Includes: - Tables - Structured table data with rows/columns - charts...
### Document AI — Anonymization
- **Anonymize document (single-step)** — `POST /job/add/workflow` — POST /job/add/workflow. template=document_anonymize. Params: file|pofid, redact_categories, whitelist, custom_redact...
- **Apply redaction** — `POST /job/add/paperoffice_dataripper___redact_image` — POST /job/add/paperoffice_dataripper___redact_image. After document_anonymize_preview: send page image URLs (files...
- **Detect PII preview** — `POST /job/add/workflow` — POST /job/add/workflow multipart. template=document_anonymize_preview (required). Params: file|pofid...
- **Finalize anonymize (workflow)** — `POST /job/add/workflow` — POST /job/add/workflow template=document_anonymize_finalize. Alternative to paperoffice_dataripper___redact_image...
### Document AI — DMS
- **Run whitepage scan analysis** — `POST /job/add/pdfstudio___whitepage_scan` — Overview Scan PDFs or images for blank pages and embedded barcodes/QR codes. Canonical whitepage endpoint — uses...
- **Compliance: Activate WORM (300 Credits)** — `POST /documents/document-retention-activate` — Activates WORM protection (write-once-read-many) for a document. The document becomes immutable for the configured...
- **Create document folder** — `POST /documents/folder-create` — Bundle at least two existing documents (POFIDs) into a stapled folder/heft in the Headless DMS. This is not...
- **Dissolve (unstaple) folder** — `POST /documents/folder-dissolve` — Dissolve a folder and optionally relocate contained documents. Use for cleanup and restructuring workspace trees.
- **Export document list** — `POST /documents/documents-export` — Overview Export Documents Bulk export documents as ZIP archive. Options: - Specific POFIDs - All from workspace
- **List folders** — `POST /documents/folder-list` — Lists document folder collections (document_folders) only — NOT individual document files.
- **Run DMS document analysis** — `POST /documents/document-analysis` — Overview Document Analysis DMS General document classification and metadata extraction. Fields: document_type, date...
- **Suggest AI Model** — `POST /documents/suggest-llm-model` — Analyze a document and recommend the optimal processing profile for downstream Document AI / IDP jobs.
- **Update folder** — `POST /documents/folder-update` — Update folder name, parent, or metadata for an existing DMS folder.
- **Acquire Edit-Session (Presence-Lock)** — `POST /documents/document-edit-session-acquire/{pofid}` — Overview Acquire a cooperative metadata edit lock for a document. If another user is editing, the response...
- **Create Document from Content** — `POST /document_generation/create-from-content` — Generate a PDF in the DMS from Markdown or HTML.
- **Create Document from Template** — `POST /document_generation/create-from-template` — Create a new document in a workspace from a document generation template.
- **Create Document Template** — `POST /document_generation/template-create` — Create a reusable document-generation template.
- **Create document type** — `POST /documents/document-types-create` — Create account document type. POST /documents/document-types-create with name, source_locale, optional...
- **Delete Document Template** — `POST /document_generation/template-delete` — Retrieve a single document generation template by ID.
- **Delete document type** — `POST /documents/document-types-delete` — Delete account custom document type by numeric id. Fails with TYPE_IN_USE when documents or workspace defaults...
- **Document: Automation history** — `GET /documents/automation-timeline/{pofid}` — Returns the chronological automation history for a document (AI-DMS, IDP Agent, Workflow).
- **Document: Podcast audiobook estimate** — `POST /documents/podcast-audiobook-estimate` — Estimate cost/length for podcast audiobook generation from OCR/text layer. Billing of generation itself happens via...
- **Document: Podcast audiobook start** — `POST /documents/podcast-audiobook-start` — Start podcast audiobook job for a document with OCR/text. Async worker: chunked TTS basic, ffmpeg merge, encrypted...
- **Document: Podcast audiobook status** — `POST /documents/podcast-audiobook-status` — Poll podcast audiobook job status stored on the source document. Free orchestration endpoint. Requires workspace read.
- **Download document** — `GET /documents/document-download/{pofid}` — Download the original file of a document as a binary HTTP attachment (Content-Disposition: attachment).
- **Download document audit report PDF** — `POST /documents/audit-report-pdf` — Generate PDF audit report for document security findings. Params: pofid, optional language, include_original boolean...
- **Find similar documents** — `GET /documents/document-similar-find` — Find documents similar to a reference document using AI embeddings. Requires AI-DMS processing (basic+ tier) on the...
- **Get DMS statistics** — `GET /documents/stats` — po_documents_stats_get: Get global DMS statistics — total documents, entities, embeddings, breakdown by document...
- **Get document audit trail** — `GET /documents/document-audit-trail` — Overview Get compliance audit trail — who changed what, when. Filter by document (pofid or documents_id), user...
- **Get Document Template** — `POST /document_generation/template-get` — Retrieve a single document generation template by ID.
- **Get document thumbnail** — `GET /documents/document-thumb-get/{pofid}/{page_number}` — Overview Get a thumbnail preview image of a specific document page. Returns base64-encoded WebP/JPEG image. Accepts...
- **Heartbeat Edit-Session** — `POST /documents/document-edit-session-heartbeat/{pofid}` — Keeps a previously acquired edit-session lock alive. Call every 30 seconds while editing. Returns HTTP 409 with...
- **List Document Templates** — `POST /document_generation/templates-list` — List document generation templates available in the account with name, format, and last-updated metadata.
- **List document types** — `GET /documents/document-types-list` — List document types with retention settings. GET /documents/document-types-list.
- **List IDP collections** — `GET /documents/idp-collections-list` — List IDP extraction collections and field schemas. GET /documents/idp-collections-list.
- **List meta fields (index schema)** — `GET /documents/meta-fields-list` — List available document meta fields (workspace index schema). Default MCP compact=true (about small). For values...
- **Merge publisher** — `POST /publishers/{publisher_id}/merge` — Merge two publisher profiles when duplicates exist. The {publisher_id} path segment is the source publisher...
- **Process document (AI-DMS)** — `POST /documents/document-process/{pofid}` — Trigger AI-DMS processing on a document that is already stored in PaperOffice. Use when a document was uploaded...
- **Query Edit-Session Status** — `GET /documents/document-edit-session-status/{pofid}` — Overview Get the current edit-session status for a document (free, mine, or taken) without acquiring the lock. Use...
- **Release Edit-Session** — `POST /documents/document-edit-session-release/{pofid}` — Releases the edit-session lock for a document so other users can edit. Call when the user finishes editing...
- **Rename publisher** — `POST /publishers/{publisher_id}/rename` — Rename a publisher profile. The {publisher_id} path segment identifies the publisher; provide new_name in the JSON body.
- **Resolve document POFID** — `POST /documents/document-pofid-resolve` — Normalizes a POFID against the database (O/0 hash segment) and returns documents_id and file_name. Prefer...
- **Run IDP Agent on document** — `POST /documents/idp-agent-run` — Run an IDP Agent: provide idp_agent_id plus pofid, upload_id, or file_url. Returns extracted_fields and confidence...
- **Run Redact Agent on document** — `POST /documents/redact-agent-run` — POST /documents/redact-agent-run. Required: redact_agent_id (kind pdf_redact from po_agents_list). Input: pofid |...
- **Run Split Agent on document** — `POST /documents/split-agent-run` — Run a Split Agent: provide split_agent_id plus pofid, upload_id, or file_url. Optional client_wait waits for...
- **Run Trust Agent on document** — `POST /documents/trust-agent-run` — Run a Trust Agent: provide trust_agent_id plus pofid, upload_id, or file_url. Returns integrity_score...
- **Search documents (advanced)** — `POST /documents/documents-list` — Advanced multi-source document search within the workspace you provide (workspace_id is required).
- **Update Document Template** — `POST /document_generation/template-update` — Retrieve a single document generation template by ID.
- **Update document type** — `POST /documents/document-types-update` — Update a custom document type (is_system_default = 0 only). Requires id or type_key.
- **Upgrade Start-SLA for pending documents** — `POST /documents/processing-lane-upgrade` — Upgrade Start-SLA (processing_lane) for untouched pending AI-DMS documents only. Higher factor only — no downgrade...
- **Workspace: Classical IDP readiness** — `POST /documents/workspace-classical-idp-readiness` — Evaluate classical IDP workflow readiness for a workspace. Pass workspace_id. Optional preview: ai_dms_mode...
- **Get entity statistics** — `GET /documents/entity-statistics` — Overview Get detailed statistics for a specific entity (company, person, IBAN) — which documents mention it, total...
- **Get document revisions** — `GET /documents/document-revisions` — po_revisions_get_document_revisions: Get document version history — all changes, who made them and when. Accepts...
- **Add Document Tag** — `POST /documents/document-tag-add` — Add one or more tags to a document. Creates the tag in the workspace if it does not exist yet.
- **Batch-process documents (AI-DMS)** — `POST /documents/document-batch-process` — Overview Triggers AI-DMS processing for multiple documents simultaneously. Max 50 POFIDs per batch. Each document...
- **Check for duplicate documents** — `POST /documents/duplicate-check` — Check whether similar documents already exist before upload. Compares fingerprints and metadata to reduce duplicate...
- **Copy document** — `POST /documents/document-copy` — Copy a document to another folder or workspace. Preserves metadata where configured; returns the new document POFID.
- **Create Document Comment** — `POST /documents/document-comment-create` — Create a comment on a document. Supports optional parent comment ID for threaded replies and @mentions within the...
- **Create Document Note** — `POST /documents/document-note-create` — Create an internal note attached to a document. Notes are visible to workspace users with document access (not...
- **Delete document** — `DELETE /documents/document-delete` — po_documents_delete: Delete one or more documents. mode=trash (default): soft-delete to recycle bin on business...
- **Delete Document Comment** — `POST /documents/document-comment-delete` — Delete a document comment by comment ID. Requires permission to edit the document or ownership of the comment.
- **Delete Document Note** — `POST /documents/document-note-delete` — Delete an internal document note by note ID.
- **Edit document fields** — `POST /documents/document-edit/{pofid}` — Edit document metadata fields (title, dates, custom IDP fields) for a document identified by POFID in the URL path.
- **Get document details** — `GET /documents/document-get/{pofid}` — document DETAILS. Parameter: pofid (required). returns metadata how file_name, created_at, workspace_id, publisher...
- **Get Document Lifecycle** — `GET /documents/document-lifecycle-get` — Get lifecycle state for a document — retention stage, legal hold flags, trash status, and next allowed transitions.
- **Get document OCR text** — `GET /documents/ocr-get` — Overview Returns the OCR-extracted text of a document. Contains text per page with confidence scoring.
- **Get trash settings** — `GET /documents/trash-settings` — Get or update account-wide trash retention settings.
- **List Deleted Documents (Trash)** — `POST /documents/trash-list` — Overview Displays all soft-deleted documents in the trash. Paginated with days_remaining and is_restorable...
- **List Document Comments** — `GET /documents/document-comments` — List comments on a document with author, timestamp, resolution status, and optional thread hierarchy.
- **List Document Notes** — `GET /documents/document-notes` — List internal notes on a document with author, category, and timestamps.
- **List Document Tags** — `GET /documents/document-tags` — List all tags applied to a document with optional color and category metadata.
- **List Legal Holds** — `GET /documents/document-legal-holds-list` — List active legal holds in the account with document references, reason, and hold timestamps. Read-only for...
- **Move document** — `POST /documents/document-move` — Move a document to another folder within the same workspace or to a permitted target workspace.
- **Place legal hold** — `POST /documents/document-legal-hold` — Place a legal hold on a document to block deletion and certain lifecycle transitions until explicitly released...
- **Remove Document Tag** — `POST /documents/document-tag-remove` — Remove a tag from a document without deleting the tag definition from the workspace.
- **Rename document** — `POST /documents/document-rename` — Overview Rename a document. The original extension is always preserved. Path separators (/, \, .) are rejected...
- **Resolve Document Comment** — `POST /documents/document-comment-resolve` — Mark a document comment as resolved. Use after the discussed issue is addressed; resolved comments remain visible...
- **Restore Document from Trash** — `POST /documents/document-restore` — Overview Restore one or more soft-deleted documents from the trash. Also supports document folders (.podf). Only...
- **Search documents (full-text)** — `GET /documents/document-search` — Full-text and hybrid document search within the workspace you provide.
- **Tag Autocomplete** — `GET /documents/tag-autocomplete` — Autocomplete tag names used in the account or workspace. Useful for consistent tagging in upload and edit flows.
- **Transition document lifecycle** — `POST /documents/document-lifecycle-transition` — Overview Change the lifecycle status of a document. Only allowed transitions are possible.
- **Update Document Comment** — `POST /documents/document-comment-update` — Update the text of an existing document comment. Only the comment author or users with document edit permission may...
- **Update Document Note** — `POST /documents/document-note-update` — Update title, category, or content of an existing document note.
- **Upload document** — `POST /documents/document-put` — Upload one or more documents via multipart/form-data or provide a source_url (HTTPS) to fetch a file server-side.
- **Accept workspace share by ID** — `POST /paperoffice_account/accept_share_by_id` — po_workspaces_share_accept_by_id: Accept pending share from inbox by share_id. POST /paperoffice_account...
- **Accept workspace share invitation** — `POST /paperoffice_account/accept_share` — po_workspaces_share_accept: Accept share invitation via share_token. POST /paperoffice_account/accept_share.
- **Cancel pending workspace share** — `POST /paperoffice_account/cancel_invite` — po_workspaces_share_cancel_invite: Cancel pending invitation (owner). POST /paperoffice_account/cancel_invite.
- **Check workspace security access** — `POST /workspaces/access-check` — Check workspace password/SMS lock status, ACL membership, and whether a valid unlock session exists for this Bearer...
- **Create workspace** — `POST /documents/workspaces-create` — Create a new workspace to organize documents by client, project, or topic. Optional fields include security tier...
- **Create workspace share** — `POST /paperoffice_account/share_workspace` — Create an external workspace share (email and/or telephony channel).
- **Decline workspace share invitation** — `POST /paperoffice_account/decline_share` — Declines a pending workspace share invitation.
- **Get workspace share info by token** — `GET /paperoffice_account/share_info` — po_workspaces_share_info: Public share metadata for signup flow (no login required). GET /paperoffice_account...
- **Get workspace telephony agent assignment** — `GET /paperoffice_account/workspace_telephony_agent` — po_workspaces_telephony_agent_get: Read primary Conversation Agent for telephony shares in a workspace. GET...
- **List external workspace users** — `GET /paperoffice_account/external_users` — po_workspaces_external_users_list: List all external users with workspace access (admin view, root/administrator...
- **List my workspace shares** — `GET /paperoffice_account/my_shares` — po_workspaces_shares_list: List workspace shares created by the current token (owner view). Optional...
- **List workspaces** — `GET /documents/workspaces-list` — po_workspaces_list: List workspaces accessible to the current token. Returns workspace ID, name, workspace_tier...
- **List workspaces shared with me** — `GET /paperoffice_account/shared_with_me` — po_workspaces_shares_shared_with_me: List workspaces shared with the current token (recipient view). GET...
- **Resend workspace share invitation** — `POST /paperoffice_account/resend_invite` — Resends a pending share invitation (owner only, rate-limited).
- **Revoke or leave workspace share** — `POST /paperoffice_account/revoke_share` — po_workspaces_share_revoke: Revoke share as owner or leave as recipient. POST /paperoffice_account/revoke_share...
- **Set workspace telephony agent assignment** — `POST /paperoffice_account/workspace_set_telephony_agent` — po_workspaces_telephony_agent_set: Set or clear primary Conversation Agent for telephony shares. POST...
- **Update workspace** — `POST /documents/workspaces-update` — po_workspaces_update: Update workspace fields (name, business type, tier, AI-DMS, IDP pipeline, access protection...
- **Update workspace share** — `POST /paperoffice_account/update_share` — Updates permissions and settings of an existing workspace share (owner only).
- **Validate Workspace Storage Health** — `POST /documents/workspace-storage-health` — Check storage connectivity and health for a workspace — cloud mode, BYOS (Bring Your Own Storage) mount status...
### Document AI — E-Signatures
- **Cancel signature request (eSignatures API)** — `POST /signatures/cancel` — Cancel a pending e-signature request. Signers can no longer complete after cancellation; completed requests cannot...
- **Configure signing reminders** — `GET /signature_link/get_reminder_settings` — Returns global reminder settings for signing requests (GET only).
- **Create signature request (eSignatures API)** — `POST /signatures/create` — Create an e-signature request with signers, document references, and optional reminder settings.
- **Create signature request (signing link)** — `POST /signature_link/create_and_send` — Create a signing request and send invitations.
- **Download eSignature Document** — `GET /signatures/download` — Download the signed PDF for a completed e-signature request. Provide the signature request UUID from create/status...
- **Generate mobile signing link** — `POST /signature_link/generate_mobile_token` — Generate a mobile-friendly signing link for an external signer. Returns a time-limited URL for the signature-link flow.
- **Get signature details** — `GET /signatures/get` — Get status and signer details for an e-signature request — pending, completed, or declined.
- **List signature requests (eSignatures API)** — `GET /signatures/list` — List e-signature requests with status filters — pending, completed, declined, or expired.
- **List signature requests (signing link / batch)** — `POST /signature_link/get_batch_status` — Overview List all signing requests with status, or get details of a specific request. Can also query signature...
- **List signature types** — `GET /signatures/types` — Overview List available signature types and saved signature templates. Returns eIDAS signature levels (SES simple...
- **Save signature template** — `POST /signatures/save_template` — Save signer field placements and template metadata for reuse in future e-signature requests.
- **Send reminder** — `POST /signatures/remind` — Send a reminder email to pending signers on an e-signature request.
- **Verify signature** — `POST /signature_link/verify_document` — Overview Verify, check and validate digital signatures on a document. Validates signature integrity, certificate...
- **Cancel signing request (signing link)** — `POST /signature_link/cancel_signing_request` — Cancel a pending signing-link request by signing ID. Signers can no longer complete after cancellation.
- **Check signing status** — `GET /signature_link/get_signing_status` — Check the signing status of a signature-link request — pending, completed, or expired.
- **Download Signing Link Document** — `GET /signature_link/download_signed_document` — Download a signed PDF or certificate.
- **Get document signatures** — `GET /signature_link/get_document_signatures` — List signature records and signer status for a document accessed via signature links.
- **Resend invitation** — `POST /signature_link/resend_invitation` — Resend a signing invitation email for a pending signature-link participant.
- **Save signing reminder settings** — `POST /signature_link/save_reminder_settings` — Persist account-wide signing reminder defaults (not per signing request).
- **Send Signing Request** — `POST /signature_link/send_signing_request` — Send a signature-link signing request to one or more external signers.
- **Sign document** — `POST /signature_link/sign` — Signer-facing public endpoint — no Bearer token. Submit a signature image or text for an active signing request.
- **Verify otp** — `POST /signature_link/verify_otp` — Signer-facing public endpoint — no Bearer token. Verifies the one-time password (OTP) for a signing-link session.
### Document AI — HITL
- **Approve Task (Legacy)** — `POST /hitl_review/approve` — Legacy alias of po_tasks_resolve_task with decision=approve. Uses the same HITL consensus kernel as POST...
- **Claim Review Task** — `POST /hitl_review/claim` — Claim a HITL task (optimistic lock). Status pending or awaiting_reviews. Blind-review protection: already reviewed...
- **Complete Task (Legacy)** — `POST /hitl_review/complete` — Legacy alias of po_tasks_resolve_task with decision=approve (complete). Same consensus kernel as POST...
- **HITL Health Check** — `GET /hitl_review/check` — HITL review service health check. Reports whether the HITL review service is reachable and operational. Keywords...
- **Reject Task (Legacy)** — `POST /hitl_review/reject` — Legacy alias of po_tasks_resolve_task with decision=reject. Requires a reason. Same consensus kernel as POST...
### Document AI — Import & Migration
- **Cancel import job** — `POST /import/import-cancel` — Cancel a running import job. Already imported files remain; queued work is stopped.
- **Create import job** — `POST /import/import-create` — Create an import job.
- **Delete import job** — `POST /import/import-delete` — Delete an import job record and its temporary staging artifacts. Does not delete documents already committed to the DMS.
- **Get import status** — `POST /import/import-status` — Returns the current import job status including live file counters.
- **List import files** — `POST /import/import-files` — Return the paginated file list for an import job (per-file status: pending, imported, failed, skipped).
- **List import jobs** — `POST /import/import-jobs-list` — Overview List all import jobs of the account including KPI statistics (Total, Completed, In Progress, Failed).
- **Request import upload URL** — `POST /import/request-upload-url` — Generate a signed upload URL for direct file upload (Cloudflare bypass).
- **Retry import job** — `POST /import/import-retry` — Retry a failed import job from the last checkpoint. Use after fixing source files or connector configuration.
- **Scan import source** — `POST /import/import-scan` — Overview Scans the import source and lists all found files. Returns count, sizes, and type breakdown.
- **Start import job** — `POST /import/import-start` — Start an import batch. Returns progress_percent and status. Call repeatedly until completed.
- **Upload local files to import** — `POST /import/upload-local-files` — Upload multiple files with folder structure (local batch import).
- **Upload ZIP source for import** — `POST /import/upload-source` — Upload a ZIP archive for bulk import (ELO export or local_upload ZIP mode).
### Document AI — OCR & IDP
- **Analyze document with AI-OCR** — `POST /job/add/paperoffice_aiocr___generate` — Overview AI-powered OCR document analysis — extract text, detect tables, layout, bounding boxes. Modes: text (fast)...
- **Extract AI-OCR grid boxes** — `POST /job/add/paperoffice_aiocr___generate` — Aiocr: AI-OCR Grid/Boxes OCR with bounding boxes - includes precise text positions for each line. Required for...
- **Extract AI-OCR plain text** — `POST /job/add/paperoffice_aiocr___generate` — Fast plain-text OCR extraction (no full layout analysis).
- **Run complete AI-OCR analysis** — `POST /job/add/paperoffice_aiocr___generate` — Aiocr: AI-OCR Complete Analysis Full document analysis - includes text, bounding boxes, table detection, and layout...
- **Extract ID card or passport** — `POST /job/add/workflow` — NOTE: This tool currently provides OCR text extraction only. Document-type-specific field extraction (IDP) is not...
- **Extract insurance policy** — `POST /job/add/workflow` — Extract insurance policy fields — policy number, insured party, coverage period, and premium.
- **Extract legal document** — `POST /job/add/workflow` — Extract structured sections and parties from legal documents and contracts.
- **Extract payroll / pay stub** — `POST /job/add/workflow` — Overview Payroll / Pay Stub Extract salary and payroll data. Fields: employee_name, pay_period, gross, net...
- **Extract government form data** — `POST /job/add/paperoffice_aiocr___generate` — Extract data from government and official forms (applications, civic/ID forms). Fields: all_fields, checkboxes...
- **Extract handwritten customer form** — `POST /job/add/paperoffice_aiocr___generate` — Handwritten customer/intake form recognition (filled forms). Fields: extracted_text, confidence, language. Pipeline...
- **Extract handwritten document** — `POST /job/add/paperoffice_aiocr___generate` — General handwritten page/note recognition (not a structured intake form). Fields: extracted_text, confidence...
- **Extract US tax forms** — `POST /job/add/paperoffice_aiocr___generate` — Extract data from US tax forms (W-2, 1040, 1099 and similar). Fields: all_fields, checkboxes, signatures. Pipeline...
- **Extract hotel invoice** — `POST /job/add/workflow` — Extract hotel invoice fields — guest, stay dates, room charges, taxes, and total amount.
- **Export DATEV SKR03 accounting** — `POST /job/add/workflow` — Overview Extract structured accounting data in DATEV SKR03 format. Fields: document date, document number, posting...
- **Extract bank check data** — `POST /job/add/workflow` — NOTE: This tool currently provides OCR text extraction only. Document-type-specific field extraction (IDP) is not...
- **Extract bank details** — `POST /job/add/workflow` — Extract bank account details from financial documents — IBAN, BIC, account holder, and bank name fields.
- **Extract cash receipt data** — `POST /job/add/workflow` — Extract structured fields from cash receipts — amount, date, vendor, and payment method.
- **Extract custom fields (IDP)** — `POST /job/add/workflow` — Extract custom IDP field definitions configured for the account from uploaded documents.
- **Extract invoice** — `POST /job/add/workflow` — Extract structured invoice fields via the IDP workflow (POST /job/add/workflow).
- **Extract invoice (German/DATEV-optimized)** — `POST /job/add/workflow` — Overview Extract data from German invoices with DATEV-compatible fields. Fields: invoice number, date, supplier...
- **Extract invoice basic fields** — `POST /job/add/workflow` — Lightweight invoice extraction with essential fields only — vendor, total, date, and invoice number.
- **Extract statement of account** — `POST /job/add/workflow` — Extract account statement fields — period, opening balance, transactions, and closing balance.
- **Extract utility bill** — `POST /job/add/workflow` — Extract utility bill fields — provider, billing period, consumption, and amount due.
- **Extract letter or mail** — `POST /job/add/workflow` — Letters: Letter / Mail Extract letter metadata and content. Fields: sender, recipient, date, subject, body_summary...
- **Extract receipt** — `POST /job/add/workflow` — Extract retail receipt fields — merchant, line items, tax, and total.
- **Extract delivery note** — `POST /job/add/workflow` — Extract delivery note fields — shipper, recipient, items, quantities, and delivery date.
- **Extract purchase order** — `POST /job/add/workflow` — Orders: Purchase Order Extract purchase order data. Fields: order_number, date, vendor, buyer, items, delivery_date...
- **Extract shipping waybill** — `POST /job/add/workflow` — Extract shipping waybill fields — tracking number, carrier, sender, recipient, and weight.
- **Extract construction plan/blueprint** — `POST /job/add/workflow` — Extract metadata and annotations from construction plans and blueprints via AI-IDP workflow.
- **Extract vehicle registration** — `POST /job/add/workflow` — Overview Vehicle Registration Extract vehicle registration data. Fields: plate_number, make, model, VIN, owner...
### Document AI — PDF
- **Add password to PDF** — `POST /job/add/pdfstudio___lock_with_password_pdf` — Add password protection to a PDF via the PDF Studio workflow pipeline.
- **Compress PDF** — `POST /job/add/pdfstudio___compress_pdf` — Compress a PDF to reduce file size while preserving readability. Submit with file or source_url. Use...
- **Convert eBook to PDF** — `POST /job/add/pdfstudio___ebook_to_pdf` — Convert eBook formats to PDF for unified document processing.
- **Convert images to PDF** — `POST /job/add/pdfstudio___image_to_pdf` — Convert one or more raster images into a single PDF document. Supports common image formats and optional page sizing...
- **Convert Office files to PDF** — `POST /job/add/pdfstudio___office_to_pdf` — Convert Microsoft Office documents to PDF for archival and OCR pipelines.
- **Convert PDF to Excel** — `POST /job/add/pdfstudio___pdf_to_excel` — Convert a PDF spreadsheet or table layout into an Excel workbook. Pipeline: pdfstudio___pdf_to_excel. Use...
- **Convert PDF to JPG** — `POST /job/add/pdfstudio___pdf_to_jpg` — Rasterize PDF pages to JPG images. Pipeline: pdfstudio___pdf_to_jpg. Use processing_lane for Start-SLA...
- **Convert PDF to PDF/A** — `POST /job/add/pdfstudio___pdf_to_pdfa` — Convert a PDF to PDF/A for long-term archival compliance. Pipeline: pdfstudio___pdf_to_pdfa. Use processing_lane...
- **Convert PDF to PowerPoint** — `POST /job/add/pdfstudio___pdf_to_powerpoint` — Convert a PDF presentation into an editable PowerPoint file. Pipeline: pdfstudio___pdf_to_powerpoint. Use...
- **Convert PDF to WebP** — `POST /job/add/pdfstudio___pdf_to_webp` — Rasterize PDF pages to WebP images. Pipeline: pdfstudio___pdf_to_webp. Use processing_lane for Start-SLA...
- **Convert PDF to Word** — `POST /job/add/pdfstudio___pdf_to_word` — PDF processing: conversion, editing, and optimization. Convert PDF to Word document (DOCX). Parameter: required...
- **Convert URL to PDF** — `POST /job/add/pdfstudio___url_to_pdf` — Convert a public web page to PDF using a headless browser renderer.
- **Edit PDF metadata** — `POST /job/add/pdfstudio___edit_metadata_pdf` — Edit or read PDF metadata via pipeline pdfstudio___edit_metadata_pdf.
- **Merge pdf** — `POST /job/add/pdfstudio___merge_pdf` — Merge multiple PDFs into one document.
- **Remove password from PDF** — `POST /job/add/pdfstudio___unlock_with_password_pdf` — Remove known password protection from a PDF (alias of unlock-with-password). Pipeline...
- **Remove restrictions** — `POST /job/add/pdfstudio___remove_restrictions_pdf` — Overview PDF Remove Restrictions Remove printing/editing restrictions.## Request parameters Authenticate with your...
- **Rotate pdf** — `POST /job/add/pdfstudio___rotate_pdf` — Rotate PDF pages by 90°, 180°, or 270°. Pipeline: pdfstudio___rotate_pdf. Use processing_lane for Start-SLA...
- **Split PDF** — `POST /job/add/pdfstudio___split_pdf` — Split a PDF into separate files by page ranges or bookmarks. Pipeline: pdfstudio___split_pdf. Use processing_lane...
- **Split PDF via AI** — `POST /job/add/workflow` — Split a multi-document PDF into separate files using AI layout analysis.
- **Unlock PDF with password** — `POST /job/add/pdfstudio___unlock_with_password_pdf` — Unlock an encrypted PDF when the password is supplied. Primary pipeline: pdfstudio___unlock_with_password_pdf. Use...
### Document AI — Storage Mounts
- **Add Storage Mount** — `POST /storage_mounts/add` — Add an external storage mount (SFTP example). Required: name, host, username, and credentials (password or ssh_key)...
- **Browse storage mount files** — `GET /storage_mounts/browse` — Browse files and directories on a storage mount. Returns file listing with metadata (size, modified date, type).
- **Create storage mount directory** — `POST /storage_mounts/mkdir` — Create a folder on a configured storage mount (SFTP/FTP).
- **Create storage mount mirror** — `POST /storage_mounts/mirrors-add` — Overview Add a new mirror target for a storage mount. Configure destination, sync interval, and filter rules.
- **Delete Storage Mount** — `POST /storage_mounts/delete` — Delete a storage mount configuration. Fails when active connectors still reference the mount.
- **Delete storage mount mirror** — `POST /storage_mounts/mirrors-remove` — Overview Remove a mirror configuration from a storage mount. Stops future syncs but does not delete mirrored data.
- **Get storage mount details** — `GET /storage_mounts/get` — Get full details for one storage mount — connector type, host, base path, health status, and linked connectors.
- **Get storage mount health status** — `GET /storage_mounts/health` — Overview Check health status of all configured storage mounts. Returns availability, latency, and disk usage per mount.
- **List storage mount mirrors** — `GET /storage_mounts/mirrors-list` — Overview List all configured mirror targets for storage mounts. Shows mirror destinations, sync status, and last...
- **List storage mounts** — `GET /storage_mounts/list` — List configured storage mounts for the account with connection status and mount purpose.
- **Test storage mount connection** — `POST /storage_mounts/test` — Test whether a saved storage mount is reachable, or validate connector credentials before saving.
- **Toggle storage mount mirror** — `POST /storage_mounts/mirrors-toggle` — Overview Enable or disable a storage mount mirror without deleting the configuration. Useful for temporary maintenance.
- **Update Storage Mount** — `POST /storage_mounts/update` — Overview Update Storage Mount Modify an existing storage mount. Required: mount_id Optional: Any field to update
### Document AI — Tasks & Substitutes
- **Claim task** — `POST /workflow_tasks/claim` — Claim a task for yourself. Requires task_id. Use when processing tasks from the task queue.
- **Complete task** — `POST /workflow_tasks/complete` — Mark a task as completed. Requires task_id. Optionally pass result_data with completion details. Triggers...
- **Escalate workflow task** — `POST /workflow_tasks/escalate` — Escalate workflow task. POST /workflow_tasks/escalate with task_uuid and reason.
- **Get task details** — `POST /workflow_tasks/get` — Get detailed information about a specific task: title, description, status, priority, due_date, assigned_to...
- **List my tasks** — `GET /workflow_tasks/my` — List all tasks assigned to the current user. Returns task_id, title, status, priority, due_date, assigned_by...
- **Mark Task Read** — `POST /workflow_tasks/mark_read` — Mark all unread workflow notifications for a task as read. Parameter task_id: numeric DB id, task_uuid...
- **Reject workflow task** — `POST /workflow_tasks/reject` — Reject a workflow task. POST /workflow_tasks/reject with task_uuid and reason.
- **Release workflow task claim** — `POST /workflow_tasks/release` — Release claimed workflow task. POST /workflow_tasks/release with task_uuid.
- **Resolve task** — `POST /workflow_tasks/resolve` — Resolve a human workflow task or HITL review. Required: decision (approve|reject|escalate|postpone) and one...
### Document AI — User Groups
- **Groups: Get Group Details** — `POST /user_groups/get` — Groups: Get group details by group_id. Returns metadata, settings, and members. Uses handler=user_groups&command=get.
- **Groups: Get Group Members** — `POST /user_groups/get_members` — Groups: Get members of a group. Required: group_id. Returns member list with user details. Uses...
- **Groups: Get My Groups** — `POST /user_groups/get_user_groups` — Groups: Get groups the current user belongs to. Returns membership info. No extra params. Uses...
- **Groups: List All Groups** — `POST /user_groups/list` — Groups: List all user groups. Returns groups with id, name, description, color, icon, image_url, priority, is_active...
### Document AI — Webhooks
- **Create Webhook Subscription** — `POST /webhooks/subscribe` — po_webhooks_subscribe: Create a new webhook subscription. Payloads are signed with HMAC-SHA256. Response includes...
- **Delete Webhook Subscription** — `POST /webhooks/delete` — po_webhooks_delete: Delete a webhook subscription. Delivery logs are preserved for audit purposes. Keywords: delete...
- **List Webhook Subscriptions** — `GET /webhooks/list` — po_webhooks_list: List all webhook subscriptions for the current account. Shows URL, events, active status, retry...
- **Test webhook** — `POST /webhooks/test` — po_webhooks_test: Send a test.ping event to a webhook subscription to verify connectivity. Shows status code...
- **Update Webhook Subscription** — `POST /webhooks/update` — po_webhooks_update: Update an existing webhook subscription. Can change name, URL, events, secret, filters, headers...
### Document AI — Workflow Orchestration
- **System templates** — `GET /workflow/system_list` — List built-in system workflow templates (read-only catalog).
- **Create template** — `POST /workflow_templates/add` — Create a custom user workflow template.
- **Delete template** — `POST /workflow_templates/delete` — Deactivate a user workflow template (soft delete).
- **Execute template** — `POST /job/add/workflow` — Execute a saved workflow template.
- **Get template** — `POST /workflow_templates/get` — Load a single system workflow template by ID.
- **List Workflow Templates** — `GET /workflow_templates/list` — List user workflow templates (graph + agent templates) for the authenticated account.
- **Update template** — `POST /workflow_templates/update` — Update an existing user workflow template.
### Documentation & Discovery
- **Get MCP server integration info** — `GET /docs/markdown` — Returns MCP server integration guidance for AI clients — authentication, profiles, tool discovery, and Document...
- **Get Postman collection** — `GET /docs/postman` — Returns the live Postman collection JSON. Re-import when the footer release ID changes.
### General
- **Parse email files (EML, MSG, PST)** — `POST /job/add/paperoffice_dataripper___email_parser` — Parse email containers (EML, MSG, PST) into structured parts and attachments for downstream document ingestion.
- **Redact image regions** — `POST /job/add/paperoffice_dataripper___redact_image` — POST /job/add/paperoffice_dataripper___redact_image. Used after PII preview to produce anonymized PDF. Required...
### Media AI — Image Studio
- **Generate image** — `POST /job/add/paperoffice_imagestudio___generate` — Image generate: POST /job/add/paperoffice_imagestudio___generate. Requires prompt. model basic|premium|ultra sets...
- **Remove background** — `POST /job/add/paperoffice_imagestudio___remove_bg` — Image remove background: POST /job/add/paperoffice_imagestudio___remove_bg with file upload. output_format webp|png...
### Media AI — Translation
- **Get supported languages** — `GET /translate/languages` — Translation language catalog: GET /translate/languages. Returns 35 language codes with names, target_locale...
- **Translate text** — `POST /translate/text`
### Media AI — Voice
- **Transcribe audio** — `POST /job/add/paperoffice_voice___stt` — STT transcribe: POST /job/add/paperoffice_voice___stt with audio_file upload. quality basic|premium|ultra...
- **Clone voice (TTS)** — `POST /job/add/paperoffice_voice___tts` — TTS voice clone: POST /job/add/paperoffice_voice___tts with voice_sample file (no catalog voice). quality...
- **Generate multi-speaker TTS (inline tags)** — `POST /job/add/paperoffice_voice___tts` — TTS multi-speaker: POST /job/add/paperoffice_voice___tts with voice=Multi and inline speaker tags. Requires text...
- **Generate speech (single voice)** — `POST /job/add/paperoffice_voice___tts` — TTS single voice: POST /job/add/paperoffice_voice___tts. Requires text, voice, language (POST /voice/voices)...
- **List available TTS voices** — `POST /voice/voices` — TTS voice catalog: POST /voice/voices. Returns voices grouped by language with name, gender, tier, sample_url...
### Pricing & Plans
- **List pricing plans and tiers** — `GET /billing/pricing/tiers` — PRICING PLANS & TIERS. Shows all PaperOffice subscription plans with monthly/yearly prices, credits, features...
### Relations AI — CRM
- **Get linked documents** — `GET /crm_intelligence/document_links/{crm_account_id}` — Overview Documents linked to a CRM account. Link Types: - invoice - Invoices - contract - Contracts - quote...
- **Get account insights** — `GET /crm_intelligence/insights/{crm_account_id}` — Overview All AI insights for a specific CRM account. Including Overall Health Score and Risk Level.
- **Get all insights** — `GET /crm_intelligence/insights` — Overview All AI Insights across accounts or filtered. Insight Types: - sentiment - communication_sentiment...
- **Get upsell opportunities** — `GET /crm_intelligence/opportunities` — Overview Identify upselling opportunities. Accounts with high upselling potential, sorted by score.
- **Get at-risk accounts** — `GET /crm_intelligence/at_risk` — Overview Accounts with high churn risk. Sorted by risk score, including factors and recommendations.
- **Get sentiment history** — `GET /crm_intelligence/sentiment/{crm_account_id}` — Overview Sentiment analysis for an account over time. Shows sentiment trend from emails and notes.
- **Get CRM statistics** — `GET /crm_intelligence/stats` — Overview Global CRM Intelligence Statistics. Overview of all accounts, insights, risks, and opportunities.
### Security AI — Fake Email
- **Check email** — `POST /fakeemail/check` — Check whether an email address is disposable or fake.
- **Check emails** — `POST /fakeemail/check_bulk` — Validate a batch of email addresses for deliverability and disposable-domain signals.
### Security AI — Fingerprint
- **Find similar devices (fingerprint)** — `POST /fingerprint/similar` — Find devices with similar fingerprint signals in your tenant. Returns ranked matches with similarity scores for...
- **Get fingerprint device details** — `POST /fingerprint/device` — Load detailed device attributes for a known fingerprint hash — platform, browser family, first/last seen timestamps...
- **Get linked devices (fingerprint)** — `POST /fingerprint/linked` — List devices linked through shared network and behavioral signals (IP clustering, visitor graph) within your tenant.
- **Identify device (fingerprint)** — `POST /fingerprint/identify` — Identify a browser or app visitor from first-party signals (fingerprint hash). Returns a stable device profile for...
- **Verify fingerprint** — `POST /fingerprint/verify` — Verify whether a submitted fingerprint hash matches a known device profile in your tenant. Useful for step-up...
### Security AI — Privacy & Compliance
- **Privacy Forget (Art. 17)** — `POST /privacy/forget` — Delete fingerprint records for an identifier within the authenticated tenant (Art. 17 GDPR erasure). Sets...
### Workflow AI — Job Management
- **Download Job Result** — `GET /job/download/{download_token}` — Overview Download the result file of a completed job. The download_token is returned in the job result from /job/get...
- **Get job status and result** — `GET /job/get/{job_id}` — Use after async submissions (HTTP 202, connection hold timeout, or client_wait=false). Returns envelope status...
- **Get pricelist** — `GET /job/pricelist` — Returns all available job pipelines with credit costs and billing units. Keys are pipeline names (e.g...
- **Health ping** — `GET /health` — API connectivity check. Returns pong when reachable.
---
## Further Reading
- **Postman Collection:** https://api.paperoffice.ai/latest/docs/postman
- **Pricing:** https://app.paperoffice.ai/en/pricing/calculator
- **Pricing Tiers (API):** https://api.paperoffice.ai/latest/billing/pricing/tiers
- **Credit balance:** `GET /billing/credits/balance` · **Usage log:** `GET /billing/usage-detail`
- **MCP (DMS):** https://mcp.paperoffice.ai/dms
- **MCP (Claude):** https://mcp.paperoffice.ai/claude
- **MCP (Cursor):** https://mcp.paperoffice.ai/cursor
- **MCP (ChatGPT / OpenAI):** https://mcp.paperoffice.ai/openai
- **MCP (Document AI):** https://mcp.paperoffice.ai/mcp-document-ai
- **MCP (Workflow AI):** https://mcp.paperoffice.ai/mcp-workflow-ai
- **MCP (full, 300+):** https://mcp.paperoffice.ai/mcp-full
- **MCP (full reference):** see `llms-full.txt` → MCP Server section
- **Claude.ai allowlist:** mcp.paperoffice.ai and api.paperoffice.ai (two f's; never paperofice)
- **Get API Token:** https://paperoffice.ai
*Generated 2026-08-17 from live API documentation (release `R20260817.0716`).*