# 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`).*