Car Image API

Cas d’usage · Assurance

Images de voitures pour les sinistres et devis d’assurance

Décodez gratuitement le VIN figurant sur un contrat ou un sinistre, conservez son identifiant de véhicule et affichez une vue légendée du modèle assuré dans le dossier de sinistre et le PDF du devis.

Un guide d’intégration rédigé à partir du comportement documenté de l’API ; il ne cite aucun client. Publié le .

Le problème : le dossier désigne une voiture que personne ne peut voir

Un formulaire de devis, un contrat d'assurance et une déclaration de sinistre désignent tous le véhicule de la même manière : par son VIN, saisi par le client ou lu sur le certificat d'immatriculation. Tout ce qu'une personne voit ensuite de la voiture est du texte : une année, une marque, un modèle et éventuellement une finition. Demander « Est-ce votre véhicule ? » à côté d'une ligne de texte, c'est s'exposer à un oui pour n'importe quoi.

Une image du modèle correspondant au VIN décodé permet au client et à l’expert de vérifier d’un coup d’œil que le dossier désigne le bon type de voiture. Elle ne peut pas montrer de quelle voiture il s’agit : un rendu est une illustration studio d’une marque, d’un modèle et d’une année du catalogue, et il ne représente aucun véhicule physique précis. Ce seul fait détermine toute l’intégration décrite ci-dessous.

À quoi ressemble l’intégration

  • Décoder à la souscription. Le parcours de devis ou le système de gestion des contrats décode le VIN une seule fois, gratuitement, et enregistre l’identifiant de véhicule du catalogue avec le contrat. Les sinistres ouverts sur ce contrat en héritent.
  • Une seule vue partout. front-3-4, l’angle principal, dans un même cadre sur l’écran de devis, le poste de gestion des sinistres, le devis PDF et le portail assuré, pour que chaque écran présente le modèle de la même façon.
  • Des URL signées, jamais la clé. Les navigateurs et les moteurs de rendu PDF chargent des URL sans clé générées par votre serveur.
  • Des mots pour ce qu’une image ne peut pas dire. Finition, options, couleur enregistrée, dommages et kilométrage restent du texte et des photos, et l’image indique qu’elle est représentative.

Étape 1 : décoder le VIN, gratuitement

GET /api/v1/vin/{vin} est gratuit et nécessite une clé avec images:read. Il renvoie les champs décodés des données vPIC de la NHTSA (année, marque, modèle, finition, série, type de carrosserie, moteur et tous les autres attributs connus de vPIC) et, lorsque le catalogue contient le véhicule, un objet vehicle avec son identifiant stable et un image_path prêt à l’emploi.

Décodez le VIN du devis
curl --fail-with-body \
  -H "Authorization: Bearer $CAR_IMAGE_API_KEY" \
  "https://carimage.dev/api/v1/vin/WP0AA2A96RS201834"
200 OK (extrait)
{
  "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"
  }
}

Lisez le champ trim : « Carrera, Carrera T, Carrera 4 ». Le schéma de ce VIN couvre trois finitions : même le décodage ne peut donc pas dire laquelle le contrat assure, et un rendu de la 911 2024 encore moins. Demandez au client de confirmer la finition, conservez-la sous forme de texte avec series et body_class, et laissez l’image montrer le modèle.

  • Un VIN avec un chiffre de contrôle erroné est tout de même décodé, avec valid: false et le problème dans errors ; suggested_vin marque d’un ! le caractère que vPIC estime erroné, et c’est ce qu’il faut montrer à la personne qui saisit le numéro.
  • Un formulaire qui ne dispose que des premiers caractères peut envoyer un VIN partiel : au moins cinq caractères, avec * pour chaque position inconnue, et un year facultatif.
  • Une réponse 404 signifie que vPIC n’a aucune trace de ce motif. vPIC couvre les véhicules fabriqués pour le marché américain ; pour les autres marchés, partez donc de la marque et du modèle avec POST /api/v1/images/resolve, qui est également gratuit.

Étape 2 : conserver l’identifiant du véhicule sur le contrat et le sinistre

Stockez data.vehicle.id sur le contrat sous forme de simple chaîne et copiez-le dans chaque sinistre ouvert au titre de ce contrat. L’id est déterministe et permanent : le même véhicule a le même id à chaque déploiement et après chaque version du catalogue, il peut donc servir de clé étrangère, et chaque requête ultérieure indique vehicle=veh_78qtwrgh37bkr au lieu d’épeler une marque et un modèle.

Lorsque data.vehicle vaut null, la marque et le modèle décodés ne figurent pas dans le catalogue, comme pour les remorques et certains châssis utilitaires. Vous pouvez tout de même afficher les champs décodés. Affichez-les sans image, et ne mettez jamais une voiture similaire à sa place.

Étape 3 : une seule vue sur le dossier de sinistre et le devis PDF

L’écran de devis, le poste de gestion des sinistres et le portail des contrats sont des applications web, donc votre serveur génère des URL signées avec POST /api/v1/image-urls : 1 crédit par URL au moment de sa génération, jusqu’à 50 par appel, puis chargement gratuit jusqu’à expiration. Cadrez l’image une fois et réutilisez ce format : front-3-4 dans un cadre de 640×400 avec fit: "contain", et trim avec un peu de padding pour qu’un coupé et un pick-up remplissent le cadre de la même manière. La durée de vie de chaque URL dépend de l’endroit où elle s’affiche :

  • Le poste de gestion des sinistres. Générez l’URL au moment où l’écran s’affiche. La durée de vie par défaut de 1 heure couvre une session de travail, et un sinistre rouvert le lendemain obtient une nouvelle URL.
  • Le devis PDF. Lorsque le PDF est généré à partir de HTML, le moteur de rendu charge l’image une seule fois et l’intègre ; la durée de vie par défaut suffit donc largement, et le service PDF ne détient jamais votre clé. format: "jpg" aplatit l’image sur fond blanc, ce qui convient à un document.
  • Le portail des contrats et l’e-mail de renouvellement. Ils durent plus longtemps que toute durée de validité : générez donc l’URL avec renew: true et ttl_seconds: 604800 (7 jours). L’URL continue de fonctionner, chaque semaine supplémentaire au cours de laquelle elle est ouverte coûte 1 crédit, et renew_days: 365, la valeur maximale autorisée, couvre un contrat d’un an.

Attribuez à la clé qui génère les URL une liste d’origines autorisées dans le tableau de bord : une URL chargée depuis un autre site renvoie 403 avec origin_not_allowed, tandis que les clients de messagerie et les lecteurs PDF, qui n’envoient pas d’en-tête Referer, la chargent quand même. Révoquer la clé invalide toutes les URL qu’elle a générées.

Déclaration, outil de gestion, PDF et portail, avec le 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` }
  );
}

Étape 4 : l’étiqueter comme le modèle, jamais comme le véhicule assuré

Placez la mention là où se trouve l’image, pas seulement dans une note de bas de page : dans le texte alternatif et dans une légende sous l’image. Le rendu montre la marque, le modèle et l’année dans la teinte de votre choix, et color peut reprendre la couleur indiquée sur le contrat (un nom prédéfini ou n’importe quel code hexadécimal). Il s’agit toujours du modèle dans cette teinte, pas de la voiture du client.

Le bloc véhicule d’un devis
<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>

Coût et choix du forfait

  • Gratuit : le décodage du VIN, resolve, les recherches dans le catalogue et chaque chargement d’une URL signée pendant sa durée de validité.
  • 1 crédit : chaque image livrée sur votre serveur ou chaque URL générée, ainsi que chaque semaine supplémentaire au cours de laquelle une URL renouvelable est ouverte.
  • Véhicules distincts : un tunnel de devis voit passer de nombreux véhicules différents, et chaque forfait plafonne le nombre de véhicules distincts par mois : Free 100, Pro 2 500 et Business 15 000 ; aucun plafond pour Enterprise. Un véhicule déjà servi ce mois-ci est toujours autorisé, et une requête au-delà du plafond est refusée avant toute facturation : dimensionnez donc le forfait selon les véhicules pour lesquels vous établissez des devis, pas selon les crédits.

Avec un forfait payant, la licence couvre l’intégration d’un rendu dans ce que votre produit génère pour ses utilisateurs, devis ou rapport compris, tant que le forfait est actif ; les détails figurent dans la licence.

CLI, SDK et 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? }) et client.createImageUrls(…), comme ci-dessus ; client.resolve(query) pour un véhicule sans VIN.
  • MCP : decode_vin et create_car_image_urls font partie des outils de base : un assistant qui a le sinistre en contexte peut donc répondre à « Montrez-moi le modèle assuré » à partir du VIN enregistré. La configuration se trouve sur la page MCP.

Questions fréquentes

L’image peut-elle remplacer les photos du véhicule assuré ?
Non. Il s’agit d’un rendu studio de la marque, du modèle et de l’année du catalogue, et non d’une photo ; il ne représente aucun véhicule précis. Il aide un client ou un gestionnaire de sinistres à vérifier que le dossier désigne le bon type de voiture. L’état, les dégâts, la finition, les options et les modifications proviennent des photos, des inspections et du texte décodé, et l’image doit indiquer qu’elle est représentative.
Combien coûte une image sur chaque devis ?
Le décodage du VIN est gratuit. L’image coûte 1 crédit lorsque son URL signée est générée, ou lorsque ses octets sont livrés à votre serveur ; le chargement d’une URL signée est gratuit jusqu’à son expiration. Une URL renouvelable coûte 1 crédit de plus pour chaque semaine où elle est ouverte, et rien pour les semaines où personne ne la consulte.
Le VIN est décodé mais vehicle est null. Que faire ?
Le décodeur a reconnu le véhicule, mais le catalogue ne contient aucune entrée pour cette marque, ce modèle et cette année, ce qui arrive avec les remorques et certains châssis utilitaires. Affichez les champs décodés sans image et ne remplacez jamais le véhicule par une voiture similaire. Recherchez dans le catalogue au cas où l’orthographe diffère et, s’il manque vraiment, demandez-le sur le tableau public des demandes.
Le décodage VIN fonctionne-t-il pour les véhicules hors marché américain ?
Le décodeur s’appuie sur les données vPIC de la NHTSA, qui couvrent les véhicules fabriqués pour le marché américain : un VIN correctement saisi provenant d’un autre marché peut donc renvoyer une 404 ou être décodé sans modèle. Retrouvez plutôt cette voiture par marque, modèle et année avec l’endpoint resolve gratuit ; le catalogue lui-même couvre les modèles des autres marchés.
Combien de temps un dossier de sinistre peut-il conserver l’image ?
Aussi longtemps que le fichier existe. Avec un forfait payant, la licence couvre un rendu intégré à ce que génère votre produit, devis ou rapport compris, et un rendu livré pendant la durée du forfait conserve cette licence après la fin du forfait, documents archivés compris. Les rendus peuvent aussi être améliorés au fil du temps : un dossier qui doit conserver exactement ce que le client a vu doit donc stocker le fichier plutôt qu’une URL.

Poursuivre la lecture

Témoignage client · Logiciels pour concessionnairesComment transformer un VIN ou une liste de stock en photo pour chaque véhicule dans un logiciel de concessionUne fiche de stock possède un VIN et un numéro de stock bien avant d'avoir une photo. Les outils pour concessionnaires décodent le VIN gratuitement, conservent l'identifiant du véhicule dans la fiche et affichent une vue cohérente dans le CRM grâce à des URL signées.