property-turnover

Quick turnover estimate (start here)

The easiest way to estimate a US rental turnover: a ZIP, bedrooms, bathrooms and a list of plain-English issues in, a priced make-ready estimate out (same engine and result as property_turnover_scope, short summary by default). When to use: Start here when the user describes a move-out or turnover in words ("carpet stained in both bedrooms, oven filthy") and wants a cost estimate or what to tell vendors. Use property_turnover_scope instead for rate cards, owner decisions, measured quantities or per-finding control. Not for: Diagnosing hazards (they come back as refer-outs to a licensed professional); legal advice on deposits; remodel bids; properties outside the US. Tip: If the ZIP is missing or not exactly 5 digits, ask the user; never guess or pad it. Tip: Relay refer_outs first, then the totals; say the numbers are estimates, not quotes. Tip: When review.status is draft, show the user what was read (reading.findings) before you quote a number, and ask them to confirm or correct it. For a verified answer, send the confirmed findings to property_turnover_scope with confirmed true on each. A review.note means the AI reader was unavailable and the text was read by the matcher alone. Tip: From photos, list only what is visible, with its room ("stained carpet in bedroom 2"). Hedge doubtful ones ("possible water stain?") and ask the user about what photos cannot show: working appliances, odors, pests, sizes. Never state that a tenant caused damage because of a photo. The same findings under the same ruleset return the same result_hash. An AI model may read notes into findings, marked for review (review, reading); it never sets a number. Capability property-turnover v0.14.0 (experimental).

post/v1/property-turnover/quick_estimate

Request

  • Base URL: https://tektolo.com (the document declares no server; this is the origin it was published from)
  • URL: https://tektolo.com/v1/property-turnover/quick_estimate
  • Auth: none declared

Headers

Tektolo-Rulesetstring nullable

Optional. The ruleset version you built against, as results carry it in provenance.ruleset_version (e.g. 'sd-2026.11.14'), or its sha256: hash. If the rules have changed since, the call fails (nothing computed, nothing charged) and says what is in force now, so you upgrade on your own schedule. Leave it out to answer under the current rules.

Tektolo-Ruleset-Modestring nullable

Optional, with Tektolo-Ruleset. 'serve' asks us to answer under the ruleset version you named even when the rules have changed since, from that version's signed bundle. The answer says so (run.served_from_bundle and the Tektolo-Ruleset-Served header). We refuse (412, with a reason) a version older than 12 months, one a later correction or law change replaced for your state, or one we have no bundle for. Leave it out to be refused whenever the rules have changed.

Request body

client_refsobject nullable

Your own reference ids (e.g. unit_id, job_id). Echoed back, never used.

zipstring required

The user's 5-digit US ZIP code. If it is missing or not exactly 5 digits, ask the user; never guess, pad or correct it.

bedroomsinteger required

0 for a studio.

issuesstring[]

What was found in plain English, e.g. ['stained carpet in both bedrooms', 'nail holes everywhere', 'oven is filthy']. Read like pasted notes: an entry may hold several conditions ('carpet stained, nail holes'; one finding each); a room before or after the condition sets the location ('Bedroom 2 carpet torn', 'mold in bathroom'); a written count sets the quantity ('3 blinds broken'); an entry saying there is no work ('no mold', 'leak fixed by tenant') is reported as not billed.

unit_type'apartment' | 'single_family' | 'townhome' | 'condo' | 'duplex' | 'manufactured'
sq_ftinteger nullable

Interior sq ft.

year_builtinteger nullable

Drives lead-paint (pre-1978) handling.

carpetboolean nullable

Is there wall-to-wall carpet?

profile'minimum' | 'standard' | 'premium'
price_tier'bulk_contract' | 'pm_vendor' | 'retail_one_off'

Purchasing channel. Library prices are pm_vendor (a PM buying turns from a local vendor).

detail'summary' | 'full'

summary (default, small) or full (every line).

retainboolean

Optional (contract 0.5.1). false: keep none of this request's text, so the AI reader's answer for the issues is not stored either. By default the text is kept with contact details and access codes removed, to improve matching; the estimate is the same either way.

Response

Successful Response

client_refsobject
input_hashstring required

Hash of the question the rules answered: the request, or when free text was read by AI, the request with the read findings (reading.findings) in its place.

request_hashstring nullable

Hash of the request as sent; equal to input_hash when nothing was read by AI.

result_hashstring required

Changes

No recorded changes to this operation across all 1 revision of this API.