docs.vin

tradeIn

The tradeIn noun — identity, lifecycle, events, and every capability as an anchored section: 10 capabilities, 1 live, 9 sandbox, 0 declared.

tradeIn is one of the estate's 317 automotive nouns — a job a car needs done. It carries 10 capabilities: 1 live, 9 sandbox, 0 declared · doors aggregator.vin · offers.vin.

Identity

NountradeIn
PillarCommerce (facets: 2 data · 3 services · 5 commerce)
Capabilities10 — 1 live · 9 sandbox · 0 declared
EntitiesAppraisal
Doorsaggregator.vin · offers.vin
SDKVin.tradeIn.* from apis.vin
Address/catalog/tradeIn#{action} — the anchor IS the wire name minus tradeIn.

Events

The vocabulary this noun can append to the record — 13 past-tense, versioned event types, each linked to the capability that emits it:

Quote & price

value

tradeIn.value · GET /trade-ins/value · gate key · live · answers TradeInValue@1

FieldTypeRequiredNotes
vinstringno

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /5FNRL5H35GB050852 (the VIN lens).

Try it — live: answers on the wire today. A sandbox key still selects the deterministic simulated mode — drive the full outcome range with the magic triggers.

the SDK — tradeIn.value
import { tradeIn } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tradeIn.value({"vin":"5FNRL5H35GB050852"})
GET /trade-ins/value
curl 'https://apis.vin/trade-ins/value?vin=5FNRL5H35GB050852'

offer

tradeIn.offer · POST /trade-ins/offer · gate offer · sandbox · answers TradeOffer@1

FieldTypeRequiredNotes
vinstringyes
conditionobjectyes28-param vehicle-condition disclosure schema
mileageintegerno
zipstringno
payoffstringno
subjectstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

Delegated calls require a typed Mandate{ ceiling, perAction, expires, tripwires }; the ceiling is a field, not a conversation.

Dooroffers.vin serves this noun on its two routes: / (the landing) · /5FNRL5H35GB050852 (the VIN lens).

Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.

EmitsOffer.accepted@1 · Offer.declined@1 · Offer.expired@1 · Offer.extended@1 · Trade.captured@1.

the SDK — tradeIn.offer
import { tradeIn } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tradeIn.offer({"vin":"5FNRL5H35GB050852","condition":{}})
POST /trade-ins/offer
curl -X POST https://apis.vin/trade-ins/offer \
  -H 'content-type: application/json' \
  -d '{"vin":"5FNRL5H35GB050852","condition":{}}'

Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.

receipt · executed 2026-08-17T12:42:18.491Z · HTTP 200
{
  "type": "OK",
  "answers": "TradeOffer@1",
  "value": {
    "vin": "5FNRL5H35GB050852",
    "noun": "tradeIn",
    "asOf": "2026-08-10",
    "id": "APR-e95b7d6b",
    "mileage": 51517,
    "inspectionId": "INSP-b1253985",
    "allowance": 1850000,
    "value": 1850000,
    "status": "Accepted",
    "offer": {
      "status": "accepted",
      "id": "APR-e95b7d6b",
      "amountCents": 1850000,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "5FNRL5H35GB050852",
    "noun": "tradeIn",
    "asOf": "2026-08-10",
    "id": "APR-e95b7d6b",
    "mileage": 51517,
    "inspectionId": "INSP-b1253985",
    "allowance": 1850000,
    "value": 1850000,
    "status": "Accepted",
    "offer": {
      "status": "accepted",
      "id": "APR-e95b7d6b",
      "amountCents": 1850000,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "trade-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  },
  "connect": {
    "type": "OFFER",
    "kind": "connect",
    "reason": "CONNECTION_ABSENT",
    "portClass": "auction-market",
    "state": "absent",
    "url": "https://integrates.vin/connect/auction-market",
    "message": "tradeIn.offer is live via connection — certified, connect to activate: complete the auction-market link ceremony at https://integrates.vin/connect/auction-market. The credential vault (auth.vin) holds the token, and the same call answers simulated:false — activation is the token, never a deploy."
  }
}

selfAppraise

tradeIn.selfAppraise · POST /trade-ins/self-appraise · gate key · sandbox · answers TradeInSelfAppraise@1

No input — this capability takes no request body.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /5FNRL5H35GB050852 (the VIN lens).

Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.

EmitsTradeIn.selfAppraised@1.

the SDK — tradeIn.selfAppraise
import { tradeIn } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tradeIn.selfAppraise()
POST /trade-ins/self-appraise
curl -X POST https://apis.vin/trade-ins/self-appraise \
  -H 'content-type: application/json' \
  -d '{}'

Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.

receipt · executed 2026-08-16T14:50:10.076Z · HTTP 200
{
  "type": "OK",
  "answers": "TradeInSelfAppraise@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "tradeIn",
    "asOf": "2026-08-10",
    "appraisal": {
      "status": "no-appraisal-on-file"
    },
    "selfAppraisal": {
      "status": "received-fresh",
      "id": "APR-97264503",
      "opensAt": "Requested"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "tradeIn",
    "asOf": "2026-08-10",
    "appraisal": {
      "status": "no-appraisal-on-file"
    },
    "selfAppraisal": {
      "status": "received-fresh",
      "id": "APR-97264503",
      "opensAt": "Requested"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "trade-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

instantOffer

tradeIn.instantOffer · POST /trade-ins/instant-offer · gate key · sandbox · answers TradeInInstantOffer@1

No input — this capability takes no request body.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /5FNRL5H35GB050852 (the VIN lens).

Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.

EmitsTradeIn.instantOffered@1.

the SDK — tradeIn.instantOffer
import { tradeIn } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tradeIn.instantOffer()
POST /trade-ins/instant-offer
curl -X POST https://apis.vin/trade-ins/instant-offer \
  -H 'content-type: application/json' \
  -d '{}'

Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.

receipt · executed 2026-08-16T14:50:10.076Z · HTTP 200
{
  "type": "BLOCKED",
  "reason": "INVALID_VIN",
  "position": 9,
  "message": "the supplied VIN is not a valid 17-char VIN (check-digit seat is position 9)",
  "received": "",
  "events": [],
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "sandbox"
  }
}

Pay & settle

payoffCollect

tradeIn.payoffCollect · POST /trade-ins/payoff-collect · gate offer · sandbox · answers TradeInPayoffCollect@1

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /5FNRL5H35GB050852 (the VIN lens).

Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.

EmitsTradeIn.failed@1 · TradeIn.payoffCollected@1.

the SDK — tradeIn.payoffCollect
import { tradeIn } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tradeIn.payoffCollect({"vin":"5FNRL5H35GB050852"})
POST /trade-ins/payoff-collect
curl -X POST https://apis.vin/trade-ins/payoff-collect \
  -H 'content-type: application/json' \
  -d '{"vin":"5FNRL5H35GB050852"}'

Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.

receipt · executed 2026-08-17T12:42:18.495Z · HTTP 200
{
  "type": "OK",
  "answers": "TradeInPayoffCollect@1",
  "value": {
    "vin": "5FNRL5H35GB050852",
    "noun": "tradeIn",
    "asOf": "2026-08-10",
    "id": "APR-e95b7d6b",
    "mileage": 51517,
    "inspectionId": "INSP-b1253985",
    "allowance": 1850000,
    "value": 1850000,
    "status": "Accepted",
    "collection": {
      "status": "nothing-to-collect",
      "reason": "no-open-loan"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "5FNRL5H35GB050852",
    "noun": "tradeIn",
    "asOf": "2026-08-10",
    "id": "APR-e95b7d6b",
    "mileage": 51517,
    "inspectionId": "INSP-b1253985",
    "allowance": 1850000,
    "value": 1850000,
    "status": "Accepted",
    "collection": {
      "status": "nothing-to-collect",
      "reason": "no-open-loan"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "trade-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

allowance

tradeIn.allowance · POST /trade-ins/allowance · gate offer · sandbox · answers TradeInAllowance@1

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /5FNRL5H35GB050852 (the VIN lens).

Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.

EmitsTradeIn.allowanceSet@1.

the SDK — tradeIn.allowance
import { tradeIn } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tradeIn.allowance({"vin":"5FNRL5H35GB050852"})
POST /trade-ins/allowance
curl -X POST https://apis.vin/trade-ins/allowance \
  -H 'content-type: application/json' \
  -d '{"vin":"5FNRL5H35GB050852"}'

Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.

receipt · executed 2026-08-17T12:42:18.483Z · HTTP 200
{
  "type": "OK",
  "answers": "TradeInAllowance@1",
  "value": {
    "vin": "5FNRL5H35GB050852",
    "noun": "tradeIn",
    "asOf": "2026-08-10",
    "id": "APR-e95b7d6b",
    "mileage": 51517,
    "inspectionId": "INSP-b1253985",
    "allowance": 1850000,
    "value": 1850000,
    "status": "Accepted",
    "allowanceQuote": {
      "status": "set",
      "id": "APR-e95b7d6b",
      "amountCents": 1850000,
      "currency": "USD",
      "basis": "no-over-allowance-the-appraised-figure"
    }
  },
  "evidence": {
    "vin": "5FNRL5H35GB050852",
    "noun": "tradeIn",
    "asOf": "2026-08-10",
    "id": "APR-e95b7d6b",
    "mileage": 51517,
    "inspectionId": "INSP-b1253985",
    "allowance": 1850000,
    "value": 1850000,
    "status": "Accepted",
    "allowanceQuote": {
      "status": "set",
      "id": "APR-e95b7d6b",
      "amountCents": 1850000,
      "currency": "USD",
      "basis": "no-over-allowance-the-appraised-figure"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "trade-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

equity

tradeIn.equity · GET /trade-ins/equity · gate key · sandbox · answers TradeInEquity@1

FieldTypeRequiredNotes
vinstringno

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /5FNRL5H35GB050852 (the VIN lens).

Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.

the SDK — tradeIn.equity
import { tradeIn } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tradeIn.equity({"vin":"5FNRL5H35GB050852"})
GET /trade-ins/equity
curl 'https://apis.vin/trade-ins/equity?vin=5FNRL5H35GB050852'

Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.

receipt · executed 2026-08-17T12:42:18.488Z · HTTP 200
{
  "type": "OK",
  "answers": "TradeInEquity@1",
  "value": {
    "vin": "5FNRL5H35GB050852",
    "noun": "tradeIn",
    "asOf": "2026-08-10",
    "id": "APR-e95b7d6b",
    "mileage": 51517,
    "inspectionId": "INSP-b1253985",
    "allowance": 1850000,
    "value": 1850000,
    "status": "Accepted",
    "equity": {
      "status": "free-and-clear",
      "allowanceCents": 1850000,
      "equityCents": 1850000
    }
  },
  "evidence": {
    "vin": "5FNRL5H35GB050852",
    "noun": "tradeIn",
    "asOf": "2026-08-10",
    "id": "APR-e95b7d6b",
    "mileage": 51517,
    "inspectionId": "INSP-b1253985",
    "allowance": 1850000,
    "value": 1850000,
    "status": "Accepted",
    "equity": {
      "status": "free-and-clear",
      "allowanceCents": 1850000,
      "equityCents": 1850000
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "trade-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

photoIntake

tradeIn.photoIntake · POST /trade-ins/photo-intake · gate key · sandbox · answers TradeInPhotoIntake@1

No input — this capability takes no request body.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /5FNRL5H35GB050852 (the VIN lens).

Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.

EmitsTradeIn.photoReceived@1.

the SDK — tradeIn.photoIntake
import { tradeIn } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tradeIn.photoIntake()
POST /trade-ins/photo-intake
curl -X POST https://apis.vin/trade-ins/photo-intake \
  -H 'content-type: application/json' \
  -d '{}'

Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.

receipt · executed 2026-08-16T14:50:10.076Z · HTTP 200
{
  "type": "OK",
  "answers": "TradeInPhotoIntake@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "tradeIn",
    "asOf": "2026-08-10",
    "appraisal": {
      "status": "no-appraisal-on-file"
    },
    "intake": {
      "status": "received",
      "id": "PHB-862ac20c"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "tradeIn",
    "asOf": "2026-08-10",
    "appraisal": {
      "status": "no-appraisal-on-file"
    },
    "intake": {
      "status": "received",
      "id": "PHB-862ac20c"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "trade-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

rollNegative

tradeIn.rollNegative · POST /trade-ins/roll-negative · gate offer · sandbox · answers TradeInRollNegative@1

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /5FNRL5H35GB050852 (the VIN lens).

Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.

EmitsTradeIn.failed@1 · TradeIn.negativeRolled@1.

the SDK — tradeIn.rollNegative
import { tradeIn } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tradeIn.rollNegative({"vin":"5FNRL5H35GB050852"})
POST /trade-ins/roll-negative
curl -X POST https://apis.vin/trade-ins/roll-negative \
  -H 'content-type: application/json' \
  -d '{"vin":"5FNRL5H35GB050852"}'

Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.

receipt · executed 2026-08-17T12:42:18.495Z · HTTP 200
{
  "type": "OK",
  "answers": "TradeInRollNegative@1",
  "value": {
    "vin": "5FNRL5H35GB050852",
    "noun": "tradeIn",
    "asOf": "2026-08-10",
    "id": "APR-e95b7d6b",
    "mileage": 51517,
    "inspectionId": "INSP-b1253985",
    "allowance": 1850000,
    "value": 1850000,
    "status": "Accepted",
    "roll": {
      "status": "nothing-to-roll",
      "reason": "free-and-clear"
    }
  },
  "evidence": {
    "vin": "5FNRL5H35GB050852",
    "noun": "tradeIn",
    "asOf": "2026-08-10",
    "id": "APR-e95b7d6b",
    "mileage": 51517,
    "inspectionId": "INSP-b1253985",
    "allowance": 1850000,
    "value": 1850000,
    "status": "Accepted",
    "roll": {
      "status": "nothing-to-roll",
      "reason": "free-and-clear"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "trade-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

taxCredit

tradeIn.taxCredit · POST /trade-ins/tax-credit · gate offer · sandbox · answers TradeInTaxCredit@1

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /5FNRL5H35GB050852 (the VIN lens).

Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.

EmitsTradeIn.failed@1 · TradeIn.taxCreditApplied@1.

the SDK — tradeIn.taxCredit
import { tradeIn } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tradeIn.taxCredit({"vin":"5FNRL5H35GB050852"})
POST /trade-ins/tax-credit
curl -X POST https://apis.vin/trade-ins/tax-credit \
  -H 'content-type: application/json' \
  -d '{"vin":"5FNRL5H35GB050852"}'

Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.

receipt · executed 2026-08-17T12:42:18.496Z · HTTP 200
{
  "type": "OK",
  "answers": "TradeInTaxCredit@1",
  "value": {
    "vin": "5FNRL5H35GB050852",
    "noun": "tradeIn",
    "asOf": "2026-08-10",
    "id": "APR-e95b7d6b",
    "mileage": 51517,
    "inspectionId": "INSP-b1253985",
    "allowance": 1850000,
    "value": 1850000,
    "status": "Accepted",
    "taxCredit": {
      "status": "applied",
      "allowanceCents": 1850000,
      "taxCreditCents": 152625,
      "taxBps": 825,
      "currency": "USD",
      "basis": "posted-sales-tax-bps-on-the-allowance"
    }
  },
  "evidence": {
    "vin": "5FNRL5H35GB050852",
    "noun": "tradeIn",
    "asOf": "2026-08-10",
    "id": "APR-e95b7d6b",
    "mileage": 51517,
    "inspectionId": "INSP-b1253985",
    "allowance": 1850000,
    "value": 1850000,
    "status": "Accepted",
    "taxCredit": {
      "status": "applied",
      "allowanceCents": 1850000,
      "taxCreditCents": 152625,
      "taxBps": 825,
      "currency": "USD",
      "basis": "posted-sales-tax-bps-on-the-allowance"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "trade-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Data model

The record shape behind this noun — one entity, each property an evidence field. See the whole estate model on the data model page.

Appraisal

Modeled

The noun drawn out — its record shape, its lifecycle, and how it is exercised end to end. 3 diagrams, rendered from the estate model.

TradeIn · Class model

TradeIn · State machine

TradeIn · Sequence


Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.