{"openapi":"3.1.0","info":{"title":"Contract10 API","version":"1.0.0","description":"Contract10 reads an executed purchase contract, pulls out the dates and contingency periods with a citation to the page each one came from, then computes every downstream deadline deterministically: earnest money, inspection, appraisal, loan approval, title review, final walkthrough, closing. Each deadline shows its derivation, the base date plus the offset plus the calendar-or-business-day rule, so an agent can check it in seconds instead of trusting it. The same engine is a single-key API and an MCP server, so AI real-estate agents can build a closing timeline the way a transaction coordinator does.","contact":{"name":"Contract10","url":"https://www.contract10.com","email":"hello@contract10.com"}},"servers":[{"url":"https://www.contract10.com"}],"security":[{},{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"c10_live_*"}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]},"ContractField":{"type":"object","properties":{"key":{"type":"string","enum":["acceptance_date","closing_date","closing_days","earnest_money_days","earnest_money_amount","inspection_period_days","inspection_objection_days","appraisal_days","loan_approval_days","title_review_days","seller_disclosure_days","contingency_removal_days","final_walkthrough_days","possession_date"],"description":"The field catalogue key."},"label":{"type":"string"},"unit":{"type":"string","enum":["date","days","usd","text"]},"value":{"type":"string","description":"Normalized value: an ISO yyyy-mm-dd date, or an integer string for days/usd."},"value_text":{"type":["string","null"],"description":"The value exactly as printed in the contract, when it differs from `value`."},"day_basis":{"type":["string","null"],"enum":["calendar","business",null],"description":"Calendar vs business days, when the contract states one."},"page":{"type":"integer","minimum":0,"description":"1-based page of the uploaded PDF this was read from. 0 means typed in, not read from a page."},"quote":{"type":["string","null"],"description":"Short verbatim quote supporting the value."},"confidence":{"type":"string","enum":["high","medium","low"]}},"required":["key","label","unit","value","page","confidence"]},"Deadline":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"due_date":{"type":"string","format":"date"},"base_key":{"type":"string","enum":["acceptance_date","closing_date"],"description":"The anchor the offset was counted from."},"base_date":{"type":"string","format":"date"},"offset_days":{"type":"integer","description":"Days added to the base date. Negative counts backward from closing."},"day_basis":{"type":"string","enum":["calendar","business"]},"roll_rule":{"type":"string","enum":["forward","backward","none"],"description":"How a weekend/holiday landing is resolved."},"rolled_from":{"type":["string","null"],"format":"date","description":"The date before any roll was applied, if it moved."},"rolled_reason":{"type":["string","null"],"description":"Why it moved: Saturday, Sunday, or the holiday name."},"derivation":{"type":"string","description":"Plain-English arithmetic, e.g. \"17 calendar days after acceptance (Aug 3), rolled forward from Saturday Aug 20\"."},"source_field":{"type":["string","null"],"enum":["acceptance_date","closing_date","closing_days","earnest_money_days","earnest_money_amount","inspection_period_days","inspection_objection_days","appraisal_days","loan_approval_days","title_review_days","seller_disclosure_days","contingency_removal_days","final_walkthrough_days","possession_date",null],"description":"The contract field this deadline was computed from."},"source_page":{"type":["integer","null"]},"source_quote":{"type":["string","null"]},"needs_verify":{"type":"boolean","description":"True when the source field's confidence was low."},"group":{"type":"string","enum":["money","diligence","financing","title","closing"]}},"required":["key","label","due_date","base_key","base_date","offset_days","day_basis","roll_rule","derivation","needs_verify","group"]},"Timeline":{"type":"object","properties":{"acceptance_date":{"type":["string","null"],"format":"date"},"closing_date":{"type":["string","null"],"format":"date"},"deadlines":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"due_date":{"type":"string","format":"date"},"base_key":{"type":"string","enum":["acceptance_date","closing_date"],"description":"The anchor the offset was counted from."},"base_date":{"type":"string","format":"date"},"offset_days":{"type":"integer","description":"Days added to the base date. Negative counts backward from closing."},"day_basis":{"type":"string","enum":["calendar","business"]},"roll_rule":{"type":"string","enum":["forward","backward","none"],"description":"How a weekend/holiday landing is resolved."},"rolled_from":{"type":["string","null"],"format":"date","description":"The date before any roll was applied, if it moved."},"rolled_reason":{"type":["string","null"],"description":"Why it moved: Saturday, Sunday, or the holiday name."},"derivation":{"type":"string","description":"Plain-English arithmetic, e.g. \"17 calendar days after acceptance (Aug 3), rolled forward from Saturday Aug 20\"."},"source_field":{"type":["string","null"],"enum":["acceptance_date","closing_date","closing_days","earnest_money_days","earnest_money_amount","inspection_period_days","inspection_objection_days","appraisal_days","loan_approval_days","title_review_days","seller_disclosure_days","contingency_removal_days","final_walkthrough_days","possession_date",null],"description":"The contract field this deadline was computed from."},"source_page":{"type":["integer","null"]},"source_quote":{"type":["string","null"]},"needs_verify":{"type":"boolean","description":"True when the source field's confidence was low."},"group":{"type":"string","enum":["money","diligence","financing","title","closing"]}},"required":["key","label","due_date","base_key","base_date","offset_days","day_basis","roll_rule","derivation","needs_verify","group"]}},"warnings":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","enum":["missing_acceptance_date","missing_closing_date","closing_before_acceptance","deadline_after_closing","deadline_before_acceptance","low_confidence_field","no_periods_found","preset_defaults_used"]},"message":{"type":"string"},"field":{"type":["string","null"],"enum":["acceptance_date","closing_date","closing_days","earnest_money_days","earnest_money_amount","inspection_period_days","inspection_objection_days","appraisal_days","loan_approval_days","title_review_days","seller_disclosure_days","contingency_removal_days","final_walkthrough_days","possession_date",null]}},"required":["code","message"]}},"holidays_in_window":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"name":{"type":"string"}}},"description":"US federal holidays that fell inside the transaction window."},"engine_version":{"type":"string"}},"required":["acceptance_date","closing_date","deadlines","warnings","holidays_in_window","engine_version"]},"ContractMeta":{"type":"object","properties":{"property_address":{"type":["string","null"],"description":"Subject property as printed. Not address-verified."},"buyer_ref":{"type":["string","null"]},"seller_ref":{"type":["string","null"]},"state_code":{"type":["string","null"],"description":"Two-letter state code, when the contract states one."},"contract_name":{"type":["string","null"],"description":"The form's own printed name, e.g. \"RESIDENTIAL PURCHASE AGREEMENT\"."}}},"Transaction":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["processing","completed","failed"]},"source":{"type":"string","enum":["web","api","mcp"]},"needs_review":{"type":"boolean"},"property_address":{"type":"string"},"transaction_type":{"type":"string"},"state_code":{"type":["string","null"]},"contract_name":{"type":["string","null"]},"acceptance_date":{"type":["string","null"],"format":"date"},"closing_date":{"type":["string","null"],"format":"date"},"archived":{"type":"boolean"},"file_name":{"type":"string"},"page_count":{"type":"integer"},"field_count":{"type":"integer"},"deadline_count":{"type":"integer"},"confidence":{"type":["number","null"]},"engine":{"type":["string","null"]},"engine_version":{"type":["string","null"]},"error":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"completed_at":{"type":["string","null"],"format":"date-time"}},"required":["id","status","source","property_address","created_at"]}}},"paths":{"/api/v1/timeline":{"post":{"summary":"Compute a closing timeline from contract dates and periods. Deterministic: no model, no document, same input to same output. Free, and no API key is needed. Every deadline returns its base date, offset, day basis, weekend or holiday roll, and a plain-English derivation.","operationId":"post_api_v1_timeline","security":[{},{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"acceptance_date":{"type":["string","null"],"format":"date"},"closing_date":{"type":["string","null"],"format":"date"},"deadlines":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"due_date":{"type":"string","format":"date"},"base_key":{"type":"string","enum":["acceptance_date","closing_date"],"description":"The anchor the offset was counted from."},"base_date":{"type":"string","format":"date"},"offset_days":{"type":"integer","description":"Days added to the base date. Negative counts backward from closing."},"day_basis":{"type":"string","enum":["calendar","business"]},"roll_rule":{"type":"string","enum":["forward","backward","none"],"description":"How a weekend/holiday landing is resolved."},"rolled_from":{"type":["string","null"],"format":"date","description":"The date before any roll was applied, if it moved."},"rolled_reason":{"type":["string","null"],"description":"Why it moved: Saturday, Sunday, or the holiday name."},"derivation":{"type":"string","description":"Plain-English arithmetic, e.g. \"17 calendar days after acceptance (Aug 3), rolled forward from Saturday Aug 20\"."},"source_field":{"type":["string","null"],"enum":["acceptance_date","closing_date","closing_days","earnest_money_days","earnest_money_amount","inspection_period_days","inspection_objection_days","appraisal_days","loan_approval_days","title_review_days","seller_disclosure_days","contingency_removal_days","final_walkthrough_days","possession_date",null],"description":"The contract field this deadline was computed from."},"source_page":{"type":["integer","null"]},"source_quote":{"type":["string","null"]},"needs_verify":{"type":"boolean","description":"True when the source field's confidence was low."},"group":{"type":"string","enum":["money","diligence","financing","title","closing"]}},"required":["key","label","due_date","base_key","base_date","offset_days","day_basis","roll_rule","derivation","needs_verify","group"]}},"warnings":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","enum":["missing_acceptance_date","missing_closing_date","closing_before_acceptance","deadline_after_closing","deadline_before_acceptance","low_confidence_field","no_periods_found","preset_defaults_used"]},"message":{"type":"string"},"field":{"type":["string","null"],"enum":["acceptance_date","closing_date","closing_days","earnest_money_days","earnest_money_amount","inspection_period_days","inspection_objection_days","appraisal_days","loan_approval_days","title_review_days","seller_disclosure_days","contingency_removal_days","final_walkthrough_days","possession_date",null]}},"required":["code","message"]}},"holidays_in_window":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"name":{"type":"string"}}},"description":"US federal holidays that fell inside the transaction window."},"engine_version":{"type":"string"}},"required":["acceptance_date","closing_date","deadlines","warnings","holidays_in_window","engine_version"]},"request_id":{"type":"string"},"attribution":{"type":"string","description":"Present on free/anonymous responses only."}},"required":["data","request_id"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"fields":{"type":"array","minItems":1,"maxItems":40,"description":"At minimum: [{ \"key\": \"acceptance_date\", \"value\": \"2026-08-03\" }]. A period you omit produces no deadline.","items":{"type":"object","properties":{"key":{"type":"string","enum":["acceptance_date","closing_date","closing_days","earnest_money_days","earnest_money_amount","inspection_period_days","inspection_objection_days","appraisal_days","loan_approval_days","title_review_days","seller_disclosure_days","contingency_removal_days","final_walkthrough_days","possession_date"]},"value":{"type":"string","description":"yyyy-mm-dd for a date field; an integer string for days/usd."},"day_basis":{"type":"string","enum":["calendar","business"]}},"required":["key","value"]}},"options":{"type":"object","properties":{"day_zero":{"type":"string","enum":["acceptance","day_after_acceptance"],"description":"Defaults to day_after_acceptance."},"extra_holidays":{"type":"array","items":{"type":"string","format":"date"},"description":"Extra yyyy-mm-dd dates to treat as holidays. US federal holidays are always applied."}},"additionalProperties":false},"preset":{"type":"string","enum":["california","texas","florida","arizona","colorado","georgia","north-carolina","washington"],"description":"Seed the request with the starting values of a state's standard form, for a caller who knows the state but not the periods. Every field the preset supplies is marked low confidence and the response carries a preset_defaults_used warning naming them, so preset values can never be mistaken for what the contract says."}},"required":["fields"],"additionalProperties":false}}}}}},"/api/v1/extract":{"post":{"summary":"Read an executed purchase contract (PDF) and return the dates and contingency periods it states, each with the page it came from, a verbatim quote and a confidence. Returns the computed timeline alongside them by default. A period the contract does not state is absent from the result: it is never guessed.","operationId":"post_api_v1_extract","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"transaction_id":{"type":["string","null"],"description":"Id to read back via GET /api/v1/transactions/{id}. Null when no database is configured."},"meta":{"type":"object","properties":{"property_address":{"type":["string","null"],"description":"Subject property as printed. Not address-verified."},"buyer_ref":{"type":["string","null"]},"seller_ref":{"type":["string","null"]},"state_code":{"type":["string","null"],"description":"Two-letter state code, when the contract states one."},"contract_name":{"type":["string","null"],"description":"The form's own printed name, e.g. \"RESIDENTIAL PURCHASE AGREEMENT\"."}}},"fields":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","enum":["acceptance_date","closing_date","closing_days","earnest_money_days","earnest_money_amount","inspection_period_days","inspection_objection_days","appraisal_days","loan_approval_days","title_review_days","seller_disclosure_days","contingency_removal_days","final_walkthrough_days","possession_date"],"description":"The field catalogue key."},"label":{"type":"string"},"unit":{"type":"string","enum":["date","days","usd","text"]},"value":{"type":"string","description":"Normalized value: an ISO yyyy-mm-dd date, or an integer string for days/usd."},"value_text":{"type":["string","null"],"description":"The value exactly as printed in the contract, when it differs from `value`."},"day_basis":{"type":["string","null"],"enum":["calendar","business",null],"description":"Calendar vs business days, when the contract states one."},"page":{"type":"integer","minimum":0,"description":"1-based page of the uploaded PDF this was read from. 0 means typed in, not read from a page."},"quote":{"type":["string","null"],"description":"Short verbatim quote supporting the value."},"confidence":{"type":"string","enum":["high","medium","low"]}},"required":["key","label","unit","value","page","confidence"]},"description":"Only the fields the contract actually stated. A short list is normal."},"timeline":{"type":"object","properties":{"acceptance_date":{"type":["string","null"],"format":"date"},"closing_date":{"type":["string","null"],"format":"date"},"deadlines":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"due_date":{"type":"string","format":"date"},"base_key":{"type":"string","enum":["acceptance_date","closing_date"],"description":"The anchor the offset was counted from."},"base_date":{"type":"string","format":"date"},"offset_days":{"type":"integer","description":"Days added to the base date. Negative counts backward from closing."},"day_basis":{"type":"string","enum":["calendar","business"]},"roll_rule":{"type":"string","enum":["forward","backward","none"],"description":"How a weekend/holiday landing is resolved."},"rolled_from":{"type":["string","null"],"format":"date","description":"The date before any roll was applied, if it moved."},"rolled_reason":{"type":["string","null"],"description":"Why it moved: Saturday, Sunday, or the holiday name."},"derivation":{"type":"string","description":"Plain-English arithmetic, e.g. \"17 calendar days after acceptance (Aug 3), rolled forward from Saturday Aug 20\"."},"source_field":{"type":["string","null"],"enum":["acceptance_date","closing_date","closing_days","earnest_money_days","earnest_money_amount","inspection_period_days","inspection_objection_days","appraisal_days","loan_approval_days","title_review_days","seller_disclosure_days","contingency_removal_days","final_walkthrough_days","possession_date",null],"description":"The contract field this deadline was computed from."},"source_page":{"type":["integer","null"]},"source_quote":{"type":["string","null"]},"needs_verify":{"type":"boolean","description":"True when the source field's confidence was low."},"group":{"type":"string","enum":["money","diligence","financing","title","closing"]}},"required":["key","label","due_date","base_key","base_date","offset_days","day_basis","roll_rule","derivation","needs_verify","group"]}},"warnings":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","enum":["missing_acceptance_date","missing_closing_date","closing_before_acceptance","deadline_after_closing","deadline_before_acceptance","low_confidence_field","no_periods_found","preset_defaults_used"]},"message":{"type":"string"},"field":{"type":["string","null"],"enum":["acceptance_date","closing_date","closing_days","earnest_money_days","earnest_money_amount","inspection_period_days","inspection_objection_days","appraisal_days","loan_approval_days","title_review_days","seller_disclosure_days","contingency_removal_days","final_walkthrough_days","possession_date",null]}},"required":["code","message"]}},"holidays_in_window":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"name":{"type":"string"}}},"description":"US federal holidays that fell inside the transaction window."},"engine_version":{"type":"string"}},"required":["acceptance_date","closing_date","deadlines","warnings","holidays_in_window","engine_version"],"description":"Omitted when the request set build_timeline: false."},"page_count":{"type":"integer"},"confidence":{"type":"number","minimum":0,"maximum":1,"description":"Mean of the per-field confidence signal."},"engine":{"type":"string","description":"The backend that produced this, e.g. openrouter or claude-cli."},"dropped":{"type":"array","description":"Fields the model returned that failed validation, and why they were dropped. Never silently coerced.","items":{"type":"object","properties":{"key":{"type":"string"},"reason":{"type":"string"}}}},"warnings":{"type":"array","items":{"type":"string"}}},"required":["meta","fields","page_count","confidence","engine","dropped","warnings"]},"request_id":{"type":"string"},"attribution":{"type":"string","description":"Present on free/anonymous responses only."}},"required":["data","request_id"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"402":{"description":"Upgrade required (Free plan has no live API access; use a c10_test_ key to try it)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"422":{"description":"Could not process the document","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Already-extracted contract text, if you have it."},"file_base64":{"type":"string","description":"Base64-encoded PDF bytes."},"file_name":{"type":"string","description":"Original file name, used with file_base64."},"file_url":{"type":"string","format":"uri","description":"https:// URL to fetch the PDF from (fetched server-side, SSRF-guarded)."},"property_address":{"type":"string","description":"Optional label stored with the transaction."},"transaction_type":{"type":"string","enum":["purchase","listing","lease"]},"build_timeline":{"type":"boolean","description":"Set false to get only the fields, without the computed timeline. Defaults to true."}},"description":"Provide exactly one of text, file_base64 (+ file_name) or file_url, or send multipart/form-data with a `file` field instead of JSON."}},"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"},"property_address":{"type":"string"},"transaction_type":{"type":"string","enum":["purchase","listing","lease"]},"build_timeline":{"type":"string","enum":["true","false"]}}}}}}}},"/api/v1/transactions":{"get":{"summary":"List the caller's own transactions, newest first.","operationId":"get_api_v1_transactions","security":[{"bearerAuth":[]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"1 to 200. Defaults to 50.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["processing","completed","failed"]},"source":{"type":"string","enum":["web","api","mcp"]},"needs_review":{"type":"boolean"},"property_address":{"type":"string"},"transaction_type":{"type":"string"},"state_code":{"type":["string","null"]},"contract_name":{"type":["string","null"]},"acceptance_date":{"type":["string","null"],"format":"date"},"closing_date":{"type":["string","null"],"format":"date"},"archived":{"type":"boolean"},"file_name":{"type":"string"},"page_count":{"type":"integer"},"field_count":{"type":"integer"},"deadline_count":{"type":"integer"},"confidence":{"type":["number","null"]},"engine":{"type":["string","null"]},"engine_version":{"type":["string","null"]},"error":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"completed_at":{"type":["string","null"],"format":"date-time"}},"required":["id","status","source","property_address","created_at"]}},"request_id":{"type":"string"}},"required":["data","request_id"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"402":{"description":"Upgrade required (Free plan has no live API access; use a c10_test_ key to try it)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}}}}},"/api/v1/transactions/{id}":{"get":{"summary":"Get one transaction: what the contract said (fields, page-cited) and what the engine computed from it (deadlines, each with its derivation).","operationId":"get_api_v1_transactions_id","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Transaction id returned by POST /api/v1/extract.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"transaction":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["processing","completed","failed"]},"source":{"type":"string","enum":["web","api","mcp"]},"needs_review":{"type":"boolean"},"property_address":{"type":"string"},"transaction_type":{"type":"string"},"state_code":{"type":["string","null"]},"contract_name":{"type":["string","null"]},"acceptance_date":{"type":["string","null"],"format":"date"},"closing_date":{"type":["string","null"],"format":"date"},"archived":{"type":"boolean"},"file_name":{"type":"string"},"page_count":{"type":"integer"},"field_count":{"type":"integer"},"deadline_count":{"type":"integer"},"confidence":{"type":["number","null"]},"engine":{"type":["string","null"]},"engine_version":{"type":["string","null"]},"error":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"completed_at":{"type":["string","null"],"format":"date-time"}},"required":["id","status","source","property_address","created_at"]},"fields":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","enum":["acceptance_date","closing_date","closing_days","earnest_money_days","earnest_money_amount","inspection_period_days","inspection_objection_days","appraisal_days","loan_approval_days","title_review_days","seller_disclosure_days","contingency_removal_days","final_walkthrough_days","possession_date"]},"label":{"type":"string"},"unit":{"type":"string","enum":["date","days","usd","text"]},"value":{"type":"string"},"value_text":{"type":["string","null"]},"day_basis":{"type":["string","null"],"enum":["calendar","business",null]},"page":{"type":"integer"},"quote":{"type":["string","null"]},"confidence":{"type":"string","enum":["high","medium","low"]},"edited":{"type":"boolean","description":"True if a human changed this field after extraction."}},"required":["key","label","unit","value","page","confidence"]}},"deadlines":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"due_date":{"type":"string","format":"date"},"base_key":{"type":"string","enum":["acceptance_date","closing_date"],"description":"The anchor the offset was counted from."},"base_date":{"type":"string","format":"date"},"offset_days":{"type":"integer","description":"Days added to the base date. Negative counts backward from closing."},"day_basis":{"type":"string","enum":["calendar","business"]},"roll_rule":{"type":"string","enum":["forward","backward","none"],"description":"How a weekend/holiday landing is resolved."},"rolled_from":{"type":["string","null"],"format":"date","description":"The date before any roll was applied, if it moved."},"rolled_reason":{"type":["string","null"],"description":"Why it moved: Saturday, Sunday, or the holiday name."},"derivation":{"type":"string","description":"Plain-English arithmetic, e.g. \"17 calendar days after acceptance (Aug 3), rolled forward from Saturday Aug 20\"."},"source_field":{"type":["string","null"],"enum":["acceptance_date","closing_date","closing_days","earnest_money_days","earnest_money_amount","inspection_period_days","inspection_objection_days","appraisal_days","loan_approval_days","title_review_days","seller_disclosure_days","contingency_removal_days","final_walkthrough_days","possession_date",null],"description":"The contract field this deadline was computed from."},"source_page":{"type":["integer","null"]},"source_quote":{"type":["string","null"]},"needs_verify":{"type":"boolean","description":"True when the source field's confidence was low."},"group":{"type":"string","enum":["money","diligence","financing","title","closing"]},"done":{"type":"boolean"}},"required":["key","label","due_date","base_key","base_date","offset_days","day_basis","roll_rule","derivation","needs_verify","group","done"]}}},"required":["transaction","fields","deadlines"]},"request_id":{"type":"string"}},"required":["data","request_id"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"402":{"description":"Upgrade required (Free plan has no live API access; use a c10_test_ key to try it)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}}}}},"/api/v1/transactions/{id}/deadlines":{"get":{"summary":"The deadlines for a transaction. The narrow read an agent wants on a schedule: what is due, when, and why.","operationId":"get_api_v1_transactions_id_deadlines","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Transaction id.","schema":{"type":"string"}},{"name":"upcoming","in":"query","required":false,"description":"true to skip deadlines already marked done.","schema":{"type":"string"}},{"name":"before","in":"query","required":false,"description":"yyyy-mm-dd. Only deadlines due on or before this date.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"due_date":{"type":"string","format":"date"},"base_key":{"type":"string","enum":["acceptance_date","closing_date"],"description":"The anchor the offset was counted from."},"base_date":{"type":"string","format":"date"},"offset_days":{"type":"integer","description":"Days added to the base date. Negative counts backward from closing."},"day_basis":{"type":"string","enum":["calendar","business"]},"roll_rule":{"type":"string","enum":["forward","backward","none"],"description":"How a weekend/holiday landing is resolved."},"rolled_from":{"type":["string","null"],"format":"date","description":"The date before any roll was applied, if it moved."},"rolled_reason":{"type":["string","null"],"description":"Why it moved: Saturday, Sunday, or the holiday name."},"derivation":{"type":"string","description":"Plain-English arithmetic, e.g. \"17 calendar days after acceptance (Aug 3), rolled forward from Saturday Aug 20\"."},"source_field":{"type":["string","null"],"enum":["acceptance_date","closing_date","closing_days","earnest_money_days","earnest_money_amount","inspection_period_days","inspection_objection_days","appraisal_days","loan_approval_days","title_review_days","seller_disclosure_days","contingency_removal_days","final_walkthrough_days","possession_date",null],"description":"The contract field this deadline was computed from."},"source_page":{"type":["integer","null"]},"source_quote":{"type":["string","null"]},"needs_verify":{"type":"boolean","description":"True when the source field's confidence was low."},"group":{"type":"string","enum":["money","diligence","financing","title","closing"]},"done":{"type":"boolean"}},"required":["key","label","due_date","base_key","base_date","offset_days","day_basis","roll_rule","derivation","needs_verify","group","done"]}},"request_id":{"type":"string"}},"required":["data","request_id"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"402":{"description":"Upgrade required (Free plan has no live API access; use a c10_test_ key to try it)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}}}}},"/api/v1/pricing":{"get":{"summary":"Machine-readable pricing: plans, active-transaction limits, included API calls, per-call overage, rate limits and features.","operationId":"get_api_v1_pricing","security":[{},{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"unit":{"type":"string","enum":["page"]},"currency":{"type":"string"},"anonymous":{"type":"object","properties":{"price_usd":{"type":"number"},"rate_limit_per_minute":{"type":"integer"},"rate_limit_per_day":{"type":"integer"},"api_access":{"type":"boolean"},"note":{"type":"string"}}},"plans":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["free","pro","scale"]},"name":{"type":"string"},"price_usd_per_month":{"type":"number"},"active_transactions":{"description":"An integer, or the string \"unlimited\"."},"included_api_calls_per_month":{"type":"integer"},"overage_usd_per_call":{"type":"number"},"rate_limit_per_minute":{"type":"integer"},"seats":{"type":"integer"},"api_access":{"type":"boolean"},"mcp_access":{"type":"boolean"},"reminders":{"type":"boolean"},"client_portal":{"type":"boolean"},"exports":{"type":"boolean"},"request_log_export":{"type":"boolean"},"features":{"type":"array","items":{"type":"string"}}}}}},"required":["unit","currency","anonymous","plans"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","upgrade_required","not_found","conflict","payload_too_large","unsupported_media_type","unprocessable","rate_limited","internal","upstream_unavailable","not_configured","upstream_timeout"]},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}}}}}}}