LIFT DATA
  • Getting started
  • The contract
  • Errors
  • API reference
Information
Scoring
    Score a property addresspostCheck a request without spendingpost
Schemas
powered by Zuplo
Lift Data API
Lift Data API

Schemas


ScoredCallRequest

Exactly one property, plus optional request options. `maxProperties` is the documented form of the cap these endpoints enforce, and it counts the property together with every option this endpoint accepts: a body carrying more **properties** than the cap returns 413 with honest `limit` and `submitted` counts, before any Spend. `condition` is an option, not a property — sending it does not change what the call costs. `gateway/tests/route-surface.test.ts` asserts that `maxProperties` equals the route's `maxSubmittedProperties` option plus the number of options it declares, so the published cap cannot drift from the enforced one.
address
​string · required

The full street address of the property to score.

Example: 742 Evergreen Terrace, Springfield, IL 62701
condition
​string · enum

The property's condition, which sets the repair budget the derived numbers are built on. Optional: omit it and the property is priced as though it needs no repairs, which is exactly what turn_key does. It is a request option rather than a second property, so sending it never changes what the call costs.

tear_down is accepted by this schema and refused by the endpoint with a 400, before any Credits are consumed. That is deliberate rather than an oversight: the scoring service has no land-value estimate, so there is no honest way to price a tear-down here. Analyse lot value separately.

Repair figures are a screening range, not a contractor bid.

Enum values:
turn_key
light_rehab
major_rehab
full_gut
tear_down
Example: major_rehab
Default: turn_key

ScoredCallResponse

The underwriting answer for the submitted property. This body is built by Lift Data member by member; the scoring service's own response is never passed through. The member set below is closed: nothing else ever appears, and a member is added only as a documented, non-breaking addition. Every response also carries the Trace ID as the `trace-id` header — it is deliberately not repeated in this body, because a stored answer replayed under a later `Idempotency-Key` would otherwise carry the original call's handle and point support at the wrong call. **How well these numbers perform, stated honestly.** The distinction below matters more than any single figure, so it is published rather than left to be discovered. **What is verified.** The arithmetic is internally consistent and deterministic: the Investor Price is the exact algebraic inverse of the flip pro forma it is solved from, verified to the cent, so a seller's suggested price and a buyer's underwriting agree by construction. The model's estimate is checked against the comparable sales before it is published, and withheld when the two disagree. **What is not verified.** There is **no published back-test of these numbers against realised sale prices** — not for the model's estimate, and not for the Investor Price derived from the comparable sales. If accuracy matters to your use case, budget for your own back-test. **The policy figures.** The repair-lift thresholds, the target margin, the healthy-flip margin and the financing assumptions behind the Investor Price are **policy figures, calibrated by judgment and intended to be tuned**. They are not parameters fitted to a data set, and they are not presented as if they were. **Coverage and caveats.** Residential property only: large multifamily and commercial subjects are outside coverage and will diverge rather than return an error. Tear-downs are unsupported — there is no land-value estimate behind them — so analyse lot value separately. Repair figures are a screening range, not a contractor bid. The model's estimate does not move when comparable sales are added or removed; the Comp Band does, and the Comp Band is what the Investor Price is built on. A band computed over an uncurated set can be pulled by a single non-comparable sale, so read `effective_sample_size` alongside it. Property data is sparse in places, and a confident number computed from thin inputs still looks confident.
model_estimate_available
​boolean · required

Whether the pricing model produced an estimate Lift Data was able to confirm for this property. The only member always present. When false, the model's estimate and its distribution are withheld from this response: they were checked against the comparable sales below and did not agree with them, and a confidently wrong valuation is worse than none. The Comp Band and the comparable sales are unaffected — they are derived from the sales themselves — and this call is charged as normal, because it still carries a valuation.

Example: true
pricing_model_arv_estimate
​integer

The pricing model's after-repair-value estimate for this property, rounded to the nearest thousand dollars. Read from the model's own value distribution rather than from the comparable sales, so it does not move when comparable sales are added or removed — the Comp Band is the number that does. Absent when model_estimate_available is false.

​object

The predicted value distribution for this property, as quantile level to predicted value. The full distribution is returned rather than a single number: where the scoring service exposes its uncertainty, Lift Data surfaces it rather than hiding it. Absent when model_estimate_available is false.

valuation_mean
​integer | null

The predicted value for this property as a single point estimate. Optional: the scoring service does not always produce one, and its absence does not make the distribution above any less complete. Absent when model_estimate_available is false.

effective_sample_size
​number

How much comparable evidence supported the model's estimate. A low value means the distribution above rests on thin evidence and should be read with more caution. Absent when model_estimate_available is false, because it describes an estimate that was withheld.

Example: 72.34
​object

The Comp Band: the value range implied by the comparable sales below, size-normalised to this property where their square footage allows it. This is the number derived from recorded sales rather than from a model. Absent when too few comparable sales carried a usable price to state a range honestly — a range built on one or two sales reads as high confidence over the thinnest possible evidence.

rehab_budget
​integer

The repair budget the numbers below were built on, in whole dollars — the whole-project midpoint for the condition you submitted. Zero when you sent no condition, which is the same as sending turn_key. This is a screening range reduced to a single figure, not a contractor bid: small homes skew high per square foot, and the heavier brackets are the least reliable in the set.

rehab_adjusted_arv
​integer

The after-repair value this deal is priced against, in whole dollars: the Comp Band's middle value lifted toward its upper end in proportion to the repair budget, because a heavier renovation signals a higher-finish result. It equals the middle of the Comp Band when there is no repair signal and never exceeds the upper end, so the number stays anchored to sales that actually happened. It is derived from the comparable sales rather than from the model, so it moves when the comparable sales do. The thresholds that shape the lift are policy figures calibrated by judgment, not fitted parameters. Absent whenever the Comp Band is absent.

​object

The Investor Price: the highest purchase price at which a cash flip buyer on standard financing still clears the target margin. It is the algebraic inverse of a flip pro forma rather than a price quantile, so a seller's suggested price and a buyer's underwriting agree by construction. The financing figures behind it — down payment, interest, points, closing costs, hold period and target margin — are policy figures calibrated by judgment and intended to be tuned; they are not fitted to any data set. Absent whenever the Comp Band is absent.

flip_viability
​string · enum

How this deal reads as a flip at the Investor Price above: good when the margin is healthy, warn when it is thin, alert when a flipper loses money at any price or no price clears the target margin. It describes the price in this response, not an asking price — this endpoint takes an address and a condition, and nothing else. The margin thresholds are policy figures calibrated by judgment, not fitted parameters. Absent whenever the Comp Band is absent.

Enum values:
good
warn
alert
​object[]

The comparable sales the Comp Band was derived from, in the order the scoring service ranked them, as stored by the property data service. The property's own prior sale is removed before anything is computed. Absent when the scoring service returned none.

ValidationVerdict

valid
​boolean · required

Whether this body would be accepted by POST /v1/predict. Always true on a 200 — a body that would be rejected returns the same 400 or 413 the Metered Call returns.

ProblemDetail

An RFC 9457 Problem Detail. Sent as `application/problem+json`.
type
​string · uri · required

A stable URI identifying what went wrong. Branch on this, not on the wording.

title
​string · required

A short, stable summary.

detail
​string · required

What happened, what it means for your Credits, and what to do next.

status
​integer · required

The HTTP status code, repeated in the body.

trace_id
​string · uuid · required

The Trace ID for this request. Quote it to support.

On this page
  • ScoredCallRequest
  • ScoredCallResponse
  • ValidationVerdict
  • ProblemDetail