POST /upload/json: structured JSON estimate payload.POST /upload/csv: multipart CSV file.
document_id, providing the same status tracking, realtime events, and clean /{document_id}.esx downloads as PDF estimates.
Download example files
The JSON example uses fictional claim details and illustrative customer prices. It covers nine room or area labels, roof and exterior work, interior repairs, multiple activities, 29 explicit category/selector pairs, 21 exact catalog descriptions, a disabled alternate, and an F9 note. The prices are examples only; replace them with your own pricing. Put the estimate rows in the request body’sline_items array.
Key Principles & Pricing Policy
- Pricing: Supplied prices are preserved as custom prices. If an item omits pricing, it is exported as an explicit custom
$0.00item. CapOut never fetches external market prices or modifies customer prices. - Catalog Resolution: You can provide exact Xactimate Category/Selector pairs (e.g.
cat: "RFG", sel: "240") or an itemdescription. Description-only items are resolved against the official Xactimate taxonomy. - Dual Profiles: Both Contractor (
8D) and Carrier (5L) ESX files are automatically generated upon export. - Enabled / Disabled Items: Items can be flagged with
enabled: false(oractive: 0). Disabled items are retained in review but excluded from ESX calculations and export totals. - Paid When Incurred:
enabledcontrols the initial eligibility of these rows too. Enabled PWI rows export as active priced items; disabled PWI rows can remain in the ESX with a paid-if-incurred flag and contribute nothing to its payable total.
JSON Import (POST /upload/json)
Submit an application/json payload matching the StructuredEstimateV1 schema.
JSON Request Example
Upload the JSON File
Test the example
Generate a test API key in CapOut Settings. SetCAPOUT_API_KEY to your capout_test_ key and use the upload request above with the public API at https://api.capout.ai.
document_id to check processing status, then download the ESX files. You can also review the document in your normal CapOut dashboard.
For this sample, expect 50 review rows across nine rooms, one disabled alternate, 49 active export rows, and a total of $29,479.35. Compare the review rows and generated export with these expected values.
Response (200 OK)
CSV Import (POST /upload/csv)
Upload a CSV file as multipart/form-data.
CSV Format Requirements
- Encoding: UTF-8 (optional BOM is automatically stripped).
- Headers: Case-insensitive, supporting canonical names or common aliases (e.g.
catorcategory,qtyorquantity,priceorunit_price). - Booleans: Accepts
true/false,1/0, oryes/no(case-insensitive). Blank or omittedenableddefaults totrue. - Rooms: Use the
RoomorAreacolumn to group line items. If omitted, items default to"General".
Sample CSV File (estimate.csv)
cURL Example
Python Example
Field Reference & Aliases
Idempotency Support
Both endpoints support the optionalIdempotency-Key header:
- If a request is retried with the same idempotency key and identical payload, CapOut returns the existing
document_idand download links. - If the same key is reused with a different payload, CapOut returns
409 Conflict.