Car Image API

Casi d'uso · Assicurazioni

Immagini di auto per sinistri e preventivi assicurativi

Decodifichi gratuitamente il VIN di una polizza o di un sinistro, ne conservi l'id del veicolo e mostri una vista etichettata del modello assicurato nel fascicolo del sinistro e nel PDF del preventivo.

Una guida pratica scritta a partire dal comportamento documentato dell'API; non nomina alcun cliente. Pubblicato il .

Il problema: la pratica indica un'auto che nessuno può vedere

Un modulo di preventivo, una scheda di polizza e una prima denuncia di sinistro identificano tutti il veicolo allo stesso modo: tramite il VIN, digitato da un cliente o letto da un documento di immatricolazione. Tutto ciò che una persona vede poi dell'auto è testo: un anno, una marca, un modello e forse un allestimento. Chiedere «È questo il suo veicolo?» accanto a una riga di testo invita a rispondere sì a qualsiasi cosa.

Un'immagine del modello corrispondente al VIN permette al cliente e al perito di verificare a colpo d'occhio che la pratica indichi il tipo di auto giusto. Non può mostrare quale auto: un render è un'illustrazione da studio di marca, modello e anno di catalogo e non raffigura alcun veicolo fisico specifico. Questo solo fatto determina l'intera integrazione descritta di seguito.

Come si presenta l'integrazione

  • Decodifica all'acquisizione. Il flusso di preventivo o il sistema delle polizze decodifica il VIN una sola volta, gratuitamente, e salva l'ID veicolo del catalogo con la polizza. I sinistri aperti sulla polizza lo ereditano.
  • Una sola vista ovunque. front-3-4, l'angolazione principale, in un unico riquadro nella schermata del preventivo, nell'area di gestione sinistri, nel PDF del preventivo e nel portale delle polizze, così ogni schermata mostra il modello allo stesso modo.
  • URL firmati, mai la chiave. Browser e renderer PDF caricano URL senza chiave generati dal Suo server.
  • Parole per ciò che un'immagine non può dire. Allestimento, optional, colore registrato, danni e chilometraggio restano testo e foto, e l'immagine indica di essere rappresentativa.

Passo 1: decodificare il VIN, gratuitamente

GET /api/v1/vin/{vin} è gratuito e richiede una chiave con images:read. Restituisce i campi decodificati dai dati vPIC di NHTSA (anno, marca, modello, allestimento, serie, tipo di carrozzeria, motore e ogni altro attributo noto a vPIC) e, quando il catalogo contiene il veicolo, un oggetto vehicle con il suo id stabile e un image_path pronto all'uso.

Decodificare il VIN nel preventivo
curl --fail-with-body \
  -H "Authorization: Bearer $CAR_IMAGE_API_KEY" \
  "https://carimage.dev/api/v1/vin/WP0AA2A96RS201834"
200 OK (estratto)
{
  "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"
  }
}

Legga il campo trim: "Carrera, Carrera T, Carrera 4". Lo schema di questo VIN copre tre allestimenti, quindi nemmeno la decodifica può dire quale assicura la polizza, e tanto meno un render della 911 del 2024. Chieda al cliente di confermare l'allestimento, lo conservi come testo insieme a series e body_class e lasci che l'immagine mostri il modello.

  • Un VIN con una cifra di controllo errata viene comunque decodificato, con valid: false e il problema in errors; suggested_vin contrassegna con ! il carattere che vPIC ritiene errato, ed è ciò da mostrare a chi sta digitando.
  • Un modulo che dispone solo dei primi caratteri può inviare un VIN parziale: almeno cinque caratteri, con * per ogni posizione sconosciuta e un year facoltativo.
  • Un 404 significa che vPIC non ha alcun record per lo schema. vPIC copre i veicoli prodotti per il mercato statunitense, quindi per altri mercati parta da marca e modello con POST /api/v1/images/resolve, anch’esso gratuito.

Passaggio 2: conservare l’id del veicolo nella polizza e nel sinistro

Memorizzi data.vehicle.id nella polizza come semplice stringa e lo copi in ogni sinistro aperto su di essa. L'id è deterministico e permanente: lo stesso veicolo ha lo stesso id in ogni deploy e dopo ogni release del catalogo, quindi è sicuro come chiave esterna, e ogni richiesta successiva indica vehicle=veh_78qtwrgh37bkr invece di specificare marca e modello.

Quando data.vehicle è null, la marca e il modello decodificati non sono presenti nel catalogo, come accade con rimorchi e alcuni telai commerciali. I campi decodificati restano comunque a Sua disposizione. Li mostri senza immagine e non metta mai un'auto simile al loro posto.

Passo 3: una vista nella pratica del sinistro e nel PDF del preventivo

La schermata dei preventivi, la postazione di gestione sinistri e il portale delle polizze sono app per browser, quindi il Suo server genera URL firmati con POST /api/v1/image-urls: ogni URL conteggia la sua immagine come immagine di veicolo del mese al momento della generazione, fino a 50 per chiamata, e si può caricare gratuitamente fino alla scadenza. Inquadri l’immagine una volta e riutilizzi la stessa forma: front-3-4 in un riquadro 640×400 con fit: "contain", e trim con un po’ di padding, così una coupé e un pickup riempiono il riquadro allo stesso modo. Quanto debba durare ogni URL dipende da dove viene mostrato:

  • La postazione di gestione sinistri. Generi l'URL quando la schermata viene visualizzata. La durata predefinita di 1 ora copre una sessione di lavoro, e un sinistro riaperto domani riceve un nuovo URL.
  • Il PDF del preventivo. Quando il PDF viene generato da HTML, il renderer carica l’immagine una volta e la incorpora, quindi la durata predefinita è più che sufficiente e il servizio PDF non detiene mai la Sua chiave. format: "jpg" appiattisce l’immagine su sfondo bianco, che è ciò che serve a un documento.
  • Il portale delle polizze e l'email di rinnovo. Restano in uso più a lungo di qualsiasi durata massima, quindi generi gli URL con renew: true e ttl_seconds: 604800 (7 giorni). L'URL continua a funzionare, un rinnovo conteggia l'immagine una volta nel mese in cui avviene, e nulla di più se era già stata conteggiata quel mese, e renew_days: 365, il massimo consentito, copre una polizza di durata annuale.

Assegni alla chiave che genera gli URL un elenco di origini consentite nella dashboard: un URL caricato da un altro sito risponde 403 con origin_not_allowed, mentre i client email e i visualizzatori PDF, che non inviano alcun Referer, lo caricano comunque. La revoca della chiave invalida tutti gli URL che ha generato.

Apertura della pratica, postazione di lavoro, PDF e portale con l'SDK TypeScript
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` }
  );
}

Passaggio 4: etichettarla come il modello, mai come l'auto assicurata

Metta l’etichetta dove si trova l’immagine, non solo in una nota a piè di pagina: nel testo alternativo e in una didascalia sotto l’immagine. Il render mostra marca, modello e anno in una vernice a Sua scelta, e color può seguire il colore indicato in polizza (il nome di un preset o qualsiasi hex). Resta comunque il modello in quella vernice, non l’auto del cliente.

Il blocco veicolo di un preventivo
<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>

Quanto costa e quale piano scegliere

  • Gratuiti: la decodifica del VIN, resolve, le ricerche nel catalogo e ogni caricamento di un URL firmato entro la sua validità.
  • Un’immagine di veicolo: ogni veicolo in ogni colore e vista, conteggiato una volta al mese indipendentemente da quante volte viene distribuito, generato o rinnovato, in qualsiasi dimensione e formato.
  • Immagini di veicoli al mese: un funnel di preventivi vede molti veicoli diversi, e ogni piano ne include un certo numero al mese: Free 100, Pro 2500 e Business 10.000; Enterprise è su trattativa. Un’immagine già conteggiata questo mese viene sempre servita, e una richiesta oltre la quota risponde 402 prima che venga conteggiato qualcosa, quindi scelga il piano in base ai veicoli per cui emette preventivi.

Con un piano a pagamento, la licenza copre un render all’interno di ciò che il Suo prodotto genera per i propri utenti, inclusi un preventivo o un report, per tutto il tempo in cui il piano è attivo; i dettagli sono nella licenza.

CLI, SDK e MCP

npx @meterapp/car-image
# 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? }) e client.createImageUrls(…), come sopra; client.resolve(query) per un veicolo senza VIN.
  • MCP: decode_vin e create_car_image_urls fanno parte del set di strumenti principale, quindi un assistente con il sinistro nel contesto può rispondere a "mostrami il modello assicurato" partendo dal VIN registrato. La configurazione è nella pagina MCP.

Domande frequenti

L'immagine può sostituire le foto del veicolo assicurato?
No. È un render in studio della marca, del modello e dell'anno presenti nel catalogo, non una fotografia, e non raffigura alcun veicolo specifico. Aiuta un cliente o un perito a verificare che la pratica indichi il tipo di auto giusto. Condizioni, danni, allestimento, optional e modifiche risultano da foto, ispezioni e dal testo decodificato, e l'immagine dovrebbe indicare che è rappresentativa.
Quanto costa un’immagine su ogni preventivo?
La decodifica del VIN è gratuita. L'immagine conta come un'immagine di veicolo del mese quando viene generato il suo URL firmato o quando i suoi byte vengono consegnati al suo server, e poi può essere servita tutte le volte necessarie; caricare un URL firmato è gratuito fino alla scadenza. Un URL con rinnovo conta l'immagine una volta in ciascun mese successivo in cui viene aperto, e nulla nei mesi in cui nessuno la guarda.
Il VIN viene decodificato ma vehicle è null. E ora?
Il decoder ha riconosciuto il veicolo, ma il catalogo non ha una voce per quella marca, quel modello e quell'anno, come accade con i rimorchi e alcuni telai commerciali. Mostri i campi decodificati senza immagine e non sostituisca mai il veicolo con un'auto simile. Cerchi nel catalogo nel caso in cui la grafia sia diversa e, se manca davvero, lo richieda nella bacheca pubblica delle richieste.
La decodifica del VIN funziona per i veicoli al di fuori del mercato statunitense?
Il decoder si basa sui dati vPIC della NHTSA, che coprono i veicoli prodotti per il mercato statunitense, quindi un VIN di un altro mercato digitato correttamente può restituire 404 o essere decodificato senza modello. In tal caso cerchi l’auto per marca, modello e anno con l’endpoint resolve gratuito; il catalogo stesso copre le denominazioni degli altri mercati.
Per quanto tempo una pratica di sinistro può conservare l'immagine?
Finché il suo piano è attivo. Con un piano a pagamento la licenza copre un render all'interno di ciò che il suo prodotto genera, preventivi e report compresi; entro 30 giorni dalla fine del piano, le copie archiviate vengono eliminate. Per conservare le immagini nei documenti per sempre, le acquisti come Image Pack. I render possono inoltre migliorare nel tempo, quindi un documento che deve conservare esattamente ciò che il cliente ha visto dovrebbe archiviare il file anziché un URL.

Continui a leggere

Storia di un cliente · Software per concessionariCome trasformare un VIN o un elenco dello stock in una foto per ogni veicolo in un software per concessionariUn record di stock ha un VIN e un numero di stock molto prima di avere una foto. Gli strumenti per concessionari decodificano il VIN gratuitamente, conservano l’id del veicolo nel record e mostrano una vista coerente nel CRM tramite URL firmati.