> ## Documentation Index
> Fetch the complete documentation index at: https://docs.truckaurbus.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Edge

> The reference layer's public reads. The commitment ledger, the products with their grades, the seats, and the outcome loop for partners.

Edge is the reference layer of India's commercial vehicle economy, run by Truckaurbus at [edge.truckaurbus.com](https://edge.truckaurbus.com). Everything the site prints comes from the endpoints below, and everything below is public except the partner rows. These paths are read directly on `https://api.truckaurbus.com`, without a key; they are not under `/v1` yet.

| Resource                                 | What it returns                                                                                             |
| ---------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| `GET /catalogue/forecasts`               | Every forecast Edge has sealed, with its commitment text, its hash, its horizon and its verdict once scored |
| `GET /catalogue/forecasts/{key}`         | One forecast                                                                                                |
| `GET /catalogue/edge/products`           | Edge's products with the grade and the date on each; `?pillar=standard`, `counter` or `desk` filters        |
| `GET /catalogue/edge/products/{key}`     | One product                                                                                                 |
| `GET /catalogue/edge/seats`              | The five design-partner seats and whether each is open                                                      |
| `GET /catalogue/edge/outcomes/stats`     | The outcome loop's own response rate and grade                                                              |
| `GET /catalogue/body-observations/stats` | How many bodies the Body Book has read, on how many chassis                                                 |
| `GET /agents/sources/stats`              | How many sources the agents read, how many of them maker sites, how many every night                        |

## The commitment ledger

Every forecast Edge publishes is sealed the moment it is published and scored once against the outcome on the day its horizon closes. A scored forecast is never rescored.

```json theme={"system"}
{
  "key": "lot-bf-2204-hammer-2026-09-16",
  "kind": "market",
  "title": "Hammer on lot BF-2204, a 2022 Force Trax DV",
  "statement": "Lot BF-2204 on the yard, a 2022 Force Trax DV with 364,000 km, will hammer inside the band when its timed auction closes on 16 September 2026; unsold or withdrawn counts as a miss.",
  "metric": "hammer_inr",
  "unit": "INR",
  "predicted": 615000.0,
  "low": 565800.0,
  "high": 664200.0,
  "horizon_end": "2026-09-16",
  "grade": "MODELLED",
  "sealed_at": "2026-09-12T15:22:37.013414Z",
  "commitment": "lot-bf-2204-hammer-2026-09-16|Lot BF-2204 on the yard, ...|615000|565800|664200|2026-09-16|2026-09-12T15:22:37.013414Z",
  "sha256": "204ef419b203c151bdc84dc3a504b4dd2f1f66db3638e495184db2635ebc9a58",
  "outcome": null,
  "verdict": "pending",
  "scored_at": null
}
```

To verify a row, take `commitment` as UTF-8 and hash it with SHA-256; it must equal `sha256`. The commitment text is the key, the statement, the predicted value, the floor, the ceiling, the horizon and the sealing time, joined with a vertical bar. A `hit` is an outcome inside the band, floor and ceiling included. `kind` is `operational` for something Edge counts itself and `market` for something outside Edge that anyone can check. The protocol and a verifier that checks the whole ledger from this endpoint are at [github.com/truckaurbus/commitment-ledger](https://github.com/truckaurbus/commitment-ledger).

## Products and grades

Every product carries a grade and the date the grade was last confirmed. The grade words are `live` (read from production), `modelled` (from a stated method on this data), `pilot` (running with consenting clients) and `next` (named and priced, not yet built). The grade never moves on interest; it moves on evidence, and the note says why.

```json theme={"system"}
{
  "key": "cv-passport",
  "pillar": "standard",
  "buyer_name": "CV Passport",
  "grade": "pilot",
  "grade_note": "A pilot with one insurer; it needs a chassis registry that does not exist yet.",
  "counted_at": "2026-09-12T15:00:21.937Z",
  "buyers": "Insurers and lenders",
  "description": "One record per vehicle: chassis number, body, approvals and specs, ...",
  "pays_today": "Surveyor visits and paper approvals nobody can verify.",
  "unit": "per certificate; a licence a year",
  "band": "499 rupees a certificate; insurer and lender licences a year",
  "now_line": "Variant-level checks run today; the per-vehicle record is the pilot.",
  "api_line": "GET /passport/{chassis} and the certificate endpoints arrive with the pilot."
}
```

`unit` always travels. `band` carries the price only where it is public, which is the transactional products: a single valuation, a certificate, a decision. For licences, memberships, maker subscriptions and the seats `band` is `null` and the desk quotes, by category and book size.

## The outcome loop, for partners

A partner who holds an Edge key posts its consented enquiries into the loop, Edge asks the operator at thirty and sixty days whether they bought and what, and the partner reads its own rows back. No identity column is stored on the enquiry; the contact used for the asks is purged after the second ask.

Keys are issued by the desk (write to [edge@truckaurbus.com](mailto:edge@truckaurbus.com)). Send yours as `X-Edge-Key`. Every row a key posts stays in that key's tenant; a key never reads another partner's rows.

| Resource                                  | What it does                                                                           |
| ----------------------------------------- | -------------------------------------------------------------------------------------- |
| `POST /catalogue/edge/outcomes/enquiries` | A consented enquiry enters the loop; `409` if the reference is already in it           |
| `GET /catalogue/edge/outcomes/enquiries`  | The partner's own rows, with the answer once it arrives                                |
| `POST /catalogue/edge/outcomes/answers`   | The operator's answer, by the enquiry's token or the partner's reference; written once |

```json theme={"system"}
{
  "ref": "ENQ-2026-000481",
  "district": "Pune",
  "state_code": "MH",
  "variants": ["tata-ultra-t7-4020", "eicher-pro-2049"],
  "dealer_slug": "",
  "locale": "hi",
  "consented": true,
  "contact_phone": "+919000000000"
}
```

The answer carries `bought` as `yes`, `not_yet` or `no`, the variant bought where known, and a reason from `price`, `finance`, `delivery`, `dealer`, `spec`, `service`, `resale` or `other`, with free text. `GET /catalogue/edge/outcomes/stats` publishes the loop's own response rate and its grade, so the loop is held to the same standard as everything else on Edge.

## The Residual Index

The register's one depreciation arithmetic, published as curves. A commercial vehicle keeps 75 percent of its new price after year one and loses 7 points a year after that, floor 25 percent; kilometres against the class norm move the figure within minus 15 and plus 10 percent; the band is 8 percent around the midpoint. Graded Modelled until the yard deepens; the yard's last quarter travels beside it, graded Live.

| Resource                                                  | What it returns                                                                                                                                                                                 |
| --------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `GET /catalogue/edge/index/residual?vehicle_class=truck`  | Public. Percent of new by age, one to ten years, at the class's kilometre norm and at half and one-and-a-half times it; the method in full; the yard's last quarter; the electric curve's grade |
| `GET /catalogue/edge/index/residual/{slug}?state_code=MH` | Licence. One variant's curve in rupees on the register's own new price, with the band per age and the on-road context; add `format=csv` for the file                                            |
| `POST /catalogue/edge/index/valuations`                   | Licence or single valuations on contract. Value one vehicle: the figure, the band, the grade, the evidence and a hash, stored to your tenant and metered                                        |
| `GET /catalogue/edge/index/valuations`                    | Your tenant's valuations, newest first                                                                                                                                                          |
| `GET /catalogue/edge/index/valuations/{hash}`             | One valuation by its hash, the permalink                                                                                                                                                        |

```json theme={"system"}
{
  "vehicle_class": "tipper",
  "grade": "modelled",
  "km_per_year": 60000,
  "band_pct": 8,
  "points": [
    { "age": 1, "km_norm": 60000, "pct_norm": 75.0, "pct_half_km": 79.7, "pct_150_km": 70.3 },
    { "age": 2, "km_norm": 120000, "pct_norm": 68.0, "pct_half_km": 72.2, "pct_150_km": 63.8 }
  ],
  "yard": { "value": "5 sold, 24 to 45 percent of new", "grade": "live", "counted_at": "2026-09-13" },
  "electric": { "grade": "next", "note": "The electric residual curve is not on the register yet ..." }
}
```

A valuation takes the same file as the desk without the loan and the asking price (`vehicle` or `variant`, `year`, `km`, `state_code`, `body_type`) and returns the same packet with the kind `valuation`; verify it the same way. Valuations never appear on the desk's decision list.

## The underwriting desk

A loan file in, a decision packet out. The packet carries the valuation on the register's own new price with the register's one depreciation arithmetic, the band, the grade, the loan-to-value, the Body Book check on the declared body, the red flags as stated rules, an evidence list with a source, a date and a grade on every line, and a hash sealed the moment the packet is made. Every decision is metered at your contract's price and appears on the monthly statement. Send your key as `X-Edge-Key`; a member of your tenant may also call with their own sign-in token.

| Resource                                             | What it does                                                                                     |
| ---------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| `POST /catalogue/edge/desk/decisions`                | The file in, the packet back, sealed and metered; `409` if your reference already has a decision |
| `GET /catalogue/edge/desk/decisions`                 | Your tenant's decisions, newest first, and only yours                                            |
| `GET /catalogue/edge/desk/decisions/{hash}`          | One packet by its hash, inside your tenant                                                       |
| `POST /catalogue/edge/desk/decisions/{hash}/outcome` | The realised hammer, sale or settlement; written once; the verdict follows the band              |
| `GET /catalogue/edge/desk/statement?month=2026-09`   | Your metered usage for a month                                                                   |
| `GET /catalogue/edge/desk/me`                        | Your tenant, your role and your entitlements                                                     |
| `GET /catalogue/edge/desk/stats`                     | The desk's own record in public: decisions sealed, scored, hits and misses                       |

```json theme={"system"}
{
  "ref": "LF-2026-000481",
  "vehicle": "Tata Signa 4825.TK",
  "year": 2022,
  "km": 150000,
  "state_code": "MH",
  "loan_inr": 2500000,
  "asking_inr": 3400000,
  "body_type": "container"
}
```

`vehicle` is the vehicle as written; pass `variant` with a register slug instead when you have it. When more than one vehicle matches, the desk answers `422` with up to three candidates to choose from.

```json theme={"system"}
{
  "figure_inr": 3055000,
  "low_inr": 2810600,
  "high_inr": 3299400,
  "ltv_pct": "81.8",
  "grade": "modelled",
  "new_price_inr": 5429000,
  "new_price_source": "maker",
  "flags": [{ "code": "ltv_high", "severity": "check", "text": "The loan is 82 percent of the figure; above 80 percent the band matters more than the midpoint." }],
  "evidence": [{ "label": "New price on the register", "value": 5429000, "source": "the maker's own price list", "observed_at": "2026-08-30", "grade": "live" }],
  "body_check": { "declared": "container", "status": "matches", "register": ["container", "tipper"], "observed": [] },
  "commitment": "desk|18|7|underwriting|tata-signa-4825-tk|2022|150000|MH|3055000|2810600|3299400|2026-09-13T04:10:22.118402Z",
  "sha256": "9d1c…",
  "verdict": "pending"
}
```

To verify a packet, hash `commitment` with SHA-256 as UTF-8; it must equal `sha256`. The commitment is the word desk, the decision id, your tenant id, the kind, the register slug, the year, the kilometres, the state, the figure, the floor, the ceiling and the sealing time, joined with a vertical bar. A `hit` is an outcome inside the band. The desk's aggregate accuracy is published from these verdicts every quarter.

## The Body Book certificate

A certificate at variant level: what the register knows about bodies on one chassis, by stage (declared by the maker, observed in the register's photographs, ratified by body builders), and the verdict on the body a file declares. Numbered, sealed with a hash, issued to your tenant, metered per certificate; the PDF carries the hash, the verification address and its QR code. Anyone can verify a hash in public; the verification never names who the certificate was issued to. The per-vehicle Passport by chassis number comes with the insurer pilot.

| Resource                                               | What it does                                                                                                          |
| ------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- |
| `POST /catalogue/edge/passport/certificates`           | Issue a certificate: `variant` or `vehicle`, optional `body_type`, your `ref`; `409` if the reference already has one |
| `GET /catalogue/edge/passport/certificates`            | Your tenant's certificates, newest first                                                                              |
| `GET /catalogue/edge/passport/certificates/{hash}`     | One certificate by its hash, inside your tenant                                                                       |
| `GET /catalogue/edge/passport/certificates/{hash}.pdf` | The PDF, inside your tenant                                                                                           |
| `GET /catalogue/edge/passport/verify/{hash}`           | Public. Whether the hash is ours, the chassis, the body, the verdict and the issue date                               |
| `GET /catalogue/edge/passport/stats`                   | Public. Certificates issued                                                                                           |

```json theme={"system"}
{
  "number": "BBC-2026-000012",
  "variant_slug": "tata-motors-signa-4825-tk",
  "variant_name": "Signa 4825.TK",
  "body_type": "container",
  "verdict": "observed",
  "verdict_text": "Observed built on this chassis in the register's photographs (the Body Book's second stage).",
  "stages": { "declared": ["tipper"], "observed": [{ "key": "container", "label": "Container", "n": 3, "len_mm_median": 7300 }], "ratified": [] },
  "commitment": "certificate|12|7|tata-motors-signa-4825-tk|container|observed|2026-09-13T06:41:02.118402Z",
  "sha256": "e4612b…",
  "verify_url": "https://edge.truckaurbus.com/en/verify/e4612b…",
  "pdf_url": "/catalogue/edge/passport/certificates/e4612b….pdf"
}
```

The verdict is one of `ratified`, `observed`, `declared`, `not_on_register`, or `chassis` when no body was declared. The commitment is the word certificate, the certificate id, your tenant id, the register slug, the body type, the verdict and the issue time, joined with a vertical bar; its SHA-256 is the hash.
