Developer API
API reference

JSON output

Every conversion can also return the estimate as structured JSON — the estimate-v1 schema. It contains exactly what the ESX contains: claim header, section tree with dimensions, line items with pricing, and notes, in the same order.

Requesting JSON

Add "json" to the output_formats field on POST /v1/conversions. It's a repeatable form field — send it once per format:

curl
curl -s -X POST https://est.anterotrail.com/v1/conversions \
  -H "X-API-Key: at_test_xxxxxxxxxxxxxxxxxxxxxxxx" \
  -F "file=@estimate.pdf;type=application/pdf" \
  -F "price_list=FLTA8X_02MAY26" \
  -F "output_formats=esx" \
  -F "output_formats=json"

On success, the job resource — and the identical webhook body — carries an artifacts array listing every output of the job, each with its own time-limited signed URL:

200 · succeeded (excerpt)
{
  "job_id": "b3f1...",
  "status": "succeeded",
  "artifacts": [
    { "type": "esx",  "url": "https://.../job.esx?sig=...",  "expired": false },
    { "type": "json", "url": "https://.../job.json?sig=...", "expired": false }
  ]
}
Billing

One conversion is one conversion. A job is metered once regardless of which formats it produces — requesting json, esx, or both costs the same single credit.

Conventions

  • Money is always a string with two decimals (e.g. "1234.56"), never a float. Parse with a decimal type, not floating point.
  • Quantities are numbers, with a unit string alongside.
  • Absent values omit the key — no nulls. Code defensively around missing optional keys.
  • Ordering is meaningful: sections and line items appear in the same order as in the ESX.
  • Versioning is additive-only within the 1.x line: new optional keys may appear over time; existing keys never change type or meaning, and required keys never disappear. A breaking change would ship as a new major schema_version.

Accuracy and source fidelity

The source PDF is the only source of truth available to the converter. Output accuracy means fidelity to the PDF, not to whatever estimate file originally produced it.

  • unit_price, tax, and rcv are the values as printed in the source. rcv includes tax and overhead & profit as printed, so it is not necessarily quantity × unit_price. The sum of line rcv equals totals.rcv, which matches the ESX grand total.
  • Repricing. Xactimate reprices catalog items against the selected price list on import. Printed unit prices in this output are source values, not a prediction of post-import pricing. Bid items retain their own pricing.
  • *REVIEW* convention. Descriptions may carry a *REVIEW* prefix where the converter emitted a source line it could not confidently map to a catalog code. These lines are written as bid items, preserve the source text verbatim, and are intended for adjuster review after import.
  • No source warranty. The converter faithfully represents the PDF. It cannot detect or reverse edits, overrides, or omissions made before the PDF was printed — no converter can.

Top level

KeyTypeRequiredNotes
schema_versionstringYes"1.0"
claimobjectYesClaim/estimate header.
sectionsarrayYesRooms/areas ("sections"), in estimate order.
totalsobjectNoEstimate-level totals.

claim

KeyTypeRequiredNotes
estimate_namestringYesThe project name as it appears in the ESX (uppercase, ≤20 chars).
claim_numberstringNo
policy_numberstringNo
insured_namestringNo
property_addressobjectNo{ "street", "city", "state", "zip" } — each optional.
date_of_lossstringNoISO YYYY-MM-DD when the source carried a parseable date.
type_of_lossstringNoe.g. "Water", "Wind", "Flood".
price_liststringNoXactimate price-list code, e.g. FLTA8X_02MAY26.

sections[]

KeyTypeRequiredNotes
namestringYesDisplay name, e.g. "Master Bathroom".
pathstring[]NoFolder tree, outermost container first, ending with the section itself — e.g. ["Main Level", "Master Bathroom"].
dimensionsobjectNoOnly keys the estimate actually carries (see below).
notesarrayNoSection-level notes: [{ "text": "..." }].
line_itemsarrayYesIn estimate order.

sections[].dimensions

All values are numbers. Any subset may be present:

floor_sf, ceiling_sf, wall_sf, wall_and_ceiling_sf, floor_perimeter_lf, ceiling_perimeter_lf, roof_surface_sf, roof_squares, height_ft, length_ft, width_ft

sections[].line_items[]

KeyTypeRequiredNotes
catstringNoXactimate category code, e.g. "DRY".
selstringNoXactimate selector code, e.g. "1/2-".
descriptionstringYesThe line description as it appears in the ESX.
quantitynumberYes
unitstringYesSF, LF, EA, SQ, HR, ...
activitystringNoXactimate action: + (replace), - (remove), & (remove & replace), R (reset), M (material), I (install).
unit_pricemoney stringNoPer-unit price from the source estimate.
taxmoney stringNoThe line's tax amount from the source estimate.
rcvmoney stringNoThe line's replacement-cost value from the source estimate (includes tax and O&P as printed).
notesarrayNoLine-level notes: [{ "text": "..." }].

totals

KeyTypeRequiredNotes
rcvmoney stringNoSum of line RCVs — matches the ESX grand total.

Sample payload

estimate-v1
{
  "schema_version": "1.0",
  "claim": {
    "estimate_name": "SMITH_J",
    "claim_number": "CLM-2026-04581",
    "policy_number": "HO3-99120",
    "insured_name": "John Smith",
    "property_address": {
      "street": "12 Oak St",
      "city": "Tampa",
      "state": "FL",
      "zip": "33601"
    },
    "date_of_loss": "2026-05-01",
    "type_of_loss": "Water",
    "price_list": "FLTA8X_02MAY26"
  },
  "sections": [
    {
      "name": "Master Bathroom",
      "path": ["Main Level", "Master Bathroom"],
      "dimensions": {
        "floor_sf": 96.0,
        "ceiling_sf": 96.0,
        "wall_sf": 320.0,
        "floor_perimeter_lf": 40.0,
        "height_ft": 8.0
      },
      "notes": [{ "text": "Flooring" }],
      "line_items": [
        {
          "cat": "DRY",
          "sel": "1/2-",
          "description": "1/2\" drywall - hung, taped, floated, ready for paint",
          "quantity": 320.0,
          "unit": "SF",
          "activity": "+",
          "unit_price": "2.15",
          "tax": "9.87",
          "rcv": "688.00",
          "notes": [{ "text": "Water damage to lower 2 feet" }]
        }
      ]
    }
  ],
  "totals": { "rcv": "688.00" }
}
Schema

A machine-readable JSON Schema (draft-07) is available at estimate-v1.schema.json — validate every payload against it in your integration tests.