Skip to main content
In addition to PDF uploads, CapOut supports direct, typed estimate imports via:
  • POST /upload/json: structured JSON estimate payload.
  • POST /upload/csv: multipart CSV file.
Upload an estimate as JSON or CSV to review its line items and download Contractor and Carrier ESX files. Every accepted import returns a 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’s line_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.00 item. 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 item description. 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 (or active: 0). Disabled items are retained in review but excluded from ESX calculations and export totals.
  • Paid When Incurred: enabled controls 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

The example includes 50 line items across nine rooms, using Cat/Sel codes, descriptions, different activities, and one disabled item.

Upload the JSON File

Test the example

Generate a test API key in CapOut Settings. Set CAPOUT_API_KEY to your capout_test_ key and use the upload request above with the public API at https://api.capout.ai.
Use the returned 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. cat or category, qty or quantity, price or unit_price).
  • Booleans: Accepts true/false, 1/0, or yes/no (case-insensitive). Blank or omitted enabled defaults to true.
  • Rooms: Use the Room or Area column 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 optional Idempotency-Key header:
  • If a request is retried with the same idempotency key and identical payload, CapOut returns the existing document_id and download links.
  • If the same key is reused with a different payload, CapOut returns 409 Conflict.