Returns the text a compliance check would run on, with word and page counts and the
limits that apply to your plan. Use it to preview or trim a document before checking
it, or to build your own text check. Not billed. Extraction is also performed
implicitly when you send a document part to POST /compliance/check.
Limits: 30 MB per file, 100 pages, 400,000 characters, 30 seconds of extraction, one
document per request, and a per-plan word cap returned as limits.maxWords. Scanned
PDFs with no text layer are rejected. A Content-Length header is required.
One PDF (application/pdf, .pdf) or Word file
(application/vnd.openxmlformats-officedocument.wordprocessingml.document, .docx).
The bytes are sniffed; the declared type and the filename extension must agree with
what the bytes are. Legacy .doc is refused.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"ZebraTruth — Runtime Compliance for AI Agents","colors":{"primary":"#3FB2FE","light":"#3FB2FE","dark":"#3FB2FE"},"logo":{"light":"https://mintcdn.com/zebratruthai/gsHY39_GGp7teBef/logo/light.svg?fit=max\u0026auto=format\u0026n=gsHY39_GGp7teBef\u0026q=85\u0026s=a0210573e206e7c10145de436da1dab1","dark":"https://mintcdn.com/zebratruthai/gsHY39_GGp7teBef/logo/dark.svg?fit=max\u0026auto=format\u0026n=gsHY39_GGp7teBef\u0026q=85\u0026s=43489640c220a2f492f4d203e72392af"},"favicon":"https://mintcdn.com/zebratruthai/53nDj18I-jVMHwMl/favicon.png?fit=max\u0026auto=format\u0026n=53nDj18I-jVMHwMl\u0026q=85\u0026s=d17d051b30e8720f47448f94af058918","api":{"playground":{}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"zebratruthai","hasAudioNarration":false,"actualSubdomain":"zebratruthai","customDomains":["docs.zebratruth.ai"],"gitSource":{"type":"github","owner":"dafstar76","repo":"zebratruth-ai-labs","deployBranch":"master","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ab71fdcbc2c56bfa72d6aca","collectionId":"00df67d9-1f04-4b9c-8e32-28dcda9d3798","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ab71fdcbc2c56bfa72d6aca"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ab71fdcbc2c56bfa72d6aca","clientVersion":"0.0.3964","searchFilterCounts":[{"language":"default","tag":"API Reference","count":44},{"language":"default","tag":"Documentation","count":14},{"language":"default","tag":"Guides","count":9},{"language":"default","tag":"Text, Images \u0026 Integration","count":8},{"language":"default","tag":"Corpus","count":7},{"language":"default","tag":"Concepts","count":6},{"language":"default","tag":"Video","count":6},{"language":"default","tag":"Account \u0026 Usage","count":6},{"language":"default","tag":"Provenance","count":6},{"language":"default","tag":"Jobs \u0026 Reports","count":5}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/documents/extract-text-from-a-pdf-or-word-document","slug":"/api-reference/documents/extract-text-from-a-pdf-or-word-document","pageMetadata":{"title":"Extract text from a PDF or Word document","description":"Returns the text a compliance check would run on, with word and page counts and the\nlimits that apply to your plan. Use it to preview or trim a document before checking\nit, or to build your own text check. **Not billed.** Extraction is also performed\nimplicitly when you send a `document` part to `POST /compliance/check`.\n\nLimits: 30 MB per file, 100 pages, 400,000 characters, 30 seconds of extraction, one\ndocument per request, and a per-plan word cap returned as `limits.maxWords`. Scanned\nPDFs with no text layer are rejected. A `Content-Length` header is required.\n","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /compliance/documents/extract","href":"/api-reference/documents/extract-text-from-a-pdf-or-word-document","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Returns the text a compliance check would run on, with word and page counts and the\\nlimits that apply to your plan. Use it to preview or trim a document before checking\\nit, or to build your own text check. \", _jsx(_components.strong, {\n children: \"Not billed.\"\n }), \" Extraction is also performed\\nimplicitly when you send a \", _jsx(_components.code, {\n children: \"document\"\n }), \" part to \", _jsx(_components.code, {\n children: \"POST /compliance/check\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Limits: 30 MB per file, 100 pages, 400,000 characters, 30 seconds of extraction, one\\ndocument per request, and a per-plan word cap returned as \", _jsx(_components.code, {\n children: \"limits.maxWords\"\n }), \". Scanned\\nPDFs with no text layer are rejected. A \", _jsx(_components.code, {\n children: \"Content-Length\"\n }), \" header is required.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Extract text from a PDF or Word document","description":"Returns the text a compliance check would run on, with word and page counts and the\nlimits that apply to your plan. Use it to preview or trim a document before checking\nit, or to build your own text check. **Not billed.** Extraction is also performed\nimplicitly when you send a `document` part to `POST /compliance/check`.\n\nLimits: 30 MB per file, 100 pages, 400,000 characters, 30 seconds of extraction, one\ndocument per request, and a per-plan word cap returned as `limits.maxWords`. Scanned\nPDFs with no text layer are rejected. A `Content-Length` header is required.\n","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /compliance/documents/extract","href":"/api-reference/documents/extract-text-from-a-pdf-or-word-document","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"extractDocument","summary":"Extract text from a PDF or Word document","description":"Returns the text a compliance check would run on, with word and page counts and the\nlimits that apply to your plan. Use it to preview or trim a document before checking\nit, or to build your own text check. **Not billed.** Extraction is also performed\nimplicitly when you send a `document` part to `POST /compliance/check`.\n\nLimits: 30 MB per file, 100 pages, 400,000 characters, 30 seconds of extraction, one\ndocument per request, and a per-plan word cap returned as `limits.maxWords`. Scanned\nPDFs with no text layer are rejected. A `Content-Length` header is required.\n","tags":["Documents"],"requestBody":"a0db0dae-980e-4a44-adaf-601fa9837bba","responses":{"200":"eb6fdab5-eaa3-4398-85c5-4fb13d07521c","400":"e178b241-7f71-4c6c-9bc3-e1172341857f","401":"f768a200-1b77-4dae-ac04-ff6e0e9af774","403":"9abbcfa1-212f-4176-b63c-c7b90cf58060","413":"96c47e8d-1fee-4b8b-ab86-5cda1e4c6fc3","415":"4dda5575-b6cb-47e0-8e11-ad4632990243","422":"3b6b33c7-2a39-4913-ad53-b2f8731c9136"},"method":"post","type":"path","servers":["e4860b08-abe2-46de-8ff2-cf13ac5f2eef"],"security":["2150c869-c80e-45b2-aa80-21ce646b4401"],"path":"/compliance/documents/extract","baseUrlOptions":["https://api.zebratruth.ai/v1"],"title":"Extract text from a PDF or Word document","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["document"],"properties":{"document":{"type":"string","format":"binary","description":"One PDF (`application/pdf`, `.pdf`) or Word file\n(`application/vnd.openxmlformats-officedocument.wordprocessingml.document`, `.docx`).\nThe bytes are sniffed; the declared type and the filename extension must agree with\nwhat the bytes are. Legacy `.doc` is refused.\n","isRequired":true,"uniqueKey":"document","typeLabel":"file"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"document":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"eb6fdab5-eaa3-4398-85c5-4fb13d07521c":{"description":"Extracted text","content":{"application/json":{"schema":{"type":"object","required":["format","wordCount","charCount","text","limits"],"properties":{"format":{"type":"string","enum":["pdf","word_doc"],"isRequired":true,"uniqueKey":"format","typeLabel":"enum\u003cstring>"},"wordCount":{"type":"integer","description":"Billable words. A check on this text is priced by `ceil(wordCount / 500)` blocks.","isRequired":true,"uniqueKey":"wordCount","typeLabel":"integer"},"charCount":{"type":"integer","isRequired":true,"uniqueKey":"charCount","typeLabel":"integer"},"text":{"type":"string","description":"The extracted text, line breaks preserved.","isRequired":true,"uniqueKey":"text","typeLabel":"string"},"limits":{"type":"object","description":"The limits that applied to this workspace.","properties":{"maxWords":{"type":"integer","description":"Words per check allowed on the current plan.","uniqueKey":"limits.maxWords","typeLabel":"integer"},"maxPages":{"type":"integer","example":100,"uniqueKey":"limits.maxPages","typeLabel":"integer"},"maxUploadBytes":{"type":"integer","example":31457280,"uniqueKey":"limits.maxUploadBytes","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"limits","typeLabel":"object"},"pageCount":{"type":"integer","description":"Present for PDF only.","uniqueKey":"pageCount","typeLabel":"integer"},"_meta":{"type":"object","description":"Present only for test-mode keys.","properties":{"testMode":{"type":"boolean","uniqueKey":"_meta.testMode","typeLabel":"boolean"}},"uniqueKey":"_meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"format":"pdf","wordCount":123,"charCount":123,"text":"\u003cstring>","limits":{"maxWords":123,"maxPages":100,"maxUploadBytes":31457280},"pageCount":123,"_meta":{"testMode":true}}}},"exampleType":"generated"}},"exampleType":"generated"},"e178b241-7f71-4c6c-9bc3-e1172341857f":{"description":"`data.code`: `expected_multipart`, `content_length_required`, `invalid_content_length`, `empty_multipart`, `document_required`, `document_count_exceeded`, `document_malformed`.","content":{"application/json":{"schema":{"type":"object","description":"Standard error envelope. `data.code` is the stable discriminator to branch on;\n`statusMessage` is the human-readable reason. Unless a response documents extra\nnamed fields, `data` is reduced to `{ code }` before it is sent.\n","required":["statusCode","message"],"properties":{"statusCode":{"type":"integer","isRequired":true,"uniqueKey":"statusCode","typeLabel":"integer"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"error":{"type":"boolean","example":true,"uniqueKey":"error","typeLabel":"boolean"},"url":{"type":"string","format":"uri","uniqueKey":"url","typeLabel":"string\u003curi>"},"statusMessage":{"type":"string","uniqueKey":"statusMessage","typeLabel":"string"},"data":{"type":"object","required":["code"],"properties":{"code":{"type":"string","example":"review_scope_not_enabled","isRequired":true,"uniqueKey":"data.code","typeLabel":"string"}},"additionalProperties":true,"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"statusCode":123,"message":"\u003cstring>","error":true,"url":"\u003cstring>","statusMessage":"\u003cstring>","data":{"code":"review_scope_not_enabled"}}}},"exampleType":"generated"}},"exampleType":"generated"},"f768a200-1b77-4dae-ac04-ff6e0e9af774":{"description":"Invalid, missing, or expired API key. Standard error envelope —\nread `message` for the human-readable reason.\n","content":{"application/json":{"schema":{"type":"object","description":"Standard error envelope.","required":["statusCode","message"],"properties":{"statusCode":{"type":"integer","example":401,"isRequired":true,"uniqueKey":"statusCode","typeLabel":"integer"},"message":{"type":"string","description":"Canonical human-readable reason — pattern-match on this field.","example":"Invalid API key","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"error":{"type":"boolean","example":true,"uniqueKey":"error","typeLabel":"boolean"},"url":{"type":"string","format":"uri","example":"https://api.zebratruth.ai/v1/whoami","uniqueKey":"url","typeLabel":"string\u003curi>"},"statusMessage":{"type":"string","example":"Invalid API key","uniqueKey":"statusMessage","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"statusCode":401,"message":"Invalid API key","error":true,"url":"https://api.zebratruth.ai/v1/whoami","statusMessage":"Invalid API key"}}},"exampleType":"generated"}},"exampleType":"generated"},"9abbcfa1-212f-4176-b63c-c7b90cf58060":{"description":"The credential is valid but may not perform this action. `data.code` is one of\n`permission_not_granted`, `principal_forbidden_control_plane` (an API key called a\ndashboard-only action), `membership_not_active`, `entitlement_required`,\n`workspace_provisioning`, `workspace_deletion_scheduled`.\n","content":{"application/json":{"schema":{"type":"object","description":"Standard error envelope. `data.code` is the stable discriminator to branch on;\n`statusMessage` is the human-readable reason. Unless a response documents extra\nnamed fields, `data` is reduced to `{ code }` before it is sent.\n","required":["statusCode","message"],"properties":{"statusCode":{"type":"integer","isRequired":true,"uniqueKey":"statusCode","typeLabel":"integer"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"error":{"type":"boolean","example":true,"uniqueKey":"error","typeLabel":"boolean"},"url":{"type":"string","format":"uri","uniqueKey":"url","typeLabel":"string\u003curi>"},"statusMessage":{"type":"string","uniqueKey":"statusMessage","typeLabel":"string"},"data":{"type":"object","required":["code"],"properties":{"code":{"type":"string","example":"review_scope_not_enabled","isRequired":true,"uniqueKey":"data.code","typeLabel":"string"}},"additionalProperties":true,"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"statusCode":123,"message":"\u003cstring>","error":true,"url":"\u003cstring>","statusMessage":"\u003cstring>","data":{"code":"review_scope_not_enabled"}}}},"exampleType":"generated"}},"exampleType":"generated"},"96c47e8d-1fee-4b8b-ab86-5cda1e4c6fc3":{"description":"The upload exceeds a limit. `data.code` is one of `document_too_large`,\n`document_too_many_pages`, `document_too_much_text`, `text_exceeds_tier_limit`,\n`payload_too_large` (provenance; also carries `limitBytes`), `video_upload_too_large`.\n","content":{"application/json":{"schema":{"type":"object","description":"Standard error envelope. `data.code` is the stable discriminator to branch on;\n`statusMessage` is the human-readable reason. Unless a response documents extra\nnamed fields, `data` is reduced to `{ code }` before it is sent.\n","required":["statusCode","message"],"properties":{"statusCode":{"type":"integer","isRequired":true,"uniqueKey":"statusCode","typeLabel":"integer"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"error":{"type":"boolean","example":true,"uniqueKey":"error","typeLabel":"boolean"},"url":{"type":"string","format":"uri","uniqueKey":"url","typeLabel":"string\u003curi>"},"statusMessage":{"type":"string","uniqueKey":"statusMessage","typeLabel":"string"},"data":{"type":"object","required":["code"],"properties":{"code":{"type":"string","example":"review_scope_not_enabled","isRequired":true,"uniqueKey":"data.code","typeLabel":"string"}},"additionalProperties":true,"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"statusCode":123,"message":"\u003cstring>","error":true,"url":"\u003cstring>","statusMessage":"\u003cstring>","data":{"code":"review_scope_not_enabled"}}}},"exampleType":"generated"}},"exampleType":"generated"},"4dda5575-b6cb-47e0-8e11-ad4632990243":{"description":"The file type is not accepted. `data.code` is one of `document_format_unsupported`\n(legacy `.doc`, unknown signature, or a filename that does not match the bytes),\n`document_encrypted`, `unknown_content_type`, `video_signing_unavailable`,\n`unsupported_container`.\n","content":{"application/json":{"schema":{"type":"object","description":"Standard error envelope. `data.code` is the stable discriminator to branch on;\n`statusMessage` is the human-readable reason. Unless a response documents extra\nnamed fields, `data` is reduced to `{ code }` before it is sent.\n","required":["statusCode","message"],"properties":{"statusCode":{"type":"integer","isRequired":true,"uniqueKey":"statusCode","typeLabel":"integer"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"error":{"type":"boolean","example":true,"uniqueKey":"error","typeLabel":"boolean"},"url":{"type":"string","format":"uri","uniqueKey":"url","typeLabel":"string\u003curi>"},"statusMessage":{"type":"string","uniqueKey":"statusMessage","typeLabel":"string"},"data":{"type":"object","required":["code"],"properties":{"code":{"type":"string","example":"review_scope_not_enabled","isRequired":true,"uniqueKey":"data.code","typeLabel":"string"}},"additionalProperties":true,"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"statusCode":123,"message":"\u003cstring>","error":true,"url":"\u003cstring>","statusMessage":"\u003cstring>","data":{"code":"review_scope_not_enabled"}}}},"exampleType":"generated"}},"exampleType":"generated"},"3b6b33c7-2a39-4913-ad53-b2f8731c9136":{"description":"The document was accepted but could not be used. `data.code` is one of\n`document_no_extractable_text` (for example a scanned PDF) or\n`document_extraction_timeout`.\n","content":{"application/json":{"schema":{"type":"object","description":"Standard error envelope. `data.code` is the stable discriminator to branch on;\n`statusMessage` is the human-readable reason. Unless a response documents extra\nnamed fields, `data` is reduced to `{ code }` before it is sent.\n","required":["statusCode","message"],"properties":{"statusCode":{"type":"integer","isRequired":true,"uniqueKey":"statusCode","typeLabel":"integer"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"error":{"type":"boolean","example":true,"uniqueKey":"error","typeLabel":"boolean"},"url":{"type":"string","format":"uri","uniqueKey":"url","typeLabel":"string\u003curi>"},"statusMessage":{"type":"string","uniqueKey":"statusMessage","typeLabel":"string"},"data":{"type":"object","required":["code"],"properties":{"code":{"type":"string","example":"review_scope_not_enabled","isRequired":true,"uniqueKey":"data.code","typeLabel":"string"}},"additionalProperties":true,"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"statusCode":123,"message":"\u003cstring>","error":true,"url":"\u003cstring>","statusMessage":"\u003cstring>","data":{"code":"review_scope_not_enabled"}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"2150c869-c80e-45b2-aa80-21ce646b4401":{"bearerAuth":{"type":"http","scheme":"bearer","description":"API key starting with `zt_live_` (production) or `zt_test_` (sandbox).\nGet your key at https://developers.zebratruth.ai\n","scopes":[]}}},"servers":{"e4860b08-abe2-46de-8ff2-cf13ac5f2eef":{"url":"https://api.zebratruth.ai/v1","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"API key starting with `zt_live_` (production) or `zt_test_` (sandbox).\nGet your key at https://developers.zebratruth.ai\n","scopes":[]},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key starting with `zt_live_` (production) or `zt_test_` (sandbox).\nGet your key at https://developers.zebratruth.ai\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi/zebratruth-v1.yaml"},"subdomain":"zebratruthai","siteName":"ZebraTruth — Runtime Compliance for AI Agents","title":"Extract text from a PDF or Word document - ZebraTruth — Runtime Compliance for AI Agents","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-26T01:29:05.801Z","originalFileLocation":"api-reference/documents/extract-text-from-a-pdf-or-word-document.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Returns the text a compliance check would run on, with word and page counts and the limits that apply to your plan. Use it to preview or trim a document before checking it, or to build your own text check. Not billed. Extraction is also performed implicitly when you send a document part to POST /compliance/check. Limits: 30 MB per file, 100 pages, 400,000 characters, 30 seconds of extraction, one document per request, and a per-plan word cap returned as limits.maxWords. Scanned PDFs with no text layer are rejected. A Content-Length header is required.\">\u003cmeta data-mint-head name=\"application-name\" content=\"ZebraTruth — Runtime Compliance for AI Agents\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/zebratruthai/rTMeP4-q-BuDeEQw/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/zebratruthai/rTMeP4-q-BuDeEQw/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/zebratruthai/rTMeP4-q-BuDeEQw/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/zebratruthai/rTMeP4-q-BuDeEQw/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/zebratruthai/rTMeP4-q-BuDeEQw/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/zebratruthai/rTMeP4-q-BuDeEQw/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/zebratruthai/rTMeP4-q-BuDeEQw/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/zebratruthai/rTMeP4-q-BuDeEQw/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/zebratruthai/rTMeP4-q-BuDeEQw/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Extract text from a PDF or Word document - ZebraTruth — Runtime Compliance for AI Agents\">\u003cmeta data-mint-head property=\"og:description\" content=\"Returns the text a compliance check would run on, with word and page counts and the limits that apply to your plan. Use it to preview or trim a document before checking it, or to build your own text check. Not billed. Extraction is also performed implicitly when you send a document part to POST /compliance/check. Limits: 30 MB per file, 100 pages, 400,000 characters, 30 seconds of extraction, one document per request, and a per-plan word cap returned as limits.maxWords. Scanned PDFs with no text layer are rejected. A Content-Length header is required.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ZebraTruth — Runtime Compliance for AI Agents\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.zebratruth.ai/api-reference/documents/extract-text-from-a-pdf-or-word-document\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://zebratruthai.mintlify.app/_mintlify/api/og/v2?division=Compliance+Checks\u0026amp;title=Extract+text+from+a+PDF+or+Word+document\u0026amp;description=Returns+the+text+a+compliance+check+would+run+on%2C+with+word+and+page+counts+and+the%0Alimits+that+apply+to+your+plan.+Use+it+to+preview+or+trim+a+document+before+\u0026amp;theme=a5a701a9b75e19dc4c00f206\u0026amp;signature=d4e7b2d6c0bf44bfe9683a4523d3340cb28eb88f3e55adc70814cbe033612dd1\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Extract text from a PDF or Word document - ZebraTruth — Runtime Compliance for AI Agents\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Returns the text a compliance check would run on, with word and page counts and the limits that apply to your plan. Use it to preview or trim a document before checking it, or to build your own text check. Not billed. Extraction is also performed implicitly when you send a document part to POST /compliance/check. Limits: 30 MB per file, 100 pages, 400,000 characters, 30 seconds of extraction, one document per request, and a per-plan word cap returned as limits.maxWords. Scanned PDFs with no text layer are rejected. A Content-Length header is required.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://zebratruthai.mintlify.app/_mintlify/api/og/v2?division=Compliance+Checks\u0026amp;title=Extract+text+from+a+PDF+or+Word+document\u0026amp;description=Returns+the+text+a+compliance+check+would+run+on%2C+with+word+and+page+counts+and+the%0Alimits+that+apply+to+your+plan.+Use+it+to+preview+or+trim+a+document+before+\u0026amp;theme=a5a701a9b75e19dc4c00f206\u0026amp;signature=d4e7b2d6c0bf44bfe9683a4523d3340cb28eb88f3e55adc70814cbe033612dd1\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/zebratruthai/rTMeP4-q-BuDeEQw/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"ZebraTruth — Runtime Compliance for AI Agents\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3FB2FE\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.zebratruth.ai/api-reference/documents/extract-text-from-a-pdf-or-word-document\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/documents/extract-text-from-a-pdf-or-word-document.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.zebratruth.ai/#organization\",\"name\":\"ZebraTruth — Runtime Compliance for AI Agents\",\"url\":\"https://docs.zebratruth.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/zebratruthai/gsHY39_GGp7teBef/logo/light.svg?fit=max\u0026auto=format\u0026n=gsHY39_GGp7teBef\u0026q=85\u0026s=a0210573e206e7c10145de436da1dab1\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.zebratruth.ai#website\",\"name\":\"ZebraTruth — Runtime Compliance for AI Agents\",\"url\":\"https://docs.zebratruth.ai\",\"publisher\":{\"@id\":\"https://docs.zebratruth.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.zebratruth.ai/api-reference/documents/extract-text-from-a-pdf-or-word-document#webpage\",\"url\":\"https://docs.zebratruth.ai/api-reference/documents/extract-text-from-a-pdf-or-word-document\",\"name\":\"Extract text from a PDF or Word document\",\"description\":\"Returns the text a compliance check would run on, with word and page counts and the limits that apply to your plan. Use it to preview or trim a document before checking it, or to build your own text check. Not billed. Extraction is also performed implicitly when you send a document part to POST /compliance/check. Limits: 30 MB per file, 100 pages, 400,000 characters, 30 seconds of extraction, one document per request, and a per-plan word cap returned as limits.maxWords. Scanned PDFs with no text layer are rejected. A Content-Length header is required.\",\"dateModified\":\"2026-09-26T01:29:05.801Z\",\"isPartOf\":{\"@id\":\"https://docs.zebratruth.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.zebratruth.ai/api-reference/documents/extract-text-from-a-pdf-or-word-document#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.zebratruth.ai/api-reference/documents/extract-text-from-a-pdf-or-word-document#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Compliance Checks\",\"item\":\"https://docs.zebratruth.ai/api-reference/compliance/run-compliance-check\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Extract text from a PDF or Word document\",\"item\":\"https://docs.zebratruth.ai/api-reference/documents/extract-text-from-a-pdf-or-word-document\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.zebratruth.ai/api-reference/documents/extract-text-from-a-pdf-or-word-document#apireference\",\"headline\":\"Extract text from a PDF or Word document\",\"name\":\"Extract text from a PDF or Word document\",\"description\":\"Returns the text a compliance check would run on, with word and page counts and the limits that apply to your plan. Use it to preview or trim a document before checking it, or to build your own text check. Not billed. Extraction is also performed implicitly when you send a document part to POST /compliance/check. Limits: 30 MB per file, 100 pages, 400,000 characters, 30 seconds of extraction, one document per request, and a per-plan word cap returned as limits.maxWords. Scanned PDFs with no text layer are rejected. A Content-Length header is required.\",\"url\":\"https://docs.zebratruth.ai/api-reference/documents/extract-text-from-a-pdf-or-word-document\",\"mainEntityOfPage\":{\"@id\":\"https://docs.zebratruth.ai/api-reference/documents/extract-text-from-a-pdf-or-word-document#webpage\"},\"dateModified\":\"2026-09-26T01:29:05.801Z\",\"publisher\":{\"@id\":\"https://docs.zebratruth.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.zebratruth.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"ZebraTruth — Runtime Compliance for AI Agents\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"ZebraTruth — Runtime Compliance for AI Agents","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides/video-compliance-check"}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"API Reference","href":"/api-reference/overview"}]},{"group":"Compliance Checks","pages":[{"title":"Run compliance check","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /compliance/check","href":"/api-reference/compliance/run-compliance-check"},{"title":"Check image rights","description":"Dedicated image rights clearance. Checks for:\n\n- **Restricted-category content** — six advertising-restricted categories: alcohol \u0026 spirits, weapons \u0026 firearms, tobacco \u0026 smoking, gambling, pharmaceuticals, financial products (incl. crypto / forex / investments). See the [Restricted Categories guide](/guides/restricted-categories) for the full catalog.\n- **Content safety (ZebraSafety)** — adult / violence / racy / medical likelihood signals. Tiered: `(high confidence)` → `status: \"block\"`; `(medium confidence)` → `status: \"flag\"`.\n- **Brand logo \u0026 stock-agency watermark detection** — trademarks and unlicensed-stock indicators.\n- **C2PA / IPTC metadata** — Content Credentials, provenance, AI generation markers.\n- **Known-person likeness** — right-of-publicity flag. *Surfaces only when the celebrity-detection provider is enabled in the deployment; not active in the default ZebraTruth-managed configuration today.*\n\nUse this for image-only checks. For combined text + image checks, use `/compliance/check` with `content.imageUrls`.\n\n**Request formats.** Accepts either `application/json` (`imageUrls` referencing publicly\naccessible URLs) or `multipart/form-data` (upload up to 2 image binaries directly — use\nwhen you don't have a public URL handy). Total request body is capped at 4.5 MB.\n\n**Per-jurisdiction citations.** Citations on returned checks are composed from the laws\napplicable to the jurisdictions you requested AND the platform policies for the platforms\nyou requested. A restricted-category detection with `jurisdictions: [\"us\"]` cites the\nfederal regulator (e.g. FTC, FDA, SEC); the same detection with `jurisdictions: [\"eu\", \"uk\"]`\ncites European directives and UK codes. Adding `platforms: [\"facebook\", \"tiktok\"]` appends\nthe corresponding platform-policy references.\n\n**Check statuses.** Stock watermarks and high-severity restricted categories return\n`status: \"block\"`; brand logos, medium-severity restricted categories, and medium-confidence\ncontent-safety signals return `status: \"flag\"` (review). See the [Image Rights Clearance\nguide](/guides/image-rights-clearance) for the full matrix.\n\n**Tenant scoping.** Every request is scoped to your account's subscribed jurisdictions\nand platforms. Requesting a jurisdiction or platform outside that set returns 403. See\nthe [Tenant Onboarding and Scoping guide](/guides/tenant-onboarding-and-scoping).\n","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /compliance/check-image","href":"/api-reference/compliance/check-image-rights"},{"title":"Extract text from a PDF or Word document","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /compliance/documents/extract","href":"/api-reference/documents/extract-text-from-a-pdf-or-word-document"}]},{"group":"Video","pages":[{"title":"Mint a video upload URL","description":"Returns a tenant-scoped, short-lived (15 min) SAS URL the client uses\nto PUT video bytes **directly to blob storage** — bypassing the API\nfor the upload itself. The returned `requestId` is the handle for the\nsubsequent `POST /compliance/check-video` call.\n\n**Why direct upload?** Videos can be up to 200 MB. Streaming them\nthrough the API endpoint would add latency, double bandwidth costs,\nand hit serverless function timeout limits. Direct-to-blob upload\nis the same pattern major cloud object stores use for large files.\n\n**Allowed content types:** `video/mp4`, `video/webm`, `video/quicktime`.\nThe duration limits (3–180s) and file-size cap (200 MB) are enforced\nby the subsequent `check-video` call's probe step — not at upload time.\n\n**The PUT must include the returned `uploadInstructions.headers`\nverbatim** (they carry ownership tags + the storage `x-ms-blob-type` header).\n","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /compliance/media/upload-url","href":"/api-reference/video-compliance/mint-a-video-upload-url"},{"title":"Submit a video for compliance analysis","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /compliance/check-video","href":"/api-reference/video-compliance/submit-a-video-for-compliance-analysis"},{"title":"Poll video job status + retrieve report","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /compliance/check-video/{requestId}","href":"/api-reference/video-compliance/poll-video-job-status-+-retrieve-report"},{"title":"Retrieve the tenant's video webhook signing secret","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /compliance/webhooks/video/secret","href":"/api-reference/video-compliance/retrieve-the-tenants-video-webhook-signing-secret"},{"title":"Rotate the tenant's video webhook signing secret","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /compliance/webhooks/video/secret/rotate","href":"/api-reference/video-compliance/rotate-the-tenants-video-webhook-signing-secret"}]},{"group":"Agents","pages":[{"title":"List available agents","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /agents","href":"/api-reference/agents/list-available-agents"},{"title":"Invoke a single agent","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /agents/{agentId}","href":"/api-reference/agents/invoke-a-single-agent"}]},{"group":"Jobs \u0026 Reports","pages":[{"title":"Poll job status","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /compliance/jobs/{jobId}","href":"/api-reference/jobs/poll-job-status"},{"title":"Get agent execution trace","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /compliance/jobs/{jobId}/trace","href":"/api-reference/jobs/get-agent-execution-trace"},{"title":"Resume SSE stream","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /compliance/jobs/{jobId}/stream","href":"/api-reference/jobs/resume-sse-stream"},{"title":"Get compliance report","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /reports/{reportId}","href":"/api-reference/reports/get-compliance-report"},{"title":"Replay a compliance check","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /reports/{reportId}/replay","href":"/api-reference/reports/replay-a-compliance-check"}]},{"group":"Check History","pages":[{"title":"List past compliance checks","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /compliance/checks","href":"/api-reference/check-history/list-past-compliance-checks"},{"title":"Get a past check with its full report","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /compliance/checks/{requestId}","href":"/api-reference/check-history/get-a-past-check-with-its-full-report"},{"title":"Query request logs","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /logs","href":"/api-reference/observability/query-request-logs"}]},{"group":"Provenance","pages":[{"title":"Inspect Content Credentials on an image or video","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /media/provenance/inspect","href":"/api-reference/provenance/inspect-content-credentials-on-an-image-or-video"},{"title":"Sign an image or video with Content Credentials","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /media/provenance/sign","href":"/api-reference/provenance/sign-an-image-or-video-with-content-credentials"},{"title":"Poll a video signing job","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /media/provenance/jobs/{jobId}","href":"/api-reference/provenance/poll-a-video-signing-job"},{"title":"List registered signers","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /media/provenance/signers","href":"/api-reference/provenance/list-registered-signers"},{"title":"Register a signer","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /media/provenance/signers","href":"/api-reference/provenance/register-a-signer"},{"title":"Get the keys ZebraTruth signs endpoint requests with","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /media/provenance/signing-keys","href":"/api-reference/provenance/get-the-keys-zebratruth-signs-endpoint-requests-with"}]},{"group":"Account \u0026 Usage","pages":[{"title":"Validate API key","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /whoami","href":"/api-reference/authentication/validate-api-key"},{"title":"Get credit usage","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /usage","href":"/api-reference/authentication/get-credit-usage"},{"title":"Get usage totals by feature","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /usage/summary","href":"/api-reference/billing/get-usage-totals-by-feature"},{"title":"Get usage for one externalId","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /usage/project/{projectId}","href":"/api-reference/billing/get-usage-for-one-externalid"},{"title":"Get subscription status","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /subscription","href":"/api-reference/billing/get-subscription-status"},{"title":"Get engine version","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /version","href":"/api-reference/authentication/get-engine-version"}]},{"group":"Billing","pages":[{"title":"Start a subscription","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /billing/checkout","href":"/api-reference/billing/start-a-subscription"},{"title":"Upgrade Individual to Pro","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /billing/upgrade","href":"/api-reference/billing/upgrade-individual-to-pro"}]},{"group":"Webhooks","pages":[{"title":"List saved webhook endpoints","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /webhooks","href":"/api-reference/webhooks/list-saved-webhook-endpoints"},{"title":"Register a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /webhooks","href":"/api-reference/webhooks/register-a-webhook-endpoint"},{"title":"Remove a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml delete /webhooks/{webhookId}","href":"/api-reference/webhooks/remove-a-webhook-endpoint"},{"title":"Get webhook delivery logs","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /webhooks/deliveries","href":"/api-reference/webhooks/get-webhook-delivery-logs"}]},{"group":"Corpus","pages":[{"title":"Force refresh of legal corpus rows","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /corpus/refresh","href":"/api-reference/compliance/force-refresh-of-legal-corpus-rows"},{"title":"List corpus proposals awaiting review","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /memory/review-queue","href":"/api-reference/corpus/list-corpus-proposals-awaiting-review"},{"title":"Get the review packet for a proposal","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /memory/review-queue/{proposalId}","href":"/api-reference/corpus/get-the-review-packet-for-a-proposal"},{"title":"Approve a proposal","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /memory/review-queue/{proposalId}/approve","href":"/api-reference/corpus/approve-a-proposal"},{"title":"Reject a proposal","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /memory/review-queue/{proposalId}/reject","href":"/api-reference/corpus/reject-a-proposal"},{"title":"Send a proposal back for changes","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /memory/review-queue/{proposalId}/request_changes","href":"/api-reference/corpus/send-a-proposal-back-for-changes"},{"title":"Get the caller's reviewer profile","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /memory/reviewer/me","href":"/api-reference/corpus/get-the-callers-reviewer-profile"}]}]}]},"title":"Extract text from a PDF or Word document - ZebraTruth — Runtime Compliance for AI Agents","buildId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","deploymentId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-BRm_l__d.js","utils-f1l1Oc-G.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BlhqDhJO.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DHCB7rsC.js","snippetPresets-CYXLx6Hv.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-B78P2dEq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C4YLPVAh.js","shallow-vlLnTDkQ.js","getApiPlaygroundDisplay-D_98hhvf.js","CodeSnippet-DtnZHGqq.js","CodeSnippets-CLFb8KJt.js","Page-kQh739Uz.js","getPastedJson-Cq-zlbnU.js","icon-sN3t983t.js","MethodPill-P_YQ2s09.js","DuplicateIcon-BVzyNsGJ.js","createIcon-B3jqgqC6.js","DynamicMarkdown-Crwq6WG_.js","SectionHeading-C7pGS2Bb.js","axios-vUo_bRtp.js","Markdown-BuPH8yuW.js","clsx-CCOYKgaU.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BnkC_6oA.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BM4S31-f.js"]}