---
title: "The factory window sticker (Monroney label) for a VIN"
method: GET
path: "/v2/vin/{vin}/window-sticker"
tags: ["vin"]
---

# The factory window sticker (Monroney label) for a VIN

`GET /v2/vin/{vin}/window-sticker`

## Request

- Base URL: `https://api.cardog.app`
- URL: `https://api.cardog.app/v2/vin/{vin}/window-sticker`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer

The manufacturer's window sticker for this VIN, or a typed reason there is none. Absence is a 200 with `label: null` and `unavailable.reason`. Only `not_yet_harvested` is worth retrying; the other reasons are final. A found label costs 5 credits; absence costs 0. `HEAD` is a free existence check (204 or 404). `label.document.downloadUrl` is a signed link to the PDF, good for 24 hours; do not store it, request this read again for a fresh one.

## Path parameters

- `vin` string, required

## Response `200`

The label, or why there is none

- WindowSticker
  - `vin` string, required: The VIN, uppercased
  - `label` object, nullable, required: The label we hold, or null
    - `issuer` string, nullable, required: The manufacturer that issued the label, e.g. "gm", "ford", "kia". null when the label was collected before we recorded the issuing lane.
    - `retrievedAt` string, required: When we collected the label (ISO 8601)
    - `vinVerified` boolean, required: true when the VIN was read from inside the document itself. false means the manufacturer's service returned a label for this VIN but the VIN could not be read from the file (some labels render it as an image or in an embedded font). Treat an unverified label as the manufacturer's answer, not as proof it is this vehicle's.
    - `document` object, required
      - `uri` string, required: A stable identifier for this exact file, for citing it. The same file always has the same identifier. Not a fetchable address.
      - `sha256` string, required: SHA-256 of the label file
      - `mediaType` 'application/pdf', required
      - `downloadUrl` string, uri, required: A signed link to the PDF, good for 24 hours. It needs no credential and costs 0 credits, so it can be opened in a browser tab or handed to a viewer. Do not store it: keep the VIN and request this read again for a fresh one, billed as a held label. sha256 identifies the file.
  - `unavailable` object, nullable, required: Why there is no label. null when `label` is set.
    - `reason` 'no_lane' | 'lane_us_only' | 'not_yet_harvested' | 'issuer_has_no_record' | 'pre_lane_model_year', required: Why there is no label, and what to do about it. "no_lane": we do not collect window stickers for this manufacturer. Do not retry. "lane_us_only": coverage for this manufacturer is US-sold vehicles only, and there is no label for this VIN. Do not retry. "issuer_has_no_record": the manufacturer has no label for this VIN. Do not retry soon. "pre_lane_model_year": the vehicle predates our coverage for its manufacturer. Do not retry. "not_yet_harvested": we have not collected this label yet. Retry later; HEAD polls for free.
    - `issuer` string, nullable, required: The manufacturer we would ask, when known
    - `detail` string, required: The reason in a sentence, safe to show a user
  - `links` object: Related resources, keyed by relation name, each a server-relative path. Example: {"recalls": "/v2/recalls/entity/model-year:toyota/rav4/2021"}

## Other responses

- `400`: Invalid request — grammar failure or unknown-but-well-formed refs, NAMED in `refs`/`details`, with nearest-ref `suggestions` where computable. Never a fuzzy fallback.
- `401`: No valid credential (API key, session, or internal token)
- `402`: Insufficient credits (free-tier hard stop; paid tiers bill overage instead)
- `429`: Per-minute rate limit exceeded
- `500`: Internal error

---

[API](https://skmtc.dev/cardog/apis/cardog-api-v2.md) · [All operations](https://skmtc.dev/cardog/apis/cardog-api-v2/llms.txt) · [OpenAPI document](https://skmtc.dev/cardog/apis/cardog-api-v2/revisions/b9d48193126f?raw)
