---
title: "Paid: Check compatibility ($0.05 per completed decision; never charged for insufficient_evidence)"
method: POST
path: "/paid/check"
---

# Paid: Check compatibility ($0.05 per completed decision; never charged for insufficient_evidence)

`POST /paid/check`

## Request

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

Will this exact part or accessory work with that exact device? Use before recommending or buying. Covers anything that has to fit, plug in, mount, run on or charge with something someone owns. Verified catalog (specs checked against cited manufacturer sources): computers & consoles (RAM, M.2 SSDs, USB-C chargers), phones/tablets/watches (USB-C PD, MagSafe, Qi2, watch bands), cameras (lens mounts, adapters, batteries, memory cards), cordless power tools (battery platforms), printers (ink, toner, drums), appliances (refrigerator water and air filters, installation fit), vacuums (bags, filters, batteries, robot-vacuum parts), air quality (purifier filters, HVAC media, humidifier pads), e-bikes (batteries and chargers by drive system), smart home (Matter, Thread, Zigbee, hubs, bulb bases), PC building (CPU sockets, cooler mounts, memory, clearances, power), cars & EV charging (tire sizes by trim, NACS/J1772/CCS1 and approved adapters, home chargers; a starter set of models) and TVs, consoles & streaming (VESA mounts, weight and screen size, console generations, app platforms). Products outside the catalog in any category are read by AI in terms of the same standards and returned as unverified. Returns a decision (supported / conditional / incompatible / insufficient_evidence), the rules checked, caveats, required accessories, the questions to ask when it can't decide, evidence links and a signed receipt. When the text matches several models it returns each candidate's answer.

## Request body

- object
  - `existing` string, required: What the person already has, ideally with the exact model number, e.g. 'Lenovo ThinkPad T480', 'Sony A7 IV', 'DeWalt DCD800', 'HP OfficeJet Pro 9015e', 'iPhone 16 Pro', 'HomePod mini'.
  - `candidate` string, required: What they want to buy: a model/part number or key specs, e.g. 'Crucial CT16G4SFRA32A', '1TB M.2 2230 NVMe', 'DCB205', 'HP 962XL', 'Canon RF 24-105mm f/4L', 'Eve Energy'.
  - `detail` string: Optional extra identifiers: machine type, revision, year, region, serial range.
  - `existing_id` string: Optional: an exact product id (from resolve_product, suggestions or a candidates list) instead of existing text.
  - `candidate_id` string: Optional: an exact product id instead of candidate text.

## 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)
