En byggeguide skrevet ut fra API-ets dokumenterte virkemåte; den nevner ingen kunder. Publisert .
Problemet: dokumentasjonen nevner en bil ingen kan se
Et tilbudsskjema, en polise og en første skademelding identifiserer alle kjøretøyet på samme måte: med VIN, skrevet inn av en kunde eller lest av et vognkort. Alt en person deretter ser om bilen, er tekst: et årstall, et merke, en modell og kanskje en utstyrsvariant. Å spørre «er dette kjøretøyet ditt?» ved siden av en tekstlinje inviterer til et ja til hva som helst.
Et bilde av modellen VIN-en dekodes til, lar kunden og skadebehandleren raskt sjekke at registreringen angir riktig type bil. Det kan ikke vise hvilken bil: en rendering er en studioillustrasjon av et merke, en modell og et år fra katalogen, og den avbilder ikke noe bestemt fysisk kjøretøy. Dette ene faktumet former hele integrasjonen nedenfor.
Slik ser integrasjonen ut
- Dekod ved mottak. Tilbudsflyten eller polisesystemet dekoder VIN-en én gang, gratis, og lagrer katalogens kjøretøy-ID sammen med polisen. Skadesaker som opprettes på polisen, arver den.
- Én visning overalt.
front-3-4, hovedvinkelen, i én ramme i tilbudsskjermbildet, i skadebehandlingsverktøyet, i tilbuds-PDF-en og i forsikringsportalen, slik at alle skjermbilder viser modellen på samme måte. - Signerte URL-er, aldri nøkkelen. Nettlesere og PDF-renderere laster nøkkelfrie URL-er som serveren deres oppretter.
- Ord for det et bilde ikke kan si. Utstyrsversjon, ekstrautstyr, registrert farge, skader og kilometerstand forblir tekst og fotografier, og bildet opplyses å være et illustrasjonsbilde.
Trinn 1: dekod VIN-en – gratis
GET /api/v1/vin/{vin} er gratis og krever en nøkkel med images:read. Den svarer med de dekodede feltene fra NHTSAs vPIC-data (årsmodell, merke, modell, utstyrsnivå, serie, karosseritype, motor og alle andre attributter vPIC kjenner til) og, når katalogen har kjøretøyet, et vehicle-objekt med en stabil id og en ferdig image_path.
curl --fail-with-body \
-H "Authorization: Bearer $CAR_IMAGE_API_KEY" \
"https://carimage.dev/api/v1/vin/WP0AA2A96RS201834"{
"data": {
"vin": "WP0AA2A96RS201834",
"valid": true,
"errors": [],
"suggested_vin": null,
"year": 2024,
"make": "Porsche",
"model": "911",
"trim": "Carrera, Carrera T, Carrera 4",
"series": "Type 992",
"body_class": "Coupe",
"vehicle": {
"id": "veh_78qtwrgh37bkr",
"make": "Porsche",
"model": "911",
"year": 2024,
"image_path": "/api/v1/images/car?vehicle=veh_78qtwrgh37bkr"
},
"source": "vpic-db"
}
}Les trim: «Carrera, Carrera T, Carrera 4». Mønsteret til dette VIN-et dekker tre utstyrsversjoner, så selv dekodingen kan ikke si hvilken polisen forsikrer, og et bilde av 2024 911 kan det i hvert fall ikke. Be kunden bekrefte utstyrsversjonen, lagre den som tekst sammen med series og body_class, og la bildet vise modellen.
- En VIN med feil kontrollsiffer blir likevel dekodet, med
valid: falseog problemet ierrors.suggested_vinmarkerer tegnet vPIC mener er feil, med!, og det er dette du bør vise personen som skriver. - Et skjema som bare har de første tegnene, kan sende et delvis VIN: minst fem tegn, med
*for hver ukjent posisjon og et valgfrittyear. 404betyr at vPIC ikke har noen oppføring for mønsteret. vPIC dekker kjøretøy laget for det amerikanske markedet, så for andre markeder bør du ta utgangspunkt i merke og modell medPOST /api/v1/images/resolve, som også er gratis.
Trinn 2: lagre kjøretøy-ID-en på polisen og i skadesaken
Lagre data.vehicle.id på polisen som en vanlig streng, og kopier den til hver skadesak som opprettes på den. ID-en er deterministisk og permanent: samme kjøretøy har samme ID ved hver utrulling og etter hver katalogversjon, så den er trygg å bruke som fremmednøkkel, og alle senere forespørsler oppgir vehicle=veh_78qtwrgh37bkr i stedet for å skrive ut merke og modell.
Når data.vehicle er null, finnes ikke det dekodede merket og modellen i katalogen, slik som med tilhengere og enkelte chassis for nyttekjøretøy. De dekodede feltene kan likevel vises. Vis dem uten bilde, og sett aldri inn en lignende bil i stedet.
Trinn 3: én visning i skadesaken og tilbuds-PDF-en
Tilbudsskjermen, skadebehandlingsverktøyet og kundeportalen for forsikringer er nettleserapper, så serveren din genererer signerte URL-er med POST /api/v1/image-urls: hver URL teller bildet sitt som et av månedens kjøretøybilder når den genereres, opptil 50 per kall, og er gratis å laste inn til den utløper. Komponer bildet én gang og gjenbruk formen: front-3-4 i en 640×400-boks med fit: "contain", og trim med litt padding, slik at en coupé og en pickup fyller boksen på samme måte. Hvor lenge hver URL bør leve, avhenger av hvor den vises:
- Arbeidsflaten for skadesaker. Generer URL-en når skjermen tegnes. Standard levetid på 1 time dekker en arbeidsøkt, og en skadesak som gjenåpnes i morgen, får en ny URL.
- Tilbuds-PDF-en. Når PDF-en genereres fra HTML, laster PDF-motoren bildet én gang og bygger det inn, så standard levetid er mer enn nok, og PDF-tjenesten får aldri tilgang til nøkkelen din.
format: "jpg"legger bildet på hvit bakgrunn, som er det et dokument trenger. - Forsikringsportalen og fornyelses-e-posten. Disse varer lenger enn noen URL-levetid, så opprett med
renew: trueogttl_seconds: 604800(7 dager). URL-en fortsetter å virke. En fornyelse teller bildet én gang i måneden den skjer i, og ikke mer hvis det allerede er telt den måneden.renew_days: 365, det lengste som er tillatt, dekker en ettårig forsikringsperiode.
Gi nøkkelen som oppretter URL-ene, en liste over tillatte opprinnelser på dashbordet: en URL som lastes fra et annet nettsted, svarer 403 med origin_not_allowed, mens e-postklienter og PDF-visere, som ikke sender Referer, fortsatt laster den. Når nøkkelen tilbakekalles, slutter alle URL-er den har opprettet, å virke.
import { CarImageClient, type ImageParams } from "@meterapp/car-image-sdk";
const client = new CarImageClient({ apiKey: process.env.CAR_IMAGE_API_KEY });
// Quote or policy intake: the VIN in, the vehicle id and the decoded words on the record. Free.
const { data: decoded } = await client.decodeVin(policy.vin);
policy.vehicleId = decoded.vehicle?.id ?? null; // null: show the decoded text and no picture
policy.trimText = decoded.trim; // "Carrera, Carrera T, Carrera 4": words, never the picture
if (policy.vehicleId) {
// One view, framed once, for every screen and document that shows this policy's car.
const view: ImageParams = {
vehicle: policy.vehicleId, view: "front-3-4", color: policy.paintHex ?? "silver",
width: 640, height: 400, fit: "contain", trim: true, padding: 6,
};
// The claims workbench: a URL for this session, minted when the screen draws.
const { data: [workbench] } = await client.createImageUrls({ ...view, format: "auto" });
// The quote PDF: the HTML-to-PDF renderer loads the URL once and embeds the picture.
const { data: [pdf] } = await client.createImageUrls({ ...view, format: "jpg" });
// The policy portal and the renewal email: one URL that keeps working for the term.
const { data: [portal] } = await client.createImageUrls(
{ ...view, format: "auto" },
{ ttlSeconds: 604800, renew: true, renewDays: 365, idempotencyKey: `policy:${policy.id}:image` }
);
}Trinn 4: merk det som modellen, aldri som den forsikrede bilen
Plasser merkingen der bildet er, ikke bare i en fotnote: i alt-teksten og i en bildetekst under bildet. Renderingen viser merke, modell og årsmodell i en lakkfarge du velger, og color kan følge fargen på polisen (navnet på en forhåndsdefinert farge eller en hvilken som helst hex-kode). Det er likevel modellen i den fargen, ikke kundens bil.
<figure>
<img src="https://carimage.dev/api/v1/delivery/eyJhbGciOi…" width="640" height="400"
alt="Representative image of a 2024 Porsche 911, not a photo of the insured vehicle">
<figcaption>
2024 Porsche 911 · Coupe · Type 992 · trim on the VIN: Carrera, Carrera T or Carrera 4
<small>Representative image of the model. Not a photo of the insured vehicle.</small>
</figcaption>
</figure>Hva det koster, og hvilket abonnement som passer
- Gratis: VIN-dekoding, resolve, katalogoppslag og hver innlasting av en signert URL innenfor levetiden.
- Ett kjøretøybilde: hvert kjøretøy i hver lakkfarge og visning, telles én gang i måneden uansett hvor ofte det leveres, genereres eller fornyes, i alle størrelser og formater.
- Kjøretøybilder i måneden: En tilbudstrakt ser mange forskjellige kjøretøy, og hver plan inkluderer et visst antall av dem i måneden: Free 100, Pro 2 500 og Business 10 000. Enterprise forhandles. Et bilde som allerede er telt denne måneden, leveres alltid, og en forespørsel utover kvoten får svaret 402 før noe telles. Dimensjoner derfor planen etter kjøretøyene du gir tilbud på.
Med et betalt abonnement dekker lisensen en rendering i det produktet ditt lager for brukerne sine, for eksempel et tilbud eller en rapport, så lenge abonnementet er aktivt. Detaljene står i lisensen.
CLI, SDK og MCP
# decode for free and keep the id
npx @meterapp/car-image vin WP0AA2A96RS201834 --json | jq -r .data.vehicle.id
# one renewing URL for the policy's documents, minted once however often intake retries
npx @meterapp/car-image url --vehicle veh_78qtwrgh37bkr --view front-3-4 --width 640 --height 400 \
--fit contain --trim --padding 6 --format auto --ttl 604800 --renew --renew-days 365 \
--idempotency-key policy-88213-image- SDK:
client.decodeVin(vin, { year? })ogclient.createImageUrls(…), som ovenfor;client.resolve(query)for et kjøretøy uten VIN. - MCP:
decode_vinogcreate_car_image_urlser med i kjerneverktøysettet, så en assistent med skadesaken i konteksten kan svare på «vis meg den forsikrede modellen» ut fra VIN-en som er registrert. Oppsettet står på MCP-siden.
Ofte stilte spørsmål
- Kan bildet erstatte bilder av det forsikrede kjøretøyet?
- Nei. Det er en studiorendering av katalogens merke, modell og årsmodell, ikke et fotografi, og den viser ikke noe bestemt kjøretøy. Den hjelper en kunde eller en skadebehandler med å se at registreringen gjelder riktig type bil. Tilstand, skader, utstyrsvariant, ekstrautstyr og modifikasjoner kommer fra bilder, inspeksjoner og den dekodede teksten, og bildet bør opplyse om at det er illustrativt.
- Hva koster et bilde på hvert tilbud?
- VIN-dekodingen er gratis. Bildet telles som ett kjøretøybilde for måneden når den signerte URL-en lages eller bytene leveres til serveren din, og kan deretter vises så ofte som nødvendig. Det er gratis å laste en signert URL til den utløper. En fornyende URL teller bildet én gang i hver senere måned den åpnes i, og ingenting i måneder da ingen ser på det.
- VIN-en dekodes, men vehicle er null. Hva nå?
- Dekoderen kjente igjen kjøretøyet, men katalogen har ingen oppføring for det merket, den modellen og det året, noe som skjer med tilhengere og enkelte nyttekjøretøychassis. Vis de dekodede feltene uten bilde, og erstatt aldri med en lignende bil. Søk i katalogen i tilfelle stavemåten er annerledes, og hvis den virkelig mangler, be om den på den offentlige forespørselstavlen.
- Fungerer VIN-dekoding for kjøretøy fra utenfor det amerikanske markedet?
- Dekoderen bruker vPIC-data fra NHTSA, som dekker kjøretøy laget for det amerikanske markedet, så en korrekt skrevet VIN fra et annet marked kan gi 404 eller dekodes uten modell. Finn i stedet bilen etter merke, modell og årsmodell med det gratis resolve-endepunktet; selve katalogen dekker modellnavn fra andre markeder.
- Hvor lenge kan en skadesak beholde bildet?
- Så lenge planen din er aktiv. På en betalt plan dekker lisensen en rendering i det produktet ditt lager, inkludert tilbud og rapporter. Innen 30 dager etter at planen avsluttes, slettes lagrede kopier. Vil du beholde bilder i arkivet for godt, kan du kjøpe dem som en Image Pack. Renderinger kan også forbedres over tid, så en post som må bevare nøyaktig det kunden så, bør lagre filen i stedet for en URL.