---
title: "Check physical fit"
method: POST
path: "/fit"
---

# Check physical fit

`POST /fit`

## Request

- Base URL: `https://tetheredtrust.com/v1`
- URL: `https://tetheredtrust.com/v1/fit`
- Auth: one of:
  - none
  - HTTP bearer

Will this appliance physically fit this space? Compares dimensions plus typical installation clearances and required connections (power, water, gas).

## Request body

- object
  - `product` string: What's being installed, e.g. '36-inch French-door refrigerator'. Used to pick typical clearances.
  - `category` 'refrigerator' | 'dishwasher' | 'range' | 'washer' | 'dryer' | 'other'
  - `product_dimensions` object: Width, height and depth of the product (from its spec sheet). Any subset is accepted; missing axes come back as 'missing'.
    - `width` string: A number in inches (e.g. "35.75") or text with units ("35 3/4 in", "90.8 cm", "908 mm").
    - `height` string: A number in inches (e.g. "35.75") or text with units ("35 3/4 in", "90.8 cm", "908 mm").
    - `depth` string: A number in inches (e.g. "35.75") or text with units ("35 3/4 in", "90.8 cm", "908 mm").
  - `opening` object, required: Width, height and depth of the space it goes into. Any subset is accepted; missing axes come back as 'missing'.
    - `width` string: A number in inches (e.g. "35.75") or text with units ("35 3/4 in", "90.8 cm", "908 mm").
    - `height` string: A number in inches (e.g. "35.75") or text with units ("35 3/4 in", "90.8 cm", "908 mm").
    - `depth` string: A number in inches (e.g. "35.75") or text with units ("35 3/4 in", "90.8 cm", "908 mm").
  - `needs` string: Connections the product needs, e.g. '120V, water line' or '240V'.
  - `has` string: Connections available at the location.

## Response `200`

OK

- object
  - `check_id` string, required
  - `verdict` 'compatible' | 'compatible_with_caveats' | 'incompatible' | 'uncertain' | 'needs_detail', required
  - `decision` 'supported' | 'conditional' | 'incompatible' | 'insufficient_evidence', required: supported | conditional | incompatible | insufficient_evidence. Act on this, not on confidence alone.
  - `decision_help` string
  - `conditions` object[]: What must be true for a conditional answer (accessory, dependency).
  - `required_accessories` object[]
    - `name` string
    - `why` string
  - `questions` object[]: Exactly what to ask, measure or look up next. blocking=true means no decision until answered.
    - `id` string
    - `ask` string
    - `blocking` boolean
    - `answer_with` string
    - `options` object[]
  - `constraints` object[]
    - `name` string
    - `value` unknown
  - `candidates` object: Present when the text matched several models: each option with its own verdict.
  - `fit` boolean, nullable
  - `confidence` number, required: Evidence score from fixed rules (source tier, rule strength). Not a calibrated probability: act on decision, conditions and questions.
  - `verified` boolean: True only when every spec came from a manufacturer source with a recorded check date.
  - `summary` string, required
  - `checks` object[]
    - `rule` string
    - `ok` boolean, nullable
    - `detail` string
  - `caveats` string[]
  - `requirements` object
  - `missing` string[]
  - `evidence` object[]
    - `type` string
    - `text` string
    - `url` string, nullable
  - `next_step` string
  - `valid_until` string: When this answer should be re-checked (based on how fresh its sources are).
  - `receipt` object, nullable: Signed receipt (EdDSA JWS) proving Tethered Trust issued this verdict unaltered. Not a guarantee the verdict is correct.
    - `id` string
    - `jws` string
    - `valid_until` string
    - `url` string
  - `notice` string
  - `terms` string

## Other responses

- `400`: Bad input (code bad_request), or plain HTTP (https_required).
- `401`: Missing or invalid API key where one is required.
- `402`: Payment required: pay with x402 or credits and retry. Verified first, settled only for a completed decision.
- `429`: Rate limit; see Retry-After.
- `500`: Our error; retry once.
- `503`: Temporarily unavailable, or paid access is off (paid_access_off).

---

[API](https://skmtc.dev/tetheredtrust/apis/tethered-trust-api.md) · [All operations](https://skmtc.dev/tetheredtrust/apis/tethered-trust-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tetheredtrust/apis/tethered-trust-api/revisions/f737ac591159?raw)
