Un ghid de implementare scris pe baza comportamentului documentat al API-ului; nu numește niciun client. Publicat pe .
Problema: dosarul numește o mașină pe care nimeni nu o poate vedea
Un formular de ofertă, o înregistrare de poliță și o primă notificare de daună identifică toate vehiculul în același fel: prin VIN, tastat de un client sau citit de pe certificatul de înmatriculare. Tot ce vede apoi o persoană despre mașină este text: un an, o marcă, un model și poate o versiune de echipare. Să întrebați „Acesta este vehiculul dumneavoastră?” lângă un rând de text invită la un „da” pentru orice.
O imagine a modelului în care se decodează VIN-ul le permite clientului și inspectorului de daune să verifice dintr-o privire că înregistrarea indică tipul corect de mașină. Nu poate arăta care mașină anume: o randare este o ilustrație de studio a unei mărci, a unui model și a unui an din catalog și nu înfățișează niciun vehicul fizic anume. Acest singur fapt determină întreaga integrare de mai jos.
Cum arată integrarea
- Decodare la preluare. Fluxul de cotație sau sistemul de polițe decodează VIN-ul o singură dată, gratuit, și stochează id-ul de vehicul din catalog împreună cu polița. Daunele deschise pe poliță îl moștenesc.
- O singură vedere peste tot.
front-3-4, unghiul principal, într-un singur chenar pe ecranul de ofertă, în aplicația de gestionare a daunelor, în PDF-ul ofertei și în portalul poliței, astfel încât fiecare ecran să arate modelul la fel. - URL-uri semnate, niciodată cheia. Browserele și generatoarele de PDF încarcă URL-uri fără cheie, generate de serverul dumneavoastră.
- Cuvinte pentru ceea ce o imagine nu poate spune. Versiunea de echipare, opțiunile, culoarea din evidențe, daunele și kilometrajul rămân în text și fotografii, iar imaginea menționează că este reprezentativă.
Pasul 1: decodați VIN-ul, gratuit
GET /api/v1/vin/{vin} nu costă nimic și necesită o cheie cu images:read. Răspunde cu câmpurile decodate din datele vPIC ale NHTSA (an, marcă, model, versiune de echipare, serie, tip de caroserie, motor și orice alt atribut cunoscut de vPIC) și, când catalogul conține vehiculul, cu un obiect vehicle care include id-ul său stabil și un image_path gata de folosit.
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"
}
}Citiți trim: „Carrera, Carrera T, Carrera 4”. Modelul acestui VIN acoperă trei versiuni de echipare, deci nici decodarea nu poate spune pe care o asigură polița, iar o randare a lui 911 din 2024 cu atât mai puțin. Cereți clientului să confirme versiunea, păstrați-o ca text alături de series și body_class și lăsați imaginea să arate modelul.
- Un VIN cu cifra de control greșită se decodează totuși, cu
valid: falseși problema înerrors;suggested_vinmarchează cu!caracterul pe care vPIC îl consideră greșit, iar asta trebuie să îi arătați persoanei care îl introduce. - Un formular care are doar primele caractere poate trimite un VIN parțial: cel puțin cinci caractere, cu
*pentru fiecare poziție necunoscută și unyearopțional. - Un
404înseamnă că vPIC nu are nicio înregistrare pentru acest tipar. vPIC acoperă vehiculele fabricate pentru piața din SUA, așa că pentru alte piețe porniți de la marcă și model cuPOST /api/v1/images/resolve, care este de asemenea gratuit.
Pasul 2: păstrați id-ul vehiculului în poliță și în dosarul de daună
Stocați data.vehicle.id în poliță ca șir simplu și copiați-l în fiecare dosar de daună deschis pe baza ei. Id-ul este determinist și permanent: același vehicul are același id la fiecare implementare și după fiecare versiune a catalogului, deci poate fi folosit în siguranță drept cheie străină, iar fiecare cerere ulterioară specifică vehicle=veh_78qtwrgh37bkr în loc să precizeze o marcă și un model.
Când data.vehicle este null, marca și modelul decodate nu se află în catalog, cum este cazul remorcilor și al unor șasiuri comerciale. Câmpurile decodate pot fi totuși afișate. Afișați-le fără imagine și nu puneți niciodată o mașină similară în locul vehiculului.
Pasul 3: o singură vedere în dosarul de daună și în PDF-ul ofertei
Ecranul de ofertare, consola de gestionare a daunelor și portalul de polițe sunt aplicații de browser, așa că serverul dumneavoastră generează URL-uri semnate cu POST /api/v1/image-urls: fiecare URL contorizează imaginea ca imagine de vehicul a lunii în momentul generării, până la 50 per apel, și poate fi încărcat gratuit până la expirare. Încadrați imaginea o singură dată și refolosiți formatul: front-3-4 într-un cadru de 640×400 cu fit: "contain" și trim cu puțin padding, astfel încât un coupé și un pickup să umple cadrul la fel. Cât timp trebuie să rămână valabil fiecare URL depinde de locul în care este afișat:
- Platforma de lucru pentru daune. Generați URL-ul când se afișează ecranul. Durata de valabilitate implicită de 1 oră acoperă o sesiune de lucru, iar un dosar de daună redeschis mâine primește un URL nou.
- PDF-ul ofertei. Când PDF-ul este generat din HTML, motorul de randare încarcă imaginea o singură dată și o încorporează, așa că durata de valabilitate implicită este suficientă, iar serviciul PDF nu deține niciodată cheia dumneavoastră.
format: "jpg"aplatizează imaginea pe fundal alb, exact ce îi trebuie unui document. - Portalul poliței și e-mailul de reînnoire. Acestea durează mai mult decât orice TTL, așa că generați URL-urile cu
renew: trueșittl_seconds: 604800(7 zile). URL-ul continuă să funcționeze, o reînnoire contorizează imaginea o dată în luna în care are loc și nimic în plus dacă a fost deja contorizată în acea lună, iarrenew_days: 365, valoarea maximă permisă, acoperă o poliță cu durata de un an.
Setați pentru cheia care generează URL-urile o listă de origini permise în panoul de control: un URL încărcat de pe alt site răspunde cu 403 și origin_not_allowed, în timp ce clienții de e-mail și vizualizatoarele PDF, care nu trimit Referer, îl încarcă în continuare. Revocarea cheii invalidează toate URL-urile generate de ea.
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` }
);
}Pasul 4: etichetați imaginea ca model, niciodată ca mașina asigurată
Puneți eticheta acolo unde este imaginea, nu doar într-o notă de subsol: în textul alternativ și într-o legendă sub imagine. Randarea arată marca, modelul și anul într-o culoare aleasă de dumneavoastră, iar color poate urma culoarea din poliță (numele unei culori predefinite sau orice cod hex). Rămâne totuși modelul în acea culoare, nu mașina clientului.
<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>Cât costă și ce plan vi se potrivește
- Gratuit: decodarea VIN, rezolvarea, căutările în catalog și fiecare încărcare a unui URL semnat pe durata sa de valabilitate.
- O imagine de vehicul: fiecare vehicul în fiecare culoare și vedere, contorizat o singură dată pe lună, indiferent de câte ori este livrat, generat sau reînnoit, la orice dimensiune și în orice format.
- Imagini de vehicul pe lună: un flux de oferte vede multe vehicule diferite, iar fiecare plan include un anumit număr pe lună: Free 100, Pro 2.500 și Business 10.000; pentru Enterprise se negociază. O imagine deja numărată luna aceasta este servită întotdeauna, iar o cerere peste limită primește răspunsul 402 înainte să se numere ceva, așa că alegeți planul în funcție de vehiculele pentru care emiteți oferte.
Pe un plan plătit, licența acoperă o randare inclusă în ceea ce produsul dumneavoastră generează pentru utilizatorii săi, inclusiv o ofertă sau un raport, atâta timp cât planul este activ; detaliile se află în licență.
CLI, SDK și 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? })șiclient.createImageUrls(…), ca mai sus;client.resolve(query)pentru un vehicul fără VIN. - MCP:
decode_vinșicreate_car_image_urlsfac parte din setul de instrumente de bază, astfel încât un asistent care are dosarul de daună în context poate răspunde la „arată-mi modelul asigurat” pe baza VIN-ului din dosar. Configurarea este descrisă pe pagina MCP.
Întrebări frecvente
- Poate imaginea să înlocuiască fotografiile vehiculului asigurat?
- Nu. Este o randare de studio a mărcii, modelului și anului din catalog, nu o fotografie, și nu înfățișează un vehicul anume. Ajută un client sau un inspector de daune să vadă că înregistrarea indică tipul corect de mașină. Starea, daunele, versiunea de echipare, opțiunile și modificările provin din fotografii, inspecții și textul decodat, iar imaginea ar trebui să precizeze că este reprezentativă.
- Cât costă o imagine pe fiecare ofertă?
- Decodarea VIN este gratuită. Imaginea se contorizează ca o imagine de vehicul a lunii când URL-ul ei semnat este generat sau când octeții ei sunt livrați către serverul dumneavoastră, apoi poate fi servită ori de câte ori este nevoie; încărcarea unui URL semnat este gratuită până la expirare. Un URL care se reînnoiește contorizează imaginea o singură dată în fiecare lună ulterioară în care este deschis și nimic în lunile în care nu o accesează nimeni.
- VIN-ul este decodat, dar vehicle este null. Ce urmează?
- Decodorul a recunoscut vehiculul, dar catalogul nu are nicio intrare pentru acea marcă, acel model și acel an, lucru care se întâmplă la remorci și la unele șasiuri comerciale. Afișați câmpurile decodate fără imagine și nu înlocuiți niciodată vehiculul cu o mașină similară. Căutați în catalog, în cazul în care denumirea este scrisă diferit, iar dacă lipsește cu adevărat, solicitați-o pe panoul public de cereri.
- Funcționează decodarea VIN pentru vehicule din afara pieței americane?
- Decodorul folosește datele vPIC ale NHTSA, care acoperă vehiculele fabricate pentru piața din SUA, așa că un VIN introdus corect de pe altă piață poate răspunde cu 404 sau se poate decoda fără model. Găsiți în schimb acea mașină după marcă, model și an cu endpointul gratuit resolve; catalogul în sine acoperă și modelele de pe alte piețe.
- Cât timp poate un dosar de daună să păstreze imaginea?
- Cât timp planul dumneavoastră este activ. Pe un plan plătit, licența acoperă o randare inclusă în ceea ce generează produsul dumneavoastră, inclusiv o ofertă de preț sau un raport; în termen de 30 de zile de la încheierea planului, copiile stocate sunt șterse. Pentru a păstra definitiv imaginile în evidențe, cumpărați-le ca Image Pack. Randările pot fi și îmbunătățite în timp, așa că o înregistrare care trebuie să păstreze exact ce a văzut clientul ar trebui să stocheze fișierul, nu un URL.