{ "id": "ext_01J9ZJYA", "object": "extraction", "status": "processing", "documents": [ { "document_id": "<string>", "document_type": "offering_memorandum", "schema_version": "rent_roll.v1", "status": "processing", "phase": "extracting", "billed": { "rate_code": "rent_roll", "units": 1, "amount_usd": "12.00" }, "error": { "code": "extraction_failed", "reason": "document_too_large", "message": "This document is too large to extract in one run. Splitting it into smaller files (for example, one sheet per file) should get it through. You were not charged for it." } } ], "sandbox": true, "created_at": "2023-11-07T05:31:56Z", "billed_total_usd": "12.00", "completed_at": "2023-11-07T05:31:56Z", "elapsed_seconds": 42, "poll_after_seconds": 15, "result_url": "<string>"}
Extractions
Create an extraction job
Validates, accepts, and bills the referenced document(s), then starts
extraction. Submit either a single document_id or a bundle of
offering memorandum + rent roll + T-12 (billed at the bundle rate).
Validation failures for the document (size cap, unreadable file,
unresolvable type) reject the request with 422 and no charge.
Processing time scales with document content - a focused
single-purpose file finishes fastest. See
Preparing documents.
{ "id": "ext_01J9ZJYA", "object": "extraction", "status": "processing", "documents": [ { "document_id": "<string>", "document_type": "offering_memorandum", "schema_version": "rent_roll.v1", "status": "processing", "phase": "extracting", "billed": { "rate_code": "rent_roll", "units": 1, "amount_usd": "12.00" }, "error": { "code": "extraction_failed", "reason": "document_too_large", "message": "This document is too large to extract in one run. Splitting it into smaller files (for example, one sheet per file) should get it through. You were not charged for it." } } ], "sandbox": true, "created_at": "2023-11-07T05:31:56Z", "billed_total_usd": "12.00", "completed_at": "2023-11-07T05:31:56Z", "elapsed_seconds": 42, "poll_after_seconds": 15, "result_url": "<string>"}
The property's asset class. Required, and it decides which standard columns a rent roll is consolidated onto — beds/baths for multifamily, unit size and climate control for self-storage, and so on.
Send the property's real class rather than a placeholder. A class you did not mean returns that class's column set, and a class outside the enum is a 400. If a document turns out not to be a rent roll the value is simply unused.
Whole seconds since created_at. Present while processing, so a caller can tell a job that just started from one approaching the 60-minute ceiling without doing date math.
Convenience link to /v1/extractions/{id}/result; present when completed.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Cactus Partner API","colors":{"primary":"#0E7C5B","light":"#34D399","dark":"#0A5C44"},"navbar":{"primary":{"type":"button","label":"Need API keys?","href":"https://www.trycactus.com/api-access"}},"footer":{"socials":{"website":"https://trycactus.com"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"cactus-10e55128","hasAudioNarration":false,"actualSubdomain":"cactus-10e55128","customDomains":["docs.trycactus.com"],"gitSource":{"type":"github","owner":"trycactus","repo":"cactus-partner-api","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6aef868e69e61846fb384f36","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"API Reference","count":34},{"language":"default","tag":"Underwritings","count":13},{"language":"default","tag":"Guides","count":10},{"language":"default","tag":"Getting started","count":6},{"language":"default","tag":"Documents","count":5},{"language":"default","tag":"Reference","count":4},{"language":"default","tag":"Extractions","count":4},{"language":"default","tag":"Webhook Endpoints","count":3},{"language":"default","tag":"Usage","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","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":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","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":"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":"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":"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":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","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":"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":"workos-sso-scim","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},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/extractions/create-an-extraction-job","slug":"/api-reference/extractions/create-an-extraction-job","pageMetadata":{"title":"Create an extraction job","description":"Validates, accepts, and bills the referenced document(s), then starts\nextraction. Submit either a single `document_id` or a `bundle` of\noffering memorandum + rent roll + T-12 (billed at the bundle rate).\n\nValidation failures for the document (size cap, unreadable file,\nunresolvable type) reject the request with `422` and **no charge**.\n\nProcessing time scales with document content - a focused\nsingle-purpose file finishes fastest. See\n[Preparing documents](/preparing-documents).\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/extractions","href":"/api-reference/extractions/create-an-extraction-job","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 a: \"a\",\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: [\"Validates, accepts, and bills the referenced document(s), then starts\\nextraction. Submit either a single \", _jsx(_components.code, {\n children: \"document_id\"\n }), \" or a \", _jsx(_components.code, {\n children: \"bundle\"\n }), \" of\\noffering memorandum + rent roll + T-12 (billed at the bundle rate).\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Validation failures for the document (size cap, unreadable file,\\nunresolvable type) reject the request with \", _jsx(_components.code, {\n children: \"422\"\n }), \" and \", _jsx(_components.strong, {\n children: \"no charge\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Processing time scales with document content - a focused\\nsingle-purpose file finishes fastest. See\\n\", _jsx(_components.a, {\n href: \"/preparing-documents\",\n children: \"Preparing documents\"\n }), \".\"]\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":"Create an extraction job","description":"Validates, accepts, and bills the referenced document(s), then starts\nextraction. Submit either a single `document_id` or a `bundle` of\noffering memorandum + rent roll + T-12 (billed at the bundle rate).\n\nValidation failures for the document (size cap, unreadable file,\nunresolvable type) reject the request with `422` and **no charge**.\n\nProcessing time scales with document content - a focused\nsingle-purpose file finishes fastest. See\n[Preparing documents](/preparing-documents).\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/extractions","href":"/api-reference/extractions/create-an-extraction-job","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"createExtraction","tags":["Extractions"],"summary":"Create an extraction job","description":"Validates, accepts, and bills the referenced document(s), then starts\nextraction. Submit either a single `document_id` or a `bundle` of\noffering memorandum + rent roll + T-12 (billed at the bundle rate).\n\nValidation failures for the document (size cap, unreadable file,\nunresolvable type) reject the request with `422` and **no charge**.\n\nProcessing time scales with document content - a focused\nsingle-purpose file finishes fastest. See\n[Preparing documents](/preparing-documents).\n","parameters":["f578a977-cbc7-4bcc-a0f3-63d2b30ae1aa"],"requestBody":"2aacc094-39a2-4b49-9478-91c1069cc41d","responses":{"202":"9c8d4365-53d5-4548-ad15-0861cd335bb3","400":"ea34b2a5-fc79-4d06-954b-bb7178e0ce9b","401":"4fe65555-7d74-439b-8b22-f0e322d12fa7","402":"1a5648f3-9f75-4e0c-8ff9-5bfcfc7c3bfc","403":"51de3874-3e4e-4ba3-b347-99fcb1dcc3fb","422":"bce90a32-a0c2-4990-ab0b-f2114aa041c0","429":"f58782c0-59eb-4f19-80bb-8a43bed41018"},"method":"post","type":"path","servers":["1a16f6a0-bda6-4bf3-9c8b-84185a6fb93b"],"security":["2297ff2f-d9c9-4023-b4d6-2a7b14510000"],"path":"/v1/extractions","baseUrlOptions":["https://api.trycactus.com"],"title":"Create an extraction job","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"f578a977-cbc7-4bcc-a0f3-63d2b30ae1aa":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255,"isRequired":false,"description":"Unique key making the request safely retryable.","uniqueKey":"","typeLabel":"string"},"description":"Unique key making the request safely retryable."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"Provide `asset_class`, plus exactly one of `document_id` or `bundle`.\n","required":["asset_class","document_id"],"properties":{"document_id":{"type":"string","description":"Single document to extract.","isRequired":true,"uniqueKey":"oneOf.0.document_id","typeLabel":"string"},"asset_class":{"type":"string","enum":["multifamily","self-storage","industrial-outdoor-storage","commercial","industrial","office","retail","hotel"],"description":"The property's asset class. **Required**, and it decides which standard columns a rent roll is consolidated onto — beds/baths for multifamily, unit size and climate control for self-storage, and so on.\n\nSend the property's real class rather than a placeholder. A class you did not mean returns that class's column set, and a class outside the enum is a `400`. If a document turns out not to be a rent roll the value is simply unused.\n","isRequired":true,"uniqueKey":"oneOf.0.asset_class","typeLabel":"enum\u003cstring>"},"bundle":{"type":"object","description":"Deal bundle (offering memorandum + rent roll + T-12), billed at the bundle rate. Size caps apply per component.\n","required":["offering_memorandum_document_id","rent_roll_document_id","t12_document_id"],"properties":{"offering_memorandum_document_id":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.bundle.offering_memorandum_document_id","typeLabel":"string"},"rent_roll_document_id":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.bundle.rent_roll_document_id","typeLabel":"string"},"t12_document_id":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.bundle.t12_document_id","typeLabel":"string"}},"uniqueKey":"oneOf.0.bundle","typeLabel":"object"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"Provide `asset_class`, plus exactly one of `document_id` or `bundle`.\n","required":["asset_class","bundle"],"properties":{"bundle":{"type":"object","description":"Deal bundle (offering memorandum + rent roll + T-12), billed at the bundle rate. Size caps apply per component.\n","required":["offering_memorandum_document_id","rent_roll_document_id","t12_document_id"],"properties":{"offering_memorandum_document_id":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.bundle.offering_memorandum_document_id","typeLabel":"string"},"rent_roll_document_id":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.bundle.rent_roll_document_id","typeLabel":"string"},"t12_document_id":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.bundle.t12_document_id","typeLabel":"string"}},"isRequired":true,"uniqueKey":"oneOf.1.bundle","typeLabel":"object"},"asset_class":{"type":"string","enum":["multifamily","self-storage","industrial-outdoor-storage","commercial","industrial","office","retail","hotel"],"description":"The property's asset class. **Required**, and it decides which standard columns a rent roll is consolidated onto — beds/baths for multifamily, unit size and climate control for self-storage, and so on.\n\nSend the property's real class rather than a placeholder. A class you did not mean returns that class's column set, and a class outside the enum is a `400`. If a document turns out not to be a rent roll the value is simply unused.\n","isRequired":true,"uniqueKey":"oneOf.1.asset_class","typeLabel":"enum\u003cstring>"},"document_id":{"type":"string","description":"Single document to extract.","uniqueKey":"oneOf.1.document_id","typeLabel":"string"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"document_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"9c8d4365-53d5-4548-ad15-0861cd335bb3":{"description":"Accepted and billed; processing started.","headers":{"Request-Id":{"description":"Unique request identifier; quote in support requests.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["id","object","status","documents","created_at","sandbox"],"properties":{"id":{"type":"string","example":"ext_01J9ZJYA","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"object":{"type":"string","const":"extraction","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"status":{"type":"string","enum":["processing","completed","failed"],"isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"documents":{"type":"array","items":{"type":"object","required":["document_id","document_type","schema_version","status"],"properties":{"document_id":{"type":"string","isRequired":true,"uniqueKey":"documents.items.[INDEX].document_id","typeLabel":"string"},"document_type":{"type":"string","description":"Declared/resolved document type; determines the rate-card price and the output schema family.\n","enum":["offering_memorandum","rent_roll","t12","other_standard","other_complex"],"isRequired":true,"uniqueKey":"documents.items.[INDEX].document_type","typeLabel":"enum\u003cstring>"},"schema_version":{"type":"string","example":"rent_roll.v1","isRequired":true,"uniqueKey":"documents.items.[INDEX].schema_version","typeLabel":"string"},"status":{"type":"string","enum":["processing","completed","failed"],"isRequired":true,"uniqueKey":"documents.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"phase":{"type":"string","enum":["extracting","consolidating"],"description":"Which stage a still-processing document is in. Rent rolls are\ntwo-phase — `extracting` reads the file, then `consolidating`\nruns the rent-roll pipeline that produces the typed\n`rent_roll.v1` output. Every other type is single-phase and\nreports `extracting`. Absent once the document is terminal.\n","uniqueKey":"documents.items.[INDEX].phase","typeLabel":"enum\u003cstring>"},"billed":{"type":"object","required":["rate_code","units","amount_usd"],"properties":{"rate_code":{"type":"string","description":"Rate-card line the debit was priced against.","example":"rent_roll","isRequired":true,"uniqueKey":"documents.items.[INDEX].billed.rate_code","typeLabel":"string"},"units":{"type":"integer","description":"Billing units. Documents exceeding their type's size cap bill as multiple units (e.g. a 2,400-row rent roll = 3 units).\n","example":1,"isRequired":true,"uniqueKey":"documents.items.[INDEX].billed.units","typeLabel":"integer"},"amount_usd":{"type":"string","description":"Decimal string, e.g. \"12.00\".","example":"12.00","isRequired":true,"uniqueKey":"documents.items.[INDEX].billed.amount_usd","typeLabel":"string"}},"uniqueKey":"documents.items.[INDEX].billed","typeLabel":"object"},"error":{"type":"object","description":"Present when the document failed. A failed document is never\nbilled: its charge is refunded automatically.\n\n`code` is `extraction_failed`, or `extraction_timeout` when the\ndocument did not finish within the processing window. `reason`\nsays why, from a closed list — branch on `reason`, and show\n`message` to your user as-is:\n\n- `document_too_large` — too large to extract in one run.\n Splitting the file (for example, one sheet per file) usually\n gets it through.\n- `unreadable_file` — the file could not be opened or read.\n- `no_data_found` — the file was read but held nothing to\n extract; for a rent roll, no unit table was found.\n- `processing_timeout` — processing took too long. A limit on\n our side rather than a problem with the file; retry later.\n- `temporary_failure` — interrupted by a transient error on our\n side; retrying usually succeeds.\n- `internal_error` — any other failure on our side.\n\nTreat an unrecognized `reason` as `internal_error`: new reasons\nmay be added without a schema version bump.\n","properties":{"code":{"type":"string","example":"extraction_failed","uniqueKey":"documents.items.[INDEX].error.code","typeLabel":"string"},"reason":{"type":"string","enum":["document_too_large","unreadable_file","no_data_found","processing_timeout","temporary_failure","internal_error"],"example":"document_too_large","uniqueKey":"documents.items.[INDEX].error.reason","typeLabel":"enum\u003cstring>"},"message":{"type":"string","example":"This document is too large to extract in one run. Splitting it into smaller files (for example, one sheet per file) should get it through. You were not charged for it.","uniqueKey":"documents.items.[INDEX].error.message","typeLabel":"string"}},"uniqueKey":"documents.items.[INDEX].error","typeLabel":"object"}},"uniqueKey":"documents.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"documents","typeLabel":"object[]"},"sandbox":{"type":"boolean","isRequired":true,"uniqueKey":"sandbox","typeLabel":"boolean"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"billed_total_usd":{"type":"string","example":"12.00","uniqueKey":"billed_total_usd","typeLabel":"string"},"completed_at":{"type":"string","format":"date-time","uniqueKey":"completed_at","typeLabel":"string\u003cdate-time>"},"elapsed_seconds":{"type":"integer","description":"Whole seconds since `created_at`. Present while processing, so a caller can tell a job that just started from one approaching the 60-minute ceiling without doing date math.","example":42,"uniqueKey":"elapsed_seconds","typeLabel":"integer"},"poll_after_seconds":{"type":"integer","description":"Recommended seconds to wait before polling again. Present while processing; mirrors the `Retry-After` header. Prefer this over a hard-coded interval.","example":15,"uniqueKey":"poll_after_seconds","typeLabel":"integer"},"result_url":{"type":"string","description":"Convenience link to `/v1/extractions/{id}/result`; present when completed.","uniqueKey":"result_url","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"ext_01J9ZJYA","object":"extraction","status":"processing","documents":[{"document_id":"\u003cstring>","document_type":"offering_memorandum","schema_version":"rent_roll.v1","status":"processing","phase":"extracting","billed":{"rate_code":"rent_roll","units":1,"amount_usd":"12.00"},"error":{"code":"extraction_failed","reason":"document_too_large","message":"This document is too large to extract in one run. Splitting it into smaller files (for example, one sheet per file) should get it through. You were not charged for it."}}],"sandbox":true,"created_at":"2023-11-07T05:31:56Z","billed_total_usd":"12.00","completed_at":"2023-11-07T05:31:56Z","elapsed_seconds":42,"poll_after_seconds":15,"result_url":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"ea34b2a5-fc79-4d06-954b-bb7178e0ce9b":{"description":"Malformed request.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem details.","required":["title","status","code","request_id"],"properties":{"title":{"type":"string","example":"Document exceeds the size limit","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","example":422,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Stable machine-readable error code.","example":"document_over_size_cap","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"type":{"type":"string","format":"uri","description":"Link to this code's entry on the errors page. An anchor, not a path — every code lives on the one page.\n","example":"https://docs.trycactus.com/errors#document_over_size_cap","uniqueKey":"type","typeLabel":"string\u003curi>"},"detail":{"type":"string","example":"Files over 500 pages or 100 MB are rejected and not charged.","uniqueKey":"detail","typeLabel":"string"},"errors":{"type":"array","description":"Field-level validation errors, when applicable.","items":{"type":"object","properties":{"field":{"type":"string","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"title":"Document exceeds the size limit","status":422,"code":"document_over_size_cap","request_id":"\u003cstring>","type":"https://docs.trycactus.com/errors#document_over_size_cap","detail":"Files over 500 pages or 100 MB are rejected and not charged.","errors":[{"field":"\u003cstring>","code":"\u003cstring>","message":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"4fe65555-7d74-439b-8b22-f0e322d12fa7":{"description":"Missing, invalid, or revoked API key.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem details.","required":["title","status","code","request_id"],"properties":{"title":{"type":"string","example":"Document exceeds the size limit","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","example":422,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Stable machine-readable error code.","example":"document_over_size_cap","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"type":{"type":"string","format":"uri","description":"Link to this code's entry on the errors page. An anchor, not a path — every code lives on the one page.\n","example":"https://docs.trycactus.com/errors#document_over_size_cap","uniqueKey":"type","typeLabel":"string\u003curi>"},"detail":{"type":"string","example":"Files over 500 pages or 100 MB are rejected and not charged.","uniqueKey":"detail","typeLabel":"string"},"errors":{"type":"array","description":"Field-level validation errors, when applicable.","items":{"type":"object","properties":{"field":{"type":"string","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"title":"Document exceeds the size limit","status":422,"code":"document_over_size_cap","request_id":"\u003cstring>","type":"https://docs.trycactus.com/errors#document_over_size_cap","detail":"Files over 500 pages or 100 MB are rejected and not charged.","errors":[{"field":"\u003cstring>","code":"\u003cstring>","message":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"1a5648f3-9f75-4e0c-8ff9-5bfcfc7c3bfc":{"description":"Usage pool exhausted and overage disabled for this account (by default, service continues in arrears and this error is not returned).\n","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem details.","required":["title","status","code","request_id"],"properties":{"title":{"type":"string","example":"Document exceeds the size limit","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","example":422,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Stable machine-readable error code.","example":"document_over_size_cap","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"type":{"type":"string","format":"uri","description":"Link to this code's entry on the errors page. An anchor, not a path — every code lives on the one page.\n","example":"https://docs.trycactus.com/errors#document_over_size_cap","uniqueKey":"type","typeLabel":"string\u003curi>"},"detail":{"type":"string","example":"Files over 500 pages or 100 MB are rejected and not charged.","uniqueKey":"detail","typeLabel":"string"},"errors":{"type":"array","description":"Field-level validation errors, when applicable.","items":{"type":"object","properties":{"field":{"type":"string","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"title":"Document exceeds the size limit","status":422,"code":"document_over_size_cap","request_id":"\u003cstring>","type":"https://docs.trycactus.com/errors#document_over_size_cap","detail":"Files over 500 pages or 100 MB are rejected and not charged.","errors":[{"field":"\u003cstring>","code":"\u003cstring>","message":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"51de3874-3e4e-4ba3-b347-99fcb1dcc3fb":{"description":"The key authenticated, but this product is not available to it. `product_not_enabled` — your account has not been enabled for this product; contact api@trycactus.com. `missing_scope` — your account has the product but this particular key was issued without it; use a key that carries the scope.\n","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem details.","required":["title","status","code","request_id"],"properties":{"title":{"type":"string","example":"Document exceeds the size limit","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","example":422,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Stable machine-readable error code.","example":"document_over_size_cap","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"type":{"type":"string","format":"uri","description":"Link to this code's entry on the errors page. An anchor, not a path — every code lives on the one page.\n","example":"https://docs.trycactus.com/errors#document_over_size_cap","uniqueKey":"type","typeLabel":"string\u003curi>"},"detail":{"type":"string","example":"Files over 500 pages or 100 MB are rejected and not charged.","uniqueKey":"detail","typeLabel":"string"},"errors":{"type":"array","description":"Field-level validation errors, when applicable.","items":{"type":"object","properties":{"field":{"type":"string","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"product_not_enabled":{"title":"product_not_enabled","value":{"type":"https://docs.trycactus.com/errors#product_not_enabled","title":"Product not enabled for this account","status":403,"detail":"Your account is not enabled for underwriting. Contact api@trycactus.com to enable it.","code":"product_not_enabled","request_id":"req_01J9Z6X2QK8N4M"}},"missing_scope":{"title":"missing_scope","value":{"type":"https://docs.trycactus.com/errors#missing_scope","title":"API key lacks the required scope","status":403,"detail":"This API key does not have the 'underwriting' scope. Use a key with underwriting access.","code":"missing_scope","request_id":"req_01J9Z6X2QK8N4M"}}},"exampleType":"examples"}},"exampleType":"examples"},"bce90a32-a0c2-4990-ab0b-f2114aa041c0":{"description":"Document rejected during validation (not charged).","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem details.","required":["title","status","code","request_id"],"properties":{"title":{"type":"string","example":"Document exceeds the size limit","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","example":422,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Stable machine-readable error code.","example":"document_over_size_cap","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"type":{"type":"string","format":"uri","description":"Link to this code's entry on the errors page. An anchor, not a path — every code lives on the one page.\n","example":"https://docs.trycactus.com/errors#document_over_size_cap","uniqueKey":"type","typeLabel":"string\u003curi>"},"detail":{"type":"string","example":"Files over 500 pages or 100 MB are rejected and not charged.","uniqueKey":"detail","typeLabel":"string"},"errors":{"type":"array","description":"Field-level validation errors, when applicable.","items":{"type":"object","properties":{"field":{"type":"string","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"title":"Document exceeds the size limit","status":422,"code":"document_over_size_cap","request_id":"\u003cstring>","type":"https://docs.trycactus.com/errors#document_over_size_cap","detail":"Files over 500 pages or 100 MB are rejected and not charged.","errors":[{"field":"\u003cstring>","code":"\u003cstring>","message":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"f58782c0-59eb-4f19-80bb-8a43bed41018":{"description":"Rate limit exceeded.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying."}},"content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem details.","required":["title","status","code","request_id"],"properties":{"title":{"type":"string","example":"Document exceeds the size limit","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","example":422,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Stable machine-readable error code.","example":"document_over_size_cap","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"type":{"type":"string","format":"uri","description":"Link to this code's entry on the errors page. An anchor, not a path — every code lives on the one page.\n","example":"https://docs.trycactus.com/errors#document_over_size_cap","uniqueKey":"type","typeLabel":"string\u003curi>"},"detail":{"type":"string","example":"Files over 500 pages or 100 MB are rejected and not charged.","uniqueKey":"detail","typeLabel":"string"},"errors":{"type":"array","description":"Field-level validation errors, when applicable.","items":{"type":"object","properties":{"field":{"type":"string","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"title":"Document exceeds the size limit","status":422,"code":"document_over_size_cap","request_id":"\u003cstring>","type":"https://docs.trycactus.com/errors#document_over_size_cap","detail":"Files over 500 pages or 100 MB are rejected and not charged.","errors":[{"field":"\u003cstring>","code":"\u003cstring>","message":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"2297ff2f-d9c9-4023-b4d6-2a7b14510000":{"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"ck_live_* or ck_sandbox_*","description":"Partner API key issued by Cactus.","scopes":[],"schemeName":"apiKey"}}},"servers":{"1a16f6a0-bda6-4bf3-9c8b-84185a6fb93b":{"url":"https://api.trycactus.com","description":"Production (live and sandbox keys)"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"ck_live_* or ck_sandbox_*","description":"Partner API key issued by Cactus.","scopes":[],"schemeName":"apiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Partner API key issued by Cactus.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiKey","name":"Authorization"}],"title":"apiKey"}]},"originalFileLocation":"api-reference/openapi.yaml"},"subdomain":"cactus-10e55128","siteName":"Cactus Partner API","title":"Create an extraction job - Cactus Partner API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-06T20:21:42.452Z","originalFileLocation":"api-reference/extractions/create-an-extraction-job.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=\"Validates, accepts, and bills the referenced document(s), then starts extraction. Submit either a single document_id or a bundle of offering memorandum + rent roll + T-12 (billed at the bundle rate). Validation failures for the document (size cap, unreadable file, unresolvable type) reject the request with 422 and no charge. Processing time scales with document content - a focused single-purpose file finishes fastest. See Preparing documents.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Cactus Partner API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/cactus-10e55128/_generated/favicon/apple-touch-icon.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/cactus-10e55128/_generated/favicon/favicon-32x32.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/cactus-10e55128/_generated/favicon/favicon-16x16.png?v=3\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/cactus-10e55128/_generated/favicon/favicon.ico?v=3\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create an extraction job - Cactus Partner API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Validates, accepts, and bills the referenced document(s), then starts extraction. Submit either a single document_id or a bundle of offering memorandum + rent roll + T-12 (billed at the bundle rate). Validation failures for the document (size cap, unreadable file, unresolvable type) reject the request with 422 and no charge. Processing time scales with document content - a focused single-purpose file finishes fastest. See Preparing documents.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Cactus Partner API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.trycactus.com/api-reference/extractions/create-an-extraction-job\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://cactus-10e55128.mintlify.site/_mintlify/api/og/v2?division=Extractions\u0026amp;title=Create+an+extraction+job\u0026amp;description=Validates%2C+accepts%2C+and+bills+the+referenced+document%28s%29%2C+then+starts%0Aextraction.+Submit+either+a+single+%60document_id%60+or+a+%60bundle%60+of%0Aoffering+memorandum+%2B+re\u0026amp;theme=6ee3ac95092e49869d3cabc5\u0026amp;signature=a4c4c4a9c1ed4f39be1e90ece9cdaab9f67d1dc242361f26c8b2f38b56b1599f\">\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=\"Create an extraction job - Cactus Partner API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Validates, accepts, and bills the referenced document(s), then starts extraction. Submit either a single document_id or a bundle of offering memorandum + rent roll + T-12 (billed at the bundle rate). Validation failures for the document (size cap, unreadable file, unresolvable type) reject the request with 422 and no charge. Processing time scales with document content - a focused single-purpose file finishes fastest. See Preparing documents.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://cactus-10e55128.mintlify.site/_mintlify/api/og/v2?division=Extractions\u0026amp;title=Create+an+extraction+job\u0026amp;description=Validates%2C+accepts%2C+and+bills+the+referenced+document%28s%29%2C+then+starts%0Aextraction.+Submit+either+a+single+%60document_id%60+or+a+%60bundle%60+of%0Aoffering+memorandum+%2B+re\u0026amp;theme=6ee3ac95092e49869d3cabc5\u0026amp;signature=a4c4c4a9c1ed4f39be1e90ece9cdaab9f67d1dc242361f26c8b2f38b56b1599f\">\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=\"https://mintlify.s3.us-west-1.amazonaws.com/cactus-10e55128/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Cactus Partner API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0E7C5B\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.trycactus.com/api-reference/extractions/create-an-extraction-job\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/extractions/create-an-extraction-job.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.trycactus.com/#organization\",\"name\":\"Cactus Partner API\",\"url\":\"https://docs.trycactus.com\"},{\"@type\":\"WebSite\",\"@id\":\"https://docs.trycactus.com#website\",\"name\":\"Cactus Partner API\",\"url\":\"https://docs.trycactus.com\",\"publisher\":{\"@id\":\"https://docs.trycactus.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.trycactus.com/api-reference/extractions/create-an-extraction-job#webpage\",\"url\":\"https://docs.trycactus.com/api-reference/extractions/create-an-extraction-job\",\"name\":\"Create an extraction job\",\"description\":\"Validates, accepts, and bills the referenced document(s), then starts extraction. Submit either a single document_id or a bundle of offering memorandum + rent roll + T-12 (billed at the bundle rate). Validation failures for the document (size cap, unreadable file, unresolvable type) reject the request with 422 and no charge. Processing time scales with document content - a focused single-purpose file finishes fastest. See Preparing documents.\",\"dateModified\":\"2026-11-06T20:21:42.452Z\",\"isPartOf\":{\"@id\":\"https://docs.trycactus.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.trycactus.com/api-reference/extractions/create-an-extraction-job#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.trycactus.com/api-reference/extractions/create-an-extraction-job#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Extractions\",\"item\":\"https://docs.trycactus.com/api-reference/extractions/list-extraction-jobs\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create an extraction job\",\"item\":\"https://docs.trycactus.com/api-reference/extractions/create-an-extraction-job\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.trycactus.com/api-reference/extractions/create-an-extraction-job#apireference\",\"headline\":\"Create an extraction job\",\"name\":\"Create an extraction job\",\"description\":\"Validates, accepts, and bills the referenced document(s), then starts extraction. Submit either a single document_id or a bundle of offering memorandum + rent roll + T-12 (billed at the bundle rate). Validation failures for the document (size cap, unreadable file, unresolvable type) reject the request with 422 and no charge. Processing time scales with document content - a focused single-purpose file finishes fastest. See Preparing documents.\",\"url\":\"https://docs.trycactus.com/api-reference/extractions/create-an-extraction-job\",\"mainEntityOfPage\":{\"@id\":\"https://docs.trycactus.com/api-reference/extractions/create-an-extraction-job#webpage\"},\"dateModified\":\"2026-11-06T20:21:42.452Z\",\"publisher\":{\"@id\":\"https://docs.trycactus.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.trycactus.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Cactus Partner API\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Cactus Partner API\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/extractions/create-an-extraction-job.md","siteName":"Cactus Partner API","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/introduction"}]},{"tab":"API Reference","groups":[{"group":"Documents","pages":[{"title":"List documents","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/documents","href":"/api-reference/documents/list-documents"},{"title":"Register a document and get a presigned upload URL","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/documents","href":"/api-reference/documents/register-a-document-and-get-a-presigned-upload-url"},{"title":"Retrieve a document","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/documents/{document_id}","href":"/api-reference/documents/retrieve-a-document"},{"title":"Delete a document and its stored file","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/documents/{document_id}","href":"/api-reference/documents/delete-a-document-and-its-stored-file"},{"title":"Get a short-lived link to the original uploaded file","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/documents/{document_id}/download","href":"/api-reference/documents/get-a-short-lived-link-to-the-original-uploaded-file"}]},{"group":"Extractions","pages":[{"title":"List extraction jobs","description":null,"deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/extractions","href":"/api-reference/extractions/list-extraction-jobs"},{"title":"Create an extraction job","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/extractions","href":"/api-reference/extractions/create-an-extraction-job"},{"title":"Retrieve an extraction job (poll for status)","description":"How long to expect depends on the document type. T-12s, offering\nmemoranda and other documents usually finish in 2-5 minutes. Rent\nrolls run a second consolidation phase and take longer: most land\nwithin 10 minutes, and a large one can run to 30. See\n`documents[].phase` to tell the phases apart.\n\n\nThose are measured over a live corpus, not targets — build against\n`poll_after_seconds` rather than an expected duration.\n\nPass `wait` to long-poll instead of sleeping between calls. While a\njob is running the response carries `poll_after_seconds` and a\n`Retry-After` header — use those rather than a fixed interval.\n\nA job cannot run longer than 60 minutes; past that the worker fails\nit and refunds every billed line in full.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/extractions/{extraction_id}","href":"/api-reference/extractions/retrieve-an-extraction-job-poll-for-status"},{"title":"Retrieve the structured output of a completed extraction","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/extractions/{extraction_id}/result","href":"/api-reference/extractions/retrieve-the-structured-output-of-a-completed-extraction"}]},{"group":"Underwritings","pages":[{"title":"List underwriting runs","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/underwritings","href":"/api-reference/underwritings/list-underwriting-runs"},{"title":"Start an automated underwriting run","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/underwritings","href":"/api-reference/underwritings/start-an-automated-underwriting-run"},{"title":"Retrieve an underwriting run (poll for status)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/underwritings/{underwriting_id}","href":"/api-reference/underwritings/retrieve-an-underwriting-run-poll-for-status"},{"title":"Create a private report embed session","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/underwritings/{underwriting_id}/embed-sessions","href":"/api-reference/underwritings/create-a-private-report-embed-session"},{"title":"Download the populated Excel model","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/underwritings/{underwriting_id}/model","href":"/api-reference/underwritings/download-the-populated-excel-model"},{"title":"Outline of a finished report","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/underwritings/{underwriting_id}/outline","href":"/api-reference/underwritings/outline-of-a-finished-report"},{"title":"One section of a finished report","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/underwritings/{underwriting_id}/sections/{section}","href":"/api-reference/underwritings/one-section-of-a-finished-report"},{"title":"Editable assumptions behind a finished report","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/underwritings/{underwriting_id}/assumptions","href":"/api-reference/underwritings/editable-assumptions-behind-a-finished-report"},{"title":"What-if on a finished report","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/underwritings/{underwriting_id}/previews","href":"/api-reference/underwritings/what-if-on-a-finished-report"},{"title":"Request a change to a finished report","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/underwritings/{underwriting_id}/changes","href":"/api-reference/underwritings/request-a-change-to-a-finished-report"},{"title":"Get a change","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/underwriting-changes/{change_id}","href":"/api-reference/underwritings/get-a-change"},{"title":"Confirm a change and start the new version","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/underwriting-changes/{change_id}/confirm","href":"/api-reference/underwritings/confirm-a-change-and-start-the-new-version"},{"title":"Every version of a report","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/underwritings/{underwriting_id}/versions","href":"/api-reference/underwritings/every-version-of-a-report"}]},{"group":"Usage","pages":[{"title":"Usage pool balance and metered activity","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/usage","href":"/api-reference/usage/usage-pool-balance-and-metered-activity"}]},{"group":"Webhook Endpoints","pages":[{"title":"List webhook endpoints","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/webhook-endpoints","href":"/api-reference/webhook-endpoints/list-webhook-endpoints"},{"title":"Register a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/webhook-endpoints","href":"/api-reference/webhook-endpoints/register-a-webhook-endpoint"},{"title":"Delete a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/webhook-endpoints/{endpoint_id}","href":"/api-reference/webhook-endpoints/delete-a-webhook-endpoint"}]},{"group":"API Reference","pages":[{"title":"Extraction finished successfully","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook extraction.completed","href":"/api-reference/extraction-finished-successfully"},{"title":"Extraction failed accepted documents are auto refunded","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook extraction.failed","href":"/api-reference/extraction-failed-accepted-documents-are-auto-refunded"},{"title":"Underwriting run finished with a report link","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook underwriting.completed","href":"/api-reference/underwriting-run-finished-with-a-report-link"},{"title":"Underwriting run failed","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook underwriting.failed","href":"/api-reference/underwriting-run-failed"}]}]}]},"basePath":"","title":"Create an extraction job - Cactus Partner API","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CybtLBIt.js","utils-BMLj2fvV.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-B6In562Y.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Dr8Mfhp9.js","snippetPresets-2rmQvMVl.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-WMqJYdZj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CJ-MlPHu.js","shallow-dY3TMRCk.js","getApiPlaygroundDisplay-v-1B2bKm.js","CodeSnippet-BDhiTB7U.js","CodeSnippets-D9hnzQcS.js","Page-C4GwDT3_.js","getPastedJson-Th2V45jI.js","icon-BQXch1W9.js","MethodPill-BCqUneP3.js","DuplicateIcon-Q_-bhurZ.js","createIcon-DUjLHRqp.js","DynamicMarkdown-B-f2cqXQ.js","SectionHeading-Da5NsV4v.js","axios-vUo_bRtp.js","Markdown-D13FWkIM.js","clsx-D3Isdib3.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-C-XZBk9h.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink--qIqmmVG.js"]}