{"info":{"name":"PaperOffice AI API","_postman_id":"f47ac10b-58cc-4372-a567-0e02b2c3d479","schema":"https://schema.getpostman.com/json/collection/v2.1.0/collection.json","description":"# PaperOffice AI API\n\n## Documentation release\n\n**`R20260525.1755`** — compare with [paperoffice.ai](https://paperoffice.ai) (site footer). Re-import if stale: `GET https://api.paperoffice.ai/latest/docs/postman`\n\n---\n\n## LLM-first (use this for coding — not this JSON file)\n\n> **Cursor / Claude / ChatGPT / Windsurf:** Do **not** paste this Postman collection (~1.5 MB) into a prompt.\n> Use the **llmstxt.org** exports instead (~28× smaller, built for agents):\n>\n> | Resource | URL |\n> |----------|-----|\n> | **Full spec (recommended)** | [llms-full.txt](https://api.paperoffice.ai/latest/docs/llms-full.txt) |\n> | **Hub / index** | [llms.txt](https://api.paperoffice.ai/latest/docs/llms.txt) |\n> | **Developer page** | [paperoffice.ai/developer/llms](https://paperoffice.ai/developer/llms) |\n> | **MCP (tool calling)** | [mcp.paperoffice.ai/mcp](https://mcp.paperoffice.ai/mcp) |\n\n**Example prompt:**\n```\nRead https://api.paperoffice.ai/latest/docs/llms-full.txt\nDocumentation release: R20260525.1755\nImplement OCR for a PDF using the job API.\n```\n\n---\n\n## Start here (Postman / humans)\n\nOpen **🚀 Introduction & Basics** → **Quickstart Tutorial** ①–⑤, then **Guides** (release, LLM-first, auth, jobs).\n\n## Authentication\n\n```http\nAuthorization: Bearer YOUR_TOKEN\n```\n\n`po_sk_` server · `po_ut_` user · `po_pk_` browser-safe. No token = VISITOR (`/health`, `/ping`, geolocation, FX only).\n\n## Export URL\n\n```\nhttps://api.paperoffice.ai/latest/docs/postman\n```\n\n---\n\n*Product APIs: browse folders A–Z. Request footers may show `Documentation release: …`*\n\n*Generated: May 2026 · Release `R20260525.1755`*"},"auth":{"type":"bearer","bearer":[{"key":"token","value":"{{bearer_token}}","type":"string"}]},"event":[],"variable":[{"key":"base_url","value":"https://api.paperoffice.ai/latest","type":"string","description":"API base URL. Production: https://api.paperoffice.ai/latest"},{"key":"bearer_token","value":"","type":"string","description":"Your Bearer Token (REQUIRED for most endpoints). Get it at paperoffice.ai. Format: po_sk_xxx (System Key) or po_ut_xxx (User Token). Without a token you get VISITOR mode — only /ip2location, /currencyexchange, /health, /ping work."},{"key":"priority","value":"100","type":"string","description":"Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit for your subscription plan default."},{"key":"client_wait","value":"true","type":"string","description":"Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. Same as async_only=true."},{"key":"job_id","value":"","type":"string","description":"Job ID returned by async job endpoints. Use with /job/get/{job_id} to poll for results."},{"key":"pipeline","value":"","type":"string","description":"Full pipeline name for /job/add/{pipeline}. Use the exact pipeline name from the endpoint URL, e.g.: paperoffice_imagestudio___generate, workflow. See each endpoint for its specific pipeline name."},{"key":"locale","value":"en","type":"string","description":"Language/locale for API responses and processing. Default: en."},{"key":"documentation_release_id","value":"R20260525.1755","type":"string","description":"Documentation release ID for this export (format RYYYYMMDD.HHMM, Europe/Berlin). Compare with the release on paperoffice.ai. For AI coding prefer llms-full.txt — see Introduction → Guides."}],"item":[{"name":"🚀 Introduction & Basics","description":"# Introduction & Basics\n\n**Start here.** This folder is the **inline API documentation** for PaperOffice — there is no separate developer portal.\n\n## Documentation release\n\n**Active API documentation release:** `R20260525.1755`\n\nThis ID is generated when the live Postman collection is built (`https://api.paperoffice.ai/latest/docs/postman`). Compare it with the release on [paperoffice.ai](https://paperoffice.ai) (footer / deploy badge). If they differ, **re-download** the collection or point your AI at fresh **llms.txt** exports.\n\nCurated requests may end with a footer line: `Documentation release: R20260525.1755`.\n\n---\n\n## LLM-first (read this before coding)\n\nFor **Cursor, Claude, ChatGPT, and other agents**, use **[llms-full.txt](https://api.paperoffice.ai/latest/docs/llms-full.txt)** (not this Postman file). Hub: [llms.txt](https://api.paperoffice.ai/latest/docs/llms.txt) · Landing: [paperoffice.ai/developer/llms](https://paperoffice.ai/developer/llms). Open **Guides → LLM-first integration** for copy-paste prompts. **MCP:** `https://mcp.paperoffice.ai/mcp`.\n\n---\n\n## Structure (four zones)\n\n| Zone | Folder | Purpose |\n|------|--------|----------|\n| **Tutorial** | Quickstart Tutorial | Numbered **①–⑤** — run top to bottom (ping → pricing → first job → poll → download) |\n| **Guides** | Guides | Release notice, **LLM-first coding**, Authentication, Priority & jobs |\n| **Integration** | Integration & Discovery | MCP meta, Postman export, llms URLs |\n| **Reference** | Reference | **Errors & status codes** (global — not repeated per endpoint) |\n\n---\n\n## What you need before any AI pipeline\n\n1. **Bearer token** — `Authorization: Bearer YOUR_TOKEN` (see **Guides → Authentication**).\n2. **Job pattern** — most processing uses `POST /job/add/{pipeline}` (see **Quickstart Tutorial** step ③).\n3. **Credits** — `_billing` on responses; catalog pricing in **💳 Pricing & Plans** or the [Pricing Calculator](https://app.paperoffice.ai/en/pricing/calculator).\n\n---\n\n## VISITOR mode (no token)\n\nWithout a token, only lightweight endpoints work (`/health`, `/ping`, `/ip2location/*`, `/currencyexchange/*`). **All job pipelines require a Bearer token.**\n\n---\n\n## Related folders\n\n| Need | Open |\n|------|------|\n| Per-service credit matrix | **💳 Pricing & Plans** |\n| Image / voice / translate | **🎨 Media AI** |\n| OCR / IDP | **📄 Document AI** |\n| Browser-safe keys | **🏢 Account & Administration → Publishable Keys** |\n\n---\n\n*Documentation release: `R20260525.1755` · Regenerate via `GET https://api.paperoffice.ai/latest/docs/postman`*\n","item":[{"name":"🧭 Quickstart Tutorial","description":"Run **① → ⑤** in order (~2 minutes). Step **③** submits a demo invoice to `{{pipeline}}`.\n\nPrerequisites: set `{{bearer_token}}` (see **Guides → Authentication**).","item":[{"name":"① Ping management endpoint","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/health","host":["{{base_url}}"],"path":["health"]},"description":"Simple Ping Basic connectivity check. Returns \"pong\" if API is reachable. No Authentication Required Response: json { \"status\": \"pong\", \"timestamp\": 1736942400 }\n\n---\n**Tool-ID:** `po_jobs_ping` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_jobs_ping`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/health","host":["{{base_url}}"],"path":["health"]},"description":"Simple Ping Basic connectivity check. Returns \"pong\" if API is reachable. No Authentication Required Response: json { \"status\": \"pong\", \"timestamp\": 1736942400 }\n\n---\n**Tool-ID:** `po_jobs_ping` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_jobs_ping`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"message\": \"service is running stable inside limits\",\n    \"processing_time\": \"10.65ms\",\n    \"status\": \"success\",\n    \"success\": true\n}"}]},{"name":"② Get pricelist","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/job/pricelist","host":["{{base_url}}"],"path":["job","pricelist"]},"description":"Get API Pricelist Returns all available API methods with their credit costs. Cost: 10 credits Response: json { \"pricelist\": { \"ip2location___full\": { \"credits\": 0.01, \"unit\": \"request\", \"description\": \"Full IP geolocation\" }, \"paperoffice_imagestudio___generate___basic\": { \"credits\": 5, \"unit\": \"image\", \"description\": \"Image Generation Basic\" } } }\n\n---\n**Tool-ID:** `po_jobs_get_pricelist` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_jobs_get_pricelist`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"③ Submit your first job","request":{"method":"POST","header":[{"key":"Authorization","value":"Bearer {{bearer_token}}","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"url":{"raw":"{{base_url}}/job/add/{{pipeline}}","host":["{{base_url}}"],"path":["job","add","{{pipeline}}"]},"body":{"mode":"formdata","formdata":[{"key":"priority","value":"100","type":"text","description":"*(optional)* | Higher = faster queue start; omit = plan tier default | Type: integer"},{"key":"client_wait","value":"true","type":"text","description":"Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","disabled":true},{"key":"source_url","value":"https://api.paperoffice.ai/latest/assets/demo/demo_invoice.pdf","type":"text","description":"URL of the document to process. You can also upload a file via source_file."}]},"description":"# Submit Your First Job\n\nThis is the core request pattern for all PaperOffice AI processing.\n\n## How it works\n\n1. Leave `client_wait=true` (default) for **inline results** on the same HTTP connection (up to ~295s)\n2. Provide a document via `source_url` or `source_file`\n3. The `{{pipeline}}` variable determines what processing to run\n\n## Common Pipelines\n\n**Important:** pipeline names use triple underscores (`___`), not dots (`.`). The API rejects the dotted form with HTTP 400.\n\n| Pipeline | What it does |\n|----------|-------------|\n| `paperoffice_aiocr___generate` | AI-OCR / IDP: extract text & fields from images/PDFs |\n| `paperoffice_imagestudio___generate` | AI image generation (text-to-image) |\n| `paperoffice_imagestudio___remove_bg` | Remove background from an image |\n| `paperoffice_voice___tts` | Text-to-Speech (voice generation) |\n| `paperoffice_voice___stt` | Speech-to-Text (transcription) |\n| `workflow` | Generic workflow runner (invoke a custom workflow by ID) |\n\n## Inline wait vs. poll\n\n- **Default (`client_wait=true`)**: Result in the same response when ready (or HTTP 202 + `poll_url` after ~295s)\n- **`client_wait=false` or `async_only=true`**: Immediate `job_id` — poll `GET /job/get/{job_id}`\n- **`priority`**: Higher = faster queue + more credits; omit = plan default. Separate from the ~5 min connection hold.\n\nSet the `{{pipeline}}` collection variable to the pipeline you want to test, then hit **Send**."},"response":[{"name":"200 — Job Queued (Async)","originalRequest":{"method":"POST","header":[{"key":"Authorization","value":"Bearer {{bearer_token}}","type":"text"}],"url":{"raw":"{{base_url}}/job/add/{{pipeline}}","host":["{{base_url}}"],"path":["job","add","{{pipeline}}"]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"success\": true,\n    \"job_id\": \"job_abc123def456\",\n    \"status\": \"queued\",\n    \"priority\": 500,\n    \"estimated_completion\": \"2025-01-15T10:31:00Z\",\n    \"poll_url\": \"/job/get/job_abc123def456\"\n}"},{"name":"200 — Inline Result (client_wait=true)","originalRequest":{"method":"POST","header":[{"key":"Authorization","value":"Bearer {{bearer_token}}","type":"text"}],"url":{"raw":"{{base_url}}/job/add/{{pipeline}}","host":["{{base_url}}"],"path":["job","add","{{pipeline}}"]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"success\": true,\n    \"job_id\": \"job_abc123def456\",\n    \"status\": \"completed\",\n    \"result\": {\n        \"text\": \"Invoice #12345 \\u2014 Amount: EUR 1,250.00 \\u2014 Date: 2025-01-15\",\n        \"pages\": 1,\n        \"confidence\": 0.97\n    }\n}"}]},{"name":"④ Get job status and result","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/job/get/{job_id}","host":["{{base_url}}"],"path":["job","get","{job_id}"],"query":[{"key":"job_id","value":"42","description":"**REQUIRED** | The job ID returned by a previous tool call (format: poai-job_XXX_TIMESTAMP_HASH) | Type: string","disabled":false}]},"description":"GET /job/get/{job_id} — Po jobs get job status result\n\n---\n**Tool-ID:** `po_jobs_get_job_status_result` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_jobs_get_job_status_result`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"⑤ Download Job Result","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/job/download/{download_token}","host":["{{base_url}}"],"path":["job","download","{download_token}"],"query":[{"key":"download_token","value":"example-value","description":"**REQUIRED** | Temporary download token from the job result (returned by /job/get/{job_id}) | Type: string","disabled":false}]},"description":"Download the result file of a completed job. The download_token is returned in the job result from /job/get/{job_id} when the job status is \"completed\". The token is temporary and expires. Supported result types: images (PNG/JPG/WebP), PDFs, audio files (MP3/WAV), documents (DOCX/XLSX). The response Content-Type header indicates the file format.\n\n---\n**Tool-ID:** `po_jobs_download_result` • **Cost:** Free (included in base plan — no AI compute)\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/job/download/{download_token}","host":["{{base_url}}"],"path":["job","download","{download_token}"],"query":[{"key":"download_token","value":"example-value","description":"**REQUIRED** | Temporary download token from the job result (returned by /job/get/{job_id}) | Type: string","disabled":false}]},"description":"Download the result file of a completed job. The download_token is returned in the job result from /job/get/{job_id} when the job status is \"completed\". The token is temporary and expires. Supported result types: images (PNG/JPG/WebP), PDFs, audio files (MP3/WAV), documents (DOCX/XLSX). The response Content-Type header indicates the file format.\n\n---\n**Tool-ID:** `po_jobs_download_result` • **Cost:** Free (included in base plan — no AI compute)\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"content_type\": \"application/octet-stream\",\n    \"content_length\": 102400,\n    \"note\": \"Binary file response — consume as stream, not JSON. Check Content-Type header.\"\n}"}]}]},{"name":"📖 Guides","description":"Markdown reference — open each item's **Documentation** tab. Start with **Documentation release** and **LLM-first integration** before coding.","item":[{"name":"📌 Documentation release","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/health","host":["{{base_url}}"],"path":["health"]},"description":"## Documentation release\n\n**Active API documentation release:** `R20260525.1755`\n\nThis ID is generated when the live Postman collection is built (`https://api.paperoffice.ai/latest/docs/postman`). Compare it with the release on [paperoffice.ai](https://paperoffice.ai) (footer / deploy badge). If they differ, **re-download** the collection or point your AI at fresh **llms.txt** exports.\n\nCurated requests may end with a footer line: `Documentation release: R20260525.1755`.\n\nCollection variable: `{{documentation_release_id}}` (set when you import a fresh export).\n"},"response":[]},{"name":"🤖 LLM-first integration (recommended for coding)","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/health","host":["{{base_url}}"],"path":["health"]},"description":"# LLM-first integration (recommended for coding)\n\nPaperOffice is designed **LLM-first**: the model reads structured docs and chooses tools — not the other way around. **Do not paste this entire Postman JSON (~1.5 MB) into a chat context.**\n\n---\n\n## Choose the right surface\n\n| Priority | Surface | URL | Best for |\n|----------|---------|-----|----------|\n| **1 — Coding** | **llms-full.txt** | `https://api.paperoffice.ai/latest/docs/llms-full.txt` | Cursor, Claude Code, Windsurf, ChatGPT — full spec in one crawlable file |\n| **2 — Index** | **llms.txt** | `https://api.paperoffice.ai/latest/docs/llms.txt` | Smaller hub (llmstxt.org); link discovery before deep work |\n| **3 — Tools** | **MCP server** | `https://mcp.paperoffice.ai/mcp` | Native `tools/list` + `tools/call` in MCP clients |\n| **4 — Humans** | **Postman JSON** | `https://api.paperoffice.ai/latest/docs/postman` | Manual Send, QA, demos, Insomnia/Bruno |\n\nReplace placeholders when copying — use your stage (`/dev`, `/stage`, `/latest`).\n\n---\n\n## Example prompts (copy-paste)\n\n### Full implementation (recommended)\n\n```\nRead the PaperOffice API spec:\nhttps://api.paperoffice.ai/latest/docs/llms-full.txt\n\nDocumentation release: R20260525.1755\n\nImplement a Python function that uploads a PDF, runs AI-OCR, and returns extracted text using the job API (connection hold + poll).\n```\n\n### Hub-only (smaller context)\n\n```\nRead https://api.paperoffice.ai/latest/docs/llms.txt then fetch only the sections needed for Voice TTS.\nRelease: R20260525.1755\n```\n\n### MCP (Cursor / Claude Desktop)\n\nConfigure MCP at `https://mcp.paperoffice.ai/mcp` with `Authorization: Bearer YOUR_TOKEN`, then ask naturally: *\"List TTS voices and synthesize this script.\"*\n\n---\n\n## Why llms.txt beats Postman for agents\n\n| | llms-full.txt | Postman collection |\n|---|---------------|-------------------|\n| Size | ~780 KB | ~1.5 MB |\n| Format | Plain text, llmstxt.org | JSON + UI metadata |\n| Tool routing | Model reads endpoints & params | Human clicks requests |\n| Release | Regenerated with API deploy | Export timestamp in overview |\n\n---\n\n## Related\n\n- **Developer landing:** https://paperoffice.ai/developer/llms  \n- **Quickstart (executable):** Introduction → Quickstart Tutorial ①–⑤  \n- **Auth & jobs:** Introduction → Guides  "},"response":[]},{"name":"📘 Authentication Guide","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/health","host":["{{base_url}}"],"path":["health"]},"description":"# Authentication Guide\n\n**A Bearer token is mandatory** for all job/processing endpoints (Image, OCR, LLM, Voice, PDF, IDP, Translate text, …).\n\n---\n\n## Header\n\n```http\nAuthorization: Bearer YOUR_TOKEN\n```\n\nSet the collection variable `{{bearer_token}}` once — all curated requests inherit it.\n\n---\n\n## Token types\n\n| Prefix | Type | Use case | Browser-safe? |\n|--------|------|----------|---------------|\n| `po_sk_` | **Secret key** | Server-to-server, full API access | No — never expose in frontends |\n| `po_ut_` | **User token** | User-scoped; permissions depend on licence tier | No |\n| `po_pk_` | **Publishable key** | Browser / Claude Artifacts / ChatGPT Canvas | **Yes** — scoped, budget-capped, origin-locked |\n\n### Publishable keys (`po_pk_`)\n\nCreate with `po_sk_` via `POST /publishable_keys/create`. Full CRUD: **🏢 Account & Administration → Publishable Keys**.\n\nSafeguards: no `DELETE`, admin/billing blocked, matching `Origin` required, lifetime credit budget, per-minute rate limit.\n\n---\n\n## VISITOR mode (no token)\n\n| Endpoint | Purpose |\n|----------|---------|\n| `/health`, `/ping` | Connectivity |\n| `/ip2location/*` | IP geolocation |\n| `/currencyexchange/*` | FX rates |\n\nVISITOR sessions have **minimal credits** and **strict rate limits**. Upgrade to a real token for production workloads.\n\n---\n\n## Common auth errors\n\n| HTTP | Code | Action |\n|------|------|--------|\n| 401 | `AUTH_REQUIRED` | Add Bearer header |\n| 401 | `INVALID_TOKEN` | Check prefix and copy-paste |\n| 401 | `BEARERTOKEN_EXPIRED` | Rotate token in PaperOffice app |\n\nSee **Reference → Errors & Status Codes** for the full matrix."},"response":[]},{"name":"⚡ Priority, Jobs & Connection Hold","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/health","host":["{{base_url}}"],"path":["health"]},"description":"# Priority, Jobs & Connection Hold\n\nMost AI features run as **jobs**. This guide explains queue **priority**, the **connection hold**, and polling — the same model used across Document AI, Media AI, and Workflow AI.\n\n---\n\n## ⚡ Queue priority (billing & speed)\n\nThe `priority` parameter affects **how soon your job starts in the queue** and **how many credits** the job costs.\n\n| Priority | Typical wait until **job start** (non-binding) | Credit multiplier |\n|----------|-----------------------------------------------|------------------|\n| **900** | Synchronous / stream (holds this HTTP connection; not a queue tier above 899) | Highest |\n| **700–899** | 1–10 min | High |\n| **500–699** | 10–30 min | Mid |\n| **100–499** | 2–48 h | Lower cost |\n| **0–99** | best-effort / varies | Batch / background |\n\n**Omit `priority`** to use your subscription **plan default** (tier from bearer token).\n\n**Higher priority = faster queue start + higher credit cost** (logarithmic multiplier).\n\n**⏱ Job duration** depends on payload (e.g. IDP, long TTS text) — separate from queue start and from the HTTP connection hold below.\n\n---\n\n## 🔄 Connection hold & polling (~5 minute HTTP limit)\n\n### Default — hold this HTTP request (`client_wait=true`, omit parameter)\n\n```\nPOST /job/add/{pipeline}  →  hold connection up to ~5 min (~295s)  →  200 result OR 202 + poll_url\n```\n\n### After HTTP 202 (connection hold timeout)\n\nThe job **keeps running**. Poll `GET /job/get/{job_id}` (or use `poll_url` from the response) every **5–10 seconds** until `status` is `completed` or `failed`.\n\n### Immediate `job_id` (`client_wait=false` or `async_only=true`)\n\n```\n1. POST /job/add/{pipeline}      →  job_id immediately\n2. GET  /job/get/{job_id}         →  poll every 5–10s\n3. GET  /job/download/{token}     →  download result file (if applicable)\n```\n\n### Job status values\n\n| Status | Meaning |\n|--------|---------|\n| `processing` | Job is still running — keep polling |\n| `completed` | Done — result contains data or download URL |\n| `failed` | Error — check error details in response |\n\n\n---\n\n## Job ID format\n\n`poai-job_{priority}_{timestamp}_{hash}`\n\n## Credits\n\n- Credits are deducted at **job creation**, not at download.\n- Download tokens are **temporary** — fetch results promptly after `completed`.\n- Inspect `_billing.job` on responses for `credits_billed`, priority tier, and SLA labels.\n\n## Executable walkthrough\n\nRun **Quickstart Tutorial** steps ①–⑤ in order — they exercise ping, pricelist, submit, poll, and download.\n"},"response":[]}]},{"name":"🔌 Integration & Discovery","description":"Meta endpoints and URLs for MCP, collection export, and LLM-readable specs.","item":[{"name":"⑥ Get MCP server AI integration info","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/docs/markdown","host":["{{base_url}}"],"path":["docs","markdown"]},"description":"🤖 MCP Server - AI Tool integration Model Context Protocol MCP enables AI assistants to directly use PaperOffice tools. --- 🔗 Server URL https://api.paperoffice.ai/dev/mcp --- ⚡ Quick Setup Cursor IDE Remote MCP 1. Open Cursor Settings → MCP 2. Add new Remote MCP Server 3. Enter URL: htt.\n\n---\n**Tool-ID:** `po_documentation_mcp_server_ai_integration` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documentation_mcp_server_ai_integration`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/docs/markdown","host":["{{base_url}}"],"path":["docs","markdown"]},"description":"🤖 MCP Server - AI Tool integration Model Context Protocol MCP enables AI assistants to directly use PaperOffice tools. --- 🔗 Server URL https://api.paperoffice.ai/dev/mcp --- ⚡ Quick Setup Cursor IDE Remote MCP 1. Open Cursor Settings → MCP 2. Add new Remote MCP Server 3. Enter URL: htt.\n\n---\n**Tool-ID:** `po_documentation_mcp_server_ai_integration` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documentation_mcp_server_ai_integration`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.","body":{"mode":"formdata","formdata":[{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"processing_time\": \"13.41ms\",\n    \"status\": \"success\"\n}"}]},{"name":"⑦ Get Postman collection","request":{"method":"POST","header":[],"url":{"raw":"{{base_url}}/docs/postman","host":["{{base_url}}"],"path":["docs","postman"]},"description":"Complete Postman Collection with all endpoints. Direct URL: https://api.paperoffice.ai/dev/docs/postman Import to Postman: 1. Copy URL above 2. File → Import → Link 3. Paste and Import\n\n---\n**Tool-ID:** `po_documentation_postman_collection` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documentation_postman_collection`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[],"url":{"raw":"{{base_url}}/docs/postman","host":["{{base_url}}"],"path":["docs","postman"]},"description":"Complete Postman Collection with all endpoints. Direct URL: https://api.paperoffice.ai/dev/docs/postman Import to Postman: 1. Copy URL above 2. File → Import → Link 3. Paste and Import\n\n---\n**Tool-ID:** `po_documentation_postman_collection` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documentation_postman_collection`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Response truncated\"\n}"}]},{"name":"📎 LLM URLs quick reference","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/health","host":["{{base_url}}"],"path":["health"]},"description":"# LLM-first integration (recommended for coding)\n\nPaperOffice is designed **LLM-first**: the model reads structured docs and chooses tools — not the other way around. **Do not paste this entire Postman JSON (~1.5 MB) into a chat context.**\n\n---\n\n## Choose the right surface\n\n| Priority | Surface | URL | Best for |\n|----------|---------|-----|----------|\n| **1 — Coding** | **llms-full.txt** | `https://api.paperoffice.ai/latest/docs/llms-full.txt` | Cursor, Claude Code, Windsurf, ChatGPT — full spec in one crawlable file |\n| **2 — Index** | **llms.txt** | `https://api.paperoffice.ai/latest/docs/llms.txt` | Smaller hub (llmstxt.org); link discovery before deep work |\n| **3 — Tools** | **MCP server** | `https://mcp.paperoffice.ai/mcp` | Native `tools/list` + `tools/call` in MCP clients |\n| **4 — Humans** | **Postman JSON** | `https://api.paperoffice.ai/latest/docs/postman` | Manual Send, QA, demos, Insomnia/Bruno |\n\nReplace placeholders when copying — use your stage (`/dev`, `/stage`, `/latest`).\n\n---\n\n## Example prompts (copy-paste)\n\n### Full implementation (recommended)\n\n```\nRead the PaperOffice API spec:\nhttps://api.paperoffice.ai/latest/docs/llms-full.txt\n\nDocumentation release: R20260525.1755\n\nImplement a Python function that uploads a PDF, runs AI-OCR, and returns extracted text using the job API (connection hold + poll).\n```\n\n### Hub-only (smaller context)\n\n```\nRead https://api.paperoffice.ai/latest/docs/llms.txt then fetch only the sections needed for Voice TTS.\nRelease: R20260525.1755\n```\n\n### MCP (Cursor / Claude Desktop)\n\nConfigure MCP at `https://mcp.paperoffice.ai/mcp` with `Authorization: Bearer YOUR_TOKEN`, then ask naturally: *\"List TTS voices and synthesize this script.\"*\n\n---\n\n## Why llms.txt beats Postman for agents\n\n| | llms-full.txt | Postman collection |\n|---|---------------|-------------------|\n| Size | ~780 KB | ~1.5 MB |\n| Format | Plain text, llmstxt.org | JSON + UI metadata |\n| Tool routing | Model reads endpoints & params | Human clicks requests |\n| Release | Regenerated with API deploy | Export timestamp in overview |\n\n---\n\n## Related\n\n- **Developer landing:** https://paperoffice.ai/developer/llms  \n- **Quickstart (executable):** Introduction → Quickstart Tutorial ①–⑤  \n- **Auth & jobs:** Introduction → Guides  "},"response":[]}]},{"name":"📚 Reference","description":"Global error matrix — success examples on product endpoints omit 401/402/429 by design.","item":[{"name":"⚠️ Errors & Status Codes","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/health","host":["{{base_url}}"],"path":["health"]},"description":"# Errors & Status Codes\n\nAll PaperOffice API endpoints share **consistent error JSON**. Per-endpoint Postman items show **success (2xx) examples only** — errors are documented here once (Stripe/Twilio pattern).\n\n---\n\n## Error response shape\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": 401,\n    \"type\": \"authentication_error\",\n    \"message\": \"Invalid or expired bearer token.\"\n  }\n}\n```\n\nLegacy handlers may use `\"status\": \"error\"` and `\"code\": \"AUTH_REQUIRED\"` — treat both as errors.\n\n---\n\n## HTTP status codes\n\n| Code | Meaning | When |\n|------|---------|------|\n| `200` | OK | Success |\n| `201` | Created | Resource created |\n| `202` | Accepted | Connection hold timed out (~295s) — job continues; use `poll_url` |\n| `400` | Bad Request | Invalid/missing parameters |\n| `401` | Unauthorized | Missing/invalid Bearer token |\n| `402` | Payment Required | Insufficient credits |\n| `403` | Forbidden | Permission or tier blocked |\n| `404` | Not Found | Unknown path or resource |\n| `429` | Too Many Requests | Rate or queue limit |\n| `500` | Server Error | Retry with backoff |\n| `503` | Unavailable | Backend down — retry |\n\n---\n\n## Common application codes\n\n| Code | HTTP | What to do |\n|------|------|------------|\n| `AUTH_REQUIRED` | 401 | Add `Authorization: Bearer` |\n| `INVALID_TOKEN` | 401 | Verify `po_sk_` / `po_ut_` / `po_pk_` |\n| `BEARERTOKEN_EXPIRED` | 401 | Issue new token |\n| `INSUFFICIENT_CREDITS` | 402 | Top up or lower priority |\n| `JOB_REQUIRES_PAID_TIER` | 403 | Upgrade plan |\n| `RATE_LIMIT_EXCEEDED` | 429 | Backoff using `Retry-After` |\n| `QUEUE_LIMIT_REACHED` | 429 | Wait and resubmit job |\n| `INVALID_REQUEST` | 400 | Fix body/query per endpoint docs |\n| `INPUT_TOO_LARGE` | 400 | Split payload (e.g. translate 15k chars) |\n| `TRANSLATION_EMPTY` | 4xx/5xx | Retry or check source text |\n| `TRANSLATION_TIMEOUT` | 4xx/5xx | Poll job or increase priority |\n\nModule-specific catalogs (e.g. `GET /translate/languages` → `data.error_codes`) list **additional** codes for that surface.\n\n---\n\n## Rate limiting (429)\n\n| Header | Description |\n|--------|-------------|\n| `Retry-After` | Seconds until retry |\n| `X-RateLimit-Limit` | Max requests per window |\n| `X-RateLimit-Remaining` | Remaining in window |\n\n---\n\n## Credit system (402)\n\nEach billed call consumes credits. Responses may include `_billing.credits` and headers `X-Credits-Remaining`, `X-Credits-Monthly`, `X-Credits-Used-This-Request`.\n\n**Pricing:** [Calculator](https://app.paperoffice.ai/en/pricing/calculator) · `GET /billing/pricing/tiers`"},"response":[{"name":"401 Unauthorized","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/health","host":["{{base_url}}"],"path":["health"]}},"status":"Unauthorized","code":401,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"success\": false,\n    \"error\": {\n        \"code\": 401,\n        \"type\": \"authentication_error\",\n        \"message\": \"Invalid or expired bearer token.\"\n    }\n}"},{"name":"429 Rate Limited","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/health","host":["{{base_url}}"],"path":["health"]}},"status":"Too Many Requests","code":429,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"Retry-After","value":"30"},{"key":"X-RateLimit-Limit","value":"100"},{"key":"X-RateLimit-Remaining","value":"0"}],"body":"{\n    \"success\": false,\n    \"error\": {\n        \"code\": 429,\n        \"type\": \"rate_limit_exceeded\",\n        \"message\": \"Too many requests. Retry after 30 seconds.\"\n    }\n}"},{"name":"402 Insufficient Credits","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/health","host":["{{base_url}}"],"path":["health"]}},"status":"Payment Required","code":402,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"success\": false,\n    \"error\": {\n        \"code\": 402,\n        \"type\": \"insufficient_credits\",\n        \"message\": \"No remaining credits. Upgrade your plan or wait for monthly renewal.\"\n    }\n}"}]}]}]},{"name":"🏢 Account & Administration","description":"# 🏢 Account & Administration\n\nAccount management, notifications, webhook integrations, and pricing lookups. Manage event callbacks, notification channels, and inspect plans, credits, and per-job cost breakdowns.\n\n**Sub-modules:** Messaging & Notifications · Webhooks · Pricing & Plans","item":[{"name":"📬 Messaging & Notifications","description":"# Messaging & Notifications\n\nSend emails, manage notification preferences, and configure webhook-based alerts. Includes email template management and delivery tracking.","item":[{"name":"Check Notification Delivery","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/message_center/delivery_status","host":["{{base_url}}"],"path":["message_center","delivery_status"]},"description":"Check the delivery status of a notification. Shows which channels were successful and which failed.\n\n---\n**Tool-ID:** `po_notifications_check_delivery` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_notifications_check_delivery`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"notification_uuid","type":"text","description":"**REQUIRED** | UUID of the Notification | Type: string","value":"00000000-0000-0000-0000-000000000001"}]}},"response":[]},{"name":"Send Notification","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/message_center/send","host":["{{base_url}}"],"path":["message_center","send"]},"description":"Send a notification to a user across all configured channels (In-App, Web Push, Email, Telegram, SMS, Voice). The NotificationDispatcher selects the optimal channels based on priority and user preferences.\n\n---\n**Tool-ID:** `po_notifications_send` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_notifications_send`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"target_user_id","type":"text","description":"**REQUIRED** | recipient User-ID | Type: string","value":"1"},{"key":"category","type":"text","description":"*(optional)* | Type: string | Allowed: workflow, document, system, billing, security, ai, connector, agent","value":"workflow"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: string | Allowed: low, normal, high, urgent, critical","value":"normal"},{"key":"title","type":"text","description":"**REQUIRED** | Notification title | Type: string","value":"My title"},{"key":"message","type":"text","description":"**REQUIRED** | Notification message | Type: string","value":"Example text content"},{"key":"action_url","type":"text","description":"*(optional)* | Deep-Link URL | Type: string","value":"https://example.com/callback"},{"key":"action_label","type":"text","description":"*(optional)* | button text for the action link | Type: string","value":"View details"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/message_center/send","host":["{{base_url}}"],"path":["message_center","send"]},"description":"Send a notification to a user across all configured channels (In-App, Web Push, Email, Telegram, SMS, Voice). The NotificationDispatcher selects the optimal channels based on priority and user preferences.\n\n---\n**Tool-ID:** `po_notifications_send` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_notifications_send`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.","body":{"mode":"formdata","formdata":[{"key":"target_user_id","type":"text","description":"**REQUIRED** | recipient User-ID | Type: string","value":"1"},{"key":"category","type":"text","description":"*(optional)* | Type: string | Allowed: workflow, document, system, billing, security, ai, connector, agent","value":"workflow"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: string | Allowed: low, normal, high, urgent, critical","value":"normal"},{"key":"title","type":"text","description":"**REQUIRED** | Notification title | Type: string","value":"My title"},{"key":"message","type":"text","description":"**REQUIRED** | Notification message | Type: string","value":"Example text content"},{"key":"action_url","type":"text","description":"*(optional)* | Deep-Link URL | Type: string","value":"https://example.com/callback"},{"key":"action_label","type":"text","description":"*(optional)* | button text for the action link | Type: string","value":"View details"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"channels_sent\": {\n        \"in_app\": false\n    },\n    \"notification\": {\n        \"id\": \"60\",\n        \"uuid\": \"00000000-0000-0000-0000-000000000001\"\n    },\n    \"processing_time\": \"147.18ms\",\n    \"status\": \"success\"\n}"}]},{"name":"Update Notification Preferences","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/message_center/preferences","host":["{{base_url}}"],"path":["message_center","preferences"]},"description":"Updates a user's notification settings: enabled channels per category, quiet hours, and AI features.\n\n---\n**Tool-ID:** `po_notifications_update_preferences` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_notifications_update_preferences`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"channels_enabled","type":"text","description":"*(optional)* | channels per category: {\"workflow\": [\"in_app\", \"email\"], .} | Type: object","value":"{}"},{"key":"quiet_hours_enabled","type":"text","description":"*(optional)* | Type: boolean","value":"true"},{"key":"quiet_hours_start","type":"text","description":"*(optional)* | Start-time HH:MM | Type: string","value":"example-value"},{"key":"quiet_hours_end","type":"text","description":"*(optional)* | End-time HH:MM | Type: string","value":"example-value"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/message_center/preferences","host":["{{base_url}}"],"path":["message_center","preferences"]},"description":"Updates a user's notification settings: enabled channels per category, quiet hours, and AI features.\n\n---\n**Tool-ID:** `po_notifications_update_preferences` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_notifications_update_preferences`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"channels_enabled","type":"text","description":"*(optional)* | channels per category: {\"workflow\": [\"in_app\", \"email\"], .} | Type: object","value":"{}"},{"key":"quiet_hours_enabled","type":"text","description":"*(optional)* | Type: boolean","value":"true"},{"key":"quiet_hours_start","type":"text","description":"*(optional)* | Start-time HH:MM | Type: string","value":"example-value"},{"key":"quiet_hours_end","type":"text","description":"*(optional)* | End-time HH:MM | Type: string","value":"example-value"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"updated\": true,\n    \"updated_at\": \"2026-04-16T10:00:00Z\"\n}"}]}]},{"name":"🔔 Webhooks","description":"# Webhooks\n\nConfigure webhook endpoints for real-time event notifications. Manage webhook subscriptions, view delivery logs, and test webhook connections.","item":[{"name":"Create Webhook Subscription","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/webhooks/subscribe","host":["{{base_url}}"],"path":["webhooks","subscribe"]},"description":"Create a new webhook Subscription. payloads are signed with HMAC-SHA256.\n\n---\n**Tool-ID:** `po_webhooks_subscribe` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_webhooks_subscribe`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"name","type":"text","description":"**REQUIRED** | Name the Subscription (Required) | Type: string","value":"My item"},{"key":"url","type":"text","description":"**REQUIRED** | Webhook-target-URL (https empfohlen) | Type: string","value":"https://example.com/callback"},{"key":"events","type":"text","description":"**REQUIRED** | Array of event types or [*] for all | Type: array","value":"document.created,document.updated"},{"key":"secret","type":"text","description":"*(optional)* | HMAC-Secret (is auto-generates if empty) | Type: string","value":"REPLACE_WITH_YOUR_TOKEN"},{"key":"filters","type":"text","description":"*(optional)* | Optional Filter (e.g. workspace_id, pofid) | Type: object","value":"{}"},{"key":"headers","type":"text","description":"*(optional)* | Additional HTTP headers as key-value pairs | Type: object","value":"{}"},{"key":"retry_policy","type":"text","description":"*(optional)* | Retry-Strategie (default: exponential) | Type: string | Allowed: none, linear, exponential","value":"none"},{"key":"max_retries","type":"text","description":"*(optional)* | Max. Retries (0-10, default: 5) | Type: integer","value":"1"},{"key":"timeout_ms","type":"text","description":"*(optional)* | Timeout in ms (1000-30000, default: 10000) | Type: integer","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/webhooks/subscribe","host":["{{base_url}}"],"path":["webhooks","subscribe"]},"description":"Create a new webhook Subscription. payloads are signed with HMAC-SHA256.\n\n---\n**Tool-ID:** `po_webhooks_subscribe` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_webhooks_subscribe`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"name","type":"text","description":"**REQUIRED** | Name the Subscription (Required) | Type: string","value":"My item"},{"key":"url","type":"text","description":"**REQUIRED** | Webhook-target-URL (https empfohlen) | Type: string","value":"https://example.com/callback"},{"key":"events","type":"text","description":"**REQUIRED** | Array of event types or [*] for all | Type: array","value":"document.created,document.updated"},{"key":"secret","type":"text","description":"*(optional)* | HMAC-Secret (is auto-generates if empty) | Type: string","value":"REPLACE_WITH_YOUR_TOKEN"},{"key":"filters","type":"text","description":"*(optional)* | Optional Filter (e.g. workspace_id, pofid) | Type: object","value":"{}"},{"key":"headers","type":"text","description":"*(optional)* | Additional HTTP headers as key-value pairs | Type: object","value":"{}"},{"key":"retry_policy","type":"text","description":"*(optional)* | Retry-Strategie (default: exponential) | Type: string | Allowed: none, linear, exponential","value":"none"},{"key":"max_retries","type":"text","description":"*(optional)* | Max. Retries (0-10, default: 5) | Type: integer","value":"1"},{"key":"timeout_ms","type":"text","description":"*(optional)* | Timeout in ms (1000-30000, default: 10000) | Type: integer","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Delete Webhook Subscription","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/webhooks/delete","host":["{{base_url}}"],"path":["webhooks","delete"]},"description":"Delete a webhook Subscription. The delivery log is preserved.\n\n---\n**Tool-ID:** `po_webhooks_delete` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_webhooks_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"subscription_id","type":"text","description":"**REQUIRED** | ID of the Subscription to delete | Type: integer","value":"42"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/webhooks/delete","host":["{{base_url}}"],"path":["webhooks","delete"]},"description":"Delete a webhook Subscription. The delivery log is preserved.\n\n---\n**Tool-ID:** `po_webhooks_delete` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_webhooks_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"subscription_id","type":"text","description":"**REQUIRED** | ID of the Subscription to delete | Type: integer","value":"42"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"deleted\": true,\n    \"deleted_at\": \"2026-04-16T10:00:00Z\"\n}"}]},{"name":"Get webhook system info","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/webhooks/info","host":["{{base_url}}"],"path":["webhooks","info"]},"description":"Webhook system overview: available events, endpoints, and signature information.\n\n---\n**Tool-ID:** `po_webhooks_info` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_webhooks_info`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/webhooks/info","host":["{{base_url}}"],"path":["webhooks","info"]},"description":"Webhook system overview: available events, endpoints, and signature information.\n\n---\n**Tool-ID:** `po_webhooks_info` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_webhooks_info`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"available_events\": [\n        \"document.uploaded\",\n        \"document.created\",\n        \"document.processed\",\n        \"document.edited\",\n        \"document.deleted\",\n        \"document.restored\",\n        \"document.moved\",\n        \"document.version_created\",\n        \"document.lifecycle_changed\",\n        \"document.comment_added\",\n        \"document.note_added\",\n        \"document.tag_added\",\n        \"document.legal_hold_placed\",\n        \"document.legal_hold_released\",\n        \"job.completed\",\n        \"job.failed\",\n        \"job.progress\",\n        \"workspace.shared\",\n        \"workspace.unshared\",\n        \"task.created\",\n        \"task.completed\",\n        \"task.overdue\",\n        \"*\"\n    ],\n    \"endpoints\": {\n        \"POST /webhooks/subscribe\": \"new Subscription create\",\n        \"GET  /webhooks/list\": \"all Subscriptions list\",\n        \"POST /webhooks/update\": \"Subscription update\",\n        \"POST /webhooks/delete\": \"Subscription deletion\",\n        \"GET  /webhooks/deliveries\": \"Delivery-Log get\",\n        \"POST /webhooks/test\": \"Test-Event send\",\n        \"POST /webhooks/subscribe-job\": \"Einmal-Subscription for Job-ID\",\n        \"GET  /webhooks/job-subscriptions\": \"Job-Subscriptions list\",\n        \"POST /webhooks/dispatch\": \"Event manuell dispatchen (intern)\"\n    },\n    \"event_aliases\": {\n        \"document.created\": \"document.uploaded\"\n    },\n    \"retry_policies\": [\n        \"none\",\n        \"linear (30s,60s,90s...)\",\n        \"exponential (30s,60s,120s,240s...)\"\n    ],\n    \"service\": \"PaperOffice Webhook System\",\n    \"signature\": \"HMAC-SHA256 in the X-PaperOffice-Signature Header\",\n    \"status\": \"success\",\n    \"version\": \"1.0.0\"\n}"}]},{"name":"List Job Subscriptions","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/webhooks/job-subscriptions","host":["{{base_url}}"],"path":["webhooks","job-subscriptions"],"query":[{"key":"active_only","value":"0","description":"*(optional)* | Only active (not consumed) display (default: 1) | Type: string | Allowed: 0, 1","disabled":true}]},"description":"List all job subscriptions for the account.\n\n---\n**Tool-ID:** `po_webhooks_job_subscriptions` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_webhooks_job_subscriptions`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/webhooks/job-subscriptions","host":["{{base_url}}"],"path":["webhooks","job-subscriptions"],"query":[{"key":"active_only","value":"0","description":"*(optional)* | Only active (not consumed) display (default: 1) | Type: string | Allowed: 0, 1","disabled":true}]},"description":"List all job subscriptions for the account.\n\n---\n**Tool-ID:** `po_webhooks_job_subscriptions` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_webhooks_job_subscriptions`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_subscriptions\": [],\n    \"status\": \"success\",\n    \"total\": 0\n}"}]},{"name":"List webhook deliveries","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/webhooks/deliveries","host":["{{base_url}}"],"path":["webhooks","deliveries"],"query":[{"key":"subscription_id","value":"42","description":"*(optional)* | Optional: Only Deliveries for these Subscription | Type: integer","disabled":true},{"key":"event_type","value":"example-value","description":"*(optional)* | Optional: Filter by event type | Type: string","disabled":true},{"key":"limit","value":"20","description":"*(optional)* | Max. results (1-100, default: 50) | Type: integer","disabled":true},{"key":"offset","value":"0","description":"*(optional)* | Offset for Pagination (default: 0) | Type: integer","disabled":true},{"key":"success_only","value":"true","description":"*(optional)* | true=only successful, false=only failed | Type: boolean","disabled":true}]},"description":"Webhook-Delivery-Log retrieve (delivery history).\n\n---\n**Tool-ID:** `po_webhooks_deliveries` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_webhooks_deliveries`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/webhooks/deliveries","host":["{{base_url}}"],"path":["webhooks","deliveries"],"query":[{"key":"subscription_id","value":"42","description":"*(optional)* | Optional: Only Deliveries for these Subscription | Type: integer","disabled":true},{"key":"event_type","value":"example-value","description":"*(optional)* | Optional: Filter by event type | Type: string","disabled":true},{"key":"limit","value":"20","description":"*(optional)* | Max. results (1-100, default: 50) | Type: integer","disabled":true},{"key":"offset","value":"0","description":"*(optional)* | Offset for Pagination (default: 0) | Type: integer","disabled":true},{"key":"success_only","value":"true","description":"*(optional)* | true=only successful, false=only failed | Type: boolean","disabled":true}]},"description":"Webhook-Delivery-Log retrieve (delivery history).\n\n---\n**Tool-ID:** `po_webhooks_deliveries` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_webhooks_deliveries`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"deliveries\": [],\n    \"limit\": 50,\n    \"offset\": 0,\n    \"status\": \"success\",\n    \"total\": 0\n}"}]},{"name":"List Webhook Subscriptions","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/webhooks/list","host":["{{base_url}}"],"path":["webhooks","list"]},"description":"List all webhook subscriptions of the account.\n\n---\n**Tool-ID:** `po_webhooks_list` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_webhooks_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/webhooks/list","host":["{{base_url}}"],"path":["webhooks","list"]},"description":"List all webhook subscriptions of the account.\n\n---\n**Tool-ID:** `po_webhooks_list` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_webhooks_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"subscriptions\": [],\n    \"total\": 0\n}"}]},{"name":"Subscribe to Job","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/webhooks/subscribe-job","host":["{{base_url}}"],"path":["webhooks","subscribe-job"]},"description":"Create a one-time webhook Subscription for a specific job ID.\n\n---\n**Tool-ID:** `po_webhooks_subscribe_job` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_webhooks_subscribe_job`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"job_id","type":"text","description":"**REQUIRED** | Job-ID (Required, alphanumerisch, max 128 characters) | Type: string","value":"42"},{"key":"url","type":"text","description":"**REQUIRED** | Webhook-target-URL | Type: string","value":"https://example.com/callback"},{"key":"secret","type":"text","description":"*(optional)* | HMAC-Secret (is auto-generates if empty) | Type: string","value":"REPLACE_WITH_YOUR_TOKEN"},{"key":"events","type":"text","description":"*(optional)* | Events (default: [job.completed, job.failed]) | Type: array","value":"document.created,document.updated"},{"key":"headers","type":"text","description":"*(optional)* | Additional HTTP-Header | Type: object","value":"{}"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/webhooks/subscribe-job","host":["{{base_url}}"],"path":["webhooks","subscribe-job"]},"description":"Create a one-time webhook Subscription for a specific job ID.\n\n---\n**Tool-ID:** `po_webhooks_subscribe_job` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_webhooks_subscribe_job`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"job_id","type":"text","description":"**REQUIRED** | Job-ID (Required, alphanumerisch, max 128 characters) | Type: string","value":"42"},{"key":"url","type":"text","description":"**REQUIRED** | Webhook-target-URL | Type: string","value":"https://example.com/callback"},{"key":"secret","type":"text","description":"*(optional)* | HMAC-Secret (is auto-generates if empty) | Type: string","value":"REPLACE_WITH_YOUR_TOKEN"},{"key":"events","type":"text","description":"*(optional)* | Events (default: [job.completed, job.failed]) | Type: array","value":"document.created,document.updated"},{"key":"headers","type":"text","description":"*(optional)* | Additional HTTP-Header | Type: object","value":"{}"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Test webhook","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/webhooks/test","host":["{{base_url}}"],"path":["webhooks","test"]},"description":"Send a test event to a webhook Subscription to verify delivery.\n\n---\n**Tool-ID:** `po_webhooks_test` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_webhooks_test`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"subscription_id","type":"text","description":"**REQUIRED** | ID of the Subscription (Required) | Type: integer","value":"42"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/webhooks/test","host":["{{base_url}}"],"path":["webhooks","test"]},"description":"Send a test event to a webhook Subscription to verify delivery.\n\n---\n**Tool-ID:** `po_webhooks_test` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_webhooks_test`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"subscription_id","type":"text","description":"**REQUIRED** | ID of the Subscription (Required) | Type: integer","value":"42"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Update Webhook Subscription","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/webhooks/update","host":["{{base_url}}"],"path":["webhooks","update"]},"description":"existing Webhook-Subscription update.\n\n---\n**Tool-ID:** `po_webhooks_update` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_webhooks_update`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"subscription_id","type":"text","description":"**REQUIRED** | ID of the Subscription (Required) | Type: integer","value":"42"},{"key":"name","type":"text","description":"*(optional)* | New name | Type: string","value":"My item"},{"key":"url","type":"text","description":"*(optional)* | new URL | Type: string","value":"https://example.com/callback"},{"key":"events","type":"text","description":"*(optional)* | new Event-list | Type: array","value":"document.created,document.updated"},{"key":"secret","type":"text","description":"*(optional)* | new Secret | Type: string","value":"REPLACE_WITH_YOUR_TOKEN"},{"key":"filters","type":"text","description":"*(optional)* | new Filter | Type: object","value":"{}"},{"key":"headers","type":"text","description":"*(optional)* | new Header | Type: object","value":"{}"},{"key":"is_active","type":"text","description":"*(optional)* | Aktiv/Inaktiv setzen | Type: boolean","value":"true"},{"key":"retry_policy","type":"text","description":"*(optional)* | new Retry-Strategie | Type: string | Allowed: none, linear, exponential","value":"none"},{"key":"max_retries","type":"text","description":"*(optional)* | new max. Retries | Type: integer","value":"1"},{"key":"timeout_ms","type":"text","description":"*(optional)* | new Timeout | Type: integer","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/webhooks/update","host":["{{base_url}}"],"path":["webhooks","update"]},"description":"existing Webhook-Subscription update.\n\n---\n**Tool-ID:** `po_webhooks_update` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_webhooks_update`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"subscription_id","type":"text","description":"**REQUIRED** | ID of the Subscription (Required) | Type: integer","value":"42"},{"key":"name","type":"text","description":"*(optional)* | New name | Type: string","value":"My item"},{"key":"url","type":"text","description":"*(optional)* | new URL | Type: string","value":"https://example.com/callback"},{"key":"events","type":"text","description":"*(optional)* | new Event-list | Type: array","value":"document.created,document.updated"},{"key":"secret","type":"text","description":"*(optional)* | new Secret | Type: string","value":"REPLACE_WITH_YOUR_TOKEN"},{"key":"filters","type":"text","description":"*(optional)* | new Filter | Type: object","value":"{}"},{"key":"headers","type":"text","description":"*(optional)* | new Header | Type: object","value":"{}"},{"key":"is_active","type":"text","description":"*(optional)* | Aktiv/Inaktiv setzen | Type: boolean","value":"true"},{"key":"retry_policy","type":"text","description":"*(optional)* | new Retry-Strategie | Type: string | Allowed: none, linear, exponential","value":"none"},{"key":"max_retries","type":"text","description":"*(optional)* | new max. Retries | Type: integer","value":"1"},{"key":"timeout_ms","type":"text","description":"*(optional)* | new Timeout | Type: integer","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"updated\": true,\n    \"updated_at\": \"2026-04-16T10:00:00Z\"\n}"}]}]},{"name":"💳 Pricing & Plans","description":"# Pricing & Plans\n\nRead-only pricing discovery for your own integrations: fetch plan tiers with features and included credits, calculate the total cost of a custom plan, and retrieve the live per-service credit cost matrix. Does NOT expose invoices, subscriptions, or payment methods — those are managed inside the PaperOffice app.\n\n**→ [Pricing Calculator](https://app.paperoffice.ai/en/pricing/calculator)** — Interactive calculator to estimate costs for your use case.\n\n**→ [API Pricing Tiers](https://api.paperoffice.ai/latest/billing/pricing/tiers)** — Machine-readable tier data.","item":[{"name":"List pricing plans and tiers","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/billing/pricing/tiers","host":["{{base_url}}"],"path":["billing","pricing","tiers"],"query":[{"key":"group","value":"app_tier","description":"*(optional)* | tier group filter: app_tier, api_tier, sla_tier (optional, Standard: all) | Type: string | Allowed: app_tier, api_tier, sla_tier","disabled":true}]},"description":"Lists all available PaperOffice pricing plans (tiers) with prices, credits, features and details. Ideal for price comparisons and recommendations.\n\n---\n**Tool-ID:** `po_billing_plans` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_billing_plans`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/billing/pricing/tiers","host":["{{base_url}}"],"path":["billing","pricing","tiers"],"query":[{"key":"group","value":"app_tier","description":"*(optional)* | tier group filter: app_tier, api_tier, sla_tier (optional, Standard: all) | Type: string | Allowed: app_tier, api_tier, sla_tier","disabled":true}]},"description":"Lists all available PaperOffice pricing plans (tiers) with prices, credits, features and details. Ideal for price comparisons and recommendations.\n\n---\n**Tool-ID:** `po_billing_plans` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_billing_plans`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"currency\": \"EUR\",\n    \"currency_fallback\": false,\n    \"processing_time\": \"43.98ms\",\n    \"refill_options\": [\n        25,\n        50,\n        75,\n        100\n    ],\n    \"requested_currency\": \"EUR\",\n    \"source\": \"mariadb_sot\",\n    \"status\": \"success\",\n    \"supported_currencies\": [\n        \"EUR\",\n        \"USD\",\n        \"GBP\",\n        \"CHF\",\n        \"CAD\",\n        \"AUD\",\n        \"JPY\",\n        \"CNY\",\n        \"INR\",\n        \"BRL\",\n        \"MXN\",\n        \"PLN\",\n        \"SEK\",\n        \"NOK\",\n        \"DKK\",\n        \"SGD\",\n        \"HKD\",\n        \"CZK\",\n        \"HUF\",\n        \"RON\",\n        \"TRY\",\n        \"ZAR\",\n        \"KRW\",\n        \"THB\",\n        \"RUB\",\n        \"AED\",\n        \"SAR\",\n        \"ILS\"\n    ],\n    \"tiers\": {\n        \"APP-T1\": {\n            \"name\": \"Starter\",\n            \"description\": \"Geboren for Solopreneure\",\n            \"credits_monthly\": 39000,\n            \"overage_factor\": 6,\n            \"is_paid\": true,\n            \"default_priority\": 0,\n            \"identification_method\": \"bearertoken\",\n            \"vpn_allowed\": true,\n            \"price_yearly\": 468,\n            \"price_billed_monthly\": 49,\n            \"included_storage_pages\": 50000,\n            \"stripe_product_id\": \"prod_U2spo5pdQjPU3l\",\n            \"tab\": \"enduser\",\n            \"tab_position\": 1,\n            \"support\": \"helpdesk_l1l2\",\n            \"sla\": \"best_effor\",\n            \"resources\": {\n                \"workspaces\": {\n                    \"included\": 2,\n                    \"allow_additional\": true,\n                    \"base_cost_eur\": 5,\n                    \"cost_eur_with_discount\": 5,\n                    \"included_type\": \"basic\",\n                    \"available_types\": [\n                        \"basic\",\n                        \"premium\",\n                        \"ultra\"\n                    ]\n                },\n                \"user_accounts\": {\n                    \"included\": 5,\n                    \"allow_additional\": true,\n                    \"base_cost_eur\": 5,\n                    \"cost_eur_with_discount\": 5\n                },\n                \"workers\": {\n                    \"included\": 2,\n                    \"allow_additional\": false\n                },\n                \"storage_mounts\": {\n                    \"included\": 2,\n                    \"allow_additional\": true,\n                    \"base_cost_eur\": 10,\n                    \"cost_eur_with_discount\": 10\n                }\n            },\n            \"features\": {\n                \"all_ai_functions\": true,\n                \"api_access\": false,\n                \"webhooks\": false,\n                \"custom_integrations\": false,\n                \"trust_center\": false,\n                \"sso_saml\": false,\n                \"audit_logs\": false\n            },\n            \"rate_limits\": {\n                \"second\": 200,\n                \"minute\": 12000,\n                \"hour\": 720000,\n                \"day\": 17280000\n            },\n            \"queue_limits\": {\n                \"max_concurrent_jobs\": 500,\n                \"max_queued_jobs\": 10000,\n                \"max_queued_credits\": 5000000,\n                \"queue_timeout_minutes\": 1440\n            },\n            \"crawler\": {\n                \"storage_mounts\": {\n                    \"included\": 1,\n                    \"allow_additional\": false\n                },\n                \"storage_modes\": {\n                    \"import\": true,\n                    \"crawl\": false,\n                    \"user_storage\": false\n                },\n                \"connector_types\": {\n                    \"sftp\": true\n                },\n                \"rate_limits\": {\n                    \"files_per_day\": 100\n                },\n                \"polling\": {\n                    \"min_interval_seconds\": 3600\n                },\n                \"after_import\": [\n                    \"keep\"\n                ],\n                \"file_pattern\": false,\n                \"recursive\": true,\n                \"primary_secondary_redundancy\": false\n            },\n            \"currency\": \"EUR\",\n            \"requested_currency\": \"EUR\",\n            \"price_monthly_eur\": 39,\n            \"price_billed_monthly_eur\": 49,\n            \"price_yearly_eur\": 468,\n            \"pricebook\": {\n                \"monthly\": {\n                    \"amount\": 49,\n                    \"amount_minor\": 4900,\n                    \"currency\": \"EUR\",\n                    \"stripe_price_id\": \"price_1TTfaQCNOoz3orWJ8JiuBWX3\"\n                },\n                \"yearly\": {\n                    \"amount\": 468,\n                    \"amount_minor\": 46800,\n                    \"currency\": \"EUR\",\n                    \"stripe_price_id\": \"price_1TUrc2CNOoz3orWJ15ZWEVD2\"\n                }\n            }\n        },\n        \"APP-T2\": {\n            \"name\": \"Plus\",\n            \"description\": \"Gebaut for junge Teams\",\n            \"credits_monthly\": 99000,\n            \"overage_factor\": 5,\n            \"is_paid\": true,\n            \"default_priority\": 50,\n            \"identification_method\": \"bearertoken\",\n            \"vpn_allowed\": true,\n            \"price_yearly\": 1188,\n            \"price_billed_monthly\": 129,\n            \"included_storage_pages\": 100000,\n            \"stripe_product_id\": \"prod_U2QG6XE634DcFp\",\n            \"tab\": \"enduser\",\n            \"tab_position\": 2,\n            \"badge\": \"BELIEBTESTE WAHL\",\n            \"support\": \"helpdesk_l1l2\",\n            \"sla\": \"99%\",\n            \"resources\": {\n                \"workspaces\": {\n                    \"included\": 3,\n                    \"allow_additional\": true,\n                    \"base_cost_eur\": 5,\n                    \"cost_eur_with_discount\": 5,\n                    \"included_type\": \"basic\",\n                    \"available_types\": [\n                        \"basic\",\n                        \"premium\",\n                        \"ultra\"\n                    ]\n                },\n                \"user_accounts\": {\n                    \"included\": 10,\n                    \"allow_additional\": true,\n                    \"base_cost_eur\": 5,\n                    \"cost_eur_with_discount\": 5\n                },\n                \"workers\": {\n                    \"included\": 5,\n                    \"allow_additional\": false\n                },\n                \"storage_mounts\": {\n                    \"included\": 3,\n                    \"allow_additional\": true,\n                    \"base_cost_eur\": 10,\n                    \"cost_eur_with_discount\": 10\n                }\n            },\n            \"features\": {\n                \"all_ai_functions\": true,\n                \"api_access\": true,\n                \"webhooks\": false,\n                \"custom_integrations\": false,\n                \"trust_center\": false,\n                \"sso_saml\": false,\n                \"audit_logs\": false\n            },\n            \"rate_limits\": {\n                \"second\": 200,\n                \"minute\": 12000,\n                \"hour\": 720000,\n                \"day\": 17280000\n            },\n            \"queue_limits\": {\n                \"max_concurrent_jobs\": 500,\n                \"max_queued_jobs\": 10000,\n                \"max_queued_credits\": 5000000,\n                \"queue_timeout_minutes\": 1440\n            },\n            \"crawler\": {\n                \"storage_mounts\": {\n                    \"included\": 2,\n                    \"allow_additional\": true,\n                    \"cost_per_additional_credits\": 10000\n                },\n                \"storage_modes\": {\n                    \"import\": true,\n                    \"crawl\": true,\n                    \"user_storage\": false\n                },\n                \"connector_types\": {\n                    \"sftp\": true\n                },\n                \"rate_limits\": {\n                    \"files_per_day\": 2000\n                },\n                \"polling\": {\n                    \"min_interval_seconds\": 300\n                },\n                \"after_import\": [\n                    \"keep\",\n                    \"move\"\n                ],\n                \"file_pattern\": true,\n                \"recursive\": true,\n                \"primary_secondary_redundancy\": false\n            },\n            \"currency\": \"EUR\",\n            \"requested_currency\": \"EUR\",\n            \"price_monthly_eur\": 99,\n            \"price_billed_monthly_eur\": 129,\n            \"price_yearly_eur\": 1188,\n            \"pricebook\": {\n                \"monthly\": {\n                    \"amount\": 129,\n                    \"amount_minor\": 12900,\n                    \"currency\": \"EUR\",\n                    \"stripe_price_id\": \"price_1TXJHjCNOoz3orWJBuB1pPLm\"\n                },\n                \"yearly\": {\n                    \"amount\": 1188,\n                    \"amount_minor\": 118800,\n                    \"currency\": \"EUR\",\n                    \"stripe_price_id\": \"price_1TUrgTCNOoz3orWJ7waaMAwD\"\n                }\n            }\n        },\n        \"APP-T3\": {\n            \"name\": \"Professional\",\n            \"description\": \"Gemacht for KMUs\",\n            \"credits_monthly\": 249000,\n            \"overage_factor\": 4,\n            \"is_paid\": true,\n            \"default_priority\": 100,\n            \"identification_method\": \"bearertoken\",\n            \"vpn_allowed\": true,\n            \"price_yearly\": 2988,\n            \"price_billed_monthly\": 329,\n            \"included_storage_pages\": 300000,\n            \"stripe_product_id\": \"prod_U2tBw2pa2UxZKy\",\n            \"tab\": \"enduser\",\n            \"tab_position\": 3,\n            \"support\": \"helpdesk_l1l2\",\n            \"sla\": \"99.5%\",\n            \"resources\": {\n                \"workspaces\": {\n                    \"included\": 10,\n                    \"allow_additional\": true,\n                    \"base_cost_eur\": 5,\n                    \"cost_eur_with_discount\": 4,\n                    \"included_type\": \"basic\",\n                    \"available_types\": [\n                        \"basic\",\n                        \"premium\",\n                        \"ultra\"\n                    ]\n                },\n                \"user_accounts\": {\n                    \"included\": 30,\n                    \"allow_additional\": true,\n                    \"base_cost_eur\": 5,\n                    \"cost_eur_with_discount\": 4\n                },\n                \"workers\": {\n                    \"included\": 10,\n                    \"allow_additional\": false\n                },\n                \"storage_mounts\": {\n                    \"included\": 5,\n                    \"allow_additional\": true,\n                    \"base_cost_eur\": 10,\n                    \"cost_eur_with_discount\": 8\n                }\n            },\n            \"features\": {\n                \"all_ai_functions\": true,\n                \"api_access\": true,\n                \"webhooks\": true,\n                \"custom_integrations\": false,\n                \"trust_center\": false,\n                \"sso_saml\": false,\n                \"audit_logs\": false\n            },\n            \"rate_limits\": {\n                \"second\": 200,\n                \"minute\": 12000,\n                \"hour\": 720000,\n                \"day\": 17280000\n            },\n            \"queue_limits\": {\n                \"max_concurrent_jobs\": 500,\n                \"max_queued_jobs\": 10000,\n                \"max_queued_credits\": 5000000,\n                \"queue_timeout_minutes\": 1440\n            },\n            \"crawler\": {\n                \"storage_mounts\": {\n                    \"included\": 3,\n                    \"allow_additional\": true,\n                    \"cost_per_additional_credits\": 10000\n                },\n                \"storage_modes\": {\n                    \"import\": true,\n                    \"crawl\": true,\n                    \"user_storage\": true\n                },\n                \"connector_types\": {\n                    \"sftp\": true\n                },\n                \"rate_limits\": {\n                    \"files_per_day\": 10000\n                },\n                \"polling\": {\n                    \"min_interval_seconds\": 60\n                },\n                \"after_import\": [\n                    \"keep\",\n                    \"move\",\n                    \"delete\",\n                    \"archive\"\n                ],\n                \"file_pattern\": true,\n                \"recursive\": true,\n                \"primary_secondary_redundancy\": true\n            },\n            \"currency\": \"EUR\",\n            \"requested_currency\": \"EUR\",\n            \"price_monthly_eur\": 249,\n            \"price_billed_monthly_eur\": 329,\n            \"price_yearly_eur\": 2988,\n            \"pricebook\": {\n                \"monthly\": {\n                    \"amount\": 329,\n                    \"amount_minor\": 32900,\n                    \"currency\": \"EUR\",\n                    \"stripe_price_id\": \"price_1TFD0BCNOoz3orWJzezzgTpZ\"\n                },\n                \"yearly\": {\n                    \"amount\": 2988,\n                    \"amount_minor\": 298800,\n                    \"currency\": \"EUR\",\n                    \"stripe_price_id\": \"price_1TUrijCNOoz3orWJvukUqRjL\"\n                }\n            }\n        },\n        \"APP-T4\": {\n            \"name\": \"Corporate\",\n            \"description\": \"Konzipiert for Mittelstand\",\n            \"credits_monthly\": 500000,\n            \"overage_factor\": 3,\n            \"is_paid\": true,\n            \"default_priority\": 125,\n            \"identification_method\": \"bearertoken\",\n            \"vpn_allowed\": true,\n            \"price_billed_monthly\": 499,\n            \"included_storage_pages\": 1000000,\n            \"extra_discount_percent\": 40,\n            \"stripe_product_id\": \"prod_UNRj5HhNgR1hIt\",\n            \"tab\": \"business\",\n            \"tab_position\": 1,\n            \"support\": \"phone_meet\",\n            \"sla\": \"99.9%\",\n            \"resources\": {\n                \"workspaces\": {\n                    \"included\": 25,\n                    \"allow_additional\": true,\n                    \"base_cost_eur\": 5,\n                    \"cost_eur_with_discount\": 3,\n                    \"included_type\": \"basic\",\n                    \"available_types\": [\n                        \"basic\",\n                        \"premium\",\n                        \"ultra\"\n                    ]\n                },\n                \"user_accounts\": {\n                    \"included\": 100,\n                    \"allow_additional\": true,\n                    \"base_cost_eur\": 5,\n                    \"cost_eur_with_discount\": 3\n                },\n                \"workers\": {\n                    \"included\": 20,\n                    \"allow_additional\": false\n                },\n                \"storage_mounts\": {\n                    \"included\": 5,\n                    \"allow_additional\": true,\n                    \"base_cost_eur\": 10,\n                    \"cost_eur_with_discount\": 6\n                }\n            },\n            \"features\": {\n                \"all_ai_functions\": true,\n                \"api_access\": true,\n                \"webhooks\": true,\n                \"custom_integrations\": true,\n                \"trust_center\": true,\n                \"sso_saml\": false,\n                \"audit_logs\": true\n            },\n            \"rate_limits\": {\n                \"second\": 200,\n                \"minute\": 12000,\n                \"hour\": 720000,\n                \"day\": 17280000\n            },\n            \"queue_limits\": {\n                \"max_concurrent_jobs\": 500,\n                \"max_queued_jobs\": 10000,\n                \"max_queued_credits\": 5000000,\n                \"queue_timeout_minutes\": 1440\n            },\n            \"crawler\": {\n                \"storage_mounts\": {\n                    \"included\": 5,\n                    \"allow_additional\": true,\n                    \"cost_per_additional_credits\": 10000\n                },\n                \"storage_modes\": {\n                    \"import\": true,\n                    \"crawl\": true,\n                    \"user_storage\": true\n                },\n                \"connector_types\": {\n                    \"sftp\": true\n                },\n                \"rate_limits\": {\n                    \"files_per_day\": 50000\n                },\n                \"polling\": {\n                    \"min_interval_seconds\": 30\n                },\n                \"after_import\": [\n                    \"keep\",\n                    \"move\",\n                    \"delete\",\n                    \"archive\"\n                ],\n                \"file_pattern\": true,\n                \"recursive\": true,\n                \"primary_secondary_redundancy\": true,\n                \"realtime_webhooks\": true\n            },\n            \"currency\": \"EUR\",\n            \"requested_currency\": \"EUR\",\n            \"price_monthly_eur\": 499,\n            \"price_billed_monthly_eur\": 499,\n            \"price_yearly_eur\": 0,\n            \"price_yearly\": null,\n            \"pricebook\": {\n                \"monthly\": {\n                    \"amount\": 499,\n                    \"amount_minor\": 49900,\n                    \"currency\": \"EUR\",\n                    \"stripe_price_id\": \"price_1TUrjVCNOoz3orWJUxRDOD5n\"\n                }\n            }\n        },\n        \"APP-T5\": {\n            \"name\": \"Enterprise\",\n            \"description\": \"Entwickelt for Konzerne\",\n            \"credits_monthly\": 5000000,\n            \"overage_factor\": 2,\n            \"is_paid\": true,\n            \"default_priority\": 150,\n            \"identification_method\": \"bearertoken\",\n            \"vpn_allowed\": true,\n            \"price_billed_monthly\": 4999,\n            \"included_storage_pages\": 10000000,\n            \"extra_discount_percent\": 60,\n            \"stripe_product_id\": \"prod_UDdTdgBPppTZw2\",\n            \"tab\": \"business\",\n            \"tab_position\": 2,\n            \"badge\": \"ENTERPRISE\",\n            \"support\": \"phone_meet_dse\",\n            \"sla\": \"99.95%\",\n            \"resources\": {\n                \"workspaces\": {\n                    \"included\": 100,\n                    \"allow_additional\": true,\n                    \"base_cost_eur\": 5,\n                    \"cost_eur_with_discount\": 2,\n                    \"included_type\": \"basic\",\n                    \"available_types\": [\n                        \"basic\",\n                        \"premium\",\n                        \"ultra\"\n                    ]\n                },\n                \"user_accounts\": {\n                    \"included\": 500,\n                    \"allow_additional\": true,\n                    \"base_cost_eur\": 5,\n                    \"cost_eur_with_discount\": 2\n                },\n                \"workers\": {\n                    \"included\": 30,\n                    \"allow_additional\": false\n                },\n                \"storage_mounts\": {\n                    \"included\": 10,\n                    \"allow_additional\": true,\n                    \"base_cost_eur\": 10,\n                    \"cost_eur_with_discount\": 4\n                }\n            },\n            \"features\": {\n                \"all_ai_functions\": true,\n                \"api_access\": true,\n                \"webhooks\": true,\n                \"custom_integrations\": true,\n                \"trust_center\": true,\n                \"sso_saml\": true,\n                \"audit_logs\": true,\n                \"custom_contracts\": true,\n                \"data_residency\": false\n            },\n            \"rate_limits\": {\n                \"second\": 200,\n                \"minute\": 12000,\n                \"hour\": 720000,\n                \"day\": 17280000\n            },\n            \"queue_limits\": {\n                \"max_concurrent_jobs\": 500,\n                \"max_queued_jobs\": 10000,\n                \"max_queued_credits\": 5000000,\n                \"queue_timeout_minutes\": 1440\n            },\n            \"crawler\": {\n                \"storage_mounts\": {\n                    \"included\": 10,\n                    \"allow_additional\": true,\n                    \"cost_per_additional_credits\": 10000\n                },\n                \"storage_modes\": {\n                    \"import\": true,\n                    \"crawl\": true,\n                    \"user_storage\": true\n                },\n                \"connector_types\": {\n                    \"sftp\": true\n                },\n                \"rate_limits\": {\n                    \"files_per_day\": 200000\n                },\n                \"polling\": {\n                    \"min_interval_seconds\": 10\n                },\n                \"after_import\": [\n                    \"keep\",\n                    \"move\",\n                    \"delete\",\n                    \"archive\"\n                ],\n                \"file_pattern\": true,\n                \"recursive\": true,\n                \"primary_secondary_redundancy\": true,\n                \"realtime_webhooks\": true\n            },\n            \"currency\": \"EUR\",\n            \"requested_currency\": \"EUR\",\n            \"price_monthly_eur\": 4999,\n            \"price_billed_monthly_eur\": 4999,\n            \"price_yearly_eur\": 0,\n            \"price_yearly\": null,\n            \"pricebook\": {\n                \"monthly\": {\n                    \"amount\": 4999,\n                    \"amount_minor\": 499900,\n                    \"currency\": \"EUR\",\n                    \"stripe_price_id\": \"price_1TFCCCCNOoz3orWJOgxSlFQH\"\n                }\n            }\n        },\n        \"APP-T6\": {\n            \"name\": \"Unlimited\",\n            \"description\": \"Erschaffen for Marktführer\",\n            \"credits_monthly\": 15000000,\n            \"overage_factor\": 1,\n            \"is_paid\": true,\n            \"default_priority\": 200,\n            \"identification_method\": \"bearertoken\",\n            \"vpn_allowed\": true,\n            \"price_billed_monthly\": 14999,\n            \"included_storage_pages\": 30000000,\n            \"extra_discount_percent\": 80,\n            \"stripe_product_id\": \"prod_UGAvvHhA3N6eVI\",\n            \"tab\": \"business\",\n            \"tab_position\": 3,\n            \"badge\": \"UNLIMITED\",\n            \"support\": \"phone_meet_dtam\",\n            \"sla\": \"99.99%\",\n            \"resources\": {\n                \"workspaces\": {\n                    \"included\": 500,\n                    \"allow_additional\": true,\n                    \"base_cost_eur\": 5,\n                    \"cost_eur_with_discount\": 1,\n                    \"included_type\": \"basic\",\n                    \"available_types\": [\n                        \"basic\",\n                        \"premium\",\n                        \"ultra\"\n                    ]\n                },\n                \"user_accounts\": {\n                    \"included\": 2000,\n                    \"allow_additional\": true,\n                    \"base_cost_eur\": 5,\n                    \"cost_eur_with_discount\": 1\n                },\n                \"workers\": {\n                    \"included\": 50,\n                    \"allow_additional\": false\n                },\n                \"storage_mounts\": {\n                    \"included\": 25,\n                    \"allow_additional\": true,\n                    \"base_cost_eur\": 10,\n                    \"cost_eur_with_discount\": 2\n                }\n            },\n            \"features\": {\n                \"all_ai_functions\": true,\n                \"api_access\": true,\n                \"webhooks\": true,\n                \"custom_integrations\": true,\n                \"trust_center\": true,\n                \"sso_saml\": true,\n                \"audit_logs\": true,\n                \"custom_contracts\": true,\n                \"data_residency\": true,\n                \"dedicated_tam\": true,\n                \"white_glove_onboarding\": true,\n                \"quarterly_business_reviews\": true\n            },\n            \"rate_limits\": {\n                \"second\": 200,\n                \"minute\": 12000,\n                \"hour\": 720000,\n                \"day\": 17280000\n            },\n            \"queue_limits\": {\n                \"max_concurrent_jobs\": 500,\n                \"max_queued_jobs\": 10000,\n                \"max_queued_credits\": 5000000,\n                \"queue_timeout_minutes\": 1440\n            },\n            \"crawler\": {\n                \"storage_mounts\": {\n                    \"included\": 25,\n                    \"allow_additional\": true,\n                    \"cost_per_additional_credits\": 0\n                },\n                \"storage_modes\": {\n                    \"import\": true,\n                    \"crawl\": true,\n                    \"user_storage\": true\n                },\n                \"connector_types\": {\n                    \"sftp\": true\n                },\n                \"rate_limits\": {\n                    \"files_per_day\": 1000000\n                },\n                \"polling\": {\n                    \"min_interval_seconds\": 5\n                },\n                \"after_import\": [\n                    \"keep\",\n                    \"move\",\n                    \"delete\",\n                    \"archive\"\n                ],\n                \"file_pattern\": true,\n                \"recursive\": true,\n                \"primary_secondary_redundancy\": true,\n                \"realtime_webhooks\": true\n            },\n            \"currency\": \"EUR\",\n            \"requested_currency\": \"EUR\",\n            \"price_monthly_eur\": 14999,\n            \"price_billed_monthly_eur\": 14999,\n            \"price_yearly_eur\": 0,\n            \"price_yearly\": null,\n            \"pricebook\": {\n                \"monthly\": {\n                    \"amount\": 14999,\n                    \"amount_minor\": 1499900,\n                    \"currency\": \"EUR\",\n                    \"stripe_price_id\": \"price_1THea0CNOoz3orWJU5ezSLoZ\"\n                }\n            }\n        }\n    },\n    \"sample_note\": \"Sample shows paid tiers only (free tiers VPN, VISITOR, APP-LITE, APP-FREE are omitted for brevity but DO exist in the live response).\"\n}"}]},{"name":"Calculate pricing (full)","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/billing/pricing/all","host":["{{base_url}}"],"path":["billing","pricing","all"]},"description":"Returns all pricing data: tiers, job costs, overage system, storage pricing, priority system, support levels, and feature matrix.\n\n---\n**Tool-ID:** `po_billing_calculator` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_billing_calculator`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"List API job costs per service","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/billing/pricing/jobs","host":["{{base_url}}"],"path":["billing","pricing","jobs"],"query":[{"key":"category","value":"invoice","description":"*(optional)* | Service-category filter (optional). Beispiele: llm, voice, ocr, import, documents, billing, ip2location, paperoffice_account, paperoffice_agent, onboarding | Type: string","disabled":true}]},"description":"Shows credit costs for each individual API service (OCR, LLM, Voice, Import, etc.) with optional category filter.\n\n---\n**Tool-ID:** `po_billing_jobs` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_billing_jobs`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]}]},{"name":"📁 Partner","description":"","item":[{"name":"Partner: Validate Invite Token (Public)","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/partner/invite/validate","host":["{{base_url}}"],"path":["partner","invite","validate"],"query":[{"key":"token","value":"REPLACE_WITH_YOUR_TOKEN","description":"**REQUIRED** | Type: string","disabled":false}]},"description":"publicr Endpoint: validiert Invite-Token and liefert Einladungs-Details. no Auth required.\n\n---\n**Tool-ID:** `po_partner_invite_validate` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_partner_invite_validate`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Partner: Reflink Track (Public)","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/reflink/track","host":["{{base_url}}"],"path":["reflink","track"],"query":[{"key":"slug","value":"example-value","description":"**REQUIRED** | Type: string","disabled":false}]},"description":"Öffentlicher Endpoint: Klick-Tracking and Redirect to the Landing-Page. sets domainweite po_ref Attribution sowie UI-Cookies for the Partner-Vorteil.\n\n---\n**Tool-ID:** `po_partner_reflink_track` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_partner_reflink_track`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Partner: Reflink Validate (Public)","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/reflink/validate","host":["{{base_url}}"],"path":["reflink","validate"],"query":[{"key":"slug","value":"example-value","description":"**REQUIRED** | Type: string","disabled":false}]},"description":"publicr Endpoint: Slug-validation for Frontend.\n\n---\n**Tool-ID:** `po_partner_reflink_validate` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_partner_reflink_validate`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/reflink/validate","host":["{{base_url}}"],"path":["reflink","validate"],"query":[{"key":"slug","value":"example-value","description":"**REQUIRED** | Type: string","disabled":false}]},"description":"publicr Endpoint: Slug-validation for Frontend.\n\n---\n**Tool-ID:** `po_partner_reflink_validate` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_partner_reflink_validate`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"available_for_registration\": true,\n    \"exists\": false,\n    \"processing_time\": \"4.32ms\",\n    \"reason\": null,\n    \"status\": \"success\",\n    \"valid\": true\n}"}]},{"name":"Partner: Reflink Info (Public)","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/reflink/info","host":["{{base_url}}"],"path":["reflink","info"],"query":[{"key":"slug","value":"example-value","description":"**REQUIRED** | Type: string","disabled":false}]},"description":"Öffentlicher Endpoint: Reflink-metadata including statischem Partner-Vorteil: doppelte Usage-credits in the first month beim first Paid-Upgrade.\n\n---\n**Tool-ID:** `po_partner_reflink_info` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_partner_reflink_info`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Partner: Reflink Cookie Status (Public)","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/reflink/cookie","host":["{{base_url}}"],"path":["reflink","cookie"]},"description":"Öffentlicher Endpoint: liest the domainweiten po_ref Cookie and liefert Attribution-data including Partner-Vorteil.\n\n---\n**Tool-ID:** `po_partner_reflink_cookie` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_partner_reflink_cookie`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/reflink/cookie","host":["{{base_url}}"],"path":["reflink","cookie"]},"description":"Öffentlicher Endpoint: liest the domainweiten po_ref Cookie and liefert Attribution-data including Partner-Vorteil.\n\n---\n**Tool-ID:** `po_partner_reflink_cookie` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_partner_reflink_cookie`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"has_cookie\": false,\n    \"processing_time\": \"4.31ms\",\n    \"status\": \"success\"\n}"}]}]},{"name":"🔑 Publishable Keys (po_pk_)","description":"","item":[{"name":"List available browser scopes","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/publishable_keys/scopes","host":["{{base_url}}"],"path":["publishable_keys","scopes"]},"description":"Returns all available browser-scopes for Publishable Keys (po_pk_), grouped by area (ocr, llm, image, documents, search, translate, voice, signatures, analytics, workflow, crm, calendar, data, webhooks). Each scope has a display name, description, icon and preset-flags. Use this to render a scope-picker in your app.\n\n---\n**Tool-ID:** `po_publishable_keys_scopes` • **Cost:** 10 credits (base, at `priority=500`)\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/publishable_keys/scopes","host":["{{base_url}}"],"path":["publishable_keys","scopes"]},"description":"Returns all available browser-scopes for Publishable Keys (po_pk_), grouped by area (ocr, llm, image, documents, search, translate, voice, signatures, analytics, workflow, crm, calendar, data, webhooks). Each scope has a display name, description, icon and preset-flags. Use this to render a scope-picker in your app.\n\n---\n**Tool-ID:** `po_publishable_keys_scopes` • **Cost:** 10 credits (base, at `priority=500`)\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"data\": {\n        \"scopes\": [\n            {\n                \"scope_id\": \"ocr:read\",\n                \"scope_group\": \"ocr\",\n                \"display_name_en\": \"string\",\n                \"description_en\": \"string\",\n                \"icon\": \"scan\"\n            }\n        ]\n    }\n}"}]},{"name":"List Publishable-Key presets","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/publishable_keys/presets","host":["{{base_url}}"],"path":["publishable_keys","presets"]},"description":"Returns preset templates for creating Publishable Keys (po_pk_). Three presets available: default (safe-read only), aidemo (full AI suite for Claude/ChatGPT/Gemini/Grok artifacts), widget (public-website widgets). Each preset defines scopes, budget, rate limit and default origins. Use preset name in /publishable_keys/create as a baseline.\n\n---\n**Tool-ID:** `po_publishable_keys_presets` • **Cost:** 10 credits (base, at `priority=500`)\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/publishable_keys/presets","host":["{{base_url}}"],"path":["publishable_keys","presets"]},"description":"Returns preset templates for creating Publishable Keys (po_pk_). Three presets available: default (safe-read only), aidemo (full AI suite for Claude/ChatGPT/Gemini/Grok artifacts), widget (public-website widgets). Each preset defines scopes, budget, rate limit and default origins. Use preset name in /publishable_keys/create as a baseline.\n\n---\n**Tool-ID:** `po_publishable_keys_presets` • **Cost:** 10 credits (base, at `priority=500`)\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"data\": {\n        \"presets\": [\n            {\n                \"id\": \"aidemo\",\n                \"name\": \"string\",\n                \"description\": \"string\",\n                \"scopes\": [\n                    \"string\"\n                ],\n                \"credit_budget_ceiling\": 0,\n                \"rate_limit_per_minute\": 0,\n                \"allowed_http_methods\": [\n                    \"string\"\n                ],\n                \"allowed_origins\": [\n                    \"string\"\n                ]\n            }\n        ]\n    }\n}"}]},{"name":"List your Publishable Keys","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/publishable_keys/list","host":["{{base_url}}"],"path":["publishable_keys","list"],"query":[{"key":"include_inactive","value":"true","description":"*(optional)* | Include revoked/expired tokens | Type: boolean","disabled":true}]},"description":"Returns all Publishable Keys (po_pk_) owned by your account, including active and revoked tokens, with usage summary (credit_budget_ceiling, credit_budget_spent, active_until, is_active, allowed_scopes, valid_domains).\n\n---\n**Tool-ID:** `po_publishable_keys_list` • **Cost:** 10 credits (base, at `priority=500`)\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Get Publishable Key details","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/publishable_keys/get","host":["{{base_url}}"],"path":["publishable_keys","get"],"query":[{"key":"token_id","value":"123","description":"**REQUIRED** | Token-ID (accepts URL-segment /get/{id} or query ?token_id=) | Type: integer | Example: 123","disabled":false}]},"description":"Returns full details of a single Publishable Key (po_pk_) including usage breakdown, remaining budget, and rate-limit counters. Accepts token_id via URL segment (/publishable_keys/get/{id}) or query parameter.\n\n---\n**Tool-ID:** `po_publishable_keys_get` • **Cost:** 10 credits (base, at `priority=500`)\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Create Publishable Key","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/publishable_keys/create","host":["{{base_url}}"],"path":["publishable_keys","create"]},"description":"Creates a new Publishable Key (po_pk_) that can be used directly from browser/AI-Artifacts. You can start from a preset (default, aidemo, widget) and override individual fields. Token format: po_pk_{account_id}_{random}. Max TTL 365 days, max budget 100000 credits, max rate 600/min. Default origins for aidemo: claude.ai, chatgpt.com, gemini.google.com, grok.com, x.com.\n\n---\n**Tool-ID:** `po_publishable_keys_create` • **Cost:** 10 credits (base, at `priority=500`)\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"raw","raw":"{\n    \"name\": \"Claude Artifacts Demo\",\n    \"preset\": \"aidemo\",\n    \"allowed_scopes\": [\n        \"ocr:read\",\n        \"llm:generate\",\n        \"translate:text\",\n        \"documents:read\"\n    ],\n    \"valid_domains\": \"claude.ai,chatgpt.com,gemini.google.com,grok.com,x.com\",\n    \"credit_budget_ceiling\": 2000,\n    \"rate_limit_per_minute\": 60,\n    \"allowed_http_methods\": [\n        \"GET\",\n        \"POST\"\n    ],\n    \"active_until_days\": 14\n}","options":{"raw":{"language":"json"}}}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/publishable_keys/create","host":["{{base_url}}"],"path":["publishable_keys","create"]},"description":"Creates a new Publishable Key (po_pk_) that can be used directly from browser/AI-Artifacts. You can start from a preset (default, aidemo, widget) and override individual fields. Token format: po_pk_{account_id}_{random}. Max TTL 365 days, max budget 100000 credits, max rate 600/min. Default origins for aidemo: claude.ai, chatgpt.com, gemini.google.com, grok.com, x.com.\n\n---\n**Tool-ID:** `po_publishable_keys_create` • **Cost:** 10 credits (base, at `priority=500`)\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"raw","raw":"{\n    \"name\": \"Claude Artifacts Demo\",\n    \"preset\": \"aidemo\",\n    \"allowed_scopes\": [\n        \"ocr:read\",\n        \"llm:generate\",\n        \"translate:text\",\n        \"documents:read\"\n    ],\n    \"valid_domains\": \"claude.ai,chatgpt.com,gemini.google.com,grok.com,x.com\",\n    \"credit_budget_ceiling\": 2000,\n    \"rate_limit_per_minute\": 60,\n    \"allowed_http_methods\": [\n        \"GET\",\n        \"POST\"\n    ],\n    \"active_until_days\": 14\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"data\": {\n        \"id\": 42,\n        \"name\": \"string\",\n        \"allowed_scopes\": [\n            \"string\"\n        ],\n        \"valid_domains\": \"string\",\n        \"credit_budget_ceiling\": 0,\n        \"rate_limit_per_minute\": 0,\n        \"allowed_http_methods\": [\n            \"string\"\n        ],\n        \"active_until\": \"string\"\n    }\n}"}]},{"name":"Update Publishable Key","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/publishable_keys/update","host":["{{base_url}}"],"path":["publishable_keys","update"]},"description":"Updates a Publishable Key (po_pk_). All fields optional — only provided fields are changed. Invalidates Redis cache immediately so changes take effect within the next request. Use reset_budget_spent=true to zero the usage counter (e.g. after raising the ceiling).\n\n---\n**Tool-ID:** `po_publishable_keys_update` • **Cost:** 10 credits (base, at `priority=500`)\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"raw","raw":"{\n    \"token_id\": 123,\n    \"name\": \"Claude Artifacts Demo (renamed)\",\n    \"allowed_scopes\": [\n        \"ocr:read\",\n        \"llm:generate\",\n        \"translate:text\"\n    ],\n    \"valid_domains\": \"claude.ai,chatgpt.com\",\n    \"credit_budget_ceiling\": 5000,\n    \"rate_limit_per_minute\": 60,\n    \"allowed_http_methods\": [\n        \"GET\",\n        \"POST\"\n    ],\n    \"active_until_days\": 30,\n    \"is_active\": true,\n    \"reset_budget_spent\": false\n}","options":{"raw":{"language":"json"}}}},"response":[]},{"name":"Revoke Publishable Key","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/publishable_keys/revoke","host":["{{base_url}}"],"path":["publishable_keys","revoke"]},"description":"Revokes (deactivates) a Publishable Key (po_pk_). Idempotent — if already revoked, returns TOKEN_ALREADY_REVOKED with status=success. Invalidates all Redis caches immediately. The revoked token returns 401 on next use.\n\n---\n**Tool-ID:** `po_publishable_keys_revoke` • **Cost:** 10 credits (base, at `priority=500`)\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"raw","raw":"{\n    \"token_id\": 123\n}","options":{"raw":{"language":"json"}}}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/publishable_keys/revoke","host":["{{base_url}}"],"path":["publishable_keys","revoke"]},"description":"Revokes (deactivates) a Publishable Key (po_pk_). Idempotent — if already revoked, returns TOKEN_ALREADY_REVOKED with status=success. Invalidates all Redis caches immediately. The revoked token returns 401 on next use.\n\n---\n**Tool-ID:** `po_publishable_keys_revoke` • **Cost:** 10 credits (base, at `priority=500`)\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"raw","raw":"{\n    \"token_id\": 123\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"string\",\n    \"code\": \"TOKEN_REVOKED\",\n    \"data\": {\n        \"id\": 0,\n        \"is_active\": false\n    }\n}"}]}]}]},{"name":"🤖 Agents AI","description":"# 🤖 Agents AI\n\nAgent-style AI features you can call directly: smart-slot suggestions, meeting prep briefings, no-show risk scoring, chat sessions, and other AI-native orchestration primitives.\n\n**Sub-modules:** AI Agents & Features","item":[{"name":"🤖 AI Agents & Features","description":"# AI Agents & Features\n\nAgent-style AI primitives you can call directly from the public API: create/update/delete conversational agents, request smart-slot suggestions, generate meeting-prep briefings, and compute no-show risk scores. Ideal for embedding AI into booking, CRM, and support flows without running your own LLM orchestration.","item":[{"name":"Create or update agent","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/agents_v2/create","host":["{{base_url}}"],"path":["agents_v2","create"]},"description":"Create or Update AI Agent Attach AI agent configuration to a document. Use case: - Custom extraction fields beyond standard IDP\n\n---\n**Tool-ID:** `po_agents_createupdate` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_agents_createupdate`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"uuid","type":"text","description":"*(optional)* | UUID of the Agents (only at Update) | Type: string","value":"00000000-0000-0000-0000-000000000001"},{"key":"name","type":"text","description":"*(optional)* | Name of the Agents (Required at recreation) | Type: string","value":"My item"},{"key":"system_prompt","type":"text","description":"*(optional)* | System-Prompt of the Agents (Required at recreation) | Type: string","value":"example-value"},{"key":"description","type":"text","description":"*(optional)* | Description of the Agents | Type: string","value":"Example text content"},{"key":"llm_tier","type":"text","description":"*(optional)* | LLM-quality level | Type: string | Allowed: basic, premium, ultra","value":"basic"},{"key":"channels","type":"text","description":"*(optional)* | communication channels (chat, phone, email, widget) | Type: array","value":"[\"item-1\"]"},{"key":"voice_id","type":"text","description":"*(optional)* | Voice-ID for Telefonie-channel | Type: string","value":"1"},{"key":"language","type":"text","description":"*(optional)* | language of the Agents (ISO-Code) | Type: string","value":"de"},{"key":"category","type":"text","description":"*(optional)* | category of the Agents | Type: string","value":"invoice"},{"key":"tags","type":"text","description":"*(optional)* | Tags for Search and filtering | Type: array","value":"invoice"},{"key":"is_active","type":"text","description":"*(optional)* | Agent aktiv schalten | Type: boolean","value":"true"},{"key":"max_turns","type":"text","description":"*(optional)* | Max. Gespraechsrunden | Type: integer","value":"10"},{"key":"temperature","type":"text","description":"*(optional)* | LLM-Temperatur (0.0-2.0) | Type: number","value":"0.7"},{"key":"knowledge_workspace_ids","type":"text","description":"*(optional)* | Workspace IDs for RAG-access | Type: array","value":"[1]"},{"key":"tools","type":"text","description":"*(optional)* | Agent-Tools (MCP-Tool-IDs) | Type: array","value":"[\"item-1\"]"},{"key":"sub_agents","type":"text","description":"*(optional)* | Sub-Agent-UUIDs for Delegation | Type: array","value":"[\"item-1\"]"},{"key":"escalation_config","type":"text","description":"*(optional)* | Eskalations-configuration (an Mensch, Helpdesk, etc.) | Type: object","value":"{}"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/agents_v2/create","host":["{{base_url}}"],"path":["agents_v2","create"]},"description":"Create or Update AI Agent Attach AI agent configuration to a document. Use case: - Custom extraction fields beyond standard IDP\n\n---\n**Tool-ID:** `po_agents_createupdate` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_agents_createupdate`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"uuid","type":"text","description":"*(optional)* | UUID of the Agents (only at Update) | Type: string","value":"00000000-0000-0000-0000-000000000001"},{"key":"name","type":"text","description":"*(optional)* | Name of the Agents (Required at recreation) | Type: string","value":"My item"},{"key":"system_prompt","type":"text","description":"*(optional)* | System-Prompt of the Agents (Required at recreation) | Type: string","value":"example-value"},{"key":"description","type":"text","description":"*(optional)* | Description of the Agents | Type: string","value":"Example text content"},{"key":"llm_tier","type":"text","description":"*(optional)* | LLM-quality level | Type: string | Allowed: basic, premium, ultra","value":"basic"},{"key":"channels","type":"text","description":"*(optional)* | communication channels (chat, phone, email, widget) | Type: array","value":"[\"item-1\"]"},{"key":"voice_id","type":"text","description":"*(optional)* | Voice-ID for Telefonie-channel | Type: string","value":"1"},{"key":"language","type":"text","description":"*(optional)* | language of the Agents (ISO-Code) | Type: string","value":"de"},{"key":"category","type":"text","description":"*(optional)* | category of the Agents | Type: string","value":"invoice"},{"key":"tags","type":"text","description":"*(optional)* | Tags for Search and filtering | Type: array","value":"invoice"},{"key":"is_active","type":"text","description":"*(optional)* | Agent aktiv schalten | Type: boolean","value":"true"},{"key":"max_turns","type":"text","description":"*(optional)* | Max. Gespraechsrunden | Type: integer","value":"10"},{"key":"temperature","type":"text","description":"*(optional)* | LLM-Temperatur (0.0-2.0) | Type: number","value":"0.7"},{"key":"knowledge_workspace_ids","type":"text","description":"*(optional)* | Workspace IDs for RAG-access | Type: array","value":"[1]"},{"key":"tools","type":"text","description":"*(optional)* | Agent-Tools (MCP-Tool-IDs) | Type: array","value":"[\"item-1\"]"},{"key":"sub_agents","type":"text","description":"*(optional)* | Sub-Agent-UUIDs for Delegation | Type: array","value":"[\"item-1\"]"},{"key":"escalation_config","type":"text","description":"*(optional)* | Eskalations-configuration (an Mensch, Helpdesk, etc.) | Type: object","value":"{}"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"agent_id\": \"example\",\n            \"status\": \"success\"\n        }\n    },\n    \"job_type\": \"example\",\n    \"model\": \"example\",\n    \"current_step\": \"example\"\n}"}]},{"name":"Delete agent","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/agents_v2/delete","host":["{{base_url}}"],"path":["agents_v2","delete"]},"description":"Delete AI Agent Remove agent configuration from a document.\n\n---\n**Tool-ID:** `po_agents_delete` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_agents_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"uuid","type":"text","description":"**REQUIRED** | UUID of the zu deletionden Agents | Type: string","value":"00000000-0000-0000-0000-000000000001"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/agents_v2/delete","host":["{{base_url}}"],"path":["agents_v2","delete"]},"description":"Delete AI Agent Remove agent configuration from a document.\n\n---\n**Tool-ID:** `po_agents_delete` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_agents_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"uuid","type":"text","description":"**REQUIRED** | UUID of the zu deletionden Agents | Type: string","value":"00000000-0000-0000-0000-000000000001"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"deleted\": true\n        }\n    }\n}"}]},{"name":"Generate meeting prep briefing","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/calendar/ai/meeting_prep","host":["{{base_url}}"],"path":["calendar","ai","meeting_prep"]},"description":"AI Meeting Prep Generate AI briefing for upcoming meeting.\n\n---\n**Tool-ID:** `po_ai_features_meeting_prep` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_ai_features_meeting_prep`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"event_id","type":"text","description":"**REQUIRED** | Event-ID for meeting preparation to be created | Type: integer","value":"42"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/calendar/ai/meeting_prep","host":["{{base_url}}"],"path":["calendar","ai","meeting_prep"]},"description":"AI Meeting Prep Generate AI briefing for upcoming meeting.\n\n---\n**Tool-ID:** `po_ai_features_meeting_prep` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_ai_features_meeting_prep`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.","body":{"mode":"formdata","formdata":[{"key":"event_id","type":"text","description":"**REQUIRED** | Event-ID for meeting preparation to be created | Type: integer","value":"42"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"preparation\": \"example\",\n            \"key_documents\": [\n                []\n            ],\n            \"action_items\": [\n                \"example\"\n            ]\n        }\n    },\n    \"job_type\": \"example\",\n    \"model\": \"example\",\n    \"current_step\": \"example\"\n}"}]},{"name":"Get agent","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/agents_v2/get","host":["{{base_url}}"],"path":["agents_v2","get"]},"description":"Get AI Agent Retrieve agent configuration and extracted data.\n\n---\n**Tool-ID:** `po_agents_get` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_agents_get`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"uuid","type":"text","description":"**REQUIRED** | UUID of the abzurufenden Agents | Type: string","value":"00000000-0000-0000-0000-000000000001"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/agents_v2/get","host":["{{base_url}}"],"path":["agents_v2","get"]},"description":"Get AI Agent Retrieve agent configuration and extracted data.\n\n---\n**Tool-ID:** `po_agents_get` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_agents_get`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"uuid","type":"text","description":"**REQUIRED** | UUID of the abzurufenden Agents | Type: string","value":"00000000-0000-0000-0000-000000000001"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"agent_id\": \"example\",\n            \"name\": \"Example\",\n            \"type\": \"example\",\n            \"status\": \"success\",\n            \"config\": []\n        }\n    },\n    \"job_type\": \"example\",\n    \"model\": \"example\",\n    \"current_step\": \"example\"\n}"}]},{"name":"List agents","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/agents_v2/list","host":["{{base_url}}"],"path":["agents_v2","list"]},"description":"List All AI Agents Get all AI agents for the authenticated account.\n\n---\n**Tool-ID:** `po_agents_list` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_agents_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"locale","type":"text","description":"*(optional)* | Response language: de_DE, en_US, es_ES, fr_FR, it_IT, pt_PT | Type: string","value":"en"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/agents_v2/list","host":["{{base_url}}"],"path":["agents_v2","list"]},"description":"List All AI Agents Get all AI agents for the authenticated account.\n\n---\n**Tool-ID:** `po_agents_list` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_agents_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"locale","type":"text","description":"*(optional)* | Response language: de_DE, en_US, es_ES, fr_FR, it_IT, pt_PT | Type: string","value":"en"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"data\": {\n        \"agents\": [],\n        \"total\": 0,\n        \"limit\": 50,\n        \"offset\": 0\n    },\n    \"processing_time\": \"51.78ms\",\n    \"status\": \"success\"\n}"}]},{"name":"Predict no-show risk","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/calendar/ai/no_show_risk","host":["{{base_url}}"],"path":["calendar","ai","no_show_risk"]},"description":"AI No-Show Risk Predict no-show probability for a meeting.\n\n---\n**Tool-ID:** `po_ai_features_noshow_risk` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_ai_features_noshow_risk`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"event_id","type":"text","description":"*(optional)* | Event-ID for risk assessment | Type: integer","value":"42"},{"key":"guest_email","type":"text","description":"*(optional)* | Guest email for historical analysis | Type: string","value":"user@example.com"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/calendar/ai/no_show_risk","host":["{{base_url}}"],"path":["calendar","ai","no_show_risk"]},"description":"AI No-Show Risk Predict no-show probability for a meeting.\n\n---\n**Tool-ID:** `po_ai_features_noshow_risk` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_ai_features_noshow_risk`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.","body":{"mode":"formdata","formdata":[{"key":"event_id","type":"text","description":"*(optional)* | Event-ID for risk assessment | Type: integer","value":"42"},{"key":"guest_email","type":"text","description":"*(optional)* | Guest email for historical analysis | Type: string","value":"user@example.com"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"risk_score\": 1,\n            \"risk_factors\": [\n                \"example\"\n            ],\n            \"recommendation\": \"example\"\n        }\n    },\n    \"job_type\": \"example\",\n    \"model\": \"example\",\n    \"current_step\": \"example\"\n}"}]},{"name":"Suggest smart appointment slots","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/calendar/ai/smart_slots","host":["{{base_url}}"],"path":["calendar","ai","smart_slots"]},"description":"AI Smart Slots Get AI-optimized slot suggestions based on your patterns.\n\n---\n**Tool-ID:** `po_ai_features_smart_slots` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_ai_features_smart_slots`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"guest_email","type":"text","description":"*(optional)* | Guest email for personalisierte suggestions | Type: string","value":"user@example.com"},{"key":"meeting_type_id","type":"text","description":"*(optional)* | meeting type ID for duration and buffer calculation | Type: integer","value":"1"},{"key":"preferred_times","type":"text","description":"*(optional)* | Bevorzugte Zeiten of the Gastes (e.g. morgens, nachmittags) | Type: array","value":"[\"item-1\"]"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/calendar/ai/smart_slots","host":["{{base_url}}"],"path":["calendar","ai","smart_slots"]},"description":"AI Smart Slots Get AI-optimized slot suggestions based on your patterns.\n\n---\n**Tool-ID:** `po_ai_features_smart_slots` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_ai_features_smart_slots`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.","body":{"mode":"formdata","formdata":[{"key":"guest_email","type":"text","description":"*(optional)* | Guest email for personalisierte suggestions | Type: string","value":"user@example.com"},{"key":"meeting_type_id","type":"text","description":"*(optional)* | meeting type ID for duration and buffer calculation | Type: integer","value":"1"},{"key":"preferred_times","type":"text","description":"*(optional)* | Bevorzugte Zeiten of the Gastes (e.g. morgens, nachmittags) | Type: array","value":"[\"item-1\"]"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"suggested_slots\": [\n                []\n            ],\n            \"optimal_time\": \"2026-04-16T10:00:00Z\"\n        }\n    },\n    \"job_type\": \"example\",\n    \"model\": \"example\",\n    \"current_step\": \"example\"\n}"}]}]}]},{"name":"📊 Analytics AI","description":"# 📊 Analytics AI\n\nBusiness intelligence and reporting. Generate insights from your document data, track processing statistics, and explore entity relationships.\n\n**Sub-modules:** Analytics & BI · Knowledge Graph","item":[{"name":"📊 Analytics & BI","description":"# Analytics & BI\n\nBusiness intelligence, reporting and analytics endpoints. Generate insights from your document data, track processing statistics, and create custom reports.","item":[{"name":"Get document topics and clustering","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/document_intelligence/topics","host":["{{base_url}}"],"path":["document_intelligence","topics"],"query":[{"key":"document_id","value":"12345","description":"*(optional)* | Optional: Only Topics for theses Document | Type: string","disabled":true},{"key":"limit","value":"20","description":"*(optional)* | Max. Topics (default: 20) | Type: integer","disabled":true},{"key":"include_documents","value":"false","description":"*(optional)* | Document-list per Topic (default: false) | Type: boolean","disabled":true}]},"description":"Displays the topic clusters of the documents. The Harvester automatically groups documents into topic clusters (e.g., invoices, contracts, correspondence). Also shows which documents belong to which topic.\n\n---\n**Tool-ID:** `po_intelligence_topics` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_intelligence_topics`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/document_intelligence/topics","host":["{{base_url}}"],"path":["document_intelligence","topics"],"query":[{"key":"document_id","value":"12345","description":"*(optional)* | Optional: Only Topics for theses Document | Type: string","disabled":true},{"key":"limit","value":"20","description":"*(optional)* | Max. Topics (default: 20) | Type: integer","disabled":true},{"key":"include_documents","value":"false","description":"*(optional)* | Document-list per Topic (default: false) | Type: boolean","disabled":true}]},"description":"Displays the topic clusters of the documents. The Harvester automatically groups documents into topic clusters (e.g., invoices, contracts, correspondence). Also shows which documents belong to which topic.\n\n---\n**Tool-ID:** `po_intelligence_topics` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_intelligence_topics`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"flat_topics\": [\n        {\n            \"id\": 90000,\n            \"name\": \"other\",\n            \"description\": null,\n            \"parent_topic_id\": null,\n            \"children\": [],\n            \"document_count\": 1\n        }\n    ],\n    \"processing_time\": \"84.11ms\",\n    \"status\": \"success\",\n    \"topics\": [\n        {\n            \"id\": 90000,\n            \"name\": \"other\",\n            \"description\": null,\n            \"parent_topic_id\": null,\n            \"children\": [],\n            \"document_count\": 1\n        }\n    ],\n    \"total\": 1,\n    \"workspace_id\": null\n}"}]},{"name":"Get knowledge graph document entities","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/document_intelligence/entities/{document_id}","host":["{{base_url}}"],"path":["document_intelligence","entities","{document_id}"],"query":[{"key":"include_relations","value":"false","description":"*(optional)* | Include entity-entity relations | Type: string","disabled":true}]},"description":"Get all extracted entities from a document. Entity Types: - company, person, amount, date, location, iban, product, custom Tier: PREMIUM+ 3 credits\n\n---\n**Tool-ID:** `po_knowledge_graph_document_entities_get` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_knowledge_graph_document_entities_get`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Get knowledge graph document relations","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/document_intelligence/relations/{document_id}","host":["{{base_url}}"],"path":["document_intelligence","relations","{document_id}"],"query":[{"key":"direction","value":"example-value","description":"*(optional)* | outgoing, incoming, or both | Type: string","disabled":true},{"key":"limit","value":"20","description":"*(optional)* | Max relations (max: 100) | Type: string","disabled":true}]},"description":"Get a list of document relations not graph format. relation Types: - references, supersedes, attachment_of, response_to - invoice_for, payment_for, contract_with, order_for, delivery_for Tier: PREMIUM+ 3 credits\n\n---\n**Tool-ID:** `po_knowledge_graph_document_relations_get` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_knowledge_graph_document_relations_get`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Get knowledge graph for document","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/document_intelligence/knowledge_graph/{document_id}","host":["{{base_url}}"],"path":["document_intelligence","knowledge_graph","{document_id}"],"query":[{"key":"depth","value":"example-value","description":"*(optional)* | Hop depth 1-3 (3 requires ULTRA) | Type: string","disabled":true},{"key":"include_entities","value":"false","description":"*(optional)* | Include entity nodes (companies, persons, etc.) | Type: string","disabled":true},{"key":"max_nodes","value":"example-value","description":"*(optional)* | Maximum nodes to return (max: 200) | Type: string","disabled":true}]},"description":"Get a vi.js compatible graph centered on a specific document. Returns: - nodes - Array of vis.js node objects - edges - Array of vis.js edge objects - groups - Node group styling definitions - options - vis.js physics and interaction options Tier: PREMIUM+ 5 credits\n\n---\n**Tool-ID:** `po_knowledge_graph_document_graph_get` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_knowledge_graph_document_graph_get`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Get knowledge graph statistics","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/knowledge_graph/stats","host":["{{base_url}}"],"path":["knowledge_graph","stats"],"query":[{"key":"workspace_id","value":"1","description":"*(optional)* | Optional: Filter by workspace | Type: string","disabled":true}]},"description":"Get knowledge graph statistics. Returns: - Total documents, relations, entities - relation type counts - Entity type counts - Available tier features Tier: ALL 0 credits\n\n---\n**Tool-ID:** `po_knowledge_graph_stats_get` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_knowledge_graph_stats_get`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/knowledge_graph/stats","host":["{{base_url}}"],"path":["knowledge_graph","stats"],"query":[{"key":"workspace_id","value":"1","description":"*(optional)* | Optional: Filter by workspace | Type: string","disabled":true}]},"description":"Get knowledge graph statistics. Returns: - Total documents, relations, entities - relation type counts - Entity type counts - Available tier features Tier: ALL 0 credits\n\n---\n**Tool-ID:** `po_knowledge_graph_stats_get` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_knowledge_graph_stats_get`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"available_view_keys\": [\n        \"partners\",\n        \"workspace\",\n        \"document\",\n        \"business_case\",\n        \"timeline\",\n        \"references\"\n    ],\n    \"available_views\": {\n        \"partners\": {\n            \"key\": \"partners\",\n            \"label_de\": \"business partner-overview\"\n        },\n        \"workspace\": {\n            \"key\": \"workspace\",\n            \"label_de\": \"Workspace-documents\"\n        },\n        \"document\": {\n            \"key\": \"document\",\n            \"label_de\": \"document-relationships\"\n        },\n        \"business_case\": {\n            \"key\": \"business_case\",\n            \"label_de\": \"business transaction\"\n        },\n        \"timeline\": {\n            \"key\": \"timeline\",\n            \"label_de\": \"Zeitachse\"\n        },\n        \"references\": {\n            \"key\": \"references\",\n            \"label_de\": \"Referenznummern\"\n        }\n    },\n    \"billing_tier\": \"APP-T2\",\n    \"processing_time\": \"77.82ms\",\n    \"stats\": {\n        \"total_documents\": 1,\n        \"documents_with_partner\": 0,\n        \"unique_partners\": 0,\n        \"documents_with_references\": 0,\n        \"type_distribution\": [\n            {\n                \"type\": \"notiz\",\n                \"count\": 1,\n                \"aliases\": [\n                    \"Notiz\"\n                ]\n            },\n            {\n                \"type\": \"other\",\n                \"count\": 1,\n                \"aliases\": [\n                    \"other\"\n                ]\n            }\n        ]\n    },\n    \"status\": \"success\",\n    \"tier\": \"APP-T2\",\n    \"workspace_id\": null\n}"}]},{"name":"Get workspace knowledge graph","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/document_intelligence/knowledge_graph/{workspace_id}","host":["{{base_url}}"],"path":["document_intelligence","knowledge_graph","{workspace_id}"],"query":[{"key":"include_entities","value":"false","description":"*(optional)* | Include entity nodes | Type: string","disabled":true},{"key":"max_nodes","value":"example-value","description":"*(optional)* | Maximum nodes (max: 500) | Type: string","disabled":true}]},"description":"Get a vi.js compatible graph for an entire workspace. Returns: Same structure as Document Graph but includes all workspace documents. Tier: PREMIUM+ 10 credits\n\n---\n**Tool-ID:** `po_knowledge_graph_workspace_graph_get` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_knowledge_graph_workspace_graph_get`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"List knowledge graph business partners","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/knowledge_graph/partners","host":["{{base_url}}"],"path":["knowledge_graph","partners"],"query":[{"key":"limit","value":"20","description":"*(optional)* | Max. number of partners (default: 50) | Type: integer","disabled":true},{"key":"sort_by","value":"document_count","description":"*(optional)* | sorting | Type: string | Allowed: document_count, total_amount, name","disabled":true},{"key":"entity_type","value":"company","description":"*(optional)* | Filter after type | Type: string | Allowed: company, person, all","disabled":true},{"key":"workspace_id","value":"1","description":"**REQUIRED** | Workspace id | Type: integer","disabled":false},{"key":"query","value":"invoice Q1 2026","description":"**REQUIRED** | Query | Type: string","disabled":false}]},"description":"Displays all of the user's business partners as a network graph. Based on the knowledge graph automatically extracted from documents by the Harvester. Shows relationships between companies, individuals, and documents.\n\n---\n**Tool-ID:** `po_knowledge_graph_partners` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_knowledge_graph_partners`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/knowledge_graph/partners","host":["{{base_url}}"],"path":["knowledge_graph","partners"],"query":[{"key":"limit","value":"20","description":"*(optional)* | Max. number of partners (default: 50) | Type: integer","disabled":true},{"key":"sort_by","value":"document_count","description":"*(optional)* | sorting | Type: string | Allowed: document_count, total_amount, name","disabled":true},{"key":"entity_type","value":"company","description":"*(optional)* | Filter after type | Type: string | Allowed: company, person, all","disabled":true},{"key":"workspace_id","value":"1","description":"**REQUIRED** | Workspace id | Type: integer","disabled":false},{"key":"query","value":"invoice Q1 2026","description":"**REQUIRED** | Query | Type: string","disabled":false}]},"description":"Displays all of the user's business partners as a network graph. Based on the knowledge graph automatically extracted from documents by the Harvester. Shows relationships between companies, individuals, and documents.\n\n---\n**Tool-ID:** `po_knowledge_graph_partners` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_knowledge_graph_partners`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"aggregation_scope\": {\n        \"partner_key\": \"canonical_key\",\n        \"amount_definition\": \"best_effort_sum_of_document_amounts_per_canonical_partner\",\n        \"date_basis\": \"upload_date_until_document_date_readmodel_is_enabled\",\n        \"workspace_scope\": \"single_workspace\"\n    },\n    \"billing_tier\": \"APP-T2\",\n    \"has_more\": false,\n    \"limit\": 50,\n    \"offset\": 0,\n    \"partners\": [],\n    \"processing_time\": \"61.72ms\",\n    \"query\": \"test\",\n    \"sort_by\": \"document_count\",\n    \"status\": \"success\",\n    \"tier\": \"APP-T2\",\n    \"total\": 0,\n    \"workspace_id\": 1\n}"}]},{"name":"Search entities across documents","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/document_intelligence/entities/search","host":["{{base_url}}"],"path":["document_intelligence","entities","search"],"query":[{"key":"query","value":"invoice Q1 2026","description":"**REQUIRED** | Search term (company name, Person, IBAN, etc.) | Type: string","disabled":false},{"key":"entity_type","value":"company","description":"*(optional)* | Filter after Entity-type | Type: string | Allowed: company, person, iban, amount, reference, address, email, phone, date, all","disabled":true},{"key":"limit","value":"20","description":"*(optional)* | Max. results (default: 20) | Type: integer","disabled":true},{"key":"type","value":"default","description":"*(optional)* | Type | Type: string","disabled":true},{"key":"workspace_id","value":"1","description":"**REQUIRED** | Workspace id | Type: integer","disabled":false}]},"description":"Search for entities (companies, persons, IBANs, amounts, etc.) across all documents. Utilizes the entity index automatically created by the Harvester.\n\n---\n**Tool-ID:** `po_intelligence_entities_search` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_intelligence_entities_search`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/document_intelligence/entities/search","host":["{{base_url}}"],"path":["document_intelligence","entities","search"],"query":[{"key":"query","value":"invoice Q1 2026","description":"**REQUIRED** | Search term (company name, Person, IBAN, etc.) | Type: string","disabled":false},{"key":"entity_type","value":"company","description":"*(optional)* | Filter after Entity-type | Type: string | Allowed: company, person, iban, amount, reference, address, email, phone, date, all","disabled":true},{"key":"limit","value":"20","description":"*(optional)* | Max. results (default: 20) | Type: integer","disabled":true},{"key":"type","value":"default","description":"*(optional)* | Type | Type: string","disabled":true},{"key":"workspace_id","value":"1","description":"**REQUIRED** | Workspace id | Type: integer","disabled":false}]},"description":"Search for entities (companies, persons, IBANs, amounts, etc.) across all documents. Utilizes the entity index automatically created by the Harvester.\n\n---\n**Tool-ID:** `po_intelligence_entities_search` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_intelligence_entities_search`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"entity_type_filter\": null,\n    \"min_confidence\": 0,\n    \"processing_time\": \"74.63ms\",\n    \"query\": \"test\",\n    \"results\": [],\n    \"status\": \"success\",\n    \"total\": 0,\n    \"workspace_id\": 1\n}"}]},{"name":"Generate report","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/bi/bi-document-stats","host":["{{base_url}}"],"path":["bi","bi-document-stats"],"query":[{"key":"report_type","value":"usage","description":"*(optional)* | type the Berichts | Type: string | Allowed: usage, documents, workflows, storage, comprehensive","disabled":true},{"key":"period","value":"30d","description":"*(optional)* | time period | Type: string | Allowed: 7d, 30d, 90d, 1y","disabled":true},{"key":"workspace_id","value":"1","description":"*(optional)* | Workspace ID for workspace-specific reports | Type: integer","disabled":true},{"key":"metrics","value":"[\"item-1\"]","description":"*(optional)* | Gewuenschte Metriken | Type: array","disabled":true},{"key":"format","value":"json","description":"*(optional)* | Output format | Type: string | Allowed: json, pdf, xlsx","disabled":true}]},"description":"Generate Report Generate a new business report.\n\n---\n**Tool-ID:** `po_bi_generate_report` • **Cost:** 100 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_bi_generate_report`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/bi/bi-document-stats","host":["{{base_url}}"],"path":["bi","bi-document-stats"],"query":[{"key":"report_type","value":"usage","description":"*(optional)* | type the Berichts | Type: string | Allowed: usage, documents, workflows, storage, comprehensive","disabled":true},{"key":"period","value":"30d","description":"*(optional)* | time period | Type: string | Allowed: 7d, 30d, 90d, 1y","disabled":true},{"key":"workspace_id","value":"1","description":"*(optional)* | Workspace ID for workspace-specific reports | Type: integer","disabled":true},{"key":"metrics","value":"[\"item-1\"]","description":"*(optional)* | Gewuenschte Metriken | Type: array","disabled":true},{"key":"format","value":"json","description":"*(optional)* | Output format | Type: string | Allowed: json, pdf, xlsx","disabled":true}]},"description":"Generate Report Generate a new business report.\n\n---\n**Tool-ID:** `po_bi_generate_report` • **Cost:** 100 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_bi_generate_report`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"period\": \"30d\",\n    \"processing_time\": \"107.29ms\",\n    \"stats\": {\n        \"daily_counts\": [],\n        \"hourly_counts_today\": [],\n        \"averages\": {\n            \"pages_per_document\": 1,\n            \"file_size_mb\": 0.16\n        }\n    },\n    \"status\": \"success\"\n}"}]},{"name":"Get dashboard","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/bi/bi-dashboard","host":["{{base_url}}"],"path":["bi","bi-dashboard"],"query":[{"key":"period","value":"30d","description":"*(optional)* | time period for Dashboard data | Type: string | Allowed: 7d, 30d, 90d, 1y","disabled":true}]},"description":"Get BI Dashboard Retrieve business intelligence dashboard data.\n\n---\n**Tool-ID:** `po_bi_get_dashboard` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_bi_get_dashboard`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/bi/bi-dashboard","host":["{{base_url}}"],"path":["bi","bi-dashboard"],"query":[{"key":"period","value":"30d","description":"*(optional)* | time period for Dashboard data | Type: string | Allowed: 7d, 30d, 90d, 1y","disabled":true}]},"description":"Get BI Dashboard Retrieve business intelligence dashboard data.\n\n---\n**Tool-ID:** `po_bi_get_dashboard` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_bi_get_dashboard`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"dashboard\": {\n        \"kpis\": {\n            \"total_documents\": 1,\n            \"documents_in_period\": 0,\n            \"total_workspaces\": 3,\n            \"active_agents\": 0,\n            \"total_storage_gb\": 0,\n            \"avg_documents_per_day\": 0\n        },\n        \"dms_distribution\": [\n            {\n                \"tier\": \"premium\",\n                \"label\": \"premium\",\n                \"count\": 1\n            }\n        ],\n        \"trigger_stats\": {\n            \"total_executions\": 0,\n            \"success_rate\": 0\n        },\n        \"top_document_types\": [\n            {\n                \"mime_type\": \"application/pdf\",\n                \"count\": 1\n            }\n        ]\n    },\n    \"period\": \"30d\",\n    \"processing_time\": \"110.35ms\",\n    \"status\": \"success\"\n}"}]},{"name":"Get reports","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/bi/bi-trends","host":["{{base_url}}"],"path":["bi","bi-trends"],"query":[{"key":"limit","value":"20","description":"*(optional)* | Max. number of reports | Type: integer","disabled":true},{"key":"offset","value":"0","description":"*(optional)* | Pagination-Offset | Type: integer","disabled":true},{"key":"report_type","value":"example-value","description":"*(optional)* | Filter after Berichtstyp | Type: string","disabled":true}]},"description":"Get BI Reports List available business reports.\n\n---\n**Tool-ID:** `po_bi_get_reports` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_bi_get_reports`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/bi/bi-trends","host":["{{base_url}}"],"path":["bi","bi-trends"],"query":[{"key":"limit","value":"20","description":"*(optional)* | Max. number of reports | Type: integer","disabled":true},{"key":"offset","value":"0","description":"*(optional)* | Pagination-Offset | Type: integer","disabled":true},{"key":"report_type","value":"example-value","description":"*(optional)* | Filter after Berichtstyp | Type: string","disabled":true}]},"description":"Get BI Reports List available business reports.\n\n---\n**Tool-ID:** `po_bi_get_reports` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_bi_get_reports`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"metric\": \"documents\",\n    \"period\": \"30d\",\n    \"processing_time\": \"130.32ms\",\n    \"status\": \"success\",\n    \"trend\": {\n        \"data\": [],\n        \"current_total\": 0,\n        \"previous_total\": 0,\n        \"change_percentage\": 0,\n        \"direction\": \"stable\"\n    }\n}"}]}]}]},{"name":"🌍 Data AI","description":"# 🌍 Data AI\n\nData enrichment and lookup services. IP geolocation, weather data, map tiles, currency exchange, and VAT validation.\n\n**Sub-modules:** IP Geolocation · Weather · Map Tiles · Currency Exchange · Validation & VAT","item":[{"name":"🌍 IP Geolocation","description":"# IP Geolocation\n\nIP-based geolocation lookup: get country, city, ISP, coordinates, timezone, and VPN/proxy detection for any IP address. Supports batch lookups.","item":[{"name":"Autocomplete geocoding query","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/geocoding/forward","host":["{{base_url}}"],"path":["geocoding","forward"]},"description":"Address Autocomplete Suggestions Get address suggestions as the user types. Fast response times for real-time autocomplete. Parameters form-data | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | q | string | ✅ | Partial address/search term | | lang | stri.\n\n---\n**Tool-ID:** `po_geocoding_autocomplete` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_geocoding_autocomplete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"q","type":"text","description":"*(optional)* | Partial address/search term | Type: string","value":"Москва"},{"key":"lang","type":"text","description":"*(optional)* | Response language default: de | Type: string","value":"ru"},{"key":"limit","type":"text","description":"*(optional)* | Max results 1-20 default: 10 | Type: number","value":"5"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/geocoding/forward","host":["{{base_url}}"],"path":["geocoding","forward"]},"description":"Address Autocomplete Suggestions Get address suggestions as the user types. Fast response times for real-time autocomplete. Parameters form-data | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | q | string | ✅ | Partial address/search term | | lang | stri.\n\n---\n**Tool-ID:** `po_geocoding_autocomplete` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_geocoding_autocomplete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"q","type":"text","description":"*(optional)* | Partial address/search term | Type: string","value":"Москва"},{"key":"lang","type":"text","description":"*(optional)* | Response language default: de | Type: string","value":"ru"},{"key":"limit","type":"text","description":"*(optional)* | Max results 1-20 default: 10 | Type: number","value":"5"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"success\": false,\n    \"error\": \"MISSING_ADDRESS\",\n    \"message\": \"Parameter \\\"address\\\" is required\",\n    \"example\": {\n        \"address\": \"東京都渋谷区\",\n        \"lang\": \"ja\"\n    }\n}"}]},{"name":"Forward geocoding","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/geocoding/forward","host":["{{base_url}}"],"path":["geocoding","forward"]},"description":"Convert Address to Coordinates Translate any address worldwide into GPS coordinates latitude/longitude. Parameters form-data | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | address | string | ✅ | Full or partial address in any language/script | | la.\n\n---\n**Tool-ID:** `po_geocoding_forward` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_geocoding_forward`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"address","type":"text","description":"*(optional)* | Full or partial address in any language/script | Type: string","value":"東京都渋谷区"},{"key":"lang","type":"text","description":"*(optional)* | Response language de, en, ja, ru, ar, zh, etc. | Type: string","value":"ja"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/geocoding/forward","host":["{{base_url}}"],"path":["geocoding","forward"]},"description":"Convert Address to Coordinates Translate any address worldwide into GPS coordinates latitude/longitude. Parameters form-data | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | address | string | ✅ | Full or partial address in any language/script | | la.\n\n---\n**Tool-ID:** `po_geocoding_forward` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_geocoding_forward`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"address","type":"text","description":"*(optional)* | Full or partial address in any language/script | Type: string","value":"東京都渋谷区"},{"key":"lang","type":"text","description":"*(optional)* | Response language de, en, ja, ru, ar, zh, etc. | Type: string","value":"ja"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"success\": false,\n    \"error\": \"MISSING_ADDRESS\",\n    \"message\": \"Parameter \\\"address\\\" is required\",\n    \"example\": {\n        \"address\": \"東京都渋谷区\",\n        \"lang\": \"ja\"\n    }\n}"}]},{"name":"Get geocoding service status","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/geocoding/status","host":["{{base_url}}"],"path":["geocoding","status"]},"description":"Service Health Check Public Check if geocoding service is available. No authentication required. Response json { \"success\": true, \"status\": \"operational\", \"endpoints\": { \"forward\": \"/geocoding/forward\", \"reverse\": \"/geocoding/reverse\", \"autocomplete\": \"/geocoding/autocomplete\", \"batch\": \"/geocodi.\n\n---\n**Tool-ID:** `po_geocoding_service_status` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_geocoding_service_status`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/geocoding/status","host":["{{base_url}}"],"path":["geocoding","status"]},"description":"Service Health Check Public Check if geocoding service is available. No authentication required. Response json { \"success\": true, \"status\": \"operational\", \"endpoints\": { \"forward\": \"/geocoding/forward\", \"reverse\": \"/geocoding/reverse\", \"autocomplete\": \"/geocoding/autocomplete\", \"batch\": \"/geocodi.\n\n---\n**Tool-ID:** `po_geocoding_service_status` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_geocoding_service_status`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"success\": true,\n    \"status\": \"operational\",\n    \"endpoints\": {\n        \"forward\": \"/geocoding/forward\",\n        \"reverse\": \"/geocoding/reverse\",\n        \"autocomplete\": \"/geocoding/autocomplete\",\n        \"batch\": \"/geocoding/batch\"\n    },\n    \"pricing\": {\n        \"credits_per_request\": 5,\n        \"credits_per_batch_item\": 1,\n        \"batch_max_items\": 1000\n    },\n    \"cache\": {\n        \"enabled\": true,\n        \"ttl\": \"24 hours\"\n    },\n    \"supported_languages\": [\n        \"de\",\n        \"en\",\n        \"es\",\n        \"fr\",\n        \"it\",\n        \"ja\",\n        \"ru\",\n        \"ar\",\n        \"zh\",\n        \"ko\",\n        \"pt\",\n        \"nl\",\n        \"pl\",\n        \"tr\"\n    ]\n}"}]},{"name":"Reverse-geocode coordinates","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/geocoding/reverse","host":["{{base_url}}"],"path":["geocoding","reverse"]},"description":"Convert Coordinates to Address Translate GPS coordinates latitude/longitude into a human-readable address. Parameters form-data | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | lat | float | ✅ | Latitude -90 to 90 | | lng | float | ✅ | Longitude -1.\n\n---\n**Tool-ID:** `po_geocoding_reverse` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_geocoding_reverse`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"lat","type":"text","description":"*(optional)* | Latitude -90 to 90 | Type: number","value":"35.6762"},{"key":"lng","type":"text","description":"*(optional)* | Longitude -180 to 180 | Type: number","value":"139.6503"},{"key":"lang","type":"text","description":"*(optional)* | Response language default: de | Type: string","value":"en"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/geocoding/reverse","host":["{{base_url}}"],"path":["geocoding","reverse"]},"description":"Convert Coordinates to Address Translate GPS coordinates latitude/longitude into a human-readable address. Parameters form-data | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | lat | float | ✅ | Latitude -90 to 90 | | lng | float | ✅ | Longitude -1.\n\n---\n**Tool-ID:** `po_geocoding_reverse` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_geocoding_reverse`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"lat","type":"text","description":"*(optional)* | Latitude -90 to 90 | Type: number","value":"35.6762"},{"key":"lng","type":"text","description":"*(optional)* | Longitude -180 to 180 | Type: number","value":"139.6503"},{"key":"lang","type":"text","description":"*(optional)* | Response language default: de | Type: string","value":"en"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"success\": false,\n    \"error\": \"MISSING_COORDINATES\",\n    \"message\": \"Parameters \\\"lat\\\" and \\\"lng\\\" are required\",\n    \"example\": {\n        \"lat\": 35.6762,\n        \"lng\": 139.6503,\n        \"lang\": \"ja\"\n    }\n}"}]},{"name":"Get IP country details","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/ip2location/countrylist","host":["{{base_url}}"],"path":["ip2location","countrylist"]},"description":"Full country intelligence for an IP address. Returns comprehensive country data: - VAT rates, B2B reverse charge rules - Economic zones EU, SEPA, Schengen - Legal system, GDPR status - Address/postal formats - IBAN/SWIFT bank details - Emergency phone numbers - National & regional holidays - Docu.\n\n---\n**Tool-ID:** `po_ip_geolocation_country_details` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_ip_geolocation_country_details`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"ip","type":"text","description":"*(optional)* | Query parameter: ip | Type: string","value":"8.8.8.8"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/ip2location/countrylist","host":["{{base_url}}"],"path":["ip2location","countrylist"]},"description":"Full country intelligence for an IP address. Returns comprehensive country data: - VAT rates, B2B reverse charge rules - Economic zones EU, SEPA, Schengen - Legal system, GDPR status - Address/postal formats - IBAN/SWIFT bank details - Emergency phone numbers - National & regional holidays - Docu.\n\n---\n**Tool-ID:** `po_ip_geolocation_country_details` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_ip_geolocation_country_details`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"ip","type":"text","description":"*(optional)* | Query parameter: ip | Type: string","value":"8.8.8.8"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"count\": 76,\n    \"countries\": {\n        \"AS\": \"American Samoa\",\n        \"AI\": \"Anguilla\",\n        \"AQ\": \"Antarctica\",\n        \"AG\": \"Antigua and Barbuda\",\n        \"AC\": \"Ascension Island\",\n        \"AU\": \"Australia\",\n        \"BS\": \"Bahamas\",\n        \"BB\": \"Barbados\",\n        \"BZ\": \"Belize\",\n        \"BM\": \"Bermuda\",\n        \"BW\": \"Botswana\",\n        \"IO\": \"British Indian Ocean Territory\",\n        \"VG\": \"British Virgin Islands\",\n        \"CA\": \"Canada\",\n        \"KY\": \"Cayman Islands\",\n        \"CX\": \"Christmas Island\",\n        \"CC\": \"Cocos Islands\",\n        \"CK\": \"Cook Islands\",\n        \"DM\": \"Dominica\",\n        \"SZ\": \"Eswatini\",\n        \"FK\": \"Falkland Islands\",\n        \"FJ\": \"Fiji\",\n        \"GM\": \"Gambia\",\n        \"GH\": \"Ghana\",\n        \"GI\": \"Gibraltar\",\n        \"GD\": \"Grenada\",\n        \"GU\": \"Guam\",\n        \"GG\": \"Guernsey\",\n        \"GY\": \"Guyana\",\n        \"HM\": \"Heard Island and McDonald Islands\",\n        \"IE\": \"Ireland\",\n        \"IM\": \"Isle of Man\",\n        \"JM\": \"Jamaica\",\n        \"JE\": \"Jersey\",\n        \"KE\": \"Kenya\",\n        \"KI\": \"Kiribati\",\n        \"LS\": \"Lesotho\",\n        \"LR\": \"Liberia\",\n        \"MW\": \"Malawi\",\n        \"MH\": \"Marshall Islands\",\n        \"MU\": \"Mauritius\",\n        \"FM\": \"Micronesia\",\n        \"MS\": \"Montserrat\",\n        \"NA\": \"Namibia\",\n        \"NR\": \"Nauru\",\n        \"NZ\": \"New Zealand\",\n        \"NG\": \"Nigeria\",\n        \"NU\": \"Niue\",\n        \"NF\": \"Norfolk Island\",\n        \"MP\": \"Northern Mariana Islands\",\n        \"PW\": \"Palau\",\n        \"PG\": \"Papua New Guinea\",\n        \"PH\": \"Philippines\",\n        \"PN\": \"Pitcairn\",\n        \"SH\": \"Saint Helena\",\n        \"KN\": \"Saint Kitts and Nevis\",\n        \"LC\": \"Saint Lucia\",\n        \"VC\": \"Saint Vincent and the Grenadines\",\n        \"SC\": \"Seychelles\",\n        \"SL\": \"Sierra Leone\",\n        \"SG\": \"Singapore\",\n        \"SB\": \"Solomon Islands\",\n        \"GS\": \"South Georgia and the South Sandwich Islands\",\n        \"SS\": \"South Sudan\",\n        \"TK\": \"Tokelau\",\n        \"TT\": \"Trinidad and Tobago\",\n        \"TA\": \"Tristan da Cunha\",\n        \"TC\": \"Turks and Caicos Islands\",\n        \"TV\": \"Tuvalu\",\n        \"VI\": \"U.S. Virgin Islands\",\n        \"UG\": \"Uganda\",\n        \"GB\": \"United Kingdom\",\n        \"US\": \"United States\",\n        \"UM\": \"United States Minor Outlying Islands\",\n        \"ZM\": \"Zambia\",\n        \"ZW\": \"Zimbabwe\"\n    },\n    \"language\": \"en\",\n    \"processing_time\": \"311.41ms\",\n    \"status\": \"success\"\n}"}]},{"name":"Get IP device fingerprint","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/ip2location/device","host":["{{base_url}}"],"path":["ip2location","device"]},"description":"Get device fingerprint information. Returns: - device_id - Unique device hash - confidence_score - Fingerprint confidence 0-100 - trust_score - Trust level 0-100 - total_visits - Visit count - first_seen / last_seen - Visit history - known_device - Previously seen device Use for: - Return visitor.\n\n---\n**Tool-ID:** `po_ip_geolocation_device_fingerprint` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_ip_geolocation_device_fingerprint`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"ip","type":"text","description":"*(optional)* | IP address to analyze for device fingerprint | Type: string","value":"8.8.8.8"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/ip2location/device","host":["{{base_url}}"],"path":["ip2location","device"]},"description":"Get device fingerprint information. Returns: - device_id - Unique device hash - confidence_score - Fingerprint confidence 0-100 - trust_score - Trust level 0-100 - total_visits - Visit count - first_seen / last_seen - Visit history - known_device - Previously seen device Use for: - Return visitor.\n\n---\n**Tool-ID:** `po_ip_geolocation_device_fingerprint` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_ip_geolocation_device_fingerprint`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"ip","type":"text","description":"*(optional)* | IP address to analyze for device fingerprint | Type: string","value":"8.8.8.8"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"device\": {\n        \"browser\": \"Unknown browser\",\n        \"browser_engine\": \"\",\n        \"browser_major\": \"\",\n        \"browser_version\": \"\",\n        \"crawler\": false,\n        \"device_brand\": \"\",\n        \"device_model\": \"\",\n        \"device_type\": \"desktop\",\n        \"ismobiledevice\": false,\n        \"istablet\": false,\n        \"platform\": \"Unknown system\",\n        \"platform_family\": \"\",\n        \"platform_version\": \"\"\n    },\n    \"fingerprint\": {\n        \"device_id\": \"44256a8eadf880a0660a905910f03b4d\",\n        \"confidence_score\": 30,\n        \"trust_score\": 100,\n        \"ip_location_used_by\": \"1 user\",\n        \"total_visits\": 1,\n        \"first_seen\": \"2 months ago\",\n        \"last_seen\": \"just now\",\n        \"known_device\": true\n    },\n    \"ip\": {\n        \"ip\": \"203.0.113.42\",\n        \"location\": {\n            \"timezone\": {\n                \"name\": \"Europe/Madrid\",\n                \"offsethours\": 1\n            },\n            \"geo_lat\": 40.4167,\n            \"geo_lon\": -3.70329,\n            \"city\": {\n                \"name\": \"Madrid\",\n                \"zip\": \"28070\",\n                \"district\": \"\"\n            },\n            \"region\": {\n                \"code\": \"MD\",\n                \"name\": \"Madrid\"\n            },\n            \"continent\": {\n                \"name\": \"Europe\",\n                \"code\": \"EU\"\n            },\n            \"country\": {\n                \"name\": \"Spain\",\n                \"code\": \"ES\",\n                \"currency\": \"EUR\",\n                \"primary_language\": \"es\",\n                \"spoken_languages\": [\n                    \"es\",\n                    \"eu\",\n                    \"ca\",\n                    \"gl\"\n                ],\n                \"capital\": \"Madrid\",\n                \"callingcode\": \"+34\",\n                \"vat\": {\n                    \"standard_rate\": 21,\n                    \"reduced_rates\": [\n                        10,\n                        4\n                    ],\n                    \"prefix\": \"ES\",\n                    \"regex\": \"^ES[A-Z0-9]{1}[0-9]{7}[A-Z]$\",\n                    \"digital_services_rate\": 21,\n                    \"b2b_reverse_charge\": true,\n                    \"tax_free_threshold\": 0\n                },\n                \"economy\": {\n                    \"currency_details\": {\n                        \"code\": \"EUR\",\n                        \"symbol\": \"€\",\n                        \"position\": \"after\",\n                        \"decimal\": \",\",\n                        \"thousand\": \".\",\n                        \"decimals\": 2\n                    },\n                    \"economic_zones\": [\n                        \"EU\",\n                        \"EEA\",\n                        \"SEPA\",\n                        \"Schengen\"\n                    ],\n                    \"risk_rating\": \"A\",\n                    \"gdp_per_capita\": 28905.45\n                },\n                \"legal\": {\n                    \"legal_system\": \"Civil Law\",\n                    \"data_protection\": \"GDPR\",\n                    \"business_registration_required\": true,\n                    \"electronic_signature\": \"eIDAS\",\n                    \"age_of_majority\": 18,\n                    \"vat_registration_required\": true\n                },\n                \"address\": {\n                    \"postal_code_regex\": \"^[0-9]{5}$\",\n                    \"format\": \"{{recipient}}\\n{{street}} {{house}}\\n{{postal}} {{city}}\",\n                    \"required_fields\": [\n                        \"street\",\n                        \"postal\",\n                        \"city\"\n                    ],\n                    \"state_required\": true,\n                    \"phone\": {\n                        \"mobile_prefix\": [\n                            \"6\",\n                            \"7\"\n                        ],\n                        \"area_code_required\": true,\n                        \"example\": \"+34 600 123 456\",\n                        \"regex\": \"^\\\\+34[6-7][0-9]{8}$\"\n                    }\n                },\n                \"business\": {\n                    \"working_days\": [\n                        \"mon\",\n                        \"tue\",\n                        \"wed\",\n                        \"thu\",\n                        \"fri\"\n                    ],\n                    \"usual_hours\": \"09:00-18:00\",\n                    \"bank_details\": {\n                        \"iban_prefix\": \"ES\",\n                        \"iban_length\": 24,\n                        \"swift_format\": \"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}[A-Z0-9]{11}$\",\n                        \"local_format\": \"BBBBBBBBCCCCCCCCCCCC\"\n                    },\n                    \"payment_methods\": {\n                        \"popular\": [\n                            \"sepa\",\n                            \"bizum\",\n                            \"cards\",\n                            \"paypal\"\n                        ],\n                        \"local\": [\n                            \"bizum\"\n                        ]\n                    }\n                },\n                \"demographics\": {\n                    \"population\": 47351567,\n                    \"capital_population\": 3233527,\n                    \"urbanization\": 80.3,\n                    \"median_age\": 45.3,\n                    \"languages\": {\n                        \"official\": [\n                            \"es\"\n                        ],\n                        \"business\": [\n                            \"es\",\n                            \"en\"\n                        ]\n                    }\n                },\n                \"geography\": {\n                    \"neighbors\": [\n                        \"PT\",\n                        \"FR\",\n                        \"AD\",\n                        \"GI\"\n                    ],\n                    \"has_coast\": true,\n                    \"climate_zone\": \"Mediterranean\",\n                    \"timezone\": {\n                        \"winter\": \"UTC+1\",\n                        \"summer\": \"UTC+2\",\n                        \"dst_start\": \"last Sunday March\",\n                        \"dst_end\": \"last Sunday October\"\n                    },\n                    \"coordinates\": {\n                        \"latitude\": 40.4168,\n                        \"longitude\": -3.7038\n                    }\n                },\n                \"holidays\": {\n                    \"national_fixed\": [\n                        {\n                            \"date\": \"01-01\",\n                            \"name\": \"Año Nuevo\"\n                        },\n                        {\n                            \"date\": \"05-01\",\n                            \"name\": \"Día del Trabajo\"\n                        },\n                        {\n                            \"date\": \"10-12\",\n                            \"name\": \"Día de la Hispanidad\"\n                        },\n                        {\n                            \"date\": \"12-25\",\n                            \"name\": \"Navidad\"\n                        }\n                    ],\n                    \"national_floating\": [\n                        {\n                            \"name\": \"Viernes Santo\",\n                            \"calc\": \"easter-2\"\n                        },\n                        {\n                            \"name\": \"Lunes de Pascua\",\n                            \"calc\": \"easter+1\"\n                        }\n                    ],\n                    \"regional_specific\": {\n                        \"AN\": [\n                            {\n                                \"date\": \"02-28\",\n                                \"name\": \"Día de Andalucía\"\n                            }\n                        ],\n                        \"CT\": [\n                            {\n                                \"date\": \"09-11\",\n                                \"name\": \"Día de Cataluña\"\n                            }\n                        ],\n                        \"MD\": [\n                            {\n                                \"date\": \"05-02\",\n                                \"name\": \"Día de la Comunidad de Madrid\"\n                            }\n                        ]\n                    }\n                },\n                \"document_validation\": {\n                    \"tax_number\": {\n                        \"format\": \"^[A-Z0-9]{1}[0-9]{7}[A-Z]$\",\n                        \"example\": \"A1234567B\"\n                    },\n                    \"vat_id\": {\n                        \"format\": \"^ES[A-Z0-9]{1}[0-9]{7}[A-Z]$\",\n                        \"example\": \"ESA1234567B\"\n                    },\n                    \"id_card\": {\n                        \"format\": \"^[0-9]{8}[A-Z]$\",\n                        \"example\": \"12345678Z\",\n                        \"valid_years\": 10\n                    },\n                    \"passport\": {\n                        \"format\": \"^[A-Z0-9]{9}$\",\n                        \"example\": \"X12345678\",\n                        \"valid_years\": 10\n                    }\n                },\n                \"ecommerce\": {\n                    \"returns_period\": 14,\n                    \"cancellation_period\": 14,\n                    \"required_legal_texts\": [\n                        \"imprint\",\n                        \"privacy_policy\",\n                        \"terms_conditions\",\n                        \"cancellation_policy\",\n                        \"shipping_info\"\n                    ],\n                    \"price_display\": {\n                        \"must_include_vat\": true,\n                        \"shipping_info_required\": true,\n                        \"basic_price_required\": true\n                    },\n                    \"payment_deadline\": {\n                        \"b2c\": 14,\n                        \"b2b\": 30\n                    }\n                },\n                \"important_contacts\": {\n                    \"emergency\": {\n                        \"general_emergency\": \"112\",\n                        \"police\": \"091\",\n                        \"fire_brigade\": \"080\",\n                        \"ambulance\": \"061\",\n                        \"poison_control\": \"+34 915 620 420\",\n                        \"maritime_emergency\": \"+34 900 202 202\",\n                        \"mountain_rescue\": \"112\",\n                        \"gas_emergency\": \"+34 900 924 622\",\n                        \"power_outage\": \"+34 900 500 049\"\n                    },\n                    \"health\": {\n                        \"medical_on_call\": \"061\",\n                        \"pharmacy_emergency\": \"N/A\",\n                        \"mental_health_crisis\": \"+34 917 007 079\",\n                        \"drug_addiction\": \"+34 900 161 515\",\n                        \"aids_counseling\": \"+34 915 912 445\",\n                        \"cancer_information\": \"+34 800 003 003\"\n                    },\n                    \"government\": {\n                        \"tax_office_general\": \"+34 915 548 700\",\n                        \"customs_info\": \"+34 915 506 400\",\n                        \"federal_police\": \"+34 900 202 202\",\n                        \"pension_service\": \"+34 901 166 565\",\n                        \"employment_agency\": \"+34 900 801 137\",\n                        \"social_security\": \"+34 901 502 050\",\n                        \"immigration_office\": \"+34 902 008 210\"\n                    },\n                    \"consumer\": {\n                        \"consumer_protection\": \"+34 915 326 320\",\n                        \"data_protection\": \"dpd@agpd.es\",\n                        \"banking_supervision\": \"+34 913 388 830\",\n                        \"energy_advice\": \"+34 900 648 804\",\n                        \"travel_security\": \"+34 915 205 948\",\n                        \"food_safety\": \"+34 913 224 000\"\n                    },\n                    \"assistance\": {\n                        \"roadside_assistance\": {\n                            \"mapfre\": \"+34 918 366 160\",\n                            \"axa\": \"+34 902 404 084\"\n                        },\n                        \"missing_persons\": {\n                            \"hotline\": \"+34 116 000\",\n                            \"children_emergency\": \"+34 116 111\"\n                        },\n                        \"violence\": {\n                            \"domestic_violence\": \"+34 016\",\n                            \"child_protection\": \"+34 116 111\"\n                        }\n                    },\n                    \"fraud_prevention\": {\n                        \"anti_fraud\": \"+34 902 007 290\",\n                        \"credit_card_blocking\": \"+34 900 111 000\",\n                        \"cyber_crime\": \"+34 915 822 640\",\n                        \"identity_theft\": \"+34 900 202 202\"\n                    },\n                    \"transportation\": {\n                        \"renfe\": \"+34 912 320 320\",\n                        \"iberia\": \"+34 901 111 500\",\n                        \"airport_barcelona\": \"+34 913 211 000\",\n                        \"airport_madrid\": \"+34 913 936 000\",\n                        \"public_transport_madrid\": \"+34 915 214 260\"\n                    },\n                    \"utilities\": {\n                        \"telefonica_support\": \"+34 900 104 709\",\n                        \"vodafone_support\": \"+34 123\",\n                        \"orange_support\": \"+34 1470\"\n                    }\n                },\n                \"iseumember\": true\n            }\n        },\n        \"provider\": {\n            \"as\": \"AS8708 RCS & RDS\",\n            \"asname\": \"RCS-RDS\",\n            \"isp\": \"RCS & RDS\",\n            \"org\": \"RCS & RDS Residential\"\n        },\n        \"status\": \"success\",\n        \"language\": {\n            \"by_browser\": false,\n            \"by_country\": \"es\"\n        },\n        \"locale\": {\n            \"by_browser\": false\n        },\n        \"country_details\": {\n            \"additional_data\": \"Extended country details loaded successfully\"\n        }\n    },\n    \"processing_time\": \"49.18ms\"\n}"}]},{"name":"Get IP full information","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/ip2location/full","host":["{{base_url}}"],"path":["ip2location","full"],"query":[{"key":"ip","value":"8.8.8.8","description":"*(optional)* | IP address to look up. If omitted, the callers IP is used. | Type: string","disabled":true},{"key":"locale","value":"en","description":"*(optional)* | Response locale (en, de, fr, es, etc.) | Type: string","disabled":true}]},"description":"Full IP Information Get complete IP geolocation and ISP data. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | ip | string | No | IP address default: caller's IP | Response: Location, ISP, timezone, currency, etc.\n\n---\n**Tool-ID:** `po_ip_geolocation_full_all_information` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_ip_geolocation_full_all_information`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/ip2location/full","host":["{{base_url}}"],"path":["ip2location","full"],"query":[{"key":"ip","value":"8.8.8.8","description":"*(optional)* | IP address to look up. If omitted, the callers IP is used. | Type: string","disabled":true},{"key":"locale","value":"en","description":"*(optional)* | Response locale (en, de, fr, es, etc.) | Type: string","disabled":true}]},"description":"Full IP Information Get complete IP geolocation and ISP data. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | ip | string | No | IP address default: caller's IP | Response: Location, ISP, timezone, currency, etc.\n\n---\n**Tool-ID:** `po_ip_geolocation_full_all_information` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_ip_geolocation_full_all_information`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"device\": {\n        \"browser\": \"Unknown browser\",\n        \"browser_engine\": \"\",\n        \"browser_major\": \"\",\n        \"browser_version\": \"\",\n        \"crawler\": false,\n        \"device_brand\": \"\",\n        \"device_model\": \"\",\n        \"device_type\": \"desktop\",\n        \"ismobiledevice\": false,\n        \"istablet\": false,\n        \"platform\": \"Unknown system\",\n        \"platform_family\": \"\",\n        \"platform_version\": \"\"\n    },\n    \"exchangecurrency\": {\n        \"status\": \"success\",\n        \"base\": \"EUR\",\n        \"amount\": 1,\n        \"rates\": {\n            \"AED\": 4.276998,\n            \"AFN\": 72.776202,\n            \"ALL\": 95.497453,\n            \"AMD\": 426.812086,\n            \"ANG\": 2.085173,\n            \"AOA\": 1069.061921,\n            \"ARS\": 1631.780408,\n            \"AUD\": 1.62637,\n            \"AWG\": 2.096263,\n            \"AZN\": 1.993494,\n            \"BAM\": 1.956733,\n            \"BBD\": 2.337161,\n            \"BDT\": 142.622295,\n            \"BGN\": 1.944772,\n            \"BHD\": 0.437626,\n            \"BIF\": 3455.469664,\n            \"BMD\": 1.164567,\n            \"BND\": 1.486292,\n            \"BOB\": 8.017904,\n            \"BRL\": 5.862835,\n            \"BSD\": 1.160365,\n            \"BTC\": 1.5e-5,\n            \"BTN\": 110.976035,\n            \"BWP\": 15.693484,\n            \"BYN\": 3.186079,\n            \"BYR\": 22825.285773,\n            \"BZD\": 2.333713,\n            \"CAD\": 1.606885,\n            \"CDF\": 2626.177499,\n            \"CHF\": 0.910568,\n            \"CLF\": 0.0265,\n            \"CLP\": 1042.965624,\n            \"CNY\": 7.912942,\n            \"CNH\": 7.906823,\n            \"COP\": 4274.438554,\n            \"CRC\": 525.166209,\n            \"CUC\": 1.164544,\n            \"CUP\": 30.860718,\n            \"CVE\": 110.323129,\n            \"CZK\": 24.291019,\n            \"DJF\": 206.626478,\n            \"DKK\": 7.472309,\n            \"DOP\": 68.391934,\n            \"DZD\": 155.088715,\n            \"EGP\": 61.636904,\n            \"ERN\": 17.468505,\n            \"ETB\": 187.074568,\n            \"EUR\": 1,\n            \"FJD\": 2.569152,\n            \"FKP\": 0.866529,\n            \"GBP\": 0.863524,\n            \"GEL\": 3.097453,\n            \"GGP\": 0.866529,\n            \"GHS\": 13.472291,\n            \"GIP\": 0.866563,\n            \"GMD\": 84.428728,\n            \"GNF\": 10174.322291,\n            \"GTQ\": 8.848662,\n            \"GYD\": 242.737897,\n            \"HKD\": 9.125139,\n            \"HNL\": 30.871724,\n            \"HRK\": 7.535833,\n            \"HTG\": 152.016248,\n            \"HUF\": 357.994867,\n            \"IDR\": 20610.794028,\n            \"ILS\": 3.366656,\n            \"IMP\": 0.866563,\n            \"INR\": 111.452998,\n            \"IQD\": 1520.024926,\n            \"IRR\": 1541157.200165,\n            \"ISK\": 144.128689,\n            \"JEP\": 0.866555,\n            \"JMD\": 183.184688,\n            \"JOD\": 0.825649,\n            \"JPY\": 185.015553,\n            \"KES\": 150.61936,\n            \"KGS\": 101.844043,\n            \"KHR\": 4652.448759,\n            \"KMF\": 494.961052,\n            \"KPW\": 1048.111552,\n            \"KRW\": 1770.53176,\n            \"KWD\": 0.360445,\n            \"KYD\": 0.966971,\n            \"KZT\": 547.971337,\n            \"LAK\": 25429.873761,\n            \"LBP\": 103939.965129,\n            \"LKR\": 388.125103,\n            \"LRD\": 212.339146,\n            \"LSL\": 19.140011,\n            \"LTL\": 3.438732,\n            \"LVL\": 0.704463,\n            \"LYD\": 7.394748,\n            \"MAD\": 10.705026,\n            \"MDL\": 20.127404,\n            \"MGA\": 4875.568898,\n            \"MKD\": 61.671262,\n            \"MMK\": 2444.945945,\n            \"MNT\": 4168.9994,\n            \"MOP\": 9.365941,\n            \"MRU\": 46.369968,\n            \"MUR\": 55.178494,\n            \"MVR\": 17.931084,\n            \"MWK\": 2012.160191,\n            \"MXN\": 20.096276,\n            \"MYR\": 4.62098,\n            \"MZN\": 74.419194,\n            \"NAD\": 19.140202,\n            \"NGN\": 1598.093256,\n            \"NIO\": 42.720851,\n            \"NOK\": 10.778996,\n            \"NPR\": 177.566784,\n            \"NZD\": 1.981134,\n            \"OMR\": 0.44806,\n            \"PAB\": 1.160354,\n            \"PEN\": 3.956345,\n            \"PGK\": 5.060566,\n            \"PHP\": 71.59201,\n            \"PKR\": 323.057472,\n            \"PLN\": 4.237849,\n            \"PYG\": 7071.726035,\n            \"QAR\": 4.242593,\n            \"RON\": 5.269124,\n            \"RSD\": 117.47072,\n            \"RUB\": 82.633689,\n            \"RWF\": 1696.493869,\n            \"SAR\": 4.355477,\n            \"SBD\": 9.369061,\n            \"SCR\": 15.943923,\n            \"SDG\": 699.329415,\n            \"SEK\": 10.845671,\n            \"SGD\": 1.487382,\n            \"SHP\": 0.869476,\n            \"SLE\": 28.653323,\n            \"SLL\": 24421.367872,\n            \"SOS\": 663.122883,\n            \"SRD\": 43.267856,\n            \"STD\": 24103.704437,\n            \"STN\": 24.521978,\n            \"SVC\": 10.15274,\n            \"SYP\": 128.717744,\n            \"SZL\": 19.1357,\n            \"THB\": 38.08466,\n            \"TJS\": 10.780065,\n            \"TMT\": 4.075903,\n            \"TND\": 3.396956,\n            \"TOP\": 2.804026,\n            \"TRY\": 53.226784,\n            \"TTD\": 7.87615,\n            \"TWD\": 36.630874,\n            \"TZS\": 3034.44718,\n            \"UAH\": 51.35662,\n            \"UGX\": 4394.271388,\n            \"USD\": 1.164567,\n            \"UYU\": 46.454012,\n            \"UZS\": 13921.77869,\n            \"VES\": 612.813533,\n            \"VND\": 30705.038238,\n            \"VUV\": 136.778643,\n            \"WST\": 3.173336,\n            \"XAF\": 656.269986,\n            \"XAG\": 0.014819,\n            \"XAU\": 0.000254,\n            \"XCD\": 3.147301,\n            \"XCG\": 2.091339,\n            \"XDR\": 0.816222,\n            \"XOF\": 656.3028,\n            \"XPF\": 119.334129,\n            \"YER\": 277.918185,\n            \"ZAR\": 19.040378,\n            \"ZMK\": 10482.424433,\n            \"ZMW\": 21.844509,\n            \"ZWL\": 375.001362\n        },\n        \"timestamp\": \"2026-05-25T05:00:20Z\"\n    },\n    \"fingerprint\": {\n        \"device_id\": \"be5be69f55e91af25e54ecc2154d4da3\",\n        \"confidence_score\": 15,\n        \"trust_score\": 0,\n        \"ip_location_used_by\": \"1 user\",\n        \"total_visits\": 1,\n        \"first_seen\": \"2 months ago\",\n        \"last_seen\": \"just now\",\n        \"known_device\": true\n    },\n    \"ip\": {\n        \"ip\": \"server\",\n        \"location\": {\n            \"timezone\": {\n                \"name\": null,\n                \"offsethours\": 0\n            },\n            \"geo_lat\": null,\n            \"geo_lon\": null,\n            \"city\": {\n                \"name\": null,\n                \"zip\": null,\n                \"district\": null\n            },\n            \"region\": {\n                \"code\": null,\n                \"name\": null\n            },\n            \"continent\": {\n                \"name\": null,\n                \"code\": null\n            },\n            \"country\": {\n                \"name\": null,\n                \"code\": null,\n                \"currency\": null,\n                \"spoken_languages\": \"n/a\",\n                \"capital\": \"n/a\",\n                \"callingcode\": \"n/a\",\n                \"primary_language\": \"n/a\"\n            }\n        },\n        \"provider\": {\n            \"as\": null,\n            \"asname\": null,\n            \"isp\": null,\n            \"org\": null\n        },\n        \"status\": \"success\",\n        \"language\": {\n            \"by_country\": \"n/a\"\n        },\n        \"locale\": {\n            \"by_browser\": false\n        },\n        \"country_details\": {\n            \"warnings\": [\n                \"Country code not provided in IP response\"\n            ]\n        }\n    },\n    \"processing_time\": \"641.05ms\",\n    \"status\": \"success\",\n    \"vpn\": {\n        \"is_vpn\": true,\n        \"is_proxy\": false,\n        \"is_relay\": false,\n        \"is_datacenter\": false,\n        \"is_tor\": false,\n        \"score\": \"96.48%\",\n        \"ip\": \"server\",\n        \"last_paperofficeai_overseer_crawl\": \"2026-05-25 07:00:20\",\n        \"type\": \"firehol_level1\",\n        \"details\": {\n            \"type\": \"firehol_level1\",\n            \"category\": \"blacklist\",\n            \"start_ip\": 3232235520,\n            \"end_ip\": 3232301055\n        }\n    }\n}"}]},{"name":"Get IP location only","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/ip2location/location","host":["{{base_url}}"],"path":["ip2location","location"]},"description":"IP Location Only Get basic location data for an IP. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | ip | string | No | IP address default: caller's IP | Response: Country, city, coordinates\n\n---\n**Tool-ID:** `po_ip_geolocation_location` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_ip_geolocation_location`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"ip","type":"text","description":"*(optional)* | Query parameter: ip | Type: string","value":"8.8.8.8"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/ip2location/location","host":["{{base_url}}"],"path":["ip2location","location"]},"description":"IP Location Only Get basic location data for an IP. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | ip | string | No | IP address default: caller's IP | Response: Country, city, coordinates\n\n---\n**Tool-ID:** `po_ip_geolocation_location` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_ip_geolocation_location`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"ip","type":"text","description":"*(optional)* | Query parameter: ip | Type: string","value":"8.8.8.8"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"ip\": {\n        \"ip\": \"203.0.113.42\",\n        \"location\": {\n            \"timezone\": {\n                \"name\": \"Europe/Madrid\",\n                \"offsethours\": 1\n            },\n            \"geo_lat\": 40.4167,\n            \"geo_lon\": -3.70329,\n            \"city\": {\n                \"name\": \"Madrid\",\n                \"zip\": \"28070\",\n                \"district\": \"\"\n            },\n            \"region\": {\n                \"code\": \"MD\",\n                \"name\": \"Madrid\"\n            },\n            \"continent\": {\n                \"name\": \"Europe\",\n                \"code\": \"EU\"\n            },\n            \"country\": {\n                \"name\": \"Spain\",\n                \"code\": \"ES\",\n                \"currency\": \"EUR\",\n                \"primary_language\": \"es\",\n                \"spoken_languages\": [\n                    \"es\",\n                    \"eu\",\n                    \"ca\",\n                    \"gl\"\n                ],\n                \"capital\": \"Madrid\",\n                \"callingcode\": \"+34\",\n                \"vat\": {\n                    \"standard_rate\": 21,\n                    \"reduced_rates\": [\n                        10,\n                        4\n                    ],\n                    \"prefix\": \"ES\",\n                    \"regex\": \"^ES[A-Z0-9]{1}[0-9]{7}[A-Z]$\",\n                    \"digital_services_rate\": 21,\n                    \"b2b_reverse_charge\": true,\n                    \"tax_free_threshold\": 0\n                },\n                \"economy\": {\n                    \"currency_details\": {\n                        \"code\": \"EUR\",\n                        \"symbol\": \"€\",\n                        \"position\": \"after\",\n                        \"decimal\": \",\",\n                        \"thousand\": \".\",\n                        \"decimals\": 2\n                    },\n                    \"economic_zones\": [\n                        \"EU\",\n                        \"EEA\",\n                        \"SEPA\",\n                        \"Schengen\"\n                    ],\n                    \"risk_rating\": \"A\",\n                    \"gdp_per_capita\": 28905.45\n                },\n                \"legal\": {\n                    \"legal_system\": \"Civil Law\",\n                    \"data_protection\": \"GDPR\",\n                    \"business_registration_required\": true,\n                    \"electronic_signature\": \"eIDAS\",\n                    \"age_of_majority\": 18,\n                    \"vat_registration_required\": true\n                },\n                \"address\": {\n                    \"postal_code_regex\": \"^[0-9]{5}$\",\n                    \"format\": \"{{recipient}}\\n{{street}} {{house}}\\n{{postal}} {{city}}\",\n                    \"required_fields\": [\n                        \"street\",\n                        \"postal\",\n                        \"city\"\n                    ],\n                    \"state_required\": true,\n                    \"phone\": {\n                        \"mobile_prefix\": [\n                            \"6\",\n                            \"7\"\n                        ],\n                        \"area_code_required\": true,\n                        \"example\": \"+34 600 123 456\",\n                        \"regex\": \"^\\\\+34[6-7][0-9]{8}$\"\n                    }\n                },\n                \"business\": {\n                    \"working_days\": [\n                        \"mon\",\n                        \"tue\",\n                        \"wed\",\n                        \"thu\",\n                        \"fri\"\n                    ],\n                    \"usual_hours\": \"09:00-18:00\",\n                    \"bank_details\": {\n                        \"iban_prefix\": \"ES\",\n                        \"iban_length\": 24,\n                        \"swift_format\": \"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}[A-Z0-9]{11}$\",\n                        \"local_format\": \"BBBBBBBBCCCCCCCCCCCC\"\n                    },\n                    \"payment_methods\": {\n                        \"popular\": [\n                            \"sepa\",\n                            \"bizum\",\n                            \"cards\",\n                            \"paypal\"\n                        ],\n                        \"local\": [\n                            \"bizum\"\n                        ]\n                    }\n                },\n                \"demographics\": {\n                    \"population\": 47351567,\n                    \"capital_population\": 3233527,\n                    \"urbanization\": 80.3,\n                    \"median_age\": 45.3,\n                    \"languages\": {\n                        \"official\": [\n                            \"es\"\n                        ],\n                        \"business\": [\n                            \"es\",\n                            \"en\"\n                        ]\n                    }\n                },\n                \"geography\": {\n                    \"neighbors\": [\n                        \"PT\",\n                        \"FR\",\n                        \"AD\",\n                        \"GI\"\n                    ],\n                    \"has_coast\": true,\n                    \"climate_zone\": \"Mediterranean\",\n                    \"timezone\": {\n                        \"winter\": \"UTC+1\",\n                        \"summer\": \"UTC+2\",\n                        \"dst_start\": \"last Sunday March\",\n                        \"dst_end\": \"last Sunday October\"\n                    },\n                    \"coordinates\": {\n                        \"latitude\": 40.4168,\n                        \"longitude\": -3.7038\n                    }\n                },\n                \"holidays\": {\n                    \"national_fixed\": [\n                        {\n                            \"date\": \"01-01\",\n                            \"name\": \"Año Nuevo\"\n                        },\n                        {\n                            \"date\": \"05-01\",\n                            \"name\": \"Día del Trabajo\"\n                        },\n                        {\n                            \"date\": \"10-12\",\n                            \"name\": \"Día de la Hispanidad\"\n                        },\n                        {\n                            \"date\": \"12-25\",\n                            \"name\": \"Navidad\"\n                        }\n                    ],\n                    \"national_floating\": [\n                        {\n                            \"name\": \"Viernes Santo\",\n                            \"calc\": \"easter-2\"\n                        },\n                        {\n                            \"name\": \"Lunes de Pascua\",\n                            \"calc\": \"easter+1\"\n                        }\n                    ],\n                    \"regional_specific\": {\n                        \"AN\": [\n                            {\n                                \"date\": \"02-28\",\n                                \"name\": \"Día de Andalucía\"\n                            }\n                        ],\n                        \"CT\": [\n                            {\n                                \"date\": \"09-11\",\n                                \"name\": \"Día de Cataluña\"\n                            }\n                        ],\n                        \"MD\": [\n                            {\n                                \"date\": \"05-02\",\n                                \"name\": \"Día de la Comunidad de Madrid\"\n                            }\n                        ]\n                    }\n                },\n                \"document_validation\": {\n                    \"tax_number\": {\n                        \"format\": \"^[A-Z0-9]{1}[0-9]{7}[A-Z]$\",\n                        \"example\": \"A1234567B\"\n                    },\n                    \"vat_id\": {\n                        \"format\": \"^ES[A-Z0-9]{1}[0-9]{7}[A-Z]$\",\n                        \"example\": \"ESA1234567B\"\n                    },\n                    \"id_card\": {\n                        \"format\": \"^[0-9]{8}[A-Z]$\",\n                        \"example\": \"12345678Z\",\n                        \"valid_years\": 10\n                    },\n                    \"passport\": {\n                        \"format\": \"^[A-Z0-9]{9}$\",\n                        \"example\": \"X12345678\",\n                        \"valid_years\": 10\n                    }\n                },\n                \"ecommerce\": {\n                    \"returns_period\": 14,\n                    \"cancellation_period\": 14,\n                    \"required_legal_texts\": [\n                        \"imprint\",\n                        \"privacy_policy\",\n                        \"terms_conditions\",\n                        \"cancellation_policy\",\n                        \"shipping_info\"\n                    ],\n                    \"price_display\": {\n                        \"must_include_vat\": true,\n                        \"shipping_info_required\": true,\n                        \"basic_price_required\": true\n                    },\n                    \"payment_deadline\": {\n                        \"b2c\": 14,\n                        \"b2b\": 30\n                    }\n                },\n                \"important_contacts\": {\n                    \"emergency\": {\n                        \"general_emergency\": \"112\",\n                        \"police\": \"091\",\n                        \"fire_brigade\": \"080\",\n                        \"ambulance\": \"061\",\n                        \"poison_control\": \"+34 915 620 420\",\n                        \"maritime_emergency\": \"+34 900 202 202\",\n                        \"mountain_rescue\": \"112\",\n                        \"gas_emergency\": \"+34 900 924 622\",\n                        \"power_outage\": \"+34 900 500 049\"\n                    },\n                    \"health\": {\n                        \"medical_on_call\": \"061\",\n                        \"pharmacy_emergency\": \"N/A\",\n                        \"mental_health_crisis\": \"+34 917 007 079\",\n                        \"drug_addiction\": \"+34 900 161 515\",\n                        \"aids_counseling\": \"+34 915 912 445\",\n                        \"cancer_information\": \"+34 800 003 003\"\n                    },\n                    \"government\": {\n                        \"tax_office_general\": \"+34 915 548 700\",\n                        \"customs_info\": \"+34 915 506 400\",\n                        \"federal_police\": \"+34 900 202 202\",\n                        \"pension_service\": \"+34 901 166 565\",\n                        \"employment_agency\": \"+34 900 801 137\",\n                        \"social_security\": \"+34 901 502 050\",\n                        \"immigration_office\": \"+34 902 008 210\"\n                    },\n                    \"consumer\": {\n                        \"consumer_protection\": \"+34 915 326 320\",\n                        \"data_protection\": \"dpd@agpd.es\",\n                        \"banking_supervision\": \"+34 913 388 830\",\n                        \"energy_advice\": \"+34 900 648 804\",\n                        \"travel_security\": \"+34 915 205 948\",\n                        \"food_safety\": \"+34 913 224 000\"\n                    },\n                    \"assistance\": {\n                        \"roadside_assistance\": {\n                            \"mapfre\": \"+34 918 366 160\",\n                            \"axa\": \"+34 902 404 084\"\n                        },\n                        \"missing_persons\": {\n                            \"hotline\": \"+34 116 000\",\n                            \"children_emergency\": \"+34 116 111\"\n                        },\n                        \"violence\": {\n                            \"domestic_violence\": \"+34 016\",\n                            \"child_protection\": \"+34 116 111\"\n                        }\n                    },\n                    \"fraud_prevention\": {\n                        \"anti_fraud\": \"+34 902 007 290\",\n                        \"credit_card_blocking\": \"+34 900 111 000\",\n                        \"cyber_crime\": \"+34 915 822 640\",\n                        \"identity_theft\": \"+34 900 202 202\"\n                    },\n                    \"transportation\": {\n                        \"renfe\": \"+34 912 320 320\",\n                        \"iberia\": \"+34 901 111 500\",\n                        \"airport_barcelona\": \"+34 913 211 000\",\n                        \"airport_madrid\": \"+34 913 936 000\",\n                        \"public_transport_madrid\": \"+34 915 214 260\"\n                    },\n                    \"utilities\": {\n                        \"telefonica_support\": \"+34 900 104 709\",\n                        \"vodafone_support\": \"+34 123\",\n                        \"orange_support\": \"+34 1470\"\n                    }\n                },\n                \"iseumember\": true\n            }\n        },\n        \"provider\": {\n            \"as\": \"AS8708 RCS & RDS\",\n            \"asname\": \"RCS-RDS\",\n            \"isp\": \"RCS & RDS\",\n            \"org\": \"RCS & RDS Residential\"\n        },\n        \"status\": \"success\",\n        \"language\": {\n            \"by_browser\": false,\n            \"by_country\": \"es\"\n        },\n        \"locale\": {\n            \"by_browser\": false\n        },\n        \"country_details\": {\n            \"additional_data\": \"Extended country details loaded successfully\"\n        }\n    },\n    \"processing_time\": \"11.02ms\"\n}"}]},{"name":"List IP countries","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/ip2location/countrylist","host":["{{base_url}}"],"path":["ip2location","countrylist"]},"description":"Get list of all supported countries with basic info. Returns: - Country codes ISO 2-letter - Country names - Currency codes - Primary languages\n\n---\n**Tool-ID:** `po_ip_geolocation_country_list` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_ip_geolocation_country_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"language","type":"text","description":"*(optional)* | language the Laenthenamen (e.g. 'de', 'en', 'fr'). | Type: string","value":"en"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/ip2location/countrylist","host":["{{base_url}}"],"path":["ip2location","countrylist"]},"description":"Get list of all supported countries with basic info. Returns: - Country codes ISO 2-letter - Country names - Currency codes - Primary languages\n\n---\n**Tool-ID:** `po_ip_geolocation_country_list` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_ip_geolocation_country_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"language","type":"text","description":"*(optional)* | language the Laenthenamen (e.g. 'de', 'en', 'fr'). | Type: string","value":"en"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"count\": 76,\n    \"countries\": {\n        \"AS\": \"American Samoa\",\n        \"AI\": \"Anguilla\",\n        \"AQ\": \"Antarctica\",\n        \"AG\": \"Antigua and Barbuda\",\n        \"AC\": \"Ascension Island\",\n        \"AU\": \"Australia\",\n        \"BS\": \"Bahamas\",\n        \"BB\": \"Barbados\",\n        \"BZ\": \"Belize\",\n        \"BM\": \"Bermuda\",\n        \"BW\": \"Botswana\",\n        \"IO\": \"British Indian Ocean Territory\",\n        \"VG\": \"British Virgin Islands\",\n        \"CA\": \"Canada\",\n        \"KY\": \"Cayman Islands\",\n        \"CX\": \"Christmas Island\",\n        \"CC\": \"Cocos Islands\",\n        \"CK\": \"Cook Islands\",\n        \"DM\": \"Dominica\",\n        \"SZ\": \"Eswatini\",\n        \"FK\": \"Falkland Islands\",\n        \"FJ\": \"Fiji\",\n        \"GM\": \"Gambia\",\n        \"GH\": \"Ghana\",\n        \"GI\": \"Gibraltar\",\n        \"GD\": \"Grenada\",\n        \"GU\": \"Guam\",\n        \"GG\": \"Guernsey\",\n        \"GY\": \"Guyana\",\n        \"HM\": \"Heard Island and McDonald Islands\",\n        \"IE\": \"Ireland\",\n        \"IM\": \"Isle of Man\",\n        \"JM\": \"Jamaica\",\n        \"JE\": \"Jersey\",\n        \"KE\": \"Kenya\",\n        \"KI\": \"Kiribati\",\n        \"LS\": \"Lesotho\",\n        \"LR\": \"Liberia\",\n        \"MW\": \"Malawi\",\n        \"MH\": \"Marshall Islands\",\n        \"MU\": \"Mauritius\",\n        \"FM\": \"Micronesia\",\n        \"MS\": \"Montserrat\",\n        \"NA\": \"Namibia\",\n        \"NR\": \"Nauru\",\n        \"NZ\": \"New Zealand\",\n        \"NG\": \"Nigeria\",\n        \"NU\": \"Niue\",\n        \"NF\": \"Norfolk Island\",\n        \"MP\": \"Northern Mariana Islands\",\n        \"PW\": \"Palau\",\n        \"PG\": \"Papua New Guinea\",\n        \"PH\": \"Philippines\",\n        \"PN\": \"Pitcairn\",\n        \"SH\": \"Saint Helena\",\n        \"KN\": \"Saint Kitts and Nevis\",\n        \"LC\": \"Saint Lucia\",\n        \"VC\": \"Saint Vincent and the Grenadines\",\n        \"SC\": \"Seychelles\",\n        \"SL\": \"Sierra Leone\",\n        \"SG\": \"Singapore\",\n        \"SB\": \"Solomon Islands\",\n        \"GS\": \"South Georgia and the South Sandwich Islands\",\n        \"SS\": \"South Sudan\",\n        \"TK\": \"Tokelau\",\n        \"TT\": \"Trinidad and Tobago\",\n        \"TA\": \"Tristan da Cunha\",\n        \"TC\": \"Turks and Caicos Islands\",\n        \"TV\": \"Tuvalu\",\n        \"VI\": \"U.S. Virgin Islands\",\n        \"UG\": \"Uganda\",\n        \"GB\": \"United Kingdom\",\n        \"US\": \"United States\",\n        \"UM\": \"United States Minor Outlying Islands\",\n        \"ZM\": \"Zambia\",\n        \"ZW\": \"Zimbabwe\"\n    },\n    \"language\": \"en\",\n    \"processing_time\": \"299.47ms\",\n    \"status\": \"success\"\n}"}]}]},{"name":"🌤️ Weather","description":"# Weather\n\nReal-time weather data and forecasts. Get current conditions, hourly and daily forecasts, and weather alerts for any location worldwide.","item":[{"name":"Get weather by city","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/location2weather","host":["{{base_url}}"],"path":["location2weather"]},"description":"Weather by City Get current weather and 7-day forecast for any city worldwide. --- When to Use - Display weather for a specific city - Travel planning - Weather widgets --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | city | string | ✅.\n\n---\n**Tool-ID:** `po_weather_by_city` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_weather_by_city`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"city","type":"text","description":"*(optional)* | City name (e.g. Berlin, Munich, New York). Coordinates (lat/lon or latitude/longitude) are also accepted as Alternative. | Type: string","value":"Berlin"},{"key":"lat","type":"text","description":"*(optional)* | Latitude (Alternative to city) | Type: number","value":"52.5200"},{"key":"lon","type":"text","description":"*(optional)* | Longitude (Alternative to city) | Type: number","value":"13.4050"},{"key":"locale","type":"text","description":"*(optional)* | Language for weather descriptions (ISO-639-1) | Type: string","value":"en"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/location2weather","host":["{{base_url}}"],"path":["location2weather"]},"description":"Weather by City Get current weather and 7-day forecast for any city worldwide. --- When to Use - Display weather for a specific city - Travel planning - Weather widgets --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | city | string | ✅.\n\n---\n**Tool-ID:** `po_weather_by_city` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_weather_by_city`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"city","type":"text","description":"*(optional)* | City name (e.g. Berlin, Munich, New York). Coordinates (lat/lon or latitude/longitude) are also accepted as Alternative. | Type: string","value":"Berlin"},{"key":"lat","type":"text","description":"*(optional)* | Latitude (Alternative to city) | Type: number","value":"52.5200"},{"key":"lon","type":"text","description":"*(optional)* | Longitude (Alternative to city) | Type: number","value":"13.4050"},{"key":"locale","type":"text","description":"*(optional)* | Language for weather descriptions (ISO-639-1) | Type: string","value":"en"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"processing_time\": \"example\",\n    \"temperature\": 1,\n    \"humidity\": 1,\n    \"description\": \"example\",\n    \"wind_speed\": 1,\n    \"icon\": \"example\",\n    \"status\": \"success\"\n}"}]},{"name":"Get weather by coordinates","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/location2weather","host":["{{base_url}}"],"path":["location2weather"]},"description":"Weather by Coordinates Get weather for specific coordinates. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | lat | float | Yes | Latitude | | lon | float | Yes | Longitude | Response: Current weather conditions\n\n---\n**Tool-ID:** `po_weather_by_coordinates` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_weather_by_coordinates`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"lat","type":"text","description":"*(optional)* | Latitude (e.g. 52.52 for Berlin) | Type: number","value":"52.5200"},{"key":"lon","type":"text","description":"*(optional)* | Longitude (e.g. 13.405 for Berlin) | Type: number","value":"13.4050"},{"key":"lang","type":"text","description":"*(optional)* | Response language (e.g. de, en) | Type: string","value":"en"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/location2weather","host":["{{base_url}}"],"path":["location2weather"]},"description":"Weather by Coordinates Get weather for specific coordinates. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | lat | float | Yes | Latitude | | lon | float | Yes | Longitude | Response: Current weather conditions\n\n---\n**Tool-ID:** `po_weather_by_coordinates` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_weather_by_coordinates`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"lat","type":"text","description":"*(optional)* | Latitude (e.g. 52.52 for Berlin) | Type: number","value":"52.5200"},{"key":"lon","type":"text","description":"*(optional)* | Longitude (e.g. 13.405 for Berlin) | Type: number","value":"13.4050"},{"key":"lang","type":"text","description":"*(optional)* | Response language (e.g. de, en) | Type: string","value":"en"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"processing_time\": \"example\",\n    \"temperature\": 1,\n    \"humidity\": 1,\n    \"description\": \"example\",\n    \"wind_speed\": 1,\n    \"icon\": \"example\",\n    \"status\": \"success\"\n}"}]},{"name":"Get weather by IP","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/ip2location/weather","host":["{{base_url}}"],"path":["ip2location","weather"]},"description":"Weather by IP Get weather for IP-based location. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | ip | string | No | IP address default: caller's IP | Response: Current weather conditions\n\n---\n**Tool-ID:** `po_weather_by_ip` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_weather_by_ip`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"locale","type":"text","description":"*(optional)* | Query parameter: locale | Type: string","value":"en"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/ip2location/weather","host":["{{base_url}}"],"path":["ip2location","weather"]},"description":"Weather by IP Get weather for IP-based location. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | ip | string | No | IP address default: caller's IP | Response: Current weather conditions\n\n---\n**Tool-ID:** `po_weather_by_ip` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_weather_by_ip`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"locale","type":"text","description":"*(optional)* | Query parameter: locale | Type: string","value":"en"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"ip\": {\n        \"ip\": \"203.0.113.42\",\n        \"location\": {\n            \"timezone\": {\n                \"name\": \"Europe/Madrid\",\n                \"offsethours\": 1\n            },\n            \"geo_lat\": 40.4167,\n            \"geo_lon\": -3.70329,\n            \"city\": {\n                \"name\": \"Madrid\",\n                \"zip\": \"28070\",\n                \"district\": \"\"\n            },\n            \"region\": {\n                \"code\": \"MD\",\n                \"name\": \"Madrid\"\n            },\n            \"continent\": {\n                \"name\": \"Europe\",\n                \"code\": \"EU\"\n            },\n            \"country\": {\n                \"name\": \"Spain\",\n                \"code\": \"ES\",\n                \"currency\": \"EUR\",\n                \"primary_language\": \"es\",\n                \"spoken_languages\": [\n                    \"es\",\n                    \"eu\",\n                    \"ca\",\n                    \"gl\"\n                ],\n                \"capital\": \"Madrid\",\n                \"callingcode\": \"+34\",\n                \"vat\": {\n                    \"standard_rate\": 21,\n                    \"reduced_rates\": [\n                        10,\n                        4\n                    ],\n                    \"prefix\": \"ES\",\n                    \"regex\": \"^ES[A-Z0-9]{1}[0-9]{7}[A-Z]$\",\n                    \"digital_services_rate\": 21,\n                    \"b2b_reverse_charge\": true,\n                    \"tax_free_threshold\": 0\n                },\n                \"economy\": {\n                    \"currency_details\": {\n                        \"code\": \"EUR\",\n                        \"symbol\": \"€\",\n                        \"position\": \"after\",\n                        \"decimal\": \",\",\n                        \"thousand\": \".\",\n                        \"decimals\": 2\n                    },\n                    \"economic_zones\": [\n                        \"EU\",\n                        \"EEA\",\n                        \"SEPA\",\n                        \"Schengen\"\n                    ],\n                    \"risk_rating\": \"A\",\n                    \"gdp_per_capita\": 28905.45\n                },\n                \"legal\": {\n                    \"legal_system\": \"Civil Law\",\n                    \"data_protection\": \"GDPR\",\n                    \"business_registration_required\": true,\n                    \"electronic_signature\": \"eIDAS\",\n                    \"age_of_majority\": 18,\n                    \"vat_registration_required\": true\n                },\n                \"address\": {\n                    \"postal_code_regex\": \"^[0-9]{5}$\",\n                    \"format\": \"{{recipient}}\\n{{street}} {{house}}\\n{{postal}} {{city}}\",\n                    \"required_fields\": [\n                        \"street\",\n                        \"postal\",\n                        \"city\"\n                    ],\n                    \"state_required\": true,\n                    \"phone\": {\n                        \"mobile_prefix\": [\n                            \"6\",\n                            \"7\"\n                        ],\n                        \"area_code_required\": true,\n                        \"example\": \"+34 600 123 456\",\n                        \"regex\": \"^\\\\+34[6-7][0-9]{8}$\"\n                    }\n                },\n                \"business\": {\n                    \"working_days\": [\n                        \"mon\",\n                        \"tue\",\n                        \"wed\",\n                        \"thu\",\n                        \"fri\"\n                    ],\n                    \"usual_hours\": \"09:00-18:00\",\n                    \"bank_details\": {\n                        \"iban_prefix\": \"ES\",\n                        \"iban_length\": 24,\n                        \"swift_format\": \"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}[A-Z0-9]{11}$\",\n                        \"local_format\": \"BBBBBBBBCCCCCCCCCCCC\"\n                    },\n                    \"payment_methods\": {\n                        \"popular\": [\n                            \"sepa\",\n                            \"bizum\",\n                            \"cards\",\n                            \"paypal\"\n                        ],\n                        \"local\": [\n                            \"bizum\"\n                        ]\n                    }\n                },\n                \"demographics\": {\n                    \"population\": 47351567,\n                    \"capital_population\": 3233527,\n                    \"urbanization\": 80.3,\n                    \"median_age\": 45.3,\n                    \"languages\": {\n                        \"official\": [\n                            \"es\"\n                        ],\n                        \"business\": [\n                            \"es\",\n                            \"en\"\n                        ]\n                    }\n                },\n                \"geography\": {\n                    \"neighbors\": [\n                        \"PT\",\n                        \"FR\",\n                        \"AD\",\n                        \"GI\"\n                    ],\n                    \"has_coast\": true,\n                    \"climate_zone\": \"Mediterranean\",\n                    \"timezone\": {\n                        \"winter\": \"UTC+1\",\n                        \"summer\": \"UTC+2\",\n                        \"dst_start\": \"last Sunday March\",\n                        \"dst_end\": \"last Sunday October\"\n                    },\n                    \"coordinates\": {\n                        \"latitude\": 40.4168,\n                        \"longitude\": -3.7038\n                    }\n                },\n                \"holidays\": {\n                    \"national_fixed\": [\n                        {\n                            \"date\": \"01-01\",\n                            \"name\": \"Año Nuevo\"\n                        },\n                        {\n                            \"date\": \"05-01\",\n                            \"name\": \"Día del Trabajo\"\n                        },\n                        {\n                            \"date\": \"10-12\",\n                            \"name\": \"Día de la Hispanidad\"\n                        },\n                        {\n                            \"date\": \"12-25\",\n                            \"name\": \"Navidad\"\n                        }\n                    ],\n                    \"national_floating\": [\n                        {\n                            \"name\": \"Viernes Santo\",\n                            \"calc\": \"easter-2\"\n                        },\n                        {\n                            \"name\": \"Lunes de Pascua\",\n                            \"calc\": \"easter+1\"\n                        }\n                    ],\n                    \"regional_specific\": {\n                        \"AN\": [\n                            {\n                                \"date\": \"02-28\",\n                                \"name\": \"Día de Andalucía\"\n                            }\n                        ],\n                        \"CT\": [\n                            {\n                                \"date\": \"09-11\",\n                                \"name\": \"Día de Cataluña\"\n                            }\n                        ],\n                        \"MD\": [\n                            {\n                                \"date\": \"05-02\",\n                                \"name\": \"Día de la Comunidad de Madrid\"\n                            }\n                        ]\n                    }\n                },\n                \"document_validation\": {\n                    \"tax_number\": {\n                        \"format\": \"^[A-Z0-9]{1}[0-9]{7}[A-Z]$\",\n                        \"example\": \"A1234567B\"\n                    },\n                    \"vat_id\": {\n                        \"format\": \"^ES[A-Z0-9]{1}[0-9]{7}[A-Z]$\",\n                        \"example\": \"ESA1234567B\"\n                    },\n                    \"id_card\": {\n                        \"format\": \"^[0-9]{8}[A-Z]$\",\n                        \"example\": \"12345678Z\",\n                        \"valid_years\": 10\n                    },\n                    \"passport\": {\n                        \"format\": \"^[A-Z0-9]{9}$\",\n                        \"example\": \"X12345678\",\n                        \"valid_years\": 10\n                    }\n                },\n                \"ecommerce\": {\n                    \"returns_period\": 14,\n                    \"cancellation_period\": 14,\n                    \"required_legal_texts\": [\n                        \"imprint\",\n                        \"privacy_policy\",\n                        \"terms_conditions\",\n                        \"cancellation_policy\",\n                        \"shipping_info\"\n                    ],\n                    \"price_display\": {\n                        \"must_include_vat\": true,\n                        \"shipping_info_required\": true,\n                        \"basic_price_required\": true\n                    },\n                    \"payment_deadline\": {\n                        \"b2c\": 14,\n                        \"b2b\": 30\n                    }\n                },\n                \"important_contacts\": {\n                    \"emergency\": {\n                        \"general_emergency\": \"112\",\n                        \"police\": \"091\",\n                        \"fire_brigade\": \"080\",\n                        \"ambulance\": \"061\",\n                        \"poison_control\": \"+34 915 620 420\",\n                        \"maritime_emergency\": \"+34 900 202 202\",\n                        \"mountain_rescue\": \"112\",\n                        \"gas_emergency\": \"+34 900 924 622\",\n                        \"power_outage\": \"+34 900 500 049\"\n                    },\n                    \"health\": {\n                        \"medical_on_call\": \"061\",\n                        \"pharmacy_emergency\": \"N/A\",\n                        \"mental_health_crisis\": \"+34 917 007 079\",\n                        \"drug_addiction\": \"+34 900 161 515\",\n                        \"aids_counseling\": \"+34 915 912 445\",\n                        \"cancer_information\": \"+34 800 003 003\"\n                    },\n                    \"government\": {\n                        \"tax_office_general\": \"+34 915 548 700\",\n                        \"customs_info\": \"+34 915 506 400\",\n                        \"federal_police\": \"+34 900 202 202\",\n                        \"pension_service\": \"+34 901 166 565\",\n                        \"employment_agency\": \"+34 900 801 137\",\n                        \"social_security\": \"+34 901 502 050\",\n                        \"immigration_office\": \"+34 902 008 210\"\n                    },\n                    \"consumer\": {\n                        \"consumer_protection\": \"+34 915 326 320\",\n                        \"data_protection\": \"dpd@agpd.es\",\n                        \"banking_supervision\": \"+34 913 388 830\",\n                        \"energy_advice\": \"+34 900 648 804\",\n                        \"travel_security\": \"+34 915 205 948\",\n                        \"food_safety\": \"+34 913 224 000\"\n                    },\n                    \"assistance\": {\n                        \"roadside_assistance\": {\n                            \"mapfre\": \"+34 918 366 160\",\n                            \"axa\": \"+34 902 404 084\"\n                        },\n                        \"missing_persons\": {\n                            \"hotline\": \"+34 116 000\",\n                            \"children_emergency\": \"+34 116 111\"\n                        },\n                        \"violence\": {\n                            \"domestic_violence\": \"+34 016\",\n                            \"child_protection\": \"+34 116 111\"\n                        }\n                    },\n                    \"fraud_prevention\": {\n                        \"anti_fraud\": \"+34 902 007 290\",\n                        \"credit_card_blocking\": \"+34 900 111 000\",\n                        \"cyber_crime\": \"+34 915 822 640\",\n                        \"identity_theft\": \"+34 900 202 202\"\n                    },\n                    \"transportation\": {\n                        \"renfe\": \"+34 912 320 320\",\n                        \"iberia\": \"+34 901 111 500\",\n                        \"airport_barcelona\": \"+34 913 211 000\",\n                        \"airport_madrid\": \"+34 913 936 000\",\n                        \"public_transport_madrid\": \"+34 915 214 260\"\n                    },\n                    \"utilities\": {\n                        \"telefonica_support\": \"+34 900 104 709\",\n                        \"vodafone_support\": \"+34 123\",\n                        \"orange_support\": \"+34 1470\"\n                    }\n                },\n                \"iseumember\": true\n            }\n        },\n        \"provider\": {\n            \"as\": \"AS8708 RCS & RDS\",\n            \"asname\": \"RCS-RDS\",\n            \"isp\": \"RCS & RDS\",\n            \"org\": \"RCS & RDS Residential\"\n        },\n        \"status\": \"success\",\n        \"language\": {\n            \"by_browser\": false,\n            \"by_country\": \"es\"\n        },\n        \"locale\": {\n            \"by_browser\": false\n        },\n        \"country_details\": {\n            \"additional_data\": \"Extended country details loaded successfully\"\n        }\n    },\n    \"processing_time\": \"40.12ms\",\n    \"weather\": {\n        \"status\": \"success\",\n        \"location\": {\n            \"name\": \"Madrid\",\n            \"region\": \"Madrid\",\n            \"country\": \"Spain\",\n            \"lat\": 40.4,\n            \"lon\": -3.683,\n            \"timezone\": \"Europe/Madrid\",\n            \"localtime\": \"2026-04-07 23:59\"\n        },\n        \"current\": {\n            \"last_updated\": \"2026-04-07 23:45\",\n            \"temp_c\": 14.4,\n            \"temp_f\": 57.9,\n            \"condition\": {\n                \"text\": \"Partly cloudy\",\n                \"icon\": \"02\",\n                \"icon_url\": \"https://api.paperoffice.ai/latest/ip2location/weathericon_get?condition_code=1003\",\n                \"code\": 1003\n            },\n            \"wind_mph\": 13.6,\n            \"wind_kph\": 22,\n            \"wind_degree\": 281,\n            \"wind_dir\": \"W\",\n            \"pressure_mb\": 1019,\n            \"pressure_in\": 30.09,\n            \"precip_mm\": 1.87,\n            \"precip_in\": 0.07,\n            \"humidity\": 82,\n            \"cloud\": 50,\n            \"feelslike_c\": 12.8,\n            \"feelslike_f\": 55,\n            \"vis_km\": 10,\n            \"vis_miles\": 6,\n            \"uv\": 0,\n            \"gust_mph\": 17.4,\n            \"gust_kph\": 28\n        },\n        \"precipitation\": {\n            \"rain_hours\": 96,\n            \"total_mm\": 15.3,\n            \"max_probability\": 98,\n            \"need_umbrella\": true\n        },\n        \"air_quality\": {\n            \"co\": 134.85,\n            \"no2\": 16.95,\n            \"o3\": 62,\n            \"so2\": 3.15,\n            \"pm2_5\": 15.35,\n            \"pm10\": 34.65,\n            \"us_epa_index\": 1,\n            \"gb_defra_index\": 2\n        },\n        \"forecast\": [\n            {\n                \"date\": \"2026-04-07\",\n                \"date_epoch\": 1775520000,\n                \"day\": {\n                    \"maxtemp_c\": 22.7,\n                    \"maxtemp_f\": 72.9,\n                    \"mintemp_c\": 12.2,\n                    \"mintemp_f\": 53.9,\n                    \"avgtemp_c\": 16.8,\n                    \"avgtemp_f\": 62.2,\n                    \"maxwind_mph\": 17.7,\n                    \"maxwind_kph\": 28.4,\n                    \"totalprecip_mm\": 6.22,\n                    \"totalprecip_in\": 0.24,\n                    \"totalsnow_cm\": 0,\n                    \"avgvis_km\": 9.7,\n                    \"avgvis_miles\": 6,\n                    \"avghumidity\": 54,\n                    \"condition\": {\n                        \"text\": \"Moderate rain\",\n                        \"icon\": \"22\",\n                        \"icon_url\": \"https://api.paperoffice.ai/latest/ip2location/weathericon_get?condition_code=1189\",\n                        \"code\": 1189\n                    },\n                    \"uv\": 1,\n                    \"daily_chance_of_rain\": 98,\n                    \"daily_chance_of_snow\": 0\n                },\n                \"astro\": {\n                    \"sunrise\": \"07:49 AM\",\n                    \"sunset\": \"08:45 PM\",\n                    \"moonrise\": \"01:38 AM\",\n                    \"moonset\": \"10:23 AM\",\n                    \"moon_phase\": \"Waning Gibbous\",\n                    \"moon_illumination\": 79,\n                    \"is_moon_up\": 0,\n                    \"is_sun_up\": 0\n                }\n            },\n            {\n                \"date\": \"2026-04-08\",\n                \"date_epoch\": 1775606400,\n                \"day\": {\n                    \"maxtemp_c\": 20.4,\n                    \"maxtemp_f\": 68.7,\n                    \"mintemp_c\": 11.6,\n                    \"mintemp_f\": 52.9,\n                    \"avgtemp_c\": 14.6,\n                    \"avgtemp_f\": 58.2,\n                    \"maxwind_mph\": 14.3,\n                    \"maxwind_kph\": 23,\n                    \"totalprecip_mm\": 0.98,\n                    \"totalprecip_in\": 0.04,\n                    \"totalsnow_cm\": 0,\n                    \"avgvis_km\": 9.8,\n                    \"avgvis_miles\": 6,\n                    \"avghumidity\": 68,\n                    \"condition\": {\n                        \"text\": \"Patchy rain nearby\",\n                        \"icon\": \"06\",\n                        \"icon_url\": \"https://api.paperoffice.ai/latest/ip2location/weathericon_get?condition_code=1063\",\n                        \"code\": 1063\n                    },\n                    \"uv\": 1.1,\n                    \"daily_chance_of_rain\": 82,\n                    \"daily_chance_of_snow\": 0\n                },\n                \"astro\": {\n                    \"sunrise\": \"07:48 AM\",\n                    \"sunset\": \"08:46 PM\",\n                    \"moonrise\": \"02:34 AM\",\n                    \"moonset\": \"11:12 AM\",\n                    \"moon_phase\": \"Waning Gibbous\",\n                    \"moon_illumination\": 70,\n                    \"is_moon_up\": 0,\n                    \"is_sun_up\": 0\n                }\n            },\n            {\n                \"date\": \"2026-04-09\",\n                \"date_epoch\": 1775692800,\n                \"day\": {\n                    \"maxtemp_c\": 26.5,\n                    \"maxtemp_f\": 79.7,\n                    \"mintemp_c\": 10.2,\n                    \"mintemp_f\": 50.4,\n                    \"avgtemp_c\": 17.5,\n                    \"avgtemp_f\": 63.5,\n                    \"maxwind_mph\": 16.6,\n                    \"maxwind_kph\": 26.6,\n                    \"totalprecip_mm\": 0,\n                    \"totalprecip_in\": 0,\n                    \"totalsnow_cm\": 0,\n                    \"avgvis_km\": 10,\n                    \"avgvis_miles\": 6,\n                    \"avghumidity\": 48,\n                    \"condition\": {\n                        \"text\": \"Sunny\",\n                        \"icon\": \"01\",\n                        \"icon_url\": \"https://api.paperoffice.ai/latest/ip2location/weathericon_get?condition_code=1000\",\n                        \"code\": 1000\n                    },\n                    \"uv\": 1.4,\n                    \"daily_chance_of_rain\": 0,\n                    \"daily_chance_of_snow\": 0\n                },\n                \"astro\": {\n                    \"sunrise\": \"07:46 AM\",\n                    \"sunset\": \"08:47 PM\",\n                    \"moonrise\": \"03:23 AM\",\n                    \"moonset\": \"12:08 PM\",\n                    \"moon_phase\": \"Waning Gibbous\",\n                    \"moon_illumination\": 61,\n                    \"is_moon_up\": 0,\n                    \"is_sun_up\": 0\n                }\n            },\n            {\n                \"date\": \"2026-04-10\",\n                \"date_epoch\": 1775779200,\n                \"day\": {\n                    \"maxtemp_c\": 25.7,\n                    \"maxtemp_f\": 78.3,\n                    \"mintemp_c\": 13.5,\n                    \"mintemp_f\": 56.4,\n                    \"avgtemp_c\": 19.2,\n                    \"avgtemp_f\": 66.5,\n                    \"maxwind_mph\": 12.3,\n                    \"maxwind_kph\": 19.8,\n                    \"totalprecip_mm\": 0,\n                    \"totalprecip_in\": 0,\n                    \"totalsnow_cm\": 0,\n                    \"avgvis_km\": 10,\n                    \"avgvis_miles\": 6,\n                    \"avghumidity\": 34,\n                    \"condition\": {\n                        \"text\": \"Sunny\",\n                        \"icon\": \"01\",\n                        \"icon_url\": \"https://api.paperoffice.ai/latest/ip2location/weathericon_get?condition_code=1000\",\n                        \"code\": 1000\n                    },\n                    \"uv\": 1.3,\n                    \"daily_chance_of_rain\": 0,\n                    \"daily_chance_of_snow\": 0\n                },\n                \"astro\": {\n                    \"sunrise\": \"07:45 AM\",\n                    \"sunset\": \"08:48 PM\",\n                    \"moonrise\": \"04:05 AM\",\n                    \"moonset\": \"01:10 PM\",\n                    \"moon_phase\": \"Last Quarter\",\n                    \"moon_illumination\": 52,\n                    \"is_moon_up\": 0,\n                    \"is_sun_up\": 0\n                }\n            },\n            {\n                \"date\": \"2026-04-11\",\n                \"date_epoch\": 1775865600,\n                \"day\": {\n                    \"maxtemp_c\": 17,\n                    \"maxtemp_f\": 62.6,\n                    \"mintemp_c\": 9.6,\n                    \"mintemp_f\": 49.3,\n                    \"avgtemp_c\": 14.5,\n                    \"avgtemp_f\": 58,\n                    \"maxwind_mph\": 17.7,\n                    \"maxwind_kph\": 28.4,\n                    \"totalprecip_mm\": 5.55,\n                    \"totalprecip_in\": 0.22,\n                    \"totalsnow_cm\": 0,\n                    \"avgvis_km\": 8.2,\n                    \"avgvis_miles\": 5,\n                    \"avghumidity\": 65,\n                    \"condition\": {\n                        \"text\": \"Moderate rain\",\n                        \"icon\": \"22\",\n                        \"icon_url\": \"https://api.paperoffice.ai/latest/ip2location/weathericon_get?condition_code=1189\",\n                        \"code\": 1189\n                    },\n                    \"uv\": 0.5,\n                    \"daily_chance_of_rain\": 87,\n                    \"daily_chance_of_snow\": 0\n                },\n                \"astro\": {\n                    \"sunrise\": \"07:43 AM\",\n                    \"sunset\": \"08:49 PM\",\n                    \"moonrise\": \"04:40 AM\",\n                    \"moonset\": \"02:15 PM\",\n                    \"moon_phase\": \"Waning Crescent\",\n                    \"moon_illumination\": 42,\n                    \"is_moon_up\": 0,\n                    \"is_sun_up\": 0\n                }\n            },\n            {\n                \"date\": \"2026-04-12\",\n                \"date_epoch\": 1775952000,\n                \"day\": {\n                    \"maxtemp_c\": 14.3,\n                    \"maxtemp_f\": 57.8,\n                    \"mintemp_c\": 6.1,\n                    \"mintemp_f\": 43,\n                    \"avgtemp_c\": 8.6,\n                    \"avgtemp_f\": 47.4,\n                    \"maxwind_mph\": 17,\n                    \"maxwind_kph\": 27.4,\n                    \"totalprecip_mm\": 2.55,\n                    \"totalprecip_in\": 0.1,\n                    \"totalsnow_cm\": 0,\n                    \"avgvis_km\": 8.3,\n                    \"avgvis_miles\": 5,\n                    \"avghumidity\": 64,\n                    \"condition\": {\n                        \"text\": \"Patchy rain nearby\",\n                        \"icon\": \"06\",\n                        \"icon_url\": \"https://api.paperoffice.ai/latest/ip2location/weathericon_get?condition_code=1063\",\n                        \"code\": 1063\n                    },\n                    \"uv\": 1.2,\n                    \"daily_chance_of_rain\": 80,\n                    \"daily_chance_of_snow\": 0\n                },\n                \"astro\": {\n                    \"sunrise\": \"07:41 AM\",\n                    \"sunset\": \"08:50 PM\",\n                    \"moonrise\": \"05:10 AM\",\n                    \"moonset\": \"03:22 PM\",\n                    \"moon_phase\": \"Waning Crescent\",\n                    \"moon_illumination\": 33,\n                    \"is_moon_up\": 0,\n                    \"is_sun_up\": 0\n                }\n            },\n            {\n                \"date\": \"2026-04-13\",\n                \"date_epoch\": 1776038400,\n                \"day\": {\n                    \"maxtemp_c\": 17.2,\n                    \"maxtemp_f\": 63,\n                    \"mintemp_c\": 3.7,\n                    \"mintemp_f\": 38.6,\n                    \"avgtemp_c\": 10.2,\n                    \"avgtemp_f\": 50.4,\n                    \"maxwind_mph\": 6.3,\n                    \"maxwind_kph\": 10.1,\n                    \"totalprecip_mm\": 0,\n                    \"totalprecip_in\": 0,\n                    \"totalsnow_cm\": 0,\n                    \"avgvis_km\": 10,\n                    \"avgvis_miles\": 6,\n                    \"avghumidity\": 42,\n                    \"condition\": {\n                        \"text\": \"Sunny\",\n                        \"icon\": \"01\",\n                        \"icon_url\": \"https://api.paperoffice.ai/latest/ip2location/weathericon_get?condition_code=1000\",\n                        \"code\": 1000\n                    },\n                    \"uv\": 4,\n                    \"daily_chance_of_rain\": 0,\n                    \"daily_chance_of_snow\": 0\n                },\n                \"astro\": {\n                    \"sunrise\": \"07:40 AM\",\n                    \"sunset\": \"08:52 PM\",\n                    \"moonrise\": \"05:36 AM\",\n                    \"moonset\": \"04:30 PM\",\n                    \"moon_phase\": \"Waning Crescent\",\n                    \"moon_illumination\": 23,\n                    \"is_moon_up\": 0,\n                    \"is_sun_up\": 0\n                }\n            }\n        ]\n    }\n}"}]},{"name":"List weather icons","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/ip2location/weathericon_get","host":["{{base_url}}"],"path":["ip2location","weathericon_get"]},"description":"Weather Icons Get weather icon URLs. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | icon_code | string | Yes | Weather icon code | Response: Icon URL\n\n---\n**Tool-ID:** `po_weather_icons` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_weather_icons`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"condition_code","type":"text","description":"*(optional)* | Query parameter: condition_code | Type: string","value":"example-value"},{"key":"size","type":"text","description":"*(optional)* | Query parameter: size | Type: string","value":"example-value"},{"key":"is_day","type":"text","description":"*(optional)* | Query parameter: is_day | Type: string","value":"7"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/ip2location/weathericon_get","host":["{{base_url}}"],"path":["ip2location","weathericon_get"]},"description":"Weather Icons Get weather icon URLs. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | icon_code | string | Yes | Weather icon code | Response: Icon URL\n\n---\n**Tool-ID:** `po_weather_icons` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_weather_icons`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"condition_code","type":"text","description":"*(optional)* | Query parameter: condition_code | Type: string","value":"example-value"},{"key":"size","type":"text","description":"*(optional)* | Query parameter: size | Type: string","value":"example-value"},{"key":"is_day","type":"text","description":"*(optional)* | Query parameter: is_day | Type: string","value":"7"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"icons\": [],\n    \"processing_time\": \"example\"\n}"}]}]},{"name":"🗺️ Map Tiles","description":"# Map Tiles\n\nStatic map tile generation. Create map images with markers, custom styles, and zoom levels for embedding in documents and reports.","item":[{"name":"Get map tile","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/maptiles/tiles/get/{z}/{x}/{y}.pbf","host":["{{base_url}}"],"path":["maptiles","tiles","get","{z}","{x}","{y}.pbf"],"query":[{"key":"lat","value":"52.5200","description":"*(optional)* | Breitengrad (Latitude). | Type: number","disabled":true},{"key":"lon","value":"13.4050","description":"*(optional)* | Laengengrad (Longitude). | Type: number","disabled":true},{"key":"ip","value":"8.8.8.8","description":"*(optional)* | IP address for automatic location determination (Alternative to lat/lon). | Type: string","disabled":true},{"key":"zoom","value":"12","description":"*(optional)* | Zoom-level the Karte (1-18). | Type: integer","disabled":true},{"key":"width","value":"280","description":"*(optional)* | Breite the images in Pixeln. | Type: integer","disabled":true},{"key":"height","value":"200","description":"*(optional)* | Hoehe the images in Pixeln. | Type: integer","disabled":true},{"key":"marker","value":"1","description":"*(optional)* | Standort-Marker display (1) or not (0). | Type: integer | Allowed: 0, 1","disabled":true}]},"description":"Get a vector map tile. Path parameters: - {z} - Zoom level 0-14, higher = more detail - {x} - Tile X coordinate - {y} - Tile Y coordinate Returns: Mapbox Vector Tile .pbf Example: Zoom 14, Berlin area → /tiles/14/8529/5458.pbf\n\n---\n**Tool-ID:** `po_map_tiles_get_map_tile` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_map_tiles_get_map_tile`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/maptiles/tiles/get/{z}/{x}/{y}.pbf","host":["{{base_url}}"],"path":["maptiles","tiles","get","{z}","{x}","{y}.pbf"],"query":[{"key":"lat","value":"52.5200","description":"*(optional)* | Breitengrad (Latitude). | Type: number","disabled":true},{"key":"lon","value":"13.4050","description":"*(optional)* | Laengengrad (Longitude). | Type: number","disabled":true},{"key":"ip","value":"8.8.8.8","description":"*(optional)* | IP address for automatic location determination (Alternative to lat/lon). | Type: string","disabled":true},{"key":"zoom","value":"12","description":"*(optional)* | Zoom-level the Karte (1-18). | Type: integer","disabled":true},{"key":"width","value":"280","description":"*(optional)* | Breite the images in Pixeln. | Type: integer","disabled":true},{"key":"height","value":"200","description":"*(optional)* | Hoehe the images in Pixeln. | Type: integer","disabled":true},{"key":"marker","value":"1","description":"*(optional)* | Standort-Marker display (1) or not (0). | Type: integer | Allowed: 0, 1","disabled":true}]},"description":"Get a vector map tile. Path parameters: - {z} - Zoom level 0-14, higher = more detail - {x} - Tile X coordinate - {y} - Tile Y coordinate Returns: Mapbox Vector Tile .pbf Example: Zoom 14, Berlin area → /tiles/14/8529/5458.pbf\n\n---\n**Tool-ID:** `po_map_tiles_get_map_tile` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_map_tiles_get_map_tile`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"processing_time\": \"example\",\n    \"content_type\": \"application/pdf\",\n    \"body\": \"example\",\n    \"status\": \"success\"\n}"}]},{"name":"Get static map by coordinates","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/maptiles/staticmap","host":["{{base_url}}"],"path":["maptiles","staticmap"]},"description":"Generate a static map image from coordinates. Returns: PNG image or JSON Parameters: - lat/lon - Coordinates - zoom - 1-16 default: 12 - width/height - Image size - marker - Show red marker 0/1 - format - image, json, base64 Use Cases: - Embed maps in emails - Location previews\n\n---\n**Tool-ID:** `po_map_tiles_static_map_coordinates` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_map_tiles_static_map_coordinates`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"lat","type":"text","description":"*(optional)* | Latitude (alias: latitude) | Type: number","value":"52.5200"},{"key":"lon","type":"text","description":"*(optional)* | Longitude (alias: longitude) | Type: number","value":"13.4050"},{"key":"latitude","type":"text","description":"*(optional)* | Alias for lat | Type: number","value":"52.5200"},{"key":"longitude","type":"text","description":"*(optional)* | Alias for lon | Type: number","value":"13.4050"},{"key":"zoom","type":"text","description":"*(optional)* | Zoom level (1-16, default: 12) | Type: number | Min: 1 | Max: 16","value":"1"},{"key":"width","type":"text","description":"*(optional)* | Image width in pixels (default: 400) | Type: number | Min: 100 | Max: 800","value":"100"},{"key":"height","type":"text","description":"*(optional)* | Image height in pixels (default: 150) | Type: number | Min: 50 | Max: 600","value":"50"},{"key":"marker","type":"text","description":"*(optional)* | Show marker: 0 (no) or 1 (yes, default) | Type: string","value":"example-value"},{"key":"format","type":"text","description":"*(optional)* | Output format (default: image) | Type: string | Allowed: image, png, json, base64","value":"image"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/maptiles/staticmap","host":["{{base_url}}"],"path":["maptiles","staticmap"]},"description":"Generate a static map image from coordinates. Returns: PNG image or JSON Parameters: - lat/lon - Coordinates - zoom - 1-16 default: 12 - width/height - Image size - marker - Show red marker 0/1 - format - image, json, base64 Use Cases: - Embed maps in emails - Location previews\n\n---\n**Tool-ID:** `po_map_tiles_static_map_coordinates` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_map_tiles_static_map_coordinates`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"lat","type":"text","description":"*(optional)* | Latitude (alias: latitude) | Type: number","value":"52.5200"},{"key":"lon","type":"text","description":"*(optional)* | Longitude (alias: longitude) | Type: number","value":"13.4050"},{"key":"latitude","type":"text","description":"*(optional)* | Alias for lat | Type: number","value":"52.5200"},{"key":"longitude","type":"text","description":"*(optional)* | Alias for lon | Type: number","value":"13.4050"},{"key":"zoom","type":"text","description":"*(optional)* | Zoom level (1-16, default: 12) | Type: number | Min: 1 | Max: 16","value":"1"},{"key":"width","type":"text","description":"*(optional)* | Image width in pixels (default: 400) | Type: number | Min: 100 | Max: 800","value":"100"},{"key":"height","type":"text","description":"*(optional)* | Image height in pixels (default: 150) | Type: number | Min: 50 | Max: 600","value":"50"},{"key":"marker","type":"text","description":"*(optional)* | Show marker: 0 (no) or 1 (yes, default) | Type: string","value":"example-value"},{"key":"format","type":"text","description":"*(optional)* | Output format (default: image) | Type: string | Allowed: image, png, json, base64","value":"image"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"processing_time\": \"example\",\n    \"content_type\": \"application/pdf\",\n    \"image_url\": \"https://example.com/resource\",\n    \"status\": \"success\"\n}"}]},{"name":"Get static map by IP address","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/maptiles/staticmap","host":["{{base_url}}"],"path":["maptiles","staticmap"]},"description":"Generate a static map from an IP address. Combines IP2Location + Static Map Returns: - Map image or JSON with location data - City, region, country info Perfect for: - Security emails - Login location display\n\n---\n**Tool-ID:** `po_map_tiles_static_map_ip_address` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_map_tiles_static_map_ip_address`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"ip","type":"text","description":"*(optional)* | IP address to locate | Type: string","value":"8.8.8.8"},{"key":"zoom","type":"text","description":"*(optional)* | Zoom level | Type: number","value":"1"},{"key":"width","type":"text","description":"*(optional)* | Image width | Type: number","value":"1"},{"key":"height","type":"text","description":"*(optional)* | Image height | Type: number","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/maptiles/staticmap","host":["{{base_url}}"],"path":["maptiles","staticmap"]},"description":"Generate a static map from an IP address. Combines IP2Location + Static Map Returns: - Map image or JSON with location data - City, region, country info Perfect for: - Security emails - Login location display\n\n---\n**Tool-ID:** `po_map_tiles_static_map_ip_address` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_map_tiles_static_map_ip_address`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"ip","type":"text","description":"*(optional)* | IP address to locate | Type: string","value":"8.8.8.8"},{"key":"zoom","type":"text","description":"*(optional)* | Zoom level | Type: number","value":"1"},{"key":"width","type":"text","description":"*(optional)* | Image width | Type: number","value":"1"},{"key":"height","type":"text","description":"*(optional)* | Image height | Type: number","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"processing_time\": \"example\",\n    \"content_type\": \"application/pdf\",\n    \"image_url\": \"https://example.com/resource\",\n    \"status\": \"success\"\n}"}]}]},{"name":"💱 Currency Exchange","description":"# Currency Exchange\n\nReal-time currency exchange rates and conversion. Convert between 150+ currencies with up-to-date market rates.","item":[{"name":"Convert currency","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/currency_exchange/get_rates","host":["{{base_url}}"],"path":["currency_exchange","get_rates"]},"description":"Convert Currency Convert an amount from one currency to another. Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | from | string | ✅ Yes | Source currency code EUR, USD, GBP, etc. | | to | string | ✅ Yes | Target currency code | | amount .\n\n---\n**Tool-ID:** `po_currency_convert_currency` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_currency_convert_currency`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"from","type":"text","description":"*(optional)* | Source currency code (ISO 4217) | Type: string","value":"user@example.com"},{"key":"to","type":"text","description":"*(optional)* | Target currency code (ISO 4217) | Type: string","value":"user@example.com"},{"key":"amount","type":"text","description":"*(optional)* | Amount to convert (default: 1) | Type: string","value":"10"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/currency_exchange/get_rates","host":["{{base_url}}"],"path":["currency_exchange","get_rates"]},"description":"Convert Currency Convert an amount from one currency to another. Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | from | string | ✅ Yes | Source currency code EUR, USD, GBP, etc. | | to | string | ✅ Yes | Target currency code | | amount .\n\n---\n**Tool-ID:** `po_currency_convert_currency` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_currency_convert_currency`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"from","type":"text","description":"*(optional)* | Source currency code (ISO 4217) | Type: string","value":"user@example.com"},{"key":"to","type":"text","description":"*(optional)* | Target currency code (ISO 4217) | Type: string","value":"user@example.com"},{"key":"amount","type":"text","description":"*(optional)* | Amount to convert (default: 1) | Type: string","value":"10"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"amount\": 1,\n    \"base\": \"EUR\",\n    \"currencies_count\": 172,\n    \"processing_time\": \"45.32ms\",\n    \"rates\": {\n        \"AED\": 4.250462,\n        \"AFN\": 74.070929,\n        \"ALL\": 96.3481,\n        \"AMD\": 436.515853,\n        \"ANG\": 2.071821,\n        \"AOA\": 1061.293403,\n        \"ARS\": 1600.052522,\n        \"AUD\": 1.67369,\n        \"AWG\": 2.084641,\n        \"AZN\": 1.967762,\n        \"BAM\": 1.974336,\n        \"BBD\": 2.32986,\n        \"BDT\": 141.935344,\n        \"BGN\": 1.978216,\n        \"BHD\": 0.436987,\n        \"BIF\": 3430.292908,\n        \"BMD\": 1.157389,\n        \"BND\": 1.493451,\n        \"BOB\": 7.993361,\n        \"BRL\": 6.011876,\n        \"BSD\": 1.156776,\n        \"BTC\": 1.7e-5,\n        \"BTN\": 110.079825,\n        \"BWP\": 15.957976,\n        \"BYN\": 3.440065,\n        \"BYR\": 22683.448379,\n        \"BZD\": 2.326488,\n        \"CAD\": 1.608943,\n        \"CDF\": 2644.526446,\n        \"CHF\": 0.92241,\n        \"CLF\": 0.02716,\n        \"CLP\": 1072.383008,\n        \"CNY\": 7.970014,\n        \"CNH\": 7.969425,\n        \"COP\": 4263.289526,\n        \"CRC\": 537.873354,\n        \"CUC\": 1.157366,\n        \"CUP\": 30.668948,\n        \"CVE\": 110.963501,\n        \"CZK\": 24.546694,\n        \"DJF\": 205.678414,\n        \"DKK\": 7.472293,\n        \"DOP\": 69.554163,\n        \"DZD\": 154.209262,\n        \"EGP\": 63.165184,\n        \"ERN\": 17.36065,\n        \"ETB\": 181.766685,\n        \"EUR\": 1,\n        \"FJD\": 2.612529,\n        \"FKP\": 0.877319,\n        \"GBP\": 0.873024,\n        \"GEL\": 3.112729,\n        \"GGP\": 0.877293,\n        \"GHS\": 12.730783,\n        \"GIP\": 0.877293,\n        \"GMD\": 85.642871,\n        \"GNF\": 10155.777594,\n        \"GTQ\": 8.851046,\n        \"GYD\": 242.093486,\n        \"HKD\": 9.071701,\n        \"HNL\": 30.785127,\n        \"HRK\": 7.537035,\n        \"HTG\": 151.825382,\n        \"HUF\": 384.121633,\n        \"IDR\": 19670.97046,\n        \"ILS\": 3.63372,\n        \"IMP\": 0.877301,\n        \"INR\": 108.483763,\n        \"IQD\": 1516.163428,\n        \"IRR\": 1522963.015607,\n        \"ISK\": 143.408005,\n        \"JEP\": 0.87731,\n        \"JMD\": 183.017286,\n        \"JOD\": 0.820524,\n        \"JPY\": 183.802888,\n        \"KES\": 150.451414,\n        \"KGS\": 101.208215,\n        \"KHR\": 4640.894625,\n        \"KMF\": 495.929322,\n        \"KPW\": 1041.58885,\n        \"KRW\": 1743.756137,\n        \"KWD\": 0.358364,\n        \"KYD\": 0.963988,\n        \"KZT\": 551.134215,\n        \"LAK\": 25403.909189,\n        \"LBP\": 103596.785226,\n        \"LKR\": 364.931278,\n        \"LRD\": 212.576925,\n        \"LSL\": 19.755604,\n        \"LTL\": 3.417467,\n        \"LVL\": 0.700092,\n        \"LYD\": 7.412895,\n        \"MAD\": 10.812789,\n        \"MDL\": 20.486742,\n        \"MGA\": 4835.277645,\n        \"MKD\": 61.635089,\n        \"MMK\": 2429.788592,\n        \"MNT\": 4133.043654,\n        \"MOP\": 9.340538,\n        \"MRU\": 46.421107,\n        \"MUR\": 54.153807,\n        \"MVR\": 17.903858,\n        \"MWK\": 2010.282363,\n        \"MXN\": 20.704254,\n        \"MYR\": 4.672909,\n        \"MZN\": 74.014038,\n        \"NAD\": 19.756443,\n        \"NGN\": 1601.844185,\n        \"NIO\": 42.508789,\n        \"NOK\": 11.194325,\n        \"NPR\": 176.120473,\n        \"NZD\": 2.014032,\n        \"OMR\": 0.444992,\n        \"PAB\": 1.156783,\n        \"PEN\": 4.045982,\n        \"PGK\": 5.080638,\n        \"PHP\": 69.813353,\n        \"PKR\": 323.132924,\n        \"PLN\": 4.287121,\n        \"PYG\": 7493.34984,\n        \"QAR\": 4.217547,\n        \"RON\": 5.097855,\n        \"RSD\": 117.414742,\n        \"RUB\": 94.094853,\n        \"RWF\": 1689.75303,\n        \"SAR\": 4.343964,\n        \"SBD\": 9.307666,\n        \"SCR\": 17.111984,\n        \"SDG\": 695.548022,\n        \"SEK\": 10.928986,\n        \"SGD\": 1.487773,\n        \"SHP\": 0.868332,\n        \"SLE\": 28.412382,\n        \"SLL\": 24269.865145,\n        \"SOS\": 661.408866,\n        \"SRD\": 43.254526,\n        \"STD\": 23955.120632,\n        \"STN\": 25.143002,\n        \"SVC\": 10.122579,\n        \"SYP\": 127.955121,\n        \"SZL\": 19.755877,\n        \"THB\": 37.821353,\n        \"TJS\": 11.087704,\n        \"TMT\": 4.062311,\n        \"TND\": 3.391112,\n        \"TOP\": 2.786545,\n        \"TRY\": 51.486888,\n        \"TTD\": 7.859208,\n        \"TWD\": 36.928831,\n        \"TZS\": 2998.514229,\n        \"UAH\": 50.819727,\n        \"UGX\": 4354.991073,\n        \"USD\": 1.157331,\n        \"UYU\": 46.930129,\n        \"UZS\": 14114.496967,\n        \"VES\": 547.766216,\n        \"VND\": 30484.081903,\n        \"VUV\": 139.275614,\n        \"WST\": 3.204964,\n        \"XAF\": 662.180309,\n        \"XAG\": 0.015511,\n        \"XAU\": 0.000247,\n        \"XCD\": 3.127742,\n        \"XCG\": 2.084751,\n        \"XDR\": 0.822823,\n        \"XOF\": 660.279678,\n        \"XPF\": 119.332935,\n        \"YER\": 276.205693,\n        \"ZAR\": 19.54026,\n        \"ZMK\": 10417.255409,\n        \"ZMW\": 22.111591,\n        \"ZWL\": 372.65618\n    },\n    \"status\": \"success\",\n    \"timestamp\": 1775654315\n}"}]},{"name":"Get currency exchange rates","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/currency_exchange/get_rates","host":["{{base_url}}"],"path":["currency_exchange","get_rates"],"query":[{"key":"from","value":"user@example.com","description":"*(optional)* | Base currency code (ISO 4217) | Type: string","disabled":true},{"key":"amount","value":"10","description":"*(optional)* | Base amount (default: 1) | Type: string","disabled":true}]},"description":"Get Exchange Rates Get exchange rates for all 150+ currencies based on a source currency. Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | from | string | ✅ Yes | Base currency code EUR, USD, GBP, etc. | | amount | float | No | Base amount.\n\n---\n**Tool-ID:** `po_currency_get_exchange_rates` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_currency_get_exchange_rates`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/currency_exchange/get_rates","host":["{{base_url}}"],"path":["currency_exchange","get_rates"],"query":[{"key":"from","value":"user@example.com","description":"*(optional)* | Base currency code (ISO 4217) | Type: string","disabled":true},{"key":"amount","value":"10","description":"*(optional)* | Base amount (default: 1) | Type: string","disabled":true}]},"description":"Get Exchange Rates Get exchange rates for all 150+ currencies based on a source currency. Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | from | string | ✅ Yes | Base currency code EUR, USD, GBP, etc. | | amount | float | No | Base amount.\n\n---\n**Tool-ID:** `po_currency_get_exchange_rates` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_currency_get_exchange_rates`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"amount\": 1,\n    \"base\": \"EUR\",\n    \"currencies_count\": 164,\n    \"processing_time\": \"49.47ms\",\n    \"rates\": {\n        \"AED\": 4.276784,\n        \"AFN\": 72.779841,\n        \"ALL\": 95.500318,\n        \"AMD\": 426.80355,\n        \"ANG\": 2.085131,\n        \"AOA\": 1069.083303,\n        \"ARS\": 1631.796726,\n        \"AUD\": 1.626419,\n        \"AWG\": 2.096305,\n        \"AZN\": 1.993514,\n        \"BAM\": 1.956733,\n        \"BBD\": 2.337138,\n        \"BDT\": 142.61659,\n        \"BGN\": 1.944714,\n        \"BHD\": 0.437608,\n        \"BIF\": 3455.366002,\n        \"BMD\": 1.164614,\n        \"BND\": 1.486307,\n        \"BOB\": 8.018144,\n        \"BRL\": 5.862776,\n        \"BSD\": 1.160377,\n        \"BTC\": 1.5e-5,\n        \"BTN\": 110.978255,\n        \"BWP\": 15.693327,\n        \"BYN\": 3.186047,\n        \"BZD\": 2.33383,\n        \"CAD\": 1.606917,\n        \"CDF\": 2626.098716,\n        \"CHF\": 0.91055,\n        \"CLF\": 0.026501,\n        \"CLP\": 1042.965624,\n        \"CNY\": 7.9131,\n        \"CNH\": 7.906665,\n        \"COP\": 4274.65228,\n        \"CRC\": 525.150454,\n        \"CUC\": 1.164544,\n        \"CUP\": 30.861952,\n        \"CVE\": 110.316509,\n        \"CZK\": 24.291019,\n        \"DJF\": 206.634743,\n        \"DKK\": 7.47201,\n        \"DOP\": 68.392618,\n        \"DZD\": 155.085613,\n        \"EGP\": 61.636904,\n        \"ERN\": 17.468855,\n        \"ETB\": 187.074568,\n        \"EUR\": 1,\n        \"FJD\": 2.569255,\n        \"FKP\": 0.86652,\n        \"GBP\": 0.863541,\n        \"GEL\": 3.097422,\n        \"GGP\": 0.86652,\n        \"GHS\": 13.47256,\n        \"GIP\": 0.866563,\n        \"GMD\": 84.430417,\n        \"GNF\": 10174.424035,\n        \"GTQ\": 8.84822,\n        \"GYD\": 242.733042,\n        \"HKD\": 9.124866,\n        \"HNL\": 30.871415,\n        \"HTG\": 152.017769,\n        \"HUF\": 357.987707,\n        \"IDR\": 20611.824598,\n        \"ILS\": 3.366791,\n        \"IMP\": 0.86652,\n        \"INR\": 111.44854,\n        \"IQD\": 1520.100929,\n        \"IRR\": 1541218.848302,\n        \"ISK\": 144.128689,\n        \"JEP\": 0.86652,\n        \"JMD\": 183.182856,\n        \"JOD\": 0.825632,\n        \"JPY\": 185.010003,\n        \"KES\": 150.61183,\n        \"KGS\": 101.840988,\n        \"KHR\": 4652.262667,\n        \"KMF\": 494.941255,\n        \"KPW\": 1048.090589,\n        \"KRW\": 1770.567171,\n        \"KWD\": 0.360445,\n        \"KYD\": 0.967,\n        \"KZT\": 547.971337,\n        \"LAK\": 25431.399599,\n        \"LBP\": 103939.965129,\n        \"LKR\": 388.121222,\n        \"LRD\": 212.343393,\n        \"LSL\": 19.139437,\n        \"LYD\": 7.394748,\n        \"MAD\": 10.705026,\n        \"MDL\": 20.127404,\n        \"MGA\": 4875.520143,\n        \"MKD\": 61.671262,\n        \"MMK\": 2444.994845,\n        \"MNT\": 4169.124473,\n        \"MOP\": 9.365754,\n        \"MRU\": 46.370432,\n        \"MUR\": 55.176287,\n        \"MVR\": 17.931264,\n        \"MWK\": 2012.14007,\n        \"MXN\": 20.095874,\n        \"MYR\": 4.620795,\n        \"MZN\": 74.420682,\n        \"NAD\": 19.13982,\n        \"NGN\": 1598.109237,\n        \"NIO\": 42.720423,\n        \"NOK\": 10.778996,\n        \"NPR\": 177.561457,\n        \"NZD\": 1.981074,\n        \"OMR\": 0.448086,\n        \"PAB\": 1.160354,\n        \"PEN\": 3.956226,\n        \"PGK\": 5.060667,\n        \"PHP\": 71.59201,\n        \"PKR\": 323.067164,\n        \"PLN\": 4.237807,\n        \"PYG\": 7071.726035,\n        \"QAR\": 4.24255,\n        \"RON\": 5.269177,\n        \"RSD\": 117.469546,\n        \"RUB\": 82.629557,\n        \"RWF\": 1696.426012,\n        \"SAR\": 4.355695,\n        \"SBD\": 9.369435,\n        \"SCR\": 15.943445,\n        \"SDG\": 699.329415,\n        \"SEK\": 10.845454,\n        \"SGD\": 1.487427,\n        \"SHP\": 0.869476,\n        \"SLE\": 28.652463,\n        \"SOS\": 663.149408,\n        \"SRD\": 43.269154,\n        \"STN\": 24.52345,\n        \"SVC\": 10.152842,\n        \"SYP\": 128.71517,\n        \"SZL\": 19.135892,\n        \"THB\": 38.083517,\n        \"TJS\": 10.78028,\n        \"TMT\": 4.076147,\n        \"TND\": 3.396956,\n        \"TOP\": 2.804054,\n        \"TRY\": 53.227849,\n        \"TTD\": 7.87615,\n        \"TWD\": 36.630874,\n        \"TZS\": 3034.416835,\n        \"UAH\": 51.355079,\n        \"UGX\": 4394.183504,\n        \"USD\": 1.164544,\n        \"UYU\": 46.453548,\n        \"UZS\": 13921.500251,\n        \"VES\": 612.795149,\n        \"VND\": 30704.424155,\n        \"VUV\": 136.778643,\n        \"WST\": 3.173336,\n        \"XAF\": 656.276549,\n        \"XAG\": 0.014819,\n        \"XAU\": 0.000254,\n        \"XCD\": 3.147395,\n        \"XCG\": 2.091339,\n        \"XDR\": 0.81623,\n        \"XOF\": 656.3028,\n        \"XPF\": 119.330549,\n        \"YER\": 277.932082,\n        \"ZAR\": 19.040378,\n        \"ZMW\": 21.843636\n    },\n    \"status\": \"success\",\n    \"timestamp\": \"2026-05-25T05:00:12Z\"\n}"}]}]},{"name":"✅ Validation & VAT","description":"# Validation & VAT\n\nData validation utilities: VAT number verification, phone number validation, email format checks, and IBAN validation with country detection.","item":[{"name":"Validate All (Email + Phone + Website)","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/validate/all","host":["{{base_url}}"],"path":["validate","all"]},"description":"Validate All (Email + Phone + Website)\\n\\nRun all validations at once: email, phone, and website. Only provided fields are validated. Returns combined results with individual risk scores.\\n\\n--- Parameters\\n| Parameter | Type | Required | Description |\\n|-----------|------|----------|-------------|\\n| email | string | No | Email address to validate |\\n| phone | string | No | Phone number to validate |\\n| url | string | No | Website URL to validate |\n\n---\n**Tool-ID:** `po_validate_all` • **Cost:** 20 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_validate_all`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"email","type":"text","description":"*(optional)* | Email address to validate | Type: string","value":"user@example.com"},{"key":"phone","type":"text","description":"*(optional)* | Phone number to validate | Type: string","value":"+49301234567"},{"key":"url","type":"text","description":"*(optional)* | Website URL to validate | Type: string","value":"https://example.com/callback"},{"key":"website","type":"text","description":"*(optional)* | Website | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/validate/all","host":["{{base_url}}"],"path":["validate","all"]},"description":"Validate All (Email + Phone + Website)\\n\\nRun all validations at once: email, phone, and website. Only provided fields are validated. Returns combined results with individual risk scores.\\n\\n--- Parameters\\n| Parameter | Type | Required | Description |\\n|-----------|------|----------|-------------|\\n| email | string | No | Email address to validate |\\n| phone | string | No | Phone number to validate |\\n| url | string | No | Website URL to validate |\n\n---\n**Tool-ID:** `po_validate_all` • **Cost:** 20 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_validate_all`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.","body":{"mode":"formdata","formdata":[{"key":"email","type":"text","description":"*(optional)* | Email address to validate | Type: string","value":"user@example.com"},{"key":"phone","type":"text","description":"*(optional)* | Phone number to validate | Type: string","value":"+49301234567"},{"key":"url","type":"text","description":"*(optional)* | Website URL to validate | Type: string","value":"https://example.com/callback"},{"key":"website","type":"text","description":"*(optional)* | Website | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"results\": [],\n    \"all_valid\": true,\n    \"status\": {\n        \"code\": 200,\n        \"message\": \"ALL_VALID\",\n        \"success\": true\n    },\n    \"processing_time\": \"1,773,928,304,997.64ms\"\n}"}]},{"name":"Validate Email Address","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/validate/email","host":["{{base_url}}"],"path":["validate","email"]},"description":"Validate Email Address\\n\\nCheck if an email address is valid, fake, disposable, or temporary. Uses format validation, DNS/MX record checks, and the PaperOffice Fake Email Detector database.\\n\\n--- Parameters\\n| Parameter | Type | Required | Description |\\n|-----------|------|----------|-------------|\\n| email | string | Yes | Email address to validate |\n\n---\n**Tool-ID:** `po_validate_email` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_validate_email`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"email","type":"text","description":"**REQUIRED** | Email address to validate | Type: string","value":"user@example.com"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/validate/email","host":["{{base_url}}"],"path":["validate","email"]},"description":"Validate Email Address\\n\\nCheck if an email address is valid, fake, disposable, or temporary. Uses format validation, DNS/MX record checks, and the PaperOffice Fake Email Detector database.\\n\\n--- Parameters\\n| Parameter | Type | Required | Description |\\n|-----------|------|----------|-------------|\\n| email | string | Yes | Email address to validate |\n\n---\n**Tool-ID:** `po_validate_email` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_validate_email`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"email","type":"text","description":"**REQUIRED** | Email address to validate | Type: string","value":"user@example.com"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"result\": {\n        \"email\": \"test\",\n        \"valid\": false,\n        \"is_fake\": true,\n        \"risk_score\": 100,\n        \"risk_level\": \"CRITICAL\",\n        \"detection_method\": \"INVALID_FORMAT\",\n        \"recommendation\": \"REJECT\"\n    },\n    \"status\": {\n        \"code\": 200,\n        \"message\": \"EMAIL_INVALID_FORMAT\",\n        \"success\": true\n    },\n    \"processing_time\": \"1,773,928,305,151.46ms\"\n}"}]},{"name":"Validate Phone Number","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/validate/phone","host":["{{base_url}}"],"path":["validate","phone"]},"description":"Validate Phone Number\\n\\nValidate a phone number format, detect country, carrier type (mobile/landline), and check if it is a valid number.\\n\\n--- Parameters\\n| Parameter | Type | Required | Description |\\n|-----------|------|----------|-------------|\\n| phone | string | Yes | Phone number to validate (with or without country code) |\n\n---\n**Tool-ID:** `po_validate_phone` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_validate_phone`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"phone","type":"text","description":"**REQUIRED** | Phone number to validate (with or without country code, e.g. +49171123456) | Type: string","value":"+49301234567"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/validate/phone","host":["{{base_url}}"],"path":["validate","phone"]},"description":"Validate Phone Number\\n\\nValidate a phone number format, detect country, carrier type (mobile/landline), and check if it is a valid number.\\n\\n--- Parameters\\n| Parameter | Type | Required | Description |\\n|-----------|------|----------|-------------|\\n| phone | string | Yes | Phone number to validate (with or without country code) |\n\n---\n**Tool-ID:** `po_validate_phone` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_validate_phone`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"phone","type":"text","description":"**REQUIRED** | Phone number to validate (with or without country code, e.g. +49171123456) | Type: string","value":"+49301234567"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"result\": {\n        \"valid\": false,\n        \"original\": \"test\",\n        \"cleaned\": \"\",\n        \"digits_only\": \"\",\n        \"country_code\": null,\n        \"format\": null,\n        \"error\": \"TOO_SHORT\"\n    },\n    \"status\": {\n        \"code\": 200,\n        \"message\": \"PHONE_INVALID\",\n        \"success\": true\n    },\n    \"processing_time\": \"1,773,928,305,332.64ms\"\n}"}]},{"name":"Validate Website URL","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/validate/website","host":["{{base_url}}"],"path":["validate","website"]},"description":"Validate Website URL\\n\\nComprehensive website validation including DNS resolution, HTTP reachability, SSL certificate check, redirect analysis, and risk scoring.\\n\\n--- Parameters\\n| Parameter | Type | Required | Description |\\n|-----------|------|----------|-------------|\\n| url | string | Yes | Website URL to validate |\n\n---\n**Tool-ID:** `po_validate_website` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_validate_website`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"url","type":"text","description":"**REQUIRED** | Website URL to validate (e.g. https://example.com) | Type: string","value":"https://example.com/callback"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/validate/website","host":["{{base_url}}"],"path":["validate","website"]},"description":"Validate Website URL\\n\\nComprehensive website validation including DNS resolution, HTTP reachability, SSL certificate check, redirect analysis, and risk scoring.\\n\\n--- Parameters\\n| Parameter | Type | Required | Description |\\n|-----------|------|----------|-------------|\\n| url | string | Yes | Website URL to validate |\n\n---\n**Tool-ID:** `po_validate_website` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_validate_website`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"url","type":"text","description":"**REQUIRED** | Website URL to validate (e.g. https://example.com) | Type: string","value":"https://example.com/callback"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"result\": {\n        \"url\": \"test\",\n        \"valid\": false,\n        \"risk_level\": \"CRITICAL\",\n        \"recommendation\": \"REJECT\",\n        \"checks\": {\n            \"format\": {\n                \"passed\": false,\n                \"error\": \"Invalid domain format\"\n            }\n        }\n    },\n    \"status\": {\n        \"code\": 200,\n        \"message\": \"URL_INVALID_FORMAT\",\n        \"success\": true\n    },\n    \"processing_time\": \"1,773,928,305,525.51ms\"\n}"}]},{"name":"Get EU VAT Rates","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/vat/rates","host":["{{base_url}}"],"path":["vat","rates"]},"description":"Get EU VAT Rates\\n\\nReturns current VAT rates for all 27 EU member states including standard and reduced rates.\\n\\n--- Parameters\\nNo parameters required.\n\n---\n**Tool-ID:** `po_vat_rates_get` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_vat_rates_get`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/vat/rates","host":["{{base_url}}"],"path":["vat","rates"]},"description":"Get EU VAT Rates\\n\\nReturns current VAT rates for all 27 EU member states including standard and reduced rates.\\n\\n--- Parameters\\nNo parameters required.\n\n---\n**Tool-ID:** `po_vat_rates_get` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_vat_rates_get`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"count\": 27,\n    \"processing_time\": \"61.57ms\",\n    \"rates\": {\n        \"AT\": {\n            \"standard\": 20,\n            \"reduced\": 10\n        },\n        \"BE\": {\n            \"standard\": 21,\n            \"reduced\": 6\n        },\n        \"BG\": {\n            \"standard\": 20,\n            \"reduced\": 9\n        },\n        \"CY\": {\n            \"standard\": 19,\n            \"reduced\": 5\n        },\n        \"CZ\": {\n            \"standard\": 21,\n            \"reduced\": 12\n        },\n        \"DE\": {\n            \"standard\": 19,\n            \"reduced\": 7\n        },\n        \"DK\": {\n            \"standard\": 25,\n            \"reduced\": 0\n        },\n        \"EE\": {\n            \"standard\": 22,\n            \"reduced\": 9\n        },\n        \"EL\": {\n            \"standard\": 24,\n            \"reduced\": 6\n        },\n        \"ES\": {\n            \"standard\": 21,\n            \"reduced\": 10\n        },\n        \"FI\": {\n            \"standard\": 25.5,\n            \"reduced\": 10\n        },\n        \"FR\": {\n            \"standard\": 20,\n            \"reduced\": 5.5\n        },\n        \"HR\": {\n            \"standard\": 25,\n            \"reduced\": 5\n        },\n        \"HU\": {\n            \"standard\": 27,\n            \"reduced\": 5\n        },\n        \"IE\": {\n            \"standard\": 23,\n            \"reduced\": 9\n        },\n        \"IT\": {\n            \"standard\": 22,\n            \"reduced\": 5\n        },\n        \"LT\": {\n            \"standard\": 21,\n            \"reduced\": 5\n        },\n        \"LU\": {\n            \"standard\": 17,\n            \"reduced\": 8\n        },\n        \"LV\": {\n            \"standard\": 21,\n            \"reduced\": 12\n        },\n        \"MT\": {\n            \"standard\": 18,\n            \"reduced\": 5\n        },\n        \"NL\": {\n            \"standard\": 21,\n            \"reduced\": 9\n        },\n        \"PL\": {\n            \"standard\": 23,\n            \"reduced\": 8\n        },\n        \"PT\": {\n            \"standard\": 23,\n            \"reduced\": 6\n        },\n        \"RO\": {\n            \"standard\": 19,\n            \"reduced\": 5\n        },\n        \"SE\": {\n            \"standard\": 25,\n            \"reduced\": 6\n        },\n        \"SI\": {\n            \"standard\": 22,\n            \"reduced\": 9.5\n        },\n        \"SK\": {\n            \"standard\": 23,\n            \"reduced\": 10\n        }\n    },\n    \"status\": \"success\"\n}"}]},{"name":"Validate EU VAT ID","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/vat/validate","host":["{{base_url}}"],"path":["vat","validate"]},"description":"Validate EU VAT ID\\n\\nValidate a European VAT identification number against the EU VIES database. Returns company name, address, validity status, tax context (VAT rates), and optional fraud risk assessment.\\n\\n--- Parameters\\n| Parameter | Type | Required | Description |\\n|-----------|------|----------|-------------|\\n| vat_id | string | Yes | EU VAT ID (e.g. DE123456789, FR12345678901, NL123456789B01) |\\n| ip | string | No | IP for fraud cross-check |\\n| email | string | No | Email for fraud cross-check |\n\n---\n**Tool-ID:** `po_vat_validate` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_vat_validate`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"vat_id","type":"text","description":"**REQUIRED** | EU VAT identification number (e.g. DE123456789, FR12345678901) | Type: string","value":"1"},{"key":"ip","type":"text","description":"*(optional)* | IP address for fraud cross-check (optional) | Type: string","value":"8.8.8.8"},{"key":"email","type":"text","description":"*(optional)* | Email for fraud cross-check (optional) | Type: string","value":"user@example.com"},{"key":"force_recheck","type":"text","description":"*(optional)* | Force recheck | Type: boolean","value":"true"},{"key":"geocoding","type":"text","description":"*(optional)* | Geocoding | Type: string","value":"example-value"},{"key":"vat_ids","type":"text","description":"*(optional)* | Vat ids | Type: array","value":"[]"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/vat/validate","host":["{{base_url}}"],"path":["vat","validate"]},"description":"Validate EU VAT ID\\n\\nValidate a European VAT identification number against the EU VIES database. Returns company name, address, validity status, tax context (VAT rates), and optional fraud risk assessment.\\n\\n--- Parameters\\n| Parameter | Type | Required | Description |\\n|-----------|------|----------|-------------|\\n| vat_id | string | Yes | EU VAT ID (e.g. DE123456789, FR12345678901, NL123456789B01) |\\n| ip | string | No | IP for fraud cross-check |\\n| email | string | No | Email for fraud cross-check |\n\n---\n**Tool-ID:** `po_vat_validate` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_vat_validate`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"vat_id","type":"text","description":"**REQUIRED** | EU VAT identification number (e.g. DE123456789, FR12345678901) | Type: string","value":"1"},{"key":"ip","type":"text","description":"*(optional)* | IP address for fraud cross-check (optional) | Type: string","value":"8.8.8.8"},{"key":"email","type":"text","description":"*(optional)* | Email for fraud cross-check (optional) | Type: string","value":"user@example.com"},{"key":"force_recheck","type":"text","description":"*(optional)* | Force recheck | Type: boolean","value":"true"},{"key":"geocoding","type":"text","description":"*(optional)* | Geocoding | Type: string","value":"example-value"},{"key":"vat_ids","type":"text","description":"*(optional)* | Vat ids | Type: array","value":"[]"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"vat_id\": \"example\",\n    \"format_valid\": true,\n    \"error\": \"example\",\n    \"message\": \"Operation completed successfully\",\n    \"layer\": \"example\",\n    \"processing_time_ms\": 150,\n    \"processing_time\": \"example\",\n    \"count\": \"example\",\n    \"results\": \"example\"\n}"}]},{"name":"Calculate Global Tax Quote","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/vat/quote","host":["{{base_url}}"],"path":["vat","quote"]},"description":"Calculate global B2B tax quote for appointments or software without Stripe Tax. Supports EU VAT, Reverse Charge, USA states, Canadian provinces and common global VAT/GST jurisdictions.\n\n---\n**Tool-ID:** `po_tax_quote_calculate` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_tax_quote_calculate`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"buyer_country","type":"text","description":"**REQUIRED** | Type: string","value":"example-value"},{"key":"buyer_subdivision","type":"text","description":"*(optional)* | Type: string","value":"example-value"},{"key":"postal_code","type":"text","description":"*(optional)* | Type: string","value":"example-value"},{"key":"vat_id","type":"text","description":"*(optional)* | Type: string","value":"1"},{"key":"net_cents","type":"text","description":"**REQUIRED** | Type: integer","value":"1"},{"key":"currency","type":"text","description":"*(optional)* | Type: string","value":"EUR"},{"key":"product_type","type":"text","description":"*(optional)* | Type: string","value":"example-value"}]}},"response":[]}]}]},{"name":"📄 Document AI","description":"# 📄 Document AI\n\nCapture, process, and manage documents with AI. Includes intelligent document processing (IDP), OCR, PDF operations, anonymization, digital signatures, and a full headless DMS.\n\n**Sub-modules:** AI-IDP · AI-OCR · PDF AI · Document Anonymization · Headless DMS · Storage Mounts · E-Signatures · Import & Migration","item":[{"name":"📄 AI-IDP","description":"# AI-IDP (Intelligent Document Processing)\n\nAI-powered document processing: extract structured data from invoices, receipts, contracts, letters, orders, hotel bills, and handwritten documents. Supports 50+ document types with automatic field extraction.","item":[{"name":"Run whitepage scan analysis","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Scan documents for empty/whitepages and detect codes. Features: - Detect blank pages configurable threshold - Find barcodes and QR codes - Identify pages with only minimal content Use cases: - Clean up scanned documents - Automated document processing - Quality control\n\n---\n**Tool-ID:** `po_analysis_whitepage_scan` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_analysis_whitepage_scan`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | PDF or image to scan | Type: string","src":null},{"key":"whitepage_threshold","type":"text","description":"*(optional)* | Whitespace threshold 0.0-1.0, default: 0.95 | Type: string","value":"0.95"},{"key":"detect_code","type":"text","description":"*(optional)* | Detect barcodes and QR codes | Type: string","value":"true"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Scan documents for empty/whitepages and detect codes. Features: - Detect blank pages configurable threshold - Find barcodes and QR codes - Identify pages with only minimal content Use cases: - Clean up scanned documents - Automated document processing - Quality control\n\n---\n**Tool-ID:** `po_analysis_whitepage_scan` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_analysis_whitepage_scan`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | PDF or image to scan | Type: string","src":null},{"key":"whitepage_threshold","type":"text","description":"*(optional)* | Whitespace threshold 0.0-1.0, default: 0.95 | Type: string","value":"0.95"},{"key":"detect_code","type":"text","description":"*(optional)* | Detect barcodes and QR codes | Type: string","value":"true"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654258.9099_1c2a69b16f8731772ccbe81ac31a52fc\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"8728.61ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YBW3UZSGYFUA1XQm0CTHoBXGABAjFzGQkJMQQSL1pGKQFAZFUQalUWfBkfKlAIfl8LJG9eeAk1egVbbw5NdwRDeh1XfAZECFJTZgZNag1GeQsMMgsAYy8ZDwkxUEErDUZ6VhNhURdsbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5zAEE\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.40245890617370605,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604424774646759,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.402,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654263.515618\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654260.3494_16db16b5b605517c628bc9e0c8126e8c_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1353,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 402,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1442,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 8592\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 8670.22,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 4.2,\n        \"speed_factor\": 23.7,\n        \"performance\": \"23.7x faster than expected 🚀\"\n    }\n}"}]},{"name":"Extract ID card or passport","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Identity Document Extract data from ID cards, passports, and driver licenses. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | |.\n\n---\n**Tool-ID:** `po_extraction_identity_document_id_cardpassport` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_identity_document_id_cardpassport`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"identity_document"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Identity Document Extract data from ID cards, passports, and driver licenses. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | |.\n\n---\n**Tool-ID:** `po_extraction_identity_document_id_cardpassport` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_identity_document_id_cardpassport`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"identity_document"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654295.1316_cadb828ba1d692d5e909b4c8747009b3\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"4471.97ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YBV3gZQGQHXA1QEmoBTChbXWcEVzJ_SwlbMQoQKgAVfgNDagBCaQJDcRkfKlAIfl8LJG9eeAk1egVbbw5NdwRPdx1ffgRICFUDYQVNOFdHfg5ZMQdSY30ZAQs0ChJ8D0V0A0FiBkJhbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5zD08\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.6463572978973389,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.646,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654297.6210394\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654295.7149_5047ca9bcf6e7e8f283587e838910c73_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 457,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 646,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 388,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 4286\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 4334.36,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.1,\n        \"speed_factor\": 47.4,\n        \"performance\": \"47.4x faster than expected 🚀\"\n    }\n}"}]},{"name":"Extract insurance policy","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Insurance Policy Extract data from insurance policies and certificates. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_c.\n\n---\n**Tool-ID:** `po_extraction_insurance_policy` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_insurance_policy`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"ultra"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"insurance_policy"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Insurance Policy Extract data from insurance policies and certificates. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_c.\n\n---\n**Tool-ID:** `po_extraction_insurance_policy` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_insurance_policy`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"ultra"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"insurance_policy"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654299.6189_465c868968e9f987a7a966d1b04cbd58\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"9543.49ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YBV3QZR2UEUg0IRDpXQntcWGAHWDV5G19ZMQUQeQkTLVFCagNEaVZGeBkfKlAIfl8LJG9eeAk1egVbbw5NdwRPex1YfwdGCA1VMVNDa1BCeQ1WNgECNX8ZDgtnAxQvXUR0AEdiUkdobBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5yBk8\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.9907219409942627,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.991,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654303.807733\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654301.1548_f6478d0ba6b3224448a07f6e8f007914_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1461,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 991,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 3996,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 9463\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 9479.81,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 4.6,\n        \"speed_factor\": 21.7,\n        \"performance\": \"21.7x faster than expected 🚀\"\n    }\n}"}]},{"name":"Extract legal document","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Legal Document Extract data from legal documents and contracts. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_collectio.\n\n---\n**Tool-ID:** `po_extraction_legal_document` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_legal_document`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"ultra"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"legal_document"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Legal Document Extract data from legal documents and contracts. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_collectio.\n\n---\n**Tool-ID:** `po_extraction_legal_document` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_legal_document`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"ultra"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"legal_document"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654309.2791_53b9c3068dda82a675a8412b12c7e4dc\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"5860.45ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YAXnQZQ28EUQ1TFjwHFy1fDTJXVGN-GVsIaVQVKl5FfwBDNgJHYAJCehkfKlAIfl8LJG9eeAk1egVbbw5NdwVGex1cdQdFCFYHNwMWPVMXK11aYAYAMS5BXw40VEJ9DEUoAURrBkNqbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5yB0M\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.6593670845031738,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.6112901568412781,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.659,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654313.2030525\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654311.3602_99165bc0806264913259cb21aff8c05d_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1909,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 659,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 395,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5664\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5745.2,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.8,\n        \"speed_factor\": 35.8,\n        \"performance\": \"35.8x faster than expected 🚀\"\n    }\n}"}]},{"name":"Extract payroll / pay stub","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Payroll / Pay Stub Extract salary and payroll data. Fields: employee_name, pay_period, gross, net, deductions, taxes, employer\n\n---\n**Tool-ID:** `po_extraction_payroll_pay_stub` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_payroll_pay_stub`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"ultra"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"payroll"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Payroll / Pay Stub Extract salary and payroll data. Fields: employee_name, pay_period, gross, net, deductions, taxes, employer\n\n---\n**Tool-ID:** `po_extraction_payroll_pay_stub` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_payroll_pay_stub`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"ultra"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"payroll"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654337.6974_deb9b762b4b70ec56f1fbe24af1ccd28\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"6072.03ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YAXXoZR24MUg0GQG9WE3wNDGkCBWMvTwsLZwUXKgkXeAdBZQBGYAdHLRkfKlAIfl8LJG9eeAk1egVbbw5NdwVFdR1YdA9GCANRZFISbAEWcAgLYFdWYS1PDgw0AxB6C0d7A0VrA0Y9bBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5yAkU\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.6433157920837402,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.643,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654341.8202999\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654339.8809_e5c13e43c29a0c1fbfdfbf7bf20bb9ef_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 2049,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 643,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 411,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5937\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5948.98,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.9,\n        \"speed_factor\": 34.5,\n        \"performance\": \"34.5x faster than expected 🚀\"\n    }\n}"}]},{"name":"Parse email file (EML/MSG)","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Parse email messages and extract content - Supports EML, MSG, PST formats\n\n---\n**Tool-ID:** `po_dataripper_email_parser` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_dataripper_email_parser`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | email files (EML, MSG, PST) | Type: array","src":null},{"key":"extract_attachments","type":"text","description":"*(optional)* | attachments extract | Type: boolean","value":"true"},{"key":"parse_headers","type":"text","description":"*(optional)* | email-Header parsen | Type: boolean","value":"true"},{"key":"decode_html","type":"text","description":"*(optional)* | HTML content dekodieren | Type: boolean","value":"true"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Parse email messages and extract content - Supports EML, MSG, PST formats\n\n---\n**Tool-ID:** `po_dataripper_email_parser` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_dataripper_email_parser`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | email files (EML, MSG, PST) | Type: array","src":null},{"key":"extract_attachments","type":"text","description":"*(optional)* | attachments extract | Type: boolean","value":"true"},{"key":"parse_headers","type":"text","description":"*(optional)* | email-Header parsen | Type: boolean","value":"true"},{"key":"decode_html","type":"text","description":"*(optional)* | HTML content dekodieren | Type: boolean","value":"true"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654349.2677_6d3202556018029cf560820901832946\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"4546.87ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YAWnQZQ2AEVA1URmgMFC1bXWgHVjV6GQxZNFdPLQ8QLVZAZgIVOAtFKhkfKlAIfl8LJG9eeAk1egVbbw5NdwVCex1cegdACFFXYwgVPVdHcQ1YNgIAZn8cXFQzBRcvWkZ4ARYzD0Q6bBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5yA0U\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.6460790634155273,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.646,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654351.8835926\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654349.8349_404b1c7fb506f968d35c07ca754e1e08_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 443,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 646,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 361,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 4369\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 4435.3,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.2,\n        \"speed_factor\": 46.3,\n        \"performance\": \"46.3x faster than expected 🚀\"\n    }\n}"}]},{"name":"Redact image","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Black out/anonymize images - Draw black rectangles over sensitive areas\n\n---\n**Tool-ID:** `po_dataripper_redact_image` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_dataripper_redact_image`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | Image files for blacking out (PNG, JPG) | Type: array","src":null},{"key":"bounding_boxes","type":"text","description":"**REQUIRED** | OCR-Bounding-Boxes per page | Type: array","value":"[]"},{"key":"redact_boxes","type":"text","description":"**REQUIRED** | List the box-IDs to be blacked out | Type: array","value":"[]"},{"key":"override_boxes","type":"text","description":"*(optional)* | Manual Override Box IDs from the Frontend | Type: array","value":"[]"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Black out/anonymize images - Draw black rectangles over sensitive areas\n\n---\n**Tool-ID:** `po_dataripper_redact_image` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_dataripper_redact_image`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | Image files for blacking out (PNG, JPG) | Type: array","src":null},{"key":"bounding_boxes","type":"text","description":"**REQUIRED** | OCR-Bounding-Boxes per page | Type: array","value":"[]"},{"key":"redact_boxes","type":"text","description":"**REQUIRED** | List the box-IDs to be blacked out | Type: array","value":"[]"},{"key":"override_boxes","type":"text","description":"*(optional)* | Manual Override Box IDs from the Frontend | Type: array","value":"[]"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654367.3201_75babc0a0e3293919a076d50d2be7abc\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"6015.62ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YAWHoZQmUFXA0DEmgERXsIWWFXWWUpHV0PYQoSfQAXdAQWZVFCawUWfRkfKlAIfl8LJG9eeAk1egVbbw5NdwVAdR1dfwZICAYDYwBEawRDeF1XZlEENylJAQljChB2CBB7UkFgARdtbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5yAUU\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 1.0089690685272217,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 1.009,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654371.4299128\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654368.8335_397f37b7344d97dab242921b813b2e6e_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1380,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1009,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 479,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5904\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5950.6,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.9,\n        \"speed_factor\": 34.5,\n        \"performance\": \"34.5x faster than expected 🚀\"\n    }\n}"}]},{"name":"Scan for whitepage code","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Scanning documents on blank pages and code fragments - Automatic detection and filtering\n\n---\n**Tool-ID:** `po_dataripper_whitepage_code_scan` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_dataripper_whitepage_code_scan`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF or image files for scanning | Type: array","src":null},{"key":"whitepage_threshold","type":"text","description":"*(optional)* | {\"threshold_for_empty_pages\":\"0.1-1.0\"} | Type: number | Min: 0.1 | Max: 1","value":"0.95"},{"key":"detect_code","type":"text","description":"*(optional)* | code fragments erkennen | Type: boolean","value":"true"},{"key":"remove_whitepages","type":"text","description":"*(optional)* | empty pages automatically remove | Type: boolean","value":"false"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Scanning documents on blank pages and code fragments - Automatic detection and filtering\n\n---\n**Tool-ID:** `po_dataripper_whitepage_code_scan` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_dataripper_whitepage_code_scan`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF or image files for scanning | Type: array","src":null},{"key":"whitepage_threshold","type":"text","description":"*(optional)* | {\"threshold_for_empty_pages\":\"0.1-1.0\"} | Type: number | Min: 0.1 | Max: 1","value":"0.95"},{"key":"detect_code","type":"text","description":"*(optional)* | code fragments erkennen | Type: boolean","value":"true"},{"key":"remove_whitepages","type":"text","description":"*(optional)* | empty pages automatically remove | Type: boolean","value":"false"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654373.4339_8f70e1e2cf223b01087218bac71bbf7a\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"4451.8ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YAWX4ZRWQBXA0ERjtWQ38MV2YDVGN6HV9UYwEQfllILQJGNgBAPQVDfBkfKlAIfl8LJG9eeAk1egVbbw5NdwVBcR1afgJICAFXMFJCbwBNfwlaYAIENXJLCgtgU08vDkAoA0M2AUJsbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5yAUE\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.6379752159118652,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.638,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654376.0043058\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654374.021_3d6d4817361a0954f2fe9755d39df054_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 447,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 638,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 377,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 4277\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 4334,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.1,\n        \"speed_factor\": 47.4,\n        \"performance\": \"47.4x faster than expected 🚀\"\n    }\n}"}]},{"name":"Extract government form data","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_aiocr___generate","host":["{{base_url}}"],"path":["job","add","paperoffice_aiocr___generate"]},"description":"Form Processing Extract data from filled forms. Fields: all_fields, checkboxes, signatures\n\n---\n**Tool-ID:** `po_extraction_government_forms` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_government_forms`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `paperoffice_aiocr___generate` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"government_forms"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_aiocr___generate","host":["{{base_url}}"],"path":["job","add","paperoffice_aiocr___generate"]},"description":"Form Processing Extract data from filled forms. Fields: all_fields, checkboxes, signatures\n\n---\n**Tool-ID:** `po_extraction_government_forms` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_government_forms`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `paperoffice_aiocr___generate` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"government_forms"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654460.8405_da6e1986b31dadabaccfd68084fba4bc\",\n    \"message\": \"Job processed successfully\",\n    \"operation\": \"generate\",\n    \"processing_time\": \"1787.51ms\",\n    \"result\": {\n        \"status\": \"completed\",\n        \"output\": {\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.13144421577453613,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1632,\n                    \"original_image_height\": 2112,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    }\n                }\n            },\n            \"ocr_tier\": \"basic\",\n            \"ocr_mode\": \"text\",\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.131,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"basic\",\n                \"created_at\": \"1775654462.5046272\"\n            }\n        },\n        \"message\": \"PaperOffice AI-OCR Multi-Page completed (1 pages, 0 lines)\",\n        \"duration_ms\": \"131.44\"\n    },\n    \"server\": \"api-server\",\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 1706.06,\n        \"expected_ms\": 11500,\n        \"timeout_ms\": 20000,\n        \"accuracy_percent\": 14.8,\n        \"speed_factor\": 6.7,\n        \"performance\": \"6.7x faster than expected\"\n    }\n}"}]},{"name":"Extract handwritten customer form","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_aiocr___generate","host":["{{base_url}}"],"path":["job","add","paperoffice_aiocr___generate"]},"description":"Handwritten Document AI-powered handwriting recognition. Fields: extracted_text, confidence, language\n\n---\n**Tool-ID:** `po_extraction_handwritten_customer_form` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_handwritten_customer_form`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `paperoffice_aiocr___generate` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"ultra"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"handwritten_customer_form"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_aiocr___generate","host":["{{base_url}}"],"path":["job","add","paperoffice_aiocr___generate"]},"description":"Handwritten Document AI-powered handwriting recognition. Fields: extracted_text, confidence, language\n\n---\n**Tool-ID:** `po_extraction_handwritten_customer_form` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_handwritten_customer_form`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `paperoffice_aiocr___generate` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"ultra"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"handwritten_customer_form"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654463.5641_a6c6cd923afd97b9cfbfce86f2acc892\",\n    \"message\": \"Job processed successfully\",\n    \"operation\": \"generate\",\n    \"processing_time\": \"2947.42ms\",\n    \"result\": {\n        \"status\": \"completed\",\n        \"output\": {\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.1274564266204834,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1632,\n                    \"original_image_height\": 2112,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    }\n                }\n            },\n            \"ocr_tier\": \"basic\",\n            \"ocr_mode\": \"text\",\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.127,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"basic\",\n                \"created_at\": \"1775654465.6179368\"\n            }\n        },\n        \"message\": \"PaperOffice AI-OCR Multi-Page completed (1 pages, 0 lines)\",\n        \"duration_ms\": \"127.46\"\n    },\n    \"server\": \"api-server\",\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 2104.05,\n        \"expected_ms\": 11500,\n        \"timeout_ms\": 20000,\n        \"accuracy_percent\": 18.3,\n        \"speed_factor\": 5.5,\n        \"performance\": \"5.5x faster than expected\"\n    }\n}"}]},{"name":"Extract handwritten document","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_aiocr___generate","host":["{{base_url}}"],"path":["job","add","paperoffice_aiocr___generate"]},"description":"Handwritten Document AI-powered handwriting recognition. Fields: extracted_text, confidence, language\n\n---\n**Tool-ID:** `po_extraction_handwritten_document` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_handwritten_document`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `paperoffice_aiocr___generate` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"ultra"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"handwritten_document"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_aiocr___generate","host":["{{base_url}}"],"path":["job","add","paperoffice_aiocr___generate"]},"description":"Handwritten Document AI-powered handwriting recognition. Fields: extracted_text, confidence, language\n\n---\n**Tool-ID:** `po_extraction_handwritten_document` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_handwritten_document`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `paperoffice_aiocr___generate` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"ultra"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"handwritten_document"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654465.8521_2bd2ca64558b1db0efc57222b19d5f60\",\n    \"message\": \"Job processed successfully\",\n    \"operation\": \"generate\",\n    \"processing_time\": \"1697.84ms\",\n    \"result\": {\n        \"status\": \"completed\",\n        \"output\": {\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.13811349868774414,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1632,\n                    \"original_image_height\": 2112,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    }\n                }\n            },\n            \"ocr_tier\": \"basic\",\n            \"ocr_mode\": \"text\",\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.138,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"basic\",\n                \"created_at\": \"1775654467.4528565\"\n            }\n        },\n        \"message\": \"PaperOffice AI-OCR Multi-Page completed (1 pages, 0 lines)\",\n        \"duration_ms\": \"138.11\"\n    },\n    \"server\": \"api-server\",\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 1604.71,\n        \"expected_ms\": 11500,\n        \"timeout_ms\": 20000,\n        \"accuracy_percent\": 14,\n        \"speed_factor\": 7.2,\n        \"performance\": \"7.2x faster than expected\"\n    }\n}"}]},{"name":"Extract US tax forms","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_aiocr___generate","host":["{{base_url}}"],"path":["job","add","paperoffice_aiocr___generate"]},"description":"Form Processing Extract data from filled forms. Fields: all_fields, checkboxes, signatures\n\n---\n**Tool-ID:** `po_extraction_us_tax_forms` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_us_tax_forms`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `paperoffice_aiocr___generate` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"us_tax_forms"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_aiocr___generate","host":["{{base_url}}"],"path":["job","add","paperoffice_aiocr___generate"]},"description":"Form Processing Extract data from filled forms. Fields: all_fields, checkboxes, signatures\n\n---\n**Tool-ID:** `po_extraction_us_tax_forms` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_us_tax_forms`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `paperoffice_aiocr___generate` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"us_tax_forms"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654467.5269_f3466fe0e7374986ab821931c717f4e1\",\n    \"message\": \"Job processed successfully\",\n    \"operation\": \"generate\",\n    \"processing_time\": \"1718.13ms\",\n    \"result\": {\n        \"status\": \"completed\",\n        \"output\": {\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.09523153305053711,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1632,\n                    \"original_image_height\": 2112,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    }\n                }\n            },\n            \"ocr_tier\": \"basic\",\n            \"ocr_mode\": \"text\",\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.095,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"basic\",\n                \"created_at\": \"1775654469.134631\"\n            }\n        },\n        \"message\": \"PaperOffice AI-OCR Multi-Page completed (1 pages, 0 lines)\",\n        \"duration_ms\": \"95.23\"\n    },\n    \"server\": \"api-server\",\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 1703.51,\n        \"expected_ms\": 11500,\n        \"timeout_ms\": 20000,\n        \"accuracy_percent\": 14.8,\n        \"speed_factor\": 6.8,\n        \"performance\": \"6.8x faster than expected\"\n    }\n}"}]},{"name":"Extract hotel invoice","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Hotel Invoice Extract data from hotel bills and folio statements. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_collect.\n\n---\n**Tool-ID:** `po_extraction_hotel_invoice` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_hotel_invoice`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"hotel_invoice"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Hotel Invoice Extract data from hotel bills and folio statements. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_collect.\n\n---\n**Tool-ID:** `po_extraction_hotel_invoice` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_hotel_invoice`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"hotel_invoice"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654471.4505_d9f6a10e8e2dc716d60cf5166c9dbb87\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"6033.43ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YHWXwZRWIFVw0DQW8NE3EJXmAFVWcoHAFcZAQTLVsTLwVCYA5HbVUTLxkfKlAIfl8LJG9eeAk1egVbbw5NdwJBcx1aeAZDCAZQZAkSYQVEeQ9bZFAFa3pMDwgzURQtCUR-DURmURI_bBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5xAUE\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.689720630645752,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.69,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654475.5959754\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654473.8628_b68883173f92e0e76fa7d322866288a1_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 2247,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 690,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 383,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5904\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5925.36,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.9,\n        \"speed_factor\": 34.7,\n        \"performance\": \"34.7x faster than expected 🚀\"\n    }\n}"}]},{"name":"Export DATEV SKR03 accounting","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Extract structured accounting data in DATEV SKR03 format. Fields: document date, document number, posting text, debit/credit account, amount, tax rate.\n\n---\n**Tool-ID:** `po_extraction_accounting_datev_skr03` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_accounting_datev_skr03`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"accounting_datev"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Extract structured accounting data in DATEV SKR03 format. Fields: document date, document number, posting text, debit/credit account, amount, tax rate.\n\n---\n**Tool-ID:** `po_extraction_accounting_datev_skr03` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_accounting_datev_skr03`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"accounting_datev"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654511.7622_84f5ff19b79bd6b8119404a9801dbc01\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"4053.98ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YGX3wZRmEHUA0CRTgBQCoKXmVSBGYtTF9cYVdGKAtGfAJBZFVHPwZDeBkfKlAIfl8LJG9eeAk1egVbbw5NdwNHcx1ZewRECAdUMwVBOgZEfFgKZVVVNXpJXF02AUF-Dkd6VkQ0AkJobBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5wB0M\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.697115421295166,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.6112901568412781,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.697,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654513.8247933\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654512.3386_e3d5deb9c2b463fe0ef6483d4a04faf3_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 369,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 697,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 429,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 3907\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 3930.39,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 1.9,\n        \"speed_factor\": 52.3,\n        \"performance\": \"52.3x faster than expected 🚀\"\n    }\n}"}]},{"name":"Extract bank check data","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Bank Check Extract data from bank checks. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_collection | string | Yes | ban.\n\n---\n**Tool-ID:** `po_extraction_bank_check` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_bank_check`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"bank_check"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Bank Check Extract data from bank checks. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_collection | string | Yes | ban.\n\n---\n**Tool-ID:** `po_extraction_bank_check` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_bank_check`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"bank_check"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654516.0398_0be4730789173bbef680ff4693d3fcd5\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"7358.75ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YGX3sZQWMEXQ0BEDwGEXoKXTMHBWdyHlpdMgZGfg5EdAxOYQAWaQMTLRkfKlAIfl8LJG9eeAk1egVbbw5NdwNHdB1eeQdJCAQBNwIQagZHKg0LZAoHMHsaDV1gBEN2AEh_AxViBxI9bBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5wBEU\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.6942234039306641,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.694,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654521.4986882\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654519.4066_e708d1d939073c4b7b5543fa3fe7e1a6_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 2263,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 694,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 373,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 7158\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 7230.21,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 3.5,\n        \"speed_factor\": 28.4,\n        \"performance\": \"28.4x faster than expected 🚀\"\n    }\n}"}]},{"name":"Extract bank details","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/billing/bank/details","host":["{{base_url}}"],"path":["billing","bank","details"]},"description":"Bank Details Extract banking information from documents. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_collection | str.\n\n---\n**Tool-ID:** `po_extraction_bank_details` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_bank_details`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"basic"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"bank_details"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/billing/bank/details","host":["{{base_url}}"],"path":["billing","bank","details"]},"description":"Bank Details Extract banking information from documents. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_collection | str.\n\n---\n**Tool-ID:** `po_extraction_bank_details` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_bank_details`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"basic"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"bank_details"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"data\": {\n                \"bank_name\": \"example\",\n                \"iban\": \"example\",\n                \"bic\": \"example\",\n                \"account_holder\": \"example\",\n                \"account_number\": \"example\",\n                \"bank_code\": \"example\"\n            },\n            \"text\": \"example\",\n            \"suggested_fields\": []\n        }\n    }\n}"}]},{"name":"Extract cash receipt data","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Cash Receipt Extract data from retail receipts and cash transactions. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_col.\n\n---\n**Tool-ID:** `po_extraction_cash_receipt` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_cash_receipt`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"cash_receipt"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Cash Receipt Extract data from retail receipts and cash transactions. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_col.\n\n---\n**Tool-ID:** `po_extraction_cash_receipt` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_cash_receipt`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"cash_receipt"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654523.4757_f33b0791cf00cad54cbaa3f924502406\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"7812.05ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YGXH4ZRWADUQ0AF2lRRHkLWGEBBGV-TQkLYgESLA4TfQRHMARHO1EWcBkfKlAIfl8LJG9eeAk1egVbbw5NdwNEcR1aegBFCAUGYlVFaQdCeAsKZgZUYy1KCgkyBBR_CEEuB0QwVRdgbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5wBUc\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.4212324619293213,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604424774646759,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.421,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654527.235627\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654524.9236_8373efd4459c2f0375274f294e28bafd_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1375,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 421,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1317,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 7751\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 7764.84,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 3.8,\n        \"speed_factor\": 26.5,\n        \"performance\": \"26.5x faster than expected 🚀\"\n    }\n}"}]},{"name":"Extract custom fields (IDP)","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Custom Field Extraction idp_fields only Extract ONLY the fields you define - no template. Format: json {\"key\": \"field_name\", \"description\": \"What to extract\"}, {\"key\": \"another_field\", \"description\": \"Description\"} Tip: To use a template AND add extra fields, use idp_collection + idp_fields toget.\n\n---\n**Tool-ID:** `po_extraction_custom_fields_idp_fields` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_custom_fields_idp_fields`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | Document to extract from | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_fields","type":"text","description":"*(optional)* | Custom extraction fields as JSON array | Type: string","value":"[{\"key\":\"company_name\",\"description\":\"Name of the company\"},{\"key\":\"invoice_number\",\"description\":\"Invoice number\"},{\"key\":\"total_amount\",\"description\":\"Total amount with currency\"}]"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Custom Field Extraction idp_fields only Extract ONLY the fields you define - no template. Format: json {\"key\": \"field_name\", \"description\": \"What to extract\"}, {\"key\": \"another_field\", \"description\": \"Description\"} Tip: To use a template AND add extra fields, use idp_collection + idp_fields toget.\n\n---\n**Tool-ID:** `po_extraction_custom_fields_idp_fields` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_custom_fields_idp_fields`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | Document to extract from | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_fields","type":"text","description":"*(optional)* | Custom extraction fields as JSON array | Type: string","value":"[{\"key\":\"company_name\",\"description\":\"Name of the company\"},{\"key\":\"invoice_number\",\"description\":\"Invoice number\"},{\"key\":\"total_amount\",\"description\":\"Total amount with currency\"}]"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654531.4962_48ac0f0d635de4f06f2551f528638c35\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"5873.87ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YGXXwZRW4DUw1SFjoETXkICmcAUDd9HFpZMgtBKwpFelBPYgNNOgYUfRkfKlAIfl8LJG9eeAk1egVbbw5NdwNFcx1adABHCFcHMQBMaQQQfgpeNAUFMH8aAFo1AEJ4XEl8AE4xAhVtbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5wBUE\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.639409065246582,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.639,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654535.4826622\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654533.6648_c3fa3aa5bde427ffacd7877ccf5bb925_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 2021,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 639,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 363,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5718\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5743.59,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.8,\n        \"speed_factor\": 35.8,\n        \"performance\": \"35.8x faster than expected 🚀\"\n    }\n}"}]},{"name":"Extract invoice","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Invoice Extraction Extract data from invoice documents. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_collection | stri.\n\n---\n**Tool-ID:** `po_extraction_invoice` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_invoice`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | IDP template name. Default: invoice (English). For localized versions use the dedicated tools (e.g. po_extraction_invoice_germandeutsch for German/DATEV). Advanced: append :lang:LOCALE for custom localization e.g. invoice:fr:FR | Type: string","value":"invoice"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Additional fields as JSON, e.g., {\"key\":\"has_stamp\",\"description\":\"Is there a stamp?\"} | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Invoice Extraction Extract data from invoice documents. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_collection | stri.\n\n---\n**Tool-ID:** `po_extraction_invoice` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_invoice`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | IDP template name. Default: invoice (English). For localized versions use the dedicated tools (e.g. po_extraction_invoice_germandeutsch for German/DATEV). Advanced: append :lang:LOCALE for custom localization e.g. invoice:fr:FR | Type: string","value":"invoice"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Additional fields as JSON, e.g., {\"key\":\"has_stamp\",\"description\":\"Is there a stamp?\"} | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654537.3598_c86fff1a79f4babacd6f4e62bd702def\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"9659.86ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YGXXoZQmEFUA0CFmgGR38LWmhXVzdzQAtZYQJEdgAQdAIWMAJHPVdELBkfKlAIfl8LJG9eeAk1egVbbw5NdwNFdR1dewZECAcHYwJGbwdAcV1ZNAtZYX9JCV9oChd2DhAuAUQ2U0U8bBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5wAkA\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 1.128368854522705,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 1.128,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654541.719575\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654538.9268_389065bb82a378e43ba58cfdce3037a0_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1443,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1128,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 3931,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 9586\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 9597.49,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 4.7,\n        \"speed_factor\": 21.4,\n        \"performance\": \"21.4x faster than expected 🚀\"\n    }\n}"}]},{"name":"Extract invoice (German/DATEV-optimized)","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Extract data from German invoices with DATEV-compatible fields. Fields: invoice number, date, supplier, customer, net, gross, VAT, IBAN, BIC.\n\n---\n**Tool-ID:** `po_extraction_invoice_germandeutsch` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_invoice_germandeutsch`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | Invoice document PDF/Image | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | invoice:de = German output, invoice:en = English, invoice:es = Spanish | Type: string","value":"invoice:de"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Additional fields as JSON | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Extract data from German invoices with DATEV-compatible fields. Fields: invoice number, date, supplier, customer, net, gross, VAT, IBAN, BIC.\n\n---\n**Tool-ID:** `po_extraction_invoice_germandeutsch` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_invoice_germandeutsch`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | Invoice document PDF/Image | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | invoice:de = German output, invoice:en = English, invoice:es = Spanish | Type: string","value":"invoice:de"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Additional fields as JSON | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654549.3772_3598bd79e8bd944657d9a7070388ae07\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"6311.64ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YGWnQZQmANUw0IEDoHRSwOWmIEAmEpHFwOYAtOL1tDKFJGNgFMa1JCehkfKlAIfl8LJG9eeAk1egVbbw5NdwNCex1deg5HCA0BMQNEPAJAew4MYlEFNihIAFUxUUQqXkAoAk9gVkNqbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5wA0U\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.6449494361877441,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.645,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654551.5571148\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654549.9846_a372e6ceef2556a48a805aa821cead26_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 433,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 645,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 372,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 3907\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 3935.37,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 1.9,\n        \"speed_factor\": 52.2,\n        \"performance\": \"52.2x faster than expected 🚀\"\n    }\n}"}]},{"name":"Extract invoice basic fields","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Invoice Light Basic Fields Extract basic invoice data minimal fields. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_col.\n\n---\n**Tool-ID:** `po_extraction_invoice_light_basic_fields` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_invoice_light_basic_fields`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"basic"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"idp_light"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Invoice Light Basic Fields Extract basic invoice data minimal fields. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_col.\n\n---\n**Tool-ID:** `po_extraction_invoice_light_basic_fields` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_invoice_light_basic_fields`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"basic"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"idp_light"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654553.6085_e91f3dc4dc3f08775fead4dcfc7808a0\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"5172.9ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YGW34ZR2cNUg0BQmEETS0KXWUDA2F6GgwOY1RDLQBAKlFDMANEaQNEfxkfKlAIfl8LJG9eeAk1egVbbw5NdwNDcR1YfQ5GCARTagBMPQZHfAkNYgIDZihLX1gzCkcoXUUuAEdiB0VvbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5wA04\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.706928014755249,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.6112901568412781,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.707,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654556.869185\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654555.3559_bc21e150f24c9e191a0b9adc325e0fdc_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1565,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 707,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 416,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5041\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5039.48,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.5,\n        \"speed_factor\": 40.8,\n        \"performance\": \"40.8x faster than expected 🚀\"\n    }\n}"}]},{"name":"Extract statement of account","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Statement of account Extract data from account statements. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_collection | s.\n\n---\n**Tool-ID:** `po_extraction_statement_of_account` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_statement_of_account`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"statement_of_account"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Statement of account Extract data from account statements. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_collection | s.\n\n---\n**Tool-ID:** `po_extraction_statement_of_account` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_statement_of_account`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"statement_of_account"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654558.8247_bfcf390a605380a2094274853a29096d\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"5457.15ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YGW3UZSWUCVg1UQTgAFngACWQAUGR6HF9cNgVGfAxAf1JPNFIVaQBAehkfKlAIfl8LJG9eeAk1egVbbw5NdwNDeh1WfwFCCFFQMwQXaAwTfQpeZwIFNXoeDl1iBkd9XkkqURZiBEFqbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5wAEI\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.695629358291626,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.6112901568412781,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.696,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654562.3958066\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654560.5596_729acf263b4216cffd086875f1a98e6b_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1558,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 696,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 375,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5287\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5343.5,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.6,\n        \"speed_factor\": 38.5,\n        \"performance\": \"38.5x faster than expected 🚀\"\n    }\n}"}]},{"name":"Extract utility bill","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Utility Bill Extract data from utility bills electricity, gas, water, internet. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required |.\n\n---\n**Tool-ID:** `po_extraction_utility_bill` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_utility_bill`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"utility_bill"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Utility Bill Extract data from utility bills electricity, gas, water, internet. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required |.\n\n---\n**Tool-ID:** `po_extraction_utility_bill` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_utility_bill`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"utility_bill"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654564.3204_c8446da696f85c5ebaa16964a6b23fe9\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"5549.22ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YGWHkZQmUGVw1QFmAEQ30MC2MDWWQtGwtZMQQQd10TLwBGZQJGYAUULBkfKlAIfl8LJG9eeAk1egVbbw5NdwNAdh1dfwVDCFUHawBCbQAReglXZ1UCYX8ZDwtpVxQtDEB7AUVrARU8bBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5wAE8\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.7031052112579346,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.6112901568412781,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.703,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654567.8868282\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654566.3004_f798000e1f6795968cb36008b532f3d6_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1599,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 703,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 385,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5389\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5442.04,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.6,\n        \"speed_factor\": 37.8,\n        \"performance\": \"37.8x faster than expected 🚀\"\n    }\n}"}]},{"name":"Extract letter or mail","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Letter / Mail Extract letter metadata and content. Fields: sender, recipient, date, subject, body_summary\n\n---\n**Tool-ID:** `po_extraction_letter_mail` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_letter_mail`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"letter_mail"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Letter / Mail Extract letter metadata and content. Fields: sender, recipient, date, subject, body_summary\n\n---\n**Tool-ID:** `po_extraction_letter_mail` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_letter_mail`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"letter_mail"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654582.3474_b4ec54e064edd79bb61fa8a307325201\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"6062.23ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YGVn8ZQmMNXQ0BRz0DF30NV2hQVmEpSwEOZFdDewBFeAVBYAFBbQFELRkfKlAIfl8LJG9eeAk1egVbbw5NdwNOcB1deQ5JCARWNgcWbQFNcVpYYlFSayhMXFhlCkJ6CUd-AkJmBUU9bBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5wDk4\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.649421215057373,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.649,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654585.7104754\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654583.6671_9eb54bade78916cdcf8246a5f8266a0c_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 449,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 649,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 368,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5877\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5945.5,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.9,\n        \"speed_factor\": 34.6,\n        \"performance\": \"34.6x faster than expected 🚀\"\n    }\n}"}]},{"name":"Extract receipt","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Receipt Extract data from receipts. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_collection | string | Yes | receipt |.\n\n---\n**Tool-ID:** `po_extraction_receipt` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_receipt`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"receipt"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Receipt Extract data from receipts. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_collection | string | Yes | receipt |.\n\n---\n**Tool-ID:** `po_extraction_receipt` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_receipt`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"receipt"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654588.6067_536c79c18e86238f7d107f1f59f0af88\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"6854.45ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YGVnUZR2cDUw0FTGECESgLXWABVGp7GQpbMgsSfw1BLQ0RNw8WOFIULRkfKlAIfl8LJG9eeAk1egVbbw5NdwNOeh1YfQBHCABdagYQOAdHeQtaaQMAYH0aAAlhB0YvARcpDBUzVhU9bBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5wD0M\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.7042276859283447,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.704,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654593.5095468\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654591.7676_e4f8fcc7e6aa1777a03e4ce6caebae14_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 2275,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 704,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 367,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 6652\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 6725.25,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 3.3,\n        \"speed_factor\": 30.6,\n        \"performance\": \"30.6x faster than expected 🚀\"\n    }\n}"}]},{"name":"Extract delivery note","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Delivery Note Extract data from delivery notes and packing slips. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_collect.\n\n---\n**Tool-ID:** `po_extraction_delivery_note` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_delivery_note`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"delivery_note"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Delivery Note Extract data from delivery notes and packing slips. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_collect.\n\n---\n**Tool-ID:** `po_extraction_delivery_note` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_delivery_note`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"delivery_note"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654598.9458_266ca8b14059b53b3b982b115b6d597d\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"6017.45ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YGV3UZSGMDUw0FFWwBR31bVmdWA2R-QAgLMQdBellEeA1BYwBBblZAfBkfKlAIfl8LJG9eeAk1egVbbw5NdwNPeh1XeQBHCAAEZwVGbVdMflwNZwZZYi0ZDFpkU0N6AUd9A0JlUkFsbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU53BkI\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.8912742137908936,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.891,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654603.024725\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654600.4387_ad42b7f2884125105ce2539cfe5d7796_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1412,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 891,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 502,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5888\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5954.87,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.9,\n        \"speed_factor\": 34.5,\n        \"performance\": \"34.5x faster than expected 🚀\"\n    }\n}"}]},{"name":"Extract purchase order","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Purchase Order Extract purchase order data. Fields: order_number, date, vendor, buyer, items, delivery_date, total Parameter: | Param | Type | Required | |-------|------|----------| | file_1 | file | Yes | | model | string | Yes |\n\n---\n**Tool-ID:** `po_extraction_purchase_order` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_purchase_order`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"order"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Purchase Order Extract purchase order data. Fields: order_number, date, vendor, buyer, items, delivery_date, total Parameter: | Param | Type | Required | |-------|------|----------| | file_1 | file | Yes | | model | string | Yes |\n\n---\n**Tool-ID:** `po_extraction_purchase_order` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_purchase_order`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"order"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654605.1471_0ccdc70323e775157c5130121ab6ad79\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"4382.93ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YFXngZQGMMUA1SQ2xQTXEOWGQHU2Z_HVheNgtFL10UfQxCYlRNbwZDcRkfKlAIfl8LJG9eeAk1egVbbw5NdwBGdx1feQ9ECFdSZ1RMYQJCfQ1dZQcEMngeAF4xVxN_AER8V05kAkJhbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU53Bk8\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.7108914852142334,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.6112901568412781,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.711,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654607.5296416\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654605.7121_b45252a9f325bb8eb9d37bc00230eea9_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 371,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 711,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 448,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 4229\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 4234.4,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.1,\n        \"speed_factor\": 48.5,\n        \"performance\": \"48.5x faster than expected 🚀\"\n    }\n}"}]},{"name":"Extract shipping waybill","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Shipping Waybill Extract data from shipping waybills and freight documents. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | i.\n\n---\n**Tool-ID:** `po_extraction_shipping_waybill` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_shipping_waybill`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"shipping_waybill"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Shipping Waybill Extract data from shipping waybills and freight documents. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | i.\n\n---\n**Tool-ID:** `po_extraction_shipping_waybill` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_shipping_waybill`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"shipping_waybill"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654609.5822_e34abd46bd4cfd7ed1860ae9c7a11a7d\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"5512.88ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YFXnQZRG8AVA0GQzgMQ3hdCjUFV2UuSwheaVFFKw5AeAwSYAFHYANMKBkfKlAIfl8LJG9eeAk1egVbbw5NdwBGex1bdQNACANSMwhCaFEQLA9ZZlZSYnhBWl41BEd6ABR-AkRrB004bBMgWgoaAVFjBVVoQAkvRVt8BVlsDU53B0M\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.8959853649139404,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.896,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654613.2638056\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654611.03_28b06f5873a95b9c753e633f4b0b586d_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1384,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 896,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 452,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5435\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5447.26,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.7,\n        \"speed_factor\": 37.7,\n        \"performance\": \"37.7x faster than expected 🚀\"\n    }\n}"}]},{"name":"Extract construction plan/blueprint","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Construction Plan / Blueprint Extract data from construction plans and technical drawings. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision.\n\n---\n**Tool-ID:** `po_extraction_construction_plan_blueprint` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_construction_plan_blueprint`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"ultra"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"construction_plan"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Construction Plan / Blueprint Extract data from construction plans and technical drawings. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision.\n\n---\n**Tool-ID:** `po_extraction_construction_plan_blueprint` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_construction_plan_blueprint`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"ultra"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"construction_plan"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654645.5188_5a37ae295296c46b4dd590debdac3e72\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"5869.53ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YFWngZRGUEVA0FTG0CQH9dWGAKAGcpSwFYYAtPfV4SfVVEYgNAbVVFLBkfKlAIfl8LJG9eeAk1egVbbw5NdwBCdx1bfwdACABdZgZBb1FCeQAOZFFSa35IAFRjVBV_WUJ8AENmUUQ8bBMgWgoaAVFjBVVoQAkvRVt8BVlsDU53A0c\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.697474479675293,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.6112901568412781,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.697,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654649.3439326\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654647.4434_afcb2a14d26f87a75774d612c8c1cbe1_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1781,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 697,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 463,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5687\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5745.2,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.8,\n        \"speed_factor\": 35.8,\n        \"performance\": \"35.8x faster than expected 🚀\"\n    }\n}"}]},{"name":"Extract vehicle registration","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Vehicle Registration Extract vehicle registration data. Fields: plate_number, make, model, VIN, owner, registration_date\n\n---\n**Tool-ID:** `po_extraction_vehicle_registration` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_vehicle_registration`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"vehicle_license"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Vehicle Registration Extract vehicle registration data. Fields: plate_number, make, model, VIN, owner, registration_date\n\n---\n**Tool-ID:** `po_extraction_vehicle_registration` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_extraction_vehicle_registration`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | AI processing tier (flat pricing). Basic=OCR+Vision, Premium=+AI thinking, Ultra=+AI reasoning. per/per-Max variants add higher page limits. | Type: string | Allowed: basic, basic-per, basic-per-max, premium, premium-per, premium-per-max, ultra, ultra-per, ultra-per-max","value":"premium"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"vehicle_license"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654651.5254_f567baa3b3830f4c1dc53c2369ff2f31\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"5167.77ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YFW3wZRGUCUw1XQ2wGQHhYDDYFVmdyTV0JZAtDKlpBeVJHZwMSPAtMKxkfKlAIfl8LJG9eeAk1egVbbw5NdwBDcx1bfwFHCFJSZwJBaFQWLw9YZApUNy9MAFg0UEZ7XkF5ABE3D007bBMgWgoaAVFjBVVoQAkvRVt8BVlsDU53A0A\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.6931095123291016,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.6112901568412781,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.693,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654654.7566893\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654653.2758_65ae889482878f11b8fea12d48f08688_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1587,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 693,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 379,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 4990\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5039.08,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.5,\n        \"speed_factor\": 40.8,\n        \"performance\": \"40.8x faster than expected 🚀\"\n    }\n}"}]},{"name":"Execute template","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Execute Workflow Template Run a workflow template with input data. --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | template_id | string | ✅ | Template to execute | | input | object | ✅ | Input data for workflow | --- Response json {.\n\n---\n**Tool-ID:** `po_workflow_templates_execute_template` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workflow_templates_execute_template`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"uuid","type":"text","description":"**REQUIRED** | UUID of the auszuleading Templates | Type: string","value":"00000000-0000-0000-0000-000000000001"},{"key":"input_data","type":"text","description":"*(optional)* | inputdaten for the Workflow-execution | Type: object","value":"{}"},{"key":"file","type":"file","description":"*(optional)* | file-reference (e.g. pofid) for the Workflow | Type: string","src":null},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"900"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Execute Workflow Template Run a workflow template with input data. --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | template_id | string | ✅ | Template to execute | | input | object | ✅ | Input data for workflow | --- Response json {.\n\n---\n**Tool-ID:** `po_workflow_templates_execute_template` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workflow_templates_execute_template`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"uuid","type":"text","description":"**REQUIRED** | UUID of the auszuleading Templates | Type: string","value":"00000000-0000-0000-0000-000000000001"},{"key":"input_data","type":"text","description":"*(optional)* | inputdaten for the Workflow-execution | Type: object","value":"{}"},{"key":"file","type":"file","description":"*(optional)* | file-reference (e.g. pofid) for the Workflow | Type: string","src":null},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 900","value":"900"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654691.5286_fbda247aeb15d1ffe19ba3127b978790\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"4348.96ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YFV3wZRGQEXA0CTTsCQCpaVmdSU2RyGQ8OMgtBeAsXeAJFNgASPAEWKxkfKlAIfl8LJG9eeAk1egVbbw5NdwBPcx1bfgdICAdcMAZBOlZMflhdZwoAZSgaAFpmARB6DkMoAxE3BRc7bBMgWgoaAVFjBVVoQAkvRVt8BVlsDU53D0M\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.6403896808624268,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.64,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654693.9272263\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654692.1243_666d9c89713fc33ed9c737f17a84fc41_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 482,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 640,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 371,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 4197\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 4232.26,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.1,\n        \"speed_factor\": 48.6,\n        \"performance\": \"48.6x faster than expected 🚀\"\n    }\n}"}]}]},{"name":"🔍 AI-OCR","description":"# AI-OCR\n\nOptical Character Recognition powered by AI. Extract text from images, scanned documents, and PDFs with high accuracy. Supports multiple languages and document layouts.","item":[{"name":"Extract AI-OCR grid boxes","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_aiocr___generate","host":["{{base_url}}"],"path":["job","add","paperoffice_aiocr___generate"]},"description":"AI-OCR Grid/Boxes OCR with bounding boxes - includes precise text positions for each line. Required for Document Anonymization! --- When to Use - Document Anonymization redacting sensitive data - IDP Intelligent Document Processing workflows - Text highlighting/annotation - When you need to know .\n\n---\n**Tool-ID:** `po_aiocr_gridboxes` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_aiocr_gridboxes`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `paperoffice_aiocr___generate` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | Required. Image or PDF file for text extraction. Supported: PNG, JPG, JPEG, TIFF, BMP, WEBP, PDF | Type: string","src":null},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"ocr_mode","type":"text","description":"*(optional)* | OCR mode: text fastest, text only, grid + bounding boxes, complete + tables + layout | Type: string","value":"grid"},{"key":"output_searchable_pdf","type":"text","description":"*(optional)* | Create searchable PDF Sandwich PDF with invisible OCR layer. Default: false | Type: string","value":"false"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_aiocr___generate","host":["{{base_url}}"],"path":["job","add","paperoffice_aiocr___generate"]},"description":"AI-OCR Grid/Boxes OCR with bounding boxes - includes precise text positions for each line. Required for Document Anonymization! --- When to Use - Document Anonymization redacting sensitive data - IDP Intelligent Document Processing workflows - Text highlighting/annotation - When you need to know .\n\n---\n**Tool-ID:** `po_aiocr_gridboxes` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_aiocr_gridboxes`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `paperoffice_aiocr___generate` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | Required. Image or PDF file for text extraction. Supported: PNG, JPG, JPEG, TIFF, BMP, WEBP, PDF | Type: string","src":null},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"ocr_mode","type":"text","description":"*(optional)* | OCR mode: text fastest, text only, grid + bounding boxes, complete + tables + layout | Type: string","value":"grid"},{"key":"output_searchable_pdf","type":"text","description":"*(optional)* | Create searchable PDF Sandwich PDF with invisible OCR layer. Default: false | Type: string","value":"false"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654253.2555_a4b1f98ece0f0c73e4f5f74b44ed66de\",\n    \"message\": \"Job processed successfully\",\n    \"operation\": \"generate\",\n    \"processing_time\": \"3326.97ms\",\n    \"result\": {\n        \"status\": \"completed\",\n        \"output\": {\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.1307682991027832,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1632,\n                    \"original_image_height\": 2112,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    }\n                }\n            },\n            \"ocr_tier\": \"basic\",\n            \"ocr_mode\": \"text\",\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.131,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"basic\",\n                \"created_at\": \"1775654256.5471482\"\n            }\n        },\n        \"message\": \"PaperOffice AI-OCR Multi-Page completed (1 pages, 0 lines)\",\n        \"duration_ms\": \"130.77\"\n    },\n    \"server\": \"api-server\",\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 3311.48,\n        \"expected_ms\": 11500,\n        \"timeout_ms\": 20000,\n        \"accuracy_percent\": 28.8,\n        \"speed_factor\": 3.5,\n        \"performance\": \"3.5x faster than expected\"\n    }\n}"}]},{"name":"Extract AI-OCR plain text","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_aiocr___generate","host":["{{base_url}}"],"path":["job","add","paperoffice_aiocr___generate"]},"description":"AI-OCR Text Only Fastest OCR mode - extracts text only without position data. --- When to Use - Fast text extraction from documents - Full-text search indexing - Text content analysis - When you DON'T need text positions --- Performance | Metric | Value | |--------|-------| | Speed | ~93 pages/mi.\n\n---\n**Tool-ID:** `po_aiocr_text_only` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_aiocr_text_only`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `paperoffice_aiocr___generate` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | Required. Image or PDF file for text extraction. Supported: PNG, JPG, JPEG, TIFF, BMP, WEBP, PDF | Type: string","src":null},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"ocr_mode","type":"text","description":"*(optional)* | OCR mode: text fastest, text only, grid + bounding boxes, complete + tables + layout | Type: string","value":"text"},{"key":"output_searchable_pdf","type":"text","description":"*(optional)* | Create searchable PDF Sandwich PDF with invisible OCR layer. Default: false | Type: string","value":"false"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_aiocr___generate","host":["{{base_url}}"],"path":["job","add","paperoffice_aiocr___generate"]},"description":"AI-OCR Text Only Fastest OCR mode - extracts text only without position data. --- When to Use - Fast text extraction from documents - Full-text search indexing - Text content analysis - When you DON'T need text positions --- Performance | Metric | Value | |--------|-------| | Speed | ~93 pages/mi.\n\n---\n**Tool-ID:** `po_aiocr_text_only` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_aiocr_text_only`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `paperoffice_aiocr___generate` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | Required. Image or PDF file for text extraction. Supported: PNG, JPG, JPEG, TIFF, BMP, WEBP, PDF | Type: string","src":null},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"ocr_mode","type":"text","description":"*(optional)* | OCR mode: text fastest, text only, grid + bounding boxes, complete + tables + layout | Type: string","value":"text"},{"key":"output_searchable_pdf","type":"text","description":"*(optional)* | Create searchable PDF Sandwich PDF with invisible OCR layer. Default: false | Type: string","value":"false"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654256.6381_560335c58cabdd05214a1e736c86008e\",\n    \"message\": \"Job processed successfully\",\n    \"operation\": \"generate\",\n    \"processing_time\": \"2129.12ms\",\n    \"result\": {\n        \"status\": \"completed\",\n        \"output\": {\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.17316007614135742,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1632,\n                    \"original_image_height\": 2112,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    }\n                }\n            },\n            \"ocr_tier\": \"basic\",\n            \"ocr_mode\": \"text\",\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.173,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"basic\",\n                \"created_at\": \"1775654258.7210279\"\n            }\n        },\n        \"message\": \"PaperOffice AI-OCR Multi-Page completed (1 pages, 0 lines)\",\n        \"duration_ms\": \"173.16\"\n    },\n    \"server\": \"api-server\",\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 2108.72,\n        \"expected_ms\": 11500,\n        \"timeout_ms\": 20000,\n        \"accuracy_percent\": 18.3,\n        \"speed_factor\": 5.5,\n        \"performance\": \"5.5x faster than expected\"\n    }\n}"}]},{"name":"Run complete AI-OCR analysis","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_aiocr___generate","host":["{{base_url}}"],"path":["job","add","paperoffice_aiocr___generate"]},"description":"AI-OCR Complete Analysis Full document analysis - includes text, bounding boxes, table detection, and layout analysis. --- When to Use - Complex documents with tables and structured layouts - Financial reports, invoices with line items - Scientific papers, technical documents - When you need tabl.\n\n---\n**Tool-ID:** `po_aiocr_complete_analysis` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_aiocr_complete_analysis`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `paperoffice_aiocr___generate` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | Required. Image or PDF file for text extraction. Supported: PNG, JPG, JPEG, TIFF, BMP, WEBP, PDF | Type: string","src":null},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"ocr_mode","type":"text","description":"*(optional)* | OCR mode: text fastest, text only, grid + bounding boxes, complete + tables + layout | Type: string","value":"complete"},{"key":"output_searchable_pdf","type":"text","description":"*(optional)* | Create searchable PDF Sandwich PDF with invisible OCR layer. Default: false | Type: string","value":"false"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_aiocr___generate","host":["{{base_url}}"],"path":["job","add","paperoffice_aiocr___generate"]},"description":"AI-OCR Complete Analysis Full document analysis - includes text, bounding boxes, table detection, and layout analysis. --- When to Use - Complex documents with tables and structured layouts - Financial reports, invoices with line items - Scientific papers, technical documents - When you need tabl.\n\n---\n**Tool-ID:** `po_aiocr_complete_analysis` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_aiocr_complete_analysis`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `paperoffice_aiocr___generate` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | Required. Image or PDF file for text extraction. Supported: PNG, JPG, JPEG, TIFF, BMP, WEBP, PDF | Type: string","src":null},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"ocr_mode","type":"text","description":"*(optional)* | OCR mode: text fastest, text only, grid + bounding boxes, complete + tables + layout | Type: string","value":"complete"},{"key":"output_searchable_pdf","type":"text","description":"*(optional)* | Create searchable PDF Sandwich PDF with invisible OCR layer. Default: false | Type: string","value":"false"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654251.4802_cc763b6aa7d6f75d05362f6c5d549409\",\n    \"message\": \"Job processed successfully\",\n    \"operation\": \"generate\",\n    \"processing_time\": \"1797.06ms\",\n    \"result\": {\n        \"status\": \"completed\",\n        \"output\": {\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.13749074935913086,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1632,\n                    \"original_image_height\": 2112,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    }\n                }\n            },\n            \"ocr_tier\": \"basic\",\n            \"ocr_mode\": \"text\",\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.137,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"basic\",\n                \"created_at\": \"1775654253.1336594\"\n            }\n        },\n        \"message\": \"PaperOffice AI-OCR Multi-Page completed (1 pages, 0 lines)\",\n        \"duration_ms\": \"137.49\"\n    },\n    \"server\": \"api-server\",\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 1704.81,\n        \"expected_ms\": 11500,\n        \"timeout_ms\": 20000,\n        \"accuracy_percent\": 14.8,\n        \"speed_factor\": 6.7,\n        \"performance\": \"6.7x faster than expected\"\n    }\n}"}]},{"name":"Get json","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_aiocr___generate","host":["{{base_url}}"],"path":["job","add","paperoffice_aiocr___generate"]},"description":"Get OCR Text JSON Retrieve extracted text from all pages. Response includes: - Per-page OCR text - Statistics char_count, line_count, confidence - Optional: bounding boxes for word positions\n\n---\n**Tool-ID:** `po_ocr_get_json` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_ocr_get_json`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `paperoffice_aiocr___generate` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"locale","type":"text","description":"*(optional)* | Response language: de_DE, en_US, es_ES, fr_FR, it_IT, pt_PT | Type: string","value":"en"},{"key":"page","type":"text","description":"*(optional)* | Optional: Specific page number (1-based) | Type: string","value":"1"},{"key":"include_bounding_boxes","type":"text","description":"*(optional)* | Include word coordinates (x, y, width, height) | Type: string","value":"false"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[]},{"name":"Get OCR details","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_aiocr___generate","host":["{{base_url}}"],"path":["job","add","paperoffice_aiocr___generate"]},"description":"Detailed OCR data of a document. Includes: text per page, bounding boxes (x, y, width, height), Confidence scores, detected language, character/word counts.\n\n---\n**Tool-ID:** `po_ocr_get_ocr_details` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_ocr_get_ocr_details`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `paperoffice_aiocr___generate` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"page","type":"text","description":"*(optional)* | Optional: Specific page number | Type: string","value":"1"},{"key":"include_bounding_boxes","type":"text","description":"*(optional)* | Include word/line bounding boxes | Type: string","value":"false"},{"key":"format","type":"text","description":"*(optional)* | full, text_only, or structured | Type: string","value":"json"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[]},{"name":"Get OCR plain text","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_aiocr___generate","host":["{{base_url}}"],"path":["job","add","paperoffice_aiocr___generate"]},"description":"Get OCR Text Plain Text Returns OCR text as plain text, page by page. Useful for: - Copy/paste full document text - integration with text processing tools - Simple exports\n\n---\n**Tool-ID:** `po_ocr_get_plain_text` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_ocr_get_plain_text`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `paperoffice_aiocr___generate` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"format","type":"text","description":"*(optional)* | Output format: json (default), text (plain text) | Type: string","value":"json"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[]}]},{"name":"📄 PDF AI","description":"# PDF AI\n\nAI-powered PDF processing: convert, merge, split, compress, and manipulate PDF files. AI document splitting, HTML-to-PDF, image-to-PDF, office-to-PDF, ebook-to-PDF and PDF form filling.","item":[{"name":"Add password to PDF","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"PDF Password Protection Add password protection to PDF documents. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | PDF file | | password | string | Yes | Password to set | | permissions | string | No | Allowed actions .\n\n---\n**Tool-ID:** `po_pdfstudio_security_password_add` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_security_password_add`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"password","type":"text","description":"*(optional)* | Password | Type: string","value":"REPLACE_WITH_PASSWORD"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"PDF Password Protection Add password protection to PDF documents. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | PDF file | | password | string | Yes | Password to set | | permissions | string | No | Allowed actions .\n\n---\n**Tool-ID:** `po_pdfstudio_security_password_add` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_security_password_add`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"password","type":"text","description":"*(optional)* | Password | Type: string","value":"REPLACE_WITH_PASSWORD"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654617.5925_88e1dc56527ae50a9a4566c2bc180d17\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"5970.77ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YFX3oZRG4AOmUFET0CRXtYWDNXBDUtTl1eZ1ZEfgpFLVBPZVNAbAdBZkYAJFhMOVoGGQlXeGZbfAVZbA1MdQdBbAZXeWhGY1EBZQFGOAIWLVwJNgUFYHwcC11iBhcqAEYoAEJmAys_WhksaV91AVFiGxQoVxt5Dl1-BFlsDEpw\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.6400752067565918,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.64,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654621.6452067\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654619.8362_0f59aea85744a437dc8cf622b8fc4a79_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 2064,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 640,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 375,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5796\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5846.65,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.8,\n        \"speed_factor\": 35.1,\n        \"performance\": \"35.1x faster than expected 🚀\"\n    }\n}"}]},{"name":"Compress PDF","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Compress PDF to reduce file size\n\n---\n**Tool-ID:** `po_pdfstudio_compress` • **Cost:** 20 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_compress`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF files | Type: array","src":null},{"key":"quality","type":"text","description":"*(optional)* | Compression quality: low (72dpi, smallest), medium (150dpi, balanced), high (300dpi, best quality), lossless (no quality loss) | Type: string | Allowed: low, medium, high, lossless","value":"medium"},{"key":"linearize","type":"text","description":"*(optional)* | Linearize PDF for fast web view (default: true) | Type: boolean","value":"true"},{"key":"remove_metadata","type":"text","description":"*(optional)* | Remove metadata during compression (default: false) | Type: boolean","value":"true"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Compress PDF to reduce file size\n\n---\n**Tool-ID:** `po_pdfstudio_compress` • **Cost:** 20 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_compress`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF files | Type: array","src":null},{"key":"quality","type":"text","description":"*(optional)* | Compression quality: low (72dpi, smallest), medium (150dpi, balanced), high (300dpi, best quality), lossless (no quality loss) | Type: string | Allowed: low, medium, high, lossless","value":"medium"},{"key":"linearize","type":"text","description":"*(optional)* | Linearize PDF for fast web view (default: true) | Type: boolean","value":"true"},{"key":"remove_metadata","type":"text","description":"*(optional)* | Remove metadata during compression (default: false) | Type: boolean","value":"true"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654378.1313_39096bdeda74feed134d55da5f736278\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"4372.75ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YAWXUZQGQGUg0HTDwDEStcCzNWAGB6Sw4ONQtEfl5EeFAUMQVGOgFNcRkfKlAIfl8LJG9eeAk1egVbbw5NdwVBeh1ffgVGCAJdNwcQO1ARKlwOYwJSZCgdAF9gVEN6XBIvBkUxBUxhbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5yDkQ\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.7039504051208496,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.6112901568412781,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.704,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654380.4494991\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654378.6775_d210744f527e915177f757d954904aaa_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 381,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 704,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 441,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 4154\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 4238.08,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.1,\n        \"speed_factor\": 48.5,\n        \"performance\": \"48.5x faster than expected 🚀\"\n    }\n}"}]},{"name":"Convert eBook to PDF","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Convert E-Books to PDF - Supports EPUB, MOBI, AZW3, FB2 formats\n\n---\n**Tool-ID:** `po_dataripper_ebook2pdf` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_dataripper_ebook2pdf`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | E-Book files (EPUB, MOBI, AZW3, FB2) | Type: array","src":null},{"key":"output_format","type":"text","description":"*(optional)* | Output format (default: pdf) | Type: string | Allowed: pdf","value":"pdf"},{"key":"page_size","type":"text","description":"*(optional)* | page size | Type: string | Allowed: A4, A3, Letter","value":"A4"},{"key":"margin","type":"text","description":"*(optional)* | pagesrand in mm | Type: integer | Max: 50","value":"20"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Convert E-Books to PDF - Supports EPUB, MOBI, AZW3, FB2 formats\n\n---\n**Tool-ID:** `po_dataripper_ebook2pdf` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_dataripper_ebook2pdf`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | E-Book files (EPUB, MOBI, AZW3, FB2) | Type: array","src":null},{"key":"output_format","type":"text","description":"*(optional)* | Output format (default: pdf) | Type: string | Allowed: pdf","value":"pdf"},{"key":"page_size","type":"text","description":"*(optional)* | page size | Type: string | Allowed: A4, A3, Letter","value":"A4"},{"key":"margin","type":"text","description":"*(optional)* | pagesrand in mm | Type: integer | Max: 50","value":"20"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654345.1787_be9dd2443153972b89acdb0728581e68\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"4076.92ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YAWngZQG9rXGEAQD9UF39fWGMAB2AtT1wOMlBFL1pJfQVOZQNBYVVaOVkOLBwLPFc7fwBXFwhdfAdabwxLdwNYcwsxdARAY1IEMAcSbgZGLwoJZ1YCMSlLWA9oA0d3D0V5DBENUR01Vip5Bl91AE8jWwM6AVB_DFx-BF1uAQ\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.7020864486694336,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.6112901568412781,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.702,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654347.2095928\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654345.7196_512cbb1096cba51d8561484f8b2f02d9_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 371,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 702,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 449,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 3816\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 3932.7,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 1.9,\n        \"speed_factor\": 52.3,\n        \"performance\": \"52.3x faster than expected 🚀\"\n    }\n}"}]},{"name":"Convert image to PDF","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Convert images to PDF documents - Supports JPG, PNG, TIF, TIFF\n\n---\n**Tool-ID:** `po_dataripper_image2pdf` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_dataripper_image2pdf`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | image files (JPG, PNG, TIF, TIFF) | Type: array","src":null},{"key":"fit_to_a4","type":"text","description":"*(optional)* | Scale the image to A4 format with a white background | Type: boolean","value":"false"},{"key":"merge","type":"text","description":"*(optional)* | Merge all bills into a single PDF (default: true) | Type: boolean","value":"true"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Convert images to PDF documents - Supports JPG, PNG, TIF, TIFF\n\n---\n**Tool-ID:** `po_dataripper_image2pdf` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_dataripper_image2pdf`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | image files (JPG, PNG, TIF, TIFF) | Type: array","src":null},{"key":"fit_to_a4","type":"text","description":"*(optional)* | Scale the image to A4 format with a white background | Type: boolean","value":"false"},{"key":"merge","type":"text","description":"*(optional)* | Merge all bills into a single PDF (default: true) | Type: boolean","value":"true"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654353.8822_e4a74aacb5dd13bfa15e9c33a10a0f59\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"5679.77ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YAW34ZSW8DVw0BFW4NTSgIX2VSUmYpQAxdNQBEfFxDfw0TNAIVaAtMcRkfKlAIfl8LJG9eeAk1egVbbw5NdwVDcR1WdQBDCAQEZQlMOARFfFhcZVFZZnsdC19iVkR9ARUqARZjD01hbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5yA08\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.6920878887176514,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.6112901568412781,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.692,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654357.5240488\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654355.8316_6c026123509cd21e7533c7ca6ac2a501_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1796,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 692,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 416,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5455\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5545.02,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.7,\n        \"speed_factor\": 37.1,\n        \"performance\": \"37.1x faster than expected 🚀\"\n    }\n}"}]},{"name":"Convert office document to PDF","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Convert Office documents to PDF — Supports DOCX, DOC, XLSX, XLS, PPTX, PPT, ODS, ODT, ODP, RTF. Uses Windows VM clusters with genuine Microsoft Office for maximum conversion fidelity.\n\n---\n**Tool-ID:** `po_dataripper_office2pdf` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_dataripper_office2pdf`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | Office-files (DOCX, DOC, XLSX, XLS, PPTX, PPT, PPS, ODS, ODT, ODP, RTF) | Type: array","src":null},{"key":"provider","type":"text","description":"*(optional)* | Conversion Engine (automatic selection for optimal quality) | Type: string | Allowed: auto","value":"auto"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Convert Office documents to PDF — Supports DOCX, DOC, XLSX, XLS, PPTX, PPT, ODS, ODT, ODP, RTF. Uses Windows VM clusters with genuine Microsoft Office for maximum conversion fidelity.\n\n---\n**Tool-ID:** `po_dataripper_office2pdf` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_dataripper_office2pdf`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | Office-files (DOCX, DOC, XLSX, XLS, PPTX, PPT, PPS, ODS, ODT, ODP, RTF) | Type: array","src":null},{"key":"provider","type":"text","description":"*(optional)* | Conversion Engine (automatic selection for optimal quality) | Type: string | Allowed: auto","value":"auto"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654361.2879_3dae3b4d94e37dc9f316a9914bfa3d8f\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"7585.1ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YAWHwZQ28NVA1QQm8HF3sMWDMCUGcvSFpcZgdGLw8XegdFa1IQagVAeRkfKlAIfl8LJG9eeAk1egVbbw5NdwVAcx1cdQ5ACFVTZAMWawBCKgheZFdRMHpODF0xBRB4C0N1URNhAUFpbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5yAEE\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.699702262878418,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.7,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654365.466351\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654363.7865_2ae9511cf6a14813ed8d540f19421be2_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 2308,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 700,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 362,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5895\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5923.54,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.9,\n        \"speed_factor\": 34.7,\n        \"performance\": \"34.7x faster than expected 🚀\"\n    }\n}"}]},{"name":"Convert PDF to Excel","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Convert PDF to Excel spreadsheet (XLSX)\n\n---\n**Tool-ID:** `po_pdfstudio_convert_to_excel` • **Cost:** 30 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_convert_to_excel`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF files | Type: array","src":null},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Convert PDF to Excel spreadsheet (XLSX)\n\n---\n**Tool-ID:** `po_pdfstudio_convert_to_excel` • **Cost:** 30 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_convert_to_excel`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF files | Type: array","src":null},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654382.5438_4d05b6958656f0825c1ae6281eed3854\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"5355.43ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YAVn8ZRGMBVA1QQDoGE3sBCWZRBWd8SglVYAdBLwBHKgwRZlJHO1ZGcBkfKlAIfl8LJG9eeAk1egVbbw5NdwVOcB1beQJACFVRMQISaw0Tf1sLZARTY3NIDFoxCkAoABd4UUQwUkdgbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5yDkE\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.7024493217468262,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.6112901568412781,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.702,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654385.973423\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654384.263_19115b832ea6d0e103bdf9cd7df42d65_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1569,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 702,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 390,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5224\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5242.16,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.6,\n        \"speed_factor\": 39.2,\n        \"performance\": \"39.2x faster than expected 🚀\"\n    }\n}"}]},{"name":"Convert PDF to JPG","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Convert PDF pages to JPG images\n\n---\n**Tool-ID:** `po_pdfstudio_convert_to_jpg` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_convert_to_jpg`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF files | Type: array","src":null},{"key":"quality","type":"text","description":"*(optional)* | Quality (Integer) | Type: integer | Min: 10 | Max: 100","value":"70"},{"key":"max_size","type":"text","description":"*(optional)* | Max size (Integer) | Type: integer","value":"1200"},{"key":"dpi","type":"text","description":"*(optional)* | Resolution in DPI (default: 150) | Type: integer","value":"150"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Convert PDF pages to JPG images\n\n---\n**Tool-ID:** `po_pdfstudio_convert_to_jpg` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_convert_to_jpg`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF files | Type: array","src":null},{"key":"quality","type":"text","description":"*(optional)* | Quality (Integer) | Type: integer | Min: 10 | Max: 100","value":"70"},{"key":"max_size","type":"text","description":"*(optional)* | Max size (Integer) | Type: integer","value":"1200"},{"key":"dpi","type":"text","description":"*(optional)* | Resolution in DPI (default: 150) | Type: integer","value":"150"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654390.2458_4f721489c2e8cd3aa2ce070b5c2c2d53\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"9544.04ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YAV30ZQ2MCUg0FRGkBFi0PCmhWWGsvSFpUYgIXfQxIdAUSawBGOgoTfhkfKlAIfl8LJG9eeAk1egVbbw5NdwVPch1ceQFGCABVYgUXPQMQcVxWaFdRMHJKCQxjBk92CRR1A0UxDhJubBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5yD0E\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.6934890747070312,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.693,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654394.7584946\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654392.6406_7addac3758c87a8c1a4dcc3ee3ec55fd_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 2248,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 693,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 363,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 7050\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 7129.15,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 3.5,\n        \"speed_factor\": 28.8,\n        \"performance\": \"28.8x faster than expected 🚀\"\n    }\n}"}]},{"name":"Convert PDF to PDF/A","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Convert PDF to PDF/A for archiving\n\n---\n**Tool-ID:** `po_pdfstudio_convert_to_pdfa` • **Cost:** 20 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_convert_to_pdfa`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF files | Type: array","src":null},{"key":"level","type":"text","description":"*(optional)* | Level | Type: string | Allowed: pdfa-1b, pdfa-2b, pdfa-3b","value":"pdfa-2b"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Convert PDF to PDF/A for archiving\n\n---\n**Tool-ID:** `po_pdfstudio_convert_to_pdfa` • **Cost:** 20 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_convert_to_pdfa`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF files | Type: array","src":null},{"key":"level","type":"text","description":"*(optional)* | Level | Type: string | Allowed: pdfa-1b, pdfa-2b, pdfa-3b","value":"pdfa-2b"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654397.4948_506bc6d872b4553d806e74e068749b36\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"5173.78ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YAV3oZRW4CVw1UTTxRTXENWzEKVmB8TQgPYgJHLF1EdAIRY1UVYAsRexkfKlAIfl8LJG9eeAk1egVbbw5NdwVPdR1adAFDCFFcN1VMYQFBKABYYwRUYilKCVwyV0N2Dhd9VhZrDxBrbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5xBkQ\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.532494068145752,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.532,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654400.965616\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654399.3785_45c8955ff324276980a4e624b9f559d6_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1769,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 532,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 328,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5108\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5133.72,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.5,\n        \"speed_factor\": 40,\n        \"performance\": \"40x faster than expected 🚀\"\n    }\n}"}]},{"name":"Convert PDF to PowerPoint","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Convert PDF to PowerPoint presentation (PPTX)\n\n---\n**Tool-ID:** `po_pdfstudio_convert_to_powerpoint` • **Cost:** 30 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_convert_to_powerpoint`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF files | Type: array","src":null},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Convert PDF to PowerPoint presentation (PPTX)\n\n---\n**Tool-ID:** `po_pdfstudio_convert_to_powerpoint` • **Cost:** 30 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_convert_to_powerpoint`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF files | Type: array","src":null},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654402.7658_1b44af85f3254c89ace92354ee65f7a3\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"8212.15ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YHXn8ZRmEDVg1XEm0FRi1dDWVSVWooSAxbY1dBdg5ALgRCZVERagZHLRkfKlAIfl8LJG9eeAk1egVbbw5NdwJGcB1ZewBCCFIDZgFHPVEXfFhbaVBRZn1LXFpoBEcsCER7UhJhAkY9bBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5xB0Y\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.4030604362487793,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604424774646759,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.403,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654406.850579\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654404.2345_2200c2f6408d999d13db610f873a0cb3_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1422,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 403,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1516,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 8157\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 8162.95,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 4,\n        \"speed_factor\": 25.2,\n        \"performance\": \"25.2x faster than expected 🚀\"\n    }\n}"}]},{"name":"Convert PDF to WebP","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Convert PDF pages to WebP images\n\n---\n**Tool-ID:** `po_pdfstudio_convert_to_webp` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_convert_to_webp`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF files | Type: array","src":null},{"key":"quality","type":"text","description":"*(optional)* | Quality (Integer) | Type: integer | Min: 10 | Max: 100","value":"70"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Convert PDF pages to WebP images\n\n---\n**Tool-ID:** `po_pdfstudio_convert_to_webp` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_convert_to_webp`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF files | Type: array","src":null},{"key":"quality","type":"text","description":"*(optional)* | Quality (Integer) | Type: integer | Min: 10 | Max: 100","value":"70"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654411.0946_46e672e677964459791f4745f0dec88e\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"5873.7ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YHX3wZQW4COjACF28AEX0LDWcGVzV-GVhUaQQSKA5FdABPMVQRbwtCZkYAJFhMOVoGGQlXeGZbfAVZbA1MdwdHbANXe2gTZFdTZ1VAa1dCfA8JZVIAanJOXQtmBk56ABIvUUFqACs_WhksaV91AVFiGxQoVxt5Dl1-BFlsCkl1\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.689058780670166,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.6112901568412781,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.689,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654415.0234423\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654413.0639_7d2ef35e23c0c334a5f765232405ec69_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1810,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 689,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 409,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5732\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5748.24,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.8,\n        \"speed_factor\": 35.8,\n        \"performance\": \"35.8x faster than expected 🚀\"\n    }\n}"}]},{"name":"Convert PDF to Word","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Convert PDF to Word document (DOCX)\n\n---\n**Tool-ID:** `po_pdfstudio_convert_to_word` • **Cost:** 30 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_convert_to_word`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF files | Type: array","src":null},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Convert PDF to Word document (DOCX)\n\n---\n**Tool-ID:** `po_pdfstudio_convert_to_word` • **Cost:** 30 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_convert_to_word`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF files | Type: array","src":null},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654419.2579_3b35003e6ddd7f2be07f987b234e6b67\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"6605.09ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YHX3QZQ2EEVA0HEDwNQnwNVmlVWGEuG19cMlFDLF1BfQ1FYARMOFEUehkfKlAIfl8LJG9eeAk1egVbbw5NdwJHex1cewdACAIBNwlDbAFMcF9WYlYCNXoaWlgyV0Z_AUN-B08zVRVqbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5xBEU\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.6467900276184082,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.647,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654421.6651525\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654419.8632_1f98a406aa7ea883b9639e8a1b044322_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 444,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 647,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 357,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 4160\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 4236.21,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.1,\n        \"speed_factor\": 48.5,\n        \"performance\": \"48.5x faster than expected 🚀\"\n    }\n}"}]},{"name":"Convert URL to PDF","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Convert webpage URL to PDF with full browser support (cookies, headers, inject CSS/JS)\n\n---\n**Tool-ID:** `po_pdfstudio_url_to` • **Cost:** 30 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_url_to`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"url","type":"text","description":"**REQUIRED** | URL to convert (http:// or https://) | Type: string","value":"https://example.com/callback"},{"key":"screen_width","type":"text","description":"*(optional)* | Browser viewport width in pixels | Type: integer","value":"1920"},{"key":"screen_height","type":"text","description":"*(optional)* | Browser viewport height in pixels | Type: integer","value":"1080"},{"key":"page_size","type":"text","description":"*(optional)* | PDF page size | Type: string | Allowed: A4, A3, A5, Letter, Legal, Tabloid","value":"A4"},{"key":"page_orientation","type":"text","description":"*(optional)* | Page orientation | Type: string | Allowed: portrait, landscape","value":"portrait"},{"key":"page_margins","type":"text","description":"*(optional)* | Page margins in pixels | Type: integer","value":"20"},{"key":"scale","type":"text","description":"*(optional)* | Scale factor 0.1-2.0 | Type: string","value":"1"},{"key":"print_background","type":"text","description":"*(optional)* | Print background colors/images (true/false) | Type: string | Allowed: true, false","value":"true"},{"key":"page_ranges","type":"text","description":"*(optional)* | Pages to print, e.g. 1-5,8 | Type: string","value":"example-value"},{"key":"header_template","type":"text","description":"*(optional)* | HTML header template | Type: string","value":"example-value"},{"key":"footer_template","type":"text","description":"*(optional)* | HTML footer template | Type: string","value":"example-value"},{"key":"remove_classes","type":"text","description":"*(optional)* | CSS selectors to remove | Type: string","value":"example-value"},{"key":"inject_css","type":"text","description":"*(optional)* | Custom CSS to inject | Type: string","value":"example-value"},{"key":"inject_js","type":"text","description":"*(optional)* | JavaScript to execute | Type: string","value":"example-value"},{"key":"cookies","type":"text","description":"*(optional)* | JSON array of cookies | Type: string","value":"example-value"},{"key":"extra_headers","type":"text","description":"*(optional)* | JSON object of HTTP headers | Type: string","value":"example-value"},{"key":"user_agent","type":"text","description":"*(optional)* | Custom User-Agent | Type: string","value":"example-value"},{"key":"wait_until","type":"text","description":"*(optional)* | Navigation completion event | Type: string | Allowed: load, domcontentloaded, networkidle0, networkidle2","value":"networkidle0"},{"key":"timeout","type":"text","description":"*(optional)* | Navigation timeout in ms | Type: integer","value":"60000"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Convert webpage URL to PDF with full browser support (cookies, headers, inject CSS/JS)\n\n---\n**Tool-ID:** `po_pdfstudio_url_to` • **Cost:** 30 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_url_to`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"url","type":"text","description":"**REQUIRED** | URL to convert (http:// or https://) | Type: string","value":"https://example.com/callback"},{"key":"screen_width","type":"text","description":"*(optional)* | Browser viewport width in pixels | Type: integer","value":"1920"},{"key":"screen_height","type":"text","description":"*(optional)* | Browser viewport height in pixels | Type: integer","value":"1080"},{"key":"page_size","type":"text","description":"*(optional)* | PDF page size | Type: string | Allowed: A4, A3, A5, Letter, Legal, Tabloid","value":"A4"},{"key":"page_orientation","type":"text","description":"*(optional)* | Page orientation | Type: string | Allowed: portrait, landscape","value":"portrait"},{"key":"page_margins","type":"text","description":"*(optional)* | Page margins in pixels | Type: integer","value":"20"},{"key":"scale","type":"text","description":"*(optional)* | Scale factor 0.1-2.0 | Type: string","value":"1"},{"key":"print_background","type":"text","description":"*(optional)* | Print background colors/images (true/false) | Type: string | Allowed: true, false","value":"true"},{"key":"page_ranges","type":"text","description":"*(optional)* | Pages to print, e.g. 1-5,8 | Type: string","value":"example-value"},{"key":"header_template","type":"text","description":"*(optional)* | HTML header template | Type: string","value":"example-value"},{"key":"footer_template","type":"text","description":"*(optional)* | HTML footer template | Type: string","value":"example-value"},{"key":"remove_classes","type":"text","description":"*(optional)* | CSS selectors to remove | Type: string","value":"example-value"},{"key":"inject_css","type":"text","description":"*(optional)* | Custom CSS to inject | Type: string","value":"example-value"},{"key":"inject_js","type":"text","description":"*(optional)* | JavaScript to execute | Type: string","value":"example-value"},{"key":"cookies","type":"text","description":"*(optional)* | JSON array of cookies | Type: string","value":"example-value"},{"key":"extra_headers","type":"text","description":"*(optional)* | JSON object of HTTP headers | Type: string","value":"example-value"},{"key":"user_agent","type":"text","description":"*(optional)* | Custom User-Agent | Type: string","value":"example-value"},{"key":"wait_until","type":"text","description":"*(optional)* | Navigation completion event | Type: string | Allowed: load, domcontentloaded, networkidle0, networkidle2","value":"networkidle0"},{"key":"timeout","type":"text","description":"*(optional)* | Navigation timeout in ms | Type: integer","value":"60000"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654454.413_32594e7c045b96b392b9334cfe3ffe7a\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"5796.58ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YHW3kZRWYAUA1TQG4BES0PXDJSBDF7Tl9ZMwtGLQFHdQUVM1VEOlFGehkfKlAIfl8LJG9eeAk1egVbbw5NdwJDdh1afANECFZRZQUQPQNGK1gKMgNXNX8bAF0zC0B3CRMtVkcxVUdqbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5xAEY\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.6359515190124512,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.636,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654458.3125262\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654456.6356_f952627afa69af5fdafb29f3f74b1e3a_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 2062,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 636,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 364,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5639\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5643.66,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.7,\n        \"speed_factor\": 36.4,\n        \"performance\": \"36.4x faster than expected 🚀\"\n    }\n}"}]},{"name":"Edit PDF metadata","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Edit PDF metadata (title, author, etc.)\n\n---\n**Tool-ID:** `po_pdfstudio_edit_metadata` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_edit_metadata`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF files | Type: array","src":null},{"key":"operation","type":"text","description":"*(optional)* | Operation: edit (modify metadata fields), remove (clear all metadata), read (return current metadata) | Type: string | Allowed: edit, remove, read","value":"edit"},{"key":"metadata","type":"text","description":"*(optional)* | Metadata object with fields to set | Type: object","value":"{}"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Edit PDF metadata (title, author, etc.)\n\n---\n**Tool-ID:** `po_pdfstudio_edit_metadata` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_edit_metadata`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF files | Type: array","src":null},{"key":"operation","type":"text","description":"*(optional)* | Operation: edit (modify metadata fields), remove (clear all metadata), read (return current metadata) | Type: string | Allowed: edit, remove, read","value":"edit"},{"key":"metadata","type":"text","description":"*(optional)* | Metadata object with fields to set | Type: object","value":"{}"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654423.6657_6c33e053875178e85679aae91ed941a2\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"4462.84ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YHXH4ZR2EDVw0AQWwGTSgJCTUGADB8T18JZQMQLV5Je1BPYA5HO1VAKhkfKlAIfl8LJG9eeAk1egVbbw5NdwJEcR1YewBDCAVQZwJMOAUTLAwOMwRWNS9NCAszVE55XEl-DUQwUUE6bBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5xBE4\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.6994514465332031,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.6112901568412781,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.699,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654426.1319084\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654424.2719_19045aab3eea573ffbb9a683dd92a76d_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 396,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 699,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 432,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 4263\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 4334.07,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.1,\n        \"speed_factor\": 47.4,\n        \"performance\": \"47.4x faster than expected 🚀\"\n    }\n}"}]},{"name":"Merge pdf","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Merge multiple PDFs into one\n\n---\n**Tool-ID:** `po_pdfstudio_merge` • **Cost:** 20 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_merge`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"pofids","type":"text","description":"*(optional)* | Array of PaperOffice Document IDs (pofids) to merge in order. Min 2, max 50. | Type: array","value":"[\"item-1\"]"},{"key":"file_urls","type":"file","description":"*(optional)* | Alternative: public URLs of PDFs to download and merge. | Type: array","src":null},{"key":"pofid","type":"text","description":"*(optional)* | Single PaperOffice Document ID (rarely useful alone — merge expects 2+). | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"order","type":"text","description":"*(optional)* | Optional explicit merge order as 0-based indices into pofids/file_urls. | Type: array","value":"[1]"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"output_filename","type":"text","description":"*(optional)* | Name of the merged output file | Type: string","value":"merged.pdf"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Merge multiple PDFs into one\n\n---\n**Tool-ID:** `po_pdfstudio_merge` • **Cost:** 20 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_merge`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"pofids","type":"text","description":"*(optional)* | Array of PaperOffice Document IDs (pofids) to merge in order. Min 2, max 50. | Type: array","value":"[\"item-1\"]"},{"key":"file_urls","type":"file","description":"*(optional)* | Alternative: public URLs of PDFs to download and merge. | Type: array","src":null},{"key":"pofid","type":"text","description":"*(optional)* | Single PaperOffice Document ID (rarely useful alone — merge expects 2+). | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"order","type":"text","description":"*(optional)* | Optional explicit merge order as 0-based indices into pofids/file_urls. | Type: array","value":"[1]"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"output_filename","type":"text","description":"*(optional)* | Name of the merged output file | Type: string","value":"merged.pdf"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654428.0912_ffce62fac63718fb99381055eab693b1\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"8116.09ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YHXHUZQW4GUw1XRW1XRCwLCjMEWTUqT18JaVZOKgESewRDZVMQagNBfBkfKlAIfl8LJG9eeAk1egVbbw5NdwJEeh1edAVHCFJUZlNFPAcQKg5XNlJWNS9BXVU0CxV5CEV7UBNhB0BsbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5xBUA\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.40227341651916504,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604424774646759,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.402,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654432.2661028\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654429.6128_2b58fa89d06c7c6883c3915fa57e6cdf_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1410,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 402,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1373,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 8059\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 8065.15,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 3.9,\n        \"speed_factor\": 25.5,\n        \"performance\": \"25.5x faster than expected 🚀\"\n    }\n}"}]},{"name":"Remove password from PDF","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"PDF Password Removal Remove password protection from PDF requires current password. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Protected PDF | | password | string | Yes | Current password | | priority | int | No .\n\n---\n**Tool-ID:** `po_pdfstudio_security_password_remove` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_security_password_remove`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaproOffice File ID to decrypt the PDFs | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"password","type":"text","description":"**REQUIRED** | AktuCurrent PDF password (required to remove protection) | Type: string","value":"REPLACE_WITH_PASSWORD"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"PDF Password Removal Remove password protection from PDF requires current password. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Protected PDF | | password | string | Yes | Current password | | priority | int | No .\n\n---\n**Tool-ID:** `po_pdfstudio_security_password_remove` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_security_password_remove`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaproOffice File ID to decrypt the PDFs | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"password","type":"text","description":"**REQUIRED** | AktuCurrent PDF password (required to remove protection) | Type: string","value":"REPLACE_WITH_PASSWORD"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output_files\": []\n    }\n}"}]},{"name":"Remove restrictions","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"PDF Remove Restrictions Remove printing/editing restrictions. Parameters: | Param | Type | Required | |-------|------|----------| | file_1 | file | Yes | | password | string | No |\n\n---\n**Tool-ID:** `po_pdfstudio_security_remove_restrictions` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_security_remove_restrictions`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"PDF Remove Restrictions Remove printing/editing restrictions. Parameters: | Param | Type | Required | |-------|------|----------| | file_1 | file | Yes | | password | string | No |\n\n---\n**Tool-ID:** `po_pdfstudio_security_remove_restrictions` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_security_remove_restrictions`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654623.9462_0a35b25ebe00b4e995d955c5e7288853\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"4362.29ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YFXH4ZSGMDUA1SRGEGFChYCTYGBGcoSl1cNgEQfQBFKVZAawFDYVERLxkfKlAIfl8LJG9eeAk1egVbbw5NdwBEcR1XeQBECFdVagIVOFQTLwwKZFBTN3oeCgtjCkIrWkZ1AkBqVRA_bBMgWgoaAVFjBVVoQAkvRVt8BVlsDU53BE4\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.70334792137146,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.6112901568412781,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.703,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654626.3466623\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654624.4659_ba4a8916f6d0530ce5e58c5ce8a03361_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 386,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 703,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 434,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 4230\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 4235.29,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.1,\n        \"speed_factor\": 48.5,\n        \"performance\": \"48.5x faster than expected 🚀\"\n    }\n}"}]},{"name":"Rotate pdf","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Rotate individual or all pages of a PDF document by 90, 180, or 270 degrees.\n\n---\n**Tool-ID:** `po_pdfstudio_rotate` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_rotate`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF files | Type: array","src":null},{"key":"angle","type":"text","description":"*(optional)* | Rotation angle in degrees (clockwise): 90, 180, or 270 | Type: string | Allowed: 90, 180, 270","value":"90"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"page_range","type":"text","description":"*(optional)* | Pages to rotate: \"all\" (default) or specific pages like \"1-5,7,9-10\" | Type: string","value":"all"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Rotate individual or all pages of a PDF document by 90, 180, or 270 degrees.\n\n---\n**Tool-ID:** `po_pdfstudio_rotate` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_rotate`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF files | Type: array","src":null},{"key":"angle","type":"text","description":"*(optional)* | Rotation angle in degrees (clockwise): 90, 180, or 270 | Type: string | Allowed: 90, 180, 270","value":"90"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"page_range","type":"text","description":"*(optional)* | Pages to rotate: \"all\" (default) or specific pages like \"1-5,7,9-10\" | Type: string","value":"all"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654436.424_4cba19abf7d09d733d04020eab63e896\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"5687.97ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YHXXsZRWUBUw0FEmkBFH0JV2cFUDZ_SA8OYgpALAFIe1ZPawcSPAETcRkfKlAIfl8LJG9eeAk1egVbbw5NdwJFdB1afwJHCAADYgUVbQVNfg9eNQdRZShKAVsyC095Wkl1BBE3BRJhbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5xAkc\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.6594524383544922,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.6112901568412781,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.659,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654440.169053\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654438.4791_0df99c04a9edc6eeacd1d8e28128e397_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1891,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 659,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 397,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5498\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5549.24,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.7,\n        \"speed_factor\": 37,\n        \"performance\": \"37x faster than expected 🚀\"\n    }\n}"}]},{"name":"Split PDF","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Split PDF into individual pages\n\n---\n**Tool-ID:** `po_pdfstudio_split` • **Cost:** 20 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_split`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF file to split | Type: array","src":null},{"key":"mode","type":"text","description":"*(optional)* | Split mode: burst = every page becomes a separate PDF (default), ranges = custom page ranges via splits parameter | Type: string | Allowed: burst, ranges","value":"burst"},{"key":"splits","type":"text","description":"*(optional)* | For ranges mode: Array of split definitions. Each item has pages (e.g. 1-5,7) and optional filename. | Type: array","value":"[]"},{"key":"output_prefix","type":"text","description":"*(optional)* | prefix for burst mode output filenames (default: page_) | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Split PDF into individual pages\n\n---\n**Tool-ID:** `po_pdfstudio_split` • **Cost:** 20 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_split`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF file to split | Type: array","src":null},{"key":"mode","type":"text","description":"*(optional)* | Split mode: burst = every page becomes a separate PDF (default), ranges = custom page ranges via splits parameter | Type: string | Allowed: burst, ranges","value":"burst"},{"key":"splits","type":"text","description":"*(optional)* | For ranges mode: Array of split definitions. Each item has pages (e.g. 1-5,7) and optional filename. | Type: array","value":"[]"},{"key":"output_prefix","type":"text","description":"*(optional)* | prefix for burst mode output filenames (default: page_) | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654442.314_d9be391fca3dc86ca6210431506c4440\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"5991.98ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YHWn8ZQmYBVg0CFj8HFHlYXzMCUzd8GgpeZAdAKlpFeVBANAJMbQQUfRkfKlAIfl8LJG9eeAk1egVbbw5NdwJCcB1dfAJCCAcHNAMVaVRFKghdNAQDYHhMDFs0UEJ7XEYqAU9mABVtbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5xAk4\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.6832687854766846,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.6112901568412781,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.683,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654446.2546413\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654444.2707_46a046de70ff3d08ab1a56fc4f825607_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1769,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 683,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 437,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5770\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5848,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.8,\n        \"speed_factor\": 35.1,\n        \"performance\": \"35.1x faster than expected 🚀\"\n    }\n}"}]},{"name":"Split PDF via AI","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"PDF AI Split Automatically detect and split multi-document PDFs into individual files using AI Vision analysis. --- When to Use - Batch Scanning - Split a stack of scanned documents into individual files - Mail Processing - Separate multiple letters/invoices from one scan - Archive Digitization -.\n\n---\n**Tool-ID:** `po_editing_pdf_ai_split` • **Cost:** 50 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_editing_pdf_ai_split`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file","type":"file","description":"**REQUIRED** | PDF file to analyze and split | Type: string","src":null},{"key":"template","type":"text","description":"*(optional)* | Workflow template name required | Type: string","value":"pdf_ai_split"},{"key":"naming_instruction","type":"text","description":"*(optional)* | Naming pattern for output files optional | Type: string","value":"documenttyp_Datum_Absender"},{"key":"locale","type":"text","description":"*(optional)* | Locale for ALL output: 'de_DE', 'en_US', 'fr_FR' - affects document_type, reasoning, filenames | Type: string","value":"de_DE"},{"key":"document_types","type":"text","description":"*(optional)* | Allowed types, comma-separated: 'invoice,Schreiben,quote' optional | Type: string","value":"example-value"},{"key":"date_format","type":"text","description":"*(optional)* | Date format: 'YYYY-MM-DD', 'DD.MM.YYYY', 'MM/DD/YYYY' optional | Type: string","value":"DD.MM.YYYY"},{"key":"include_document_type","type":"text","description":"*(optional)* | Include document_type in response default: false | Type: string","value":"false"},{"key":"include_date","type":"text","description":"*(optional)* | Include date in response default: false | Type: string","value":"false"},{"key":"include_sender","type":"text","description":"*(optional)* | Include sender in response default: false | Type: string","value":"false"},{"key":"include_reasoning","type":"text","description":"*(optional)* | Include reasoning in response default: false | Type: string","value":"false"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"900"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"PDF AI Split Automatically detect and split multi-document PDFs into individual files using AI Vision analysis. --- When to Use - Batch Scanning - Split a stack of scanned documents into individual files - Mail Processing - Separate multiple letters/invoices from one scan - Archive Digitization -.\n\n---\n**Tool-ID:** `po_editing_pdf_ai_split` • **Cost:** 50 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_editing_pdf_ai_split`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file","type":"file","description":"**REQUIRED** | PDF file to analyze and split | Type: string","src":null},{"key":"template","type":"text","description":"*(optional)* | Workflow template name required | Type: string","value":"pdf_ai_split"},{"key":"naming_instruction","type":"text","description":"*(optional)* | Naming pattern for output files optional | Type: string","value":"documenttyp_Datum_Absender"},{"key":"locale","type":"text","description":"*(optional)* | Locale for ALL output: 'de_DE', 'en_US', 'fr_FR' - affects document_type, reasoning, filenames | Type: string","value":"de_DE"},{"key":"document_types","type":"text","description":"*(optional)* | Allowed types, comma-separated: 'invoice,Schreiben,quote' optional | Type: string","value":"example-value"},{"key":"date_format","type":"text","description":"*(optional)* | Date format: 'YYYY-MM-DD', 'DD.MM.YYYY', 'MM/DD/YYYY' optional | Type: string","value":"DD.MM.YYYY"},{"key":"include_document_type","type":"text","description":"*(optional)* | Include document_type in response default: false | Type: string","value":"false"},{"key":"include_date","type":"text","description":"*(optional)* | Include date in response default: false | Type: string","value":"false"},{"key":"include_sender","type":"text","description":"*(optional)* | Include sender in response default: false | Type: string","value":"false"},{"key":"include_reasoning","type":"text","description":"*(optional)* | Include reasoning in response default: false | Type: string","value":"false"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 900","value":"900"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654328.0845_ab8695465587702c24142952f7c95d60\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"5472.91ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YAXHUZQW8BUg0DEWEMFy0JWTVVBDB9SVoLYANBLwESelFOMQJBPFIRfRkfKlAIfl8LJG9eeAk1egVbbw5NdwVEeh1edQJGCAYAaggWPQVDLF8KMwVQMC1ICFoxCxV4XUgvAUI3VhBtbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5yBUU\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.6907424926757812,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.6112901568412781,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.691,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654331.589059\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654329.8444_826f8d8ee74b3b304f5ae72d73e9752e_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1592,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 691,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 394,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5244\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5341.58,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.6,\n        \"speed_factor\": 38.5,\n        \"performance\": \"38.5x faster than expected 🚀\"\n    }\n}"}]},{"name":"Unlock PDF with password","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Remove password from PDF (password required)\n\n---\n**Tool-ID:** `po_pdfstudio_unlock_with_password` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_unlock_with_password`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF files | Type: array","src":null},{"key":"password","type":"text","description":"**REQUIRED** | Current password | Type: string","value":"REPLACE_WITH_PASSWORD"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Remove password from PDF (password required)\n\n---\n**Tool-ID:** `po_pdfstudio_unlock_with_password` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_pdfstudio_unlock_with_password`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | PDF files | Type: array","src":null},{"key":"password","type":"text","description":"**REQUIRED** | Current password | Type: string","value":"REPLACE_WITH_PASSWORD"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654448.4695_14c1ce6abf988e853cb4258a4ed88087\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"5779.95ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YHWnUZRWAEXQ0HR2gAFytYV2ABADF_GgoIZwNAKlwQeQQSYQBGO1EXcBkfKlAIfl8LJG9eeAk1egVbbw5NdwJCeh1aegdJCAJWYwQWO1RNeQsOMgcDYC5PCFs0Vhd7CBR_A0UwVRZgbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5xA0I\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.64095139503479,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.6112901568412781,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.641,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654452.2700465\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654450.5793_476c5b464fffe49cb8dc26474970e382_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1977,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 641,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 380,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5557\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5645.01,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.7,\n        \"speed_factor\": 36.4,\n        \"performance\": \"36.4x faster than expected 🚀\"\n    }\n}"}]}]},{"name":"🔒 Document Anonymization","description":"# Document Anonymization\n\nAI-powered document anonymization: detect and redact personal data (names, addresses, IBANs, etc.) from documents and images. GDPR-compliant data protection.","item":[{"name":"Anonymize document (single-step)","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Complete GDPR-compliant anonymization in one step: PDF Upload → OCR → PII Detection → Redaction → Anonymized PDF. Combines po_anonymization_pii_detect and po_anonymization_redaction_apply without intermediate steps. Configurable via categories, whitelist, and custom instructions.\n\n---\n**Tool-ID:** `po_anonymization_anonymize_document` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_anonymization_anonymize_document`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"template","type":"text","description":"*(optional)* | Workflow template | Type: string","value":"document_anonymize"},{"key":"file","type":"file","description":"**REQUIRED** | PDF or image file to anonymize | Type: string","src":null},{"key":"pofid","type":"text","description":"*(optional)* | Or: existing DMS document POFID | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"redact_categories","type":"text","description":"*(optional)* | Categories: all, none, names, addresses, phone, email, iban, tax_ids, dates, financial, contact, identity | Type: string","value":"all"},{"key":"whitelist","type":"text","description":"*(optional)* | Comma-separated terms to NEVER redact | Type: string","value":"example-value"},{"key":"custom_redact","type":"text","description":"*(optional)* | Additional terms to ALWAYS redact | Type: string","value":"example-value"},{"key":"custom_instructions","type":"text","description":"*(optional)* | Free-text AI instructions e.g. Also redact all prices | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"900"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Complete GDPR-compliant anonymization in one step: PDF Upload → OCR → PII Detection → Redaction → Anonymized PDF. Combines po_anonymization_pii_detect and po_anonymization_redaction_apply without intermediate steps. Configurable via categories, whitelist, and custom instructions.\n\n---\n**Tool-ID:** `po_anonymization_anonymize_document` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_anonymization_anonymize_document`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"template","type":"text","description":"*(optional)* | Workflow template | Type: string","value":"document_anonymize"},{"key":"file","type":"file","description":"**REQUIRED** | PDF or image file to anonymize | Type: string","src":null},{"key":"pofid","type":"text","description":"*(optional)* | Or: existing DMS document POFID | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"redact_categories","type":"text","description":"*(optional)* | Categories: all, none, names, addresses, phone, email, iban, tax_ids, dates, financial, contact, identity | Type: string","value":"all"},{"key":"whitelist","type":"text","description":"*(optional)* | Comma-separated terms to NEVER redact | Type: string","value":"example-value"},{"key":"custom_redact","type":"text","description":"*(optional)* | Additional terms to ALWAYS redact | Type: string","value":"example-value"},{"key":"custom_instructions","type":"text","description":"*(optional)* | Free-text AI instructions e.g. Also redact all prices | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 900","value":"900"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654271.3318_4d82887e3daee496bdd20f0a7c3598b7\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"9146.51ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YBWXwZQmQGUw0JRW0FEHtdV2cKWGF_Sg5dY1FGew4SdQYRNgdAPVdMexkfKlAIfl8LJG9eeAk1egVbbw5NdwRBcx1dfgVHCAxUZgERa1FNfgBWYgdTZHtLWl1lBBV3ChcoBEM2U01rbBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5zAU4\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.6882007122039795,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.688,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654276.031887\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654273.8713_8f1bce6639a685470b0118d4cf7c0e29_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 2306,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 688,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 472,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 6657\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 6728.41,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 3.3,\n        \"speed_factor\": 30.5,\n        \"performance\": \"30.5x faster than expected 🚀\"\n    }\n}"}]},{"name":"Apply redaction","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Step 2: Apply Redaction. Applies black boxes to the specified regions and generates the final PDF. Important: Use the same job context from Step 1 (pass the job_id from the detect/preview response).\n\n---\n**Tool-ID:** `po_anonymization_apply_redaction` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_anonymization_apply_redaction`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"text","description":"**REQUIRED** | JSON array of original_images URLs from Step 1 | Type: string","value":"[\"https://api.paperoffice.ai/dev/job/download/YOUR_IMAGE_URL_FROM_STEP1\"]"},{"key":"boxes_by_page","type":"text","description":"*(optional)* | JSON object: page number 5 digits → array of box indices from redact_box_ids | Type: string","value":"{\"00001\": [0, 1, 2, 5, 7]}"},{"key":"redact_color","type":"text","description":"*(optional)* | Redaction color default: black | Type: string","value":"#000000"},{"key":"output_pdf","type":"text","description":"*(optional)* | true = output PDF, false = output redacted images | Type: string","value":"true"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"900"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Step 2: Apply Redaction. Applies black boxes to the specified regions and generates the final PDF. Important: Use the same job context from Step 1 (pass the job_id from the detect/preview response).\n\n---\n**Tool-ID:** `po_anonymization_apply_redaction` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_anonymization_apply_redaction`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"files","type":"text","description":"**REQUIRED** | JSON array of original_images URLs from Step 1 | Type: string","value":"[\"https://api.paperoffice.ai/dev/job/download/YOUR_IMAGE_URL_FROM_STEP1\"]"},{"key":"boxes_by_page","type":"text","description":"*(optional)* | JSON object: page number 5 digits → array of box indices from redact_box_ids | Type: string","value":"{\"00001\": [0, 1, 2, 5, 7]}"},{"key":"redact_color","type":"text","description":"*(optional)* | Redaction color default: black | Type: string","value":"#000000"},{"key":"output_pdf","type":"text","description":"*(optional)* | true = output PDF, false = output redacted images | Type: string","value":"true"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 900","value":"900"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654278.1333_037dbf9eabaf4315e76edbe9c6c249e2\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"5072.73ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YBWXUZQGQAUQ0IRm1QRH4KCTMKWGd6SAkIaQASelxFKlVBZQBFOFBMKxkfKlAIfl8LJG9eeAk1egVbbw5NdwRBeh1ffgNFCA1XZlRFbgYTKgBWZAJRYy5BCwlkVkIoWUd7A0YzVE07bBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5zDkU\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.533944845199585,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604068398475647,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.534,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654281.519369\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654280.0077_f825a5da5a764fb1906543f1f9d242d6_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1757,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 534,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 340,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 5004\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 5032.61,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 2.4,\n        \"speed_factor\": 40.8,\n        \"performance\": \"40.8x faster than expected 🚀\"\n    }\n}"}]},{"name":"Detect PII preview","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/document_intelligence/entities/{document_id}","host":["{{base_url}}"],"path":["document_intelligence","entities","{document_id}"],"query":[{"key":"template","value":"document_anonymize_preview","description":"*(optional)* | Workflow: PDF → PNG → OCR → PII Detection | Type: string","disabled":true},{"key":"file","value":"example-value","description":"**REQUIRED** | PDF or Image file PNG, JPG | Type: string","disabled":false},{"key":"pofid","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf","description":"*(optional)* | Optional PaproOffice DMS document ID instead of file | Type: string","disabled":true},{"key":"redact_categories","value":"all","description":"*(optional)* | Categories: all, none, names, addresses, phone, email, iban, tax_ids, dates, financial, contact, identity | Type: string","disabled":true},{"key":"whitelist","value":"example-value","description":"*(optional)* | Terms to NEVER mark for redaction comma-separated | Type: string","disabled":true},{"key":"custom_redact","value":"example-value","description":"*(optional)* | Additional terms to ALWAYS mark for redaction | Type: string","disabled":true},{"key":"custom_instructions","value":"example-value","description":"*(optional)* | Free-text instructions for AI e.g. 'Also redact all prices' | Type: string","disabled":true},{"key":"priority","value":"100","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","disabled":true}]},"description":"Step 1: Detect PII Preview Analyzes document and returns detected PII with bounding boxes. Response Structure: json { \"status\": \"success\", \"job_result\": { \"workflow_output\": { \"original_images\": \"https://api.paperoffice.ai/dev/job/download/ABC123\" , \"simplified_boxes\": { \"text\": \"Max Mustermann\",.\n\n---\n**Tool-ID:** `po_anonymization_detect_pii_preview` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_anonymization_detect_pii_preview`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Run anonymization full workflow example","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Complete Workflow Example This example shows Step 1 Preview. After running this: 1. Copy the original_images URL from the response 2. Copy the redact_box_ids array 3. Use them in Step 2 Apply Redaction Workflow: ┌───────────────────────────?.\n\n---\n**Tool-ID:** `po_anonymization_example_full_workflow` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_anonymization_example_full_workflow`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"template","type":"text","description":"*(optional)* | Template | Type: string","value":"document_anonymize_preview"},{"key":"file","type":"file","description":"**REQUIRED** | Upload your PDF here | Type: string","src":null},{"key":"redact_categories","type":"text","description":"*(optional)* | Only redact contact information | Type: string","value":"contact"},{"key":"whitelist","type":"text","description":"*(optional)* | Keep these company names visible | Type: string","value":"PaproOffice,ACME Corp"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"900"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/workflow","host":["{{base_url}}"],"path":["job","add","workflow"]},"description":"Complete Workflow Example This example shows Step 1 Preview. After running this: 1. Copy the original_images URL from the response 2. Copy the redact_box_ids array 3. Use them in Step 2 Apply Redaction Workflow: ┌───────────────────────────?.\n\n---\n**Tool-ID:** `po_anonymization_example_full_workflow` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_anonymization_example_full_workflow`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Pipeline:** `workflow` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"template","type":"text","description":"*(optional)* | Template | Type: string","value":"document_anonymize_preview"},{"key":"file","type":"file","description":"**REQUIRED** | Upload your PDF here | Type: string","src":null},{"key":"redact_categories","type":"text","description":"*(optional)* | Only redact contact information | Type: string","value":"contact"},{"key":"whitelist","type":"text","description":"*(optional)* | Keep these company names visible | Type: string","value":"PaproOffice,ACME Corp"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 900","value":"900"},{"key":"client_wait","type":"text","description":"*(optional)* | Connection hold: true (default) = wait on this HTTP request up to ~5 min (~295s), then result or HTTP 202 + poll_url. false = immediate job_id. | Type: boolean","value":"true","disabled":true},{"key":"async_only","type":"text","description":"*(optional)* | Same as client_wait=false: immediate job_id — poll GET /job/get/{job_id} every 5–10s. | Type: boolean","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"job_id\": \"poai-job_900_1775654283.2787_242fdc9a632778bce6012e50ff8e13c0\",\n    \"message\": \"Job processed successfully\",\n    \"model\": \"basic\",\n    \"operation\": \"document_idp\",\n    \"pipeline\": \"workflow\",\n    \"processing_time\": \"7719.94ms\",\n    \"result\": {\n        \"pages_idp\": [\n            {\n                \"suggested_fields\": []\n            }\n        ],\n        \"pages_images\": {\n            \"00001\": \"https://api.paperoffice.ai/latest/job/download/ZBVXGX9AFyNcGD9fWCZSGSkcRHxbBiseETxUDWtaCCpmU3sCM2sPT3YAQ3YBVn4ZQ28EVA1QRGxRQ3pdC2cHWWZ8QQ9YMwUVfFtBdVJPNlYWaFcXLBkfKlAIfl8LJG9eeAk1egVbbw5NdwROcR1cdQdACFVVZ1VCalERfg1XZQRYZX4bDg5iUUZ3XkkoVRVjUxY8bBMgWgoaAVFjBVVoQAkvRVt8BVlsDU5zD0Y\"\n        },\n        \"pages_aiocr\": {\n            \"simplified_boxes\": [],\n            \"simplified_boxes_compact\": \"\",\n            \"pages\": {\n                \"00001\": {\n                    \"ocr_text\": \"\",\n                    \"line_count\": 0,\n                    \"confidence_avg\": 0,\n                    \"processing_time\": 0.416431188583374,\n                    \"char_count\": 0,\n                    \"original_image_width\": 1545,\n                    \"original_image_height\": 2000,\n                    \"language\": {\n                        \"primary\": \"unknown\",\n                        \"primary_name\": \"Unknown\",\n                        \"confidence\": 0,\n                        \"all_detected\": []\n                    },\n                    \"bounding_boxes\": [],\n                    \"simplified_boxes\": [],\n                    \"qr_barcode_count\": 0,\n                    \"layout_data\": [\n                        {\n                            \"label\": \"Form\",\n                            \"confidence\": 0.604424774646759,\n                            \"position\": 0,\n                            \"polygon\": [\n                                [\n                                    9.052734375,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    0\n                                ],\n                                [\n                                    1535.947265625,\n                                    2000\n                                ],\n                                [\n                                    9.052734375,\n                                    2000\n                                ]\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"summary\": {\n                \"total_pages\": 1,\n                \"total_lines\": 0,\n                \"total_chars\": 0,\n                \"avg_confidence\": 0,\n                \"total_processing_time\": 0.416,\n                \"combined_text\": \"***Page 1 of 1***\\n\\n\",\n                \"poaiocr_extracted_fulltext\": \"***Page 1 of 1***\\n\\n\",\n                \"total_bounding_boxes\": 0,\n                \"processing_engine\": \"paperoffice_ai_ocr_neural_v3.0\",\n                \"ocr_tier\": \"ultra\",\n                \"created_at\": \"1775654287.0507016\",\n                \"searchable_pdf_path\": \"/tmp/processing/poai-job_899_1775654284.6993_87a37f33de4ed8aa0b0b648408f174ac_searchable.pdf\"\n            },\n            \"total_pages\": 1,\n            \"total_lines\": null,\n            \"total_chars\": null,\n            \"avg_confidence\": null,\n            \"markdown\": null\n        },\n        \"fulltext\": \"***Page 1 of 1***\\n\\n\",\n        \"steps\": [\n            {\n                \"id\": \"pdf2png\",\n                \"name\": \"Convert PDF to PNG\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1360,\n                \"server\": null\n            },\n            {\n                \"id\": \"ocr\",\n                \"name\": \"AI-OCR with Layout-Detection\",\n                \"status\": \"completed\",\n                \"duration_ms\": 416,\n                \"server\": \"api-server\"\n            },\n            {\n                \"id\": \"extract\",\n                \"name\": \"LLM Datenextraktion\",\n                \"status\": \"completed\",\n                \"duration_ms\": 1418,\n                \"server\": null\n            }\n        ],\n        \"total_steps\": 3,\n        \"duration_ms\": 7644\n    },\n    \"status\": \"success\",\n    \"timing\": {\n        \"actual_ms\": 7662.81,\n        \"expected_ms\": 205500,\n        \"timeout_ms\": 295000,\n        \"accuracy_percent\": 3.7,\n        \"speed_factor\": 26.8,\n        \"performance\": \"26.8x faster than expected 🚀\"\n    }\n}"}]}]},{"name":"📁 Headless DMS","description":"# Headless DMS (Document Management System)\n\nFull-featured headless document management: upload, search, version, tag, and organize documents. Includes semantic search, entity extraction, knowledge graph, lifecycle management, and workspace isolation.","item":[{"name":"Dissolve (unstaple) folder","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/folder-dissolve","host":["{{base_url}}"],"path":["documents","folder-dissolve"]},"description":"Folder Dissolve Unstaple Dissolve a document folder - unstaple the documents. --- When to Use - Remove document grouping - Split a bundle back into individual documents - Reorganize documents into different folders - Workflow: auto-dissolve after processing --- How It Works 1. Identi.\n\n---\n**Tool-ID:** `po_documents_folders_dissolve` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_folders_dissolve`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"folder_id","type":"text","description":"*(optional)* | ID of the document folder to dissolve (e.g. 'folder_abc123..'). Either folder_id or pofid required. | Type: string","value":"1"},{"key":"pofid","type":"text","description":"*(optional)* | POFID a Documents in the folder. the associated folder is aufgeloest. Alternative zu folder_id. | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/folder-dissolve","host":["{{base_url}}"],"path":["documents","folder-dissolve"]},"description":"Folder Dissolve Unstaple Dissolve a document folder - unstaple the documents. --- When to Use - Remove document grouping - Split a bundle back into individual documents - Reorganize documents into different folders - Workflow: auto-dissolve after processing --- How It Works 1. Identi.\n\n---\n**Tool-ID:** `po_documents_folders_dissolve` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_folders_dissolve`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"folder_id","type":"text","description":"*(optional)* | ID of the document folder to dissolve (e.g. 'folder_abc123..'). Either folder_id or pofid required. | Type: string","value":"1"},{"key":"pofid","type":"text","description":"*(optional)* | POFID a Documents in the folder. the associated folder is aufgeloest. Alternative zu folder_id. | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"status\": \"success\",\n            \"released_pofids\": [\n                \"example\"\n            ]\n        }\n    }\n}"}]},{"name":"Export document list","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/documents-export","host":["{{base_url}}"],"path":["documents","documents-export"]},"description":"Export Documents Bulk export documents as ZIP archive. Options: - Specific POFIDs - All from workspace\n\n---\n**Tool-ID:** `po_document_lists_documents_export` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_document_lists_documents_export`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"selected_pofids","type":"text","description":"**REQUIRED** | JSON-Array to document POFIDs to export. | Type: array","value":"[\"item-1\"]"},{"key":"export_format","type":"text","description":"**REQUIRED** | Exportformat: xlsx (Excel), csv, json or zip. | Type: string | Allowed: xlsx, csv, json, zip","value":"xlsx"},{"key":"selected_fields","type":"text","description":"**REQUIRED** | JSON-Array to exportierende fields (e.g. ['file_name', 'created_datetime', 'file_size']). | Type: array","value":"[\"item-1\"]"},{"key":"field_order","type":"text","description":"*(optional)* | Optional order the columns in the Export. | Type: array","value":"[\"item-1\"]"},{"key":"include_original_files","type":"text","description":"*(optional)* | Original-files in the Export include (only at ZIP-Format). | Type: boolean","value":"false"},{"key":"include_ocr_text","type":"text","description":"*(optional)* | OCR-extracted Text with export. | Type: boolean","value":"false"},{"key":"include_ocr_bounding_boxes","type":"text","description":"*(optional)* | OCR-Bounding-Boxes (Positionsdaten) with export. | Type: boolean","value":"false"},{"key":"archive_format","type":"text","description":"*(optional)* | Archive-Format at file-Exporten. | Type: string | Allowed: zip, 7z","value":"zip"},{"key":"excel_options","type":"text","description":"*(optional)* | Optional Excel-specific settings (column width, header formatting etc.). | Type: object","value":"{}"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/documents-export","host":["{{base_url}}"],"path":["documents","documents-export"]},"description":"Export Documents Bulk export documents as ZIP archive. Options: - Specific POFIDs - All from workspace\n\n---\n**Tool-ID:** `po_document_lists_documents_export` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_document_lists_documents_export`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"selected_pofids","type":"text","description":"**REQUIRED** | JSON-Array to document POFIDs to export. | Type: array","value":"[\"item-1\"]"},{"key":"export_format","type":"text","description":"**REQUIRED** | Exportformat: xlsx (Excel), csv, json or zip. | Type: string | Allowed: xlsx, csv, json, zip","value":"xlsx"},{"key":"selected_fields","type":"text","description":"**REQUIRED** | JSON-Array to exportierende fields (e.g. ['file_name', 'created_datetime', 'file_size']). | Type: array","value":"[\"item-1\"]"},{"key":"field_order","type":"text","description":"*(optional)* | Optional order the columns in the Export. | Type: array","value":"[\"item-1\"]"},{"key":"include_original_files","type":"text","description":"*(optional)* | Original-files in the Export include (only at ZIP-Format). | Type: boolean","value":"false"},{"key":"include_ocr_text","type":"text","description":"*(optional)* | OCR-extracted Text with export. | Type: boolean","value":"false"},{"key":"include_ocr_bounding_boxes","type":"text","description":"*(optional)* | OCR-Bounding-Boxes (Positionsdaten) with export. | Type: boolean","value":"false"},{"key":"archive_format","type":"text","description":"*(optional)* | Archive-Format at file-Exporten. | Type: string | Allowed: zip, 7z","value":"zip"},{"key":"excel_options","type":"text","description":"*(optional)* | Optional Excel-specific settings (column width, header formatting etc.). | Type: object","value":"{}"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output_files\": [],\n        \"output\": {\n            \"total_exported\": 1,\n            \"format\": \"example\"\n        }\n    }\n}"}]},{"name":"Extract maximum metadata","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/document_intelligence/meta_fields/{pofid}","host":["{{base_url}}"],"path":["document_intelligence","meta_fields","{pofid}"],"query":[{"key":"file_1","value":"example-value","description":"*(optional)* | File 1 | Type: string","disabled":true},{"key":"model","value":"ultra","description":"**REQUIRED** | Model | Type: string","disabled":false},{"key":"idp_collection","value":"variable_metadata","description":"*(optional)* | Idp collection | Type: string","disabled":true},{"key":"idp_fields","value":"example-value","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","disabled":true},{"key":"priority","value":"100","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","disabled":true}]},"description":"Variable Metadata Max Extraction Extract all possible metadata and content from any document. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vis.\n\n---\n**Tool-ID:** `po_doc_analysis_metadata_max_extraction` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_doc_analysis_metadata_max_extraction`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Get document metadata","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/document_intelligence/meta_fields/{pofid}","host":["{{base_url}}"],"path":["document_intelligence","meta_fields","{pofid}"],"query":[{"key":"file_1","value":"example-value","description":"*(optional)* | File 1 | Type: string","disabled":true},{"key":"model","value":"premium","description":"**REQUIRED** | Model | Type: string","disabled":false},{"key":"idp_collection","value":"document_metadata","description":"*(optional)* | Idp collection | Type: string","disabled":true},{"key":"idp_fields","value":"example-value","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","disabled":true},{"key":"priority","value":"100","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","disabled":true}]},"description":"Document Metadata Extract general document metadata. Parameters: | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | file_1 | file | Yes | Document file PDF, PNG, JPG | | model | string | Yes | premium or ultra vision required | | idp_collection | string .\n\n---\n**Tool-ID:** `po_document_analysis_metadata` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_document_analysis_metadata`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"List folders","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/folder-list","host":["{{base_url}}"],"path":["documents","folder-list"]},"description":"Folder List List all document folders staples in a workspace. --- When to Use - Display document bundles in UI - Find folder_id to add/remove documents - Get overview of grouped documents - Check which documents are stapled together --- How It Works 1. Query all folders in specified .\n\n---\n**Tool-ID:** `po_documents_folders_list` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_folders_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"workspace_id","type":"text","description":"*(optional)* | Required: Workspace ID to list folders from | Type: string","value":"1"}]}},"response":[]},{"name":"Run DMS document analysis","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-analysis","host":["{{base_url}}"],"path":["documents","document-analysis"]},"description":"Document Analysis DMS General document classification and metadata extraction. Fields: document_type, date, sender, recipient, subject, keywords Parameter: | Param | Type | Required | |-------|------|----------| | file_1 | file | Yes | | model | string | Yes |\n\n---\n**Tool-ID:** `po_document_analysis_analysis_dms` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_document_analysis_analysis_dms`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | Model | Type: string","value":"ultra"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"document_analysis"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-analysis","host":["{{base_url}}"],"path":["documents","document-analysis"]},"description":"Document Analysis DMS General document classification and metadata extraction. Fields: document_type, date, sender, recipient, subject, keywords Parameter: | Param | Type | Required | |-------|------|----------| | file_1 | file | Yes | | model | string | Yes |\n\n---\n**Tool-ID:** `po_document_analysis_analysis_dms` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_document_analysis_analysis_dms`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.","body":{"mode":"formdata","formdata":[{"key":"file_1","type":"file","description":"*(optional)* | File 1 | Type: string","src":null},{"key":"model","type":"text","description":"**REQUIRED** | Model | Type: string","value":"ultra"},{"key":"idp_collection","type":"text","description":"*(optional)* | Idp collection | Type: string","value":"document_analysis"},{"key":"idp_fields","type":"text","description":"*(optional)* | OPTIONAL: Extra fields as JSON array | Type: string","value":"example-value"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"document_keywords\": [\n                \"example\"\n            ],\n            \"document_name\": \"example\",\n            \"document_type_classification\": \"example\",\n            \"document_save_paths\": [\n                \"example\"\n            ],\n            \"document_summary_short\": \"example\"\n        }\n    }\n}"}]},{"name":"Staple documents into folder","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/folder-create","host":["{{base_url}}"],"path":["documents","folder-create"]},"description":"Folder Create Staple Documents Staple multiple documents together into a document folder. --- When to Use - Group related documents invoice + payment + delivery note - Create document bundles for projects - Organize multi-part documents contract + appendices - Workflow: auto-staple d.\n\n---\n**Tool-ID:** `po_documents_folders_create` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_folders_create`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofids","type":"text","description":"**REQUIRED** | List the PaproOffice-Document IDs (POFIDs) that are to be summarized in the folder. At least 2 are required. | Type: array","value":"[\"item-1\"]"},{"key":"folder_name","type":"text","description":"*(optional)* | Name of the document folder. If empty, it is automatically generated (e.g., '3 linked Documents'). | Type: string","value":"example-value"},{"key":"folder_type","type":"text","description":"*(optional)* | type the folder: 'staple' (geheftete Documents) or 'folder' (folder). | Type: string | Allowed: staple, folder","value":"staple"},{"key":"folder_description","type":"text","description":"*(optional)* | Optional description for the document folder. | Type: string","value":"example-value"},{"key":"parent_pofid","type":"text","description":"*(optional)* | POFParent document ID. Default: first document in the list. | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/folder-create","host":["{{base_url}}"],"path":["documents","folder-create"]},"description":"Folder Create Staple Documents Staple multiple documents together into a document folder. --- When to Use - Group related documents invoice + payment + delivery note - Create document bundles for projects - Organize multi-part documents contract + appendices - Workflow: auto-staple d.\n\n---\n**Tool-ID:** `po_documents_folders_create` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_folders_create`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofids","type":"text","description":"**REQUIRED** | List the PaproOffice-Document IDs (POFIDs) that are to be summarized in the folder. At least 2 are required. | Type: array","value":"[\"item-1\"]"},{"key":"folder_name","type":"text","description":"*(optional)* | Name of the document folder. If empty, it is automatically generated (e.g., '3 linked Documents'). | Type: string","value":"example-value"},{"key":"folder_type","type":"text","description":"*(optional)* | type the folder: 'staple' (geheftete Documents) or 'folder' (folder). | Type: string | Allowed: staple, folder","value":"staple"},{"key":"folder_description","type":"text","description":"*(optional)* | Optional description for the document folder. | Type: string","value":"example-value"},{"key":"parent_pofid","type":"text","description":"*(optional)* | POFParent document ID. Default: first document in the list. | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"folder_id\": \"example\",\n            \"document_count\": 1\n        }\n    }\n}"}]},{"name":"Update folder","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/folder-update","host":["{{base_url}}"],"path":["documents","folder-update"]},"description":"Folder Update Update a document folder's metadata name, description, icon, color. --- When to Use - Rename a document bundle - Add or update folder description - Change folder icon or color for visual organization - Workflow: auto-update folder name based on status --- How It Works 1.\n\n---\n**Tool-ID:** `po_documents_folders_update` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_folders_update`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"folder_id","type":"text","description":"**REQUIRED** | ID of the document folder to update. | Type: string","value":"1"},{"key":"folder_name","type":"text","description":"*(optional)* | New name the document folder. | Type: string","value":"example-value"},{"key":"folder_description","type":"text","description":"*(optional)* | new description of the document folder. | Type: string","value":"example-value"},{"key":"folder_icon","type":"text","description":"*(optional)* | new Icon for the document folder (Emoji or Icon-Name). | Type: string","value":"example-value"},{"key":"folder_color","type":"text","description":"*(optional)* | new color for the document folder (hex color code, e.g. '#3b82f6'). | Type: string","value":"example-value"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/folder-update","host":["{{base_url}}"],"path":["documents","folder-update"]},"description":"Folder Update Update a document folder's metadata name, description, icon, color. --- When to Use - Rename a document bundle - Add or update folder description - Change folder icon or color for visual organization - Workflow: auto-update folder name based on status --- How It Works 1.\n\n---\n**Tool-ID:** `po_documents_folders_update` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_folders_update`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"folder_id","type":"text","description":"**REQUIRED** | ID of the document folder to update. | Type: string","value":"1"},{"key":"folder_name","type":"text","description":"*(optional)* | New name the document folder. | Type: string","value":"example-value"},{"key":"folder_description","type":"text","description":"*(optional)* | new description of the document folder. | Type: string","value":"example-value"},{"key":"folder_icon","type":"text","description":"*(optional)* | new Icon for the document folder (Emoji or Icon-Name). | Type: string","value":"example-value"},{"key":"folder_color","type":"text","description":"*(optional)* | new color for the document folder (hex color code, e.g. '#3b82f6'). | Type: string","value":"example-value"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"folder_id\": \"test\",\n    \"message\": \"Document folder updated\",\n    \"processing_time\": \"81.11ms\",\n    \"status\": \"success\",\n    \"updates\": []\n}"}]},{"name":"Acquire Edit-Session (Presence-Lock)","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-edit-session-acquire/{pofid}","host":["{{base_url}}"],"path":["documents","document-edit-session-acquire","{pofid}"]},"description":"Erwirbt a kooperativen metadata-Editing-Lock for a document. if already a anderer users editiert, is status=readonly zurückgegeben. the Lock is ephemer — er hält maximal 60 seconds without Heartbeat.\n\n---\n**Tool-ID:** `po_documents_edit_session_acquire` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_edit_session_acquire`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaperOffice Document ID (pofid) — as URL-Path-Parameter or in the Body | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"}]}},"response":[]},{"name":"Analyze document vision","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/document_intelligence/vision/{document_id}","host":["{{base_url}}"],"path":["document_intelligence","vision","{document_id}"],"query":[{"key":"document_id","value":"12345","description":"**REQUIRED** | POFID-Hash-String of the document's (e.g. \"5eff6526535e628e2b42198126..\"). source: pofid-field from po_documents_search, po_documents_get or the aktuell geoeffneten document in the Page-Context. NIEMALS a small numeric ID how \"50\" or \"123\" einsetzen - dies leads zu DOCUMENT_NOT_FOUND. if dir no POFID vorliegt, rufe zuerst po_documents_search on. | Type: string","disabled":false},{"key":"include","value":"all","description":"*(optional)* | which data returned be sollen (default: all) | Type: string | Allowed: all, tables, charts, forms, barcodes, layout","disabled":true}]},"description":"Delivers vision analysis data for a document: Extracted tables, charts, forms, barcodes, layout information. Automatically created by the Harvester using AI vision.\n\n---\n**Tool-ID:** `po_intelligence_vision` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_intelligence_vision`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Create Document from Content","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/document_generation/create-from-content","host":["{{base_url}}"],"path":["document_generation","create-from-content"]},"description":"Generate a PDF document from Markdown or HTML content and save it directly to the DMS. Supports tables, lists, code blocks, images, and automatic metadata assignment.\n\n---\n**Tool-ID:** `po_documents_create_from_content` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_create_from_content`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"raw","raw":"{\n    \"content\": \"\",\n    \"content_type\": \"markdown\",\n    \"output_format\": \"pdf\",\n    \"workspace_id\": 0,\n    \"language\": \"de\",\n    \"auto_classify\": false,\n    \"priority\": 100\n}","options":{"raw":{"language":"json"}}}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/document_generation/create-from-content","host":["{{base_url}}"],"path":["document_generation","create-from-content"]},"description":"Generate a PDF document from Markdown or HTML content and save it directly to the DMS. Supports tables, lists, code blocks, images, and automatic metadata assignment.\n\n---\n**Tool-ID:** `po_documents_create_from_content` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_create_from_content`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.","body":{"mode":"raw","raw":"{\n    \"content\": \"\",\n    \"content_type\": \"markdown\",\n    \"output_format\": \"pdf\",\n    \"workspace_id\": 0,\n    \"language\": \"de\",\n    \"auto_classify\": false,\n    \"priority\": 100\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"id\": 12345,\n    \"created_at\": \"2026-04-16T10:00:00Z\"\n}"}]},{"name":"Create Document from Template","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/document_generation/create-from-template","host":["{{base_url}}"],"path":["document_generation","create-from-template"]},"description":"Generate a PDF document from a saved template with variable substitution and save it to the DMS.\n\n---\n**Tool-ID:** `po_documents_create_from_template` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_create_from_template`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"raw","raw":"{\n    \"template_id\": \"\",\n    \"variables\": {},\n    \"output_format\": \"pdf\",\n    \"workspace_id\": 0,\n    \"auto_classify\": false,\n    \"priority\": 100\n}","options":{"raw":{"language":"json"}}}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/document_generation/create-from-template","host":["{{base_url}}"],"path":["document_generation","create-from-template"]},"description":"Generate a PDF document from a saved template with variable substitution and save it to the DMS.\n\n---\n**Tool-ID:** `po_documents_create_from_template` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_create_from_template`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.","body":{"mode":"raw","raw":"{\n    \"template_id\": \"\",\n    \"variables\": {},\n    \"output_format\": \"pdf\",\n    \"workspace_id\": 0,\n    \"auto_classify\": false,\n    \"priority\": 100\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"id\": 12345,\n    \"created_at\": \"2026-04-16T10:00:00Z\"\n}"}]},{"name":"Create Document Template","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/document_generation/template-create","host":["{{base_url}}"],"path":["document_generation","template-create"]},"description":"Create a new document template with HTML content and placeholder definitions.\n\n---\n**Tool-ID:** `po_templates_create` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_templates_create`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"raw","raw":"{\n    \"name\": \"\",\n    \"html_content\": \"\",\n    \"category\": \"general\",\n    \"page_format\": \"A4\",\n    \"page_orientation\": \"portrait\",\n    \"margin_top\": 20,\n    \"margin_right\": 15,\n    \"margin_bottom\": 20,\n    \"margin_left\": 15\n}","options":{"raw":{"language":"json"}}}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/document_generation/template-create","host":["{{base_url}}"],"path":["document_generation","template-create"]},"description":"Create a new document template with HTML content and placeholder definitions.\n\n---\n**Tool-ID:** `po_templates_create` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_templates_create`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"raw","raw":"{\n    \"name\": \"\",\n    \"html_content\": \"\",\n    \"category\": \"general\",\n    \"page_format\": \"A4\",\n    \"page_orientation\": \"portrait\",\n    \"margin_top\": 20,\n    \"margin_right\": 15,\n    \"margin_bottom\": 20,\n    \"margin_left\": 15\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"category\": \"general\",\n    \"message\": \"Template successful creates.\",\n    \"name\": \"test\",\n    \"processing_time\": \"51.17ms\",\n    \"status\": \"success\",\n    \"template_id\": \"tpl_test_37e1ce99\"\n}"}]},{"name":"Delete Document Template","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/document_generation/template-delete","host":["{{base_url}}"],"path":["document_generation","template-delete"]},"description":"Deletes (deactivates) a document template. Soft-Delete — can be reactivated.\n\n---\n**Tool-ID:** `po_templates_delete` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_templates_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"template_id","type":"text","description":"**REQUIRED** | Template-ID | Type: string","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/document_generation/template-delete","host":["{{base_url}}"],"path":["document_generation","template-delete"]},"description":"Deletes (deactivates) a document template. Soft-Delete — can be reactivated.\n\n---\n**Tool-ID:** `po_templates_delete` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_templates_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"template_id","type":"text","description":"**REQUIRED** | Template-ID | Type: string","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"deleted\": true,\n    \"deleted_at\": \"2026-04-16T10:00:00Z\"\n}"}]},{"name":"Get Document Template","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/document_generation/template-get","host":["{{base_url}}"],"path":["document_generation","template-get"]},"description":"Returns details of a document template including HTML content and variable schema.\n\n---\n**Tool-ID:** `po_templates_get` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_templates_get`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"template_id","type":"text","description":"**REQUIRED** | Template-ID | Type: string","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/document_generation/template-get","host":["{{base_url}}"],"path":["document_generation","template-get"]},"description":"Returns details of a document template including HTML content and variable schema.\n\n---\n**Tool-ID:** `po_templates_get` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_templates_get`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"template_id","type":"text","description":"**REQUIRED** | Template-ID | Type: string","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"data\": []\n}"}]},{"name":"Get linked documents","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/crm_intelligence/document_links/{crm_account_id}","host":["{{base_url}}"],"path":["crm_intelligence","document_links","{crm_account_id}"],"query":[{"key":"limit","value":"20","description":"*(optional)* | Max results (default: 50, max: 200) | Type: string","disabled":true}]},"description":"Documents linked to a CRM account. Link Types: - invoice - Invoices - contract - Contracts - quote - Quotes - correspondence - Correspondence - related - Other\n\n---\n**Tool-ID:** `po_documents_get_linked_documents` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_get_linked_documents`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Heartbeat Edit-Session","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-edit-session-heartbeat/{pofid}","host":["{{base_url}}"],"path":["documents","document-edit-session-heartbeat","{pofid}"]},"description":"Hält a zuvor erworbene Edit-Session at the Leben. all 30 seconds send. returns 409 EDIT_SESSION_LOST Back, if the Lock already verloren was.\n\n---\n**Tool-ID:** `po_documents_edit_session_heartbeat` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_edit_session_heartbeat`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaperOffice Document ID (pofid) — as URL-Path-Parameter or in the Body | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"}]}},"response":[]},{"name":"List Document Templates","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/document_generation/templates-list","host":["{{base_url}}"],"path":["document_generation","templates-list"]},"description":"List all available document templates of the account.\n\n---\n**Tool-ID:** `po_templates_list` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_templates_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"category","type":"text","description":"*(optional)* | Category filter (e.g. invoices, contracts, reports) | Type: string","value":"invoice"},{"key":"limit","type":"text","description":"*(optional)* | Max results (1-200) | Type: integer","value":"50"},{"key":"offset","type":"text","description":"*(optional)* | Type: integer","value":"0"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/document_generation/templates-list","host":["{{base_url}}"],"path":["document_generation","templates-list"]},"description":"List all available document templates of the account.\n\n---\n**Tool-ID:** `po_templates_list` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_templates_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"category","type":"text","description":"*(optional)* | Category filter (e.g. invoices, contracts, reports) | Type: string","value":"invoice"},{"key":"limit","type":"text","description":"*(optional)* | Max results (1-200) | Type: integer","value":"50"},{"key":"offset","type":"text","description":"*(optional)* | Type: integer","value":"0"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"limit\": 50,\n    \"offset\": 0,\n    \"processing_time\": \"71.86ms\",\n    \"status\": \"success\",\n    \"templates\": [],\n    \"total\": 0\n}"}]},{"name":"Merge publisher","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/publishers/{source_publisher_id}/merge","host":["{{base_url}}"],"path":["publishers","{source_publisher_id}","merge"]},"description":"Two Publisher merge and references move\n\n---\n**Tool-ID:** `po_publishers_merge` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_publishers_merge`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"source_publisher_id","type":"text","description":"**REQUIRED** | ID of the Publishers the aufgeloest is | Type: integer","value":"1"},{"key":"target_publisher_id","type":"text","description":"**REQUIRED** | ID of the target-Publishers in the gemerged is | Type: integer","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/publishers/{source_publisher_id}/merge","host":["{{base_url}}"],"path":["publishers","{source_publisher_id}","merge"]},"description":"Two Publisher merge and references move\n\n---\n**Tool-ID:** `po_publishers_merge` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_publishers_merge`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"source_publisher_id","type":"text","description":"**REQUIRED** | ID of the Publishers the aufgeloest is | Type: integer","value":"1"},{"key":"target_publisher_id","type":"text","description":"**REQUIRED** | ID of the target-Publishers in the gemerged is | Type: integer","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"processing_time\": \"362.85ms\",\n    \"status\": \"success\"\n}"}]},{"name":"Query Edit-Session Status","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/document-edit-session-status/{pofid}","host":["{{base_url}}"],"path":["documents","document-edit-session-status","{pofid}"],"query":[{"key":"pofid","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf","description":"**REQUIRED** | PaperOffice Document ID (pofid) — as URL-Path-Parameter or in the Body | Type: string","disabled":false}]},"description":"Fragt the current Edit-Session-Status of a document's (free/mine/taken) without the Lock zu übernehmen.\n\n---\n**Tool-ID:** `po_documents_edit_session_status` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_edit_session_status`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Release Edit-Session","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-edit-session-release/{pofid}","host":["{{base_url}}"],"path":["documents","document-edit-session-release","{pofid}"]},"description":"returns the Edit-Session-Lock for a document frei. by Release can andere users the document edit.\n\n---\n**Tool-ID:** `po_documents_edit_session_release` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_edit_session_release`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaperOffice Document ID (pofid) — as URL-Path-Parameter or in the Body | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"}]}},"response":[]},{"name":"Rename publisher","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/publishers/{publisher_id}/rename","host":["{{base_url}}"],"path":["publishers","{publisher_id}","rename"]},"description":"Publisher rename with automatic alias storage\n\n---\n**Tool-ID:** `po_publishers_rename` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_publishers_rename`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"publisher_id","type":"text","description":"**REQUIRED** | ID of the Publishers | Type: integer","value":"1"},{"key":"new_name","type":"text","description":"**REQUIRED** | New name for the Publisher | Type: string","value":"example-value"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/publishers/{publisher_id}/rename","host":["{{base_url}}"],"path":["publishers","{publisher_id}","rename"]},"description":"Publisher rename with automatic alias storage\n\n---\n**Tool-ID:** `po_publishers_rename` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_publishers_rename`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"publisher_id","type":"text","description":"**REQUIRED** | ID of the Publishers | Type: integer","value":"1"},{"key":"new_name","type":"text","description":"**REQUIRED** | New name for the Publisher | Type: string","value":"example-value"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"processing_time\": \"394.65ms\",\n    \"status\": \"success\"\n}"}]},{"name":"Search documents (ultimate)","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/documents-list","host":["{{base_url}}"],"path":["documents","documents-list"]},"description":"ULTIMATE SEARCH ENGINE - Intelligent Multi-Source Document Search (31.01.2026) Searches documents using 4 parallel search sources with RRF Fusion:\n\n---\n**Tool-ID:** `po_storage_documents_list` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_documents_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"workspace_id","type":"text","description":"**REQUIRED** | Required: ID of the workspace | Type: integer","value":"1"},{"key":"global_search","type":"text","description":"*(optional)* | {\"search_term\":\"Search term for Ultimate Search (all 4 sources)\",\"source_count\":4,\"pipeline_ids\":[\"paperoffice_datarippro\",\"paperoffice_aiocr\",\"paperoffice_devtools\",\"paperoffice_ai\"],\"translation_status\":\"completed\",\"language_pair\":\"de-en\"} | Type: string","value":"example-value"},{"key":"search_mode","type":"text","description":"*(optional)* | intelligent=automatic Query-type-detection (empfohlen) | Type: string | Allowed: intelligent, hybrid, semantic, fulltext","value":"intelligent"},{"key":"search_preference","type":"text","description":"*(optional)* | keyword=Stichwortsuche, semantic=AI-Search, balanced=ausgewogen | Type: string | Allowed: keyword, semantic, balanced","value":"balanced"},{"key":"search_scope","type":"text","description":"*(optional)* | current=only currenter Workspace, all=all Workspaces | Type: string | Allowed: current, all","value":"current"},{"key":"similarity_threshold","type":"text","description":"*(optional)* | Minimum Similarity for Semantic Search (0.0-1.0) | Type: number","value":"0.35"},{"key":"page","type":"text","description":"*(optional)* | Page number for pagination | Type: integer","value":"1"},{"key":"limit","type":"text","description":"*(optional)* | documente per page (max 500) | Type: integer | Max: 500","value":"500"},{"key":"sort","type":"text","description":"*(optional)* | Sortierfeld | Type: string","value":"created_datetime"},{"key":"order","type":"text","description":"*(optional)* | Order | Type: string | Allowed: ASC, DESC","value":"DESC"},{"key":"__document__data__classification__document_type","type":"file","description":"*(optional)* | Filter: Documenttypen (JSON Array or komma-separiert) | Type: array","src":null},{"key":"__document__content__extraction__keywords","type":"file","description":"*(optional)* | Filter: Keywords | Type: array","src":null},{"key":"__document__data__workflow__state","type":"file","description":"*(optional)* | Filter: Workflow-Status | Type: array","src":null},{"key":"__document__data__classification__locale","type":"file","description":"*(optional)* | Filter: language/Locale | Type: array","src":null},{"key":"__document__data__metadata__save_paths","type":"file","description":"*(optional)* | Filter: Speicherpfade (PREFIX_WILDCARD:/path or EXACT:/path) | Type: array","src":null},{"key":"ai_dms_status","type":"text","description":"*(optional)* | Filter: AI-DMS Tier | Type: array","value":"[\"basic\"]"},{"key":"ai_agent_status","type":"text","description":"*(optional)* | Filter: AI-Agent Status | Type: array","value":"[\"aktiv\"]"},{"key":"date_from","type":"text","description":"*(optional)* | Filter: Date from (YYYY-MM-DD) | Type: string","value":"2026-04-16"},{"key":"date_to","type":"text","description":"*(optional)* | Filter: date bis (YYYY-MM-DD) | Type: string","value":"2026-04-16"},{"key":"share_context","type":"text","description":"*(optional)* | Share context | Type: string","value":"example-value"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/documents-list","host":["{{base_url}}"],"path":["documents","documents-list"]},"description":"ULTIMATE SEARCH ENGINE - Intelligent Multi-Source Document Search (31.01.2026) Searches documents using 4 parallel search sources with RRF Fusion:\n\n---\n**Tool-ID:** `po_storage_documents_list` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_documents_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"workspace_id","type":"text","description":"**REQUIRED** | Required: ID of the workspace | Type: integer","value":"1"},{"key":"global_search","type":"text","description":"*(optional)* | {\"search_term\":\"Search term for Ultimate Search (all 4 sources)\",\"source_count\":4,\"pipeline_ids\":[\"paperoffice_datarippro\",\"paperoffice_aiocr\",\"paperoffice_devtools\",\"paperoffice_ai\"],\"translation_status\":\"completed\",\"language_pair\":\"de-en\"} | Type: string","value":"example-value"},{"key":"search_mode","type":"text","description":"*(optional)* | intelligent=automatic Query-type-detection (empfohlen) | Type: string | Allowed: intelligent, hybrid, semantic, fulltext","value":"intelligent"},{"key":"search_preference","type":"text","description":"*(optional)* | keyword=Stichwortsuche, semantic=AI-Search, balanced=ausgewogen | Type: string | Allowed: keyword, semantic, balanced","value":"balanced"},{"key":"search_scope","type":"text","description":"*(optional)* | current=only currenter Workspace, all=all Workspaces | Type: string | Allowed: current, all","value":"current"},{"key":"similarity_threshold","type":"text","description":"*(optional)* | Minimum Similarity for Semantic Search (0.0-1.0) | Type: number","value":"0.35"},{"key":"page","type":"text","description":"*(optional)* | Page number for pagination | Type: integer","value":"1"},{"key":"limit","type":"text","description":"*(optional)* | documente per page (max 500) | Type: integer | Max: 500","value":"500"},{"key":"sort","type":"text","description":"*(optional)* | Sortierfeld | Type: string","value":"created_datetime"},{"key":"order","type":"text","description":"*(optional)* | Order | Type: string | Allowed: ASC, DESC","value":"DESC"},{"key":"__document__data__classification__document_type","type":"file","description":"*(optional)* | Filter: Documenttypen (JSON Array or komma-separiert) | Type: array","src":null},{"key":"__document__content__extraction__keywords","type":"file","description":"*(optional)* | Filter: Keywords | Type: array","src":null},{"key":"__document__data__workflow__state","type":"file","description":"*(optional)* | Filter: Workflow-Status | Type: array","src":null},{"key":"__document__data__classification__locale","type":"file","description":"*(optional)* | Filter: language/Locale | Type: array","src":null},{"key":"__document__data__metadata__save_paths","type":"file","description":"*(optional)* | Filter: Speicherpfade (PREFIX_WILDCARD:/path or EXACT:/path) | Type: array","src":null},{"key":"ai_dms_status","type":"text","description":"*(optional)* | Filter: AI-DMS Tier | Type: array","value":"[\"basic\"]"},{"key":"ai_agent_status","type":"text","description":"*(optional)* | Filter: AI-Agent Status | Type: array","value":"[\"aktiv\"]"},{"key":"date_from","type":"text","description":"*(optional)* | Filter: Date from (YYYY-MM-DD) | Type: string","value":"2026-04-16"},{"key":"date_to","type":"text","description":"*(optional)* | Filter: date bis (YYYY-MM-DD) | Type: string","value":"2026-04-16"},{"key":"share_context","type":"text","description":"*(optional)* | Share context | Type: string","value":"example-value"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"ai_dms_filter\": \"all\",\n    \"applied_filters\": [],\n    \"count\": 0,\n    \"documents\": [],\n    \"documents_meta_fields\": [\n        {\n            \"documents_meta_fields_id\": 122,\n            \"field_key\": \"__document__analysis__fraud_score\"\n        },\n        {\n            \"documents_meta_fields_id\": 125,\n            \"field_key\": \"__document__analysis__fraud_score_reasoning\"\n        },\n        {\n            \"documents_meta_fields_id\": 20,\n            \"field_key\": \"__document__content__extraction__keywords\"\n        },\n        {\n            \"documents_meta_fields_id\": 14,\n            \"field_key\": \"__document__content__extraction__summary_header\"\n        },\n        {\n            \"documents_meta_fields_id\": 17,\n            \"field_key\": \"__document__content__extraction__summary_text\"\n        },\n        {\n            \"documents_meta_fields_id\": 119,\n            \"field_key\": \"__document__data__basic__page_count\"\n        },\n        {\n            \"documents_meta_fields_id\": 11,\n            \"field_key\": \"__document__data__classification__direction\"\n        },\n        {\n            \"documents_meta_fields_id\": 113,\n            \"field_key\": \"__document__data__classification__direction_original\"\n        },\n        {\n            \"documents_meta_fields_id\": 5,\n            \"field_key\": \"__document__data__classification__document_type\"\n        },\n        {\n            \"documents_meta_fields_id\": 110,\n            \"field_key\": \"__document__data__classification__document_type_original\"\n        },\n        {\n            \"documents_meta_fields_id\": 92,\n            \"field_key\": \"__document__data__dates__date_created\"\n        },\n        {\n            \"documents_meta_fields_id\": 86,\n            \"field_key\": \"__document__data__dates__date_delivery\"\n        },\n        {\n            \"documents_meta_fields_id\": 26,\n            \"field_key\": \"__document__data__dates__date_due\"\n        },\n        {\n            \"documents_meta_fields_id\": 23,\n            \"field_key\": \"__document__data__dates__date_issued\"\n        },\n        {\n            \"documents_meta_fields_id\": 89,\n            \"field_key\": \"__document__data__dates__date_order\"\n        },\n        {\n            \"documents_meta_fields_id\": 95,\n            \"field_key\": \"__document__data__dates__date_valid_until\"\n        },\n        {\n            \"documents_meta_fields_id\": 29,\n            \"field_key\": \"__document__data__metadata__name_suggestion\"\n        },\n        {\n            \"documents_meta_fields_id\": 32,\n            \"field_key\": \"__document__data__metadata__save_paths\"\n        },\n        {\n            \"documents_meta_fields_id\": 104,\n            \"field_key\": \"__document__data__workflow__action_required\"\n        },\n        {\n            \"documents_meta_fields_id\": 107,\n            \"field_key\": \"__document__data__workflow__action_required_by_date\"\n        },\n        {\n            \"documents_meta_fields_id\": 98,\n            \"field_key\": \"__document__data__workflow__state\"\n        },\n        {\n            \"documents_meta_fields_id\": 2,\n            \"field_key\": \"__document__file__pages__total_count\"\n        },\n        {\n            \"documents_meta_fields_id\": 8,\n            \"field_key\": \"_document__data__classification__locale\"\n        },\n        {\n            \"documents_meta_fields_id\": 65,\n            \"field_key\": \"_document__data__financial__currency\"\n        },\n        {\n            \"documents_meta_fields_id\": 62,\n            \"field_key\": \"_document__data__financial__gross_amount\"\n        },\n        {\n            \"documents_meta_fields_id\": 59,\n            \"field_key\": \"_document__data__financial__net_amount\"\n        },\n        {\n            \"documents_meta_fields_id\": 68,\n            \"field_key\": \"_document__data__financial__payment_method\"\n        },\n        {\n            \"documents_meta_fields_id\": 74,\n            \"field_key\": \"_document__data__financial__publisher_tax_id\"\n        },\n        {\n            \"documents_meta_fields_id\": 53,\n            \"field_key\": \"_document__data__financial__total_amount\"\n        },\n        {\n            \"documents_meta_fields_id\": 56,\n            \"field_key\": \"_document__data__financial__vat_amount\"\n        },\n        {\n            \"documents_meta_fields_id\": 71,\n            \"field_key\": \"_document__data__financial__vat_breakdown\"\n        },\n        {\n            \"documents_meta_fields_id\": 77,\n            \"field_key\": \"_document__data__metadata__document_number\"\n        },\n        {\n            \"documents_meta_fields_id\": 80,\n            \"field_key\": \"_document__data__metadata__reference_number\"\n        },\n        {\n            \"documents_meta_fields_id\": 83,\n            \"field_key\": \"_document__data__metadata__transaction_number\"\n        },\n        {\n            \"documents_meta_fields_id\": 35,\n            \"field_key\": \"_document__data__parties__publisher\"\n        },\n        {\n            \"documents_meta_fields_id\": 38,\n            \"field_key\": \"_document__data__parties__publisher_address\"\n        },\n        {\n            \"documents_meta_fields_id\": 44,\n            \"field_key\": \"_document__data__parties__publisher_email\"\n        },\n        {\n            \"documents_meta_fields_id\": 41,\n            \"field_key\": \"_document__data__parties__publisher_phone\"\n        },\n        {\n            \"documents_meta_fields_id\": 47,\n            \"field_key\": \"_document__data__parties__recipient\"\n        },\n        {\n            \"documents_meta_fields_id\": 50,\n            \"field_key\": \"_document__data__parties__recipient_address\"\n        },\n        {\n            \"documents_meta_fields_id\": 101,\n            \"field_key\": \"_document__data__workflow__priority\"\n        },\n        {\n            \"documents_meta_fields_id\": 116,\n            \"field_key\": \"_document__data__workflow__priority_original\"\n        }\n    ],\n    \"filter_values\": {\n        \"ai_dms_status\": [],\n        \"ai_agent_status\": [],\n        \"date_range\": []\n    },\n    \"message\": \"no documents gefunden.\",\n    \"pagination\": {\n        \"total\": 0,\n        \"current_page\": 1,\n        \"total_pages\": 0,\n        \"limit\": 500,\n        \"showing_from\": 1,\n        \"showing_to\": 0,\n        \"has_more\": false,\n        \"message\": \"no documents gefunden.\"\n    },\n    \"processing_time\": \"54.62ms\",\n    \"search_stats\": {\n        \"mode\": \"intelligent\",\n        \"actual_search_mode\": \"fulltext\",\n        \"scope\": \"current\",\n        \"query_type\": null,\n        \"semantic_matches\": 0,\n        \"fulltext_matches\": 0,\n        \"ocr_matches\": 0,\n        \"entity_matches\": 0,\n        \"total_sources_used\": 0,\n        \"embedding_from_cache\": false,\n        \"embedding_time_ms\": 0,\n        \"search_time_ms\": 0\n    },\n    \"stats\": {\n        \"all\": 1,\n        \"not_indexed\": 0,\n        \"indexed\": 1,\n        \"agent_processed\": 0,\n        \"waiting\": 0,\n        \"processing\": 0,\n        \"agents_docs\": 0,\n        \"workspaces\": 3\n    },\n    \"status\": \"success\",\n    \"storage_status\": {\n        \"mode\": \"cloud\",\n        \"is_offline\": false\n    },\n    \"total\": 0\n}"}]},{"name":"Update Document Template","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/document_generation/template-update","host":["{{base_url}}"],"path":["document_generation","template-update"]},"description":"Updates an existing document template.\n\n---\n**Tool-ID:** `po_templates_update` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_templates_update`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"raw","raw":"{\n    \"template_id\": \"\",\n    \"page_orientation\": \"portrait\"\n}","options":{"raw":{"language":"json"}}}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/document_generation/template-update","host":["{{base_url}}"],"path":["document_generation","template-update"]},"description":"Updates an existing document template.\n\n---\n**Tool-ID:** `po_templates_update` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_templates_update`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"raw","raw":"{\n    \"template_id\": \"\",\n    \"page_orientation\": \"portrait\"\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"updated\": true,\n    \"updated_at\": \"2026-04-16T10:00:00Z\"\n}"}]},{"name":"Extract Document Entities","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/document_intelligence/entities","host":["{{base_url}}"],"path":["document_intelligence","entities"]},"description":"All extracted entities of a document. Entity Types: company, person, location, date, amount, iban, product, email, phone, tax_id, reference. Includes Confidence scores and source positions.\n\n---\n**Tool-ID:** `po_entities_get_document_entities` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_entities_get_document_entities`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"type","type":"text","description":"*(optional)* | Optional: company, person, iban, amount, date, email, phone, invoice_number, etc. | Type: string","value":"default"},{"key":"min_confidence","type":"text","description":"*(optional)* | Optional: Minimum confidence score (0.0-1.0) | Type: string","value":"example-value"},{"key":"include_positions","type":"text","description":"*(optional)* | Optional: Include bounding box positions | Type: string","value":"false"}]}},"response":[]},{"name":"Get Canonical Entities","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/document_intelligence/entities/canonical","host":["{{base_url}}"],"path":["document_intelligence","entities","canonical"],"query":[{"key":"type","value":"default","description":"*(optional)* | Optional: Filter by entity type | Type: string","disabled":true},{"key":"workspace_id","value":"1","description":"*(optional)* | Optional: Filter by workspace | Type: string","disabled":true},{"key":"search","value":"invoice Q1 2026","description":"*(optional)* | Optional: Search term | Type: string","disabled":true},{"key":"limit","value":"20","description":"*(optional)* | Max results (default: 100, max: 500) | Type: string","disabled":true}]},"description":"Canonical deduplicated entities across all documents. Shows how often an entity appears in different documents.\n\n---\n**Tool-ID:** `po_entities_get_canonical_entities` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_entities_get_canonical_entities`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/document_intelligence/entities/canonical","host":["{{base_url}}"],"path":["document_intelligence","entities","canonical"],"query":[{"key":"type","value":"default","description":"*(optional)* | Optional: Filter by entity type | Type: string","disabled":true},{"key":"workspace_id","value":"1","description":"*(optional)* | Optional: Filter by workspace | Type: string","disabled":true},{"key":"search","value":"invoice Q1 2026","description":"*(optional)* | Optional: Search term | Type: string","disabled":true},{"key":"limit","value":"20","description":"*(optional)* | Max results (default: 100, max: 500) | Type: string","disabled":true}]},"description":"Canonical deduplicated entities across all documents. Shows how often an entity appears in different documents.\n\n---\n**Tool-ID:** `po_entities_get_canonical_entities` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_entities_get_canonical_entities`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"canonical_entities\": [],\n    \"entity_type_filter\": null,\n    \"entity_types\": {\n        \"company\": {\n            \"label\": \"Firma\",\n            \"icon\": \"🏢\",\n            \"color\": \"#3b82f6\"\n        },\n        \"person\": {\n            \"label\": \"Person\",\n            \"icon\": \"👤\",\n            \"color\": \"#8b5cf6\"\n        },\n        \"location\": {\n            \"label\": \"Ort\",\n            \"icon\": \"📍\",\n            \"color\": \"#10b981\"\n        },\n        \"date\": {\n            \"label\": \"date\",\n            \"icon\": \"📅\",\n            \"color\": \"#f59e0b\"\n        },\n        \"amount\": {\n            \"label\": \"Betrag\",\n            \"icon\": \"💰\",\n            \"color\": \"#22c55e\"\n        },\n        \"iban\": {\n            \"label\": \"IBAN\",\n            \"icon\": \"🏦\",\n            \"color\": \"#06b6d4\"\n        },\n        \"product\": {\n            \"label\": \"Produkt\",\n            \"icon\": \"📦\",\n            \"color\": \"#f97316\"\n        },\n        \"email\": {\n            \"label\": \"E-Mail\",\n            \"icon\": \"✉️\",\n            \"color\": \"#ec4899\"\n        },\n        \"phone\": {\n            \"label\": \"Telefon\",\n            \"icon\": \"📞\",\n            \"color\": \"#64748b\"\n        },\n        \"invoice_number\": {\n            \"label\": \"Rechnungsnr.\",\n            \"icon\": \"🧾\",\n            \"color\": \"#ef4444\"\n        },\n        \"order_number\": {\n            \"label\": \"Bestellnr.\",\n            \"icon\": \"🛒\",\n            \"color\": \"#f97316\"\n        },\n        \"tax_id\": {\n            \"label\": \"Steuernr.\",\n            \"icon\": \"📋\",\n            \"color\": \"#6366f1\"\n        },\n        \"url\": {\n            \"label\": \"URL\",\n            \"icon\": \"🔗\",\n            \"color\": \"#0ea5e9\"\n        }\n    },\n    \"limit\": 100,\n    \"offset\": 0,\n    \"processing_time\": \"58.63ms\",\n    \"status\": \"success\",\n    \"total\": 0,\n    \"workspace_id\": null\n}"}]},{"name":"Search entities","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/document_intelligence/entities/search","host":["{{base_url}}"],"path":["document_intelligence","entities","search"],"query":[{"key":"q","value":"invoice Q1 2026","description":"*(optional)* | Search query (required) | Type: string","disabled":true},{"key":"type","value":"default","description":"*(optional)* | Optional: Filter by entity type | Type: string","disabled":true},{"key":"workspace_id","value":"1","description":"*(optional)* | Optional: Filter by workspace | Type: string","disabled":true},{"key":"limit","value":"20","description":"*(optional)* | Max results (max: 200) | Type: string","disabled":true}]},"description":"Search for entities across all documents. Find entities that contain the search term and display the associated document.\n\n---\n**Tool-ID:** `po_entities_search_entities` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_entities_search_entities`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Get account insights","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/crm_intelligence/insights/{crm_account_id}","host":["{{base_url}}"],"path":["crm_intelligence","insights","{crm_account_id}"],"query":[{"key":"account_id","value":"1","description":"*(optional)* | Optional CRM account ID for targeted insights. | Type: integer","disabled":true},{"key":"type","value":"default","description":"*(optional)* | Filter after Insight-type (e.g. 'churn_risk', 'sentiment'). | Type: string","disabled":true},{"key":"min_score","value":"1","description":"*(optional)* | Minimum score value for filtering. | Type: number","disabled":true},{"key":"max_score","value":"1","description":"*(optional)* | {\"max_score_value_for_filtering\":\"Maximum score value for filtering.\"} | Type: number","disabled":true},{"key":"limit","value":"50","description":"*(optional)* | Maximum number results. | Type: integer | Max: 200","disabled":true},{"key":"offset","value":"0","description":"*(optional)* | Offset for pagination. | Type: integer","disabled":true}]},"description":"All AI insights for a specific CRM account. Including Overall Health Score and Risk Level.\n\n---\n**Tool-ID:** `po_insights_get_account_insights` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_insights_get_account_insights`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/crm_intelligence/insights/{crm_account_id}","host":["{{base_url}}"],"path":["crm_intelligence","insights","{crm_account_id}"],"query":[{"key":"account_id","value":"1","description":"*(optional)* | Optional CRM account ID for targeted insights. | Type: integer","disabled":true},{"key":"type","value":"default","description":"*(optional)* | Filter after Insight-type (e.g. 'churn_risk', 'sentiment'). | Type: string","disabled":true},{"key":"min_score","value":"1","description":"*(optional)* | Minimum score value for filtering. | Type: number","disabled":true},{"key":"max_score","value":"1","description":"*(optional)* | {\"max_score_value_for_filtering\":\"Maximum score value for filtering.\"} | Type: number","disabled":true},{"key":"limit","value":"50","description":"*(optional)* | Maximum number results. | Type: integer | Max: 200","disabled":true},{"key":"offset","value":"0","description":"*(optional)* | Offset for pagination. | Type: integer","disabled":true}]},"description":"All AI insights for a specific CRM account. Including Overall Health Score and Risk Level.\n\n---\n**Tool-ID:** `po_insights_get_account_insights` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_insights_get_account_insights`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"available_insight_types\": {\n        \"sentiment\": \"Kommunikations-Sentiment\",\n        \"health_score\": \"Beziehungs-Gesundheit\",\n        \"churn_risk\": \"Abwanderungsrisiko\",\n        \"engagement\": \"Engagement-Level\",\n        \"upsell_potential\": \"Upselling-Potenzial\",\n        \"support_satisfaction\": \"Support-Zufriedenheit\"\n    },\n    \"filters\": {\n        \"crm_account_id\": null,\n        \"insight_type\": null,\n        \"min_score\": null,\n        \"max_score\": null\n    },\n    \"insights\": [],\n    \"limit\": 50,\n    \"offset\": 0,\n    \"processing_time\": \"50.04ms\",\n    \"status\": \"success\",\n    \"total\": 0\n}"}]},{"name":"Get all insights","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/crm_intelligence/insights","host":["{{base_url}}"],"path":["crm_intelligence","insights"],"query":[{"key":"account_id","value":"1","description":"*(optional)* | Optional: Filter by CRM account | Type: string","disabled":true},{"key":"type","value":"default","description":"*(optional)* | Optional: sentiment, health_score, churn_risk, engagement, upsell_potential | Type: string","disabled":true},{"key":"min_score","value":"example-value","description":"*(optional)* | Optional: Minimum score | Type: string","disabled":true},{"key":"max_score","value":"example-value","description":"*(optional)* | Optional: Maximum score | Type: string","disabled":true},{"key":"limit","value":"20","description":"*(optional)* | Max results (default: 50, max: 200) | Type: string","disabled":true}]},"description":"All AI Insights across accounts or filtered. Insight Types: - sentiment - communication_sentiment - health_score - relationship_health - churn_risk - attrition_risk - engagement - engagement_level - upsell_potential - upselling_potential - support_satisfaction - support_satisfaction\n\n---\n**Tool-ID:** `po_insights_get_all_insights` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_insights_get_all_insights`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/crm_intelligence/insights","host":["{{base_url}}"],"path":["crm_intelligence","insights"],"query":[{"key":"account_id","value":"1","description":"*(optional)* | Optional: Filter by CRM account | Type: string","disabled":true},{"key":"type","value":"default","description":"*(optional)* | Optional: sentiment, health_score, churn_risk, engagement, upsell_potential | Type: string","disabled":true},{"key":"min_score","value":"example-value","description":"*(optional)* | Optional: Minimum score | Type: string","disabled":true},{"key":"max_score","value":"example-value","description":"*(optional)* | Optional: Maximum score | Type: string","disabled":true},{"key":"limit","value":"20","description":"*(optional)* | Max results (default: 50, max: 200) | Type: string","disabled":true}]},"description":"All AI Insights across accounts or filtered. Insight Types: - sentiment - communication_sentiment - health_score - relationship_health - churn_risk - attrition_risk - engagement - engagement_level - upsell_potential - upselling_potential - support_satisfaction - support_satisfaction\n\n---\n**Tool-ID:** `po_insights_get_all_insights` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_insights_get_all_insights`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"available_insight_types\": {\n        \"sentiment\": \"Kommunikations-Sentiment\",\n        \"health_score\": \"Beziehungs-Gesundheit\",\n        \"churn_risk\": \"Abwanderungsrisiko\",\n        \"engagement\": \"Engagement-Level\",\n        \"upsell_potential\": \"Upselling-Potenzial\",\n        \"support_satisfaction\": \"Support-Zufriedenheit\"\n    },\n    \"filters\": {\n        \"crm_account_id\": null,\n        \"insight_type\": null,\n        \"min_score\": null,\n        \"max_score\": null\n    },\n    \"insights\": [],\n    \"limit\": 50,\n    \"offset\": 0,\n    \"processing_time\": \"55.75ms\",\n    \"status\": \"success\",\n    \"total\": 0\n}"}]},{"name":"Get meta fields","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/document_intelligence/meta_fields/{document_id}","host":["{{base_url}}"],"path":["document_intelligence","meta_fields","{document_id}"],"query":[{"key":"category","value":"invoice","description":"*(optional)* | Optional: financial, parties, metadata, dates, content, etc. | Type: string","disabled":true}]},"description":"Get all AI-IDP extracted meta fields for a document by category: financial, parties, dates, classification, analysis.\n\n---\n**Tool-ID:** `po_meta_fields_get_meta_fields` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_meta_fields_get_meta_fields`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Get upsell opportunities","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/crm_intelligence/opportunities","host":["{{base_url}}"],"path":["crm_intelligence","opportunities"],"query":[{"key":"min_potential","value":"example-value","description":"*(optional)* | Minimum upsell potential (default: 0.3) | Type: string","disabled":true},{"key":"limit","value":"20","description":"*(optional)* | Max results (default: 20, max: 100) | Type: string","disabled":true}]},"description":"Identify upselling opportunities. Accounts with high upselling potential, sorted by score.\n\n---\n**Tool-ID:** `po_opportunities_get_upsell_opportunities` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_opportunities_get_upsell_opportunities`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/crm_intelligence/opportunities","host":["{{base_url}}"],"path":["crm_intelligence","opportunities"],"query":[{"key":"min_potential","value":"example-value","description":"*(optional)* | Minimum upsell potential (default: 0.3) | Type: string","disabled":true},{"key":"limit","value":"20","description":"*(optional)* | Max results (default: 20, max: 100) | Type: string","disabled":true}]},"description":"Identify upselling opportunities. Accounts with high upselling potential, sorted by score.\n\n---\n**Tool-ID:** `po_opportunities_get_upsell_opportunities` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_opportunities_get_upsell_opportunities`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"min_potential\": 0.3,\n    \"opportunities\": [],\n    \"processing_time\": \"59.29ms\",\n    \"status\": \"success\",\n    \"total\": 0\n}"}]},{"name":"Get document revisions","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/document-revisions","host":["{{base_url}}"],"path":["documents","document-revisions"],"query":[{"key":"pofid","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf","description":"**REQUIRED** | PaproOffice-Document ID, for the revisions should be retrieved. Passed as URL parameter. | Type: string","disabled":false},{"key":"limit","value":"50","description":"*(optional)* | Maximum number returned revisions. | Type: integer | Min: 1 | Max: 500","disabled":true},{"key":"offset","value":"0","description":"*(optional)* | Offset for pagination. | Type: integer","disabled":true},{"key":"action","value":"example-value","description":"*(optional)* | Filter after Action type (e.g. 'field_changed', 'folder_created'). | Type: string","disabled":true},{"key":"field_key","value":"example-value","description":"*(optional)* | Filter by changed field (e.g. 'invoice_number'). | Type: string","disabled":true},{"key":"date_from","value":"2026-04-16","description":"*(optional)* | revisions from this date (YYYY-MM-DD). | Type: string","disabled":true},{"key":"date_to","value":"2026-04-16","description":"*(optional)* | revisions bis zu this date (YYYY-MM-DD). | Type: string","disabled":true}]},"description":"Document version history. Displays all changes with timestamp, user, and change details.\n\n---\n**Tool-ID:** `po_revisions_get_document_revisions` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_revisions_get_document_revisions`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Get at-risk accounts","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/crm_intelligence/at_risk","host":["{{base_url}}"],"path":["crm_intelligence","at_risk"],"query":[{"key":"threshold","value":"example-value","description":"*(optional)* | Churn risk threshold (default: 0.5) | Type: string","disabled":true},{"key":"limit","value":"20","description":"*(optional)* | Max results (default: 20, max: 100) | Type: string","disabled":true}]},"description":"Accounts with high churn risk. Sorted by risk score, including factors and recommendations.\n\n---\n**Tool-ID:** `po_risk_analysis_get_atrisk_accounts` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_risk_analysis_get_atrisk_accounts`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/crm_intelligence/at_risk","host":["{{base_url}}"],"path":["crm_intelligence","at_risk"],"query":[{"key":"threshold","value":"example-value","description":"*(optional)* | Churn risk threshold (default: 0.5) | Type: string","disabled":true},{"key":"limit","value":"20","description":"*(optional)* | Max results (default: 20, max: 100) | Type: string","disabled":true}]},"description":"Accounts with high churn risk. Sorted by risk score, including factors and recommendations.\n\n---\n**Tool-ID:** `po_risk_analysis_get_atrisk_accounts` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_risk_analysis_get_atrisk_accounts`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"alert\": null,\n    \"at_risk_accounts\": [],\n    \"processing_time\": \"67.16ms\",\n    \"status\": \"success\",\n    \"threshold\": 0.5,\n    \"total\": 0\n}"}]},{"name":"Run RAG search","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-search","host":["{{base_url}}"],"path":["documents","document-search"]},"description":"RAG Semantic Search Search across all knowledge sources using semantic similarity. How it works: 1. Your query is embedded using embedding model3-embedding:8b 2. Vector similarity search finds relevant chunks 3. Results ranked by cosine similarity Response: json { \"status\": \"success\", \"data\": { \".\n\n---\n**Tool-ID:** `po_search_rag` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_search_rag`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"query","type":"text","description":"*(optional)* | Search query natural language | Type: string","value":"How do I reset my password?"},{"key":"limit","type":"text","description":"*(optional)* | Max results default: 5 | Type: string","value":"5"},{"key":"connector_types","type":"text","description":"*(optional)* | Filter by connector optional, comma-separated | Type: string","value":"zammad"},{"key":"source_types","type":"text","description":"*(optional)* | Filter by source type optional | Type: string","value":"ticket,kb_article"}]}},"response":[]},{"name":"Run semantic vector search","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-search","host":["{{base_url}}"],"path":["documents","document-search"]},"description":"Semantic Vector Search AI-powered search using embeddings. How it works: 1. Query text is converted to 4096-dim vector via AI model 2. Cosine similarity search against document embeddings 3. Returns documents above similarity_threshold Requirements: - Documents must have been processed with embed.\n\n---\n**Tool-ID:** `po_search_semantic_vector` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_search_semantic_vector`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"query","type":"text","description":"**REQUIRED** | Search term for semantic vector search | Type: string","value":"invoice Q1 2026"},{"key":"workspace_id","type":"text","description":"*(optional)* | Workspace ID | Type: integer","value":"1"},{"key":"limit","type":"text","description":"*(optional)* | Max. results | Type: integer | Min: 1 | Max: 100","value":"20"},{"key":"offset","type":"text","description":"*(optional)* | Pagination-Offset | Type: integer","value":"0"}]}},"response":[]},{"name":"Search exact field value","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-search","host":["{{base_url}}"],"path":["documents","document-search"]},"description":"Exact Field Search Filter documents by exact meta-field value. Use cases: - Find all documents of type X - Filter by status field - Custom field filtering Note: Query must exactly match the stored value.\n\n---\n**Tool-ID:** `po_search_exact_field` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_search_exact_field`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"field","type":"text","description":"**REQUIRED** | fieldname for exact search (e.g., file_name, status) | Type: string","value":"example-value"},{"key":"value","type":"text","description":"**REQUIRED** | Exaconcrete value for the field | Type: string","value":"example-value"},{"key":"workspace_id","type":"text","description":"*(optional)* | Workspace ID | Type: integer","value":"1"},{"key":"limit","type":"text","description":"*(optional)* | Max. results | Type: integer","value":"20"},{"key":"offset","type":"text","description":"*(optional)* | Pagination-Offset | Type: integer","value":"0"}]}},"response":[]},{"name":"Search fulltext","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-search","host":["{{base_url}}"],"path":["documents","document-search"]},"description":"Fulltext Search SQL LIKE + FULLTEXT search on: - file_name - All meta-field values - OCR text Features: - Relevance scoring - Pagination - Optional OCR preview\n\n---\n**Tool-ID:** `po_search_fulltext` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_search_fulltext`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"query","type":"text","description":"**REQUIRED** | Search term for full-text search | Type: string","value":"invoice Q1 2026"},{"key":"workspace_id","type":"text","description":"*(optional)* | Workspace ID to restrict the search | Type: integer","value":"1"},{"key":"limit","type":"text","description":"*(optional)* | Max. results | Type: integer | Min: 1 | Max: 100","value":"20"},{"key":"offset","type":"text","description":"*(optional)* | Pagination-Offset | Type: integer","value":"0"}]}},"response":[]},{"name":"Search hybrid","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-search","host":["{{base_url}}"],"path":["documents","document-search"]},"description":"Hybrid Search Fulltext + Semantic Combines both search methods for best results using OpenClaw-style weighted scoring. Parameters: - vector_weight float, default: 0.7: Weight for semantic/vector search 0-1 - bm25_weight float, default: 0.3: Weight for keyword/BM25 search 0-1 - Weights are automat.\n\n---\n**Tool-ID:** `po_search_hybrid` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_search_hybrid`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"query","type":"text","description":"**REQUIRED** | Search term for hybrid search (Full-text + Semantic) | Type: string","value":"invoice Q1 2026"},{"key":"workspace_id","type":"text","description":"*(optional)* | Workspace ID for Restriction | Type: integer","value":"1"},{"key":"limit","type":"text","description":"*(optional)* | Max. results | Type: integer | Min: 1 | Max: 100","value":"20"},{"key":"offset","type":"text","description":"*(optional)* | Pagination-Offset | Type: integer","value":"0"}]}},"response":[]},{"name":"Get sentiment history","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/crm_intelligence/sentiment/{crm_account_id}","host":["{{base_url}}"],"path":["crm_intelligence","sentiment","{crm_account_id}"],"query":[{"key":"days","value":"example-value","description":"*(optional)* | History period in days (default: 90, max: 365) | Type: string","disabled":true}]},"description":"Sentiment analysis for an account over time. Shows sentiment trend from emails and notes.\n\n---\n**Tool-ID:** `po_sentiment_get_sentiment_history` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_sentiment_get_sentiment_history`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Get CRM statistics","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/crm_intelligence/stats","host":["{{base_url}}"],"path":["crm_intelligence","stats"]},"description":"Global CRM Intelligence Statistics. Overview of all accounts, insights, risks, and opportunities.\n\n---\n**Tool-ID:** `po_statistics_get_crm_stats` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_statistics_get_crm_stats`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/crm_intelligence/stats","host":["{{base_url}}"],"path":["crm_intelligence","stats"]},"description":"Global CRM Intelligence Statistics. Overview of all accounts, insights, risks, and opportunities.\n\n---\n**Tool-ID:** `po_statistics_get_crm_stats` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_statistics_get_crm_stats`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"available_endpoints\": {\n        \"GET /crm_intelligence/insights\": \"All AI Insights\",\n        \"GET /crm_intelligence/insights/{crm_account_id}\": \"Insights for a specific account\",\n        \"GET /crm_intelligence/at_risk\": \"Accounts with churn risk\",\n        \"GET /crm_intelligence/opportunities\": \"Upsell potentials\",\n        \"GET /crm_intelligence/sentiment/{crm_account_id}\": \"Sentiment analysis\",\n        \"GET /crm_intelligence/document_links/{crm_account_id}\": \"Linked documents\",\n        \"GET /crm_intelligence/stats\": \"Global statistics\"\n    },\n    \"processing_time\": \"61.37ms\",\n    \"setup_hint\": null,\n    \"stats\": {\n        \"total_accounts\": 2,\n        \"accounts_with_insights\": 0,\n        \"average_scores\": [],\n        \"high_risk_count\": 0,\n        \"high_opportunity_count\": 0,\n        \"total_document_links\": 0\n    },\n    \"status\": \"success\"\n}"}]},{"name":"Add Document Tag","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-tag-add","host":["{{base_url}}"],"path":["documents","document-tag-add"]},"description":"Add a tag to a document.\n\n---\n**Tool-ID:** `po_documents_tags_create` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_tags_create`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaproOffice File ID | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"tag_name","type":"text","description":"**REQUIRED** | Tag-Name (max 100 characters) | Type: string","value":"example-value"},{"key":"tag_color","type":"text","description":"*(optional)* | Optional hex color (#RGB or #RRGGBB format, e.g. #FF0000). Invalid formats will be rejected. | Type: string","value":"example-value"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-tag-add","host":["{{base_url}}"],"path":["documents","document-tag-add"]},"description":"Add a tag to a document.\n\n---\n**Tool-ID:** `po_documents_tags_create` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_tags_create`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaproOffice File ID | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"tag_name","type":"text","description":"**REQUIRED** | Tag-Name (max 100 characters) | Type: string","value":"example-value"},{"key":"tag_color","type":"text","description":"*(optional)* | Optional hex color (#RGB or #RRGGBB format, e.g. #FF0000). Invalid formats will be rejected. | Type: string","value":"example-value"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Batch-process documents (AI-DMS)","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-batch-process","host":["{{base_url}}"],"path":["documents","document-batch-process"]},"description":"Triggers AI-DMS processing for multiple documents simultaneously. Max 50 POFIDs per batch. Each document is processed asynchronously via OCR, Entity Extraction, Classification, etc.\n\n---\n**Tool-ID:** `po_documents_batch_process` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_batch_process`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofids","type":"text","description":"**REQUIRED** | Array of POFIDs to process (max 50) | Type: array","value":"[\"item-1\"]"},{"key":"ai_dms_tier","type":"text","description":"*(optional)* | AI-DMS processing tier: basic (OCR + classification), premium (+ entity extraction), ultra (+ deep analysis) | Type: string | Allowed: basic, premium, ultra","value":"basic"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-batch-process","host":["{{base_url}}"],"path":["documents","document-batch-process"]},"description":"Triggers AI-DMS processing for multiple documents simultaneously. Max 50 POFIDs per batch. Each document is processed asynchronously via OCR, Entity Extraction, Classification, etc.\n\n---\n**Tool-ID:** `po_documents_batch_process` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_batch_process`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofids","type":"text","description":"**REQUIRED** | Array of POFIDs to process (max 50) | Type: array","value":"[\"item-1\"]"},{"key":"ai_dms_tier","type":"text","description":"*(optional)* | AI-DMS processing tier: basic (OCR + classification), premium (+ entity extraction), ultra (+ deep analysis) | Type: string | Allowed: basic, premium, ultra","value":"basic"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"ai_dms_tier\": \"example\",\n    \"queued\": [\n        {\n            \"pofid\": \"pofid_01HXYZABC12345\",\n            \"file_name\": \"example.pdf\",\n            \"status\": \"success\",\n            \"was_reset\": true\n        }\n    ],\n    \"queued_count\": 1,\n    \"reset_count\": 1,\n    \"not_found\": [\n        \"example\"\n    ],\n    \"not_found_count\": 1,\n    \"errors\": [\n        {\n            \"pofid\": \"pofid_01HXYZABC12345\",\n            \"file_name\": \"example.pdf\",\n            \"error\": \"example\"\n        }\n    ],\n    \"error_count\": 1,\n    \"processing_time\": \"example\"\n}"}]},{"name":"Check for duplicate documents","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/duplicate-check","host":["{{base_url}}"],"path":["documents","duplicate-check"]},"description":"Check if a document with the same SHA-256 hash already exists.\n\n---\n**Tool-ID:** `po_documents_duplicate_check` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_duplicate_check`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"file_hash","type":"file","description":"**REQUIRED** | SHA-256 hash of the file to check (64 hex chars; PaperOffice O-format is accepted) | Type: string","src":null},{"key":"workspace_id","type":"text","description":"*(optional)* | Optional: restrict duplicate check to a single workspace | Type: integer","value":"1"},{"key":"exclude_pofid","type":"text","description":"*(optional)* | Optional: POFID to exclude from matches (prevents self-match when checking an existing document) | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"exclude_documents_id","type":"file","description":"*(optional)* | Optional: documents_id to exclude from matches (prevents self-match by numeric ID) | Type: integer","src":null}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/duplicate-check","host":["{{base_url}}"],"path":["documents","duplicate-check"]},"description":"Check if a document with the same SHA-256 hash already exists.\n\n---\n**Tool-ID:** `po_documents_duplicate_check` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_duplicate_check`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"file_hash","type":"file","description":"**REQUIRED** | SHA-256 hash of the file to check (64 hex chars; PaperOffice O-format is accepted) | Type: string","src":null},{"key":"workspace_id","type":"text","description":"*(optional)* | Optional: restrict duplicate check to a single workspace | Type: integer","value":"1"},{"key":"exclude_pofid","type":"text","description":"*(optional)* | Optional: POFID to exclude from matches (prevents self-match when checking an existing document) | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"exclude_documents_id","type":"file","description":"*(optional)* | Optional: documents_id to exclude from matches (prevents self-match by numeric ID) | Type: integer","src":null}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Copy document","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-copy","host":["{{base_url}}"],"path":["documents","document-copy"]},"description":"Copy a document to another workspace.\n\n---\n**Tool-ID:** `po_documents_copy` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_copy`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaproOffice File ID of the document to copy | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"target_workspace_id","type":"text","description":"**REQUIRED** | ID of the target workspace, where the document should be copied to | Type: integer","value":"1"},{"key":"locale","type":"text","description":"*(optional)* | Locale | Type: string","value":"en"},{"key":"new_file_name","type":"file","description":"*(optional)* | New file name | Type: string","src":null}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-copy","host":["{{base_url}}"],"path":["documents","document-copy"]},"description":"Copy a document to another workspace.\n\n---\n**Tool-ID:** `po_documents_copy` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_copy`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaproOffice File ID of the document to copy | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"target_workspace_id","type":"text","description":"**REQUIRED** | ID of the target workspace, where the document should be copied to | Type: integer","value":"1"},{"key":"locale","type":"text","description":"*(optional)* | Locale | Type: string","value":"en"},{"key":"new_file_name","type":"file","description":"*(optional)* | New file name | Type: string","src":null}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"locale\": \"en_US\",\n    \"original\": {\n        \"pofid\": \"pofid_01HXYZABC12345\",\n        \"file_name\": \"example.pdf\",\n        \"workspace_id\": 12345\n    },\n    \"copy\": {\n        \"documents_id\": 12345,\n        \"pofid\": \"pofid_01HXYZABC12345\",\n        \"file_name\": \"example.pdf\",\n        \"workspace_id\": 12345,\n        \"workspace_name\": \"example\"\n    },\n    \"processing_time\": \"example\"\n}"}]},{"name":"Create Document Comment","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-comment-create","host":["{{base_url}}"],"path":["documents","document-comment-create"]},"description":"Create a comment or response to a document.\n\n---\n**Tool-ID:** `po_documents_comments_create` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_comments_create`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaproOffice File ID | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"content","type":"text","description":"**REQUIRED** | Comment text (Required) | Type: string","value":"Example text content"},{"key":"parent_id","type":"text","description":"*(optional)* | Parent comment ID for reply (optional) | Type: integer","value":"1"},{"key":"page_number","type":"text","description":"*(optional)* | pagesnummer (optional) | Type: integer | Min: 1","value":"1"},{"key":"anchor_text","type":"text","description":"*(optional)* | Ankertext in the Document (optional) | Type: string","value":"example-value"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-comment-create","host":["{{base_url}}"],"path":["documents","document-comment-create"]},"description":"Create a comment or response to a document.\n\n---\n**Tool-ID:** `po_documents_comments_create` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_comments_create`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaproOffice File ID | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"content","type":"text","description":"**REQUIRED** | Comment text (Required) | Type: string","value":"Example text content"},{"key":"parent_id","type":"text","description":"*(optional)* | Parent comment ID for reply (optional) | Type: integer","value":"1"},{"key":"page_number","type":"text","description":"*(optional)* | pagesnummer (optional) | Type: integer | Min: 1","value":"1"},{"key":"anchor_text","type":"text","description":"*(optional)* | Ankertext in the Document (optional) | Type: string","value":"example-value"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Create Document Note","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-note-create","host":["{{base_url}}"],"path":["documents","document-note-create"]},"description":"Add a new note to a document.\n\n---\n**Tool-ID:** `po_documents_notes_create` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_notes_create`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaproOffice File ID | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"content","type":"text","description":"**REQUIRED** | note-content (Required) | Type: string","value":"Example text content"},{"key":"title","type":"text","description":"*(optional)* | Optional title | Type: string","value":"My title"},{"key":"category","type":"text","description":"*(optional)* | category (default: general) | Type: string | Allowed: general, review, legal, technical, financial, internal","value":"general"},{"key":"is_pinned","type":"text","description":"*(optional)* | Pin note to top (0 = no, 1 = yes, default: 0) | Type: integer | Allowed: 0, 1","value":"0"},{"key":"is_private","type":"text","description":"*(optional)* | Private note visible only to you (0 = no, 1 = yes, default: 0) | Type: integer | Allowed: 0, 1","value":"0"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-note-create","host":["{{base_url}}"],"path":["documents","document-note-create"]},"description":"Add a new note to a document.\n\n---\n**Tool-ID:** `po_documents_notes_create` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_notes_create`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaproOffice File ID | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"content","type":"text","description":"**REQUIRED** | note-content (Required) | Type: string","value":"Example text content"},{"key":"title","type":"text","description":"*(optional)* | Optional title | Type: string","value":"My title"},{"key":"category","type":"text","description":"*(optional)* | category (default: general) | Type: string | Allowed: general, review, legal, technical, financial, internal","value":"general"},{"key":"is_pinned","type":"text","description":"*(optional)* | Pin note to top (0 = no, 1 = yes, default: 0) | Type: integer | Allowed: 0, 1","value":"0"},{"key":"is_private","type":"text","description":"*(optional)* | Private note visible only to you (0 = no, 1 = yes, default: 0) | Type: integer | Allowed: 0, 1","value":"0"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Delete document","request":{"method":"DELETE","header":[],"url":{"raw":"{{base_url}}/documents/document-delete","host":["{{base_url}}"],"path":["documents","document-delete"],"query":[{"key":"pofid","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf","description":"**REQUIRED** | PaproOffice File ID | Type: string","disabled":false},{"key":"share_context","value":"example-value","description":"*(optional)* | Share context | Type: string","disabled":true},{"key":"mode","value":"default","description":"*(optional)* | Mode | Type: string","disabled":true}]},"description":"Deletes a document (soft-delete). The document is marked as deleted.\n\n---\n**Tool-ID:** `po_documents_delete` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"DELETE","header":[],"url":{"raw":"{{base_url}}/documents/document-delete","host":["{{base_url}}"],"path":["documents","document-delete"],"query":[{"key":"pofid","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf","description":"**REQUIRED** | PaproOffice File ID | Type: string","disabled":false},{"key":"share_context","value":"example-value","description":"*(optional)* | Share context | Type: string","disabled":true},{"key":"mode","value":"default","description":"*(optional)* | Mode | Type: string","disabled":true}]},"description":"Deletes a document (soft-delete). The document is marked as deleted.\n\n---\n**Tool-ID:** `po_documents_delete` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"deleted_count\": 1,\n    \"not_found_count\": 1,\n    \"error_count\": 1,\n    \"deleted_documents\": [\n        {\n            \"pofid\": \"pofid_01HXYZABC12345\",\n            \"file_name\": \"example.pdf\",\n            \"documents_id\": 12345,\n            \"workspace_id\": 12345\n        }\n    ],\n    \"cleanup_queued\": 1,\n    \"mode\": \"trash\",\n    \"not_found_documents\": [\n        \"example\"\n    ],\n    \"deleted_folders\": [\n        \"example\"\n    ],\n    \"processing_time\": \"example\"\n}"}]},{"name":"Delete Document Comment","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-comment-delete","host":["{{base_url}}"],"path":["documents","document-comment-delete"]},"description":"Own comment delete (incl. replies).\n\n---\n**Tool-ID:** `po_documents_comments_delete` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_comments_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"comment_id","type":"text","description":"**REQUIRED** | ID of the comment to delete | Type: integer","value":"12345"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-comment-delete","host":["{{base_url}}"],"path":["documents","document-comment-delete"]},"description":"Own comment delete (incl. replies).\n\n---\n**Tool-ID:** `po_documents_comments_delete` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_comments_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"comment_id","type":"text","description":"**REQUIRED** | ID of the comment to delete | Type: integer","value":"12345"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Delete Document Note","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-note-delete","host":["{{base_url}}"],"path":["documents","document-note-delete"]},"description":"note delete (Soft Delete, only own).\n\n---\n**Tool-ID:** `po_documents_notes_delete` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_notes_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"note_id","type":"text","description":"**REQUIRED** | ID of the note to delete | Type: integer","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-note-delete","host":["{{base_url}}"],"path":["documents","document-note-delete"]},"description":"note delete (Soft Delete, only own).\n\n---\n**Tool-ID:** `po_documents_notes_delete` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_notes_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"note_id","type":"text","description":"**REQUIRED** | ID of the note to delete | Type: integer","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Edit document fields","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-edit/{pofid}","host":["{{base_url}}"],"path":["documents","document-edit","{pofid}"]},"description":"Sets or modifies a document's meta-fields via short alias keys.\n\n---\n**Tool-ID:** `po_documents_edit` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_edit`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaproOffice File ID | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"fields","type":"text","description":"**REQUIRED** | Key-Value-pairs with Alias-Keys (document_type, sender_name, total_amount, etc.) or nativen __-paths | Type: object","value":"{}"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-edit/{pofid}","host":["{{base_url}}"],"path":["documents","document-edit","{pofid}"]},"description":"Sets or modifies a document's meta-fields via short alias keys.\n\n---\n**Tool-ID:** `po_documents_edit` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_edit`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaproOffice File ID | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"fields","type":"text","description":"**REQUIRED** | Key-Value-pairs with Alias-Keys (document_type, sender_name, total_amount, etc.) or nativen __-paths | Type: object","value":"{}"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"updated\": true,\n    \"updated_at\": \"2026-04-16T10:00:00Z\"\n}"}]},{"name":"Empty document trash","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/trash-empty","host":["{{base_url}}"],"path":["documents","trash-empty"]},"description":"Empty Trash (permanently remove all deleted documents).\n\n---\n**Tool-ID:** `po_documents_trash_empty` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_trash_empty`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"workspace_id","type":"text","description":"*(optional)* | Optional: Only Trash a Workspaces empty | Type: integer","value":"1"},{"key":"confirm","type":"text","description":"**REQUIRED** | Confirmation required (must be true sa) | Type: boolean","value":"true"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/trash-empty","host":["{{base_url}}"],"path":["documents","trash-empty"]},"description":"Empty Trash (permanently remove all deleted documents).\n\n---\n**Tool-ID:** `po_documents_trash_empty` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_trash_empty`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"workspace_id","type":"text","description":"*(optional)* | Optional: Only Trash a Workspaces empty | Type: integer","value":"1"},{"key":"confirm","type":"text","description":"**REQUIRED** | Confirmation required (must be true sa) | Type: boolean","value":"true"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"force_deleted_count\": 0,\n    \"message\": \"Trash is already empty\",\n    \"processing_time\": \"33.7ms\",\n    \"status\": \"success\"\n}"}]},{"name":"Get document details","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/document-get/{pofid}","host":["{{base_url}}"],"path":["documents","document-get","{pofid}"],"query":[{"key":"pofid","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf","description":"**REQUIRED** | PaproOffice File ID | Type: string","disabled":false},{"key":"share_context","value":"example-value","description":"*(optional)* | Share context | Type: string","disabled":true}]},"description":"Returns detailed metadata of a document.\n\n---\n**Tool-ID:** `po_documents_get` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_get`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Get Document Lifecycle","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/document-lifecycle-get","host":["{{base_url}}"],"path":["documents","document-lifecycle-get"],"query":[{"key":"pofid","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf","description":"**REQUIRED** | PaproOffice File ID | Type: string","disabled":false}]},"description":"Get the current lifecycle status of a document, including allowed transitions.\n\n---\n**Tool-ID:** `po_documents_lifecycle_get` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_lifecycle_get`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Get document OCR text","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/ocr-get","host":["{{base_url}}"],"path":["documents","ocr-get"],"query":[{"key":"pofid","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf","description":"**REQUIRED** | PaproOffice File Document ID | Type: string","disabled":false},{"key":"locale","value":"en","description":"*(optional)* | Locale | Type: string","disabled":true},{"key":"page","value":"1","description":"*(optional)* | Page | Type: integer","disabled":true},{"key":"include_bounding_boxes","value":"false","description":"*(optional)* | Include bounding boxes | Type: boolean","disabled":true}]},"description":"Returns the OCR-extracted text of a document. Contains text per page with confidence scoring.\n\n---\n**Tool-ID:** `po_documents_ocr_get` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_ocr_get`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Get trash settings","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/trash-settings","host":["{{base_url}}"],"path":["documents","trash-settings"],"query":[{"key":"retention_days","value":"7","description":"*(optional)* | Optional: Aufbewahrungsdauer in daysn setzen | Type: integer","disabled":true}]},"description":"Get or modify trash settings.\n\n---\n**Tool-ID:** `po_documents_trash_settings` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_trash_settings`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/trash-settings","host":["{{base_url}}"],"path":["documents","trash-settings"],"query":[{"key":"retention_days","value":"7","description":"*(optional)* | Optional: Aufbewahrungsdauer in daysn setzen | Type: integer","disabled":true}]},"description":"Get or modify trash settings.\n\n---\n**Tool-ID:** `po_documents_trash_settings` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_trash_settings`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"processing_time\": \"54.87ms\",\n    \"status\": \"success\",\n    \"trash_retention_days\": 30\n}"}]},{"name":"List Deleted Documents (Trash)","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/trash-list","host":["{{base_url}}"],"path":["documents","trash-list"]},"description":"Displays all soft-deleted documents in the trash. Paginated with days_remaining and is_restorable. Optionally filterable by Workspace.\n\n---\n**Tool-ID:** `po_documents_trash_list` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_trash_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"workspace_id","type":"text","description":"*(optional)* | Optional: Filter by workspace | Type: integer","value":"1"},{"key":"page","type":"text","description":"*(optional)* | Page number (default: 1) | Type: integer","value":"1"},{"key":"pro_page","type":"text","description":"*(optional)* | Items per page (10-200, default: 50) | Type: integer","value":"50"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/trash-list","host":["{{base_url}}"],"path":["documents","trash-list"]},"description":"Displays all soft-deleted documents in the trash. Paginated with days_remaining and is_restorable. Optionally filterable by Workspace.\n\n---\n**Tool-ID:** `po_documents_trash_list` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_trash_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"workspace_id","type":"text","description":"*(optional)* | Optional: Filter by workspace | Type: integer","value":"1"},{"key":"page","type":"text","description":"*(optional)* | Page number (default: 1) | Type: integer","value":"1"},{"key":"pro_page","type":"text","description":"*(optional)* | Items per page (10-200, default: 50) | Type: integer","value":"50"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"page\": 1,\n    \"pages\": 1,\n    \"per_page\": 50,\n    \"processing_time\": \"67.3ms\",\n    \"retention_days\": 30,\n    \"status\": \"success\",\n    \"total\": 0,\n    \"total_size_bytes\": 0,\n    \"total_size_human\": \"0 MB\",\n    \"trash_items\": []\n}"}]},{"name":"List Document Comments","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/document-comments","host":["{{base_url}}"],"path":["documents","document-comments"],"query":[{"key":"pofid","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf","description":"**REQUIRED** | PaproOffice File ID | Type: string","disabled":false},{"key":"include_resolved","value":"0","description":"*(optional)* | Also show resolved comments (default: 0) | Type: string | Allowed: 0, 1","disabled":true},{"key":"page_number","value":"1","description":"*(optional)* | Only comments for these page (optional) | Type: integer","disabled":true}]},"description":"List document comments as a thread structure.\n\n---\n**Tool-ID:** `po_documents_comments_list` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_comments_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"List Document Notes","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/document-notes","host":["{{base_url}}"],"path":["documents","document-notes"],"query":[{"key":"pofid","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf","description":"**REQUIRED** | PaproOffice File ID | Type: string","disabled":false},{"key":"include_private","value":"0","description":"*(optional)* | Include private notes of OTHER users (default: false). Your own private notes are always visible regardless of this setting. | Type: string | Allowed: 0, 1","disabled":true}]},"description":"List all notes of a document.\n\n---\n**Tool-ID:** `po_documents_notes_list` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_notes_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"List Document Tags","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/document-tags","host":["{{base_url}}"],"path":["documents","document-tags"],"query":[{"key":"pofid","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf","description":"**REQUIRED** | PaproOffice File ID | Type: string","disabled":false}]},"description":"List all tags of a document.\n\n---\n**Tool-ID:** `po_documents_tags_list` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_tags_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"List Legal Holds","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/document-legal-holds-list","host":["{{base_url}}"],"path":["documents","document-legal-holds-list"],"query":[{"key":"workspace_id","value":"1","description":"*(optional)* | Workspace ID to filter holds. Omit both workspace_id and pofid to list ALL legal holds account-wide (compliance mode). | Type: integer","disabled":true},{"key":"pofid","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf","description":"*(optional)* | PaproOffice File ID to filter holds for a specific document. Omit both workspace_id and pofid for account-wide listing. | Type: string","disabled":true},{"key":"active_only","value":"0","description":"*(optional)* | Only active Holds (default: 1) | Type: string | Allowed: 0, 1","disabled":true}]},"description":"List Legal Holds (per Workspace or Document).\n\n---\n**Tool-ID:** `po_documents_legal_holds_list` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_legal_holds_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/document-legal-holds-list","host":["{{base_url}}"],"path":["documents","document-legal-holds-list"],"query":[{"key":"workspace_id","value":"1","description":"*(optional)* | Workspace ID to filter holds. Omit both workspace_id and pofid to list ALL legal holds account-wide (compliance mode). | Type: integer","disabled":true},{"key":"pofid","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf","description":"*(optional)* | PaproOffice File ID to filter holds for a specific document. Omit both workspace_id and pofid for account-wide listing. | Type: string","disabled":true},{"key":"active_only","value":"0","description":"*(optional)* | Only active Holds (default: 1) | Type: string | Allowed: 0, 1","disabled":true}]},"description":"List Legal Holds (per Workspace or Document).\n\n---\n**Tool-ID:** `po_documents_legal_holds_list` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_legal_holds_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"holds\": [],\n    \"processing_time\": \"87.14ms\",\n    \"scope\": \"account_global\",\n    \"status\": \"success\",\n    \"total\": 0\n}"}]},{"name":"Move document","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-move","host":["{{base_url}}"],"path":["documents","document-move"]},"description":"Move a document to another workspace.\n\n---\n**Tool-ID:** `po_documents_move` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_move`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaproOffice File ID of the document to move | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"target_workspace_id","type":"text","description":"**REQUIRED** | ID of the target workspace, where the document should be moved to | Type: integer","value":"1"},{"key":"locale","type":"text","description":"*(optional)* | Locale | Type: string","value":"en"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-move","host":["{{base_url}}"],"path":["documents","document-move"]},"description":"Move a document to another workspace.\n\n---\n**Tool-ID:** `po_documents_move` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_move`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaproOffice File ID of the document to move | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"target_workspace_id","type":"text","description":"**REQUIRED** | ID of the target workspace, where the document should be moved to | Type: integer","value":"1"},{"key":"locale","type":"text","description":"*(optional)* | Locale | Type: string","value":"en"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"locale\": \"en_US\",\n    \"document\": {\n        \"pofid\": \"pofid_01HXYZABC12345\",\n        \"file_name\": \"example.pdf\",\n        \"old_workspace_id\": 12345,\n        \"new_workspace_id\": 12345,\n        \"new_workspace_name\": \"example\"\n    },\n    \"processing_time\": \"example\"\n}"}]},{"name":"Place legal hold","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-legal-hold","host":["{{base_url}}"],"path":["documents","document-legal-hold"]},"description":"Place document under Legal Hold (deletion lock for legal retention).\n\n---\n**Tool-ID:** `po_documents_legal_holds_create` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_legal_holds_create`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaproOffice File ID | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"reason","type":"text","description":"**REQUIRED** | Grand for Legal Hold (Mandatory, e.g., lawsuit, audit) | Type: string","value":"example-value"},{"key":"reference","type":"text","description":"*(optional)* | Optional reference (Aktencharacters, Case-ID) | Type: string","value":"example-value"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-legal-hold","host":["{{base_url}}"],"path":["documents","document-legal-hold"]},"description":"Place document under Legal Hold (deletion lock for legal retention).\n\n---\n**Tool-ID:** `po_documents_legal_holds_create` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_legal_holds_create`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaproOffice File ID | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"reason","type":"text","description":"**REQUIRED** | Grand for Legal Hold (Mandatory, e.g., lawsuit, audit) | Type: string","value":"example-value"},{"key":"reference","type":"text","description":"*(optional)* | Optional reference (Aktencharacters, Case-ID) | Type: string","value":"example-value"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Release legal hold","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-legal-hold-release","host":["{{base_url}}"],"path":["documents","document-legal-hold-release"]},"description":"Release a legal hold (document becomes deletable again).\n\n---\n**Tool-ID:** `po_documents_legal_hold_release` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_legal_hold_release`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"hold_id","type":"text","description":"**REQUIRED** | Legal hold ID (Required) | Type: integer","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-legal-hold-release","host":["{{base_url}}"],"path":["documents","document-legal-hold-release"]},"description":"Release a legal hold (document becomes deletable again).\n\n---\n**Tool-ID:** `po_documents_legal_hold_release` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_legal_hold_release`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"hold_id","type":"text","description":"**REQUIRED** | Legal hold ID (Required) | Type: integer","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Remove Document Tag","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-tag-remove","host":["{{base_url}}"],"path":["documents","document-tag-remove"]},"description":"Remove a tag from a document.\n\n---\n**Tool-ID:** `po_documents_tags_delete` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_tags_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaproOffice File ID | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"tag_name","type":"text","description":"*(optional)* | Name of the tag to delete (REQUIRED if tag_id not provided) | Type: string","value":"example-value"},{"key":"tag_id","type":"text","description":"*(optional)* | ID of the day to delete (REQUIRED if tag_name not provided) | Type: integer","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-tag-remove","host":["{{base_url}}"],"path":["documents","document-tag-remove"]},"description":"Remove a tag from a document.\n\n---\n**Tool-ID:** `po_documents_tags_delete` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_tags_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaproOffice File ID | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"tag_name","type":"text","description":"*(optional)* | Name of the tag to delete (REQUIRED if tag_id not provided) | Type: string","value":"example-value"},{"key":"tag_id","type":"text","description":"*(optional)* | ID of the day to delete (REQUIRED if tag_name not provided) | Type: integer","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Rename document","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-rename","host":["{{base_url}}"],"path":["documents","document-rename"]},"description":"Rename a document. The original extension is always preserved. Path separators (/, \\, .) are rejected. Special characters are removed, leading dots are deleted. Maximum length: 255 characters.\n\n---\n**Tool-ID:** `po_documents_rename` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_rename`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | Document POFID to rename | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"new_file_name","type":"file","description":"**REQUIRED** | New file name (extension preserved if omitted) | Type: string","src":null}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-rename","host":["{{base_url}}"],"path":["documents","document-rename"]},"description":"Rename a document. The original extension is always preserved. Path separators (/, \\, .) are rejected. Special characters are removed, leading dots are deleted. Maximum length: 255 characters.\n\n---\n**Tool-ID:** `po_documents_rename` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_rename`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | Document POFID to rename | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"new_file_name","type":"file","description":"**REQUIRED** | New file name (extension preserved if omitted) | Type: string","src":null}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"pofid\": \"pofid_01HXYZABC12345\",\n    \"new_name\": \"example\",\n    \"processing_time\": \"example\",\n    \"document\": \"example\",\n    \"old_file_name\": \"example\",\n    \"new_file_name\": \"example\",\n    \"workspace_id\": \"ws_01HXYZ1234\"\n}"}]},{"name":"Resolve Document Comment","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-comment-resolve","host":["{{base_url}}"],"path":["documents","document-comment-resolve"]},"description":"Mark the comment thread as completed or reopen it.\n\n---\n**Tool-ID:** `po_documents_comments_resolve` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_comments_resolve`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"comment_id","type":"text","description":"**REQUIRED** | Root comment ID (not a reply) | Type: integer","value":"12345"},{"key":"resolved","type":"text","description":"*(optional)* | true = as erledigt mark, false = again open (default: true) | Type: boolean","value":"true"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-comment-resolve","host":["{{base_url}}"],"path":["documents","document-comment-resolve"]},"description":"Mark the comment thread as completed or reopen it.\n\n---\n**Tool-ID:** `po_documents_comments_resolve` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_comments_resolve`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"comment_id","type":"text","description":"**REQUIRED** | Root comment ID (not a reply) | Type: integer","value":"12345"},{"key":"resolved","type":"text","description":"*(optional)* | true = as erledigt mark, false = again open (default: true) | Type: boolean","value":"true"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Restore Document from Trash","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-restore","host":["{{base_url}}"],"path":["documents","document-restore"]},"description":"Restore one or more soft-deleted documents from the trash. Also supports document folders (.podf). Only restorable while phase=pending (not permanently deleted).\n\n---\n**Tool-ID:** `po_documents_restore` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_restore`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | POFID or array of POFIDs to restore | Type: Array","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"target_workspace_id","type":"text","description":"*(optional)* | Optional: Restore to this workspace instead of original | Type: integer","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-restore","host":["{{base_url}}"],"path":["documents","document-restore"]},"description":"Restore one or more soft-deleted documents from the trash. Also supports document folders (.podf). Only restorable while phase=pending (not permanently deleted).\n\n---\n**Tool-ID:** `po_documents_restore` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_restore`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | POFID or array of POFIDs to restore | Type: Array","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"target_workspace_id","type":"text","description":"*(optional)* | Optional: Restore to this workspace instead of original | Type: integer","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"pofid\": \"pofid_01HXYZABC12345\",\n    \"processing_time\": \"example\",\n    \"restored_count\": \"example\",\n    \"failed_count\": \"example\",\n    \"restored_documents\": \"example\",\n    \"failed_documents\": \"example\"\n}"}]},{"name":"Search documents (full-text)","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/document-search","host":["{{base_url}}"],"path":["documents","document-search"],"query":[{"key":"query","value":"invoice Q1 2026","description":"**REQUIRED** | Search term for the Documentsnsuche (full text, Semantisch or Hybrid) | Type: string","disabled":false},{"key":"workspace_id","value":"1","description":"**REQUIRED** | Workspace ID for the Documentsnsuche | Type: integer","disabled":false},{"key":"limit","value":"20","description":"*(optional)* | Maximum number results (Standard: 20, Max: 100) | Type: integer","disabled":true},{"key":"locale","value":"en","description":"*(optional)* | Locale | Type: string","disabled":true},{"key":"mode","value":"default","description":"*(optional)* | Mode | Type: string","disabled":true},{"key":"field_key","value":"example-value","description":"*(optional)* | Field key | Type: string","disabled":true},{"key":"page","value":"1","description":"*(optional)* | Page | Type: integer","disabled":true},{"key":"workspace_ids","value":"[]","description":"*(optional)* | Alternative: Array of Workspace IDs for the Search | Type: array","disabled":true},{"key":"include_meta_fields","value":"false","description":"*(optional)* | Include meta fields | Type: boolean","disabled":true},{"key":"include_ocr_preview","value":"false","description":"*(optional)* | Include ocr preview | Type: boolean","disabled":true},{"key":"similarity_threshold","value":"1","description":"*(optional)* | Similarity threshold | Type: number","disabled":true},{"key":"multi_vector","value":"example-value","description":"*(optional)* | Multi vector | Type: string","disabled":true},{"key":"vector_weight","value":"1","description":"*(optional)* | Vector weight | Type: number","disabled":true},{"key":"bm25_weight","value":"1","description":"*(optional)* | Bm25 weight | Type: number","disabled":true}]},"description":"Search documents by full-text search terms.\n\n---\n**Tool-ID:** `po_documents_search` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_search`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/document-search","host":["{{base_url}}"],"path":["documents","document-search"],"query":[{"key":"query","value":"invoice Q1 2026","description":"**REQUIRED** | Search term for the Documentsnsuche (full text, Semantisch or Hybrid) | Type: string","disabled":false},{"key":"workspace_id","value":"1","description":"**REQUIRED** | Workspace ID for the Documentsnsuche | Type: integer","disabled":false},{"key":"limit","value":"20","description":"*(optional)* | Maximum number results (Standard: 20, Max: 100) | Type: integer","disabled":true},{"key":"locale","value":"en","description":"*(optional)* | Locale | Type: string","disabled":true},{"key":"mode","value":"default","description":"*(optional)* | Mode | Type: string","disabled":true},{"key":"field_key","value":"example-value","description":"*(optional)* | Field key | Type: string","disabled":true},{"key":"page","value":"1","description":"*(optional)* | Page | Type: integer","disabled":true},{"key":"workspace_ids","value":"[]","description":"*(optional)* | Alternative: Array of Workspace IDs for the Search | Type: array","disabled":true},{"key":"include_meta_fields","value":"false","description":"*(optional)* | Include meta fields | Type: boolean","disabled":true},{"key":"include_ocr_preview","value":"false","description":"*(optional)* | Include ocr preview | Type: boolean","disabled":true},{"key":"similarity_threshold","value":"1","description":"*(optional)* | Similarity threshold | Type: number","disabled":true},{"key":"multi_vector","value":"example-value","description":"*(optional)* | Multi vector | Type: string","disabled":true},{"key":"vector_weight","value":"1","description":"*(optional)* | Vector weight | Type: number","disabled":true},{"key":"bm25_weight","value":"1","description":"*(optional)* | Bm25 weight | Type: number","disabled":true}]},"description":"Search documents by full-text search terms.\n\n---\n**Tool-ID:** `po_documents_search` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_search`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"ai_dms_filter\": \"all\",\n    \"count\": 0,\n    \"documents\": [],\n    \"locale\": \"en_US\",\n    \"message\": \"Search completed successfully\",\n    \"pagination\": {\n        \"page\": 1,\n        \"limit\": 50,\n        \"total\": 0,\n        \"total_pages\": 0\n    },\n    \"processing_time\": \"48.47ms\",\n    \"results\": [],\n    \"search\": {\n        \"mode\": \"fulltext\",\n        \"query\": \"test\",\n        \"workspace_filter\": [\n            1\n        ],\n        \"execution_time_ms\": 1.61,\n        \"fulltext_matches\": 0,\n        \"filename_only_mode\": false\n    },\n    \"status\": \"success\",\n    \"total\": 0\n}"}]},{"name":"Tag Autocomplete","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/tag-autocomplete","host":["{{base_url}}"],"path":["documents","tag-autocomplete"],"query":[{"key":"q","value":"invoice Q1 2026","description":"**REQUIRED** | Search term (mind. 1 characters) | Type: string","disabled":false},{"key":"workspace_id","value":"1","description":"*(optional)* | Optional: on Workspace einschraenken | Type: integer","disabled":true},{"key":"limit","value":"20","description":"*(optional)* | Max. results (default: 20, max: 50) | Type: integer","disabled":true}]},"description":"Search tags for autocomplete (cross-workspace).\n\n---\n**Tool-ID:** `po_documents_tags_autocomplete` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_tags_autocomplete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/tag-autocomplete","host":["{{base_url}}"],"path":["documents","tag-autocomplete"],"query":[{"key":"q","value":"invoice Q1 2026","description":"**REQUIRED** | Search term (mind. 1 characters) | Type: string","disabled":false},{"key":"workspace_id","value":"1","description":"*(optional)* | Optional: on Workspace einschraenken | Type: integer","disabled":true},{"key":"limit","value":"20","description":"*(optional)* | Max. results (default: 20, max: 50) | Type: integer","disabled":true}]},"description":"Search tags for autocomplete (cross-workspace).\n\n---\n**Tool-ID:** `po_documents_tags_autocomplete` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_tags_autocomplete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"processing_time\": \"106.47ms\",\n    \"status\": \"success\",\n    \"suggestions\": []\n}"}]},{"name":"Transition document lifecycle","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-lifecycle-transition","host":["{{base_url}}"],"path":["documents","document-lifecycle-transition"]},"description":"Change the lifecycle status of a document. Only allowed transitions are possible.\n\n---\n**Tool-ID:** `po_documents_lifecycle_transition` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_lifecycle_transition`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaproOffice File ID | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"new_state","type":"text","description":"**REQUIRED** | new lifecycle status | Type: string | Allowed: draft, in_review, approved, published, archived, expired, superseded","value":"draft"},{"key":"comment","type":"text","description":"*(optional)* | Optional comment for translation | Type: string","value":"example-value"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-lifecycle-transition","host":["{{base_url}}"],"path":["documents","document-lifecycle-transition"]},"description":"Change the lifecycle status of a document. Only allowed transitions are possible.\n\n---\n**Tool-ID:** `po_documents_lifecycle_transition` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_lifecycle_transition`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"**REQUIRED** | PaproOffice File ID | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"new_state","type":"text","description":"**REQUIRED** | new lifecycle status | Type: string | Allowed: draft, in_review, approved, published, archived, expired, superseded","value":"draft"},{"key":"comment","type":"text","description":"*(optional)* | Optional comment for translation | Type: string","value":"example-value"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Update Document Comment","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-comment-update","host":["{{base_url}}"],"path":["documents","document-comment-update"]},"description":"Update (edit) an existing comment authored by the current user.\n\n---\n**Tool-ID:** `po_documents_comments_update` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_comments_update`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"comment_id","type":"text","description":"**REQUIRED** | Comment ID | Type: integer","value":"12345"},{"key":"content","type":"text","description":"**REQUIRED** | new Comment text | Type: string","value":"Example text content"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-comment-update","host":["{{base_url}}"],"path":["documents","document-comment-update"]},"description":"Update (edit) an existing comment authored by the current user.\n\n---\n**Tool-ID:** `po_documents_comments_update` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_comments_update`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"comment_id","type":"text","description":"**REQUIRED** | Comment ID | Type: integer","value":"12345"},{"key":"content","type":"text","description":"**REQUIRED** | new Comment text | Type: string","value":"Example text content"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Update Document Note","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-note-update","host":["{{base_url}}"],"path":["documents","document-note-update"]},"description":"existing note update (only own).\n\n---\n**Tool-ID:** `po_documents_notes_update` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_notes_update`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"note_id","type":"text","description":"**REQUIRED** | Note ID (Required) | Type: integer","value":"1"},{"key":"title","type":"text","description":"*(optional)* | New title | Type: string","value":"My title"},{"key":"content","type":"text","description":"*(optional)* | New content | Type: string","value":"Example text content"},{"key":"category","type":"text","description":"*(optional)* | new category | Type: string | Allowed: general, review, legal, technical, financial, internal","value":"general"},{"key":"is_pinned","type":"text","description":"*(optional)* | Anheften/Loesen | Type: integer | Allowed: 0, 1","value":"0"},{"key":"is_private","type":"text","description":"*(optional)* | Privat/Public | Type: integer | Allowed: 0, 1","value":"0"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-note-update","host":["{{base_url}}"],"path":["documents","document-note-update"]},"description":"existing note update (only own).\n\n---\n**Tool-ID:** `po_documents_notes_update` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_notes_update`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"note_id","type":"text","description":"**REQUIRED** | Note ID (Required) | Type: integer","value":"1"},{"key":"title","type":"text","description":"*(optional)* | New title | Type: string","value":"My title"},{"key":"content","type":"text","description":"*(optional)* | New content | Type: string","value":"Example text content"},{"key":"category","type":"text","description":"*(optional)* | new category | Type: string | Allowed: general, review, legal, technical, financial, internal","value":"general"},{"key":"is_pinned","type":"text","description":"*(optional)* | Anheften/Loesen | Type: integer | Allowed: 0, 1","value":"0"},{"key":"is_private","type":"text","description":"*(optional)* | Privat/Public | Type: integer | Allowed: 0, 1","value":"0"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Upload document","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-put","host":["{{base_url}}"],"path":["documents","document-put"]},"description":"Uploads a new document and saves it encrypted.\n\n---\n**Tool-ID:** `po_documents_update` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_update`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"file","type":"file","description":"**REQUIRED** | Hochzuladende file (multipart/form-data, binary) | Type: string","src":null},{"key":"workspace_id","type":"text","description":"**REQUIRED** | target workspace ID for the hochloadede Document | Type: integer","value":"1"},{"key":"workspace_name","type":"text","description":"*(optional)* | Workspace name | Type: string","value":"example-value"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/document-put","host":["{{base_url}}"],"path":["documents","document-put"]},"description":"Uploads a new document and saves it encrypted.\n\n---\n**Tool-ID:** `po_documents_update` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_documents_update`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"file","type":"file","description":"**REQUIRED** | Hochzuladende file (multipart/form-data, binary) | Type: string","src":null},{"key":"workspace_id","type":"text","description":"**REQUIRED** | target workspace ID for the hochloadede Document | Type: integer","value":"1"},{"key":"workspace_name","type":"text","description":"*(optional)* | Workspace name | Type: string","value":"example-value"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"results\": [\n        {\n            \"status\": \"success\",\n            \"pofid\": \"pofid_01HXYZABC12345\",\n            \"documents_id\": 12345,\n            \"filename\": \"example.pdf\",\n            \"size\": 1024,\n            \"total_pages\": 1,\n            \"message\": \"Operation completed successfully\"\n        }\n    ],\n    \"workspace_id\": 12345,\n    \"workspace_name\": \"example\",\n    \"workflow_import\": {\n        \"source_job_id\": \"example\",\n        \"documents_imported\": 1\n    },\n    \"processing_time\": \"example\"\n}"}]},{"name":"Get document summary","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/document_intelligence/summary/{pofid}","host":["{{base_url}}"],"path":["document_intelligence","summary","{pofid}"],"query":[{"key":"document_id","value":"12345","description":"**REQUIRED** | numeric Document ID (documents_id). Passed as URL parameter (/summary/{document_id}). | Type: integer","disabled":false}]},"description":"Compact summary of all Document Intelligence data. An endpoint for all key metrics and API links.\n\n---\n**Tool-ID:** `po_summary_stats_get_document_summary` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_summary_stats_get_document_summary`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Get global statistics","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/document_intelligence/stats","host":["{{base_url}}"],"path":["document_intelligence","stats"],"query":[{"key":"workspace_id","value":"1","description":"*(optional)* | Optional: Filter by workspace | Type: string","disabled":true}]},"description":"Global Document Intelligence Statistics. Overview of all processed documents, entities, embeddings, etc.\n\n---\n**Tool-ID:** `po_summary_stats_get_global_stats` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_summary_stats_get_global_stats`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/document_intelligence/stats","host":["{{base_url}}"],"path":["document_intelligence","stats"],"query":[{"key":"workspace_id","value":"1","description":"*(optional)* | Optional: Filter by workspace | Type: string","disabled":true}]},"description":"Global Document Intelligence Statistics. Overview of all processed documents, entities, embeddings, etc.\n\n---\n**Tool-ID:** `po_summary_stats_get_global_stats` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_summary_stats_get_global_stats`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"available_endpoints\": {\n        \"GET /document_intelligence/entities/{document_id}\": \"Entities eines Dokuments\",\n        \"GET /document_intelligence/entities/canonical\": \"Kanonische Entities\",\n        \"GET /document_intelligence/entities/search?q=...\": \"Entity-Suche\",\n        \"GET /document_intelligence/embeddings/{document_id}\": \"Embeddings eines Dokuments\",\n        \"POST /document_intelligence/embeddings/search\": \"Semantische Suche\",\n        \"GET /document_intelligence/ocr/{document_id}\": \"OCR-Details\",\n        \"GET /document_intelligence/vision/{document_id}\": \"Vision-Daten (Tabellen, Charts, etc.)\",\n        \"GET /document_intelligence/relations/{document_id}\": \"document-relationships\",\n        \"GET /document_intelligence/topics/{document_id}\": \"Themen eines Dokuments\",\n        \"GET /document_intelligence/topics\": \"all Topics\",\n        \"GET /document_intelligence/revisions/{document_id}\": \"Versionshistorie\",\n        \"GET /document_intelligence/meta_fields/{document_id}\": \"IDP Meta-Felder\",\n        \"GET /document_intelligence/summary/{document_id}\": \"document-Summary\",\n        \"GET /document_intelligence/stats\": \"Globale Statistiken\"\n    },\n    \"processing_time\": \"72.05ms\",\n    \"stats\": {\n        \"total_documents\": 1,\n        \"documents_with_ocr\": 1,\n        \"documents_with_entities\": 0,\n        \"entities_by_type\": [],\n        \"documents_with_embeddings\": 1,\n        \"embeddings_by_type\": {\n            \"document_summary\": 1,\n            \"metadata\": 1,\n            \"contextual\": 1,\n            \"contextual_summary\": 1,\n            \"parent\": 1\n        },\n        \"total_tables\": 0,\n        \"total_charts\": 0,\n        \"total_barcodes\": 0,\n        \"canonical_entities\": 0,\n        \"total_topics\": 0\n    },\n    \"status\": \"success\",\n    \"workspace_id\": null\n}"}]},{"name":"Get vision data","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/document_intelligence/vision/{pofid}","host":["{{base_url}}"],"path":["document_intelligence","vision","{pofid}"],"query":[{"key":"include","value":"example-value","description":"*(optional)* | all, tables, charts, forms, barcodes, layout | Type: string","disabled":true}]},"description":"Vision-extracted data Ultra-Tier. Includes: - Tables - Structured table data with rows/columns - charts - Recognized charts with data - Form Fields - Form fields with values - barcodes - QR codes and barcodes - Layout - Document structure Headers, Paragraphs, etc.\n\n---\n**Tool-ID:** `po_vision_get_vision_data` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_vision_get_vision_data`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Check access","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/workspace-access-check","host":["{{base_url}}"],"path":["documents","workspace-access-check"]},"description":"Check Workspace Access Verify if the current user session has access to a specific workspace. Returns: Access status and session details.\n\n---\n**Tool-ID:** `po_workspaces_security_check_access` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workspaces_security_check_access`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"workspace_id","type":"text","description":"*(optional)* | Required: Workspace ID to check access for | Type: string","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/workspace-access-check","host":["{{base_url}}"],"path":["documents","workspace-access-check"]},"description":"Check Workspace Access Verify if the current user session has access to a specific workspace. Returns: Access status and session details.\n\n---\n**Tool-ID:** `po_workspaces_security_check_access` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workspaces_security_check_access`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"workspace_id","type":"text","description":"*(optional)* | Required: Workspace ID to check access for | Type: string","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"processing_time\": \"example\",\n    \"has_access\": true,\n    \"requires_password\": true,\n    \"requires_code\": true,\n    \"status\": \"success\"\n}"}]},{"name":"Create workspace","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/workspaces-create","host":["{{base_url}}"],"path":["documents","workspaces-create"]},"description":"Create New Workspace Create a workspace to organize documents. Optional metadata: - data_contact: Contact information - data_address: Address information\n\n---\n**Tool-ID:** `po_workspaces_create` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workspaces_create`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"name","type":"text","description":"**REQUIRED** | Workspace name (required, must not be empty). | Type: string","value":"My item"},{"key":"description","type":"text","description":"*(optional)* | description the workspace. | Type: string","value":"Example text content"},{"key":"type","type":"text","description":"*(optional)* | type the workspace. | Type: string","value":"folder"},{"key":"workspace_tier","type":"text","description":"*(optional)* | Security level: standard, confidential (confidential) or compliance (highest level). | Type: string | Allowed: standard, confidential, compliance","value":"standard"},{"key":"is_revision_secure","type":"text","description":"*(optional)* | revision safety enable (WORM-protection). Einmal activates, not deaktivierbar. requires PaproOffice EU Cloud. | Type: boolean","value":"false"},{"key":"retention_years","type":"text","description":"*(optional)* | Retention period in years (Standard: 10 years, GoBD-compliant). | Type: integer | Min: 1 | Max: 99","value":"10"},{"key":"ai_dms_mode","type":"text","description":"*(optional)* | AI-DMS Verarattungsmodus: disabled (from), basic, premium or ultra. | Type: string | Allowed: disabled, basic, premium, ultra","value":"disabled"},{"key":"storage_mode","type":"text","description":"*(optional)* | Storage mode: 'cloud' (PaproOffice EU Cloud) or 'byos' (Bring Your Own Storage). After creation, not deletable. | Type: string | Allowed: cloud, byos","value":"cloud"},{"key":"storage_mount_id","type":"text","description":"*(optional)* | Identify the Storage Mounts for BYOS Mode. | Type: integer","value":"1"},{"key":"storage_mount_path","type":"text","description":"*(optional)* | Path on the Storage Mount for BYOS mode. | Type: string","value":"example-value"},{"key":"default_locale","type":"text","description":"*(optional)* | Default language/region in the Format 'de:DE', 'en:US' etc. | Type: string","value":"example-value"},{"key":"image","type":"file","description":"*(optional)* | Bild-URL the workspace. | Type: string","src":null},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 900","value":"900"},{"key":"is_default","type":"text","description":"*(optional)* | Mark as standard workspace. | Type: boolean","value":"true"},{"key":"is_stealth","type":"text","description":"*(optional)* | Workspace in the Stealth-Modus (versteckt). | Type: boolean","value":"true"},{"key":"is_archived","type":"text","description":"*(optional)* | Archive workspace. | Type: boolean","value":"true"},{"key":"workspace_password","type":"text","description":"*(optional)* | Password for the workspace access. | Type: string","value":"example-value"},{"key":"color","type":"text","description":"*(optional)* | Farbcode the workspace. | Type: string","value":"example-value"},{"key":"icon","type":"text","description":"*(optional)* | Icon the workspace. | Type: string","value":"example-value"},{"key":"tags","type":"text","description":"*(optional)* | Tags for the workspace. | Type: array","value":"invoice"},{"key":"contact_salutation","type":"text","description":"*(optional)* | Anrede the Ansprechpartners. | Type: string","value":"example-value"},{"key":"contact_firstname","type":"text","description":"*(optional)* | Vorname the Ansprechpartners. | Type: string","value":"example-value"},{"key":"contact_lastname","type":"text","description":"*(optional)* | Nachname the Ansprechpartners. | Type: string","value":"example-value"},{"key":"contact_email","type":"text","description":"*(optional)* | email the Ansprechpartners. | Type: string","value":"user@example.com"},{"key":"contact_phone","type":"text","description":"*(optional)* | phone the Ansprechpartners. | Type: string","value":"example-value"},{"key":"company_name","type":"text","description":"*(optional)* | company name. | Type: string","value":"example-value"},{"key":"address_street","type":"text","description":"*(optional)* | Strasse. | Type: string","value":"example-value"},{"key":"address_zip","type":"text","description":"*(optional)* | Postleitzahl. | Type: string","value":"example-value"},{"key":"address_city","type":"text","description":"*(optional)* | Stadt. | Type: string","value":"example-value"},{"key":"address_country","type":"text","description":"*(optional)* | Land. | Type: string","value":"example-value"},{"key":"metadata","type":"text","description":"*(optional)* | Additional metadata as JSON object. | Type: object","value":"{}"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/workspaces-create","host":["{{base_url}}"],"path":["documents","workspaces-create"]},"description":"Create New Workspace Create a workspace to organize documents. Optional metadata: - data_contact: Contact information - data_address: Address information\n\n---\n**Tool-ID:** `po_workspaces_create` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workspaces_create`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.","body":{"mode":"formdata","formdata":[{"key":"name","type":"text","description":"**REQUIRED** | Workspace name (required, must not be empty). | Type: string","value":"My item"},{"key":"description","type":"text","description":"*(optional)* | description the workspace. | Type: string","value":"Example text content"},{"key":"type","type":"text","description":"*(optional)* | type the workspace. | Type: string","value":"folder"},{"key":"workspace_tier","type":"text","description":"*(optional)* | Security level: standard, confidential (confidential) or compliance (highest level). | Type: string | Allowed: standard, confidential, compliance","value":"standard"},{"key":"is_revision_secure","type":"text","description":"*(optional)* | revision safety enable (WORM-protection). Einmal activates, not deaktivierbar. requires PaproOffice EU Cloud. | Type: boolean","value":"false"},{"key":"retention_years","type":"text","description":"*(optional)* | Retention period in years (Standard: 10 years, GoBD-compliant). | Type: integer | Min: 1 | Max: 99","value":"10"},{"key":"ai_dms_mode","type":"text","description":"*(optional)* | AI-DMS Verarattungsmodus: disabled (from), basic, premium or ultra. | Type: string | Allowed: disabled, basic, premium, ultra","value":"disabled"},{"key":"storage_mode","type":"text","description":"*(optional)* | Storage mode: 'cloud' (PaproOffice EU Cloud) or 'byos' (Bring Your Own Storage). After creation, not deletable. | Type: string | Allowed: cloud, byos","value":"cloud"},{"key":"storage_mount_id","type":"text","description":"*(optional)* | Identify the Storage Mounts for BYOS Mode. | Type: integer","value":"1"},{"key":"storage_mount_path","type":"text","description":"*(optional)* | Path on the Storage Mount for BYOS mode. | Type: string","value":"example-value"},{"key":"default_locale","type":"text","description":"*(optional)* | Default language/region in the Format 'de:DE', 'en:US' etc. | Type: string","value":"example-value"},{"key":"image","type":"file","description":"*(optional)* | Bild-URL the workspace. | Type: string","src":null},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 900","value":"900"},{"key":"is_default","type":"text","description":"*(optional)* | Mark as standard workspace. | Type: boolean","value":"true"},{"key":"is_stealth","type":"text","description":"*(optional)* | Workspace in the Stealth-Modus (versteckt). | Type: boolean","value":"true"},{"key":"is_archived","type":"text","description":"*(optional)* | Archive workspace. | Type: boolean","value":"true"},{"key":"workspace_password","type":"text","description":"*(optional)* | Password for the workspace access. | Type: string","value":"example-value"},{"key":"color","type":"text","description":"*(optional)* | Farbcode the workspace. | Type: string","value":"example-value"},{"key":"icon","type":"text","description":"*(optional)* | Icon the workspace. | Type: string","value":"example-value"},{"key":"tags","type":"text","description":"*(optional)* | Tags for the workspace. | Type: array","value":"invoice"},{"key":"contact_salutation","type":"text","description":"*(optional)* | Anrede the Ansprechpartners. | Type: string","value":"example-value"},{"key":"contact_firstname","type":"text","description":"*(optional)* | Vorname the Ansprechpartners. | Type: string","value":"example-value"},{"key":"contact_lastname","type":"text","description":"*(optional)* | Nachname the Ansprechpartners. | Type: string","value":"example-value"},{"key":"contact_email","type":"text","description":"*(optional)* | email the Ansprechpartners. | Type: string","value":"user@example.com"},{"key":"contact_phone","type":"text","description":"*(optional)* | phone the Ansprechpartners. | Type: string","value":"example-value"},{"key":"company_name","type":"text","description":"*(optional)* | company name. | Type: string","value":"example-value"},{"key":"address_street","type":"text","description":"*(optional)* | Strasse. | Type: string","value":"example-value"},{"key":"address_zip","type":"text","description":"*(optional)* | Postleitzahl. | Type: string","value":"example-value"},{"key":"address_city","type":"text","description":"*(optional)* | Stadt. | Type: string","value":"example-value"},{"key":"address_country","type":"text","description":"*(optional)* | Land. | Type: string","value":"example-value"},{"key":"metadata","type":"text","description":"*(optional)* | Additional metadata as JSON object. | Type: object","value":"{}"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"id\": 12345,\n    \"workspace_tier\": \"standard\",\n    \"processing_time\": \"example\"\n}"}]},{"name":"Delete workspace","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/workspaces-delete","host":["{{base_url}}"],"path":["documents","workspaces-delete"]},"description":"Delete Workspace Warning: This will also delete all documents in the workspace!\n\n---\n**Tool-ID:** `po_workspaces_delete` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workspaces_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"id","type":"text","description":"**REQUIRED** | ID of the workspace to delete. | Type: integer","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/workspaces-delete","host":["{{base_url}}"],"path":["documents","workspaces-delete"]},"description":"Delete Workspace Warning: This will also delete all documents in the workspace!\n\n---\n**Tool-ID:** `po_workspaces_delete` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workspaces_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"id","type":"text","description":"**REQUIRED** | ID of the workspace to delete. | Type: integer","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"documents_queued\": 1,\n    \"processing_time\": \"example\"\n}"}]},{"name":"List workspaces","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/workspaces-list","host":["{{base_url}}"],"path":["documents","workspaces-list"],"query":[{"key":"locale","value":"en","description":"*(optional)* | Response language: de_DE, en_US, es_ES, fr_FR, it_IT, pt_PT | Type: string","disabled":true}]},"description":"List All Workspaces Get all workspaces for the authenticated account. Response includes: - id, name, description - type standard/project - status active/inactive - is_default flag\n\n---\n**Tool-ID:** `po_workspaces_list` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workspaces_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/workspaces-list","host":["{{base_url}}"],"path":["documents","workspaces-list"],"query":[{"key":"locale","value":"en","description":"*(optional)* | Response language: de_DE, en_US, es_ES, fr_FR, it_IT, pt_PT | Type: string","disabled":true}]},"description":"List All Workspaces Get all workspaces for the authenticated account. Response includes: - id, name, description - type standard/project - status active/inactive - is_default flag\n\n---\n**Tool-ID:** `po_workspaces_list` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workspaces_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"count\": 3,\n    \"processing_time\": \"53.91ms\",\n    \"result\": [\n        {\n            \"id\": 8,\n            \"name\": \"test\",\n            \"description\": \"\",\n            \"type\": \"folder\",\n            \"status\": \"active\",\n            \"is_default\": 0,\n            \"is_stealth\": 0,\n            \"is_archived\": 0,\n            \"image\": \"https://api.paperoffice.ai/latest/workflow_templates/image_pool_image/workspace/8382013e4f666b38ee9520c18565a693.webp\",\n            \"priority\": 500,\n            \"data_contact\": \"{\\\"salutation\\\":\\\"\\\",\\\"firstname\\\":\\\"\\\",\\\"lastname\\\":\\\"\\\",\\\"position\\\":\\\"\\\",\\\"department\\\":\\\"\\\",\\\"email\\\":\\\"\\\",\\\"phone\\\":\\\"\\\",\\\"mobile\\\":\\\"\\\",\\\"notes\\\":\\\"\\\",\\\"company_name\\\":\\\"\\\",\\\"company_vatid\\\":\\\"\\\",\\\"company_taxnr\\\":\\\"\\\"}\",\n            \"data_address\": \"{\\\"street\\\":\\\"\\\",\\\"extra\\\":\\\"\\\",\\\"zip\\\":\\\"\\\",\\\"city\\\":\\\"\\\",\\\"region\\\":\\\"\\\",\\\"country\\\":\\\"\\\"}\",\n            \"data_settings\": \"{\\\"color\\\":null,\\\"icon\\\":null,\\\"tags\\\":[],\\\"custom_label\\\":null,\\\"revision_secure\\\":false,\\\"workspace_tier\\\":\\\"standard\\\",\\\"retention_years\\\":10,\\\"reference\\\":\\\"\\\",\\\"external_id\\\":\\\"\\\",\\\"cost_center\\\":\\\"\\\",\\\"is_stealth\\\":false,\\\"is_archived\\\":false,\\\"password_enabled\\\":false,\\\"sms_enabled\\\":false,\\\"sms_phone\\\":\\\"\\\",\\\"dual_auth_enabled\\\":false,\\\"dual_auth_phone_1\\\":\\\"\\\",\\\"dual_auth_phone_2\\\":\\\"\\\"}\",\n            \"metadata\": null,\n            \"ai_dms_mode\": \"disabled\",\n            \"storage_mount_id\": null,\n            \"storage_mount_path\": null,\n            \"storage_mode\": \"cloud\",\n            \"auto_locked\": 0,\n            \"auto_locked_reason\": null,\n            \"default_locale\": null,\n            \"created_at\": \"2026-03-19T13:51:14Z\",\n            \"updated_at\": \"2026-04-08T07:00:14Z\",\n            \"workspace_tier\": \"standard\",\n            \"ai_dms_max_pages\": null,\n            \"ai_dms_max_pages_basic\": null,\n            \"ai_dms_max_pages_premium\": null,\n            \"ai_dms_max_pages_ultra\": null,\n            \"default_document_type_id\": null,\n            \"is_compliance_vault\": 0,\n            \"vault_retention_years\": null,\n            \"vault_retention_mode\": null,\n            \"vault_retention_legal_basis\": null,\n            \"contact_firstname\": \"\",\n            \"contact_lastname\": \"\",\n            \"contact_email\": \"\",\n            \"contact_phone\": \"\",\n            \"address_street\": \"\",\n            \"address_zip\": \"\",\n            \"address_city\": \"\",\n            \"address_country\": \"\",\n            \"tier\": \"standard\",\n            \"security_tier\": \"standard\",\n            \"reference\": \"\",\n            \"external_id\": \"\",\n            \"cost_center\": \"\",\n            \"color\": \"\",\n            \"icon\": \"\",\n            \"tags\": [],\n            \"password_enabled\": false,\n            \"sms_enabled\": false,\n            \"sms_phone\": \"\",\n            \"dual_auth_enabled\": false,\n            \"dual_auth_phone_1\": \"\",\n            \"dual_auth_phone_2\": \"\",\n            \"session_max_duration\": 480,\n            \"session_inactivity_timeout\": 0,\n            \"contact_salutation\": \"\",\n            \"contact_position\": \"\",\n            \"contact_department\": \"\",\n            \"contact_mobile\": \"\",\n            \"contact_notes\": \"\",\n            \"company_name\": \"\",\n            \"company_vatid\": \"\",\n            \"company_taxnr\": \"\",\n            \"address_extra\": \"\",\n            \"address_line3\": \"\",\n            \"address_region\": \"\",\n            \"address_country_code\": \"\",\n            \"stats\": {\n                \"doc_count\": 0,\n                \"analyzed_count\": 0,\n                \"unanalyzed_count\": 0,\n                \"storage_only_count\": 0,\n                \"ai_dms_basic_count\": 0,\n                \"ai_dms_premium_count\": 0,\n                \"ai_dms_ultra_count\": 0,\n                \"intelligence_score\": 0,\n                \"intelligence_level\": \"empty\",\n                \"analyzed_pct\": 0,\n                \"unanalyzed_pct\": 0,\n                \"storage_size_bytes\": 0,\n                \"storage_size\": \"0 MB\",\n                \"retention_active_count\": 0,\n                \"retention_compliance_count\": 0,\n                \"retention_latest_until\": null\n            },\n            \"retention_active_count\": 0,\n            \"retention_compliance_count\": 0,\n            \"retention_latest_until\": null,\n            \"is_revision_secure\": false,\n            \"revision_proof_locked\": false,\n            \"document_count\": 0,\n            \"analyzed_count\": 0,\n            \"unanalyzed_count\": 0,\n            \"storage_only_count\": 0,\n            \"ai_dms_basic_count\": 0,\n            \"ai_dms_premium_count\": 0,\n            \"ai_dms_ultra_count\": 0,\n            \"intelligence_score\": 0,\n            \"intelligence_level\": \"empty\",\n            \"analyzed_pct\": 0,\n            \"unanalyzed_pct\": 0\n        },\n        {\n            \"id\": 5,\n            \"name\": \"test\",\n            \"description\": \"\",\n            \"type\": \"folder\",\n            \"status\": \"active\",\n            \"is_default\": 0,\n            \"is_stealth\": 0,\n            \"is_archived\": 0,\n            \"image\": \"https://api.paperoffice.ai/latest/workflow_templates/image_pool_image/workspace/8382013e4f666b38ee9520c18565a693.webp\",\n            \"priority\": 500,\n            \"data_contact\": \"{\\\"salutation\\\":\\\"\\\",\\\"firstname\\\":\\\"\\\",\\\"lastname\\\":\\\"\\\",\\\"position\\\":\\\"\\\",\\\"department\\\":\\\"\\\",\\\"email\\\":\\\"\\\",\\\"phone\\\":\\\"\\\",\\\"mobile\\\":\\\"\\\",\\\"notes\\\":\\\"\\\",\\\"company_name\\\":\\\"\\\",\\\"company_vatid\\\":\\\"\\\",\\\"company_taxnr\\\":\\\"\\\"}\",\n            \"data_address\": \"{\\\"street\\\":\\\"\\\",\\\"extra\\\":\\\"\\\",\\\"zip\\\":\\\"\\\",\\\"city\\\":\\\"\\\",\\\"region\\\":\\\"\\\",\\\"country\\\":\\\"\\\"}\",\n            \"data_settings\": \"{\\\"color\\\":null,\\\"icon\\\":null,\\\"tags\\\":[],\\\"custom_label\\\":null,\\\"revision_secure\\\":false,\\\"workspace_tier\\\":\\\"standard\\\",\\\"retention_years\\\":10,\\\"reference\\\":\\\"\\\",\\\"external_id\\\":\\\"\\\",\\\"cost_center\\\":\\\"\\\",\\\"is_stealth\\\":false,\\\"is_archived\\\":false,\\\"password_enabled\\\":false,\\\"sms_enabled\\\":false,\\\"sms_phone\\\":\\\"\\\",\\\"dual_auth_enabled\\\":false,\\\"dual_auth_phone_1\\\":\\\"\\\",\\\"dual_auth_phone_2\\\":\\\"\\\"}\",\n            \"metadata\": null,\n            \"ai_dms_mode\": \"disabled\",\n            \"storage_mount_id\": null,\n            \"storage_mount_path\": null,\n            \"storage_mode\": \"cloud\",\n            \"auto_locked\": 0,\n            \"auto_locked_reason\": null,\n            \"default_locale\": null,\n            \"created_at\": \"2026-03-19T10:54:01Z\",\n            \"updated_at\": \"2026-04-08T07:00:14Z\",\n            \"workspace_tier\": \"standard\",\n            \"ai_dms_max_pages\": null,\n            \"ai_dms_max_pages_basic\": null,\n            \"ai_dms_max_pages_premium\": null,\n            \"ai_dms_max_pages_ultra\": null,\n            \"default_document_type_id\": null,\n            \"is_compliance_vault\": 0,\n            \"vault_retention_years\": null,\n            \"vault_retention_mode\": null,\n            \"vault_retention_legal_basis\": null,\n            \"contact_firstname\": \"\",\n            \"contact_lastname\": \"\",\n            \"contact_email\": \"\",\n            \"contact_phone\": \"\",\n            \"address_street\": \"\",\n            \"address_zip\": \"\",\n            \"address_city\": \"\",\n            \"address_country\": \"\",\n            \"tier\": \"standard\",\n            \"security_tier\": \"standard\",\n            \"reference\": \"\",\n            \"external_id\": \"\",\n            \"cost_center\": \"\",\n            \"color\": \"\",\n            \"icon\": \"\",\n            \"tags\": [],\n            \"password_enabled\": false,\n            \"sms_enabled\": false,\n            \"sms_phone\": \"\",\n            \"dual_auth_enabled\": false,\n            \"dual_auth_phone_1\": \"\",\n            \"dual_auth_phone_2\": \"\",\n            \"session_max_duration\": 480,\n            \"session_inactivity_timeout\": 0,\n            \"contact_salutation\": \"\",\n            \"contact_position\": \"\",\n            \"contact_department\": \"\",\n            \"contact_mobile\": \"\",\n            \"contact_notes\": \"\",\n            \"company_name\": \"\",\n            \"company_vatid\": \"\",\n            \"company_taxnr\": \"\",\n            \"address_extra\": \"\",\n            \"address_line3\": \"\",\n            \"address_region\": \"\",\n            \"address_country_code\": \"\",\n            \"stats\": {\n                \"doc_count\": 0,\n                \"analyzed_count\": 0,\n                \"unanalyzed_count\": 0,\n                \"storage_only_count\": 0,\n                \"ai_dms_basic_count\": 0,\n                \"ai_dms_premium_count\": 0,\n                \"ai_dms_ultra_count\": 0,\n                \"intelligence_score\": 0,\n                \"intelligence_level\": \"empty\",\n                \"analyzed_pct\": 0,\n                \"unanalyzed_pct\": 0,\n                \"storage_size_bytes\": 0,\n                \"storage_size\": \"0 MB\",\n                \"retention_active_count\": 0,\n                \"retention_compliance_count\": 0,\n                \"retention_latest_until\": null\n            },\n            \"retention_active_count\": 0,\n            \"retention_compliance_count\": 0,\n            \"retention_latest_until\": null,\n            \"is_revision_secure\": false,\n            \"revision_proof_locked\": false,\n            \"document_count\": 0,\n            \"analyzed_count\": 0,\n            \"unanalyzed_count\": 0,\n            \"storage_only_count\": 0,\n            \"ai_dms_basic_count\": 0,\n            \"ai_dms_premium_count\": 0,\n            \"ai_dms_ultra_count\": 0,\n            \"intelligence_score\": 0,\n            \"intelligence_level\": \"empty\",\n            \"analyzed_pct\": 0,\n            \"unanalyzed_pct\": 0\n        },\n        {\n            \"id\": 2,\n            \"name\": \"Standard\",\n            \"description\": null,\n            \"type\": \"standard\",\n            \"status\": \"active\",\n            \"is_default\": 1,\n            \"is_stealth\": 0,\n            \"is_archived\": 0,\n            \"image\": \"https://api.paperoffice.ai/latest/workflow_templates/image_pool_image/workspace/8382013e4f666b38ee9520c18565a693.webp\",\n            \"priority\": 500,\n            \"data_contact\": null,\n            \"data_address\": null,\n            \"data_settings\": null,\n            \"metadata\": null,\n            \"ai_dms_mode\": \"disabled\",\n            \"storage_mount_id\": null,\n            \"storage_mount_path\": null,\n            \"storage_mode\": \"cloud\",\n            \"auto_locked\": 0,\n            \"auto_locked_reason\": null,\n            \"default_locale\": \"de:DE\",\n            \"created_at\": \"2026-03-18T09:39:46Z\",\n            \"updated_at\": \"2026-04-08T07:00:14Z\",\n            \"workspace_tier\": \"standard\",\n            \"ai_dms_max_pages\": null,\n            \"ai_dms_max_pages_basic\": null,\n            \"ai_dms_max_pages_premium\": null,\n            \"ai_dms_max_pages_ultra\": null,\n            \"default_document_type_id\": null,\n            \"is_compliance_vault\": 0,\n            \"vault_retention_years\": null,\n            \"vault_retention_mode\": null,\n            \"vault_retention_legal_basis\": null,\n            \"contact_firstname\": \"\",\n            \"contact_lastname\": \"\",\n            \"contact_email\": \"\",\n            \"contact_phone\": \"\",\n            \"address_street\": \"\",\n            \"address_zip\": \"\",\n            \"address_city\": \"\",\n            \"address_country\": \"\",\n            \"tier\": \"standard\",\n            \"security_tier\": \"standard\",\n            \"reference\": \"\",\n            \"external_id\": \"\",\n            \"cost_center\": \"\",\n            \"color\": \"\",\n            \"icon\": \"\",\n            \"tags\": [],\n            \"password_enabled\": false,\n            \"sms_enabled\": false,\n            \"sms_phone\": \"\",\n            \"dual_auth_enabled\": false,\n            \"dual_auth_phone_1\": \"\",\n            \"dual_auth_phone_2\": \"\",\n            \"session_max_duration\": 480,\n            \"session_inactivity_timeout\": 0,\n            \"contact_salutation\": \"\",\n            \"contact_position\": \"\",\n            \"contact_department\": \"\",\n            \"contact_mobile\": \"\",\n            \"contact_notes\": \"\",\n            \"company_name\": \"\",\n            \"company_vatid\": \"\",\n            \"company_taxnr\": \"\",\n            \"address_extra\": \"\",\n            \"address_line3\": \"\",\n            \"address_region\": \"\",\n            \"address_country_code\": \"\",\n            \"stats\": {\n                \"doc_count\": 1,\n                \"analyzed_count\": 1,\n                \"unanalyzed_count\": 0,\n                \"storage_only_count\": 0,\n                \"ai_dms_basic_count\": 0,\n                \"ai_dms_premium_count\": 1,\n                \"ai_dms_ultra_count\": 0,\n                \"intelligence_score\": 70,\n                \"intelligence_level\": \"strong\",\n                \"analyzed_pct\": 100,\n                \"unanalyzed_pct\": 0,\n                \"storage_size_bytes\": 172705,\n                \"storage_size\": \"0.16 MB\",\n                \"retention_active_count\": 0,\n                \"retention_compliance_count\": 0,\n                \"retention_latest_until\": null\n            },\n            \"retention_active_count\": 0,\n            \"retention_compliance_count\": 0,\n            \"retention_latest_until\": null,\n            \"is_revision_secure\": false,\n            \"revision_proof_locked\": false,\n            \"document_count\": 1,\n            \"analyzed_count\": 1,\n            \"unanalyzed_count\": 0,\n            \"storage_only_count\": 0,\n            \"ai_dms_basic_count\": 0,\n            \"ai_dms_premium_count\": 1,\n            \"ai_dms_ultra_count\": 0,\n            \"intelligence_score\": 70,\n            \"intelligence_level\": \"strong\",\n            \"analyzed_pct\": 100,\n            \"unanalyzed_pct\": 0\n        }\n    ],\n    \"status\": \"success\",\n    \"total_count\": 3,\n    \"workspaces\": [\n        {\n            \"id\": 8,\n            \"name\": \"test\",\n            \"description\": \"\",\n            \"type\": \"folder\",\n            \"status\": \"active\",\n            \"is_default\": 0,\n            \"is_stealth\": 0,\n            \"is_archived\": 0,\n            \"image\": \"https://api.paperoffice.ai/latest/workflow_templates/image_pool_image/workspace/8382013e4f666b38ee9520c18565a693.webp\",\n            \"priority\": 500,\n            \"data_contact\": \"{\\\"salutation\\\":\\\"\\\",\\\"firstname\\\":\\\"\\\",\\\"lastname\\\":\\\"\\\",\\\"position\\\":\\\"\\\",\\\"department\\\":\\\"\\\",\\\"email\\\":\\\"\\\",\\\"phone\\\":\\\"\\\",\\\"mobile\\\":\\\"\\\",\\\"notes\\\":\\\"\\\",\\\"company_name\\\":\\\"\\\",\\\"company_vatid\\\":\\\"\\\",\\\"company_taxnr\\\":\\\"\\\"}\",\n            \"data_address\": \"{\\\"street\\\":\\\"\\\",\\\"extra\\\":\\\"\\\",\\\"zip\\\":\\\"\\\",\\\"city\\\":\\\"\\\",\\\"region\\\":\\\"\\\",\\\"country\\\":\\\"\\\"}\",\n            \"data_settings\": \"{\\\"color\\\":null,\\\"icon\\\":null,\\\"tags\\\":[],\\\"custom_label\\\":null,\\\"revision_secure\\\":false,\\\"workspace_tier\\\":\\\"standard\\\",\\\"retention_years\\\":10,\\\"reference\\\":\\\"\\\",\\\"external_id\\\":\\\"\\\",\\\"cost_center\\\":\\\"\\\",\\\"is_stealth\\\":false,\\\"is_archived\\\":false,\\\"password_enabled\\\":false,\\\"sms_enabled\\\":false,\\\"sms_phone\\\":\\\"\\\",\\\"dual_auth_enabled\\\":false,\\\"dual_auth_phone_1\\\":\\\"\\\",\\\"dual_auth_phone_2\\\":\\\"\\\"}\",\n            \"metadata\": null,\n            \"ai_dms_mode\": \"disabled\",\n            \"storage_mount_id\": null,\n            \"storage_mount_path\": null,\n            \"storage_mode\": \"cloud\",\n            \"auto_locked\": 0,\n            \"auto_locked_reason\": null,\n            \"default_locale\": null,\n            \"created_at\": \"2026-03-19T13:51:14Z\",\n            \"updated_at\": \"2026-04-08T07:00:14Z\",\n            \"workspace_tier\": \"standard\",\n            \"ai_dms_max_pages\": null,\n            \"ai_dms_max_pages_basic\": null,\n            \"ai_dms_max_pages_premium\": null,\n            \"ai_dms_max_pages_ultra\": null,\n            \"default_document_type_id\": null,\n            \"is_compliance_vault\": 0,\n            \"vault_retention_years\": null,\n            \"vault_retention_mode\": null,\n            \"vault_retention_legal_basis\": null,\n            \"contact_firstname\": \"\",\n            \"contact_lastname\": \"\",\n            \"contact_email\": \"\",\n            \"contact_phone\": \"\",\n            \"address_street\": \"\",\n            \"address_zip\": \"\",\n            \"address_city\": \"\",\n            \"address_country\": \"\",\n            \"tier\": \"standard\",\n            \"security_tier\": \"standard\",\n            \"reference\": \"\",\n            \"external_id\": \"\",\n            \"cost_center\": \"\",\n            \"color\": \"\",\n            \"icon\": \"\",\n            \"tags\": [],\n            \"password_enabled\": false,\n            \"sms_enabled\": false,\n            \"sms_phone\": \"\",\n            \"dual_auth_enabled\": false,\n            \"dual_auth_phone_1\": \"\",\n            \"dual_auth_phone_2\": \"\",\n            \"session_max_duration\": 480,\n            \"session_inactivity_timeout\": 0,\n            \"contact_salutation\": \"\",\n            \"contact_position\": \"\",\n            \"contact_department\": \"\",\n            \"contact_mobile\": \"\",\n            \"contact_notes\": \"\",\n            \"company_name\": \"\",\n            \"company_vatid\": \"\",\n            \"company_taxnr\": \"\",\n            \"address_extra\": \"\",\n            \"address_line3\": \"\",\n            \"address_region\": \"\",\n            \"address_country_code\": \"\",\n            \"stats\": {\n                \"doc_count\": 0,\n                \"analyzed_count\": 0,\n                \"unanalyzed_count\": 0,\n                \"storage_only_count\": 0,\n                \"ai_dms_basic_count\": 0,\n                \"ai_dms_premium_count\": 0,\n                \"ai_dms_ultra_count\": 0,\n                \"intelligence_score\": 0,\n                \"intelligence_level\": \"empty\",\n                \"analyzed_pct\": 0,\n                \"unanalyzed_pct\": 0,\n                \"storage_size_bytes\": 0,\n                \"storage_size\": \"0 MB\",\n                \"retention_active_count\": 0,\n                \"retention_compliance_count\": 0,\n                \"retention_latest_until\": null\n            },\n            \"retention_active_count\": 0,\n            \"retention_compliance_count\": 0,\n            \"retention_latest_until\": null,\n            \"is_revision_secure\": false,\n            \"revision_proof_locked\": false,\n            \"document_count\": 0,\n            \"analyzed_count\": 0,\n            \"unanalyzed_count\": 0,\n            \"storage_only_count\": 0,\n            \"ai_dms_basic_count\": 0,\n            \"ai_dms_premium_count\": 0,\n            \"ai_dms_ultra_count\": 0,\n            \"intelligence_score\": 0,\n            \"intelligence_level\": \"empty\",\n            \"analyzed_pct\": 0,\n            \"unanalyzed_pct\": 0\n        },\n        {\n            \"id\": 5,\n            \"name\": \"test\",\n            \"description\": \"\",\n            \"type\": \"folder\",\n            \"status\": \"active\",\n            \"is_default\": 0,\n            \"is_stealth\": 0,\n            \"is_archived\": 0,\n            \"image\": \"https://api.paperoffice.ai/latest/workflow_templates/image_pool_image/workspace/8382013e4f666b38ee9520c18565a693.webp\",\n            \"priority\": 500,\n            \"data_contact\": \"{\\\"salutation\\\":\\\"\\\",\\\"firstname\\\":\\\"\\\",\\\"lastname\\\":\\\"\\\",\\\"position\\\":\\\"\\\",\\\"department\\\":\\\"\\\",\\\"email\\\":\\\"\\\",\\\"phone\\\":\\\"\\\",\\\"mobile\\\":\\\"\\\",\\\"notes\\\":\\\"\\\",\\\"company_name\\\":\\\"\\\",\\\"company_vatid\\\":\\\"\\\",\\\"company_taxnr\\\":\\\"\\\"}\",\n            \"data_address\": \"{\\\"street\\\":\\\"\\\",\\\"extra\\\":\\\"\\\",\\\"zip\\\":\\\"\\\",\\\"city\\\":\\\"\\\",\\\"region\\\":\\\"\\\",\\\"country\\\":\\\"\\\"}\",\n            \"data_settings\": \"{\\\"color\\\":null,\\\"icon\\\":null,\\\"tags\\\":[],\\\"custom_label\\\":null,\\\"revision_secure\\\":false,\\\"workspace_tier\\\":\\\"standard\\\",\\\"retention_years\\\":10,\\\"reference\\\":\\\"\\\",\\\"external_id\\\":\\\"\\\",\\\"cost_center\\\":\\\"\\\",\\\"is_stealth\\\":false,\\\"is_archived\\\":false,\\\"password_enabled\\\":false,\\\"sms_enabled\\\":false,\\\"sms_phone\\\":\\\"\\\",\\\"dual_auth_enabled\\\":false,\\\"dual_auth_phone_1\\\":\\\"\\\",\\\"dual_auth_phone_2\\\":\\\"\\\"}\",\n            \"metadata\": null,\n            \"ai_dms_mode\": \"disabled\",\n            \"storage_mount_id\": null,\n            \"storage_mount_path\": null,\n            \"storage_mode\": \"cloud\",\n            \"auto_locked\": 0,\n            \"auto_locked_reason\": null,\n            \"default_locale\": null,\n            \"created_at\": \"2026-03-19T10:54:01Z\",\n            \"updated_at\": \"2026-04-08T07:00:14Z\",\n            \"workspace_tier\": \"standard\",\n            \"ai_dms_max_pages\": null,\n            \"ai_dms_max_pages_basic\": null,\n            \"ai_dms_max_pages_premium\": null,\n            \"ai_dms_max_pages_ultra\": null,\n            \"default_document_type_id\": null,\n            \"is_compliance_vault\": 0,\n            \"vault_retention_years\": null,\n            \"vault_retention_mode\": null,\n            \"vault_retention_legal_basis\": null,\n            \"contact_firstname\": \"\",\n            \"contact_lastname\": \"\",\n            \"contact_email\": \"\",\n            \"contact_phone\": \"\",\n            \"address_street\": \"\",\n            \"address_zip\": \"\",\n            \"address_city\": \"\",\n            \"address_country\": \"\",\n            \"tier\": \"standard\",\n            \"security_tier\": \"standard\",\n            \"reference\": \"\",\n            \"external_id\": \"\",\n            \"cost_center\": \"\",\n            \"color\": \"\",\n            \"icon\": \"\",\n            \"tags\": [],\n            \"password_enabled\": false,\n            \"sms_enabled\": false,\n            \"sms_phone\": \"\",\n            \"dual_auth_enabled\": false,\n            \"dual_auth_phone_1\": \"\",\n            \"dual_auth_phone_2\": \"\",\n            \"session_max_duration\": 480,\n            \"session_inactivity_timeout\": 0,\n            \"contact_salutation\": \"\",\n            \"contact_position\": \"\",\n            \"contact_department\": \"\",\n            \"contact_mobile\": \"\",\n            \"contact_notes\": \"\",\n            \"company_name\": \"\",\n            \"company_vatid\": \"\",\n            \"company_taxnr\": \"\",\n            \"address_extra\": \"\",\n            \"address_line3\": \"\",\n            \"address_region\": \"\",\n            \"address_country_code\": \"\",\n            \"stats\": {\n                \"doc_count\": 0,\n                \"analyzed_count\": 0,\n                \"unanalyzed_count\": 0,\n                \"storage_only_count\": 0,\n                \"ai_dms_basic_count\": 0,\n                \"ai_dms_premium_count\": 0,\n                \"ai_dms_ultra_count\": 0,\n                \"intelligence_score\": 0,\n                \"intelligence_level\": \"empty\",\n                \"analyzed_pct\": 0,\n                \"unanalyzed_pct\": 0,\n                \"storage_size_bytes\": 0,\n                \"storage_size\": \"0 MB\",\n                \"retention_active_count\": 0,\n                \"retention_compliance_count\": 0,\n                \"retention_latest_until\": null\n            },\n            \"retention_active_count\": 0,\n            \"retention_compliance_count\": 0,\n            \"retention_latest_until\": null,\n            \"is_revision_secure\": false,\n            \"revision_proof_locked\": false,\n            \"document_count\": 0,\n            \"analyzed_count\": 0,\n            \"unanalyzed_count\": 0,\n            \"storage_only_count\": 0,\n            \"ai_dms_basic_count\": 0,\n            \"ai_dms_premium_count\": 0,\n            \"ai_dms_ultra_count\": 0,\n            \"intelligence_score\": 0,\n            \"intelligence_level\": \"empty\",\n            \"analyzed_pct\": 0,\n            \"unanalyzed_pct\": 0\n        },\n        {\n            \"id\": 2,\n            \"name\": \"Standard\",\n            \"description\": null,\n            \"type\": \"standard\",\n            \"status\": \"active\",\n            \"is_default\": 1,\n            \"is_stealth\": 0,\n            \"is_archived\": 0,\n            \"image\": \"https://api.paperoffice.ai/latest/workflow_templates/image_pool_image/workspace/8382013e4f666b38ee9520c18565a693.webp\",\n            \"priority\": 500,\n            \"data_contact\": null,\n            \"data_address\": null,\n            \"data_settings\": null,\n            \"metadata\": null,\n            \"ai_dms_mode\": \"disabled\",\n            \"storage_mount_id\": null,\n            \"storage_mount_path\": null,\n            \"storage_mode\": \"cloud\",\n            \"auto_locked\": 0,\n            \"auto_locked_reason\": null,\n            \"default_locale\": \"de:DE\",\n            \"created_at\": \"2026-03-18T09:39:46Z\",\n            \"updated_at\": \"2026-04-08T07:00:14Z\",\n            \"workspace_tier\": \"standard\",\n            \"ai_dms_max_pages\": null,\n            \"ai_dms_max_pages_basic\": null,\n            \"ai_dms_max_pages_premium\": null,\n            \"ai_dms_max_pages_ultra\": null,\n            \"default_document_type_id\": null,\n            \"is_compliance_vault\": 0,\n            \"vault_retention_years\": null,\n            \"vault_retention_mode\": null,\n            \"vault_retention_legal_basis\": null,\n            \"contact_firstname\": \"\",\n            \"contact_lastname\": \"\",\n            \"contact_email\": \"\",\n            \"contact_phone\": \"\",\n            \"address_street\": \"\",\n            \"address_zip\": \"\",\n            \"address_city\": \"\",\n            \"address_country\": \"\",\n            \"tier\": \"standard\",\n            \"security_tier\": \"standard\",\n            \"reference\": \"\",\n            \"external_id\": \"\",\n            \"cost_center\": \"\",\n            \"color\": \"\",\n            \"icon\": \"\",\n            \"tags\": [],\n            \"password_enabled\": false,\n            \"sms_enabled\": false,\n            \"sms_phone\": \"\",\n            \"dual_auth_enabled\": false,\n            \"dual_auth_phone_1\": \"\",\n            \"dual_auth_phone_2\": \"\",\n            \"session_max_duration\": 480,\n            \"session_inactivity_timeout\": 0,\n            \"contact_salutation\": \"\",\n            \"contact_position\": \"\",\n            \"contact_department\": \"\",\n            \"contact_mobile\": \"\",\n            \"contact_notes\": \"\",\n            \"company_name\": \"\",\n            \"company_vatid\": \"\",\n            \"company_taxnr\": \"\",\n            \"address_extra\": \"\",\n            \"address_line3\": \"\",\n            \"address_region\": \"\",\n            \"address_country_code\": \"\",\n            \"stats\": {\n                \"doc_count\": 1,\n                \"analyzed_count\": 1,\n                \"unanalyzed_count\": 0,\n                \"storage_only_count\": 0,\n                \"ai_dms_basic_count\": 0,\n                \"ai_dms_premium_count\": 1,\n                \"ai_dms_ultra_count\": 0,\n                \"intelligence_score\": 70,\n                \"intelligence_level\": \"strong\",\n                \"analyzed_pct\": 100,\n                \"unanalyzed_pct\": 0,\n                \"storage_size_bytes\": 172705,\n                \"storage_size\": \"0.16 MB\",\n                \"retention_active_count\": 0,\n                \"retention_compliance_count\": 0,\n                \"retention_latest_until\": null\n            },\n            \"retention_active_count\": 0,\n            \"retention_compliance_count\": 0,\n            \"retention_latest_until\": null,\n            \"is_revision_secure\": false,\n            \"revision_proof_locked\": false,\n            \"document_count\": 1,\n            \"analyzed_count\": 1,\n            \"unanalyzed_count\": 0,\n            \"storage_only_count\": 0,\n            \"ai_dms_basic_count\": 0,\n            \"ai_dms_premium_count\": 1,\n            \"ai_dms_ultra_count\": 0,\n            \"intelligence_score\": 70,\n            \"intelligence_level\": \"strong\",\n            \"analyzed_pct\": 100,\n            \"unanalyzed_pct\": 0\n        }\n    ]\n}"}]},{"name":"Update workspace","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/workspaces-update","host":["{{base_url}}"],"path":["documents","workspaces-update"]},"description":"Update Workspace Modify workspace name, description, status, or metadata.\n\n---\n**Tool-ID:** `po_workspaces_update` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workspaces_update`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"id","type":"text","description":"**REQUIRED** | ID to update Workspaces (required field). | Type: integer","value":"1"},{"key":"name","type":"text","description":"*(optional)* | new Workspace name. | Type: string","value":"My item"},{"key":"description","type":"text","description":"*(optional)* | New description. | Type: string","value":"Example text content"},{"key":"workspace_tier","type":"text","description":"*(optional)* | Security level (only upgrade allowed, no Downgrade). | Type: string | Allowed: standard, confidential, compliance","value":"standard"},{"key":"is_revision_secure","type":"text","description":"*(optional)* | revision safety enable (einmalig, unwiderruflich). | Type: boolean","value":"true"},{"key":"retention_years","type":"text","description":"*(optional)* | Retention period in years. Increase allowed only for WORM only. | Type: integer | Min: 1 | Max: 99","value":"1"},{"key":"ai_dms_mode","type":"text","description":"*(optional)* | AI-DMS Mode. In change, existing documents are retroactively age-planted. | Type: string | Allowed: disabled, basic, premium, ultra","value":"disabled"},{"key":"default_locale","type":"text","description":"*(optional)* | Default language/region. | Type: string","value":"example-value"},{"key":"workspace_password","type":"text","description":"*(optional)* | new Workspace password. | Type: string","value":"example-value"},{"key":"status","type":"text","description":"*(optional)* | Workspace-Status. | Type: string","value":"active"},{"key":"type","type":"text","description":"*(optional)* | Workspace-type. | Type: string","value":"default"},{"key":"image","type":"file","description":"*(optional)* | Bild-URL. | Type: string","src":null},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"is_default","type":"text","description":"*(optional)* | Mark as standard. | Type: boolean","value":"true"},{"key":"is_stealth","type":"text","description":"*(optional)* | Stealth-Modus. | Type: boolean","value":"true"},{"key":"is_archived","type":"text","description":"*(optional)* | Archived. | Type: boolean","value":"true"},{"key":"color","type":"text","description":"*(optional)* | Farbcode. | Type: string","value":"example-value"},{"key":"icon","type":"text","description":"*(optional)* | Icon. | Type: string","value":"example-value"},{"key":"tags","type":"text","description":"*(optional)* | Tags. | Type: array","value":"invoice"},{"key":"contact_salutation","type":"text","description":"*(optional)* | Contact salutation | Type: string","value":"example-value"},{"key":"contact_firstname","type":"text","description":"*(optional)* | Contact firstname | Type: string","value":"example-value"},{"key":"contact_lastname","type":"text","description":"*(optional)* | Contact lastname | Type: string","value":"example-value"},{"key":"contact_email","type":"text","description":"*(optional)* | Contact email | Type: string","value":"user@example.com"},{"key":"contact_phone","type":"text","description":"*(optional)* | Contact phone | Type: string","value":"example-value"},{"key":"company_name","type":"text","description":"*(optional)* | Company name | Type: string","value":"example-value"},{"key":"address_street","type":"text","description":"*(optional)* | Address street | Type: string","value":"example-value"},{"key":"address_zip","type":"text","description":"*(optional)* | Address zip | Type: string","value":"example-value"},{"key":"address_city","type":"text","description":"*(optional)* | Address city | Type: string","value":"example-value"},{"key":"address_country","type":"text","description":"*(optional)* | Address country | Type: string","value":"example-value"},{"key":"metadata","type":"text","description":"*(optional)* | Additional metadata. | Type: object","value":"{}"},{"key":"password_enabled","type":"text","description":"*(optional)* | Enable or disable password protection. | Type: boolean","value":"true"},{"key":"sms_enabled","type":"text","description":"*(optional)* | SMS-verification enable. | Type: boolean","value":"true"},{"key":"sms_phone","type":"text","description":"*(optional)* | Phone number for SMS verification. | Type: string","value":"example-value"},{"key":"dual_auth_enabled","type":"text","description":"*(optional)* | 2-persons-approval enable. | Type: boolean","value":"true"},{"key":"dual_auth_phone_1","type":"text","description":"*(optional)* | Telefonnummer Person 1. | Type: string","value":"example-value"},{"key":"dual_auth_phone_2","type":"text","description":"*(optional)* | Telefonnummer Person 2. | Type: string","value":"example-value"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/workspaces-update","host":["{{base_url}}"],"path":["documents","workspaces-update"]},"description":"Update Workspace Modify workspace name, description, status, or metadata.\n\n---\n**Tool-ID:** `po_workspaces_update` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workspaces_update`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.","body":{"mode":"formdata","formdata":[{"key":"id","type":"text","description":"**REQUIRED** | ID to update Workspaces (required field). | Type: integer","value":"1"},{"key":"name","type":"text","description":"*(optional)* | new Workspace name. | Type: string","value":"My item"},{"key":"description","type":"text","description":"*(optional)* | New description. | Type: string","value":"Example text content"},{"key":"workspace_tier","type":"text","description":"*(optional)* | Security level (only upgrade allowed, no Downgrade). | Type: string | Allowed: standard, confidential, compliance","value":"standard"},{"key":"is_revision_secure","type":"text","description":"*(optional)* | revision safety enable (einmalig, unwiderruflich). | Type: boolean","value":"true"},{"key":"retention_years","type":"text","description":"*(optional)* | Retention period in years. Increase allowed only for WORM only. | Type: integer | Min: 1 | Max: 99","value":"1"},{"key":"ai_dms_mode","type":"text","description":"*(optional)* | AI-DMS Mode. In change, existing documents are retroactively age-planted. | Type: string | Allowed: disabled, basic, premium, ultra","value":"disabled"},{"key":"default_locale","type":"text","description":"*(optional)* | Default language/region. | Type: string","value":"example-value"},{"key":"workspace_password","type":"text","description":"*(optional)* | new Workspace password. | Type: string","value":"example-value"},{"key":"status","type":"text","description":"*(optional)* | Workspace-Status. | Type: string","value":"active"},{"key":"type","type":"text","description":"*(optional)* | Workspace-type. | Type: string","value":"default"},{"key":"image","type":"file","description":"*(optional)* | Bild-URL. | Type: string","src":null},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","value":"100"},{"key":"is_default","type":"text","description":"*(optional)* | Mark as standard. | Type: boolean","value":"true"},{"key":"is_stealth","type":"text","description":"*(optional)* | Stealth-Modus. | Type: boolean","value":"true"},{"key":"is_archived","type":"text","description":"*(optional)* | Archived. | Type: boolean","value":"true"},{"key":"color","type":"text","description":"*(optional)* | Farbcode. | Type: string","value":"example-value"},{"key":"icon","type":"text","description":"*(optional)* | Icon. | Type: string","value":"example-value"},{"key":"tags","type":"text","description":"*(optional)* | Tags. | Type: array","value":"invoice"},{"key":"contact_salutation","type":"text","description":"*(optional)* | Contact salutation | Type: string","value":"example-value"},{"key":"contact_firstname","type":"text","description":"*(optional)* | Contact firstname | Type: string","value":"example-value"},{"key":"contact_lastname","type":"text","description":"*(optional)* | Contact lastname | Type: string","value":"example-value"},{"key":"contact_email","type":"text","description":"*(optional)* | Contact email | Type: string","value":"user@example.com"},{"key":"contact_phone","type":"text","description":"*(optional)* | Contact phone | Type: string","value":"example-value"},{"key":"company_name","type":"text","description":"*(optional)* | Company name | Type: string","value":"example-value"},{"key":"address_street","type":"text","description":"*(optional)* | Address street | Type: string","value":"example-value"},{"key":"address_zip","type":"text","description":"*(optional)* | Address zip | Type: string","value":"example-value"},{"key":"address_city","type":"text","description":"*(optional)* | Address city | Type: string","value":"example-value"},{"key":"address_country","type":"text","description":"*(optional)* | Address country | Type: string","value":"example-value"},{"key":"metadata","type":"text","description":"*(optional)* | Additional metadata. | Type: object","value":"{}"},{"key":"password_enabled","type":"text","description":"*(optional)* | Enable or disable password protection. | Type: boolean","value":"true"},{"key":"sms_enabled","type":"text","description":"*(optional)* | SMS-verification enable. | Type: boolean","value":"true"},{"key":"sms_phone","type":"text","description":"*(optional)* | Phone number for SMS verification. | Type: string","value":"example-value"},{"key":"dual_auth_enabled","type":"text","description":"*(optional)* | 2-persons-approval enable. | Type: boolean","value":"true"},{"key":"dual_auth_phone_1","type":"text","description":"*(optional)* | Telefonnummer Person 1. | Type: string","value":"example-value"},{"key":"dual_auth_phone_2","type":"text","description":"*(optional)* | Telefonnummer Person 2. | Type: string","value":"example-value"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"workspace_tier\": \"standard\",\n    \"ai_dms_backfill\": {\n        \"documents_queued\": 1,\n        \"documents_tier_updated\": 1,\n        \"ai_dms_tier\": \"example\",\n        \"source\": \"activation\"\n    },\n    \"processing_time\": \"example\"\n}"}]},{"name":"Validate Workspace Storage Health","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/documents/workspace-storage-health","host":["{{base_url}}"],"path":["documents","workspace-storage-health"]},"description":"Check the storage status of a workspace: Cloud-Mode, BYOS-Health, Latency, Offline-Status, Auto-Lock Reason. Especially important for BYOD/BYOS workspaces with external storage.\n\n---\n**Tool-ID:** `po_workspaces_validate_storage` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workspaces_validate_storage`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"workspace_id","type":"text","description":"**REQUIRED** | Workspace ID to check | Type: integer","value":"1"}]}},"response":[]}]},{"name":"💾 Storage Mounts","description":"# Storage Mounts\n\nCloud storage integration: mount external storage (S3, Azure, GCS, SFTP, WebDAV) as virtual drives. Manage files, sync data, and configure storage connectors.","item":[{"name":"Add Storage Mount","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/storage_mounts/add","host":["{{base_url}}"],"path":["storage_mounts","add"]},"description":"Add Storage Mount Create a new storage mount connection. Required: name, host Optional: connector_type sftp|ftp|ftps|smb|webdav|s3, port, username, password, ssh_key, base_path Response: json { \"status\": \"success\", \"message\": \"MOUNT_CREATED\", \"data\": { \"mount_id\": 123, \"name\": \"Office NAS\" } }\n\n---\n**Tool-ID:** `po_storage_mounts_add` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_add`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"name","type":"text","description":"**REQUIRED** | Name the Storage Mounts (required field). | Type: string","value":"My item"},{"key":"host","type":"text","description":"*(optional)* | Hostname or IP-address the Servers. | Type: string","value":"https://api.example.com"},{"key":"connector_type","type":"text","description":"*(optional)* | type the Speicheranbindung. | Type: string | Allowed: sftp, s3, azure_blob, webdav, google_drive, onedrive, dropbox, box, imap","value":"sftp"},{"key":"mount_purpose","type":"text","description":"**REQUIRED** | Zweck the Mounts: 'byos' (Bring Your Own Storage) or 'connector' (Datensource). required field, after creation unveraenderlich. | Type: string | Allowed: byos, connector","value":"byos"},{"key":"description","type":"text","description":"*(optional)* | description the Mounts. | Type: string","value":"Example text content"},{"key":"port","type":"text","description":"*(optional)* | Port (Default: 22 for SFTP, 443 for S3/WebDAV, 993 for IMAP). | Type: integer | Min: 1 | Max: 65535","value":"1"},{"key":"username","type":"text","description":"*(optional)* | Username for the authentication. | Type: string","value":"john.doe"},{"key":"password","type":"text","description":"*(optional)* | Password (is stored encrypted). | Type: string","value":"REPLACE_WITH_PASSWORD"},{"key":"ssh_key","type":"text","description":"*(optional)* | SSH Private Key (is stored encrypted). | Type: string","value":"example-value"},{"key":"api_token","type":"text","description":"*(optional)* | API-Token (is stored encrypted). | Type: string","value":"example-value"},{"key":"base_path","type":"text","description":"*(optional)* | Basispfad on the Remote-Server. No '.' Segmente allowed. | Type: string","value":"/"},{"key":"encryption_key","type":"text","description":"*(optional)* | Encryption Password for BYOS Mounts (Mandatory when mount_purpose='byos'). WARNING: Irreversible in case of loss! | Type: string","value":"example-value"},{"key":"connection_options","type":"text","description":"*(optional)* | Additional Verbindungsoptionen as JSON object (e.g. S3-Region, IMAP-folder). | Type: object","value":"{}"},{"key":"icon_url","type":"text","description":"*(optional)* | URL for a Userdefiniertes Icon. | Type: string","value":"https://example.com"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/storage_mounts/add","host":["{{base_url}}"],"path":["storage_mounts","add"]},"description":"Add Storage Mount Create a new storage mount connection. Required: name, host Optional: connector_type sftp|ftp|ftps|smb|webdav|s3, port, username, password, ssh_key, base_path Response: json { \"status\": \"success\", \"message\": \"MOUNT_CREATED\", \"data\": { \"mount_id\": 123, \"name\": \"Office NAS\" } }\n\n---\n**Tool-ID:** `po_storage_mounts_add` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_add`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"name","type":"text","description":"**REQUIRED** | Name the Storage Mounts (required field). | Type: string","value":"My item"},{"key":"host","type":"text","description":"*(optional)* | Hostname or IP-address the Servers. | Type: string","value":"https://api.example.com"},{"key":"connector_type","type":"text","description":"*(optional)* | type the Speicheranbindung. | Type: string | Allowed: sftp, s3, azure_blob, webdav, google_drive, onedrive, dropbox, box, imap","value":"sftp"},{"key":"mount_purpose","type":"text","description":"**REQUIRED** | Zweck the Mounts: 'byos' (Bring Your Own Storage) or 'connector' (Datensource). required field, after creation unveraenderlich. | Type: string | Allowed: byos, connector","value":"byos"},{"key":"description","type":"text","description":"*(optional)* | description the Mounts. | Type: string","value":"Example text content"},{"key":"port","type":"text","description":"*(optional)* | Port (Default: 22 for SFTP, 443 for S3/WebDAV, 993 for IMAP). | Type: integer | Min: 1 | Max: 65535","value":"1"},{"key":"username","type":"text","description":"*(optional)* | Username for the authentication. | Type: string","value":"john.doe"},{"key":"password","type":"text","description":"*(optional)* | Password (is stored encrypted). | Type: string","value":"REPLACE_WITH_PASSWORD"},{"key":"ssh_key","type":"text","description":"*(optional)* | SSH Private Key (is stored encrypted). | Type: string","value":"example-value"},{"key":"api_token","type":"text","description":"*(optional)* | API-Token (is stored encrypted). | Type: string","value":"example-value"},{"key":"base_path","type":"text","description":"*(optional)* | Basispfad on the Remote-Server. No '.' Segmente allowed. | Type: string","value":"/"},{"key":"encryption_key","type":"text","description":"*(optional)* | Encryption Password for BYOS Mounts (Mandatory when mount_purpose='byos'). WARNING: Irreversible in case of loss! | Type: string","value":"example-value"},{"key":"connection_options","type":"text","description":"*(optional)* | Additional Verbindungsoptionen as JSON object (e.g. S3-Region, IMAP-folder). | Type: object","value":"{}"},{"key":"icon_url","type":"text","description":"*(optional)* | URL for a Userdefiniertes Icon. | Type: string","value":"https://example.com"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"processing_time\": \"example\",\n    \"mount_id\": \"example\",\n    \"type\": \"example\",\n    \"status\": \"success\"\n}"}]},{"name":"Browse storage mount files","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/storage_mounts/browse","host":["{{base_url}}"],"path":["storage_mounts","browse"],"query":[{"key":"mount_id","value":"1","description":"**REQUIRED** | ID of the storage mount to browse | Type: integer","disabled":false},{"key":"path","value":"/path/to/folder","description":"*(optional)* | Path to browse. Relative paths are resolved against mount base_path. Use / for root. | Type: string","disabled":true}]},"description":"Browse files and directories on a storage mount. Returns file listing with metadata (size, modified date, type).\n\n---\n**Tool-ID:** `po_storage_mounts_browse` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_browse`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Create storage mount directory","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/storage_mounts/mkdir","host":["{{base_url}}"],"path":["storage_mounts","mkdir"]},"description":"Create a new directory on a storage mount. Specify the mount ID and the path for the new directory.\n\n---\n**Tool-ID:** `po_storage_mounts_mkdir` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_mkdir`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"mount_id","type":"text","description":"**REQUIRED** | ID of the storage mount | Type: integer","value":"1"},{"key":"folder_name","type":"text","description":"**REQUIRED** | Name of the new folder (no special characters) | Type: string","value":"example-value"},{"key":"path","type":"text","description":"*(optional)* | Parent path where the folder will be created (relative to base_path) | Type: string","value":"/path/to/folder"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/storage_mounts/mkdir","host":["{{base_url}}"],"path":["storage_mounts","mkdir"]},"description":"Create a new directory on a storage mount. Specify the mount ID and the path for the new directory.\n\n---\n**Tool-ID:** `po_storage_mounts_mkdir` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_mkdir`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"mount_id","type":"text","description":"**REQUIRED** | ID of the storage mount | Type: integer","value":"1"},{"key":"folder_name","type":"text","description":"**REQUIRED** | Name of the new folder (no special characters) | Type: string","value":"example-value"},{"key":"path","type":"text","description":"*(optional)* | Parent path where the folder will be created (relative to base_path) | Type: string","value":"/path/to/folder"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Create storage mount mirror","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/storage_mounts/mirrors-add","host":["{{base_url}}"],"path":["storage_mounts","mirrors-add"]},"description":"Add a new mirror target for a storage mount. Configure destination, sync interval, and filter rules.\n\n---\n**Tool-ID:** `po_storage_mounts_mirrors_create` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_mirrors_create`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"source_mount_id","type":"text","description":"**REQUIRED** | Source mount ID (data origin) | Type: integer","value":"1"},{"key":"target_mount_id","type":"text","description":"**REQUIRED** | Target mount ID (mirror destination) | Type: integer","value":"1"},{"key":"sync_mode","type":"text","description":"*(optional)* | Synchronization mode | Type: string | Allowed: realtime, scheduled, manual","value":"realtime"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 900","value":"900"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/storage_mounts/mirrors-add","host":["{{base_url}}"],"path":["storage_mounts","mirrors-add"]},"description":"Add a new mirror target for a storage mount. Configure destination, sync interval, and filter rules.\n\n---\n**Tool-ID:** `po_storage_mounts_mirrors_create` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_mirrors_create`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.","body":{"mode":"formdata","formdata":[{"key":"source_mount_id","type":"text","description":"**REQUIRED** | Source mount ID (data origin) | Type: integer","value":"1"},{"key":"target_mount_id","type":"text","description":"**REQUIRED** | Target mount ID (mirror destination) | Type: integer","value":"1"},{"key":"sync_mode","type":"text","description":"*(optional)* | Synchronization mode | Type: string | Allowed: realtime, scheduled, manual","value":"realtime"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 900","value":"900"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Delete Storage Mount","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/storage_mounts/delete","host":["{{base_url}}"],"path":["storage_mounts","delete"]},"description":"Delete Storage Mount ⚠️ Cannot delete mounts with active connectors.\n\n---\n**Tool-ID:** `po_storage_mounts_delete` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"mount_id","type":"text","description":"*(optional)* | Parameter: mount_id | Type: integer","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/storage_mounts/delete","host":["{{base_url}}"],"path":["storage_mounts","delete"]},"description":"Delete Storage Mount ⚠️ Cannot delete mounts with active connectors.\n\n---\n**Tool-ID:** `po_storage_mounts_delete` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"mount_id","type":"text","description":"*(optional)* | Parameter: mount_id | Type: integer","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"data\": {\n        \"mount_id\": 12345\n    },\n    \"processing_time\": \"example\"\n}"}]},{"name":"Delete storage mount mirror","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/storage_mounts/mirrors-remove","host":["{{base_url}}"],"path":["storage_mounts","mirrors-remove"]},"description":"Remove a mirror configuration from a storage mount. Stops future syncs but does not delete mirrored data.\n\n---\n**Tool-ID:** `po_storage_mounts_mirrors_delete` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_mirrors_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"mirror_id","type":"text","description":"**REQUIRED** | Mirror ID to remove | Type: integer","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/storage_mounts/mirrors-remove","host":["{{base_url}}"],"path":["storage_mounts","mirrors-remove"]},"description":"Remove a mirror configuration from a storage mount. Stops future syncs but does not delete mirrored data.\n\n---\n**Tool-ID:** `po_storage_mounts_mirrors_delete` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_mirrors_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"mirror_id","type":"text","description":"**REQUIRED** | Mirror ID to remove | Type: integer","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Get storage mount access logs","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/storage_mounts/logs","host":["{{base_url}}"],"path":["storage_mounts","logs"],"query":[{"key":"mount_id","value":"1","description":"**REQUIRED** | ID of the storage mount | Type: integer","disabled":false},{"key":"limit","value":"50","description":"*(optional)* | Number of log entries to return (max 100) | Type: integer | Min: 1 | Max: 100","disabled":true}]},"description":"View access and operation logs for storage mounts. Returns recent log entries with timestamps, operation types, and affected paths.\n\n---\n**Tool-ID:** `po_storage_mounts_logs` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_logs`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Get storage mount details","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/storage_mounts/get","host":["{{base_url}}"],"path":["storage_mounts","get"],"query":[{"key":"mount_id","value":"1","description":"*(optional)* | Parameter: mount_id | Type: integer","disabled":true}]},"description":"Get Mount Details Get full details including linked connectors.\n\n---\n**Tool-ID:** `po_storage_mounts_get` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_get`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Get storage mount health status","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/storage_mounts/health","host":["{{base_url}}"],"path":["storage_mounts","health"]},"description":"Check health status of all configured storage mounts. Returns availability, latency, and disk usage per mount.\n\n---\n**Tool-ID:** `po_storage_mounts_health` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_health`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/storage_mounts/health","host":["{{base_url}}"],"path":["storage_mounts","health"]},"description":"Check health status of all configured storage mounts. Returns availability, latency, and disk usage per mount.\n\n---\n**Tool-ID:** `po_storage_mounts_health` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_health`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"data\": [],\n    \"message\": \"HEALTH_DATA\",\n    \"processing_time\": \"92.53ms\",\n    \"status\": \"success\",\n    \"timestamp\": \"2026-05-25T07:00:26Z\"\n}"}]},{"name":"List storage mount mirrors","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/storage_mounts/mirrors-list","host":["{{base_url}}"],"path":["storage_mounts","mirrors-list"],"query":[{"key":"mount_id","value":"1","description":"**REQUIRED** | Source mount ID to list mirrors for | Type: integer","disabled":false}]},"description":"List all configured mirror targets for storage mounts. Shows mirror destinations, sync status, and last sync time.\n\n---\n**Tool-ID:** `po_storage_mounts_mirrors_list` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_mirrors_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"List storage mounts","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/storage_mounts/list","host":["{{base_url}}"],"path":["storage_mounts","list"]},"description":"List Storage Mounts Get all storage mount connections. Response: json { \"status\": \"success\", \"data\": { \"mounts\": { \"mount_id\": 1, \"name\": \"Office NAS\", \"connector_type\": \"sftp\", \"host\": \"nas.example.com\", \"port\": 22, \"base_path\": \"/documents\", \"is_active\": true, \"connector_count\": 2 } , \"total\": .\n\n---\n**Tool-ID:** `po_storage_mounts_list` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/storage_mounts/list","host":["{{base_url}}"],"path":["storage_mounts","list"]},"description":"List Storage Mounts Get all storage mount connections. Response: json { \"status\": \"success\", \"data\": { \"mounts\": { \"mount_id\": 1, \"name\": \"Office NAS\", \"connector_type\": \"sftp\", \"host\": \"nas.example.com\", \"port\": 22, \"base_path\": \"/documents\", \"is_active\": true, \"connector_count\": 2 } , \"total\": .\n\n---\n**Tool-ID:** `po_storage_mounts_list` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"data\": {\n        \"mounts\": [],\n        \"total\": 0,\n        \"quota\": {\n            \"tier\": \"APP-T2\",\n            \"tier_name\": \"Plus\",\n            \"limit\": 3,\n            \"used\": 0,\n            \"remaining\": 3,\n            \"can_add\": true,\n            \"upgrade_options\": [\n                {\n                    \"tier\": \"APP-T3\",\n                    \"name\": \"Professional\",\n                    \"storage_mounts\": 5\n                },\n                {\n                    \"tier\": \"APP-T4\",\n                    \"name\": \"Corporate\",\n                    \"storage_mounts\": 5\n                },\n                {\n                    \"tier\": \"APP-T5\",\n                    \"name\": \"Enterprise\",\n                    \"storage_mounts\": 10\n                },\n                {\n                    \"tier\": \"APP-T6\",\n                    \"name\": \"Unlimited\",\n                    \"storage_mounts\": 25\n                }\n            ]\n        }\n    },\n    \"processing_time\": \"73.51ms\",\n    \"status\": \"success\"\n}"}]},{"name":"Run storage mount health check","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/storage_mounts/health-check-now","host":["{{base_url}}"],"path":["storage_mounts","health-check-now"]},"description":"Trigger an immediate health check on a storage mount. Returns real-time connectivity, disk space, and I/O performance metrics.\n\n---\n**Tool-ID:** `po_storage_mounts_health_check_now` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_health_check_now`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"mount_id","type":"text","description":"*(optional)* | Specific mount ID to check. Omit to check ALL active mounts. | Type: integer","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/storage_mounts/health-check-now","host":["{{base_url}}"],"path":["storage_mounts","health-check-now"]},"description":"Trigger an immediate health check on a storage mount. Returns real-time connectivity, disk space, and I/O performance metrics.\n\n---\n**Tool-ID:** `po_storage_mounts_health_check_now` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_health_check_now`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"mount_id","type":"text","description":"*(optional)* | Specific mount ID to check. Omit to check ALL active mounts. | Type: integer","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"data\": {\n        \"check_results\": [],\n        \"health_data\": [],\n        \"checked_count\": 0,\n        \"billing_summary\": {\n            \"billable_count\": 0,\n            \"free_count\": 0,\n            \"free_mount_ids\": [],\n            \"billable_mount_ids\": []\n        }\n    },\n    \"message\": \"HEALTH_CHECK_COMPLETE\",\n    \"processing_time\": \"30.14ms\",\n    \"status\": \"success\",\n    \"timestamp\": \"2026-05-25T07:00:47Z\"\n}"}]},{"name":"Test storage mount connection","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/storage_mounts/test","host":["{{base_url}}"],"path":["storage_mounts","test"]},"description":"Test Connection Test if the storage mount is reachable. Can also test new credentials without saving: json { \"connector_type\": \"sftp\", \"host\": \"nas.example.com\", \"port\": 22, \"username\": \"user\", \"password\": \"pass\" }\n\n---\n**Tool-ID:** `po_storage_mounts_test` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_test`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"mount_id","type":"text","description":"*(optional)* | Parameter: mount_id | Type: integer","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/storage_mounts/test","host":["{{base_url}}"],"path":["storage_mounts","test"]},"description":"Test Connection Test if the storage mount is reachable. Can also test new credentials without saving: json { \"connector_type\": \"sftp\", \"host\": \"nas.example.com\", \"port\": 22, \"username\": \"user\", \"password\": \"pass\" }\n\n---\n**Tool-ID:** `po_storage_mounts_test` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_test`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"mount_id","type":"text","description":"*(optional)* | Parameter: mount_id | Type: integer","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"processing_time\": \"example\",\n    \"connected\": true,\n    \"message\": \"Operation completed successfully\",\n    \"latency_ms\": 150,\n    \"status\": \"success\"\n}"}]},{"name":"Toggle storage mount mirror","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/storage_mounts/mirrors-toggle","host":["{{base_url}}"],"path":["storage_mounts","mirrors-toggle"]},"description":"Enable or disable a storage mount mirror without deleting the configuration. Useful for temporary maintenance.\n\n---\n**Tool-ID:** `po_storage_mounts_mirrors_toggle` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_mirrors_toggle`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"mirror_id","type":"text","description":"**REQUIRED** | Mirror ID to toggle | Type: integer","value":"1"},{"key":"is_active","type":"text","description":"**REQUIRED** | 1 = active, 0 = paused | Type: integer | Allowed: 0, 1","value":"0"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/storage_mounts/mirrors-toggle","host":["{{base_url}}"],"path":["storage_mounts","mirrors-toggle"]},"description":"Enable or disable a storage mount mirror without deleting the configuration. Useful for temporary maintenance.\n\n---\n**Tool-ID:** `po_storage_mounts_mirrors_toggle` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_mirrors_toggle`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"mirror_id","type":"text","description":"**REQUIRED** | Mirror ID to toggle | Type: integer","value":"1"},{"key":"is_active","type":"text","description":"**REQUIRED** | 1 = active, 0 = paused | Type: integer | Allowed: 0, 1","value":"0"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Update Storage Mount","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/storage_mounts/update","host":["{{base_url}}"],"path":["storage_mounts","update"]},"description":"Update Storage Mount Modify an existing storage mount. Required: mount_id Optional: Any field to update\n\n---\n**Tool-ID:** `po_storage_mounts_update` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_update`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"mount_id","type":"text","description":"*(optional)* | Parameter: mount_id | Type: integer","value":"1"},{"key":"name","type":"text","description":"*(optional)* | Parameter: name | Type: string","value":"My item"},{"key":"is_active","type":"text","description":"*(optional)* | Parameter: is_active | Type: boolean","value":"true"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/storage_mounts/update","host":["{{base_url}}"],"path":["storage_mounts","update"]},"description":"Update Storage Mount Modify an existing storage mount. Required: mount_id Optional: Any field to update\n\n---\n**Tool-ID:** `po_storage_mounts_update` • **Cost:** 1 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_storage_mounts_update`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"mount_id","type":"text","description":"*(optional)* | Parameter: mount_id | Type: integer","value":"1"},{"key":"name","type":"text","description":"*(optional)* | Parameter: name | Type: string","value":"My item"},{"key":"is_active","type":"text","description":"*(optional)* | Parameter: is_active | Type: boolean","value":"true"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"data\": {\n        \"mount_id\": 12345\n    },\n    \"processing_time\": \"example\"\n}"}]}]},{"name":"✍️ E-Signatures","description":"# E-Signatures\n\nDigital signature workflows: create signature requests, track signing progress, download signed documents, and manage signers. Supports multi-signer flows and signature verification.","item":[{"name":"Cancel Signature Request","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/signatures/cancel","host":["{{base_url}}"],"path":["signatures","cancel"]},"description":"Cancel a signature request.\n\n---\n**Tool-ID:** `po_esignatures_cancel_signature_request` • **Cost:** 990 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_esignatures_cancel_signature_request`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"signature_id","type":"text","description":"*(optional)* | Signature request ID | Type: string","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/signatures/cancel","host":["{{base_url}}"],"path":["signatures","cancel"]},"description":"Cancel a signature request.\n\n---\n**Tool-ID:** `po_esignatures_cancel_signature_request` • **Cost:** 990 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_esignatures_cancel_signature_request`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"signature_id","type":"text","description":"*(optional)* | Signature request ID | Type: string","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"cancelled\": true,\n            \"signature_id\": \"example\"\n        }\n    }\n}"}]},{"name":"Create Signature Request","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/signatures/create","host":["{{base_url}}"],"path":["signatures","create"]},"description":"Create a new signature request for a document\n\n---\n**Tool-ID:** `po_esignatures_create_signature_request` • **Cost:** 990 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_esignatures_create_signature_request`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"*(optional)* | PaperOffice File ID of the document to be signed (recommended modern parameter) | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"document_pofid","type":"file","description":"*(optional)* | Alias for pofid | Type: string","src":null},{"key":"document_path","type":"file","description":"*(optional)* | Legacy: server-side absolute path to the PDF. Prefer pofid. | Type: string","src":null},{"key":"signers","type":"text","description":"**REQUIRED** | JSON array of signers objects: [{email, name, phone?, role?}, ..] | Type: string","value":"example-value"},{"key":"signature_type","type":"text","description":"*(optional)* | Signature compliance tier (default: ses) | Type: string | Allowed: ses, aes, qes","value":"ses"},{"key":"signing_order","type":"text","description":"*(optional)* | Signing order (default: parallel) | Type: string | Allowed: parallel, sequential","value":"parallel"},{"key":"expires_days","type":"text","description":"*(optional)* | Validity period in days (default: 7, max: 90) | Type: integer","value":"7"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/signatures/create","host":["{{base_url}}"],"path":["signatures","create"]},"description":"Create a new signature request for a document\n\n---\n**Tool-ID:** `po_esignatures_create_signature_request` • **Cost:** 990 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_esignatures_create_signature_request`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"pofid","type":"text","description":"*(optional)* | PaperOffice File ID of the document to be signed (recommended modern parameter) | Type: string","value":"f456cc79cdbd69f5e0a910cf37facf91971a0a7dc016b64c4674da776b8df444.DS50.POD5.AI15.MT1775040975315.pdf"},{"key":"document_pofid","type":"file","description":"*(optional)* | Alias for pofid | Type: string","src":null},{"key":"document_path","type":"file","description":"*(optional)* | Legacy: server-side absolute path to the PDF. Prefer pofid. | Type: string","src":null},{"key":"signers","type":"text","description":"**REQUIRED** | JSON array of signers objects: [{email, name, phone?, role?}, ..] | Type: string","value":"example-value"},{"key":"signature_type","type":"text","description":"*(optional)* | Signature compliance tier (default: ses) | Type: string | Allowed: ses, aes, qes","value":"ses"},{"key":"signing_order","type":"text","description":"*(optional)* | Signing order (default: parallel) | Type: string | Allowed: parallel, sequential","value":"parallel"},{"key":"expires_days","type":"text","description":"*(optional)* | Validity period in days (default: 7, max: 90) | Type: integer","value":"7"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"signature_id\": \"example\",\n            \"signing_url\": \"https://example.com/resource\",\n            \"status\": \"pending\",\n            \"signers\": [\n                []\n            ],\n            \"created_at\": \"2026-04-16T10:00:00Z\",\n            \"expires_at\": \"2026-04-16T10:00:00Z\"\n        }\n    }\n}"}]},{"name":"Download eSignature Document","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/signatures/download","host":["{{base_url}}"],"path":["signatures","download"],"query":[{"key":"signature_id","value":"1","description":"*(optional)* | Signature request ID | Type: string","disabled":true}]},"description":"Download the signed document\n\n---\n**Tool-ID:** `po_esignatures_download_signed_document` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_esignatures_download_signed_document`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Get signature details","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/signatures/get","host":["{{base_url}}"],"path":["signatures","get"],"query":[{"key":"signature_id","value":"1","description":"*(optional)* | Signature request ID | Type: string","disabled":true}]},"description":"Get details of a signature request.\n\n---\n**Tool-ID:** `po_esignatures_get_signature_details` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_esignatures_get_signature_details`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"List signature requests","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/signatures/list","host":["{{base_url}}"],"path":["signatures","list"],"query":[{"key":"status","value":"draft","description":"*(optional)* | Filter after signature-Status. | Type: string | Allowed: draft, pending, sent, completed, declined, expired, cancelled","disabled":true},{"key":"page","value":"1","description":"*(optional)* | {\"page_number_for_pagination\":\"Page number for pagination.\"} | Type: integer | Min: 1","disabled":true},{"key":"limit","value":"20","description":"*(optional)* | Number of results per page. | Type: integer | Min: 1 | Max: 100","disabled":true}]},"description":"List all signature requests\n\n---\n**Tool-ID:** `po_esignatures_list_signature_requests` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_esignatures_list_signature_requests`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/signatures/list","host":["{{base_url}}"],"path":["signatures","list"],"query":[{"key":"status","value":"draft","description":"*(optional)* | Filter after signature-Status. | Type: string | Allowed: draft, pending, sent, completed, declined, expired, cancelled","disabled":true},{"key":"page","value":"1","description":"*(optional)* | {\"page_number_for_pagination\":\"Page number for pagination.\"} | Type: integer | Min: 1","disabled":true},{"key":"limit","value":"20","description":"*(optional)* | Number of results per page. | Type: integer | Min: 1 | Max: 100","disabled":true}]},"description":"List all signature requests\n\n---\n**Tool-ID:** `po_esignatures_list_signature_requests` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_esignatures_list_signature_requests`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"data\": {\n        \"requests\": [],\n        \"pagination\": {\n            \"page\": 1,\n            \"limit\": 20,\n            \"total\": 0,\n            \"pages\": 0\n        }\n    },\n    \"processing_time\": \"75.34ms\",\n    \"status\": \"success\"\n}"}]},{"name":"Send reminder","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/signatures/remind","host":["{{base_url}}"],"path":["signatures","remind"]},"description":"Send a reminder to outstanding signers\n\n---\n**Tool-ID:** `po_esignatures_send_reminder` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_esignatures_send_reminder`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"signature_id","type":"text","description":"*(optional)* | Signature request ID | Type: string","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/signatures/remind","host":["{{base_url}}"],"path":["signatures","remind"]},"description":"Send a reminder to outstanding signers\n\n---\n**Tool-ID:** `po_esignatures_send_reminder` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_esignatures_send_reminder`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"signature_id","type":"text","description":"*(optional)* | Signature request ID | Type: string","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"sent\": true,\n            \"signature_id\": \"example\"\n        }\n    }\n}"}]},{"name":"Cancel Signing Request","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/signature_link/cancel_signing_request","host":["{{base_url}}"],"path":["signature_link","cancel_signing_request"]},"description":"Cancel Signing Request Cancel a pending signing request. --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | signing_id | string | ✅ | Signing request ID | --- Response json { \"success\": true }\n\n---\n**Tool-ID:** `po_signature_links_cancel_signing_request` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_signature_links_cancel_signing_request`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"request_id","type":"text","description":"**REQUIRED** | ID to stornierende signature request | Type: string","value":"42"},{"key":"reason","type":"text","description":"*(optional)* | cancellation reason | Type: string","value":"example-value"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/signature_link/cancel_signing_request","host":["{{base_url}}"],"path":["signature_link","cancel_signing_request"]},"description":"Cancel Signing Request Cancel a pending signing request. --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | signing_id | string | ✅ | Signing request ID | --- Response json { \"success\": true }\n\n---\n**Tool-ID:** `po_signature_links_cancel_signing_request` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_signature_links_cancel_signing_request`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"request_id","type":"text","description":"**REQUIRED** | ID to stornierende signature request | Type: string","value":"42"},{"key":"reason","type":"text","description":"*(optional)* | cancellation reason | Type: string","value":"example-value"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"success\": false,\n    \"error\": \"REQUEST_ID_REQUIRED\"\n}"}]},{"name":"Check signing status","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/signature_link/get_signing_status","host":["{{base_url}}"],"path":["signature_link","get_signing_status"],"query":[{"key":"signing_id","value":"1","description":"*(optional)* | Query parameter: signing_id | Type: string","disabled":true}]},"description":"Check Signing Status Get current status of a signing request. --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | signing_id | string | ✅ | Signing request ID | --- Response json { \"success\": true, \"status\": \"completed\", \"signed_at\": \"202.\n\n---\n**Tool-ID:** `po_signature_links_check_signing_status` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_signature_links_check_signing_status`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/signature_link/get_signing_status","host":["{{base_url}}"],"path":["signature_link","get_signing_status"],"query":[{"key":"signing_id","value":"1","description":"*(optional)* | Query parameter: signing_id | Type: string","disabled":true}]},"description":"Check Signing Status Get current status of a signing request. --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | signing_id | string | ✅ | Signing request ID | --- Response json { \"success\": true, \"status\": \"completed\", \"signed_at\": \"202.\n\n---\n**Tool-ID:** `po_signature_links_check_signing_status` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_signature_links_check_signing_status`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"success\": false,\n    \"error\": \"REQUEST_ID_REQUIRED\"\n}"}]},{"name":"Download Signing Link Document","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/signature_link/download_signed_document","host":["{{base_url}}"],"path":["signature_link","download_signed_document"],"query":[{"key":"signing_id","value":"1","description":"*(optional)* | Query parameter: signing_id | Type: string","disabled":true}]},"description":"Download Signed Document Download the completed signed document. --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | signing_id | string | ✅ | Signing request ID | --- Response Returns the signed PDF document.\n\n---\n**Tool-ID:** `po_signature_links_download_signed_document` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_signature_links_download_signed_document`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/signature_link/download_signed_document","host":["{{base_url}}"],"path":["signature_link","download_signed_document"],"query":[{"key":"signing_id","value":"1","description":"*(optional)* | Query parameter: signing_id | Type: string","disabled":true}]},"description":"Download Signed Document Download the completed signed document. --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | signing_id | string | ✅ | Signing request ID | --- Response Returns the signed PDF document.\n\n---\n**Tool-ID:** `po_signature_links_download_signed_document` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_signature_links_download_signed_document`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"success\": false,\n    \"error\": \"INVALID_OR_EXPIRED_TOKEN\"\n}"}]},{"name":"Get document signatures","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/signature_link/get_document_signatures","host":["{{base_url}}"],"path":["signature_link","get_document_signatures"],"query":[{"key":"document_id","value":"12345","description":"*(optional)* | Query parameter: document_id | Type: string","disabled":true}]},"description":"Get Document signatures List all signatures on a document. --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | document_id | string | ✅ | Document ID | --- Response json { \"success\": true, \"signatures\": { \"signer\": \"John Doe\", \"signed_at\".}\n\n---\n**Tool-ID:** `po_signature_links_get_document_signatures` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_signature_links_get_document_signatures`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/signature_link/get_document_signatures","host":["{{base_url}}"],"path":["signature_link","get_document_signatures"],"query":[{"key":"document_id","value":"12345","description":"*(optional)* | Query parameter: document_id | Type: string","disabled":true}]},"description":"Get Document signatures List all signatures on a document. --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | document_id | string | ✅ | Document ID | --- Response json { \"success\": true, \"signatures\": { \"signer\": \"John Doe\", \"signed_at\".}\n\n---\n**Tool-ID:** `po_signature_links_get_document_signatures` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_signature_links_get_document_signatures`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"success\": false,\n    \"error\": \"DOCUMENT_POFID_REQUIRED\"\n}"}]},{"name":"Resend invitation","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/signature_link/resend_invitation","host":["{{base_url}}"],"path":["signature_link","resend_invitation"]},"description":"Resend Invitation Resend signing invitation to a signer. --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | signing_id | string | ✅ | Signing request ID | | signer_email | string | ✅ | Signer's email | --- Response json { \"success\": tr.\n\n---\n**Tool-ID:** `po_signature_links_resend_invitation` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_signature_links_resend_invitation`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"signer_id","type":"text","description":"**REQUIRED** | ID of the signature for resending | Type: string","value":"1"},{"key":"channel","type":"text","description":"*(optional)* | Zustellkanal | Type: string | Allowed: email, sms","value":"email"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/signature_link/resend_invitation","host":["{{base_url}}"],"path":["signature_link","resend_invitation"]},"description":"Resend Invitation Resend signing invitation to a signer. --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | signing_id | string | ✅ | Signing request ID | | signer_email | string | ✅ | Signer's email | --- Response json { \"success\": tr.\n\n---\n**Tool-ID:** `po_signature_links_resend_invitation` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_signature_links_resend_invitation`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"signer_id","type":"text","description":"**REQUIRED** | ID of the signature for resending | Type: string","value":"1"},{"key":"channel","type":"text","description":"*(optional)* | Zustellkanal | Type: string | Allowed: email, sms","value":"email"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"sent\": true\n        }\n    }\n}"}]},{"name":"Send Signing Request","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/signature_link/send_signing_request","host":["{{base_url}}"],"path":["signature_link","send_signing_request"]},"description":"Send Signing Request Send a document for signature via email. --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | document_id | string | ✅ | Document to sign | | signers | array | ✅ | List of signers | | message | string | ❌ | Custom .\n\n---\n**Tool-ID:** `po_signature_links_send_signing_request` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_signature_links_send_signing_request`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"request_id","type":"text","description":"**REQUIRED** | Signature request ID | Type: string","value":"42"},{"key":"signers","type":"text","description":"*(optional)* | Array of signer objects with name and email | Type: array","value":"[]"},{"key":"message","type":"text","description":"*(optional)* | message an the signer | Type: string","value":"Example text content"},{"key":"channel","type":"text","description":"*(optional)* | Zustellkanal | Type: string | Allowed: email, sms","value":"email"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/signature_link/send_signing_request","host":["{{base_url}}"],"path":["signature_link","send_signing_request"]},"description":"Send Signing Request Send a document for signature via email. --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | document_id | string | ✅ | Document to sign | | signers | array | ✅ | List of signers | | message | string | ❌ | Custom .\n\n---\n**Tool-ID:** `po_signature_links_send_signing_request` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_signature_links_send_signing_request`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"request_id","type":"text","description":"**REQUIRED** | Signature request ID | Type: string","value":"42"},{"key":"signers","type":"text","description":"*(optional)* | Array of signer objects with name and email | Type: array","value":"[]"},{"key":"message","type":"text","description":"*(optional)* | message an the signer | Type: string","value":"Example text content"},{"key":"channel","type":"text","description":"*(optional)* | Zustellkanal | Type: string | Allowed: email, sms","value":"email"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"success\": false,\n    \"error\": \"REQUEST_ID_REQUIRED\"\n}"}]}]},{"name":"📦 Import & Migration","description":"# Import & Migration\n\nBulk data import from external sources: upload files, configure mappings, start import jobs, and track migration progress. Supports various source formats and incremental imports.","item":[{"name":"Cancel import job","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/import-cancel","host":["{{base_url}}"],"path":["import","import-cancel"]},"description":"Cancel a running import job. Already imported files are preserved.\n\n---\n**Tool-ID:** `po_import_cancel` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_cancel`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"job_id","type":"text","description":"**REQUIRED** | ID of the import jobs, the abgebrochen should be | Type: integer","value":"42"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/import-cancel","host":["{{base_url}}"],"path":["import","import-cancel"]},"description":"Cancel a running import job. Already imported files are preserved.\n\n---\n**Tool-ID:** `po_import_cancel` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_cancel`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"job_id","type":"text","description":"**REQUIRED** | ID of the import jobs, the abgebrochen should be | Type: integer","value":"42"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"import_id\": \"example\",\n    \"processing_time\": \"example\",\n    \"data\": \"example\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"files_skipped\": \"example\",\n    \"retried_files\": \"example\",\n    \"deleted_files\": \"example\"\n}"}]},{"name":"Create import job","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/import-create","host":["{{base_url}}"],"path":["import","import-create"]},"description":"Create a new import job with source configuration (SFTP, S3, WebDAV, ELO, local upload, etc.) and target workspace.\n\n---\n**Tool-ID:** `po_import_create` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_create`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"workspace_id","type":"text","description":"**REQUIRED** | Target workspace into which the files will be imported | Type: integer","value":"1"},{"key":"source_type","type":"text","description":"**REQUIRED** | Source type of the import (sftp, s3, webdav, imap, elo_office, local_upload, etc.) | Type: string | Allowed: sftp, s3, webdav, imap, elo_office, local_upload, dropbox, google_drive, onedrive, box","value":"sftp"},{"key":"source_config","type":"text","description":"**REQUIRED** | Source-specific configuration (host, credentials, path, etc.) | Type: object","value":"{}"},{"key":"include_subfolders","type":"text","description":"*(optional)* | Include subfolders (default: true) | Type: boolean","value":"false"},{"key":"file_pattern","type":"file","description":"*(optional)* | File filter pattern, e.g. \"*.pdf\" (default: \"*\") | Type: string","src":null},{"key":"ai_processing","type":"text","description":"*(optional)* | Enable AI processing (derived from workspace setting if omitted) | Type: boolean","value":"true"},{"key":"ai_tier","type":"text","description":"*(optional)* | AI processing tier (basic, premium, ultra) | Type: string | Allowed: basic, premium, ultra","value":"basic"},{"key":"max_file_size_mb","type":"file","description":"**REQUIRED** | Max file size mb | Type: string","src":null}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/import-create","host":["{{base_url}}"],"path":["import","import-create"]},"description":"Create a new import job with source configuration (SFTP, S3, WebDAV, ELO, local upload, etc.) and target workspace.\n\n---\n**Tool-ID:** `po_import_create` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_create`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"workspace_id","type":"text","description":"**REQUIRED** | Target workspace into which the files will be imported | Type: integer","value":"1"},{"key":"source_type","type":"text","description":"**REQUIRED** | Source type of the import (sftp, s3, webdav, imap, elo_office, local_upload, etc.) | Type: string | Allowed: sftp, s3, webdav, imap, elo_office, local_upload, dropbox, google_drive, onedrive, box","value":"sftp"},{"key":"source_config","type":"text","description":"**REQUIRED** | Source-specific configuration (host, credentials, path, etc.) | Type: object","value":"{}"},{"key":"include_subfolders","type":"text","description":"*(optional)* | Include subfolders (default: true) | Type: boolean","value":"false"},{"key":"file_pattern","type":"file","description":"*(optional)* | File filter pattern, e.g. \"*.pdf\" (default: \"*\") | Type: string","src":null},{"key":"ai_processing","type":"text","description":"*(optional)* | Enable AI processing (derived from workspace setting if omitted) | Type: boolean","value":"true"},{"key":"ai_tier","type":"text","description":"*(optional)* | AI processing tier (basic, premium, ultra) | Type: string | Allowed: basic, premium, ultra","value":"basic"},{"key":"max_file_size_mb","type":"file","description":"**REQUIRED** | Max file size mb | Type: string","src":null}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"import\": {\n        \"import_id\": \"example\",\n        \"status\": \"pending\",\n        \"total_files\": 1,\n        \"processed_files\": 1,\n        \"failed_files\": 1,\n        \"progress_percent\": 1,\n        \"created_at\": \"2026-04-16T10:00:00Z\"\n    },\n    \"processing_time\": \"example\"\n}"}]},{"name":"Delete import job","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/import-delete","host":["{{base_url}}"],"path":["import","import-delete"]},"description":"Deletes an import job and all associated database file entries.\n\n---\n**Tool-ID:** `po_import_delete` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"job_id","type":"text","description":"**REQUIRED** | ID of the import jobs, the deleted should be (incl. allr file-entries) | Type: integer","value":"42"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/import-delete","host":["{{base_url}}"],"path":["import","import-delete"]},"description":"Deletes an import job and all associated database file entries.\n\n---\n**Tool-ID:** `po_import_delete` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"job_id","type":"text","description":"**REQUIRED** | ID of the import jobs, the deleted should be (incl. allr file-entries) | Type: integer","value":"42"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"import_id\": \"example\",\n    \"processing_time\": \"example\",\n    \"data\": \"example\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"deleted_files\": \"example\",\n    \"session_id\": \"example\",\n    \"upload_dir\": \"example\",\n    \"batch_uploaded\": \"example\",\n    \"batch_bytes\": \"example\",\n    \"total_files\": \"example\",\n    \"total_bytes\": \"example\",\n    \"errors\": \"example\"\n}"}]},{"name":"Get import status","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/import-status","host":["{{base_url}}"],"path":["import","import-status"]},"description":"Returns the current status of an import job including progress and file statistics.\n\n---\n**Tool-ID:** `po_import_status` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_status`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"job_id","type":"text","description":"**REQUIRED** | ID of the import job whose current status should be queried | Type: integer","value":"42"},{"key":"include_report","type":"text","description":"*(optional)* | Include detailed import report in response | Type: boolean","value":"false"}]}},"response":[]},{"name":"List import files","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/import-files","host":["{{base_url}}"],"path":["import","import-files"]},"description":"Returns the file list of an import job with status per file (pending, imported, failed, skipped).\n\n---\n**Tool-ID:** `po_import_files` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_files`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"job_id","type":"text","description":"**REQUIRED** | ID of the import jobs, these fileliste retrieved should be | Type: integer","value":"42"},{"key":"skip","type":"text","description":"*(optional)* | Number of entries to skip (offset for pagination) | Type: integer","value":"1"},{"key":"limit","type":"text","description":"*(optional)* | Maximum number files per page (Standard: 50, Max: 500) | Type: integer","value":"20"},{"key":"page","type":"text","description":"*(optional)* | Page | Type: integer","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/import-files","host":["{{base_url}}"],"path":["import","import-files"]},"description":"Returns the file list of an import job with status per file (pending, imported, failed, skipped).\n\n---\n**Tool-ID:** `po_import_files` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_files`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"job_id","type":"text","description":"**REQUIRED** | ID of the import jobs, these fileliste retrieved should be | Type: integer","value":"42"},{"key":"skip","type":"text","description":"*(optional)* | Number of entries to skip (offset for pagination) | Type: integer","value":"1"},{"key":"limit","type":"text","description":"*(optional)* | Maximum number files per page (Standard: 50, Max: 500) | Type: integer","value":"20"},{"key":"page","type":"text","description":"*(optional)* | Page | Type: integer","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"files\": [\n        {\n            \"filename\": \"example.pdf\",\n            \"status\": \"success\",\n            \"pofid\": \"pofid_01HXYZABC12345\",\n            \"error\": \"example\"\n        }\n    ],\n    \"processing_time\": \"example\",\n    \"data\": \"example\",\n    \"total\": \"example\",\n    \"page\": \"example\",\n    \"limit\": \"example\",\n    \"total_pages\": \"example\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"files_skipped\": \"example\",\n    \"retried_files\": \"example\"\n}"}]},{"name":"List import Jobs","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/import-jobs-list","host":["{{base_url}}"],"path":["import","import-jobs-list"]},"description":"List all import jobs of the account including KPI statistics (Total, Completed, In Progress, Failed).\n\n---\n**Tool-ID:** `po_import_jobs_list` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_jobs_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"limit","type":"text","description":"*(optional)* | Maximum number Jobs (Standard: 50, Max: 200) | Type: integer","value":"50"},{"key":"offset","type":"text","description":"*(optional)* | Offset for pagination (Default: 0) | Type: integer","value":"0"},{"key":"status","type":"text","description":"*(optional)* | Filter by job status (pending, scanning, scan_complete, importing, completed, failed, cancelled) | Type: string | Allowed: pending, scanning, scan_complete, importing, completed, failed, cancelled","value":"pending"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/import-jobs-list","host":["{{base_url}}"],"path":["import","import-jobs-list"]},"description":"List all import jobs of the account including KPI statistics (Total, Completed, In Progress, Failed).\n\n---\n**Tool-ID:** `po_import_jobs_list` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_jobs_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"limit","type":"text","description":"*(optional)* | Maximum number Jobs (Standard: 50, Max: 200) | Type: integer","value":"50"},{"key":"offset","type":"text","description":"*(optional)* | Offset for pagination (Default: 0) | Type: integer","value":"0"},{"key":"status","type":"text","description":"*(optional)* | Filter by job status (pending, scanning, scan_complete, importing, completed, failed, cancelled) | Type: string | Allowed: pending, scanning, scan_complete, importing, completed, failed, cancelled","value":"pending"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"credits\": {\n        \"credits\": {\n            \"total_monthly\": 99000,\n            \"remaining_monthly\": 17963051,\n            \"api_handler\": \"import\",\n            \"notice\": \"See /billing/credits for usage details\"\n        },\n        \"job\": {\n            \"api_job_name\": \"import___jobs_list\",\n            \"app\": \"import\",\n            \"action\": \"import-jobs-list\",\n            \"credits_billed\": 10,\n            \"pricing\": {\n                \"credits_per_unit\": 10,\n                \"unit\": \"request\",\n                \"unit_count\": 1,\n                \"addons\": null,\n                \"priority\": {\n                    \"base_priority\": 50,\n                    \"raw_priority\": null,\n                    \"requested_priority\": 50,\n                    \"skip_priority_billing\": false,\n                    \"multiplier\": 1,\n                    \"boost_credits\": 0,\n                    \"sla_label\": \"Typically less than 48 hours until job start\",\n                    \"sla_seconds\": 172800,\n                    \"queue_start_label\": \"Typically less than 48 hours until job start\",\n                    \"queue_start_seconds\": 172800,\n                    \"queue_start_disclaimer\": \"Time figures indicate the typical period until job execution starts in the queue, not total time until completion. Not a binding commitment.\"\n                }\n            }\n        }\n    },\n    \"data\": {\n        \"jobs\": [],\n        \"kpi\": {\n            \"total\": 0,\n            \"completed\": 0,\n            \"running\": 0,\n            \"failed\": 0\n        },\n        \"pagination\": {\n            \"limit\": 50,\n            \"offset\": 0,\n            \"returned\": 0\n        }\n    },\n    \"processing_time\": \"113.91ms\",\n    \"status\": \"success\"\n}"}]},{"name":"Request import upload URL","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/request-upload-url","host":["{{base_url}}"],"path":["import","request-upload-url"]},"description":"Generate a signed upload URL for direct file upload. Returns URL + HMAC token + expiration time. The token is valid for 5 minutes.\n\n---\n**Tool-ID:** `po_import_request_upload_url` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_request_upload_url`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"purpose","type":"text","description":"**REQUIRED** | Upload-Zweck | Type: string | Allowed: import/upload-source, import/upload-local-files","value":"import/upload-source"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/request-upload-url","host":["{{base_url}}"],"path":["import","request-upload-url"]},"description":"Generate a signed upload URL for direct file upload. Returns URL + HMAC token + expiration time. The token is valid for 5 minutes.\n\n---\n**Tool-ID:** `po_import_request_upload_url` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_request_upload_url`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"purpose","type":"text","description":"**REQUIRED** | Upload-Zweck | Type: string | Allowed: import/upload-source, import/upload-local-files","value":"import/upload-source"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"data\": {\n        \"upload_url\": \"https://api.paperoffice.ai/upload/import/upload-source\",\n        \"upload_token\": \"eyJ...REDACTED_EXAMPLE_TOKEN\",\n        \"expires_in\": 300,\n        \"max_size_bytes\": 5368709120,\n        \"max_size_hr\": \"5 GB\"\n    },\n    \"processing_time\": \"231.85ms\",\n    \"status\": \"success\"\n}"}]},{"name":"Retry import job","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/import-retry","host":["{{base_url}}"],"path":["import","import-retry"]},"description":"Retry failed files of an import job.\n\n---\n**Tool-ID:** `po_import_retry` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_retry`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"job_id","type":"text","description":"**REQUIRED** | ID of the import job whose failed files should be retried | Type: integer","value":"42"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/import-retry","host":["{{base_url}}"],"path":["import","import-retry"]},"description":"Retry failed files of an import job.\n\n---\n**Tool-ID:** `po_import_retry` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_retry`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"job_id","type":"text","description":"**REQUIRED** | ID of the import job whose failed files should be retried | Type: integer","value":"42"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"import\": {\n        \"import_id\": \"example\",\n        \"status\": \"pending\",\n        \"total_files\": 1,\n        \"processed_files\": 1,\n        \"failed_files\": 1,\n        \"progress_percent\": 1,\n        \"created_at\": \"2026-04-16T10:00:00Z\"\n    },\n    \"processing_time\": \"example\",\n    \"data\": \"example\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"retried_files\": \"example\",\n    \"deleted_files\": \"example\"\n}"}]},{"name":"Scan import source","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/import-scan","host":["{{base_url}}"],"path":["import","import-scan"]},"description":"Scans the import source and lists all found files. Returns count, sizes, and type breakdown.\n\n---\n**Tool-ID:** `po_import_scan` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_scan`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"job_id","type":"text","description":"**REQUIRED** | ID of the import jobs, for the source gescannt should be | Type: integer","value":"42"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/import-scan","host":["{{base_url}}"],"path":["import","import-scan"]},"description":"Scans the import source and lists all found files. Returns count, sizes, and type breakdown.\n\n---\n**Tool-ID:** `po_import_scan` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_scan`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"job_id","type":"text","description":"**REQUIRED** | ID of the import jobs, for the source gescannt should be | Type: integer","value":"42"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"files\": [\n        {\n            \"filename\": \"example.pdf\",\n            \"size\": 1024,\n            \"mime_type\": \"application/pdf\"\n        }\n    ],\n    \"total_size\": 1024,\n    \"processing_time\": \"example\",\n    \"data\": \"example\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"total_files_found\": \"example\",\n    \"total_size_bytes\": \"example\",\n    \"total_size_human\": \"example\"\n}"}]},{"name":"Start import job","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/import-start","host":["{{base_url}}"],"path":["import","import-start"]},"description":"Start the import process (in batches, 50 files per call). Repeat calls until all files are imported.\n\n---\n**Tool-ID:** `po_import_start` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_start`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"job_id","type":"text","description":"**REQUIRED** | Identify the import jobs that have started (status must be scan_complete) | Type: integer","value":"42"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/import-start","host":["{{base_url}}"],"path":["import","import-start"]},"description":"Start the import process (in batches, 50 files per call). Repeat calls until all files are imported.\n\n---\n**Tool-ID:** `po_import_start` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_start`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"job_id","type":"text","description":"**REQUIRED** | Identify the import jobs that have started (status must be scan_complete) | Type: integer","value":"42"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"import\": {\n        \"import_id\": \"example\",\n        \"status\": \"pending\",\n        \"total_files\": 1,\n        \"processed_files\": 1,\n        \"failed_files\": 1,\n        \"progress_percent\": 1,\n        \"created_at\": \"2026-04-16T10:00:00Z\"\n    },\n    \"processing_time\": \"example\",\n    \"data\": \"example\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"total_files_imported\": \"example\"\n}"}]},{"name":"Upload local files to import","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/upload-local-files","host":["{{base_url}}"],"path":["import","upload-local-files"]},"description":"Uploads multiple files with folder structure (Local Upload Batch). Files are grouped in a session directory on NAS.\n\n---\n**Tool-ID:** `po_import_upload_local_files` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_upload_local_files`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | Hochzulathede files as multipart/form-data (files[]) | Type: array","src":null},{"key":"relative_paths","type":"text","description":"*(optional)* | Relative paths for files to preserve folder structure | Type: array","value":"[\"item-1\"]"},{"key":"session_id","type":"text","description":"*(optional)* | {\"session_id\":\"Grouping related upload batches\",\"note\":\"IMPORTANT: Answer exclusively in valid JSON format. \"} | Type: string","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/upload-local-files","host":["{{base_url}}"],"path":["import","upload-local-files"]},"description":"Uploads multiple files with folder structure (Local Upload Batch). Files are grouped in a session directory on NAS.\n\n---\n**Tool-ID:** `po_import_upload_local_files` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_upload_local_files`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"files","type":"file","description":"**REQUIRED** | Hochzulathede files as multipart/form-data (files[]) | Type: array","src":null},{"key":"relative_paths","type":"text","description":"*(optional)* | Relative paths for files to preserve folder structure | Type: array","value":"[\"item-1\"]"},{"key":"session_id","type":"text","description":"*(optional)* | {\"session_id\":\"Grouping related upload batches\",\"note\":\"IMPORTANT: Answer exclusively in valid JSON format. \"} | Type: string","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"uploaded\": 1,\n    \"failed\": 1,\n    \"processing_time\": \"example\",\n    \"data\": \"example\",\n    \"session_id\": \"example\",\n    \"upload_dir\": \"example\",\n    \"batch_uploaded\": \"example\",\n    \"batch_bytes\": \"example\",\n    \"total_files\": \"example\",\n    \"total_bytes\": \"example\",\n    \"errors\": \"example\",\n    \"temp_file_id\": \"example\",\n    \"temp_path\": \"example\",\n    \"file_name\": \"example.pdf\"\n}"}]},{"name":"Upload ZIP source for import","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/upload-source","host":["{{base_url}}"],"path":["import","upload-source"]},"description":"Upload a ZIP file (ELO export or local upload). Maximum 5 GB.\n\n---\n**Tool-ID:** `po_import_upload_source` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_upload_source`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"file","type":"file","description":"**REQUIRED** | ZIP-file | Type: string","src":null},{"key":"source_type","type":"text","description":"*(optional)* | Source type | Type: string | Allowed: elo_office, local_upload","value":"elo_office"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/import/upload-source","host":["{{base_url}}"],"path":["import","upload-source"]},"description":"Upload a ZIP file (ELO export or local upload). Maximum 5 GB.\n\n---\n**Tool-ID:** `po_import_upload_source` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_import_upload_source`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"file","type":"file","description":"**REQUIRED** | ZIP-file | Type: string","src":null},{"key":"source_type","type":"text","description":"*(optional)* | Source type | Type: string | Allowed: elo_office, local_upload","value":"elo_office"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"source_id\": \"example\",\n    \"files_found\": 1,\n    \"processing_time\": \"example\",\n    \"data\": \"example\",\n    \"temp_file_id\": \"example\",\n    \"temp_path\": \"example\",\n    \"file_name\": \"example.pdf\"\n}"}]}]}]},{"name":"🎨 Media AI","description":"# Media AI\n\nPaperOffice **Media AI** groups **image generation**, **voice synthesis & transcription**, and **multilingual text translation** in one product area. This folder contains **nine** curated Postman requests across **three** sub-modules.\n\nPer-request credit costs are **not** duplicated here — use **Introduction & Basics → Pricing & Plans**, the [Pricing Calculator](https://app.paperoffice.ai/en/pricing/calculator), or `_billing` on live responses.\n\n---\n\n## Sub-modules (where to click)\n\n| Sub-module | Postman folder | Use when you need |\n|------------|----------------|-------------------|\n| **Image Studio** | Image Studio | Text-to-image, background removal |\n| **Voice** | Voice | TTS (catalog, clone, multi-speaker), STT |\n| **Translation** | Translation | Language catalog, translate string/array/JSON |\n\nEach sub-folder has its **own detailed overview** — open **Image Studio**, **Voice**, or **Translation** for parameters, demos, and module-specific best practices.\n\n---\n\n## All requests in this section (9)\n\n| # | Sub-module | Postman request | API pattern |\n|---|------------|-----------------|-------------|\n| 1 | Image Studio | `POST` Generate image | Job + **form-data** |\n| 2 | Image Studio | `POST` Remove background | Job + **form-data** (file upload) |\n| 3 | Voice | `POST` List available TTS voices | Direct REST (catalog) |\n| 4 | Voice | `POST` Generate speech (single voice) | Job + **form-data** |\n| 5 | Voice | `POST` Clone voice (TTS) | Job + **form-data** (audio sample) |\n| 6 | Voice | `POST` Generate multi-speaker TTS | Job + **form-data** |\n| 7 | Voice | `POST` Transcribe audio | Job + **form-data** (audio file) |\n| 8 | Translation | `GET` Get supported languages | Direct REST (catalog) |\n| 9 | Translation | `POST` Translate text | Direct REST + **JSON body** |\n\n---\n\n## Two API surfaces (important)\n\nMost Media AI work uses **jobs**; Translation uses a **dedicated REST** surface:\n\n| Pattern | Endpoints | Postman body | Typical use |\n|---------|-----------|--------------|-------------|\n| **Job pipelines** | `POST /job/add/{handler}___…` | **form-data** (often includes **files**) | Images, TTS, STT |\n| **Translation REST** | `GET /translate/languages`, `POST /translate/text` | **raw JSON** for `/translate/text` | Text, arrays, i18n JSON objects |\n\n**Why Translation is JSON:** `text` can be a **string**, **string[]**, or **JSON object** — not representable cleanly as multipart form-data. Image and voice jobs need **binary uploads** — form-data is the right fit there.\n\n**Under the hood:** Translation still uses the **same Jobstream engine** (`paperoffice_ai___process`, priority, queue, `job_id`, poll) — only the **public URL and request shape** differ. See **Translation** folder docs for details.\n\n---\n\n## Shared execution model (jobs & hybrid translate)\n\n| Concept | Applies to |\n|---------|------------|\n| **Bearer token** | All requests |\n| **`_billing` in JSON responses** | Billed calls (catalog may be UI-free in the app) |\n| **Connection hold** (`client_wait`, default on) | Jobs + `POST /translate/text` — wait up to **~295 s**, then **200** or **202** + `poll_url` |\n| **Queue priority** (`priority`, optional) | Jobs + translate — omit = plan default; **≥ 900** = synchronous attempt when capacity allows |\n| **Polling** | `GET /job/get/{job_id}` after **HTTP 202** or when async |\n\nLong work can exceed the HTTP hold — the **job keeps running**; poll until `completed` or `failed`.\n\n---\n\n## Typical cross-module workflows\n\n1. **Marketing asset:** **Generate image** → optional **Remove background** → use URL/`inline` output in your app.\n2. **Voiceover:** **List available TTS voices** → **Generate speech** (or clone / multi-speaker) → download from `inline`/`url`.\n3. **Meeting notes:** **Transcribe audio** → take transcript text → **Translate text** to target language(s).\n4. **i18n product copy:** **Get supported languages** (cache 35 codes + `target_locale` variants) → **Translate text** with JSON object `text` → read `translated_json`.\n\n---\n\n## Billing overview (high level)\n\n| Area | Billing unit (typical) |\n|------|-------------------------|\n| Image Studio | Per job (tier/model/size); see request docs |\n| Voice TTS | Per job (quality tier, characters) |\n| Voice STT | Per job (audio duration / tier) |\n| Translation catalog | **1 credit** per API call (`GET /translate/languages`) |\n| Translation text | Per **character volume** × **tier** (`basic` / `premium` / `ultra`) |\n\nApp UI calls from `app.paperoffice.ai` may show **`credits_billed: null`** on catalog endpoints — external API clients are billed per the matrix above.\n\n---\n\n## Queue priority & connection hold\n\nThese are **independent** (see **Introduction & Basics → Guides → Priority, Jobs & Connection Hold**):\n\n| Concept | What it controls |\n|---------|------------------|\n| **Connection hold** | How long **this HTTP request** waits (~**295 s** max) |\n| **Queue priority** | How soon processing **starts** in the worker queue (and credit tier) |\n\nLeave **`priority` unchecked** in Postman unless you intentionally need a higher tier or **`900`** for stream-style completion.\n\n---\n\n## Best practices (Media AI-wide)\n\n1. Open the **sub-folder** that matches your task — do not mix Image parameters into Translation requests.\n2. For any **job** that returns **HTTP 202**, **poll** `GET /job/get/{job_id}` — do not resubmit the same payload unless the job failed.\n3. For **Translation**, always call **Get supported languages** first (or cache it) — do not hardcode language lists.\n4. Use **`output=url`** in production integrations for large binaries; **`inline`** for quick Postman checks.\n5. Split payloads that exceed module limits (e.g. **15 000 characters** per translate request) **client-side**.\n\n---\n\n## MCP vs Postman\n\nThe full API catalog may list additional tool IDs (per image tier, legacy translate names, etc.). This Postman section exposes **nine masters** only — the supported integration path for external developers.\n\n---\n\n## Next steps\n\n| Goal | Open folder |\n|------|-------------|\n| Images | **Image Studio** |\n| Speech in / out | **Voice** |\n| Languages & text | **Translation** |","item":[{"name":"🎨 Image Studio","description":"# Image Studio\n\nPaperOffice **Image Studio** provides **text-to-image generation** and **background removal** via two job pipelines.\n\n---\n\n## What you can do\n\n| Capability | Postman request | Pipeline |\n|------------|-----------------|----------|\n| **Generate image** | `POST` Generate image | `paperoffice_imagestudio___generate` |\n| **Remove background** | `POST` Remove background | `paperoffice_imagestudio___remove_bg` |\n\nThere are **only two public job types** — all options (model tier, size, output mode, batch count, prompt optimizer, etc.) are **parameters on these requests**, not separate endpoints.\n\n---\n\n## Generate image (text-to-image)\n\n- **Default Postman demo:** photorealistic portrait, woman holding a sign with legible **Tokyo**, `force_location=Tokyo`, weather + prompt optimizer enabled — showcases text, realism, and geo context in one click.\n- **Prompt** (required) describes the scene.\n- **`model`** selects the resolution tier: `basic` (512), `premium` (1280), `ultra` (2048).\n- **`width` / `height`** optional; clamped to tier and 16 px grid.\n- **`output`:** `inline` (default), `base64`, or `url` — **one parameter**, not separate Postman examples.\n- **`precompile_prompt`:** AI optimizes your prompt (default `true`).\n- **`inject_weather`**, **`force_location`:** optional scene context for the prompt optimizer (see Generate image docs).\n- **`num_images`:** 1–8 images per job.\n- **`negative_prompt`**, **`seed`** for control and reproducibility.\n\nInference settings (`steps`, `guidance_scale`) are fixed internally and are not exposed as request fields.\n\n---\n\n## Remove background\n\n- Upload **`file`** (multipart).\n- **`output_format`:** `webp` or `png`.\n- **`output`:** `inline` (default), `base64`, or `url` — same delivery modes as generate.\n\n---\n\n## Typical workflow\n\n1. **Generate:** `POST /job/add/paperoffice_imagestudio___generate` with `prompt` + `model`.\n2. **Or edit:** `POST /job/add/paperoffice_imagestudio___remove_bg` with `file`.\n3. On **HTTP 202**, poll **`GET /job/get/{job_id}`** until done.\n\n---\n\n## Connection hold vs queue priority\n\n| Concept | Role |\n|---------|------|\n| **Connection hold** | Waits on this HTTP call up to **~295 s**, then result or **202** + poll |\n| **Queue priority** | Optional **1–900**; **`900`** = stream/synchronous |\n\n---\n\n## Best practices\n\n1. Use **Generate image** for all text-to-image cases — change `model`/`output` in the form, do not duplicate requests.\n2. Use **Remove background** for cut-outs — set `output` in the same request.\n3. Leave **`priority` unchecked** unless you need a higher tier or **`900`** for stream mode.\n4. Prefer **`output=url`** in integrations; **`inline`** for quick visual checks in Postman.\n\n---\n\n## Related modules\n\nOpen the parent folder **Media AI** for the **full section map** (all nine requests, JSON vs form-data, shared job model). Under **Media AI**: **Voice**, **Translation**. Tier-specific MCP tool IDs may still exist in the API catalog; the Postman collection exposes the **two masters** above.","item":[{"name":"Generate image","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_imagestudio___generate","host":["{{base_url}}"],"path":["job","add","paperoffice_imagestudio___generate"]},"description":"## Overview\n\nGenerate images from a text **prompt** using PaperOffice **Image Studio**.\n\nUse this endpoint for **text-to-image** jobs. Set `model` to control the maximum resolution tier; use `output` to choose how the result is returned.\n\n**Pipeline:** `paperoffice_imagestudio___generate`\n\n## Model tiers (size limits)\n\nAll tiers share the same Image Studio capability; limits are **maximum width/height** (snapped to a **16 px grid**, minimum 512 px per side):\n\n| `model` | Max size | Typical use |\n|---------|----------|-------------|\n| `basic` | 512×512 | Icons, thumbnails, fast drafts |\n| `premium` | 1280×1280 | Web graphics, presentations (default) |\n| `ultra` | 2048×2048 | Print-ready, large hero images |\n\nOversized `width`/`height` values are clamped to the selected tier.\n\n## Request parameters\n\n| Parameter | Required | Default | Notes |\n|-----------|----------|---------|-------|\n| `prompt` | yes | — | Text description of the image to generate. |\n| `model` | no | `premium` | `basic`, `premium`, or `ultra` (see table above). |\n| `width` | no | tier default | Pixels (128–2048), snapped to 16 px grid. |\n| `height` | no | tier default | Same as `width`. |\n| `output` | no | `inline` | `inline` (raw image bytes in HTTP body), `base64` (embedded in JSON), `url` (download link in JSON). |\n| `precompile_prompt` | no | `true` | `true` = AI prompt optimizer; `false` = use your exact wording (recommended with fixed `seed`). |\n| `num_images` | no | `1` | Generate 1–8 images in one job (each image is a separate unit in the result). |\n| `negative_prompt` | no | — | Elements to avoid (e.g. `blurry, watermark, text`). |\n| `seed` | no | random | Fixed integer ≥ 0 for reproducibility; use with `precompile_prompt=false`. |\n| `priority` | no | plan default | Leave **unchecked** in Postman. |\n\n## Prompt context (optional)\n\nWhen `precompile_prompt=true` (default), Image Studio may enrich the scene using location and weather context:\n\n| Parameter | Required | Default | Notes |\n|-----------|----------|---------|-------|\n| `inject_weather` | no | `true` | `true` = include local weather in the optimized prompt; `false` = omit weather hints. |\n| `force_location` | no | — | City/region name **or** IP address. Overrides automatic geo detection from the request. If omitted, the caller IP is used when available. |\n\n**Automatic (not a Postman field):** Client IP is taken from the HTTP request when `force_location` is empty — no need to send `user_ip` manually.\n\n**Not exposed in Postman (fixed inference profile):** `steps` and `guidance_scale` are set internally and are not customer-tunable.\n\n## Responses\n\n| HTTP | When | Body |\n|------|------|------|\n| **200** | Finished within connection hold | JSON with `result.url` / `base64`, or **binary** when `output=inline`. |\n| **202** | Hold exceeded (~295 s) | `job_id`, `poll_url` — job keeps running. |\n| **400** | Missing `prompt` / invalid params | `status`, `code`, `message`. |\n\n## Connection hold & polling (~5 minute limit)\n\n- **Default:** This HTTP request is held up to **~5 minutes (~295 s)**; then **200** or **202** + `poll_url`.\n- **Poll:** `GET /job/get/{job_id}` every 5–10 s after **202** until `completed` or `failed`.\n- **Immediate job id:** `client_wait=false` or `async_only=true` (hidden in Postman; use API integrations).\n\n## Queue priority (optional)\n\n- **Omitted / unchecked** → Subscription plan default.\n- **1–899** → faster queue start on busy workers.\n- **`900`** → synchronous / stream on this connection.\n- Valid range: **1–900**.\n\n## Best practices\n\n1. **First try in Postman:** Send the prefilled demo (`photorealistic portrait`, sign text **Tokyo**, `force_location=Tokyo`, `inject_weather=true`, `precompile_prompt=true`) with `output=inline` to see location, weather, and prompt optimization together.\n2. In Postman, keep `output=inline` (default) to preview image bytes; use `output=url` in production integrations.\n3. Use `precompile_prompt=true` unless you already optimized the prompt externally.\n4. For other cities, change both the sign wording in `prompt` and `force_location` (city name or test IP).\n5. For fast icon drafts, set `model=basic` and `width`/`height` = 512 with a simpler prompt.\n6. For batch variants, use `num_images` and poll once — do not resubmit unless the job failed.\n7. After **HTTP 202**, poll — do not resubmit unless the job failed.\n\n## Related endpoint\n\n| Use case | Postman item |\n|----------|----------------|\n| Remove background from an existing image | Remove background |\n\n---\n*Documentation release: `R20260520.0937`* · status: `frozen`\n\n---\n**Tool-ID:** `po_image_generate_image_premium_max_1280x1280` • **MCP:** Callable via `mcp.paperoffice.ai` as `po_image_generate_image_premium_max_1280x1280`\n\n**Pipeline:** `paperoffice_imagestudio___generate` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"prompt","type":"text","description":"**REQUIRED** | Text description of the image to generate (required). Default demo: photorealistic portrait with legible \"Tokyo\" sign — pair with force_location=Tokyo. | Type: string","value":"Photorealistic street portrait of a woman in her early thirties, upper body, holding a handmade cardboard sign at chest height. The sign must display the word \"Tokyo\" in large, bold, perfectly legible black letters. Natural daylight, candid travel photography, shallow depth of field, 35mm lens, realistic skin texture, sharp focus on face and sign."},{"key":"model","type":"text","description":"*(optional)* | Resolution tier: basic (max 512×512), premium (max 1280×1280), ultra (max 2048×2048). Default: premium. | Type: string | Allowed: basic, premium, ultra","value":"premium"},{"key":"width","type":"text","description":"*(optional)* | Width in pixels (snapped to 16 px grid, clamped to model tier). Optional. | Type: integer | Min: 128 | Max: 2048","value":"896"},{"key":"height","type":"text","description":"*(optional)* | Height in pixels (snapped to 16 px grid, clamped to model tier). Optional. | Type: integer | Min: 128 | Max: 2048","value":"1152"},{"key":"output","type":"text","description":"*(optional)* | Delivery: inline (raw image bytes in HTTP body, default), base64 (JSON), url (download link in JSON). | Type: string | Allowed: inline, base64, url","value":"inline"},{"key":"precompile_prompt","type":"text","description":"*(optional)* | true = AI prompt optimizer (default). false = use exact prompt (pair with fixed seed for reproducibility). | Type: string | Allowed: true, false","value":"true"},{"key":"inject_weather","type":"text","description":"*(optional)* | true = include local weather in prompt optimizer (default). false = omit weather context. | Type: string | Allowed: true, false","value":"true"},{"key":"force_location","type":"text","description":"*(optional)* | Optional. City/region name or IP. Default demo: Tokyo (pairs with the sign text in the default prompt). | Type: string","value":"Tokyo"},{"key":"num_images","type":"text","description":"*(optional)* | Number of images to generate in one job (1–8). Each image is processed as a separate unit in the job result. | Type: integer | Min: 1 | Max: 8","value":"1"},{"key":"negative_prompt","type":"text","description":"*(optional)* | Optional. Elements to exclude (e.g. blurry, misspelled letters, distorted typography). | Type: string","value":"blurry, low quality, watermark, misspelled letters, distorted typography"},{"key":"seed","type":"text","description":"*(optional)* | Optional. Fixed seed ≥ 0 for reproducibility; omit or -1 for random. Use with precompile_prompt=false. | Type: integer","value":"-1"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_imagestudio___generate","host":["{{base_url}}"],"path":["job","add","paperoffice_imagestudio___generate"]},"description":"## Overview\n\nGenerate images from a text **prompt** using PaperOffice **Image Studio**.\n\nUse this endpoint for **text-to-image** jobs. Set `model` to control the maximum resolution tier; use `output` to choose how the result is returned.\n\n**Pipeline:** `paperoffice_imagestudio___generate`\n\n## Model tiers (size limits)\n\nAll tiers share the same Image Studio capability; limits are **maximum width/height** (snapped to a **16 px grid**, minimum 512 px per side):\n\n| `model` | Max size | Typical use |\n|---------|----------|-------------|\n| `basic` | 512×512 | Icons, thumbnails, fast drafts |\n| `premium` | 1280×1280 | Web graphics, presentations (default) |\n| `ultra` | 2048×2048 | Print-ready, large hero images |\n\nOversized `width`/`height` values are clamped to the selected tier.\n\n## Request parameters\n\n| Parameter | Required | Default | Notes |\n|-----------|----------|---------|-------|\n| `prompt` | yes | — | Text description of the image to generate. |\n| `model` | no | `premium` | `basic`, `premium`, or `ultra` (see table above). |\n| `width` | no | tier default | Pixels (128–2048), snapped to 16 px grid. |\n| `height` | no | tier default | Same as `width`. |\n| `output` | no | `inline` | `inline` (raw image bytes in HTTP body), `base64` (embedded in JSON), `url` (download link in JSON). |\n| `precompile_prompt` | no | `true` | `true` = AI prompt optimizer; `false` = use your exact wording (recommended with fixed `seed`). |\n| `num_images` | no | `1` | Generate 1–8 images in one job (each image is a separate unit in the result). |\n| `negative_prompt` | no | — | Elements to avoid (e.g. `blurry, watermark, text`). |\n| `seed` | no | random | Fixed integer ≥ 0 for reproducibility; use with `precompile_prompt=false`. |\n| `priority` | no | plan default | Leave **unchecked** in Postman. |\n\n## Prompt context (optional)\n\nWhen `precompile_prompt=true` (default), Image Studio may enrich the scene using location and weather context:\n\n| Parameter | Required | Default | Notes |\n|-----------|----------|---------|-------|\n| `inject_weather` | no | `true` | `true` = include local weather in the optimized prompt; `false` = omit weather hints. |\n| `force_location` | no | — | City/region name **or** IP address. Overrides automatic geo detection from the request. If omitted, the caller IP is used when available. |\n\n**Automatic (not a Postman field):** Client IP is taken from the HTTP request when `force_location` is empty — no need to send `user_ip` manually.\n\n**Not exposed in Postman (fixed inference profile):** `steps` and `guidance_scale` are set internally and are not customer-tunable.\n\n## Responses\n\n| HTTP | When | Body |\n|------|------|------|\n| **200** | Finished within connection hold | JSON with `result.url` / `base64`, or **binary** when `output=inline`. |\n| **202** | Hold exceeded (~295 s) | `job_id`, `poll_url` — job keeps running. |\n| **400** | Missing `prompt` / invalid params | `status`, `code`, `message`. |\n\n## Connection hold & polling (~5 minute limit)\n\n- **Default:** This HTTP request is held up to **~5 minutes (~295 s)**; then **200** or **202** + `poll_url`.\n- **Poll:** `GET /job/get/{job_id}` every 5–10 s after **202** until `completed` or `failed`.\n- **Immediate job id:** `client_wait=false` or `async_only=true` (hidden in Postman; use API integrations).\n\n## Queue priority (optional)\n\n- **Omitted / unchecked** → Subscription plan default.\n- **1–899** → faster queue start on busy workers.\n- **`900`** → synchronous / stream on this connection.\n- Valid range: **1–900**.\n\n## Best practices\n\n1. **First try in Postman:** Send the prefilled demo (`photorealistic portrait`, sign text **Tokyo**, `force_location=Tokyo`, `inject_weather=true`, `precompile_prompt=true`) with `output=inline` to see location, weather, and prompt optimization together.\n2. In Postman, keep `output=inline` (default) to preview image bytes; use `output=url` in production integrations.\n3. Use `precompile_prompt=true` unless you already optimized the prompt externally.\n4. For other cities, change both the sign wording in `prompt` and `force_location` (city name or test IP).\n5. For fast icon drafts, set `model=basic` and `width`/`height` = 512 with a simpler prompt.\n6. For batch variants, use `num_images` and poll once — do not resubmit unless the job failed.\n7. After **HTTP 202**, poll — do not resubmit unless the job failed.\n\n## Related endpoint\n\n| Use case | Postman item |\n|----------|----------------|\n| Remove background from an existing image | Remove background |\n\n---\n*Documentation release: `R20260520.0937`* · status: `frozen`\n\n---\n**Tool-ID:** `po_image_generate_image_premium_max_1280x1280` • **MCP:** Callable via `mcp.paperoffice.ai` as `po_image_generate_image_premium_max_1280x1280`\n\n**Pipeline:** `paperoffice_imagestudio___generate` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"prompt","type":"text","description":"**REQUIRED** | Text description of the image to generate (required). Default demo: photorealistic portrait with legible \"Tokyo\" sign — pair with force_location=Tokyo. | Type: string","value":"Photorealistic street portrait of a woman in her early thirties, upper body, holding a handmade cardboard sign at chest height. The sign must display the word \"Tokyo\" in large, bold, perfectly legible black letters. Natural daylight, candid travel photography, shallow depth of field, 35mm lens, realistic skin texture, sharp focus on face and sign."},{"key":"model","type":"text","description":"*(optional)* | Resolution tier: basic (max 512×512), premium (max 1280×1280), ultra (max 2048×2048). Default: premium. | Type: string | Allowed: basic, premium, ultra","value":"premium"},{"key":"width","type":"text","description":"*(optional)* | Width in pixels (snapped to 16 px grid, clamped to model tier). Optional. | Type: integer | Min: 128 | Max: 2048","value":"896"},{"key":"height","type":"text","description":"*(optional)* | Height in pixels (snapped to 16 px grid, clamped to model tier). Optional. | Type: integer | Min: 128 | Max: 2048","value":"1152"},{"key":"output","type":"text","description":"*(optional)* | Delivery: inline (raw image bytes in HTTP body, default), base64 (JSON), url (download link in JSON). | Type: string | Allowed: inline, base64, url","value":"inline"},{"key":"precompile_prompt","type":"text","description":"*(optional)* | true = AI prompt optimizer (default). false = use exact prompt (pair with fixed seed for reproducibility). | Type: string | Allowed: true, false","value":"true"},{"key":"inject_weather","type":"text","description":"*(optional)* | true = include local weather in prompt optimizer (default). false = omit weather context. | Type: string | Allowed: true, false","value":"true"},{"key":"force_location","type":"text","description":"*(optional)* | Optional. City/region name or IP. Default demo: Tokyo (pairs with the sign text in the default prompt). | Type: string","value":"Tokyo"},{"key":"num_images","type":"text","description":"*(optional)* | Number of images to generate in one job (1–8). Each image is processed as a separate unit in the job result. | Type: integer | Min: 1 | Max: 8","value":"1"},{"key":"negative_prompt","type":"text","description":"*(optional)* | Optional. Elements to exclude (e.g. blurry, misspelled letters, distorted typography). | Type: string","value":"blurry, low quality, watermark, misspelled letters, distorted typography"},{"key":"seed","type":"text","description":"*(optional)* | Optional. Fixed seed ≥ 0 for reproducibility; omit or -1 for random. Use with precompile_prompt=false. | Type: integer","value":"-1"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Min: 1 | Max: 900","value":"","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_example_image_generate\",\n    \"message\": \"Image generation completed\",\n    \"pipeline\": \"paperoffice_imagestudio___generate\",\n    \"processing_time\": \"12.34s\",\n    \"client_wait\": true,\n    \"result\": {\n        \"url\": \"https://api.paperoffice.ai/dev/job/download/job_example_image_generate/output.webp\",\n        \"width\": 1024,\n        \"height\": 1024,\n        \"format\": \"webp\",\n        \"model\": \"premium\",\n        \"seed\": 42\n    }\n}"}]},{"name":"Remove background","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_imagestudio___remove_bg","host":["{{base_url}}"],"path":["job","add","paperoffice_imagestudio___remove_bg"]},"description":"## Overview\n\nRemove the background from an uploaded image using PaperOffice **Image Studio** (AI segmentation).\n\nReturns a transparent or clean foreground subject. Use when you already have an image file and need a cut-out for compositing or product shots.\n\n**Pipeline:** `paperoffice_imagestudio___remove_bg`\n\n## Request parameters\n\n| Parameter | Required | Default | Notes |\n|-----------|----------|---------|-------|\n| `file` | yes | — | Image upload: JPEG, PNG, WebP, GIF, BMP (multipart). |\n| `output_format` | no | `webp` | `webp` (smaller) or `png` (lossless transparency). |\n| `output` | no | `inline` | `inline` (raw image in HTTP body), `base64`, or `url` (download link in JSON). |\n| `rembg_model` | no | `birefnet-general` | Optional Rembg model on BotHive (e.g. `birefnet-portrait`, `isnet-general-use`). Invalid values fall back to default. |\n| `priority` | no | plan default | Leave **unchecked** in Postman. |\n\n## Responses\n\n| HTTP | When | Body |\n|------|------|------|\n| **200** | Finished within hold | JSON with download link or binary (`inline`). |\n| **202** | Hold exceeded | `job_id`, `poll_url`. |\n| **400** | Missing `file` | Error JSON. |\n\nProcessing is typically fast (~seconds); still subject to the same connection-hold rules as other jobs.\n\n## Connection hold & polling\n\nSame as other job endpoints: when **`client_wait` is omitted** (recommended) or `client_wait=true`, the API keeps the HTTP connection open up to **~295 s** and returns the finished image (or **202** with `poll_url` if processing takes longer). Set `client_wait=false` or `async_only=true` for immediate `job_id` + polling only.\n\n## Queue priority (optional)\n\nValid range **1–900**. **`900`** = synchronous / stream. Omit for plan default.\n\n## Best practices\n\n1. Prefer **PNG/WebP** inputs with a clear subject/background contrast.\n2. Use `output_format=png` when you need lossless transparency in design tools.\n3. Keep `output=inline` (default) in Postman; use `output=url` in production integrations.\n4. Set `output` once per job — do not create separate Postman requests per output mode.\n\nIf you receive **`FILE_STAGING_FAILED`**, the API could not write the upload to the processing directory — retry the request; persistent failures indicate an infrastructure issue on the API host.\n\n## Related endpoint\n\n| Use case | Postman item |\n|----------|----------------|\n| Generate new images from text | Generate image |\n\n---\n*Documentation release: `R20260520.0937`* · status: `frozen`\n\n---\n**Tool-ID:** `po_image_remove_background` • **MCP:** Callable via `mcp.paperoffice.ai` as `po_image_remove_background`\n\n**Pipeline:** `paperoffice_imagestudio___remove_bg` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file","type":"file","description":"**REQUIRED** | Image file to process (required). JPEG, PNG, WebP, GIF, BMP. | Type: string","src":null},{"key":"output_format","type":"text","description":"*(optional)* | Output format: webp (default, smaller) or png (lossless transparency). | Type: string | Allowed: webp, png","value":"webp"},{"key":"output","type":"text","description":"*(optional)* | Delivery: inline (raw image in HTTP body, default), base64, or url (download link in JSON). | Type: string | Allowed: inline, base64, url","value":"inline"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_imagestudio___remove_bg","host":["{{base_url}}"],"path":["job","add","paperoffice_imagestudio___remove_bg"]},"description":"## Overview\n\nRemove the background from an uploaded image using PaperOffice **Image Studio** (AI segmentation).\n\nReturns a transparent or clean foreground subject. Use when you already have an image file and need a cut-out for compositing or product shots.\n\n**Pipeline:** `paperoffice_imagestudio___remove_bg`\n\n## Request parameters\n\n| Parameter | Required | Default | Notes |\n|-----------|----------|---------|-------|\n| `file` | yes | — | Image upload: JPEG, PNG, WebP, GIF, BMP (multipart). |\n| `output_format` | no | `webp` | `webp` (smaller) or `png` (lossless transparency). |\n| `output` | no | `inline` | `inline` (raw image in HTTP body), `base64`, or `url` (download link in JSON). |\n| `rembg_model` | no | `birefnet-general` | Optional Rembg model on BotHive (e.g. `birefnet-portrait`, `isnet-general-use`). Invalid values fall back to default. |\n| `priority` | no | plan default | Leave **unchecked** in Postman. |\n\n## Responses\n\n| HTTP | When | Body |\n|------|------|------|\n| **200** | Finished within hold | JSON with download link or binary (`inline`). |\n| **202** | Hold exceeded | `job_id`, `poll_url`. |\n| **400** | Missing `file` | Error JSON. |\n\nProcessing is typically fast (~seconds); still subject to the same connection-hold rules as other jobs.\n\n## Connection hold & polling\n\nSame as other job endpoints: when **`client_wait` is omitted** (recommended) or `client_wait=true`, the API keeps the HTTP connection open up to **~295 s** and returns the finished image (or **202** with `poll_url` if processing takes longer). Set `client_wait=false` or `async_only=true` for immediate `job_id` + polling only.\n\n## Queue priority (optional)\n\nValid range **1–900**. **`900`** = synchronous / stream. Omit for plan default.\n\n## Best practices\n\n1. Prefer **PNG/WebP** inputs with a clear subject/background contrast.\n2. Use `output_format=png` when you need lossless transparency in design tools.\n3. Keep `output=inline` (default) in Postman; use `output=url` in production integrations.\n4. Set `output` once per job — do not create separate Postman requests per output mode.\n\nIf you receive **`FILE_STAGING_FAILED`**, the API could not write the upload to the processing directory — retry the request; persistent failures indicate an infrastructure issue on the API host.\n\n## Related endpoint\n\n| Use case | Postman item |\n|----------|----------------|\n| Generate new images from text | Generate image |\n\n---\n*Documentation release: `R20260520.0937`* · status: `frozen`\n\n---\n**Tool-ID:** `po_image_remove_background` • **MCP:** Callable via `mcp.paperoffice.ai` as `po_image_remove_background`\n\n**Pipeline:** `paperoffice_imagestudio___remove_bg` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"file","type":"file","description":"**REQUIRED** | Image file to process (required). JPEG, PNG, WebP, GIF, BMP. | Type: string","src":null},{"key":"output_format","type":"text","description":"*(optional)* | Output format: webp (default, smaller) or png (lossless transparency). | Type: string | Allowed: webp, png","value":"webp"},{"key":"output","type":"text","description":"*(optional)* | Delivery: inline (raw image in HTTP body, default), base64, or url (download link in JSON). | Type: string | Allowed: inline, base64, url","value":"inline"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Min: 1 | Max: 900","value":"","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_example_image_remove_bg\",\n    \"message\": \"Background removed\",\n    \"pipeline\": \"paperoffice_imagestudio___remove_bg\",\n    \"processing_time\": \"4.12s\",\n    \"client_wait\": true,\n    \"result\": {\n        \"url\": \"https://api.paperoffice.ai/dev/job/download/job_example_image_remove_bg/output.webp\",\n        \"format\": \"webp\",\n        \"transparent\": true\n    }\n}"}]}]},{"name":"🎤 Voice","description":"# Voice\n\nPaperOffice **Voice AI** covers neural **text-to-speech (TTS)** and **speech-to-text (STT)** in one place. All TTS jobs share the same pipeline URL; the request body selects the mode.\n\n---\n\n## What you can do\n\n| Capability | Postman request | When to use |\n|------------|-----------------|-------------|\n| **Browse catalog voices** | `POST` List available TTS voices | Before any TTS job — pick `name` + language bucket |\n| **Single-speaker TTS** | `POST` Generate speech (single voice) | One catalog voice; default demo script shows emotions + reference IDs |\n| **Clone a custom voice** | `POST` Clone voice (TTS) | Voice not in catalog — upload `voice_sample` (min. **10 s** audio) |\n| **Multi-speaker TTS** | `POST` Generate multi-speaker TTS | Several catalog speakers in one text (`voice=Multi` + tags) |\n| **Transcribe audio** | `POST` Transcribe audio | STT — audio file → text (speaker detection where supported) |\n\n**Languages:** 50+ TTS catalog buckets (e.g. `en`, `de`, `fr`). List exact pairs via **List available TTS voices**.\n\n**Output formats (TTS):** `mp3`, `wav`, `ogg`. **Delivery:** `inline` (audio in HTTP body), `base64`, or `url` in JSON.\n\n**Quality (TTS):** `basic` (fast), `premium` (balanced), `ultra` (best). Voice cloning requires **`premium`** or **`ultra`**.\n\n---\n\n## Shared pipeline (TTS)\n\nAll four TTS endpoints use:\n\n```http\nPOST /job/add/paperoffice_voice___tts\n```\n\nOnly the **form body** differs (catalog `voice` vs `voice_sample` vs `voice=Multi`, etc.). STT uses its own pipeline (see **Transcribe audio**).\n\n---\n\n## Typical workflow\n\n1. **`POST /voice/voices`** — list voices; choose `name` and matching `language`.\n2. **`POST /job/add/paperoffice_voice___tts`** — generate audio (or clone / multi-speaker variant).\n3. If the response is **HTTP 202** — poll **`GET /job/get/{job_id}`** every 5–10 s until `completed` or `failed` (job keeps running after the connection hold ends).\n\nFor STT, upload audio on **Transcribe audio** (separate pipeline) and poll the same way when needed.\n\n---\n\n## Connection hold vs queue priority\n\nThese are **independent**:\n\n| Concept | What it controls |\n|---------|------------------|\n| **Connection hold** (`client_wait`, default **on**) | How long **this HTTP request** waits (~**5 minutes / ~295 s** max), then **200** result or **202** + `poll_url` |\n| **Queue priority** (`priority`, optional) | How soon the job **starts in the worker queue** (billing/speed tier) |\n\nLong synthesis can exceed 5 minutes — only the **HTTP wait** is capped; use polling after **202**.\n\n---\n\n## Queue priority (optional)\n\n- **Omitted / unchecked in Postman** → your Subscription **plan default** (from bearer token tier).\n- **1–899** → higher values typically mean **faster queue start** on busy workers (higher credit tier).\n- **`900`** → **synchronous / stream** mode — the API processes on this connection (not a value above the queue maximum).\n- Valid range: **1–900** (values above 900 are not supported).\n\nSee **Introduction & Basics → Guides → Priority, Jobs & Connection Hold** for queue priority and connection-hold details.\n\n---\n\n## Text preparation (TTS)\n\n- **German (`language=de`):** dates and common German business identifiers in `text` are normalized for natural speech.\n- **Other languages:** standard number and identifier handling for the selected `language` bucket.\n- **Long text:** up to **50,000 characters** per job; the pipeline segments internally (~8,000 characters per chunk) — do not split manually unless you want separate jobs.\n\n---\n\n## Best practices\n\n1. Always **list voices** before the first catalog TTS call.\n2. Keep **`voice`** and **`language`** in the **same catalog bucket** to avoid `warnings[]`.\n3. Leave **`priority` unchecked** unless you intentionally need a higher queue tier or **`900`** for stream-style waiting.\n4. Use **`output=inline`** in Postman to hear TTS audio directly in the response body.\n5. After **HTTP 202**, **poll** — do not resubmit the same job unless it failed.\n6. For cloning: clean **mono** sample, **≥10 s** speech, **`premium`** or **`ultra`** only.\n\n---\n\n## Related modules\n\nOpen the parent folder **Media AI** for the **full section map** (all nine requests, JSON vs form-data, shared job model). Under **Media AI** you also have **Image Studio** and **Translation**. Per-request pricing is not duplicated in this folder overview.","item":[{"name":"Transcribe audio","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_voice___stt","host":["{{base_url}}"],"path":["job","add","paperoffice_voice___stt"]},"description":"## Overview\n\nTranscribe uploaded **audio** to text (Speech-to-Text) via `paperoffice_voice___stt`.\n\nSupports plain JSON transcripts plus subtitle/diarization formats on higher tiers. This is a **job** endpoint (async-capable with connection hold), not an instant REST call.\n\n**Pipeline:** `paperoffice_voice___stt`.\n\n## Request parameters\n\n| Parameter | Required | Default | Notes |\n|-----------|----------|---------|-------|\n| `audio_file` | yes | — | Multipart audio upload. Common formats: MP3, WAV, M4A, FLAC, OGG, WebM, AAC. |\n| `quality` | no | `basic` | `basic` (plain transcript), `premium` (timestamps, SRT/VTT), `ultra` (speaker diarization, RTTM). |\n| `output_format` | no | `json` | `json`, `srt`, `vtt`, `rttm` — tier restrictions apply (see table below). |\n| `language` | no | *(auto)* | **Optional.** ISO code (`de`, `en`, …) or **omit** — the engine auto-detects the spoken language. |\n| `priority` | no | plan default | Leave **unchecked** in Postman. |\n\n### Quality vs output_format\n\n| output_format | basic | premium | ultra |\n|---------------|-------|---------|-------|\n| `json` | yes | yes | yes |\n| `srt`, `vtt` | no | yes | yes |\n| `rttm` (diarization) | no | no | yes |\n\n## Responses\n\n| HTTP | When | Body |\n|------|------|------|\n| **200** | Finished within connection hold | JSON with transcript (and extras per tier/format). |\n| **202** | Hold exceeded (~295s) | `job_id`, `poll_url` — poll until `completed`. |\n| **400** | Missing audio / invalid format combo | `status`, `message`. |\n\n## Connection hold & polling (~5 minute limit)\n\nSame hybrid model as TTS jobs: default wait on this request up to ~295s, then poll `GET /job/get/{job_id}` for long files.\n\n## Queue priority (optional)\n\nOmit in Postman for plan default. Higher values start sooner in the queue.\n\n## Best practices\n\n1. Use `quality=basic` + `output_format=json` for simple transcripts.\n2. Use `premium` when you need SRT/VTT subtitles with timestamps.\n3. Use `ultra` + `rttm` when you need speaker-separated diarization.\n4. For very long audio, expect **HTTP 202** and poll — do not upload twice.\n5. TTS generation is a separate pipeline — use the other Voice folder requests.\n\n## Related endpoints\n\n| Use case | Postman item |\n|----------|----------------|\n| Text-to-speech | Generate speech / Clone / Multi-speaker |\n| Voice names for TTS | List available TTS voices |\n\n---\n*Documentation release: `R20260519.2256`* · status: `frozen`\n\n---\n**Tool-ID:** `po_stt_transcribe_audio` • **MCP:** Callable via `mcp.paperoffice.ai` as `po_stt_transcribe_audio`\n\n**Pipeline:** `paperoffice_voice___stt` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"audio_file","type":"file","description":"**REQUIRED** | Audio file upload (required). MP3, WAV, M4A, FLAC, OGG, WebM, AAC. | Type: string","src":null},{"key":"quality","type":"text","description":"*(optional)* | Tier: basic (JSON transcript), premium (timestamps, SRT/VTT), ultra (speaker diarization, RTTM). | Type: string | Allowed: basic, premium, ultra","value":"basic"},{"key":"output_format","type":"text","description":"*(optional)* | json (all tiers), srt/vtt (premium+), rttm (ultra only). Default: json. | Type: string | Allowed: json, srt, vtt, rttm","value":"json"},{"key":"language","type":"text","description":"*(optional)* | Optional ISO language (de, en, …). Omit for auto detection. | Type: string","value":"en"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_voice___stt","host":["{{base_url}}"],"path":["job","add","paperoffice_voice___stt"]},"description":"## Overview\n\nTranscribe uploaded **audio** to text (Speech-to-Text) via `paperoffice_voice___stt`.\n\nSupports plain JSON transcripts plus subtitle/diarization formats on higher tiers. This is a **job** endpoint (async-capable with connection hold), not an instant REST call.\n\n**Pipeline:** `paperoffice_voice___stt`.\n\n## Request parameters\n\n| Parameter | Required | Default | Notes |\n|-----------|----------|---------|-------|\n| `audio_file` | yes | — | Multipart audio upload. Common formats: MP3, WAV, M4A, FLAC, OGG, WebM, AAC. |\n| `quality` | no | `basic` | `basic` (plain transcript), `premium` (timestamps, SRT/VTT), `ultra` (speaker diarization, RTTM). |\n| `output_format` | no | `json` | `json`, `srt`, `vtt`, `rttm` — tier restrictions apply (see table below). |\n| `language` | no | *(auto)* | **Optional.** ISO code (`de`, `en`, …) or **omit** — the engine auto-detects the spoken language. |\n| `priority` | no | plan default | Leave **unchecked** in Postman. |\n\n### Quality vs output_format\n\n| output_format | basic | premium | ultra |\n|---------------|-------|---------|-------|\n| `json` | yes | yes | yes |\n| `srt`, `vtt` | no | yes | yes |\n| `rttm` (diarization) | no | no | yes |\n\n## Responses\n\n| HTTP | When | Body |\n|------|------|------|\n| **200** | Finished within connection hold | JSON with transcript (and extras per tier/format). |\n| **202** | Hold exceeded (~295s) | `job_id`, `poll_url` — poll until `completed`. |\n| **400** | Missing audio / invalid format combo | `status`, `message`. |\n\n## Connection hold & polling (~5 minute limit)\n\nSame hybrid model as TTS jobs: default wait on this request up to ~295s, then poll `GET /job/get/{job_id}` for long files.\n\n## Queue priority (optional)\n\nOmit in Postman for plan default. Higher values start sooner in the queue.\n\n## Best practices\n\n1. Use `quality=basic` + `output_format=json` for simple transcripts.\n2. Use `premium` when you need SRT/VTT subtitles with timestamps.\n3. Use `ultra` + `rttm` when you need speaker-separated diarization.\n4. For very long audio, expect **HTTP 202** and poll — do not upload twice.\n5. TTS generation is a separate pipeline — use the other Voice folder requests.\n\n## Related endpoints\n\n| Use case | Postman item |\n|----------|----------------|\n| Text-to-speech | Generate speech / Clone / Multi-speaker |\n| Voice names for TTS | List available TTS voices |\n\n---\n*Documentation release: `R20260519.2256`* · status: `frozen`\n\n---\n**Tool-ID:** `po_stt_transcribe_audio` • **MCP:** Callable via `mcp.paperoffice.ai` as `po_stt_transcribe_audio`\n\n**Pipeline:** `paperoffice_voice___stt` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"audio_file","type":"file","description":"**REQUIRED** | Audio file upload (required). MP3, WAV, M4A, FLAC, OGG, WebM, AAC. | Type: string","src":null},{"key":"quality","type":"text","description":"*(optional)* | Tier: basic (JSON transcript), premium (timestamps, SRT/VTT), ultra (speaker diarization, RTTM). | Type: string | Allowed: basic, premium, ultra","value":"basic"},{"key":"output_format","type":"text","description":"*(optional)* | json (all tiers), srt/vtt (premium+), rttm (ultra only). Default: json. | Type: string | Allowed: json, srt, vtt, rttm","value":"json"},{"key":"language","type":"text","description":"*(optional)* | Optional ISO language (de, en, …). Omit for auto detection. | Type: string","value":"en"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Min: 1 | Max: 900","value":"","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_example_stt_01\",\n    \"message\": \"STT job completed\",\n    \"pipeline\": \"paperoffice_voice___stt\",\n    \"processing_time\": \"3.21s\",\n    \"client_wait\": true,\n    \"result\": {\n        \"text\": \"Hello, this is a short transcription smoke test.\",\n        \"language\": \"en\",\n        \"output_format\": \"json\",\n        \"quality\": \"basic\"\n    }\n}"}]},{"name":"Clone voice (TTS)","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_voice___tts","host":["{{base_url}}"],"path":["job","add","paperoffice_voice___tts"]},"description":"## Overview\n\nClone a **custom voice** from a short audio sample and speak new text with PaperOffice neural TTS.\n\nUse this endpoint when you need a voice that is **not** in the catalog (`POST /voice/voices`). Upload `voice_sample` instead of setting `voice`.\n\n**Pipeline:** `paperoffice_voice___tts` (same URL as catalog TTS — body differs).\n\n**Tier requirement:** `quality` must be **`premium`** or **`ultra`**. `basic` is rejected for voice cloning.\n\n## Prerequisites\n\n1. Prepare a **clean voice sample**: **minimum 10 seconds**, recommended **15–30 seconds** of continuous single-speaker speech (max 10 MB).\n2. Do **not** set catalog `voice` — clone mode is triggered by `voice_sample`.\n3. Optional: `language` (`en`, `de`, …) or `auto` — omit or use `auto` for detection from the sample.\n\n## Request parameters\n\n| Parameter | Required | Default | Notes |\n|-----------|----------|---------|-------|\n| `text` | yes | — | Up to 50,000 characters. Emotion markers: `[chuckle]`, `[laugh]`, `[sigh]`, `[whisper]`, `[happy]`, `[excited]`. |\n| `voice_sample` | yes | — | Multipart audio (min. **10 s**, recommended 15–30 s). WAV, MP3, OGG, FLAC, M4A, WebM, AAC. |\n| `quality` | no | `premium` | **`premium`** or **`ultra` only**. |\n| `output_format` | no | `mp3` | `mp3`, `wav`, `ogg`. |\n| `output` | no | `inline` | `inline` (audio in HTTP body), `base64`, or `url`. |\n| `language` | no | `auto` | Optional. Omit or `auto` for detection from the sample; or set `en`, `de`, etc. |\n| `priority` | no | plan default | Leave **unchecked** in Postman. |\n\n## Responses\n\n| HTTP | When | Body |\n|------|------|------|\n| **200** | Finished within connection hold | JSON or audio (`inline`). |\n| **202** | Hold exceeded (~295s) | `job_id`, `poll_url`. |\n| **400** | Missing fields / bad audio | `code`, `message`. |\n| **403** | `quality=basic` + clone | `VOICE_CLONE_TIER_REQUIRED`. |\n\n## Connection hold & polling (~5 minute limit)\n\n- Default: wait on this request up to **~295 seconds**, then result or **HTTP 202**.\n- Poll `GET /job/get/{job_id}` after **202** until `completed` or `failed`.\n\n## Queue priority (optional)\n\nHigher priority = faster queue start. Omit for plan default. Does not extend the HTTP hold window.\n\n## Best practices\n\n1. After uploading `voice_sample`, use the prefilled demo text (emotions + ticket **TCK-88421**) and `output=inline` to hear your clone immediately.\n2. Mono, single speaker, minimal background noise.\n3. **At least 10 seconds** of speech; **15–30 seconds** recommended for stable clone quality.\n4. Use `quality=premium` or `ultra` only.\n5. Use `output=inline` in Postman to hear audio in the response; use `url` for download links in integrations.\n6. After **HTTP 202**, poll — do not resubmit unless the job failed.\n\n## Related endpoints\n\n| Use case | Postman item |\n|----------|----------------|\n| Catalog voice | List available TTS voices → Generate speech (single voice) |\n| Multi-speaker | Generate multi-speaker TTS |\n\n---\n*Documentation release: `R20260519.2244`* · status: `frozen`\n\n---\n**Tool-ID:** `po_tts_voice_cloning` • **MCP:** Callable via `mcp.paperoffice.ai` as `po_tts_voice_cloning`\n\n**Pipeline:** `paperoffice_voice___tts` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"text","type":"text","description":"**REQUIRED** | Text to speak (max 50,000 characters). Inline emotion markers: [chuckle] [laugh] [sigh] [breath] [whisper] [happy] [excited]. Default demo after voice_sample upload. | Type: string","value":"[happy] This is your cloned voice on PaperOffice neural TTS. [breath] Support ticket TCK-88421 is now marked resolved. [excited] Record one clean sample, then narrate any new script with emotions like [sigh] or [whisper] — no extra studio session required."},{"key":"voice_sample","type":"file","description":"**REQUIRED** | Voice sample audio file (required). Minimum 10 seconds, recommended 15–30 s, clean single-speaker speech, max 10 MB. WAV, MP3, OGG, FLAC, M4A, WebM, AAC. | Type: string","src":null},{"key":"quality","type":"text","description":"*(optional)* | Quality tier: premium (balanced) or ultra (best). Basic is NOT supported for cloning. | Type: string | Allowed: premium, ultra","value":"premium"},{"key":"output_format","type":"text","description":"*(optional)* | Audio format: mp3, wav, ogg. Default: mp3. | Type: string | Allowed: mp3, wav, ogg","value":"mp3"},{"key":"output","type":"text","description":"*(optional)* | Response: inline (audio stream in HTTP body, default), base64 (JSON), or url (download link in JSON). | Type: string | Allowed: inline, base64, url","value":"inline"},{"key":"language","type":"text","description":"*(optional)* | Language code (optional). Omit or use auto for detection from the voice sample. | Type: string","value":"auto"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_voice___tts","host":["{{base_url}}"],"path":["job","add","paperoffice_voice___tts"]},"description":"## Overview\n\nClone a **custom voice** from a short audio sample and speak new text with PaperOffice neural TTS.\n\nUse this endpoint when you need a voice that is **not** in the catalog (`POST /voice/voices`). Upload `voice_sample` instead of setting `voice`.\n\n**Pipeline:** `paperoffice_voice___tts` (same URL as catalog TTS — body differs).\n\n**Tier requirement:** `quality` must be **`premium`** or **`ultra`**. `basic` is rejected for voice cloning.\n\n## Prerequisites\n\n1. Prepare a **clean voice sample**: **minimum 10 seconds**, recommended **15–30 seconds** of continuous single-speaker speech (max 10 MB).\n2. Do **not** set catalog `voice` — clone mode is triggered by `voice_sample`.\n3. Optional: `language` (`en`, `de`, …) or `auto` — omit or use `auto` for detection from the sample.\n\n## Request parameters\n\n| Parameter | Required | Default | Notes |\n|-----------|----------|---------|-------|\n| `text` | yes | — | Up to 50,000 characters. Emotion markers: `[chuckle]`, `[laugh]`, `[sigh]`, `[whisper]`, `[happy]`, `[excited]`. |\n| `voice_sample` | yes | — | Multipart audio (min. **10 s**, recommended 15–30 s). WAV, MP3, OGG, FLAC, M4A, WebM, AAC. |\n| `quality` | no | `premium` | **`premium`** or **`ultra` only**. |\n| `output_format` | no | `mp3` | `mp3`, `wav`, `ogg`. |\n| `output` | no | `inline` | `inline` (audio in HTTP body), `base64`, or `url`. |\n| `language` | no | `auto` | Optional. Omit or `auto` for detection from the sample; or set `en`, `de`, etc. |\n| `priority` | no | plan default | Leave **unchecked** in Postman. |\n\n## Responses\n\n| HTTP | When | Body |\n|------|------|------|\n| **200** | Finished within connection hold | JSON or audio (`inline`). |\n| **202** | Hold exceeded (~295s) | `job_id`, `poll_url`. |\n| **400** | Missing fields / bad audio | `code`, `message`. |\n| **403** | `quality=basic` + clone | `VOICE_CLONE_TIER_REQUIRED`. |\n\n## Connection hold & polling (~5 minute limit)\n\n- Default: wait on this request up to **~295 seconds**, then result or **HTTP 202**.\n- Poll `GET /job/get/{job_id}` after **202** until `completed` or `failed`.\n\n## Queue priority (optional)\n\nHigher priority = faster queue start. Omit for plan default. Does not extend the HTTP hold window.\n\n## Best practices\n\n1. After uploading `voice_sample`, use the prefilled demo text (emotions + ticket **TCK-88421**) and `output=inline` to hear your clone immediately.\n2. Mono, single speaker, minimal background noise.\n3. **At least 10 seconds** of speech; **15–30 seconds** recommended for stable clone quality.\n4. Use `quality=premium` or `ultra` only.\n5. Use `output=inline` in Postman to hear audio in the response; use `url` for download links in integrations.\n6. After **HTTP 202**, poll — do not resubmit unless the job failed.\n\n## Related endpoints\n\n| Use case | Postman item |\n|----------|----------------|\n| Catalog voice | List available TTS voices → Generate speech (single voice) |\n| Multi-speaker | Generate multi-speaker TTS |\n\n---\n*Documentation release: `R20260519.2244`* · status: `frozen`\n\n---\n**Tool-ID:** `po_tts_voice_cloning` • **MCP:** Callable via `mcp.paperoffice.ai` as `po_tts_voice_cloning`\n\n**Pipeline:** `paperoffice_voice___tts` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"text","type":"text","description":"**REQUIRED** | Text to speak (max 50,000 characters). Inline emotion markers: [chuckle] [laugh] [sigh] [breath] [whisper] [happy] [excited]. Default demo after voice_sample upload. | Type: string","value":"[happy] This is your cloned voice on PaperOffice neural TTS. [breath] Support ticket TCK-88421 is now marked resolved. [excited] Record one clean sample, then narrate any new script with emotions like [sigh] or [whisper] — no extra studio session required."},{"key":"voice_sample","type":"file","description":"**REQUIRED** | Voice sample audio file (required). Minimum 10 seconds, recommended 15–30 s, clean single-speaker speech, max 10 MB. WAV, MP3, OGG, FLAC, M4A, WebM, AAC. | Type: string","src":null},{"key":"quality","type":"text","description":"*(optional)* | Quality tier: premium (balanced) or ultra (best). Basic is NOT supported for cloning. | Type: string | Allowed: premium, ultra","value":"premium"},{"key":"output_format","type":"text","description":"*(optional)* | Audio format: mp3, wav, ogg. Default: mp3. | Type: string | Allowed: mp3, wav, ogg","value":"mp3"},{"key":"output","type":"text","description":"*(optional)* | Response: inline (audio stream in HTTP body, default), base64 (JSON), or url (download link in JSON). | Type: string | Allowed: inline, base64, url","value":"inline"},{"key":"language","type":"text","description":"*(optional)* | Language code (optional). Omit or use auto for detection from the voice sample. | Type: string","value":"auto"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Min: 1 | Max: 900","value":"","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_example_tts_voice_clone\",\n    \"message\": \"TTS voice clone job completed\",\n    \"pipeline\": \"paperoffice_voice___tts\",\n    \"processing_time\": \"14.20s\",\n    \"client_wait\": true,\n    \"result\": {\n        \"output_mode\": \"inline\",\n        \"output_format\": \"mp3\",\n        \"voice\": \"_clone_\",\n        \"language\": \"auto\"\n    },\n    \"warnings\": []\n}"}]},{"name":"Generate multi-speaker TTS (inline tags)","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_voice___tts","host":["{{base_url}}"],"path":["job","add","paperoffice_voice___tts"]},"description":"## Overview\n\nGenerate speech with **multiple catalog speakers** in one job using inline **speaker tags** (PaperOffice neural TTS).\n\nSet `voice=Multi` and mark who speaks which line. Speaker names must exist in `POST /voice/voices` (same language buckets as in the tags).\n\n**Pipeline:** `paperoffice_voice___tts` (same URL as single-voice TTS).\n\n## Prerequisites\n\n1. Call **`POST /voice/voices`** and note exact `name` values (e.g. `Abigail`, `James`).\n2. Tag **every** spoken segment — untagged text fails validation in multi mode.\n3. Set top-level `language` (e.g. `en`) — **required** by the API (validates the job bucket) even when tags include per-line language hints.\n\n## Speaker tag syntax (three forms)\n\n| Style | Example |\n|-------|---------|\n| Legacy XML | `<Abigail>Hello</Abigail><James>Hi there</James>` |\n| Shorthand | `[en|Abigail] Hello [en|James] Hi there` |\n| Key-Value | `[voice:Abigail lang:en] Hello [voice:James lang:en] Hi` |\n\nEmotion markers (`[chuckle]`, `[laugh]`, …) work inside segment text and are passed through to synthesis.\n\n## Request parameters\n\n| Parameter | Required | Default | Notes |\n|-----------|----------|---------|-------|\n| `text` | yes | — | Full script with speaker tags on every segment. Max 50,000 characters (internal ~8k segmentation). |\n| `voice` | yes | `Multi` | Must be `Multi` (case-insensitive). |\n| `language` | yes | `en` | Top-level language code (e.g. `en`, `de`). |\n| `quality` | no | `premium` | `basic`, `premium`, `ultra`. |\n| `output_format` | no | `mp3` | `mp3`, `wav`, `ogg`. |\n| `output` | no | `inline` | `inline` (default), `base64`, `url`. |\n| `priority` | no | plan default | Leave **unchecked** in Postman. |\n\n## Responses\n\nSame as single-voice TTS: **200** (result in hold window), **202** (poll with `job_id`), **4xx** validation errors.\n\n## Connection hold & polling (~5 minute limit)\n\nIdentical to **Generate speech (single voice)**: default connection hold ~295s, then **HTTP 202** + `GET /job/get/{job_id}`.\n\n## Queue priority (optional)\n\nHigher priority = faster queue start. Does not change the hold timeout.\n\n## Best practices\n\n1. **First try in Postman:** Send the prefilled support dialog (`[en|Abigail]` / `[en|James]`, emotions, order **SO-24091**) with `voice=Multi` and `output=inline`.\n2. List voices first; use exact catalog names in tags.\n3. Prefer shorthand `[lang|Name]` when mixing languages per line.\n4. Keep each tagged segment short enough for natural pauses (pipeline adds speaker gaps).\n5. Do not use this endpoint for voice cloning — use **Clone voice (TTS)** with `voice_sample` instead.\n6. For one fixed speaker, use **Generate speech (single voice)** (simpler form).\n\n## Related endpoints\n\n| Use case | Postman item |\n|----------|----------------|\n| One speaker | Generate speech (single voice) |\n| Custom voice from audio | Clone voice (TTS) |\n| Voice catalog | List available TTS voices |\n\n---\n*Documentation release: `R20260519.2256`* · status: `frozen`\n\n---\n**Tool-ID:** `po_tts_multivoice_4_speakers` • **MCP:** Callable via `mcp.paperoffice.ai` as `po_tts_multivoice_4_speakers`\n\n**Pipeline:** `paperoffice_voice___tts` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"text","type":"text","description":"**REQUIRED** | Script with speaker tags on every segment (max 50,000 characters). Examples: [en|Abigail] Hello [en|James] Hi. Default demo: support dialog with emotions. | Type: string","value":"[en|Abigail][happy] Welcome to PaperOffice Voice AI — thanks for calling support today. [en|James][breath] Hi, I am James. Your order SO-24091 shipped this morning. [en|Abigail][excited] We can narrate up to fifty thousand characters in one job — with speaker tags, emotions, and natural handoffs. [en|James][whisper] Try quality ultra when the message must sound executive-ready."},{"key":"voice","type":"text","description":"**REQUIRED** | Must be Multi for multi-speaker mode. | Type: string | Allowed: Multi","value":"Multi"},{"key":"language","type":"text","description":"**REQUIRED** | Top-level language code (required). Use the same codes as POST /voice/voices (e.g. en, de). | Type: string","value":"en"},{"key":"quality","type":"text","description":"*(optional)* | Quality tier: basic, premium (default), ultra. | Type: string | Allowed: basic, premium, ultra","value":"premium"},{"key":"output_format","type":"text","description":"*(optional)* | Audio format: mp3, wav, ogg. Default: mp3. | Type: string | Allowed: mp3, wav, ogg","value":"mp3"},{"key":"output","type":"text","description":"*(optional)* | Response delivery: inline (audio in HTTP body, default), base64, url. | Type: string | Allowed: inline, base64, url","value":"inline"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_voice___tts","host":["{{base_url}}"],"path":["job","add","paperoffice_voice___tts"]},"description":"## Overview\n\nGenerate speech with **multiple catalog speakers** in one job using inline **speaker tags** (PaperOffice neural TTS).\n\nSet `voice=Multi` and mark who speaks which line. Speaker names must exist in `POST /voice/voices` (same language buckets as in the tags).\n\n**Pipeline:** `paperoffice_voice___tts` (same URL as single-voice TTS).\n\n## Prerequisites\n\n1. Call **`POST /voice/voices`** and note exact `name` values (e.g. `Abigail`, `James`).\n2. Tag **every** spoken segment — untagged text fails validation in multi mode.\n3. Set top-level `language` (e.g. `en`) — **required** by the API (validates the job bucket) even when tags include per-line language hints.\n\n## Speaker tag syntax (three forms)\n\n| Style | Example |\n|-------|---------|\n| Legacy XML | `<Abigail>Hello</Abigail><James>Hi there</James>` |\n| Shorthand | `[en|Abigail] Hello [en|James] Hi there` |\n| Key-Value | `[voice:Abigail lang:en] Hello [voice:James lang:en] Hi` |\n\nEmotion markers (`[chuckle]`, `[laugh]`, …) work inside segment text and are passed through to synthesis.\n\n## Request parameters\n\n| Parameter | Required | Default | Notes |\n|-----------|----------|---------|-------|\n| `text` | yes | — | Full script with speaker tags on every segment. Max 50,000 characters (internal ~8k segmentation). |\n| `voice` | yes | `Multi` | Must be `Multi` (case-insensitive). |\n| `language` | yes | `en` | Top-level language code (e.g. `en`, `de`). |\n| `quality` | no | `premium` | `basic`, `premium`, `ultra`. |\n| `output_format` | no | `mp3` | `mp3`, `wav`, `ogg`. |\n| `output` | no | `inline` | `inline` (default), `base64`, `url`. |\n| `priority` | no | plan default | Leave **unchecked** in Postman. |\n\n## Responses\n\nSame as single-voice TTS: **200** (result in hold window), **202** (poll with `job_id`), **4xx** validation errors.\n\n## Connection hold & polling (~5 minute limit)\n\nIdentical to **Generate speech (single voice)**: default connection hold ~295s, then **HTTP 202** + `GET /job/get/{job_id}`.\n\n## Queue priority (optional)\n\nHigher priority = faster queue start. Does not change the hold timeout.\n\n## Best practices\n\n1. **First try in Postman:** Send the prefilled support dialog (`[en|Abigail]` / `[en|James]`, emotions, order **SO-24091**) with `voice=Multi` and `output=inline`.\n2. List voices first; use exact catalog names in tags.\n3. Prefer shorthand `[lang|Name]` when mixing languages per line.\n4. Keep each tagged segment short enough for natural pauses (pipeline adds speaker gaps).\n5. Do not use this endpoint for voice cloning — use **Clone voice (TTS)** with `voice_sample` instead.\n6. For one fixed speaker, use **Generate speech (single voice)** (simpler form).\n\n## Related endpoints\n\n| Use case | Postman item |\n|----------|----------------|\n| One speaker | Generate speech (single voice) |\n| Custom voice from audio | Clone voice (TTS) |\n| Voice catalog | List available TTS voices |\n\n---\n*Documentation release: `R20260519.2256`* · status: `frozen`\n\n---\n**Tool-ID:** `po_tts_multivoice_4_speakers` • **MCP:** Callable via `mcp.paperoffice.ai` as `po_tts_multivoice_4_speakers`\n\n**Pipeline:** `paperoffice_voice___tts` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"text","type":"text","description":"**REQUIRED** | Script with speaker tags on every segment (max 50,000 characters). Examples: [en|Abigail] Hello [en|James] Hi. Default demo: support dialog with emotions. | Type: string","value":"[en|Abigail][happy] Welcome to PaperOffice Voice AI — thanks for calling support today. [en|James][breath] Hi, I am James. Your order SO-24091 shipped this morning. [en|Abigail][excited] We can narrate up to fifty thousand characters in one job — with speaker tags, emotions, and natural handoffs. [en|James][whisper] Try quality ultra when the message must sound executive-ready."},{"key":"voice","type":"text","description":"**REQUIRED** | Must be Multi for multi-speaker mode. | Type: string | Allowed: Multi","value":"Multi"},{"key":"language","type":"text","description":"**REQUIRED** | Top-level language code (required). Use the same codes as POST /voice/voices (e.g. en, de). | Type: string","value":"en"},{"key":"quality","type":"text","description":"*(optional)* | Quality tier: basic, premium (default), ultra. | Type: string | Allowed: basic, premium, ultra","value":"premium"},{"key":"output_format","type":"text","description":"*(optional)* | Audio format: mp3, wav, ogg. Default: mp3. | Type: string | Allowed: mp3, wav, ogg","value":"mp3"},{"key":"output","type":"text","description":"*(optional)* | Response delivery: inline (audio in HTTP body, default), base64, url. | Type: string | Allowed: inline, base64, url","value":"inline"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Min: 1 | Max: 900","value":"","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_example_tts_multivoice\",\n    \"message\": \"TTS multi-speaker job completed\",\n    \"pipeline\": \"paperoffice_voice___tts\",\n    \"processing_time\": \"11.05s\",\n    \"client_wait\": true,\n    \"result\": {\n        \"output_mode\": \"inline\",\n        \"output_format\": \"mp3\",\n        \"voice\": \"Multi\",\n        \"language\": \"en\"\n    },\n    \"warnings\": []\n}"}]},{"name":"Generate speech (single voice)","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_voice___tts","host":["{{base_url}}"],"path":["job","add","paperoffice_voice___tts"]},"description":"## Overview\n\nConvert text to natural speech using a **single catalog voice** (PaperOffice neural TTS).\n\nUse this endpoint when you need one speaker, a fixed voice from the catalog, and audio in the same response (`output=inline`) or as JSON (`base64` / `url`).\n\n**Pipeline:** `paperoffice_voice___tts` (fixed URL path).\n\n## Prerequisites\n\n1. Call **`POST /voice/voices`** and pick a `name` from the language bucket you need.\n2. Default demo pair: **`Abigail`** with **`language=en`** (English, female).\n3. Each voice belongs to one catalog language (e.g. `Anneliese` → `de`). If `language` does not match, the API adjusts to the voice bucket and returns `warnings[]`.\n\n## Request parameters\n\n| Parameter | Required | Default | Notes |\n|-----------|----------|---------|-------|\n| `text` | yes | *(showroom demo)* | Up to 50,000 characters. Default script uses emotion markers and a reference ID (`SO-24091`). |\n| `voice` | yes | `Abigail` | Name from `POST /voice/voices` (same bucket as `language`). |\n| `language` | yes | `en` | Catalog bucket code (e.g. `en`, `de`). |\n| `quality` | no | `premium` | `basic` (fast), `premium` (balanced), `ultra` (best). |\n| `output_format` | no | `mp3` | `mp3`, `wav`, `ogg`. |\n| `output` | no | `inline` | `inline` = audio stream in HTTP body; `base64` / `url` = JSON. |\n| `priority` | no | plan default | Higher = faster queue start. Leave **unchecked** in Postman for your tier default. |\n\n**Text preparation (TTS):** When `language=de`, dates and common German business identifiers (order IDs, invoice refs) in `text` are normalized for natural speech. Other languages use standard number/date handling for the selected `language`.\n\n## Responses\n\n| HTTP | When | Body |\n|------|------|------|\n| **200** | Job finished within the connection hold window | Result JSON; with `output=inline` the response body is **audio** (not JSON). |\n| **202** | Connection hold exceeded (~**5 minutes**, ~295s infrastructure limit) | `job_id`, `poll_url`, `client_wait: false` — job **keeps running**. Poll `GET /job/get/{job_id}`. |\n| **4xx** | Validation / auth / quota | `status`, `code`, `message` (and `warnings[]` on voice/language mismatch). |\n\n**Useful fields:** `warnings[]` (e.g. language adjusted to match voice), `client_wait` (whether this response used connection hold).\n\n## Connection hold & polling (~5 minute limit)\n\nThis is separate from **queue priority** (billing/speed only).\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** — HAProxy/infrastructure limit — and returns the finished result when ready.\n- **Hard timeout:** If the job is not done within that window → **HTTP 202** with `job_id` and `poll_url`. **Continue polling** `GET /job/get/{job_id}` every 5–10 seconds until `status` is `completed` or `failed`.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` in ~100ms, then poll as above.\n\nJob processing time can exceed 5 minutes; only the **HTTP wait** is capped.\n\n## Queue priority (optional)\n\n- **Omitted / unchecked in Postman** → your Subscription **plan default** (from bearer token tier).\n- **Higher value (1–899)** → typically **faster queue start** on busy workers.\n- **`900`** → **synchronous / stream** processing (waits on this HTTP connection; not a queue tier above 899).\n- Does **not** change the ~5 minute connection hold or when HTTP 202 is returned.\n\nSee collection guide **Queue priority (billing & speed)** for tier tables (pricing is not duplicated in this request doc).\n\n## Best practices\n\n1. **First try in Postman:** Send the prefilled showroom script (`[happy]`, reference **SO-24091**, `voice=Abigail`, `language=en`, `output=inline`) and press **Send** to hear emotions and ID normalization.\n2. List voices with `POST /voice/voices` before your first TTS job.\n3. Keep `voice` and `language` in the **same bucket** to avoid `warnings[]`.\n4. Leave `priority` **unchecked** in Postman unless you intentionally want a higher queue tier.\n5. Use `output=inline` for quick tests in Postman (audio in the HTTP body); use `url` or `base64` when you need a link or JSON payload.\n6. For German business IDs and dates, switch to `language=de` and a German catalog voice (e.g. `Anneliese`) with text like `RG-88421` and `15.03.2026`.\n7. After **HTTP 202**, poll `GET /job/get/{job_id}` — do not resubmit the same job unless it failed.\n8. For voice cloning or multiple speakers, use the related endpoints below (same pipeline URL).\n\n## Long text (automatic segmentation)\n\nYou may send up to **50,000 characters** in one job. The API accepts the full text; the voice pipeline splits it internally into segments (about **8,000 characters** per synthesis chunk). **Do not** split the text yourself unless you want separate jobs.\n\n## Related endpoints (same pipeline URL, different body)\n\n| Use case | Postman item |\n|----------|----------------|\n| Clone voice from audio sample | Clone voice (TTS) — `voice_sample`, no catalog `voice` |\n| Multiple speakers in one text | Generate multi-speaker TTS — `voice=Multi` + inline tags |\n\n---\n*Documentation release: `R20260519.1902`* · status: `frozen`\n\n---\n**Tool-ID:** `po_tts_generate_speech` • **MCP:** Callable via `mcp.paperoffice.ai` as `po_tts_generate_speech`\n\n**Pipeline:** `paperoffice_voice___tts` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"text","type":"text","description":"**REQUIRED** | Text to convert to speech (max 50,000 characters). Inline emotion markers: [chuckle] [laugh] [sigh] [breath] [whisper] [happy] [excited]. Default demo showcases emotions and reference IDs (e.g. SO-24091). | Type: string","value":"[happy] Welcome to PaperOffice Voice AI — this is Abigail speaking. [breath] Your shipment reference SO-24091 is confirmed for delivery today. [excited] One request can synthesize up to fifty thousand characters with natural pacing, laughter, sighs, and whispers built in. [whisper] Set quality to ultra when every word must sound boardroom-ready — then press Send and listen."},{"key":"voice","type":"text","description":"**REQUIRED** | Voice name from POST /voice/voices — same language bucket as `language` (required). Default demo: Abigail (en, female). | Type: string","value":"Abigail"},{"key":"language","type":"text","description":"**REQUIRED** | Language code from the voice catalog bucket (required). Default: en for Abigail. List pairs via POST /voice/voices. | Type: string","value":"en"},{"key":"quality","type":"text","description":"*(optional)* | Quality tier: basic (fast), premium (balanced), ultra (best). Default: premium. | Type: string | Allowed: basic, premium, ultra","value":"premium"},{"key":"output_format","type":"text","description":"*(optional)* | Audio format: mp3 (compressed), wav (lossless), ogg. Default: mp3. | Type: string | Allowed: mp3, wav, ogg","value":"mp3"},{"key":"output","type":"text","description":"*(optional)* | Response delivery: inline (audio stream, default), base64 (JSON), url (download link in JSON). | Type: string | Allowed: inline, base64, url","value":"inline"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer","value":"","disabled":true}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/job/add/paperoffice_voice___tts","host":["{{base_url}}"],"path":["job","add","paperoffice_voice___tts"]},"description":"## Overview\n\nConvert text to natural speech using a **single catalog voice** (PaperOffice neural TTS).\n\nUse this endpoint when you need one speaker, a fixed voice from the catalog, and audio in the same response (`output=inline`) or as JSON (`base64` / `url`).\n\n**Pipeline:** `paperoffice_voice___tts` (fixed URL path).\n\n## Prerequisites\n\n1. Call **`POST /voice/voices`** and pick a `name` from the language bucket you need.\n2. Default demo pair: **`Abigail`** with **`language=en`** (English, female).\n3. Each voice belongs to one catalog language (e.g. `Anneliese` → `de`). If `language` does not match, the API adjusts to the voice bucket and returns `warnings[]`.\n\n## Request parameters\n\n| Parameter | Required | Default | Notes |\n|-----------|----------|---------|-------|\n| `text` | yes | *(showroom demo)* | Up to 50,000 characters. Default script uses emotion markers and a reference ID (`SO-24091`). |\n| `voice` | yes | `Abigail` | Name from `POST /voice/voices` (same bucket as `language`). |\n| `language` | yes | `en` | Catalog bucket code (e.g. `en`, `de`). |\n| `quality` | no | `premium` | `basic` (fast), `premium` (balanced), `ultra` (best). |\n| `output_format` | no | `mp3` | `mp3`, `wav`, `ogg`. |\n| `output` | no | `inline` | `inline` = audio stream in HTTP body; `base64` / `url` = JSON. |\n| `priority` | no | plan default | Higher = faster queue start. Leave **unchecked** in Postman for your tier default. |\n\n**Text preparation (TTS):** When `language=de`, dates and common German business identifiers (order IDs, invoice refs) in `text` are normalized for natural speech. Other languages use standard number/date handling for the selected `language`.\n\n## Responses\n\n| HTTP | When | Body |\n|------|------|------|\n| **200** | Job finished within the connection hold window | Result JSON; with `output=inline` the response body is **audio** (not JSON). |\n| **202** | Connection hold exceeded (~**5 minutes**, ~295s infrastructure limit) | `job_id`, `poll_url`, `client_wait: false` — job **keeps running**. Poll `GET /job/get/{job_id}`. |\n| **4xx** | Validation / auth / quota | `status`, `code`, `message` (and `warnings[]` on voice/language mismatch). |\n\n**Useful fields:** `warnings[]` (e.g. language adjusted to match voice), `client_wait` (whether this response used connection hold).\n\n## Connection hold & polling (~5 minute limit)\n\nThis is separate from **queue priority** (billing/speed only).\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** — HAProxy/infrastructure limit — and returns the finished result when ready.\n- **Hard timeout:** If the job is not done within that window → **HTTP 202** with `job_id` and `poll_url`. **Continue polling** `GET /job/get/{job_id}` every 5–10 seconds until `status` is `completed` or `failed`.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` in ~100ms, then poll as above.\n\nJob processing time can exceed 5 minutes; only the **HTTP wait** is capped.\n\n## Queue priority (optional)\n\n- **Omitted / unchecked in Postman** → your Subscription **plan default** (from bearer token tier).\n- **Higher value (1–899)** → typically **faster queue start** on busy workers.\n- **`900`** → **synchronous / stream** processing (waits on this HTTP connection; not a queue tier above 899).\n- Does **not** change the ~5 minute connection hold or when HTTP 202 is returned.\n\nSee collection guide **Queue priority (billing & speed)** for tier tables (pricing is not duplicated in this request doc).\n\n## Best practices\n\n1. **First try in Postman:** Send the prefilled showroom script (`[happy]`, reference **SO-24091**, `voice=Abigail`, `language=en`, `output=inline`) and press **Send** to hear emotions and ID normalization.\n2. List voices with `POST /voice/voices` before your first TTS job.\n3. Keep `voice` and `language` in the **same bucket** to avoid `warnings[]`.\n4. Leave `priority` **unchecked** in Postman unless you intentionally want a higher queue tier.\n5. Use `output=inline` for quick tests in Postman (audio in the HTTP body); use `url` or `base64` when you need a link or JSON payload.\n6. For German business IDs and dates, switch to `language=de` and a German catalog voice (e.g. `Anneliese`) with text like `RG-88421` and `15.03.2026`.\n7. After **HTTP 202**, poll `GET /job/get/{job_id}` — do not resubmit the same job unless it failed.\n8. For voice cloning or multiple speakers, use the related endpoints below (same pipeline URL).\n\n## Long text (automatic segmentation)\n\nYou may send up to **50,000 characters** in one job. The API accepts the full text; the voice pipeline splits it internally into segments (about **8,000 characters** per synthesis chunk). **Do not** split the text yourself unless you want separate jobs.\n\n## Related endpoints (same pipeline URL, different body)\n\n| Use case | Postman item |\n|----------|----------------|\n| Clone voice from audio sample | Clone voice (TTS) — `voice_sample`, no catalog `voice` |\n| Multiple speakers in one text | Generate multi-speaker TTS — `voice=Multi` + inline tags |\n\n---\n*Documentation release: `R20260519.1902`* · status: `frozen`\n\n---\n**Tool-ID:** `po_tts_generate_speech` • **MCP:** Callable via `mcp.paperoffice.ai` as `po_tts_generate_speech`\n\n**Pipeline:** `paperoffice_voice___tts` (fixed, do not change the URL path)","body":{"mode":"formdata","formdata":[{"key":"text","type":"text","description":"**REQUIRED** | Text to convert to speech (max 50,000 characters). Inline emotion markers: [chuckle] [laugh] [sigh] [breath] [whisper] [happy] [excited]. Default demo showcases emotions and reference IDs (e.g. SO-24091). | Type: string","value":"[happy] Welcome to PaperOffice Voice AI — this is Abigail speaking. [breath] Your shipment reference SO-24091 is confirmed for delivery today. [excited] One request can synthesize up to fifty thousand characters with natural pacing, laughter, sighs, and whispers built in. [whisper] Set quality to ultra when every word must sound boardroom-ready — then press Send and listen."},{"key":"voice","type":"text","description":"**REQUIRED** | Voice name from POST /voice/voices — same language bucket as `language` (required). Default demo: Abigail (en, female). | Type: string","value":"Abigail"},{"key":"language","type":"text","description":"**REQUIRED** | Language code from the voice catalog bucket (required). Default: en for Abigail. List pairs via POST /voice/voices. | Type: string","value":"en"},{"key":"quality","type":"text","description":"*(optional)* | Quality tier: basic (fast), premium (balanced), ultra (best). Default: premium. | Type: string | Allowed: basic, premium, ultra","value":"premium"},{"key":"output_format","type":"text","description":"*(optional)* | Audio format: mp3 (compressed), wav (lossless), ogg. Default: mp3. | Type: string | Allowed: mp3, wav, ogg","value":"mp3"},{"key":"output","type":"text","description":"*(optional)* | Response delivery: inline (audio stream, default), base64 (JSON), url (download link in JSON). | Type: string | Allowed: inline, base64, url","value":"inline"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Min: 1 | Max: 900","value":"","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_example_tts_single_voice\",\n    \"message\": \"TTS job completed\",\n    \"pipeline\": \"paperoffice_voice___tts\",\n    \"processing_time\": \"8.42s\",\n    \"client_wait\": true,\n    \"result\": {\n        \"output_mode\": \"url\",\n        \"output_format\": \"mp3\",\n        \"voice\": \"Abigail\",\n        \"language\": \"en\",\n        \"download_url\": \"https://api.paperoffice.ai/dev/job/download/job_example_tts_single_voice/output.mp3\"\n    },\n    \"warnings\": []\n}"}]},{"name":"List available TTS voices","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/voice/voices","host":["{{base_url}}"],"path":["voice","voices"]},"description":"## Overview\n\nReturn the **PaperOffice TTS voice catalog**: all neural voices grouped by **language bucket**.\n\nUse this endpoint **before** any `POST /job/add/paperoffice_voice___tts` job to resolve valid `voice` + `language` pairs. This is a **direct REST call** (not a job) — the response is JSON immediately.\n\n**Endpoint:** `POST /voice/voices` (also supports `GET` with the same parameters).\n\n## Request parameters\n\n| Parameter | Required | Default | Notes |\n|-----------|----------|---------|-------|\n| `language` | no | *(all languages)* | Optional filter, e.g. `en`, `de`. Returns only that bucket when set. |\n\nSend as query string, form field, or JSON body — the API reads `language` from the request.\n\n## Responses\n\n| HTTP | When | Body |\n|------|------|------|\n| **200** | Catalog loaded | JSON: `status`, `message`, `voices` (object keyed by language), `total_languages`, `total_voices` |\n| **500** | Catalog file unavailable | `status: error`, `code: VOICE_CATALOG_ERROR` |\n\n### Voice object fields (per entry)\n\n| Field | Description |\n|-------|-------------|\n| `name` | Use as `voice` in TTS jobs (e.g. `Abigail`) |\n| `gender` | `male` / `female` when available |\n| `tier` | Access tier hint (`basic`, `all`, …) |\n| `is_premium` | Present when the voice requires premium tier |\n| `sample_url` | Preview audio URL (Bearer required for playback) |\n\n**Default demo pair for English TTS:** `name=Abigail`, language bucket `en`.\n\n## Using the catalog for TTS jobs\n\n1. Call **`POST /voice/voices`** (optionally filter `language=en`).\n2. Pick `name` from the returned bucket — it must match the `language` you pass to **`POST /job/add/paperoffice_voice___tts`**.\n3. Run **Generate speech (single voice)** with `voice` + `language` from the same bucket.\n\nIf `language` in the TTS job does not match the voice bucket, the API may adjust the bucket and return `warnings[]`.\n\n## Best practices\n\n1. Cache the catalog client-side (voices change infrequently) — respect your plan rate limits.\n2. Use `language` filter when building language-specific UIs (smaller payload).\n3. Play `sample_url` to preview a voice before the first TTS job.\n4. Within each language bucket, voices are sorted by **`name`** (natural order, e.g. `Adolf` before `Yvonne`).\n5. Do not hardcode voice lists — always sync from this endpoint.\n6. For cloning or multi-speaker audio, use the related Voice folder endpoints after catalog lookup.\n\n---\n*Documentation release: `R20260519.2009`* · status: `frozen`\n\n---\n**Tool-ID:** `po_tts_get_available_voices` • **MCP:** Callable via `mcp.paperoffice.ai` as `po_tts_get_available_voices`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"language","type":"text","description":"*(optional)* | Optional filter: return only this language bucket (e.g. en, de). Omit for the full catalog. | Type: string","value":"en"}]}},"_x_postman":{"archetype":"catalog_voice_list","doc_release_id":"R20260519.2009","doc_frozen":true,"doc_status":"frozen","form_visible":["language"],"form_hidden":[],"form_disabled":[]},"response":[]}]},{"name":"🌐 Translation","description":"# Translation\n\nPaperOffice **Translation** provides a **unified text API** for strings, string arrays, and JSON objects across **35** supported languages.\n\n---\n\n## What you can do\n\n| Capability | Postman request | Endpoint |\n|------------|-----------------|----------|\n| **Language catalog** | `GET` Get supported languages | `/translate/languages` (API: 1 credit; app UI: free) |\n| **Translate content** | `POST` Translate text | `/translate/text` (JSON body, per-character tier billing) |\n\nThere are **only two public REST endpoints** — legacy names `batch` / `single` route to the same `text` command server-side.\n\n---\n\n## Translate text (unified)\n\n- **`text`:** string, string[], or JSON object (native JSON shapes, not escaped blobs).\n- **`target_language`:** required; codes from the catalog.\n- **`target_locale`:** optional regional variant (`de-DE`, `de-AT`, `de-CH`, `en-US`, …) from `GET /translate/languages` → `data.target_locale.variants` (prompt hint only; billing uses the 2-letter base).\n- **`source_language`:** optional (`auto` default).\n- **`tier`:** `basic`, `premium`, `ultra` (quality/speed).\n- **`tone` / `style`:** optional register and domain hints.\n- **`preserve_terms` / `preserve_terms_preset`:** keep brand or plan names verbatim.\n- **Max 15 000 characters** per request — split larger payloads client-side.\n\n**Delivery:** Hybrid **connection hold** (~295 s) → inline translation or **HTTP 202** + `GET /job/get/{job_id}`. Optional **`priority` ≥ 900** for synchronous completion when capacity allows.\n\n---\n\n## Typical workflow\n\n1. **`GET /translate/languages`** — validate codes and cache `data.total` (= 35).\n2. **`POST /translate/text`** — send JSON with `text` + `target_language`.\n3. On **HTTP 202**, poll **`GET /job/get/{job_id}`** until `completed` or `failed`.\n\n---\n\n## Connection hold vs queue priority\n\n| Concept | Role |\n|---------|------|\n| **Connection hold** | Waits on this HTTP call up to **~295 s**, then result or **202** + poll |\n| **Queue priority** | Optional **1–900**; **≥ 900** = synchronous translation attempt in the hold window |\n\n---\n\n## Best practices\n\n1. Use **Get supported languages** before building language pickers — do not hardcode lists.\n2. Use **Translate text** for all payload shapes — change `text` type in JSON, do not duplicate Postman requests.\n3. Send **`Content-Type: application/json`** — do not use form-data for `/translate/text`.\n4. Use `preserve_terms` for protected names (**PaperOffice**, plan tiers, integrations).\n5. Leave hidden fields (`client_wait`, `priority`) to API defaults or integration variables.\n\n---\n\n## Related modules\n\nOpen the parent folder **Media AI** for the **full section map** (all nine requests, JSON vs form-data, shared job model). Under **Media AI**: **Image Studio**, **Voice**. MCP may still expose legacy tool IDs (`po_translate_batch`, `po_translate_single`); the Postman collection exposes the **two masters** above.","item":[{"name":"Get supported languages","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/translate/languages","host":["{{base_url}}"],"path":["translate","languages"]},"description":"## Overview\n\nReturn the **PaperOffice Translation language catalog**: all **35** supported language codes with display names, flags, and tier metadata.\n\nUse this endpoint **before** `POST /translate/text` to validate `source_language` and `target_language`. This is a **direct REST call** (not a job) — the response is JSON immediately.\n\n**Endpoint:** `GET /translate/languages`\n\n**Billing:** **1 credit per API request** (external Bearer). **Free in the PaperOffice app** (browser session / `credits_ui` subsidy — same pattern as the TTS voice catalog).\n\n## Request parameters\n\nNo parameters required. Optional filters may be added in future API versions — today the full catalog is always returned.\n\n## Responses\n\n| HTTP | When | Body |\n|------|------|------|\n| **200** | Catalog loaded | JSON: `status`, `data.languages` (map keyed by code), `data.total` (= **35**), `data.target_locale` (`bases` + `variants` per language), `data.tiers`, `data.max_input_chars` (= **15000**), `data.version` |\n| **401** | Missing/invalid bearer | `AUTH_REQUIRED` |\n| **500** | Internal error | `status: error` |\n\n### Language entry fields (per code)\n\n| Field | Description |\n|-------|-------------|\n| `name` | English display name |\n| `native` | Native label |\n| `flag` | Emoji flag when available |\n\n**Default demo pair:** `source_language=de`, `target_language=en` on **Translate text**.\n\n## Regional variants (`data.target_locale`)\n\nOptional **locale variants** refine output (spelling, vocabulary, register) via LLM prompt hints only — **billing stays on the 2-letter `target_language`**.\n\n| Field | Description |\n|-------|-------------|\n| `data.target_locale.bases` | Language codes that offer variants (e.g. `de`, `en`, `es`, `fr`, `pt`, `nl`, `it`, `zh`, `ar`) |\n| `data.target_locale.variants` | Map: base code → list of `{ code, label, instruction }` — first entry is **Standard** (`code` = `\"\"`) |\n\n**Examples:** `de-DE`, `de-AT`, `de-CH` (German); `en-US`, `en-GB`, `en-AU`, `en-CA`; `es-ES`, `es-419`, `es-MX`; `fr-FR`, `fr-CA`, `fr-BE`, `fr-CH`; `pt-BR`, `pt-PT`; `nl-NL`, `nl-BE`; `it-IT`, `it-CH`; `zh-Hans`, `zh-Hant`; `ar-SA`, `ar-EG`, `ar-AE`, `ar-MA`.\n\nPass the chosen variant code as **`target_locale`** on **`POST /translate/text`** (must match `target_language` base).\n\n## Using the catalog for translation\n\n1. Call **`GET /translate/languages`** once per session or cache client-side.\n2. Pick valid ISO-style codes from `data.languages` for **`POST /translate/text`**.\n3. When needed, pick a regional variant from `data.target_locale.variants[target_language]` and send it as **`target_locale`**.\n4. Choose `tier` (`basic`, `premium`, `ultra`) — quality/speed trade-off; omit only when the plan default is intended.\n\n## Best practices\n\n1. Cache the catalog (35 codes change rarely) — respect account rate limits.\n2. Never hardcode language lists in client apps — sync from this endpoint.\n3. Enforce `max_input_chars` (15 000) client-side before POST — oversized payloads return **400** `INPUT_TOO_LARGE`.\n4. Use **Translate text** for string, string-array, and JSON-object payloads (one endpoint).\n5. For protected brand or product names, pass `preserve_terms` on **Translate text** (see that request).\n\n---\n*Documentation release: `R20260520.2018`* · status: `frozen`\n\n---\n**Tool-ID:** `po_translate_get_languages` • **MCP:** Callable via `mcp.paperoffice.ai` as `po_translate_get_languages`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"_x_postman":{"archetype":"catalog_translate_languages","doc_release_id":"R20260520.2018","doc_frozen":true,"doc_status":"frozen","form_visible":[],"form_hidden":[],"form_disabled":[]},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/translate/languages","host":["{{base_url}}"],"path":["translate","languages"]},"description":"## Overview\n\nReturn the **PaperOffice Translation language catalog**: all **35** supported language codes with display names, flags, and tier metadata.\n\nUse this endpoint **before** `POST /translate/text` to validate `source_language` and `target_language`. This is a **direct REST call** (not a job) — the response is JSON immediately.\n\n**Endpoint:** `GET /translate/languages`\n\n**Billing:** **1 credit per API request** (external Bearer). **Free in the PaperOffice app** (browser session / `credits_ui` subsidy — same pattern as the TTS voice catalog).\n\n## Request parameters\n\nNo parameters required. Optional filters may be added in future API versions — today the full catalog is always returned.\n\n## Responses\n\n| HTTP | When | Body |\n|------|------|------|\n| **200** | Catalog loaded | JSON: `status`, `data.languages` (map keyed by code), `data.total` (= **35**), `data.target_locale` (`bases` + `variants` per language), `data.tiers`, `data.max_input_chars` (= **15000**), `data.version` |\n| **401** | Missing/invalid bearer | `AUTH_REQUIRED` |\n| **500** | Internal error | `status: error` |\n\n### Language entry fields (per code)\n\n| Field | Description |\n|-------|-------------|\n| `name` | English display name |\n| `native` | Native label |\n| `flag` | Emoji flag when available |\n\n**Default demo pair:** `source_language=de`, `target_language=en` on **Translate text**.\n\n## Regional variants (`data.target_locale`)\n\nOptional **locale variants** refine output (spelling, vocabulary, register) via LLM prompt hints only — **billing stays on the 2-letter `target_language`**.\n\n| Field | Description |\n|-------|-------------|\n| `data.target_locale.bases` | Language codes that offer variants (e.g. `de`, `en`, `es`, `fr`, `pt`, `nl`, `it`, `zh`, `ar`) |\n| `data.target_locale.variants` | Map: base code → list of `{ code, label, instruction }` — first entry is **Standard** (`code` = `\"\"`) |\n\n**Examples:** `de-DE`, `de-AT`, `de-CH` (German); `en-US`, `en-GB`, `en-AU`, `en-CA`; `es-ES`, `es-419`, `es-MX`; `fr-FR`, `fr-CA`, `fr-BE`, `fr-CH`; `pt-BR`, `pt-PT`; `nl-NL`, `nl-BE`; `it-IT`, `it-CH`; `zh-Hans`, `zh-Hant`; `ar-SA`, `ar-EG`, `ar-AE`, `ar-MA`.\n\nPass the chosen variant code as **`target_locale`** on **`POST /translate/text`** (must match `target_language` base).\n\n## Using the catalog for translation\n\n1. Call **`GET /translate/languages`** once per session or cache client-side.\n2. Pick valid ISO-style codes from `data.languages` for **`POST /translate/text`**.\n3. When needed, pick a regional variant from `data.target_locale.variants[target_language]` and send it as **`target_locale`**.\n4. Choose `tier` (`basic`, `premium`, `ultra`) — quality/speed trade-off; omit only when the plan default is intended.\n\n## Best practices\n\n1. Cache the catalog (35 codes change rarely) — respect account rate limits.\n2. Never hardcode language lists in client apps — sync from this endpoint.\n3. Enforce `max_input_chars` (15 000) client-side before POST — oversized payloads return **400** `INPUT_TOO_LARGE`.\n4. Use **Translate text** for string, string-array, and JSON-object payloads (one endpoint).\n5. For protected brand or product names, pass `preserve_terms` on **Translate text** (see that request).\n\n---\n*Documentation release: `R20260520.2018`* · status: `frozen`\n\n---\n**Tool-ID:** `po_translate_get_languages` • **MCP:** Callable via `mcp.paperoffice.ai` as `po_translate_get_languages`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"data\": {\n        \"languages\": {\n            \"de\": {\n                \"name\": \"German\",\n                \"flag\": \"🇩🇪\",\n                \"native\": \"Deutsch\"\n            },\n            \"en\": {\n                \"name\": \"English\",\n                \"flag\": \"🇬🇧\",\n                \"native\": \"English\"\n            },\n            \"es\": {\n                \"name\": \"Spanish\",\n                \"flag\": \"🇪🇸\",\n                \"native\": \"Español\"\n            },\n            \"fr\": {\n                \"name\": \"French\",\n                \"flag\": \"🇫🇷\",\n                \"native\": \"Français\"\n            },\n            \"it\": {\n                \"name\": \"Italian\",\n                \"flag\": \"🇮🇹\",\n                \"native\": \"Italiano\"\n            },\n            \"pt\": {\n                \"name\": \"Portuguese\",\n                \"flag\": \"🇵🇹\",\n                \"native\": \"Português\"\n            },\n            \"nl\": {\n                \"name\": \"Dutch\",\n                \"flag\": \"🇳🇱\",\n                \"native\": \"Nederlands\"\n            },\n            \"pl\": {\n                \"name\": \"Polish\",\n                \"flag\": \"🇵🇱\",\n                \"native\": \"Polski\"\n            },\n            \"cs\": {\n                \"name\": \"Czech\",\n                \"flag\": \"🇨🇿\",\n                \"native\": \"Čeština\"\n            },\n            \"ru\": {\n                \"name\": \"Russian\",\n                \"flag\": \"🇷🇺\",\n                \"native\": \"Русский\"\n            },\n            \"zh\": {\n                \"name\": \"Chinese\",\n                \"flag\": \"🇨🇳\",\n                \"native\": \"中文\"\n            },\n            \"ja\": {\n                \"name\": \"Japanese\",\n                \"flag\": \"🇯🇵\",\n                \"native\": \"日本語\"\n            },\n            \"ko\": {\n                \"name\": \"Korean\",\n                \"flag\": \"🇰🇷\",\n                \"native\": \"한국어\"\n            },\n            \"ar\": {\n                \"name\": \"Arabic\",\n                \"flag\": \"🇸🇦\",\n                \"native\": \"العربية\"\n            },\n            \"tr\": {\n                \"name\": \"Turkish\",\n                \"flag\": \"🇹🇷\",\n                \"native\": \"Türkçe\"\n            },\n            \"sv\": {\n                \"name\": \"Swedish\",\n                \"flag\": \"🇸🇪\",\n                \"native\": \"Svenska\"\n            },\n            \"da\": {\n                \"name\": \"Danish\",\n                \"flag\": \"🇩🇰\",\n                \"native\": \"Dansk\"\n            },\n            \"no\": {\n                \"name\": \"Norwegian\",\n                \"flag\": \"🇳🇴\",\n                \"native\": \"Norsk\"\n            },\n            \"fi\": {\n                \"name\": \"Finnish\",\n                \"flag\": \"🇫🇮\",\n                \"native\": \"Suomi\"\n            },\n            \"hu\": {\n                \"name\": \"Hungarian\",\n                \"flag\": \"🇭🇺\",\n                \"native\": \"Magyar\"\n            },\n            \"ro\": {\n                \"name\": \"Romanian\",\n                \"flag\": \"🇷🇴\",\n                \"native\": \"Română\"\n            },\n            \"uk\": {\n                \"name\": \"Ukrainian\",\n                \"flag\": \"🇺🇦\",\n                \"native\": \"Українська\"\n            },\n            \"th\": {\n                \"name\": \"Thai\",\n                \"flag\": \"🇹🇭\",\n                \"native\": \"ไทย\"\n            },\n            \"vi\": {\n                \"name\": \"Vietnamese\",\n                \"flag\": \"🇻🇳\",\n                \"native\": \"Tiếng Việt\"\n            },\n            \"id\": {\n                \"name\": \"Indonesian\",\n                \"flag\": \"🇮🇩\",\n                \"native\": \"Bahasa Indonesia\"\n            },\n            \"hi\": {\n                \"name\": \"Hindi\",\n                \"flag\": \"🇮🇳\",\n                \"native\": \"हिन्दी\"\n            },\n            \"he\": {\n                \"name\": \"Hebrew\",\n                \"flag\": \"🇮🇱\",\n                \"native\": \"עברית\"\n            },\n            \"sk\": {\n                \"name\": \"Slovak\",\n                \"flag\": \"🇸🇰\",\n                \"native\": \"Slovenčina\"\n            },\n            \"sl\": {\n                \"name\": \"Slovenian\",\n                \"flag\": \"🇸🇮\",\n                \"native\": \"Slovenščina\"\n            },\n            \"bg\": {\n                \"name\": \"Bulgarian\",\n                \"flag\": \"🇧🇬\",\n                \"native\": \"Български\"\n            },\n            \"hr\": {\n                \"name\": \"Croatian\",\n                \"flag\": \"🇭🇷\",\n                \"native\": \"Hrvatski\"\n            },\n            \"sr\": {\n                \"name\": \"Serbian\",\n                \"flag\": \"🇷🇸\",\n                \"native\": \"Српски\"\n            },\n            \"et\": {\n                \"name\": \"Estonian\",\n                \"flag\": \"🇪🇪\",\n                \"native\": \"Eesti\"\n            },\n            \"lv\": {\n                \"name\": \"Latvian\",\n                \"flag\": \"🇱🇻\",\n                \"native\": \"Latviešu\"\n            },\n            \"lt\": {\n                \"name\": \"Lithuanian\",\n                \"flag\": \"🇱🇹\",\n                \"native\": \"Lietuvių\"\n            }\n        },\n        \"default_base\": \"de\",\n        \"total\": 35,\n        \"tiers\": [\n            \"basic\",\n            \"premium\",\n            \"ultra\"\n        ],\n        \"default_tier\": \"premium\",\n        \"max_input_chars\": 15000,\n        \"priority\": {\n            \"source\": \"bearer_token_plan_tier\",\n            \"lookup\": \"api_pricing_tiers.default_priority\",\n            \"default\": \"tier-based (e.g. APP-T1=0, APP-T3=100, APP-T5=150, APP-T6=200)\",\n            \"sync_min\": 900,\n            \"override\": \"Send \\\"priority\\\" (1-900) in body to override tier-default. Higher values are capped to protect shared capacity.\",\n            \"sync_hint\": \"priority >= 900 = SYNC (handler waits for translation). Lower = ASYNC (handler returns job_id immediately, poll via /job/get/{job_id}).\"\n        },\n        \"preserve_terms\": {\n            \"type\": \"string[] (optional)\",\n            \"max_items\": 150,\n            \"max_chars\": 100,\n            \"description\": \"Terms (brand names, product names, plan names, proper nouns) that must NEVER be translated. Exact-match items in array-input bypass the LLM entirely; in strings/objects the LLM receives an override-rule in the system prompt.\",\n            \"example\": [\n                \"PaperOffice\",\n                \"Starter\",\n                \"Business\",\n                \"Corporate\",\n                \"Ultra\"\n            ]\n        },\n        \"preserve_terms_preset\": {\n            \"type\": \"string (optional)\",\n            \"description\": \"Opt-in server-managed list of protected terms. Merged as UNION with client-side preserve_terms (dedup, capped at 150). Use this to pull in a maintained brand/product/feature vocabulary without hard-coding it in every client.\",\n            \"available_presets\": [\n                \"paperoffice_brand\"\n            ],\n            \"example\": \"paperoffice_brand\",\n            \"notes\": \"Presets are optional and opt-in — external API users are NOT affected unless they set this parameter. Add new presets by dropping <name>.json into api-dev.paperoffice.ai/_data/preserve_presets/\"\n        },\n        \"target_locale\": {\n            \"type\": \"string (optional)\",\n            \"description\": \"Regional/script variant for target_language (prompt hint only). Billing and language code stay on the 2-letter base.\",\n            \"bases\": [\n                \"ar\",\n                \"de\",\n                \"en\",\n                \"es\",\n                \"fr\",\n                \"it\",\n                \"nl\",\n                \"pt\",\n                \"zh\"\n            ],\n            \"variants\": {\n                \"ar\": [\n                    {\n                        \"code\": \"\",\n                        \"label\": \"Standard\",\n                        \"instruction\": \"\"\n                    },\n                    {\n                        \"code\": \"ar-SA\",\n                        \"label\": \"العربية (السعودية)\",\n                        \"instruction\": \" Use Modern Standard Arabic with Gulf/Saudi vocabulary preferences where applicable.\"\n                    },\n                    {\n                        \"code\": \"ar-EG\",\n                        \"label\": \"العربية (مصر)\",\n                        \"instruction\": \" Use Modern Standard Arabic with Egyptian Arabic vocabulary influences where appropriate for the register.\"\n                    },\n                    {\n                        \"code\": \"ar-AE\",\n                        \"label\": \"العربية (الإمارات)\",\n                        \"instruction\": \" Use Modern Standard Arabic with Gulf/UAE vocabulary preferences where applicable.\"\n                    },\n                    {\n                        \"code\": \"ar-MA\",\n                        \"label\": \"العربية (المغرب)\",\n                        \"instruction\": \" Use Modern Standard Arabic; where regional terms are needed prefer Maghreb usage while staying in formal written Arabic.\"\n                    }\n                ],\n                \"de\": [\n                    {\n                        \"code\": \"\",\n                        \"label\": \"Standard\",\n                        \"instruction\": \"\"\n                    },\n                    {\n                        \"code\": \"de-DE\",\n                        \"label\": \"Deutsch (Deutschland)\",\n                        \"instruction\": \"Use standard German as used in Germany (Bundesdeutsch): ß where appropriate; vocabulary such as Januar, Kartoffel, Strominvoice, Parkhaus.\"\n                    },\n                    {\n                        \"code\": \"de-AT\",\n                        \"label\": \"Deutsch (Österreich)\",\n                        \"instruction\": \"Use Austrian German: vocabulary such as Jänner, Erdapfel, Paradeiser, Stiege; Austrian administrative and everyday terms; avoid German-only words where Austrian standard differs.\"\n                    },\n                    {\n                        \"code\": \"de-CH\",\n                        \"label\": \"Deutsch (Schweiz)\",\n                        \"instruction\": \"Use Swiss High German (Schriftdeutsch): write ss not ß; vocabulary such as Spital, parkieren, Velo, Grundversicherung; Swiss conventions. Do not use Swiss German dialect unless the source explicitly requires dialect.\"\n                    }\n                ],\n                \"en\": [\n                    {\n                        \"code\": \"\",\n                        \"label\": \"Standard\",\n                        \"instruction\": \"\"\n                    },\n                    {\n                        \"code\": \"en-US\",\n                        \"label\": \"English (US)\",\n                        \"instruction\": \" Use American English spelling and vocabulary (e.g. color, organize, center).\"\n                    },\n                    {\n                        \"code\": \"en-GB\",\n                        \"label\": \"English (UK)\",\n                        \"instruction\": \" Use British English spelling and vocabulary (e.g. colour, organise, centre).\"\n                    },\n                    {\n                        \"code\": \"en-AU\",\n                        \"label\": \"English (Australia)\",\n                        \"instruction\": \" Use Australian English spelling and vocabulary (e.g. organisation, licence, petrol).\"\n                    },\n                    {\n                        \"code\": \"en-CA\",\n                        \"label\": \"English (Canada)\",\n                        \"instruction\": \" Use Canadian English: British-influenced spelling with North American vocabulary where standard in Canada.\"\n                    }\n                ],\n                \"es\": [\n                    {\n                        \"code\": \"\",\n                        \"label\": \"Standard\",\n                        \"instruction\": \"\"\n                    },\n                    {\n                        \"code\": \"es-ES\",\n                        \"label\": \"Español (España)\",\n                        \"instruction\": \" Use European Spanish (Castilian) as used in Spain, including vosotros forms when appropriate for plural informal address.\"\n                    },\n                    {\n                        \"code\": \"es-419\",\n                        \"label\": \"Español (Latinoamérica)\",\n                        \"instruction\": \" Use Latin American Spanish conventions (neutral LATAM register, ustedes).\"\n                    },\n                    {\n                        \"code\": \"es-MX\",\n                        \"label\": \"Español (México)\",\n                        \"instruction\": \" Use Mexican Spanish vocabulary and conventions.\"\n                    }\n                ],\n                \"fr\": [\n                    {\n                        \"code\": \"\",\n                        \"label\": \"Standard\",\n                        \"instruction\": \"\"\n                    },\n                    {\n                        \"code\": \"fr-FR\",\n                        \"label\": \"Français (France)\",\n                        \"instruction\": \" Use metropolitan French as used in France (vocabulary, typography, formal address).\"\n                    },\n                    {\n                        \"code\": \"fr-CA\",\n                        \"label\": \"Français (Canada)\",\n                        \"instruction\": \"Use Canadian French (québécois standard written form): Canadian vocabulary and usage where it differs from France.\"\n                    },\n                    {\n                        \"code\": \"fr-BE\",\n                        \"label\": \"Français (Belgique)\",\n                        \"instruction\": \" Use Belgian French conventions and vocabulary where they differ from metropolitan France.\"\n                    },\n                    {\n                        \"code\": \"fr-CH\",\n                        \"label\": \"Français (Suisse)\",\n                        \"instruction\": \"Use Swiss French conventions and vocabulary (e.g. natel, déjeuner at noon context).\"\n                    }\n                ],\n                \"it\": [\n                    {\n                        \"code\": \"\",\n                        \"label\": \"Standard\",\n                        \"instruction\": \"\"\n                    },\n                    {\n                        \"code\": \"it-IT\",\n                        \"label\": \"Italiano (Italia)\",\n                        \"instruction\": \" Use standard Italian as used in Italy.\"\n                    },\n                    {\n                        \"code\": \"it-CH\",\n                        \"label\": \"Italiano (Svizzera)\",\n                        \"instruction\": \" Use Swiss Italian conventions and vocabulary where they differ from Italy.\"\n                    }\n                ],\n                \"nl\": [\n                    {\n                        \"code\": \"\",\n                        \"label\": \"Standard\",\n                        \"instruction\": \"\"\n                    },\n                    {\n                        \"code\": \"nl-NL\",\n                        \"label\": \"Nederlands (Nederland)\",\n                        \"instruction\": \" Use Netherlands Dutch spelling and vocabulary.\"\n                    },\n                    {\n                        \"code\": \"nl-BE\",\n                        \"label\": \"Nederlands (België)\",\n                        \"instruction\": \" Use Belgian Dutch (Flemish) conventions where they differ from Netherlands Dutch.\"\n                    }\n                ],\n                \"pt\": [\n                    {\n                        \"code\": \"\",\n                        \"label\": \"Standard\",\n                        \"instruction\": \"\"\n                    },\n                    {\n                        \"code\": \"pt-BR\",\n                        \"label\": \"Português (Brasil)\",\n                        \"instruction\": \" Use Brazilian Portuguese conventions and vocabulary.\"\n                    },\n                    {\n                        \"code\": \"pt-PT\",\n                        \"label\": \"Português (Portugal)\",\n                        \"instruction\": \" Use European Portuguese conventions and vocabulary.\"\n                    }\n                ],\n                \"zh\": [\n                    {\n                        \"code\": \"\",\n                        \"label\": \"Standard\",\n                        \"instruction\": \"\"\n                    },\n                    {\n                        \"code\": \"zh-Hans\",\n                        \"label\": \"中文 (简体)\",\n                        \"instruction\": \" Use Simplified Chinese characters (Mainland standard).\"\n                    },\n                    {\n                        \"code\": \"zh-Hant\",\n                        \"label\": \"中文 (繁體)\",\n                        \"instruction\": \" Use Traditional Chinese characters (Taiwan/Hong Kong standard).\"\n                    }\n                ]\n            },\n            \"example\": \"en-US\"\n        },\n        \"style\": {\n            \"type\": \"string (optional)\",\n            \"description\": \"Domain/style hint appended to the LLM prompt (mechanical, not routing).\",\n            \"supported\": [\n                \"general\",\n                \"legal\",\n                \"medical\",\n                \"marketing\"\n            ],\n            \"default\": \"general\"\n        },\n        \"tone\": {\n            \"type\": \"string (optional)\",\n            \"supported\": [\n                \"neutral\",\n                \"formal\",\n                \"informal\"\n            ],\n            \"default\": \"neutral\"\n        },\n        \"mode\": {\n            \"type\": \"string (optional)\",\n            \"supported\": [\n                \"translate\",\n                \"correct\"\n            ],\n            \"aliases\": {\n                \"rewrite\": \"correct\"\n            },\n            \"default\": \"translate\",\n            \"description\": \"correct = polish text in source_language (requires explicit source_language, not auto). Legacy alias: rewrite.\"\n        },\n        \"error_codes\": {\n            \"AUTH_REQUIRED\": \"401 — No valid bearer token.\",\n            \"INVALID_REQUEST\": \"400 — Generic bad-input error.\",\n            \"INVALID_TARGET_LANGUAGE\": \"400 — target_language missing or not supported.\",\n            \"INVALID_SOURCE_LANGUAGE\": \"400 — source_language not supported.\",\n            \"INVALID_TARGET_LOCALE\": \"400 — target_locale unknown or not valid for target_language.\",\n            \"CORRECT_REQUIRES_SOURCE\": \"400 — mode=correct requires explicit source_language (not auto). Alias rewrite maps to correct.\",\n            \"INVALID_PRESET\": \"400 — preserve_terms_preset is not in the server's allow-list. See available_presets in the error body.\",\n            \"EMPTY_TEXT\": \"400 — Input contained no translatable characters.\",\n            \"INPUT_TOO_LARGE\": \"400 — Input exceeds TRANSLATE_MAX_INPUT_CHARS (15000).\",\n            \"ARRAY_TOO_LARGE\": \"400 — More than 500 array items.\",\n            \"JSON_STRUCTURE_TOO_LARGE\": \"400 — JSON object is too deep, too wide, or contains oversized string values.\",\n            \"TRANSLATE_RATE_LIMITED\": \"429 — Per-account translate request/character/sync limit exceeded.\",\n            \"TRANSLATION_FAILED\": \"500 — Upstream LLM translation failed.\",\n            \"TRANSLATION_EMPTY\": \"500 — LLM returned empty output or prompt-echo after retries.\",\n            \"TRANSLATION_TIMEOUT\": \"504 — Translation timed out (upstream busy).\",\n            \"UNKNOWN_COMMAND\": \"400 — Sub-command not recognized.\"\n        },\n        \"version\": \"4.4.0\"\n    },\n    \"processing_time\": \"71.6ms\",\n    \"status\": \"success\"\n}"}]},{"name":"Translate text","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/translate/text","host":["{{base_url}}"],"path":["translate","text"]},"description":"## Overview\n\nTranslate text with PaperOffice **Translation** — one endpoint for **string**, **string array**, and **JSON object** payloads.\n\nSupports **35** languages, optional **preserve_terms** for brand/product names, and **hybrid client-wait** (inline result, **HTTP 202** + poll, or immediate `job_id`).\n\n**Endpoint:** `POST /translate/text` with **`Content-Type: application/json`**.\n\n**Billing:** Per character volume and `tier` — see the account **Pricing Calculator** (not duplicated here).\n\n## Input types (`text` field)\n\n| `text` shape | Behavior | Response field |\n|--------------|----------|----------------|\n| **string** | Single passage | `translation` (string) |\n| **string[]** | Batch of strings (max 500 items) | `translations` (array) |\n| **object** | JSON structure (keys/values localized) | `translated_json` (object) |\n\nSend the shape as native JSON (not a stringified JSON blob inside a string).\n\n## Request parameters\n\n| Parameter | Required | Default | Notes |\n|-----------|----------|---------|-------|\n| `text` | **yes** | `Guten Morgen — PaperOffice Translation API showroom.` | string, string[], or JSON object |\n| `target_language` | **yes** | `en` | Target code from **Get supported languages** |\n| `target_locale` | no | — | Regional variant (e.g. `de-AT`, `en-GB`) from catalog `data.target_locale.variants`; prompt hint only |\n| `source_language` | no | `auto` | Source code or `auto` for detection |\n| `tier` | no | `premium` | `basic`, `premium`, or `ultra` |\n| `tone` | no | `neutral` | `formal`, `informal`, or `neutral` (register hint) |\n| `style` | no | `general` | `legal`, `medical`, `marketing`, or `general` (domain hint) |\n| `preserve_terms` | no | — | Up to 50 terms kept verbatim (brand/plan names) |\n| `preserve_terms_preset` | no | — | Opt-in server preset, e.g. `paperoffice_brand` |\n| `client_wait` | no | `true` | Connection hold (~295s); hidden in Postman |\n| `async_only` | no | `false` | Force immediate `job_id`; hidden in Postman |\n| `priority` | no | plan default | 1–900; **≥900** sync path; hidden in Postman |\n\n## Responses\n\n| HTTP | When | Body |\n|------|------|------|\n| **200** | Finished within hold (or sync path) | `translation` / `translations` / `translated_json`, `input_type`, `characters`, `processing_time` |\n| **202** | Hold exceeded | `job_id`, `poll_url` — poll **`GET /job/get/{job_id}`** |\n| **400** | Invalid language, locale mismatch, empty text, too large | `INVALID_*`, `INVALID_TARGET_LOCALE`, `INPUT_TOO_LARGE`, `EMPTY_TEXT` |\n| **429** | account limits / queue | `TRANSLATE_RATE_LIMITED`, standard queue limits via `_billing` |\n\n## Connection hold & polling (~5 minute limit)\n\n- **Default:** This HTTP request is held up to **~5 minutes (~295 s)**; then **200** with translation or **202** + `poll_url`.\n- **Poll:** `GET /job/get/{job_id}` every 5–10 s after **202** until `completed` or `failed`.\n- **Immediate job id:** `client_wait=false` or `async_only=true` (hidden in Postman; use API integrations).\n\n## Queue priority (optional)\n\n- **Omitted** → Subscription plan default from bearer tier.\n- **`900`** → synchronous translation attempt within the hold window when capacity allows.\n- Valid range: **1–900** (values above 900 are capped server-side).\n\n## Best practices\n\n1. **First in Postman:** Send the prefilled JSON demo (`de` → `en`, `tier=premium`) with default `client_wait`.\n2. Call **Get supported languages** before building language pickers.\n3. Split payloads **> 15 000 characters** client-side — the API rejects larger single requests.\n4. Use `preserve_terms` for plan names (**Starter**, **Ultra**, **PaperOffice**) and integration identifiers.\n5. For bulk UI strings, send `text` as a JSON **array** in one request (≤ 500 items).\n6. For i18n JSON files, send `text` as a JSON **object** and read `translated_json`.\n7. After **HTTP 202**, poll — do not resubmit unless the job failed.\n\n## Related endpoint\n\n| Use case | Postman item |\n|----------|----------------|\n| List valid language codes (35) | Get supported languages |\n\n---\n*Documentation release: `R20260520.2018`* · status: `frozen`\n\n---\n**Tool-ID:** `po_translate_text` • **MCP:** Callable via `mcp.paperoffice.ai` as `po_translate_text`","body":{"mode":"raw","raw":"{\n    \"text\": \"Guten Morgen — PaperOffice Translation API showroom.\",\n    \"source_language\": \"de\",\n    \"target_language\": \"en\",\n    \"target_locale\": \"\",\n    \"tier\": \"premium\"\n}","options":{"raw":{"language":"json"}}}},"_x_postman":{"archetype":"translate_text","doc_release_id":"R20260520.2018","doc_frozen":true,"doc_status":"frozen","form_visible":["text","source_language","target_language","target_locale","tier","preserve_terms","preserve_terms_preset"],"form_hidden":["client_wait","async_only","priority"],"form_disabled":["priority"]},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/translate/text","host":["{{base_url}}"],"path":["translate","text"]},"description":"## Overview\n\nTranslate text with PaperOffice **Translation** — one endpoint for **string**, **string array**, and **JSON object** payloads.\n\nSupports **35** languages, optional **preserve_terms** for brand/product names, and **hybrid client-wait** (inline result, **HTTP 202** + poll, or immediate `job_id`).\n\n**Endpoint:** `POST /translate/text` with **`Content-Type: application/json`**.\n\n**Billing:** Per character volume and `tier` — see the account **Pricing Calculator** (not duplicated here).\n\n## Input types (`text` field)\n\n| `text` shape | Behavior | Response field |\n|--------------|----------|----------------|\n| **string** | Single passage | `translation` (string) |\n| **string[]** | Batch of strings (max 500 items) | `translations` (array) |\n| **object** | JSON structure (keys/values localized) | `translated_json` (object) |\n\nSend the shape as native JSON (not a stringified JSON blob inside a string).\n\n## Request parameters\n\n| Parameter | Required | Default | Notes |\n|-----------|----------|---------|-------|\n| `text` | **yes** | `Guten Morgen — PaperOffice Translation API showroom.` | string, string[], or JSON object |\n| `target_language` | **yes** | `en` | Target code from **Get supported languages** |\n| `target_locale` | no | — | Regional variant (e.g. `de-AT`, `en-GB`) from catalog `data.target_locale.variants`; prompt hint only |\n| `source_language` | no | `auto` | Source code or `auto` for detection |\n| `tier` | no | `premium` | `basic`, `premium`, or `ultra` |\n| `tone` | no | `neutral` | `formal`, `informal`, or `neutral` (register hint) |\n| `style` | no | `general` | `legal`, `medical`, `marketing`, or `general` (domain hint) |\n| `preserve_terms` | no | — | Up to 50 terms kept verbatim (brand/plan names) |\n| `preserve_terms_preset` | no | — | Opt-in server preset, e.g. `paperoffice_brand` |\n| `client_wait` | no | `true` | Connection hold (~295s); hidden in Postman |\n| `async_only` | no | `false` | Force immediate `job_id`; hidden in Postman |\n| `priority` | no | plan default | 1–900; **≥900** sync path; hidden in Postman |\n\n## Responses\n\n| HTTP | When | Body |\n|------|------|------|\n| **200** | Finished within hold (or sync path) | `translation` / `translations` / `translated_json`, `input_type`, `characters`, `processing_time` |\n| **202** | Hold exceeded | `job_id`, `poll_url` — poll **`GET /job/get/{job_id}`** |\n| **400** | Invalid language, locale mismatch, empty text, too large | `INVALID_*`, `INVALID_TARGET_LOCALE`, `INPUT_TOO_LARGE`, `EMPTY_TEXT` |\n| **429** | account limits / queue | `TRANSLATE_RATE_LIMITED`, standard queue limits via `_billing` |\n\n## Connection hold & polling (~5 minute limit)\n\n- **Default:** This HTTP request is held up to **~5 minutes (~295 s)**; then **200** with translation or **202** + `poll_url`.\n- **Poll:** `GET /job/get/{job_id}` every 5–10 s after **202** until `completed` or `failed`.\n- **Immediate job id:** `client_wait=false` or `async_only=true` (hidden in Postman; use API integrations).\n\n## Queue priority (optional)\n\n- **Omitted** → Subscription plan default from bearer tier.\n- **`900`** → synchronous translation attempt within the hold window when capacity allows.\n- Valid range: **1–900** (values above 900 are capped server-side).\n\n## Best practices\n\n1. **First in Postman:** Send the prefilled JSON demo (`de` → `en`, `tier=premium`) with default `client_wait`.\n2. Call **Get supported languages** before building language pickers.\n3. Split payloads **> 15 000 characters** client-side — the API rejects larger single requests.\n4. Use `preserve_terms` for plan names (**Starter**, **Ultra**, **PaperOffice**) and integration identifiers.\n5. For bulk UI strings, send `text` as a JSON **array** in one request (≤ 500 items).\n6. For i18n JSON files, send `text` as a JSON **object** and read `translated_json`.\n7. After **HTTP 202**, poll — do not resubmit unless the job failed.\n\n## Related endpoint\n\n| Use case | Postman item |\n|----------|----------------|\n| List valid language codes (35) | Get supported languages |\n\n---\n*Documentation release: `R20260520.2018`* · status: `frozen`\n\n---\n**Tool-ID:** `po_translate_text` • **MCP:** Callable via `mcp.paperoffice.ai` as `po_translate_text`","body":{"mode":"raw","raw":"{\n    \"text\": \"Guten Morgen — PaperOffice Translation API showroom.\",\n    \"source_language\": \"de\",\n    \"target_language\": \"en\",\n    \"target_locale\": \"\",\n    \"tier\": \"premium\"\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"data\": {\n        \"input_type\": \"string\",\n        \"source_language\": \"de\",\n        \"target_language\": \"en\",\n        \"tier\": \"premium\",\n        \"priority_requested\": 900,\n        \"async\": false,\n        \"translation\": \"Good morning — PaperOffice Translation API showroom.\",\n        \"characters\": 52,\n        \"processing_time\": \"2842.45ms\"\n    }\n}"}]}]}]},{"name":"🛡️ Security AI","description":"# 🛡️ Security AI\n\nSecurity and fraud detection tools. Device fingerprinting, browser analysis, and fake email detection.\n\n**Sub-modules:** Fingerprint SDK · Fake Email Detector","item":[{"name":"🔐 Fingerprint SDK","description":"# Fingerprint SDK\n\nDevice fingerprinting and fraud detection. Generate unique device fingerprints, detect suspicious behavior, and manage device trust scores.","item":[{"name":"Detect IP VPN usage","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/ip2location/vpn","host":["{{base_url}}"],"path":["ip2location","vpn"]},"description":"Detect VPN, proxy, and anonymization services. Returns: - is_vpn - VPN detected - is_proxy - Proxy server detected - is_tor - TOR exit node - is_datacenter - Datacenter IP cloud hosting - is_relay - Apple Private Relay - score - Risk percentage 0-100% - last_crawl - Last database update Use for: .\n\n---\n**Tool-ID:** `po_ip_geolocation_vpn_detection` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_ip_geolocation_vpn_detection`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"ip","type":"text","description":"*(optional)* | Query parameter: ip | Type: string","value":"8.8.8.8"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/ip2location/vpn","host":["{{base_url}}"],"path":["ip2location","vpn"]},"description":"Detect VPN, proxy, and anonymization services. Returns: - is_vpn - VPN detected - is_proxy - Proxy server detected - is_tor - TOR exit node - is_datacenter - Datacenter IP cloud hosting - is_relay - Apple Private Relay - score - Risk percentage 0-100% - last_crawl - Last database update Use for: .\n\n---\n**Tool-ID:** `po_ip_geolocation_vpn_detection` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_ip_geolocation_vpn_detection`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"ip","type":"text","description":"*(optional)* | Query parameter: ip | Type: string","value":"8.8.8.8"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"ip\": {\n        \"ip\": \"203.0.113.42\",\n        \"location\": {\n            \"timezone\": {\n                \"name\": \"Europe/Madrid\",\n                \"offsethours\": 1\n            },\n            \"geo_lat\": 40.4167,\n            \"geo_lon\": -3.70329,\n            \"city\": {\n                \"name\": \"Madrid\",\n                \"zip\": \"28070\",\n                \"district\": \"\"\n            },\n            \"region\": {\n                \"code\": \"MD\",\n                \"name\": \"Madrid\"\n            },\n            \"continent\": {\n                \"name\": \"Europe\",\n                \"code\": \"EU\"\n            },\n            \"country\": {\n                \"name\": \"Spain\",\n                \"code\": \"ES\",\n                \"currency\": \"EUR\",\n                \"primary_language\": \"es\",\n                \"spoken_languages\": [\n                    \"es\",\n                    \"eu\",\n                    \"ca\",\n                    \"gl\"\n                ],\n                \"capital\": \"Madrid\",\n                \"callingcode\": \"+34\",\n                \"vat\": {\n                    \"standard_rate\": 21,\n                    \"reduced_rates\": [\n                        10,\n                        4\n                    ],\n                    \"prefix\": \"ES\",\n                    \"regex\": \"^ES[A-Z0-9]{1}[0-9]{7}[A-Z]$\",\n                    \"digital_services_rate\": 21,\n                    \"b2b_reverse_charge\": true,\n                    \"tax_free_threshold\": 0\n                },\n                \"economy\": {\n                    \"currency_details\": {\n                        \"code\": \"EUR\",\n                        \"symbol\": \"€\",\n                        \"position\": \"after\",\n                        \"decimal\": \",\",\n                        \"thousand\": \".\",\n                        \"decimals\": 2\n                    },\n                    \"economic_zones\": [\n                        \"EU\",\n                        \"EEA\",\n                        \"SEPA\",\n                        \"Schengen\"\n                    ],\n                    \"risk_rating\": \"A\",\n                    \"gdp_per_capita\": 28905.45\n                },\n                \"legal\": {\n                    \"legal_system\": \"Civil Law\",\n                    \"data_protection\": \"GDPR\",\n                    \"business_registration_required\": true,\n                    \"electronic_signature\": \"eIDAS\",\n                    \"age_of_majority\": 18,\n                    \"vat_registration_required\": true\n                },\n                \"address\": {\n                    \"postal_code_regex\": \"^[0-9]{5}$\",\n                    \"format\": \"{{recipient}}\\n{{street}} {{house}}\\n{{postal}} {{city}}\",\n                    \"required_fields\": [\n                        \"street\",\n                        \"postal\",\n                        \"city\"\n                    ],\n                    \"state_required\": true,\n                    \"phone\": {\n                        \"mobile_prefix\": [\n                            \"6\",\n                            \"7\"\n                        ],\n                        \"area_code_required\": true,\n                        \"example\": \"+34 600 123 456\",\n                        \"regex\": \"^\\\\+34[6-7][0-9]{8}$\"\n                    }\n                },\n                \"business\": {\n                    \"working_days\": [\n                        \"mon\",\n                        \"tue\",\n                        \"wed\",\n                        \"thu\",\n                        \"fri\"\n                    ],\n                    \"usual_hours\": \"09:00-18:00\",\n                    \"bank_details\": {\n                        \"iban_prefix\": \"ES\",\n                        \"iban_length\": 24,\n                        \"swift_format\": \"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}[A-Z0-9]{11}$\",\n                        \"local_format\": \"BBBBBBBBCCCCCCCCCCCC\"\n                    },\n                    \"payment_methods\": {\n                        \"popular\": [\n                            \"sepa\",\n                            \"bizum\",\n                            \"cards\",\n                            \"paypal\"\n                        ],\n                        \"local\": [\n                            \"bizum\"\n                        ]\n                    }\n                },\n                \"demographics\": {\n                    \"population\": 47351567,\n                    \"capital_population\": 3233527,\n                    \"urbanization\": 80.3,\n                    \"median_age\": 45.3,\n                    \"languages\": {\n                        \"official\": [\n                            \"es\"\n                        ],\n                        \"business\": [\n                            \"es\",\n                            \"en\"\n                        ]\n                    }\n                },\n                \"geography\": {\n                    \"neighbors\": [\n                        \"PT\",\n                        \"FR\",\n                        \"AD\",\n                        \"GI\"\n                    ],\n                    \"has_coast\": true,\n                    \"climate_zone\": \"Mediterranean\",\n                    \"timezone\": {\n                        \"winter\": \"UTC+1\",\n                        \"summer\": \"UTC+2\",\n                        \"dst_start\": \"last Sunday March\",\n                        \"dst_end\": \"last Sunday October\"\n                    },\n                    \"coordinates\": {\n                        \"latitude\": 40.4168,\n                        \"longitude\": -3.7038\n                    }\n                },\n                \"holidays\": {\n                    \"national_fixed\": [\n                        {\n                            \"date\": \"01-01\",\n                            \"name\": \"Año Nuevo\"\n                        },\n                        {\n                            \"date\": \"05-01\",\n                            \"name\": \"Día del Trabajo\"\n                        },\n                        {\n                            \"date\": \"10-12\",\n                            \"name\": \"Día de la Hispanidad\"\n                        },\n                        {\n                            \"date\": \"12-25\",\n                            \"name\": \"Navidad\"\n                        }\n                    ],\n                    \"national_floating\": [\n                        {\n                            \"name\": \"Viernes Santo\",\n                            \"calc\": \"easter-2\"\n                        },\n                        {\n                            \"name\": \"Lunes de Pascua\",\n                            \"calc\": \"easter+1\"\n                        }\n                    ],\n                    \"regional_specific\": {\n                        \"AN\": [\n                            {\n                                \"date\": \"02-28\",\n                                \"name\": \"Día de Andalucía\"\n                            }\n                        ],\n                        \"CT\": [\n                            {\n                                \"date\": \"09-11\",\n                                \"name\": \"Día de Cataluña\"\n                            }\n                        ],\n                        \"MD\": [\n                            {\n                                \"date\": \"05-02\",\n                                \"name\": \"Día de la Comunidad de Madrid\"\n                            }\n                        ]\n                    }\n                },\n                \"document_validation\": {\n                    \"tax_number\": {\n                        \"format\": \"^[A-Z0-9]{1}[0-9]{7}[A-Z]$\",\n                        \"example\": \"A1234567B\"\n                    },\n                    \"vat_id\": {\n                        \"format\": \"^ES[A-Z0-9]{1}[0-9]{7}[A-Z]$\",\n                        \"example\": \"ESA1234567B\"\n                    },\n                    \"id_card\": {\n                        \"format\": \"^[0-9]{8}[A-Z]$\",\n                        \"example\": \"12345678Z\",\n                        \"valid_years\": 10\n                    },\n                    \"passport\": {\n                        \"format\": \"^[A-Z0-9]{9}$\",\n                        \"example\": \"X12345678\",\n                        \"valid_years\": 10\n                    }\n                },\n                \"ecommerce\": {\n                    \"returns_period\": 14,\n                    \"cancellation_period\": 14,\n                    \"required_legal_texts\": [\n                        \"imprint\",\n                        \"privacy_policy\",\n                        \"terms_conditions\",\n                        \"cancellation_policy\",\n                        \"shipping_info\"\n                    ],\n                    \"price_display\": {\n                        \"must_include_vat\": true,\n                        \"shipping_info_required\": true,\n                        \"basic_price_required\": true\n                    },\n                    \"payment_deadline\": {\n                        \"b2c\": 14,\n                        \"b2b\": 30\n                    }\n                },\n                \"important_contacts\": {\n                    \"emergency\": {\n                        \"general_emergency\": \"112\",\n                        \"police\": \"091\",\n                        \"fire_brigade\": \"080\",\n                        \"ambulance\": \"061\",\n                        \"poison_control\": \"+34 915 620 420\",\n                        \"maritime_emergency\": \"+34 900 202 202\",\n                        \"mountain_rescue\": \"112\",\n                        \"gas_emergency\": \"+34 900 924 622\",\n                        \"power_outage\": \"+34 900 500 049\"\n                    },\n                    \"health\": {\n                        \"medical_on_call\": \"061\",\n                        \"pharmacy_emergency\": \"N/A\",\n                        \"mental_health_crisis\": \"+34 917 007 079\",\n                        \"drug_addiction\": \"+34 900 161 515\",\n                        \"aids_counseling\": \"+34 915 912 445\",\n                        \"cancer_information\": \"+34 800 003 003\"\n                    },\n                    \"government\": {\n                        \"tax_office_general\": \"+34 915 548 700\",\n                        \"customs_info\": \"+34 915 506 400\",\n                        \"federal_police\": \"+34 900 202 202\",\n                        \"pension_service\": \"+34 901 166 565\",\n                        \"employment_agency\": \"+34 900 801 137\",\n                        \"social_security\": \"+34 901 502 050\",\n                        \"immigration_office\": \"+34 902 008 210\"\n                    },\n                    \"consumer\": {\n                        \"consumer_protection\": \"+34 915 326 320\",\n                        \"data_protection\": \"dpd@agpd.es\",\n                        \"banking_supervision\": \"+34 913 388 830\",\n                        \"energy_advice\": \"+34 900 648 804\",\n                        \"travel_security\": \"+34 915 205 948\",\n                        \"food_safety\": \"+34 913 224 000\"\n                    },\n                    \"assistance\": {\n                        \"roadside_assistance\": {\n                            \"mapfre\": \"+34 918 366 160\",\n                            \"axa\": \"+34 902 404 084\"\n                        },\n                        \"missing_persons\": {\n                            \"hotline\": \"+34 116 000\",\n                            \"children_emergency\": \"+34 116 111\"\n                        },\n                        \"violence\": {\n                            \"domestic_violence\": \"+34 016\",\n                            \"child_protection\": \"+34 116 111\"\n                        }\n                    },\n                    \"fraud_prevention\": {\n                        \"anti_fraud\": \"+34 902 007 290\",\n                        \"credit_card_blocking\": \"+34 900 111 000\",\n                        \"cyber_crime\": \"+34 915 822 640\",\n                        \"identity_theft\": \"+34 900 202 202\"\n                    },\n                    \"transportation\": {\n                        \"renfe\": \"+34 912 320 320\",\n                        \"iberia\": \"+34 901 111 500\",\n                        \"airport_barcelona\": \"+34 913 211 000\",\n                        \"airport_madrid\": \"+34 913 936 000\",\n                        \"public_transport_madrid\": \"+34 915 214 260\"\n                    },\n                    \"utilities\": {\n                        \"telefonica_support\": \"+34 900 104 709\",\n                        \"vodafone_support\": \"+34 123\",\n                        \"orange_support\": \"+34 1470\"\n                    }\n                },\n                \"iseumember\": true\n            }\n        },\n        \"provider\": {\n            \"as\": \"AS8708 RCS & RDS\",\n            \"asname\": \"RCS-RDS\",\n            \"isp\": \"RCS & RDS\",\n            \"org\": \"RCS & RDS Residential\"\n        },\n        \"status\": \"success\",\n        \"language\": {\n            \"by_browser\": false,\n            \"by_country\": \"es\"\n        },\n        \"locale\": {\n            \"by_browser\": false\n        },\n        \"country_details\": {\n            \"additional_data\": \"Extended country details loaded successfully\"\n        }\n    },\n    \"processing_time\": \"42.44ms\",\n    \"vpn\": {\n        \"is_vpn\": false,\n        \"is_proxy\": false,\n        \"is_relay\": false,\n        \"is_datacenter\": false,\n        \"is_tor\": false,\n        \"score\": \"3.72%\",\n        \"ip\": \"203.0.113.42\",\n        \"last_paperofficeai_overseer_crawl\": \"2026-04-08 02:02:42\"\n    }\n}"}]},{"name":"Find Similar Devices","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/fingerprint/similar","host":["{{base_url}}"],"path":["fingerprint","similar"]},"description":"Find Similar Devices V2! Uses vector embeddings to find devices with similar fingerprint components. Use Cases: - Cross-browser detection same user, different browser - Device clustering - Fraud detection Response: json { \"status\": \"success\", \"visitor_id\": \"abc123.\", \"similar_devices\": { \"visit.\n\n---\n**Tool-ID:** `po_fingerprint_find_similar_devices_v2` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_fingerprint_find_similar_devices_v2`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"id","type":"text","description":"**REQUIRED** | Visitor-Reference device ID (32-character SHA-256 hash) | Type: string","value":"example-value"},{"key":"threshold","type":"text","description":"*(optional)* | {\"threshold_similarity\":\"Threshold for similarity (0.0-1.0)\",\"note\":\"\"} | Type: number | Max: 1","value":"0.7"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/fingerprint/similar","host":["{{base_url}}"],"path":["fingerprint","similar"]},"description":"Find Similar Devices V2! Uses vector embeddings to find devices with similar fingerprint components. Use Cases: - Cross-browser detection same user, different browser - Device clustering - Fraud detection Response: json { \"status\": \"success\", \"visitor_id\": \"abc123.\", \"similar_devices\": { \"visit.\n\n---\n**Tool-ID:** `po_fingerprint_find_similar_devices_v2` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_fingerprint_find_similar_devices_v2`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"id","type":"text","description":"**REQUIRED** | Visitor-Reference device ID (32-character SHA-256 hash) | Type: string","value":"example-value"},{"key":"threshold","type":"text","description":"*(optional)* | {\"threshold_similarity\":\"Threshold for similarity (0.0-1.0)\",\"note\":\"\"} | Type: number | Max: 1","value":"0.7"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"devices\": [\n                []\n            ],\n            \"total\": 1\n        }\n    }\n}"}]},{"name":"Get fingerprint API stats","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/fingerprint/stats","host":["{{base_url}}"],"path":["fingerprint","stats"]},"description":"Get API Statistics V2 Enhanced! Check available features, storage info, and detailed metrics. Response: json { \"status\": \"success\", \"version\": \"2.0.0\", \"stats\": { \"totalFingerprints\": 12345, \"todayNew\": 150, \"todayActive\": 890, \"vpnDetected\": 23, \"botsDetected\": 5, \"avgConfidence\": 87.5 }, \"featu.\n\n---\n**Tool-ID:** `po_fingerprint_api_stats` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_fingerprint_api_stats`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/fingerprint/stats","host":["{{base_url}}"],"path":["fingerprint","stats"]},"description":"Get API Statistics V2 Enhanced! Check available features, storage info, and detailed metrics. Response: json { \"status\": \"success\", \"version\": \"2.0.0\", \"stats\": { \"totalFingerprints\": 12345, \"todayNew\": 150, \"todayActive\": 890, \"vpnDetected\": 23, \"botsDetected\": 5, \"avgConfidence\": 87.5 }, \"featu.\n\n---\n**Tool-ID:** `po_fingerprint_api_stats` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_fingerprint_api_stats`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"features\": {\n        \"canvas\": true,\n        \"webgl\": true,\n        \"audio\": true,\n        \"fonts\": true,\n        \"behavioral\": true,\n        \"botDetection\": true,\n        \"ja4\": true,\n        \"http2\": true,\n        \"ip2location\": true,\n        \"vpnDetection\": true,\n        \"vectorEmbeddings\": true,\n        \"similaritySearch\": true,\n        \"ipClustering\": true,\n        \"velocityChecks\": true,\n        \"deviceGraph\": true,\n        \"fraudDetection\": true\n    },\n    \"processing_time\": \"69.46ms\",\n    \"retention\": \"180_days\",\n    \"stats\": {\n        \"totalFingerprints\": 1108,\n        \"todayNew\": 1,\n        \"todayActive\": 44,\n        \"vpnDetected\": 46,\n        \"botsDetected\": 111,\n        \"avgConfidence\": 29.1,\n        \"avgVisits\": 1611.8\n    },\n    \"status\": \"success\",\n    \"storage\": \"mariadb_11.8_vector\",\n    \"version\": \"2.0.0\"\n}"}]},{"name":"Get fingerprint device details","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/fingerprint/device","host":["{{base_url}}"],"path":["fingerprint","device"]},"description":"Get Device Details Retrieve details about a known device. Response: json { \"status\": \"success\", \"device\": { \"visitorId\": \"abc123.\", \"firstSeen\": \"2025-12-19T10:00:00Z\", \"lastSeen\": \"2025-12-19T18:30:00Z\", \"visits\": 42, \"browser\": \"Chrome\", \"platform\": \"Windows\", \"country\": \"DE\" } }\n\n---\n**Tool-ID:** `po_fingerprint_get_device_details` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_fingerprint_get_device_details`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"id","type":"text","description":"*(optional)* | Visitor-Device ID (32 characters). Aliases: visitor_id, visitorId | Type: string","value":"example-value"},{"key":"visitor_id","type":"text","description":"*(optional)* | Alias for id (snake_case variant) | Type: string","value":"1"},{"key":"visitorId","type":"text","description":"*(optional)* | Alias for id (camelCase variant, FingerprintJS convention) | Type: string","value":"example-value"}]}},"response":[]},{"name":"Get Linked Devices","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/fingerprint/linked","host":["{{base_url}}"],"path":["fingerprint","linked"]},"description":"Get Linked Devices via IP Clustering V2! Finds all devices that have been seen on the same IP address same network/household. Use Cases: - Household detection - account sharing detection - Family plan verification Response: json { \"status\": \"success\", \"visitor_id\": \"abc123.\", \"same_network\": \"d.\n\n---\n**Tool-ID:** `po_fingerprint_get_linked_devices_v2` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_fingerprint_get_linked_devices_v2`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"id","type":"text","description":"**REQUIRED** | Visitor-ID for network connection lookup (32 characters) | Type: string","value":"example-value"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/fingerprint/linked","host":["{{base_url}}"],"path":["fingerprint","linked"]},"description":"Get Linked Devices via IP Clustering V2! Finds all devices that have been seen on the same IP address same network/household. Use Cases: - Household detection - account sharing detection - Family plan verification Response: json { \"status\": \"success\", \"visitor_id\": \"abc123.\", \"same_network\": \"d.\n\n---\n**Tool-ID:** `po_fingerprint_get_linked_devices_v2` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_fingerprint_get_linked_devices_v2`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"id","type":"text","description":"**REQUIRED** | Visitor-ID for network connection lookup (32 characters) | Type: string","value":"example-value"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"network_device_count\": 0,\n    \"processing_time\": \"64.86ms\",\n    \"same_network\": [],\n    \"status\": \"success\",\n    \"visitor_id\": \"test\"\n}"}]},{"name":"Identify device (fingerprint v2)","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/fingerprint/identify","host":["{{base_url}}"],"path":["fingerprint","identify"]},"description":"Identify a Device V2! Main endpoint for device identification. Uses vector embeddings, IP clustering, and velocity checks. V2 Features: - Vector embeddings for accurate device matching - Automatic IP clustering for household detection - Velocity tracking for fraud detection - Device linking and s.\n\n---\n**Tool-ID:** `po_fingerprint_identify_device_v2` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_fingerprint_identify_device_v2`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"components","type":"text","description":"*(optional)* | Client-side fingerprint components from the JavaScript SDK (Canvas, WebGL, Audio, Fonts, Behavioral) | Type: object","value":"{}"},{"key":"include","type":"text","description":"*(optional)* | Comma-separated Enrichment Modules (e.g., anonywithy, currency) or core for minimal Response | Type: string","value":"example-value"},{"key":"language","type":"text","description":"*(optional)* | Language code for enriched data (ISO 639-1) | Type: string","value":"en"},{"key":"visitorId","type":"text","description":"*(optional)* | Visitor-ID pre-calculated by the client | Type: string","value":"example-value"},{"key":"confidence","type":"text","description":"*(optional)* | Client-seitig berechneter confidence-Score (0-100) | Type: number","value":"0"},{"key":"botDetection","type":"text","description":"*(optional)* | Client-seitige Bot-detectionsdaten with signals-Array | Type: object","value":"{}"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/fingerprint/identify","host":["{{base_url}}"],"path":["fingerprint","identify"]},"description":"Identify a Device V2! Main endpoint for device identification. Uses vector embeddings, IP clustering, and velocity checks. V2 Features: - Vector embeddings for accurate device matching - Automatic IP clustering for household detection - Velocity tracking for fraud detection - Device linking and s.\n\n---\n**Tool-ID:** `po_fingerprint_identify_device_v2` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_fingerprint_identify_device_v2`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"components","type":"text","description":"*(optional)* | Client-side fingerprint components from the JavaScript SDK (Canvas, WebGL, Audio, Fonts, Behavioral) | Type: object","value":"{}"},{"key":"include","type":"text","description":"*(optional)* | Comma-separated Enrichment Modules (e.g., anonywithy, currency) or core for minimal Response | Type: string","value":"example-value"},{"key":"language","type":"text","description":"*(optional)* | Language code for enriched data (ISO 639-1) | Type: string","value":"en"},{"key":"visitorId","type":"text","description":"*(optional)* | Visitor-ID pre-calculated by the client | Type: string","value":"example-value"},{"key":"confidence","type":"text","description":"*(optional)* | Client-seitig berechneter confidence-Score (0-100) | Type: number","value":"0"},{"key":"botDetection","type":"text","description":"*(optional)* | Client-seitige Bot-detectionsdaten with signals-Array | Type: object","value":"{}"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"anonymity\": {\n        \"is_vpn\": false,\n        \"is_proxy\": false,\n        \"is_tor\": false,\n        \"is_relay\": false,\n        \"is_datacenter\": false,\n        \"score\": \"8.13%\",\n        \"type\": null,\n        \"details\": null\n    },\n    \"bot\": {\n        \"is_bot\": false,\n        \"score\": 30,\n        \"signals\": [\n            \"suspicious_ua\"\n        ],\n        \"threshold\": 70,\n        \"server_evaluated\": true\n    },\n    \"confidence\": {\n        \"score\": 0.3,\n        \"level\": \"low\"\n    },\n    \"country\": {\n        \"code\": \"ES\",\n        \"name\": \"Spain\",\n        \"vat\": {\n            \"standard_rate\": 21,\n            \"reduced_rates\": [\n                10,\n                4\n            ],\n            \"prefix\": \"ES\",\n            \"regex\": \"^ES[A-Z0-9]{1}[0-9]{7}[A-Z]$\",\n            \"digital_services_rate\": 21,\n            \"b2b_reverse_charge\": true,\n            \"tax_free_threshold\": 0\n        },\n        \"economy\": {\n            \"currency_details\": {\n                \"code\": \"EUR\",\n                \"symbol\": \"€\",\n                \"position\": \"after\",\n                \"decimal\": \",\",\n                \"thousand\": \".\",\n                \"decimals\": 2\n            },\n            \"economic_zones\": [\n                \"EU\",\n                \"EEA\",\n                \"SEPA\",\n                \"Schengen\"\n            ],\n            \"risk_rating\": \"A\",\n            \"gdp_per_capita\": 28905.45\n        },\n        \"legal\": {\n            \"legal_system\": \"Civil Law\",\n            \"data_protection\": \"GDPR\",\n            \"business_registration_required\": true,\n            \"electronic_signature\": \"eIDAS\",\n            \"age_of_majority\": 18,\n            \"vat_registration_required\": true\n        },\n        \"address\": {\n            \"postal_code_regex\": \"^[0-9]{5}$\",\n            \"format\": \"{{recipient}}\\n{{street}} {{house}}\\n{{postal}} {{city}}\",\n            \"required_fields\": [\n                \"street\",\n                \"postal\",\n                \"city\"\n            ],\n            \"state_required\": true,\n            \"phone\": {\n                \"mobile_prefix\": [\n                    \"6\",\n                    \"7\"\n                ],\n                \"area_code_required\": true,\n                \"example\": \"+34 600 123 456\",\n                \"regex\": \"^\\\\+34[6-7][0-9]{8}$\"\n            }\n        },\n        \"business\": {\n            \"working_days\": [\n                \"mon\",\n                \"tue\",\n                \"wed\",\n                \"thu\",\n                \"fri\"\n            ],\n            \"usual_hours\": \"09:00-18:00\",\n            \"bank_details\": {\n                \"iban_prefix\": \"ES\",\n                \"iban_length\": 24,\n                \"swift_format\": \"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}[A-Z0-9]{11}$\",\n                \"local_format\": \"BBBBBBBBCCCCCCCCCCCC\"\n            },\n            \"payment_methods\": {\n                \"popular\": [\n                    \"sepa\",\n                    \"bizum\",\n                    \"cards\",\n                    \"paypal\"\n                ],\n                \"local\": [\n                    \"bizum\"\n                ]\n            }\n        },\n        \"demographics\": {\n            \"population\": 47351567,\n            \"capital_population\": 3233527,\n            \"urbanization\": 80.3,\n            \"median_age\": 45.3,\n            \"languages\": {\n                \"official\": [\n                    \"es\"\n                ],\n                \"business\": [\n                    \"es\",\n                    \"en\"\n                ]\n            }\n        },\n        \"geography\": {\n            \"neighbors\": [\n                \"PT\",\n                \"FR\",\n                \"AD\",\n                \"GI\"\n            ],\n            \"has_coast\": true,\n            \"climate_zone\": \"Mediterranean\",\n            \"timezone\": {\n                \"winter\": \"UTC+1\",\n                \"summer\": \"UTC+2\",\n                \"dst_start\": \"last Sunday March\",\n                \"dst_end\": \"last Sunday October\"\n            },\n            \"coordinates\": {\n                \"latitude\": 40.4168,\n                \"longitude\": -3.7038\n            }\n        },\n        \"holidays\": {\n            \"national_fixed\": [\n                {\n                    \"date\": \"01-01\",\n                    \"name\": \"Año Nuevo\"\n                },\n                {\n                    \"date\": \"05-01\",\n                    \"name\": \"Día del Trabajo\"\n                },\n                {\n                    \"date\": \"10-12\",\n                    \"name\": \"Día de la Hispanidad\"\n                },\n                {\n                    \"date\": \"12-25\",\n                    \"name\": \"Navidad\"\n                }\n            ],\n            \"national_floating\": [\n                {\n                    \"name\": \"Viernes Santo\",\n                    \"calc\": \"easter-2\"\n                },\n                {\n                    \"name\": \"Lunes de Pascua\",\n                    \"calc\": \"easter+1\"\n                }\n            ],\n            \"regional_specific\": {\n                \"AN\": [\n                    {\n                        \"date\": \"02-28\",\n                        \"name\": \"Día de Andalucía\"\n                    }\n                ],\n                \"CT\": [\n                    {\n                        \"date\": \"09-11\",\n                        \"name\": \"Día de Cataluña\"\n                    }\n                ],\n                \"MD\": [\n                    {\n                        \"date\": \"05-02\",\n                        \"name\": \"Día de la Comunidad de Madrid\"\n                    }\n                ]\n            }\n        },\n        \"document_validation\": {\n            \"tax_number\": {\n                \"format\": \"^[A-Z0-9]{1}[0-9]{7}[A-Z]$\",\n                \"example\": \"A1234567B\"\n            },\n            \"vat_id\": {\n                \"format\": \"^ES[A-Z0-9]{1}[0-9]{7}[A-Z]$\",\n                \"example\": \"ESA1234567B\"\n            },\n            \"id_card\": {\n                \"format\": \"^[0-9]{8}[A-Z]$\",\n                \"example\": \"12345678Z\",\n                \"valid_years\": 10\n            },\n            \"passport\": {\n                \"format\": \"^[A-Z0-9]{9}$\",\n                \"example\": \"X12345678\",\n                \"valid_years\": 10\n            }\n        },\n        \"ecommerce\": {\n            \"returns_period\": 14,\n            \"cancellation_period\": 14,\n            \"required_legal_texts\": [\n                \"imprint\",\n                \"privacy_policy\",\n                \"terms_conditions\",\n                \"cancellation_policy\",\n                \"shipping_info\"\n            ],\n            \"price_display\": {\n                \"must_include_vat\": true,\n                \"shipping_info_required\": true,\n                \"basic_price_required\": true\n            },\n            \"payment_deadline\": {\n                \"b2c\": 14,\n                \"b2b\": 30\n            }\n        },\n        \"important_contacts\": {\n            \"emergency\": {\n                \"general_emergency\": \"112\",\n                \"police\": \"091\",\n                \"fire_brigade\": \"080\",\n                \"ambulance\": \"061\",\n                \"poison_control\": \"+34 915 620 420\",\n                \"maritime_emergency\": \"+34 900 202 202\",\n                \"mountain_rescue\": \"112\",\n                \"gas_emergency\": \"+34 900 924 622\",\n                \"power_outage\": \"+34 900 500 049\"\n            },\n            \"health\": {\n                \"medical_on_call\": \"061\",\n                \"pharmacy_emergency\": \"N/A\",\n                \"mental_health_crisis\": \"+34 917 007 079\",\n                \"drug_addiction\": \"+34 900 161 515\",\n                \"aids_counseling\": \"+34 915 912 445\",\n                \"cancer_information\": \"+34 800 003 003\"\n            },\n            \"government\": {\n                \"tax_office_general\": \"+34 915 548 700\",\n                \"customs_info\": \"+34 915 506 400\",\n                \"federal_police\": \"+34 900 202 202\",\n                \"pension_service\": \"+34 901 166 565\",\n                \"employment_agency\": \"+34 900 801 137\",\n                \"social_security\": \"+34 901 502 050\",\n                \"immigration_office\": \"+34 902 008 210\"\n            },\n            \"consumer\": {\n                \"consumer_protection\": \"+34 915 326 320\",\n                \"data_protection\": \"dpd@agpd.es\",\n                \"banking_supervision\": \"+34 913 388 830\",\n                \"energy_advice\": \"+34 900 648 804\",\n                \"travel_security\": \"+34 915 205 948\",\n                \"food_safety\": \"+34 913 224 000\"\n            },\n            \"assistance\": {\n                \"roadside_assistance\": {\n                    \"mapfre\": \"+34 918 366 160\",\n                    \"axa\": \"+34 902 404 084\"\n                },\n                \"missing_persons\": {\n                    \"hotline\": \"+34 116 000\",\n                    \"children_emergency\": \"+34 116 111\"\n                },\n                \"violence\": {\n                    \"domestic_violence\": \"+34 016\",\n                    \"child_protection\": \"+34 116 111\"\n                }\n            },\n            \"fraud_prevention\": {\n                \"anti_fraud\": \"+34 902 007 290\",\n                \"credit_card_blocking\": \"+34 900 111 000\",\n                \"cyber_crime\": \"+34 915 822 640\",\n                \"identity_theft\": \"+34 900 202 202\"\n            },\n            \"transportation\": {\n                \"renfe\": \"+34 912 320 320\",\n                \"iberia\": \"+34 901 111 500\",\n                \"airport_barcelona\": \"+34 913 211 000\",\n                \"airport_madrid\": \"+34 913 936 000\",\n                \"public_transport_madrid\": \"+34 915 214 260\"\n            },\n            \"utilities\": {\n                \"telefonica_support\": \"+34 900 104 709\",\n                \"vodafone_support\": \"+34 123\",\n                \"orange_support\": \"+34 1470\"\n            }\n        }\n    },\n    \"currency\": {\n        \"local\": \"EUR\",\n        \"base\": \"EUR\",\n        \"rates\": {\n            \"EUR\": 1,\n            \"USD\": 1.157377,\n            \"GBP\": 0.873024,\n            \"CHF\": 0.922364,\n            \"JPY\": 183.799212,\n            \"CNY\": 7.970332,\n            \"INR\": 108.483763,\n            \"BRL\": 6.011696,\n            \"CAD\": 1.608943,\n            \"AUD\": 1.67364\n        },\n        \"all_rates_count\": 172,\n        \"timestamp\": 1775654344\n    },\n    \"device\": {\n        \"browser\": \"Unknown browser\",\n        \"browser_version\": null,\n        \"platform\": \"Unknown system\",\n        \"type\": \"desktop\"\n    },\n    \"first_seen\": \"2026-01-31 16:34:14\",\n    \"ip\": {\n        \"address\": \"203.0.113.42\",\n        \"country\": \"ES\",\n        \"city\": \"Madrid\",\n        \"region\": \"MD\",\n        \"isp\": \"RCS & RDS\",\n        \"lat\": 40.4167,\n        \"lon\": -3.70329,\n        \"vpn\": false,\n        \"proxy\": false,\n        \"datacenter\": false,\n        \"tor\": false,\n        \"relay\": false\n    },\n    \"is_new\": false,\n    \"last_seen\": \"2026-04-08T15:19:04+02:00\",\n    \"linked_devices\": [],\n    \"processing_time\": \"5.8ms\",\n    \"risk\": {\n        \"score\": 0,\n        \"level\": \"low\",\n        \"factors\": []\n    },\n    \"similar_devices\": [],\n    \"status\": \"success\",\n    \"ultimate_id\": null,\n    \"velocity\": {\n        \"suspicious\": false,\n        \"reason\": null,\n        \"travel_speed\": 0\n    },\n    \"visitor_id\": \"44256a8eadf880a0660a905910f03b4d\",\n    \"visits\": 655072,\n    \"weather\": {\n        \"location\": \"Madrid\",\n        \"region\": \"Madrid\",\n        \"timezone\": \"Europe/Madrid\",\n        \"localtime\": \"2026-04-07 23:59\",\n        \"temp_c\": 14.4,\n        \"temp_f\": 57.9,\n        \"condition\": \"Partly cloudy\",\n        \"humidity\": 82,\n        \"wind_kph\": 22,\n        \"wind_dir\": \"W\",\n        \"feelslike_c\": 12.8,\n        \"feelslike_f\": 55,\n        \"uv\": 0,\n        \"cloud\": 50,\n        \"is_day\": null,\n        \"air_quality\": {\n            \"us_epa_index\": 1,\n            \"gb_defra_index\": 2,\n            \"pm2_5\": 15.35,\n            \"pm10\": 34.65\n        }\n    }\n}"}]},{"name":"Verify fingerprint","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/fingerprint/verify","host":["{{base_url}}"],"path":["fingerprint","verify"]},"description":"Verify Fingerprint Check if current visitor matches a known fingerprint. Response: json { \"status\": \"success\", \"verified\": true, \"matchScore\": 85, \"confidence\": \"high\", \"visitorId\": \"abc123.\", \"lastSeen\": \"2025-12-19T18:30:00Z\", \"visits\": 42 }\n\n---\n**Tool-ID:** `po_fingerprint_verify_fingerprint` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_fingerprint_verify_fingerprint`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"visitorId","type":"text","description":"*(optional)* | Expected visitor ID to verify against | Type: string","value":"abc123def456..."}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/fingerprint/verify","host":["{{base_url}}"],"path":["fingerprint","verify"]},"description":"Verify Fingerprint Check if current visitor matches a known fingerprint. Response: json { \"status\": \"success\", \"verified\": true, \"matchScore\": 85, \"confidence\": \"high\", \"visitorId\": \"abc123.\", \"lastSeen\": \"2025-12-19T18:30:00Z\", \"visits\": 42 }\n\n---\n**Tool-ID:** `po_fingerprint_verify_fingerprint` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_fingerprint_verify_fingerprint`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"visitorId","type":"text","description":"*(optional)* | Expected visitor ID to verify against | Type: string","value":"abc123def456..."}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"verified\": true,\n            \"confidence\": 1\n        }\n    }\n}"}]}]},{"name":"📧 Fake Email Detector","description":"# Fake Email Detector\n\nDetect disposable, temporary, and fake email addresses. Validate email domains against known disposable email providers. Protect your signup flows.","item":[{"name":"Add domain","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/fakeemail/stats","host":["{{base_url}}"],"path":["fakeemail","stats"]},"description":"Add Custom domain Add a domain to the disposable or whitelist database. --- When to Use - Report new disposable domains - Whitelist trusted domains - Customize detection for your use case --- Parameters JSON Body | Parameter | Type | Required | Description | |-----------|------|----------|-------.\n\n---\n**Tool-ID:** `po_email_detector_add_domain` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_email_detector_add_domain`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"domain","type":"text","description":"**REQUIRED** | domain-Name (e.g. spam-provider.com) | Type: string","value":"example-value"},{"key":"type","type":"text","description":"*(optional)* | listntyp | Type: string | Allowed: disposable, whitelist","value":"disposable"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/fakeemail/stats","host":["{{base_url}}"],"path":["fakeemail","stats"]},"description":"Add Custom domain Add a domain to the disposable or whitelist database. --- When to Use - Report new disposable domains - Whitelist trusted domains - Customize detection for your use case --- Parameters JSON Body | Parameter | Type | Required | Description | |-----------|------|----------|-------.\n\n---\n**Tool-ID:** `po_email_detector_add_domain` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_email_detector_add_domain`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"domain","type":"text","description":"**REQUIRED** | domain-Name (e.g. spam-provider.com) | Type: string","value":"example-value"},{"key":"type","type":"text","description":"*(optional)* | listntyp | Type: string | Allowed: disposable, whitelist","value":"disposable"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"stats\": {\n        \"disposable_domains_count\": 1,\n        \"discovered_domains_count\": 1,\n        \"whitelist_domains_count\": 0,\n        \"detection_layers\": 6,\n        \"known_mx_providers\": 67\n    },\n    \"status\": {\n        \"code\": 200,\n        \"message\": \"Stats retrieved\",\n        \"success\": true\n    },\n    \"processing_time\": \"55.90ms\"\n}"}]},{"name":"Check email","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/fakeemail/check","host":["{{base_url}}"],"path":["fakeemail","check"]},"description":"Check Single Email Check if a single email address is fake, disposable, or temporary. --- When to Use - User registration validation - Lead verification - Single email verification --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | email |.\n\n---\n**Tool-ID:** `po_email_detector_check_email` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_email_detector_check_email`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"email","type":"text","description":"*(optional)* | Email address to check | Type: string","value":"user@example.com"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/fakeemail/check","host":["{{base_url}}"],"path":["fakeemail","check"]},"description":"Check Single Email Check if a single email address is fake, disposable, or temporary. --- When to Use - User registration validation - Lead verification - Single email verification --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | email |.\n\n---\n**Tool-ID:** `po_email_detector_check_email` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_email_detector_check_email`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"email","type":"text","description":"*(optional)* | Email address to check | Type: string","value":"user@example.com"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": {\n        \"code\": 400,\n        \"message\": \"Parameter \\\"email\\\" required\",\n        \"success\": false\n    },\n    \"processing_time\": \"12.91ms\"\n}"}]},{"name":"Check emails","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/fakeemail/check_bulk","host":["{{base_url}}"],"path":["fakeemail","check_bulk"]},"description":"Bulk Check Multiple Emails Check up to 100 email addresses in a single request. --- When to Use - Clean email lists - Validate imported contacts - Bulk lead verification --- Parameters JSON Body | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | emails |.\n\n---\n**Tool-ID:** `po_email_detector_bulk_check_emails` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_email_detector_bulk_check_emails`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"emails","type":"text","description":"**REQUIRED** | List of email addresses for verification (max. 100) | Type: array","value":"[\"item-1\"]"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/fakeemail/check_bulk","host":["{{base_url}}"],"path":["fakeemail","check_bulk"]},"description":"Bulk Check Multiple Emails Check up to 100 email addresses in a single request. --- When to Use - Clean email lists - Validate imported contacts - Bulk lead verification --- Parameters JSON Body | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | emails |.\n\n---\n**Tool-ID:** `po_email_detector_bulk_check_emails` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_email_detector_bulk_check_emails`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"emails","type":"text","description":"**REQUIRED** | List of email addresses for verification (max. 100) | Type: array","value":"[\"item-1\"]"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": {\n        \"code\": 400,\n        \"message\": \"Parameter \\\"emails\\\" (array) required in JSON body\",\n        \"success\": false\n    },\n    \"processing_time\": \"80.77ms\"\n}"}]},{"name":"Get statistics","request":{"method":"POST","header":[],"url":{"raw":"{{base_url}}/fakeemail/stats","host":["{{base_url}}"],"path":["fakeemail","stats"]},"description":"Get Detection Statistics Retrieve statistics about your fake email detection usage. --- When to Use - Monitor detection rates - Track usage patterns - Generate reports --- Parameters No parameters required. --- Response json { \"stats\": { \"total_checks\": 15420, \"fake_detected\": 2341, \"legitimate\":.\n\n---\n**Tool-ID:** `po_email_detector_get_statistics` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_email_detector_get_statistics`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[],"url":{"raw":"{{base_url}}/fakeemail/stats","host":["{{base_url}}"],"path":["fakeemail","stats"]},"description":"Get Detection Statistics Retrieve statistics about your fake email detection usage. --- When to Use - Monitor detection rates - Track usage patterns - Generate reports --- Parameters No parameters required. --- Response json { \"stats\": { \"total_checks\": 15420, \"fake_detected\": 2341, \"legitimate\":.\n\n---\n**Tool-ID:** `po_email_detector_get_statistics` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_email_detector_get_statistics`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"stats\": {\n        \"disposable_domains_count\": 1,\n        \"discovered_domains_count\": 1,\n        \"whitelist_domains_count\": 0,\n        \"detection_layers\": 6,\n        \"known_mx_providers\": 67\n    },\n    \"status\": {\n        \"code\": 200,\n        \"message\": \"Stats retrieved\",\n        \"success\": true\n    },\n    \"processing_time\": \"119.61ms\"\n}"}]}]}]},{"name":"⚙️ Workflow AI","description":"# ⚙️ Workflow AI\n\nAutomate multi-step document workflows with AI. Create, execute, and monitor processing pipelines. Manage async jobs, tasks, and human-in-the-loop review.\n\n**Sub-modules:** Workflow Orchestration · Job Management · Tasks & Substitutes · HITL","item":[{"name":"⚙️ Workflow Orchestration","description":"# Workflow Orchestration\n\nAI-powered workflow automation: create, execute, and monitor multi-step agent workflows. Define workflow templates, configure triggers, and track execution status with detailed KPI statistics.","item":[{"name":"Decide on approval","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/approvals/decide","host":["{{base_url}}"],"path":["approvals","decide"]},"description":"Makes an approval decision (approved or rejected) for an approval step.\n\n---\n**Tool-ID:** `po_approval_decide` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_approval_decide`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"approval_id","type":"text","description":"**REQUIRED** | Approval-ID (e.g. appr_abc123) | Type: string","value":"42"},{"key":"decision","type":"text","description":"**REQUIRED** | decision: approved or rejected | Type: string | Allowed: approved, rejected","value":"approved"},{"key":"comment","type":"text","description":"*(optional)* | comment on the decision (possibly required in case of rejection) | Type: string","value":"example-value"},{"key":"user_id","type":"text","description":"*(optional)* | Approver user_id (optional, agent acts on behalf of users) | Type: string","value":"101"},{"key":"step_order","type":"text","description":"*(optional)* | Step Number (optional, for Admin/Agent access to a specific step) | Type: integer","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/approvals/decide","host":["{{base_url}}"],"path":["approvals","decide"]},"description":"Makes an approval decision (approved or rejected) for an approval step.\n\n---\n**Tool-ID:** `po_approval_decide` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_approval_decide`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"approval_id","type":"text","description":"**REQUIRED** | Approval-ID (e.g. appr_abc123) | Type: string","value":"42"},{"key":"decision","type":"text","description":"**REQUIRED** | decision: approved or rejected | Type: string | Allowed: approved, rejected","value":"approved"},{"key":"comment","type":"text","description":"*(optional)* | comment on the decision (possibly required in case of rejection) | Type: string","value":"example-value"},{"key":"user_id","type":"text","description":"*(optional)* | Approver user_id (optional, agent acts on behalf of users) | Type: string","value":"101"},{"key":"step_order","type":"text","description":"*(optional)* | Step Number (optional, for Admin/Agent access to a specific step) | Type: integer","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Get Approval Status","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/approvals/status","host":["{{base_url}}"],"path":["approvals","status"]},"description":"Returns the complete status of an approval request, including all steps, audit trail, and deadline information.\n\n---\n**Tool-ID:** `po_approval_status` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_approval_status`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"approval_id","type":"text","description":"**REQUIRED** | Approval-ID | Type: string","value":"42"}]}},"response":[]},{"name":"List Approvals","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/approvals/list","host":["{{base_url}}"],"path":["approvals","list"]},"description":"List all release requests for the account, optionally filtered by status.\n\n---\n**Tool-ID:** `po_approval_list` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_approval_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"status","type":"text","description":"*(optional)* | Status-Filter | Type: string | Allowed: pending, in_progress, approved, rejected, expired, cancelled","value":"pending"},{"key":"limit","type":"text","description":"*(optional)* | Type: integer","value":"50"},{"key":"offset","type":"text","description":"*(optional)* | Type: integer","value":"0"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/approvals/list","host":["{{base_url}}"],"path":["approvals","list"]},"description":"List all release requests for the account, optionally filtered by status.\n\n---\n**Tool-ID:** `po_approval_list` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_approval_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"status","type":"text","description":"*(optional)* | Status-Filter | Type: string | Allowed: pending, in_progress, approved, rejected, expired, cancelled","value":"pending"},{"key":"limit","type":"text","description":"*(optional)* | Type: integer","value":"50"},{"key":"offset","type":"text","description":"*(optional)* | Type: integer","value":"0"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"approvals\": [],\n    \"limit\": 50,\n    \"offset\": 0,\n    \"processing_time\": \"144.51ms\",\n    \"status\": \"success\",\n    \"total\": 0\n}"}]},{"name":"Submit document for approval","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/approvals/submit","host":["{{base_url}}"],"path":["approvals","submit"]},"description":"Submit a document for approval. Define the approver, type (sequential/parallel/arbitrary), and deadline.\n\n---\n**Tool-ID:** `po_approval_submit` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_approval_submit`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"document_id","type":"file","description":"*(optional)* | Document ID for the approval | Type: integer","src":null},{"key":"document_pofid","type":"file","description":"*(optional)* | Alternative: POFDocument ID | Type: string","src":null},{"key":"approval_type","type":"text","description":"*(optional)* | sequential = one after another, parallel = all simultaneously, any = one approval suffices | Type: string | Allowed: sequential, parallel, any","value":"sequential"},{"key":"approvers","type":"text","description":"**REQUIRED** | list the approvers | Type: array","value":"[]"},{"key":"deadline_hours","type":"text","description":"*(optional)* | Deadline in hours | Type: integer","value":"48"},{"key":"escalation_user_id","type":"text","description":"*(optional)* | User-ID for Escalation at Deadline Breach | Type: string","value":"1"},{"key":"message","type":"text","description":"*(optional)* | message an the approvers | Type: string","value":"Example text content"},{"key":"title","type":"text","description":"*(optional)* | Title the approval request | Type: string","value":"My title"},{"key":"require_comment_on_reject","type":"text","description":"*(optional)* | comment at rejection erzwingen | Type: boolean","value":"false"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/approvals/submit","host":["{{base_url}}"],"path":["approvals","submit"]},"description":"Submit a document for approval. Define the approver, type (sequential/parallel/arbitrary), and deadline.\n\n---\n**Tool-ID:** `po_approval_submit` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_approval_submit`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"document_id","type":"file","description":"*(optional)* | Document ID for the approval | Type: integer","src":null},{"key":"document_pofid","type":"file","description":"*(optional)* | Alternative: POFDocument ID | Type: string","src":null},{"key":"approval_type","type":"text","description":"*(optional)* | sequential = one after another, parallel = all simultaneously, any = one approval suffices | Type: string | Allowed: sequential, parallel, any","value":"sequential"},{"key":"approvers","type":"text","description":"**REQUIRED** | list the approvers | Type: array","value":"[]"},{"key":"deadline_hours","type":"text","description":"*(optional)* | Deadline in hours | Type: integer","value":"48"},{"key":"escalation_user_id","type":"text","description":"*(optional)* | User-ID for Escalation at Deadline Breach | Type: string","value":"1"},{"key":"message","type":"text","description":"*(optional)* | message an the approvers | Type: string","value":"Example text content"},{"key":"title","type":"text","description":"*(optional)* | Title the approval request | Type: string","value":"My title"},{"key":"require_comment_on_reject","type":"text","description":"*(optional)* | comment at rejection erzwingen | Type: boolean","value":"false"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"id\": 12345,\n    \"created_at\": \"2026-04-16T10:00:00Z\"\n}"}]},{"name":"Explain workflow (AI)","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/workflow_ai/explain","host":["{{base_url}}"],"path":["workflow_ai","explain"]},"description":"Explain Workflow: Obtain a natural language description of the functionality and steps of a specified workflow.\n\n---\n**Tool-ID:** `po_workflow_ai_explain_workflow` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workflow_ai_explain_workflow`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"raw","raw":"{\n    \"workflow\": {},\n    \"language\": \"de\",\n    \"priority\": 100\n}","options":{"raw":{"language":"json"}}}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/workflow_ai/explain","host":["{{base_url}}"],"path":["workflow_ai","explain"]},"description":"Explain Workflow: Obtain a natural language description of the functionality and steps of a specified workflow.\n\n---\n**Tool-ID:** `po_workflow_ai_explain_workflow` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workflow_ai_explain_workflow`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.","body":{"mode":"raw","raw":"{\n    \"workflow\": {},\n    \"language\": \"de\",\n    \"priority\": 100\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"explanation\": \"example\",\n            \"steps_explained\": [\n                []\n            ],\n            \"complexity_rating\": \"example\"\n        }\n    }\n}"}]},{"name":"Generate workflow","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/workflow_ai/generate","host":["{{base_url}}"],"path":["workflow_ai","generate"]},"description":"Generate Workflow with AI Let AI create a workflow from a natural language description. --- When to Use - Quickly create new workflows - Get AI suggestions for automation - Convert requirements to workflows --- Parameters | Parameter | Type | Required | Description | |-----------|------|---------.\n\n---\n**Tool-ID:** `po_workflow_ai_generate_workflow` • **Cost:** 100 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workflow_ai_generate_workflow`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"raw","raw":"{\n    \"prompt\": \"\",\n    \"include_human_tasks\": true,\n    \"add_error_handling\": true,\n    \"model\": \"ultra\",\n    \"priority\": 100\n}","options":{"raw":{"language":"json"}}}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/workflow_ai/generate","host":["{{base_url}}"],"path":["workflow_ai","generate"]},"description":"Generate Workflow with AI Let AI create a workflow from a natural language description. --- When to Use - Quickly create new workflows - Get AI suggestions for automation - Convert requirements to workflows --- Parameters | Parameter | Type | Required | Description | |-----------|------|---------.\n\n---\n**Tool-ID:** `po_workflow_ai_generate_workflow` • **Cost:** 100 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workflow_ai_generate_workflow`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.","body":{"mode":"raw","raw":"{\n    \"prompt\": \"\",\n    \"include_human_tasks\": true,\n    \"add_error_handling\": true,\n    \"model\": \"ultra\",\n    \"priority\": 100\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"generation_id\": \"00000000-0000-0000-0000-000000000001\",\n    \"generation_time_ms\": 17502,\n    \"message\": \"Workflow successful Generates\",\n    \"processing_time\": \"17634.34ms\",\n    \"status\": \"success\",\n    \"workflow\": {\n        \"name\": \"document_management_explanation_workflow\",\n        \"description\": \"A workflow for creating, reviewing, and approving a definition of document management using the PaperOffice AI Pipelines.\",\n        \"trigger_type\": \"trigger_document_uploaded\",\n        \"is_active\": true,\n        \"nodes\": [\n            {\n                \"id\": 1,\n                \"type\": \"trigger_document_uploaded\",\n                \"label\": \"Trigger_document_uploaded\",\n                \"position\": {\n                    \"x\": 100,\n                    \"y\": 200\n                },\n                \"data\": {\n                    \"label\": \"Trigger_document_uploaded\"\n                },\n                \"config\": {\n                    \"workspace_filter\": null,\n                    \"folder_filter\": null\n                }\n            },\n            {\n                \"id\": 2,\n                \"type\": \"notify\",\n                \"label\": \"Notify\",\n                \"position\": {\n                    \"x\": 500,\n                    \"y\": 200\n                },\n                \"data\": {\n                    \"label\": \"Notify\"\n                },\n                \"config\": {\n                    \"recipients\": [\n                        15\n                    ],\n                    \"title\": \"Workflow Notification\",\n                    \"message\": \"An event has occurred.\",\n                    \"priority\": \"high\",\n                    \"channels\": [\n                        \"sse\",\n                        \"bell\"\n                    ]\n                }\n            },\n            {\n                \"id\": 3,\n                \"type\": \"review\",\n                \"label\": \"Review\",\n                \"position\": {\n                    \"x\": 900,\n                    \"y\": 200\n                },\n                \"data\": {\n                    \"label\": \"Review\"\n                },\n                \"config\": {\n                    \"title\": \"Manual Audit required\",\n                    \"reviewer_role\": \"\",\n                    \"reviewer_users\": [\n                        15\n                    ],\n                    \"timeout_hours\": 24,\n                    \"allow_comments\": true,\n                    \"allow_attachments\": true,\n                    \"review_options\": [\n                        \"approve\",\n                        \"reject\",\n                        \"request_changes\"\n                    ]\n                }\n            },\n            {\n                \"id\": 4,\n                \"type\": \"notify\",\n                \"label\": \"Notify\",\n                \"position\": {\n                    \"x\": 1300,\n                    \"y\": 200\n                },\n                \"data\": {\n                    \"label\": \"Notify\"\n                },\n                \"config\": {\n                    \"recipients\": [\n                        15\n                    ],\n                    \"title\": \"Workflow Notification\",\n                    \"message\": \"An event has occurred.\",\n                    \"priority\": \"high\",\n                    \"channels\": [\n                        \"sse\",\n                        \"bell\"\n                    ]\n                }\n            },\n            {\n                \"id\": \"3_changes_requested_fallback\",\n                \"type\": \"notify\",\n                \"label\": \"Aenderungen angefordert\",\n                \"position\": {\n                    \"x\": 1200,\n                    \"y\": 450\n                },\n                \"data\": {\n                    \"label\": \"Aenderungen angefordert\"\n                },\n                \"config\": {\n                    \"title\": \"Aenderungen angefordert\",\n                    \"message\": \"The path 'changes_requested' was triggered at 'Review'.\",\n                    \"channels\": [\n                        \"in_app\"\n                    ]\n                }\n            }\n        ],\n        \"connections\": [\n            {\n                \"id\": \"edge_0\",\n                \"source\": 1,\n                \"target\": 2,\n                \"sourceHandle\": \"output\",\n                \"targetHandle\": \"input\"\n            },\n            {\n                \"id\": \"edge_1\",\n                \"source\": 2,\n                \"target\": 3,\n                \"sourceHandle\": \"output\",\n                \"targetHandle\": \"input\"\n            },\n            {\n                \"id\": \"edge_2\",\n                \"source\": 3,\n                \"target\": 4,\n                \"sourceHandle\": \"completed\",\n                \"targetHandle\": \"input\"\n            },\n            {\n                \"id\": \"edge_repair_3\",\n                \"source\": 3,\n                \"target\": \"3_changes_requested_fallback\",\n                \"sourceHandle\": \"changes_requested\",\n                \"targetHandle\": \"input\",\n                \"label\": null\n            }\n        ]\n    }\n}"}]},{"name":"Optimize workflow (AI)","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/workflow_ai/optimize","host":["{{base_url}}"],"path":["workflow_ai","optimize"]},"description":"Optimize Workflow AI analyzes and suggests optimizations. --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | template_id | string | ✅ | Workflow to optimize | --- Response json { \"success\": true, \"suggestions\": { \"type\": \"merge_steps\", \".\"\n\n---\n**Tool-ID:** `po_workflow_ai_optimize_workflow` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workflow_ai_optimize_workflow`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"raw","raw":"{\n    \"workflow\": {},\n    \"goal\": \"efficiency\",\n    \"priority\": 100\n}","options":{"raw":{"language":"json"}}}},"response":[]},{"name":"Suggest next workflow step (AI)","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/workflow_ai/suggest_next","host":["{{base_url}}"],"path":["workflow_ai","suggest_next"]},"description":"Suggest Next Step AI suggests what step to add next. --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | current_steps | array | ✅ | Existing steps | | goal | string | ❌ | What to achieve | --- Response json { \"success\": true, \"suggesti.\n\n---\n**Tool-ID:** `po_workflow_ai_suggest_next_step` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workflow_ai_suggest_next_step`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"raw","raw":"{\n    \"context\": \"\",\n    \"priority\": 100\n}","options":{"raw":{"language":"json"}}}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/workflow_ai/suggest_next","host":["{{base_url}}"],"path":["workflow_ai","suggest_next"]},"description":"Suggest Next Step AI suggests what step to add next. --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | current_steps | array | ✅ | Existing steps | | goal | string | ❌ | What to achieve | --- Response json { \"success\": true, \"suggesti.\n\n---\n**Tool-ID:** `po_workflow_ai_suggest_next_step` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workflow_ai_suggest_next_step`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.","body":{"mode":"raw","raw":"{\n    \"context\": \"\",\n    \"priority\": 100\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"suggestions\": [\n                {\n                    \"node_type\": \"example\",\n                    \"label\": \"example\",\n                    \"description\": \"example\",\n                    \"confidence\": 1\n                }\n            ]\n        }\n    }\n}"}]},{"name":"Validate workflow","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/workflow_ai/validate","host":["{{base_url}}"],"path":["workflow_ai","validate"]},"description":"Validate Workflow Check workflow for errors and issues. --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | template_id | string | ✅ | Workflow to validate | --- Response json { \"success\": true, \"valid\": true, \"warnings\": , \"errors\": }\n\n---\n**Tool-ID:** `po_workflow_ai_validate_workflow` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workflow_ai_validate_workflow`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"raw","raw":"{\n    \"workflow\": {},\n    \"priority\": 100\n}","options":{"raw":{"language":"json"}}}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/workflow_ai/validate","host":["{{base_url}}"],"path":["workflow_ai","validate"]},"description":"Validate Workflow Check workflow for errors and issues. --- Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | template_id | string | ✅ | Workflow to validate | --- Response json { \"success\": true, \"valid\": true, \"warnings\": , \"errors\": }\n\n---\n**Tool-ID:** `po_workflow_ai_validate_workflow` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_workflow_ai_validate_workflow`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.","body":{"mode":"raw","raw":"{\n    \"workflow\": {},\n    \"priority\": 100\n}","options":{"raw":{"language":"json"}}}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"is_valid\": true,\n            \"errors\": [\n                []\n            ],\n            \"warnings\": [\n                []\n            ],\n            \"suggestions\": [\n                \"example\"\n            ]\n        }\n    }\n}"}]}]},{"name":"✅ Tasks & Substitutes","description":"# Tasks & Substitutes\n\nTask management and substitution rules. Create, assign, and track tasks. Configure out-of-office substitution rules for automatic task delegation.","item":[{"name":"Create Substitute","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/substitutes/create","host":["{{base_url}}"],"path":["substitutes","create"]},"description":"Create a new delegation rule with a time period and permissions.\n\n---\n**Tool-ID:** `po_substitutes_create` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_substitutes_create`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"substitute_user_id","type":"text","description":"**REQUIRED** | User-ID of the substitute, the substitution Claims | Type: integer","value":"1"},{"key":"start_date","type":"text","description":"*(optional)* | Start date the substitution (ISO 8601, optional) | Type: string","value":"2026-04-16T00:00:00Z"},{"key":"end_date","type":"text","description":"*(optional)* | End date the substitution (ISO 8601, optional) | Type: string","value":"2026-04-16T00:00:00Z"},{"key":"substitute_id","type":"text","description":"*(optional)* | Substitute id | Type: integer","value":"1"},{"key":"valid_from","type":"text","description":"*(optional)* | Valid from | Type: string","value":"example-value"},{"key":"valid_until","type":"text","description":"*(optional)* | Valid until | Type: string","value":"example-value"},{"key":"scope","type":"text","description":"*(optional)* | Scope | Type: string","value":"example-value"},{"key":"scope_filter","type":"text","description":"*(optional)* | Scope filter | Type: object","value":"{}"},{"key":"can_approve","type":"text","description":"**REQUIRED** | Can approve | Type: boolean","value":"true"},{"key":"notify_original","type":"text","description":"**REQUIRED** | Notify original | Type: boolean","value":"true"},{"key":"reason","type":"text","description":"*(optional)* | Reason | Type: string","value":"example-value"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/substitutes/create","host":["{{base_url}}"],"path":["substitutes","create"]},"description":"Create a new delegation rule with a time period and permissions.\n\n---\n**Tool-ID:** `po_substitutes_create` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_substitutes_create`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"substitute_user_id","type":"text","description":"**REQUIRED** | User-ID of the substitute, the substitution Claims | Type: integer","value":"1"},{"key":"start_date","type":"text","description":"*(optional)* | Start date the substitution (ISO 8601, optional) | Type: string","value":"2026-04-16T00:00:00Z"},{"key":"end_date","type":"text","description":"*(optional)* | End date the substitution (ISO 8601, optional) | Type: string","value":"2026-04-16T00:00:00Z"},{"key":"substitute_id","type":"text","description":"*(optional)* | Substitute id | Type: integer","value":"1"},{"key":"valid_from","type":"text","description":"*(optional)* | Valid from | Type: string","value":"example-value"},{"key":"valid_until","type":"text","description":"*(optional)* | Valid until | Type: string","value":"example-value"},{"key":"scope","type":"text","description":"*(optional)* | Scope | Type: string","value":"example-value"},{"key":"scope_filter","type":"text","description":"*(optional)* | Scope filter | Type: object","value":"{}"},{"key":"can_approve","type":"text","description":"**REQUIRED** | Can approve | Type: boolean","value":"true"},{"key":"notify_original","type":"text","description":"**REQUIRED** | Notify original | Type: boolean","value":"true"},{"key":"reason","type":"text","description":"*(optional)* | Reason | Type: string","value":"example-value"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"success\": false,\n    \"error\": \"SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'valid_from' cannot be null\"\n}"}]},{"name":"Delete Substitute","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/substitutes/delete","host":["{{base_url}}"],"path":["substitutes","delete"]},"description":"Remove an existing delegation rule.\n\n---\n**Tool-ID:** `po_substitutes_delete` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_substitutes_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"id","type":"text","description":"**REQUIRED** | ID of the substitution rule, the deleted should be | Type: integer","value":"1"},{"key":"substitute_id","type":"text","description":"*(optional)* | Substitute id | Type: integer","value":"1"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/substitutes/delete","host":["{{base_url}}"],"path":["substitutes","delete"]},"description":"Remove an existing delegation rule.\n\n---\n**Tool-ID:** `po_substitutes_delete` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_substitutes_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"id","type":"text","description":"**REQUIRED** | ID of the substitution rule, the deleted should be | Type: integer","value":"1"},{"key":"substitute_id","type":"text","description":"*(optional)* | Substitute id | Type: integer","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"success\": false,\n    \"error\": \"ID_REQUIRED\"\n}"}]},{"name":"List active substitutes","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/substitutes/get_active","host":["{{base_url}}"],"path":["substitutes","get_active"],"query":[{"key":"user_id","value":"101","description":"**REQUIRED** | User-ID of the Users these active substitution abgefragt is (Required) | Type: integer","disabled":false}]},"description":"Get active substitutes.\n\n---\n**Tool-ID:** `po_substitutes_get_active` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_substitutes_get_active`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/substitutes/get_active","host":["{{base_url}}"],"path":["substitutes","get_active"],"query":[{"key":"user_id","value":"101","description":"**REQUIRED** | User-ID of the Users these active substitution abgefragt is (Required) | Type: integer","disabled":false}]},"description":"Get active substitutes.\n\n---\n**Tool-ID:** `po_substitutes_get_active` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_substitutes_get_active`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"success\": true,\n    \"substitute\": null,\n    \"has_active_substitute\": false\n}"}]},{"name":"List Substitutes","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/substitutes/list","host":["{{base_url}}"],"path":["substitutes","list"],"query":[{"key":"user_id","value":"101","description":"*(optional)* | User id | Type: integer","disabled":true},{"key":"include_inactive","value":"false","description":"*(optional)* | Include inactive | Type: boolean","disabled":true}]},"description":"List configured substitutes.\n\n---\n**Tool-ID:** `po_substitutes_list` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_substitutes_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/substitutes/list","host":["{{base_url}}"],"path":["substitutes","list"],"query":[{"key":"user_id","value":"101","description":"*(optional)* | User id | Type: integer","disabled":true},{"key":"include_inactive","value":"false","description":"*(optional)* | Include inactive | Type: boolean","disabled":true}]},"description":"List configured substitutes.\n\n---\n**Tool-ID:** `po_substitutes_list` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_substitutes_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"success\": true,\n    \"substitutes\": []\n}"}]},{"name":"List substitutes delegated to me","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/substitutes/list_delegated_to_me","host":["{{base_url}}"],"path":["substitutes","list_delegated_to_me"]},"description":"Delegations where I at the substitute.\n\n---\n**Tool-ID:** `po_substitutes_list_delegated` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_substitutes_list_delegated`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/substitutes/list_delegated_to_me","host":["{{base_url}}"],"path":["substitutes","list_delegated_to_me"]},"description":"Delegations where I at the substitute.\n\n---\n**Tool-ID:** `po_substitutes_list_delegated` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_substitutes_list_delegated`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"success\": true,\n    \"delegations\": []\n}"}]},{"name":"Update Substitute","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/substitutes/update","host":["{{base_url}}"],"path":["substitutes","update"]},"description":"Updates an existing delegation rule (period, permissions, status).\n\n---\n**Tool-ID:** `po_substitutes_update` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_substitutes_update`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"id","type":"text","description":"**REQUIRED** | ID of the substitution rule, the updates should be | Type: integer","value":"1"},{"key":"substitute_id","type":"text","description":"*(optional)* | Substitute id | Type: integer","value":"1"},{"key":"valid_from","type":"text","description":"**REQUIRED** | Valid from | Type: string","value":"example-value"},{"key":"valid_until","type":"text","description":"**REQUIRED** | Valid until | Type: string","value":"example-value"},{"key":"scope","type":"text","description":"**REQUIRED** | Scope | Type: string","value":"example-value"},{"key":"scope_filter","type":"text","description":"**REQUIRED** | Scope filter | Type: object","value":"{}"},{"key":"can_approve","type":"text","description":"**REQUIRED** | Can approve | Type: boolean","value":"true"},{"key":"notify_original","type":"text","description":"**REQUIRED** | Notify original | Type: boolean","value":"true"},{"key":"reason","type":"text","description":"**REQUIRED** | Reason | Type: string","value":"example-value"},{"key":"is_active","type":"text","description":"**REQUIRED** | Is active | Type: boolean","value":"true"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/substitutes/update","host":["{{base_url}}"],"path":["substitutes","update"]},"description":"Updates an existing delegation rule (period, permissions, status).\n\n---\n**Tool-ID:** `po_substitutes_update` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_substitutes_update`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"id","type":"text","description":"**REQUIRED** | ID of the substitution rule, the updates should be | Type: integer","value":"1"},{"key":"substitute_id","type":"text","description":"*(optional)* | Substitute id | Type: integer","value":"1"},{"key":"valid_from","type":"text","description":"**REQUIRED** | Valid from | Type: string","value":"example-value"},{"key":"valid_until","type":"text","description":"**REQUIRED** | Valid until | Type: string","value":"example-value"},{"key":"scope","type":"text","description":"**REQUIRED** | Scope | Type: string","value":"example-value"},{"key":"scope_filter","type":"text","description":"**REQUIRED** | Scope filter | Type: object","value":"{}"},{"key":"can_approve","type":"text","description":"**REQUIRED** | Can approve | Type: boolean","value":"true"},{"key":"notify_original","type":"text","description":"**REQUIRED** | Notify original | Type: boolean","value":"true"},{"key":"reason","type":"text","description":"**REQUIRED** | Reason | Type: string","value":"example-value"},{"key":"is_active","type":"text","description":"**REQUIRED** | Is active | Type: boolean","value":"true"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"success\": false,\n    \"error\": \"ID_REQUIRED\"\n}"}]},{"name":"Claim task","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/workflow_tasks/claim","host":["{{base_url}}"],"path":["workflow_tasks","claim"]},"description":"Takes on a task\n\n---\n**Tool-ID:** `po_tasks_claim_task` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_tasks_claim_task`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"task_id","type":"text","description":"*(optional)* | ID of the task | Type: string","value":"42"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/workflow_tasks/claim","host":["{{base_url}}"],"path":["workflow_tasks","claim"]},"description":"Takes on a task\n\n---\n**Tool-ID:** `po_tasks_claim_task` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_tasks_claim_task`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"task_id","type":"text","description":"*(optional)* | ID of the task | Type: string","value":"42"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"claimed\": true,\n            \"task_id\": \"example\",\n            \"claimed_by\": \"example\"\n        }\n    }\n}"}]},{"name":"Complete task","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/workflow_tasks/complete","host":["{{base_url}}"],"path":["workflow_tasks","complete"]},"description":"Mark a task as completed\n\n---\n**Tool-ID:** `po_tasks_complete_task` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_tasks_complete_task`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"task_id","type":"text","description":"*(optional)* | ID of the task | Type: string","value":"42"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/workflow_tasks/complete","host":["{{base_url}}"],"path":["workflow_tasks","complete"]},"description":"Mark a task as completed\n\n---\n**Tool-ID:** `po_tasks_complete_task` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_tasks_complete_task`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"task_id","type":"text","description":"*(optional)* | ID of the task | Type: string","value":"42"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"completed\": true,\n            \"task_id\": \"example\",\n            \"decision\": \"example\",\n            \"workflow_continued\": true\n        }\n    }\n}"}]},{"name":"Get task details","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/workflow_tasks/get","host":["{{base_url}}"],"path":["workflow_tasks","get"]},"description":"Task Details\n\n---\n**Tool-ID:** `po_tasks_get_task_details` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_tasks_get_task_details`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"task_id","type":"text","description":"*(optional)* | ID of the task | Type: string","value":"42"}]}},"response":[]},{"name":"List my tasks","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/workflow_tasks/list","host":["{{base_url}}"],"path":["workflow_tasks","list"]},"description":"List all tasks of the current user\n\n---\n**Tool-ID:** `po_tasks_list_my_tasks` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_tasks_list_my_tasks`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"status","type":"text","description":"*(optional)* | Filter after Status | Type: string | Allowed: pending, in_progress, completed, rejected, expired, escalated","value":"pending"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: string | Allowed: low, normal, high, urgent","value":"low"},{"key":"step_type","type":"text","description":"*(optional)* | Filter after Step-type (e.g. approval, review, manual_input) | Type: string","value":"example-value"},{"key":"limit","type":"text","description":"*(optional)* | Max. Tasks | Type: integer | Min: 1 | Max: 100","value":"50"},{"key":"offset","type":"text","description":"*(optional)* | Pagination-Offset | Type: integer","value":"0"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/workflow_tasks/list","host":["{{base_url}}"],"path":["workflow_tasks","list"]},"description":"List all tasks of the current user\n\n---\n**Tool-ID:** `po_tasks_list_my_tasks` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_tasks_list_my_tasks`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.","body":{"mode":"formdata","formdata":[{"key":"status","type":"text","description":"*(optional)* | Filter after Status | Type: string | Allowed: pending, in_progress, completed, rejected, expired, escalated","value":"pending"},{"key":"priority","type":"text","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: string | Allowed: low, normal, high, urgent","value":"low"},{"key":"step_type","type":"text","description":"*(optional)* | Filter after Step-type (e.g. approval, review, manual_input) | Type: string","value":"example-value"},{"key":"limit","type":"text","description":"*(optional)* | Max. Tasks | Type: integer | Min: 1 | Max: 100","value":"50"},{"key":"offset","type":"text","description":"*(optional)* | Pagination-Offset | Type: integer","value":"0"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"has_more\": false,\n    \"limit\": 50,\n    \"offset\": 0,\n    \"processing_time\": \"44.57ms\",\n    \"status\": \"success\",\n    \"tasks\": [],\n    \"total\": 0\n}"}]},{"name":"Mark Task Read","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/workflow_tasks/mark_read","host":["{{base_url}}"],"path":["workflow_tasks","mark_read"]},"description":"Mark a task as read\n\n---\n**Tool-ID:** `po_tasks_mark_as_read` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_tasks_mark_as_read`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"task_id","type":"text","description":"*(optional)* | ID of the task | Type: string","value":"42"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/workflow_tasks/mark_read","host":["{{base_url}}"],"path":["workflow_tasks","mark_read"]},"description":"Mark a task as read\n\n---\n**Tool-ID:** `po_tasks_mark_as_read` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_tasks_mark_as_read`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"task_id","type":"text","description":"*(optional)* | ID of the task | Type: string","value":"42"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"job_id\": \"job_01HXY1234ABCDEF\",\n    \"message\": \"Operation completed successfully\",\n    \"pipeline\": \"example-pipeline\",\n    \"operation\": \"example\",\n    \"processing_time\": \"example\",\n    \"server\": \"example\",\n    \"timing\": {\n        \"actual_ms\": 150,\n        \"expected_ms\": 150,\n        \"timeout_ms\": 150,\n        \"speed_factor\": 1,\n        \"performance\": \"example\"\n    },\n    \"result\": {\n        \"status\": \"completed\",\n        \"message\": \"Operation completed successfully\",\n        \"duration_ms\": \"example\",\n        \"output\": {\n            \"marked\": true,\n            \"task_id\": \"example\"\n        }\n    }\n}"}]}]},{"name":"👁️ HITL (Human-in-the-Loop)","description":"# HITL (Human-in-the-Loop)\n\nHuman review workflows for AI-processed documents. Route documents for manual review, claim review tasks, approve or reject results, and manage review queues with SLA tracking.","item":[{"name":"Create HITL Config","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/hitl_config/create","host":["{{base_url}}"],"path":["hitl_config","create"]},"description":"Create HITL review configuration with trigger rules, review fields, SLA and assignment settings.\n\n---\n**Tool-ID:** `po_hitl_config_create` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_config_create`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"name","type":"text","description":"**REQUIRED** | Name (Required) | Type: string","value":"My item"},{"key":"document_type","type":"file","description":"*(optional)* | Type: string","src":null},{"key":"workspace_id","type":"text","description":"*(optional)* | Type: string","value":"1"},{"key":"trigger_rules","type":"text","description":"**REQUIRED** | Trigger Rules (Mandatory, min. 1). Each rule needs: id, action (hitl|escalate|reject_auto). For field_level/document_level: field, operator, value. | Type: array","value":"[]"},{"key":"review_fields","type":"text","description":"*(optional)* | Type: array","value":"[]"},{"key":"binary_checks","type":"text","description":"*(optional)* | Type: array","value":"[]"},{"key":"reject_reasons","type":"text","description":"*(optional)* | Type: array","value":"[]"},{"key":"sla_config","type":"text","description":"**REQUIRED** | SLA (max_review_time_minutes Required) | Type: object","value":"{}"},{"key":"assignment_config","type":"text","description":"**REQUIRED** | mode Required | Type: object","value":"{}"},{"key":"result_config","type":"text","description":"*(optional)* | Type: object","value":"{}"},{"key":"instruction_text","type":"text","description":"*(optional)* | Type: string","value":"example-value"},{"key":"credits_pro_review","type":"text","description":"*(optional)* | Type: integer","value":"1"},{"key":"match_mode","type":"text","description":"*(optional)* | Type: string | Allowed: any, all","value":"any"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/hitl_config/create","host":["{{base_url}}"],"path":["hitl_config","create"]},"description":"Create HITL review configuration with trigger rules, review fields, SLA and assignment settings.\n\n---\n**Tool-ID:** `po_hitl_config_create` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_config_create`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"name","type":"text","description":"**REQUIRED** | Name (Required) | Type: string","value":"My item"},{"key":"document_type","type":"file","description":"*(optional)* | Type: string","src":null},{"key":"workspace_id","type":"text","description":"*(optional)* | Type: string","value":"1"},{"key":"trigger_rules","type":"text","description":"**REQUIRED** | Trigger Rules (Mandatory, min. 1). Each rule needs: id, action (hitl|escalate|reject_auto). For field_level/document_level: field, operator, value. | Type: array","value":"[]"},{"key":"review_fields","type":"text","description":"*(optional)* | Type: array","value":"[]"},{"key":"binary_checks","type":"text","description":"*(optional)* | Type: array","value":"[]"},{"key":"reject_reasons","type":"text","description":"*(optional)* | Type: array","value":"[]"},{"key":"sla_config","type":"text","description":"**REQUIRED** | SLA (max_review_time_minutes Required) | Type: object","value":"{}"},{"key":"assignment_config","type":"text","description":"**REQUIRED** | mode Required | Type: object","value":"{}"},{"key":"result_config","type":"text","description":"*(optional)* | Type: object","value":"{}"},{"key":"instruction_text","type":"text","description":"*(optional)* | Type: string","value":"example-value"},{"key":"credits_pro_review","type":"text","description":"*(optional)* | Type: integer","value":"1"},{"key":"match_mode","type":"text","description":"*(optional)* | Type: string | Allowed: any, all","value":"any"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"config\": []\n}"}]},{"name":"Delete HITL Config","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/hitl_config/delete","host":["{{base_url}}"],"path":["hitl_config","delete"]},"description":"Soft-delete HITL configuration (sets is_active=0).\n\n---\n**Tool-ID:** `po_hitl_config_delete` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_config_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"uuid","type":"text","description":"**REQUIRED** | Config-UUID (Required) | Type: string","value":"00000000-0000-0000-0000-000000000001"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/hitl_config/delete","host":["{{base_url}}"],"path":["hitl_config","delete"]},"description":"Soft-delete HITL configuration (sets is_active=0).\n\n---\n**Tool-ID:** `po_hitl_config_delete` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_config_delete`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"uuid","type":"text","description":"**REQUIRED** | Config-UUID (Required) | Type: string","value":"00000000-0000-0000-0000-000000000001"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\"\n}"}]},{"name":"Get Document Field Keys","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/hitl_config/field_keys","host":["{{base_url}}"],"path":["hitl_config","field_keys"]},"description":"Get available document meta field keys for review field config.\n\n---\n**Tool-ID:** `po_hitl_config_field_keys` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_config_field_keys`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/hitl_config/field_keys","host":["{{base_url}}"],"path":["hitl_config","field_keys"]},"description":"Get available document meta field keys for review field config.\n\n---\n**Tool-ID:** `po_hitl_config_field_keys` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_config_field_keys`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"data\": [\n        {\n            \"field_key\": \"__document__analysis__fraud_score\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__analysis__fraud_score\",\n                \"labels\": {\n                    \"de\": \"Fraud Score\",\n                    \"en\": \"Fraud Score\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"analysis\",\n                        \"en\": \"Analysis\"\n                    }\n                },\n                \"type\": \"number\"\n            }\n        },\n        {\n            \"field_key\": \"__document__analysis__fraud_score_reasoning\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__analysis__fraud_score_reasoning\",\n                \"labels\": {\n                    \"de\": \"Fraud Score Reasoning\",\n                    \"en\": \"Fraud Score Reasoning\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"analysis\",\n                        \"en\": \"Analysis\"\n                    }\n                },\n                \"type\": \"string\"\n            }\n        },\n        {\n            \"field_key\": \"__document__content__extraction__keywords\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__content__extraction__keywords\",\n                \"labels\": {\n                    \"de\": \"__document__content__extraction__keywords\",\n                    \"en\": \"__document__content__extraction__keywords\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"array\"\n            }\n        },\n        {\n            \"field_key\": \"__document__content__extraction__summary_header\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__content__extraction__summary_header\",\n                \"labels\": {\n                    \"de\": \"__document__content__extraction__summary_header\",\n                    \"en\": \"__document__content__extraction__summary_header\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"string\"\n            }\n        },\n        {\n            \"field_key\": \"__document__content__extraction__summary_text\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__content__extraction__summary_text\",\n                \"labels\": {\n                    \"de\": \"__document__content__extraction__summary_text\",\n                    \"en\": \"__document__content__extraction__summary_text\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"string\"\n            }\n        },\n        {\n            \"field_key\": \"__document__data__basic__page_count\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__data__basic__page_count\",\n                \"labels\": {\n                    \"de\": \"pageszahl\",\n                    \"en\": \"pageszahl\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"Basisdaten\",\n                        \"en\": \"Basic Data\"\n                    }\n                },\n                \"type\": \"number\"\n            }\n        },\n        {\n            \"field_key\": \"__document__data__classification__direction\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__data__classification__direction\",\n                \"labels\": {\n                    \"de\": \"__document__data__classification__direction\",\n                    \"en\": \"__document__data__classification__direction\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"string\"\n            }\n        },\n        {\n            \"field_key\": \"__document__data__classification__direction_original\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__data__classification__direction_original\",\n                \"labels\": {\n                    \"de\": \"Document Data Classification Direction Original\",\n                    \"en\": \"Document Data Classification Direction Original\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"Allgemein\",\n                        \"en\": \"General\"\n                    }\n                },\n                \"type\": \"text\"\n            }\n        },\n        {\n            \"field_key\": \"__document__data__classification__document_type\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__data__classification__document_type\",\n                \"labels\": {\n                    \"de\": \"__document__data__classification__document_type\",\n                    \"en\": \"__document__data__classification__document_type\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"array\"\n            }\n        },\n        {\n            \"field_key\": \"__document__data__classification__document_type_original\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__data__classification__document_type_original\",\n                \"labels\": {\n                    \"de\": \"Document Data Classification Document Type Original\",\n                    \"en\": \"Document Data Classification Document Type Original\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"Allgemein\",\n                        \"en\": \"General\"\n                    }\n                },\n                \"type\": \"text\"\n            }\n        },\n        {\n            \"field_key\": \"__document__data__dates__date_created\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__data__dates__date_created\",\n                \"labels\": {\n                    \"de\": \"__document__data__dates__date_created\",\n                    \"en\": \"__document__data__dates__date_created\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"date\"\n            }\n        },\n        {\n            \"field_key\": \"__document__data__dates__date_delivery\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__data__dates__date_delivery\",\n                \"labels\": {\n                    \"de\": \"__document__data__dates__date_delivery\",\n                    \"en\": \"__document__data__dates__date_delivery\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"date\"\n            }\n        },\n        {\n            \"field_key\": \"__document__data__dates__date_due\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__data__dates__date_due\",\n                \"labels\": {\n                    \"de\": \"__document__data__dates__date_due\",\n                    \"en\": \"__document__data__dates__date_due\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"date\"\n            }\n        },\n        {\n            \"field_key\": \"__document__data__dates__date_issued\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__data__dates__date_issued\",\n                \"labels\": {\n                    \"de\": \"__document__data__dates__date_issued\",\n                    \"en\": \"__document__data__dates__date_issued\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"date\"\n            }\n        },\n        {\n            \"field_key\": \"__document__data__dates__date_order\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__data__dates__date_order\",\n                \"labels\": {\n                    \"de\": \"__document__data__dates__date_order\",\n                    \"en\": \"__document__data__dates__date_order\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"date\"\n            }\n        },\n        {\n            \"field_key\": \"__document__data__dates__date_valid_until\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__data__dates__date_valid_until\",\n                \"labels\": {\n                    \"de\": \"__document__data__dates__date_valid_until\",\n                    \"en\": \"__document__data__dates__date_valid_until\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"date\"\n            }\n        },\n        {\n            \"field_key\": \"__document__data__metadata__name_suggestion\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__data__metadata__name_suggestion\",\n                \"labels\": {\n                    \"de\": \"__document__data__metadata__name_suggestion\",\n                    \"en\": \"__document__data__metadata__name_suggestion\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"string\"\n            }\n        },\n        {\n            \"field_key\": \"__document__data__metadata__save_paths\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__data__metadata__save_paths\",\n                \"labels\": {\n                    \"de\": \"__document__data__metadata__save_paths\",\n                    \"en\": \"__document__data__metadata__save_paths\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"array\"\n            }\n        },\n        {\n            \"field_key\": \"__document__data__workflow__action_required\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__data__workflow__action_required\",\n                \"labels\": {\n                    \"de\": \"__document__data__workflow__action_required\",\n                    \"en\": \"__document__data__workflow__action_required\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"string\"\n            }\n        },\n        {\n            \"field_key\": \"__document__data__workflow__action_required_by_date\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__data__workflow__action_required_by_date\",\n                \"labels\": {\n                    \"de\": \"__document__data__workflow__action_required_by_date\",\n                    \"en\": \"__document__data__workflow__action_required_by_date\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"date\"\n            }\n        },\n        {\n            \"field_key\": \"__document__data__workflow__state\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__data__workflow__state\",\n                \"labels\": {\n                    \"de\": \"__document__data__workflow__state\",\n                    \"en\": \"__document__data__workflow__state\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"array\"\n            }\n        },\n        {\n            \"field_key\": \"__document__file__pages__total_count\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"__document__file__pages__total_count\",\n                \"labels\": {\n                    \"de\": \"__document__file__pages__total_count\",\n                    \"en\": \"__document__file__pages__total_count\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"number\"\n            }\n        },\n        {\n            \"field_key\": \"_document__data__classification__locale\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"_document__data__classification__locale\",\n                \"labels\": {\n                    \"de\": \"_document__data__classification__locale\",\n                    \"en\": \"_document__data__classification__locale\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"string\"\n            }\n        },\n        {\n            \"field_key\": \"_document__data__financial__currency\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"_document__data__financial__currency\",\n                \"labels\": {\n                    \"de\": \"_document__data__financial__currency\",\n                    \"en\": \"_document__data__financial__currency\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"string\"\n            }\n        },\n        {\n            \"field_key\": \"_document__data__financial__gross_amount\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"_document__data__financial__gross_amount\",\n                \"labels\": {\n                    \"de\": \"_document__data__financial__gross_amount\",\n                    \"en\": \"_document__data__financial__gross_amount\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"decimal\"\n            }\n        },\n        {\n            \"field_key\": \"_document__data__financial__net_amount\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"_document__data__financial__net_amount\",\n                \"labels\": {\n                    \"de\": \"_document__data__financial__net_amount\",\n                    \"en\": \"_document__data__financial__net_amount\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"decimal\"\n            }\n        },\n        {\n            \"field_key\": \"_document__data__financial__payment_method\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"_document__data__financial__payment_method\",\n                \"labels\": {\n                    \"de\": \"_document__data__financial__payment_method\",\n                    \"en\": \"_document__data__financial__payment_method\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"string\"\n            }\n        },\n        {\n            \"field_key\": \"_document__data__financial__publisher_tax_id\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"_document__data__financial__publisher_tax_id\",\n                \"labels\": {\n                    \"de\": \"_document__data__financial__publisher_tax_id\",\n                    \"en\": \"_document__data__financial__publisher_tax_id\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"string\"\n            }\n        },\n        {\n            \"field_key\": \"_document__data__financial__total_amount\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"_document__data__financial__total_amount\",\n                \"labels\": {\n                    \"de\": \"_document__data__financial__total_amount\",\n                    \"en\": \"_document__data__financial__total_amount\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"decimal\"\n            }\n        },\n        {\n            \"field_key\": \"_document__data__financial__vat_amount\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"_document__data__financial__vat_amount\",\n                \"labels\": {\n                    \"de\": \"_document__data__financial__vat_amount\",\n                    \"en\": \"_document__data__financial__vat_amount\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"decimal\"\n            }\n        },\n        {\n            \"field_key\": \"_document__data__financial__vat_breakdown\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"_document__data__financial__vat_breakdown\",\n                \"labels\": {\n                    \"de\": \"_document__data__financial__vat_breakdown\",\n                    \"en\": \"_document__data__financial__vat_breakdown\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"json\"\n            }\n        },\n        {\n            \"field_key\": \"_document__data__metadata__document_number\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"_document__data__metadata__document_number\",\n                \"labels\": {\n                    \"de\": \"_document__data__metadata__document_number\",\n                    \"en\": \"_document__data__metadata__document_number\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"string\"\n            }\n        },\n        {\n            \"field_key\": \"_document__data__metadata__reference_number\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"_document__data__metadata__reference_number\",\n                \"labels\": {\n                    \"de\": \"_document__data__metadata__reference_number\",\n                    \"en\": \"_document__data__metadata__reference_number\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"string\"\n            }\n        },\n        {\n            \"field_key\": \"_document__data__metadata__transaction_number\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"_document__data__metadata__transaction_number\",\n                \"labels\": {\n                    \"de\": \"_document__data__metadata__transaction_number\",\n                    \"en\": \"_document__data__metadata__transaction_number\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"string\"\n            }\n        },\n        {\n            \"field_key\": \"_document__data__parties__publisher\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"_document__data__parties__publisher\",\n                \"labels\": {\n                    \"de\": \"_document__data__parties__publisher\",\n                    \"en\": \"_document__data__parties__publisher\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"string\"\n            }\n        },\n        {\n            \"field_key\": \"_document__data__parties__publisher_address\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"_document__data__parties__publisher_address\",\n                \"labels\": {\n                    \"de\": \"_document__data__parties__publisher_address\",\n                    \"en\": \"_document__data__parties__publisher_address\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"string\"\n            }\n        },\n        {\n            \"field_key\": \"_document__data__parties__publisher_email\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"_document__data__parties__publisher_email\",\n                \"labels\": {\n                    \"de\": \"_document__data__parties__publisher_email\",\n                    \"en\": \"_document__data__parties__publisher_email\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"string\"\n            }\n        },\n        {\n            \"field_key\": \"_document__data__parties__publisher_phone\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"_document__data__parties__publisher_phone\",\n                \"labels\": {\n                    \"de\": \"_document__data__parties__publisher_phone\",\n                    \"en\": \"_document__data__parties__publisher_phone\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"string\"\n            }\n        },\n        {\n            \"field_key\": \"_document__data__parties__recipient\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"_document__data__parties__recipient\",\n                \"labels\": {\n                    \"de\": \"_document__data__parties__recipient\",\n                    \"en\": \"_document__data__parties__recipient\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"string\"\n            }\n        },\n        {\n            \"field_key\": \"_document__data__parties__recipient_address\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"_document__data__parties__recipient_address\",\n                \"labels\": {\n                    \"de\": \"_document__data__parties__recipient_address\",\n                    \"en\": \"_document__data__parties__recipient_address\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"string\"\n            }\n        },\n        {\n            \"field_key\": \"_document__data__workflow__priority\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"_document__data__workflow__priority\",\n                \"labels\": {\n                    \"de\": \"_document__data__workflow__priority\",\n                    \"en\": \"_document__data__workflow__priority\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"AI-IDP\",\n                        \"en\": \"AI-IDP\"\n                    }\n                },\n                \"type\": \"number\"\n            }\n        },\n        {\n            \"field_key\": \"_document__data__workflow__priority_original\",\n            \"config_data\": {\n                \"source\": \"ai_idp\",\n                \"auto_generated\": true,\n                \"created_by\": \"harvester\",\n                \"field_path\": \"_document__data__workflow__priority_original\",\n                \"labels\": {\n                    \"de\": \"Document Data Workflow Priority Original\",\n                    \"en\": \"Document Data Workflow Priority Original\"\n                },\n                \"section\": {\n                    \"keyname\": \"ai_idp\",\n                    \"labels\": {\n                        \"de\": \"Allgemein\",\n                        \"en\": \"General\"\n                    }\n                },\n                \"type\": \"text\"\n            }\n        }\n    ],\n    \"processing_time\": \"218.56ms\",\n    \"status\": \"success\",\n    \"total\": 42\n}"}]},{"name":"Get HITL Config","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/hitl_config/get","host":["{{base_url}}"],"path":["hitl_config","get"],"query":[{"key":"uuid","value":"00000000-0000-0000-0000-000000000001","description":"*(optional)* | Type: string","disabled":true},{"key":"config_id","value":"1","description":"*(optional)* | Type: integer","disabled":true}]},"description":"Get single HITL configuration by UUID or ID.\n\n---\n**Tool-ID:** `po_hitl_config_get` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_config_get`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Get HITL config analytics","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/hitl_config/analytics","host":["{{base_url}}"],"path":["hitl_config","analytics"]},"description":"Detailed analytics for a HITL config.\n\n---\n**Tool-ID:** `po_hitl_config_analytics` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_config_analytics`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"config_uuid","type":"text","description":"**REQUIRED** | Config-UUID (Required) | Type: string","value":"00000000-0000-0000-0000-000000000001"},{"key":"date_from","type":"text","description":"*(optional)* | Type: string","value":"2026-04-16"},{"key":"date_to","type":"text","description":"*(optional)* | Type: string","value":"2026-04-16"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/hitl_config/analytics","host":["{{base_url}}"],"path":["hitl_config","analytics"]},"description":"Detailed analytics for a HITL config.\n\n---\n**Tool-ID:** `po_hitl_config_analytics` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_config_analytics`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"config_uuid","type":"text","description":"**REQUIRED** | Config-UUID (Required) | Type: string","value":"00000000-0000-0000-0000-000000000001"},{"key":"date_from","type":"text","description":"*(optional)* | Type: string","value":"2026-04-16"},{"key":"date_to","type":"text","description":"*(optional)* | Type: string","value":"2026-04-16"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"daily\": [],\n    \"data\": {\n        \"total_reviews\": 0,\n        \"approved\": 0,\n        \"rejected\": 0,\n        \"escalated\": 0,\n        \"approve_rate\": null,\n        \"reject_rate\": null,\n        \"escalate_rate\": null,\n        \"avg_duration_seconds\": 0,\n        \"median_duration_seconds\": null,\n        \"p95_duration_seconds\": null,\n        \"sla_compliance_rate\": null,\n        \"sla_met\": 0,\n        \"sla_breached\": 0,\n        \"gold_accuracy\": null,\n        \"gold_total\": 0,\n        \"gold_correct\": 0,\n        \"total_credits\": 0,\n        \"avg_credits\": 0,\n        \"total_postpones\": 0\n    },\n    \"period\": {\n        \"days\": 30,\n        \"since\": \"2026-03-09 15:21:09\"\n    },\n    \"processing_time\": \"118.92ms\",\n    \"reject_reasons\": [],\n    \"status\": \"success\",\n    \"top_reviewers\": []\n}"}]},{"name":"Get HITL reviewer performance stats","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/hitl_config/reviewer_stats","host":["{{base_url}}"],"path":["hitl_config","reviewer_stats"]},"description":"Per-reviewer performance stats for a HITL config.\n\n---\n**Tool-ID:** `po_hitl_config_reviewer_stats` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_config_reviewer_stats`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"config_uuid","type":"text","description":"**REQUIRED** | Config-UUID (Required) | Type: string","value":"00000000-0000-0000-0000-000000000001"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/hitl_config/reviewer_stats","host":["{{base_url}}"],"path":["hitl_config","reviewer_stats"]},"description":"Per-reviewer performance stats for a HITL config.\n\n---\n**Tool-ID:** `po_hitl_config_reviewer_stats` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_config_reviewer_stats`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"config_uuid","type":"text","description":"**REQUIRED** | Config-UUID (Required) | Type: string","value":"00000000-0000-0000-0000-000000000001"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"data\": [],\n    \"processing_time\": \"146.21ms\",\n    \"status\": \"success\",\n    \"total\": 0\n}"}]},{"name":"List Config Reviewers","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/hitl_config/list_reviewers","host":["{{base_url}}"],"path":["hitl_config","list_reviewers"],"query":[{"key":"config_uuid","value":"00000000-0000-0000-0000-000000000001","description":"*(optional)* | Optional: Config-UUID To Reviewer a specific HITL-Config zu filter | Type: string","disabled":true}]},"description":"List reviewers assigned to account HITL configs.\n\n---\n**Tool-ID:** `po_hitl_config_list_reviewers` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_config_list_reviewers`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/hitl_config/list_reviewers","host":["{{base_url}}"],"path":["hitl_config","list_reviewers"],"query":[{"key":"config_uuid","value":"00000000-0000-0000-0000-000000000001","description":"*(optional)* | Optional: Config-UUID To Reviewer a specific HITL-Config zu filter | Type: string","disabled":true}]},"description":"List reviewers assigned to account HITL configs.\n\n---\n**Tool-ID:** `po_hitl_config_list_reviewers` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_config_list_reviewers`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"data\": [],\n    \"processing_time\": \"62.67ms\",\n    \"status\": \"success\",\n    \"total\": 0\n}"}]},{"name":"List HITL Configs","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/hitl_config/list","host":["{{base_url}}"],"path":["hitl_config","list"],"query":[{"key":"include_inactive","value":"false","description":"*(optional)* | Type: boolean","disabled":true}]},"description":"List all HITL configurations for the account.\n\n---\n**Tool-ID:** `po_hitl_config_list` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_config_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[{"name":"Example Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/hitl_config/list","host":["{{base_url}}"],"path":["hitl_config","list"],"query":[{"key":"include_inactive","value":"false","description":"*(optional)* | Type: boolean","disabled":true}]},"description":"List all HITL configurations for the account.\n\n---\n**Tool-ID:** `po_hitl_config_list` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_config_list`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"data\": [],\n    \"processing_time\": \"100.61ms\",\n    \"status\": \"success\",\n    \"total\": 0\n}"}]},{"name":"Update HITL Config","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/hitl_config/update","host":["{{base_url}}"],"path":["hitl_config","update"]},"description":"Update HITL configuration. Partial updates supported.\n\n---\n**Tool-ID:** `po_hitl_config_update` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_config_update`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"uuid","type":"text","description":"**REQUIRED** | Config-UUID (Required) | Type: string","value":"00000000-0000-0000-0000-000000000001"},{"key":"name","type":"text","description":"*(optional)* | Type: string","value":"My item"},{"key":"trigger_rules","type":"text","description":"*(optional)* | Type: array","value":"[]"},{"key":"review_fields","type":"text","description":"*(optional)* | Type: array","value":"[]"},{"key":"binary_checks","type":"text","description":"*(optional)* | Type: array","value":"[]"},{"key":"reject_reasons","type":"text","description":"*(optional)* | Type: array","value":"[]"},{"key":"sla_config","type":"text","description":"*(optional)* | Type: object","value":"{}"},{"key":"assignment_config","type":"text","description":"*(optional)* | Type: object","value":"{}"},{"key":"result_config","type":"text","description":"*(optional)* | Type: object","value":"{}"},{"key":"instruction_text","type":"text","description":"*(optional)* | Type: string","value":"example-value"},{"key":"credits_pro_review","type":"text","description":"*(optional)* | Type: integer","value":"1"},{"key":"match_mode","type":"text","description":"*(optional)* | Type: string | Allowed: any, all","value":"any"},{"key":"is_active","type":"text","description":"*(optional)* | Type: boolean","value":"true"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/hitl_config/update","host":["{{base_url}}"],"path":["hitl_config","update"]},"description":"Update HITL configuration. Partial updates supported.\n\n---\n**Tool-ID:** `po_hitl_config_update` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_config_update`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"uuid","type":"text","description":"**REQUIRED** | Config-UUID (Required) | Type: string","value":"00000000-0000-0000-0000-000000000001"},{"key":"name","type":"text","description":"*(optional)* | Type: string","value":"My item"},{"key":"trigger_rules","type":"text","description":"*(optional)* | Type: array","value":"[]"},{"key":"review_fields","type":"text","description":"*(optional)* | Type: array","value":"[]"},{"key":"binary_checks","type":"text","description":"*(optional)* | Type: array","value":"[]"},{"key":"reject_reasons","type":"text","description":"*(optional)* | Type: array","value":"[]"},{"key":"sla_config","type":"text","description":"*(optional)* | Type: object","value":"{}"},{"key":"assignment_config","type":"text","description":"*(optional)* | Type: object","value":"{}"},{"key":"result_config","type":"text","description":"*(optional)* | Type: object","value":"{}"},{"key":"instruction_text","type":"text","description":"*(optional)* | Type: string","value":"example-value"},{"key":"credits_pro_review","type":"text","description":"*(optional)* | Type: integer","value":"1"},{"key":"match_mode","type":"text","description":"*(optional)* | Type: string | Allowed: any, all","value":"any"},{"key":"is_active","type":"text","description":"*(optional)* | Type: boolean","value":"true"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"config\": []\n}"}]},{"name":"Create Reviewer Profile","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/hitl_review/create_profile","host":["{{base_url}}"],"path":["hitl_review","create_profile"]},"description":"Create or upsert a reviewer profile with language skills, tier and capacity settings.\n\n---\n**Tool-ID:** `po_hitl_create_reviewer_profile` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_create_reviewer_profile`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"account_id","type":"text","description":"**REQUIRED** | account-ID of the Reviewers (Required) | Type: integer","value":"1"},{"key":"native_languages","type":"text","description":"*(optional)* | Muttersprachen e.g. [de,tr] | Type: array","value":"[\"item-1\"]"},{"key":"fluent_languages","type":"text","description":"*(optional)* | Spoken languages e.g. [en] | Type: array","value":"[\"item-1\"]"},{"key":"basic_languages","type":"text","description":"*(optional)* | Grundkenntnisse e.g. [fr] | Type: array","value":"[\"item-1\"]"},{"key":"reviewer_tier","type":"text","description":"*(optional)* | Type: string | Allowed: expert, standard, probation, suspended","value":"expert"},{"key":"max_concurrent_tasks","type":"text","description":"*(optional)* | Type: integer","value":"1"},{"key":"is_active","type":"text","description":"*(optional)* | Type: boolean","value":"true"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/hitl_review/create_profile","host":["{{base_url}}"],"path":["hitl_review","create_profile"]},"description":"Create or upsert a reviewer profile with language skills, tier and capacity settings.\n\n---\n**Tool-ID:** `po_hitl_create_reviewer_profile` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_create_reviewer_profile`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"account_id","type":"text","description":"**REQUIRED** | account-ID of the Reviewers (Required) | Type: integer","value":"1"},{"key":"native_languages","type":"text","description":"*(optional)* | Muttersprachen e.g. [de,tr] | Type: array","value":"[\"item-1\"]"},{"key":"fluent_languages","type":"text","description":"*(optional)* | Spoken languages e.g. [en] | Type: array","value":"[\"item-1\"]"},{"key":"basic_languages","type":"text","description":"*(optional)* | Grundkenntnisse e.g. [fr] | Type: array","value":"[\"item-1\"]"},{"key":"reviewer_tier","type":"text","description":"*(optional)* | Type: string | Allowed: expert, standard, probation, suspended","value":"expert"},{"key":"max_concurrent_tasks","type":"text","description":"*(optional)* | Type: integer","value":"1"},{"key":"is_active","type":"text","description":"*(optional)* | Type: boolean","value":"true"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"account_id\": 1,\n    \"message\": \"Reviewer-Profil stored\",\n    \"processing_time\": \"91.66ms\",\n    \"status\": \"success\"\n}"}]},{"name":"Get HITL consensus details","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/hitl_review/consensus_details","host":["{{base_url}}"],"path":["hitl_review","consensus_details"]},"description":"Retrieve all individual reviews for a task with side-by-side field comparison for supervisors.\n\n---\n**Tool-ID:** `po_hitl_consensus_details` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_consensus_details`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"task_uuid","type":"text","description":"**REQUIRED** | UUID of the Tasks (Required) | Type: string","value":"00000000-0000-0000-0000-000000000001"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/hitl_review/consensus_details","host":["{{base_url}}"],"path":["hitl_review","consensus_details"]},"description":"Retrieve all individual reviews for a task with side-by-side field comparison for supervisors.\n\n---\n**Tool-ID:** `po_hitl_consensus_details` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_consensus_details`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"task_uuid","type":"text","description":"**REQUIRED** | UUID of the Tasks (Required) | Type: string","value":"00000000-0000-0000-0000-000000000001"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"task_data_summary\": [],\n    \"reviews\": [],\n    \"consensus\": [],\n    \"field_comparison\": [],\n    \"reviews_required\": 1,\n    \"task_status\": \"example\"\n}"}]},{"name":"Get HITL review dashboard","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/hitl_review/dashboard","host":["{{base_url}}"],"path":["hitl_review","dashboard"]},"description":"Aggregated HITL review statistics incl. awaiting_reviews, consensus metrics.\n\n---\n**Tool-ID:** `po_hitl_dashboard` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_dashboard`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Get HITL review statistics","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/hitl_review/stats","host":["{{base_url}}"],"path":["hitl_review","stats"]},"description":"Alias for dashboard. Returns identical statistics.\n\n---\n**Tool-ID:** `po_hitl_get_stats` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_get_stats`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Get HITL task details","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/hitl_review/get","host":["{{base_url}}"],"path":["hitl_review","get"]},"description":"Retrieve full details of a single HITL review task by UUID.\n\n---\n**Tool-ID:** `po_hitl_get_task` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_get_task`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"task_uuid","type":"text","description":"**REQUIRED** | UUID of the Tasks (Required) | Type: string","value":"00000000-0000-0000-0000-000000000001"}]}},"response":[]},{"name":"List Review Queue","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/hitl_review/list","host":["{{base_url}}"],"path":["hitl_review","list"],"query":[{"key":"status","value":"active","description":"*(optional)* | Status-Filter: pending, in_progress, awaiting_reviews, completed, rejected, all | Type: string","disabled":true},{"key":"priority","value":"100","description":"*(optional)* | Queue priority (1–900): higher = faster queue start (1–899). 900 = synchronous/stream. Omit = plan default. | Type: integer | Max: 1000 | Example: 100","disabled":true},{"key":"search","value":"invoice Q1 2026","description":"*(optional)* | Freitext-Search | Type: string","disabled":true},{"key":"reviewer_account_id","value":"1","description":"*(optional)* | account ID for personalized sorting | Type: integer","disabled":true},{"key":"page","value":"1","description":"*(optional)* | page (Standard: 1) | Type: integer","disabled":true},{"key":"limit","value":"20","description":"*(optional)* | per page (Standard: 50, Max: 200) | Type: integer","disabled":true}]},"description":"HITL review queue with personalized ordering by language match and SLA urgency.\n\n---\n**Tool-ID:** `po_hitl_list_reviews` • **Cost:** 10 credits (base, at `priority=500`) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_list_reviews`\n## Connection hold & polling (~5 minute limit)\n\n- **Default (`client_wait` omitted or `true`):** The API holds **this HTTP connection** for up to **~5 minutes (~295 seconds)** and returns the result when the job finishes in time.\n- **Hard timeout:** If the job is not finished within that window → **HTTP 202** with `job_id`, `poll_url`, and `client_wait: false`. The job **continues in the background** — poll `GET /job/get/{job_id}` every 5–10 seconds.\n- **Immediate poll mode:** `client_wait=false` or `async_only=true` → `job_id` immediately (~100ms), then poll as above.\n\n**Response field:** `client_wait` (boolean) indicates whether this response used connection hold.\n\n**Note:** Queue `priority` controls billing and queue speed only — see collection guide **Queue priority (billing & speed)**.\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"List Reviewer Profiles","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/hitl_review/list_reviewers","host":["{{base_url}}"],"path":["hitl_review","list_reviewers"]},"description":"List all reviewer profiles from SOT including language skills, tier, accuracy scores.\n\n---\n**Tool-ID:** `po_hitl_list_reviewers` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_list_reviewers`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed)."},"response":[]},{"name":"Submit HITL consensus review","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/hitl_review/submit_review","host":["{{base_url}}"],"path":["hitl_review","submit_review"]},"description":"Submit a review decision (approve/reject/escalate) for a HITL task. Part of 3-reviewer consensus workflow.\n\n---\n**Tool-ID:** `po_hitl_submit_review` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_submit_review`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"task_uuid","type":"text","description":"**REQUIRED** | UUID to reviewende Tasks (Required) | Type: string","value":"00000000-0000-0000-0000-000000000001"},{"key":"decision","type":"text","description":"**REQUIRED** | Review-decision (Required) | Type: string | Allowed: approve, reject, escalate","value":"approve"},{"key":"field_results","type":"text","description":"*(optional)* | field-Korrekturen as Key-Value | Type: object","value":"{}"},{"key":"check_results","type":"text","description":"*(optional)* | Binary-Check results | Type: object","value":"{}"},{"key":"reject_reason_id","type":"text","description":"*(optional)* | Ablehnungsgrand-ID (Required at reject if no reject_comment) | Type: string","value":"1"},{"key":"reject_comment","type":"text","description":"*(optional)* | Rejection comment | Type: string","value":"example-value"},{"key":"escalation_comment","type":"text","description":"*(optional)* | Eskalationsgrund | Type: string","value":"example-value"},{"key":"comment","type":"text","description":"*(optional)* | General Reviewer comment | Type: string","value":"example-value"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/hitl_review/submit_review","host":["{{base_url}}"],"path":["hitl_review","submit_review"]},"description":"Submit a review decision (approve/reject/escalate) for a HITL task. Part of 3-reviewer consensus workflow.\n\n---\n**Tool-ID:** `po_hitl_submit_review` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_submit_review`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"task_uuid","type":"text","description":"**REQUIRED** | UUID to reviewende Tasks (Required) | Type: string","value":"00000000-0000-0000-0000-000000000001"},{"key":"decision","type":"text","description":"**REQUIRED** | Review-decision (Required) | Type: string | Allowed: approve, reject, escalate","value":"approve"},{"key":"field_results","type":"text","description":"*(optional)* | field-Korrekturen as Key-Value | Type: object","value":"{}"},{"key":"check_results","type":"text","description":"*(optional)* | Binary-Check results | Type: object","value":"{}"},{"key":"reject_reason_id","type":"text","description":"*(optional)* | Ablehnungsgrand-ID (Required at reject if no reject_comment) | Type: string","value":"1"},{"key":"reject_comment","type":"text","description":"*(optional)* | Rejection comment | Type: string","value":"example-value"},{"key":"escalation_comment","type":"text","description":"*(optional)* | Eskalationsgrund | Type: string","value":"example-value"},{"key":"comment","type":"text","description":"*(optional)* | General Reviewer comment | Type: string","value":"example-value"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"status\": \"success\",\n    \"message\": \"Operation completed successfully\",\n    \"review_uuid\": \"example\",\n    \"reviews_completed\": 1,\n    \"reviews_required\": 1,\n    \"consensus_reached\": true,\n    \"new_status\": \"example\",\n    \"kappa\": 1\n}"}]},{"name":"Update Reviewer Profile","request":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/hitl_review/update_profile","host":["{{base_url}}"],"path":["hitl_review","update_profile"]},"description":"Update an existing reviewer profile (upsert semantics).\n\n---\n**Tool-ID:** `po_hitl_update_reviewer_profile` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_update_reviewer_profile`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"account_id","type":"text","description":"**REQUIRED** | account-ID of the Reviewers (Required) | Type: integer","value":"1"},{"key":"native_languages","type":"text","description":"*(optional)* | Type: array","value":"[\"item-1\"]"},{"key":"fluent_languages","type":"text","description":"*(optional)* | Type: array","value":"[\"item-1\"]"},{"key":"basic_languages","type":"text","description":"*(optional)* | Type: array","value":"[\"item-1\"]"},{"key":"reviewer_tier","type":"text","description":"*(optional)* | Type: string | Allowed: expert, standard, probation, suspended","value":"expert"},{"key":"max_concurrent_tasks","type":"text","description":"*(optional)* | Type: integer","value":"1"},{"key":"is_active","type":"text","description":"*(optional)* | Type: boolean","value":"true"}]}},"response":[{"name":"Example Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"multipart/form-data","description":"API accepts both multipart/form-data and application/x-www-form-urlencoded."}],"url":{"raw":"{{base_url}}/hitl_review/update_profile","host":["{{base_url}}"],"path":["hitl_review","update_profile"]},"description":"Update an existing reviewer profile (upsert semantics).\n\n---\n**Tool-ID:** `po_hitl_update_reviewer_profile` • **Cost:** Free (included in base plan — no AI compute) • **MCP:** Callable via `mcp.paperoffice.ai` as `po_hitl_update_reviewer_profile`\n\n**Execution Mode:** Synchronous — response returned inline (no polling needed).","body":{"mode":"formdata","formdata":[{"key":"account_id","type":"text","description":"**REQUIRED** | account-ID of the Reviewers (Required) | Type: integer","value":"1"},{"key":"native_languages","type":"text","description":"*(optional)* | Type: array","value":"[\"item-1\"]"},{"key":"fluent_languages","type":"text","description":"*(optional)* | Type: array","value":"[\"item-1\"]"},{"key":"basic_languages","type":"text","description":"*(optional)* | Type: array","value":"[\"item-1\"]"},{"key":"reviewer_tier","type":"text","description":"*(optional)* | Type: string | Allowed: expert, standard, probation, suspended","value":"expert"},{"key":"max_concurrent_tasks","type":"text","description":"*(optional)* | Type: integer","value":"1"},{"key":"is_active","type":"text","description":"*(optional)* | Type: boolean","value":"true"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n    \"account_id\": 1,\n    \"message\": \"Reviewer-Profil stored\",\n    \"processing_time\": \"126.61ms\",\n    \"status\": \"success\"\n}"}]}]}]}]}