Car Image API

Toepassingen · Leasing

Auto-afbeeldingen voor leaseoffertes en -aanbiedingen

Render elk leaseaanbod als het juiste modeljaar in de exacte lakkleur op basis van hexcode, plaats het via signed URL's in offerte-pdf's en embed een 3D-model in de configurator.

Een implementatiegids op basis van het gedocumenteerde gedrag van de API; er wordt geen klant genoemd. Gepubliceerd op .

Het probleem: het aanbod is exact, de afbeelding niet

Een leaseaanbieding is specifiek: één modeljaar, de uitvoering waarop het maandbedrag is berekend, een lakkleur uit het huidige palet van de fabrikant, een maandbedrag dat tot een bepaalde datum geldig is. De afbeelding ernaast is dat vaak niet: de persfoto van vorig jaar, een kleur waarin de auto niet meer leverbaar is, een andere carrosserie. Als het bedrag exact is en de afbeelding bij benadering, is de afbeelding het onderdeel waar een klant vragen bij stelt.

Hetzelfde aanbod reist vervolgens verder: naar een modelpagina, in een offerte-pdf, in een e-mail en in een configurator waarin de klant de auto ronddraait. Elk daarvan heeft hetzelfde voertuig in dezelfde lakkleur nodig.

Hoe de integratie eruitziet

  • Een aanbod per modeljaar, gekoppeld aan het voertuig-id uit de catalogus voor dat jaar.
  • De fabriekslak als hexcode, op elke afbeelding van het aanbod.
  • Dezelfde afbeelding in de offerte-pdf en de e-mail, via ondertekende URL's, zodat geen enkel document of renderprogramma ooit een sleutel bevat.
  • Een 3D-model per lakkleur voor de configurator, gepubliceerd als embed van twee regels.

Stap 1: koppel elke aanbieding aan de voertuig-id van het modeljaar

GET /api/v1/vehicles?make=&model= is gratis en openbaar en toont elk bouwjaar van een model, elk met een vaste voertuig-id. Sla de id van het bouwjaar van de aanbieding op bij de aanbieding.

Elk jaar van één model
curl -s "https://carimage.dev/api/v1/vehicles?make=honda&model=cr-v"
200 OK (ingekort)
{
  "data": {
    "make": {
      "id": 474,
      "name": "HONDA",
      "slug": "honda"
    },
    "model": {
      "name": "CR-V",
      "slug": "cr-v",
      "vehicle_type": "Passenger Car"
    },
    "vehicles": [
      "…",
      {
        "year": 2025,
        "id": "veh_exjyt8r21gmhe"
      },
      {
        "year": 2026,
        "id": "veh_b6kgpb03d73r9"
      },
      {
        "year": 2027,
        "id": "veh_8nr7res56a6jq"
      }
    ]
  }
}

Wanneer de aanbiedingen voor 2027 live gaan, krijgen ze de id van 2027, en de aanbiedingen voor 2026 houden de hunne: een id verandert nooit, dus een pagina of offerte die erop is gebouwd, blijft werken na de wisseling van het bouwjaar. De catalogus is gebaseerd op merk, model en bouwjaar, dus de uitvoering waarop de maandtermijn is berekend (een EX-L, een Sport Touring) is tekst bij de aanbieding, nooit iets wat de afbeelding beweert.

Stap 2: de lak van de fabrikant, via hex

De 15 vooraf ingestelde kleuren dekken de gangbare kleuren; een aanbod vraagt om de lak waarin de auto echt wordt aangeboden. Neem de hex van het kleurstaal van de fabrikant en stuur die zonder # in een URL (color=1f3a5f) of met # in JSON ("color": "#1f3a5f"). Een hex telt hetzelfde als een vooraf ingestelde kleur, één voertuigafbeelding, omdat elke lak een herkleuring is van één voorbereid aanzicht, en een hex die gelijk is aan het kleurstaal van een vooraf ingestelde kleur, is die kleur en wordt één keer gecachet.

De afbeelding bij het aanbod
# the 2026 offer's hero: its model year, in the paint it is offered in, cropped to a 16:9 slot
curl --fail-with-body -H "Authorization: Bearer $CAR_IMAGE_API_KEY" \
  "https://carimage.dev/api/v1/images/car?vehicle=veh_b6kgpb03d73r9&view=front-3-4&color=1f3a5f&w=1024&h=576&fit=contain&trim=1&padding=4&format=webp" \
  -o cr-v-2026-offer.webp

Stap 3: de offerte-pdf en de aanbiedingsmail, via ondertekende URL's

Een offerte-pdf is meestal HTML die wordt gerenderd door een pdf-service of een headless browser. Zet een ondertekende URL van POST /api/v1/image-urls in de template, nooit de sleutel: de renderer laadt de afbeelding eenmaal en sluit die in, dus de standaardlevensduur van 1 uur is ruim voldoende, en format: "jpg" zet de afbeelding op een witte achtergrond, wat goed bij een document past. De URL telt de afbeelding als voertuigafbeelding van de maand zodra hij wordt aangemaakt.

De offertemail wordt geopend wanneer de klant eraan toekomt. Maak de afbeelding aan met renew: true en ttl_seconds op het maximum van 7 dagen, en stel renew_days in op het aantal resterende dagen van het aanbod: een verlenging telt de afbeelding eenmaal in de maand waarin die valt, en niets extra als die die maand al was geteld; rustige weken tellen niet mee, en wanneer het aanbod afloopt, stopt de URL met verlengen en verloopt hij. Met een betaald abonnement dekt de licentie een render in wat uw product voor klanten produceert, een offerte inbegrepen.

De PDF en de e-mail, met de TypeScript SDK
import { CarImageClient, type ImageParams } from "@meterapp/car-image-sdk";

const client = new CarImageClient({ apiKey: process.env.CAR_IMAGE_API_KEY });

// The offer's picture: its model year, in the paint it is offered in.
const offerImage: ImageParams = {
  vehicle: offer.vehicleId, view: "front-3-4", color: offer.paintHex, // "#1f3a5f"
  width: 1024, height: 576, fit: "contain", trim: true, padding: 4,
};

// The quote PDF: rendered from HTML, the picture loaded once and embedded, on white.
const { data: [forPdf] } = await client.createImageUrls({ ...offerImage, format: "jpg" });
const pdf = await renderQuotePdf({ ...quote, vehicleImageUrl: forPdf.url });

// The offer email: loads for as long as the offer runs, then stops renewing.
const { data: [forEmail] } = await client.createImageUrls(
  { ...offerImage, width: 600, height: 338, format: "auto" },
  {
    ttlSeconds: 604800,
    renew: true,
    renewDays: Math.min(Math.max(daysUntil(offer.endsOn), 1), 365),
    idempotencyKey: `offer:${offer.id}:email`,
  }
);

Stap 4: een 3D-model voor de configurator

POST /api/v1/3d met de voertuig-id van het aanbod, de lak en publish: true bouwt een getextureerd model (GLB, USDZ, FBX en een browserversie) en geeft het URL’s zonder sleutel met een embedcode van twee regels. Het kost 100 credits per voertuig en kleur uit de credits van uw abonnement, eenmalig in rekening gebracht; hetzelfde voertuig in dezelfde lak opnieuw bestellen vanuit uw account is gratis. Het eerste model van een voertuig duurt 10–20 minutes, en elke volgende lak hergebruikt de mesh en duurt 1–2 minutes.

Eén lakkleur van de configurator
curl --fail-with-body -X POST https://carimage.dev/api/v1/3d \
  -H "Authorization: Bearer $CAR_IMAGE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: configurator-cr-v-2026-1f3a5f" \
  -d '{"vehicle": "veh_b6kgpb03d73r9", "color": "#1f3a5f", "publish": true}'
202 Accepted (ingekort)
{
  "data": {
    "id": "5b0f3c2e-8a41-4d7e-9c10-2f6e1a3b4d58",
    "object": "3d_model",
    "status": "queued",
    "progress": 0,
    "vehicle": {
      "id": "veh_b6kgpb03d73r9",
      "make": "honda",
      "model": "cr-v",
      "year": 2026
    },
    "color": "#1f3a5f",
    "files": null,
    "public": {
      "id": "m3d_…",
      "url": "https://carimage.dev/api/v1/3d/public/m3d_…",
      "files": null,
      "embed": {
        "script": "https://carimage.dev/embed/3d.js",
        "html": "<script src=\"https://carimage.dev/embed/3d.js\" async></script>\n<car-3d model=\"m3d_…\"></car-3d>"
      }
    }
  },
  "billing": {
    "charged_on": "creation",
    "credits_charged": 100,
    "already_owned": false
  }
}

Poll GET /api/v1/3d/{id} (elke 10–15 seconden is ruim voldoende), of geef een webhook_url met een webhook_secret mee en ontvang één ondertekende POST zodra het model klaar is. data.public.embed.html bevat het script en een <car-3d>-element: plak het in de aanbiedingspagina. Het element toont direct de poster en haalt de viewer op wanneer het model voor het eerst in beeld scrolt; view, spin, backdrop, ar en alt stellen de beginhoek, de draaischijf, de achtergrond, een AR-knop op telefoons (Quick Look via de USDZ op iOS) en de alt-tekst in. Publiceren en elke keer laden zijn gratis.

Een lakkleurkiezer voor gepubliceerde modellen
<script src="https://carimage.dev/embed/3d.js" async></script>

<select id="paint" aria-label="Paint">
  <option value="1f3a5f">Blue</option>
  <option value="white">White</option>
</select>

<!-- One published model per paint. Only the visible one is loaded: the script
     fetches a viewer the first time a model scrolls into view. -->
<car-3d data-paint="1f3a5f" model="m3d_…" view="front-3-4" spin backdrop="studio" ar
        alt="2026 Honda CR-V in the offer's blue"></car-3d>
<car-3d data-paint="white" model="m3d_…" view="front-3-4" spin backdrop="studio" ar
        alt="2026 Honda CR-V in white" hidden></car-3d>

<script>
  document.querySelector("#paint").addEventListener("change", (event) => {
    for (const model of document.querySelectorAll("car-3d[data-paint]")) {
      model.hidden = model.dataset.paint !== event.target.value;
    }
  });
</script>

Een configurator in 4 lakkleuren betekent 4 modellen, eenmalig 400 credits. De wrap- en raamfoliebedrijven die de API gebruiken, bestellen 3D-modellen op dezelfde manier; hun verhaal behandelt de bestanden en formaten, en de 3D-documentatie behandelt webhooks, downloads en depubliceren.

CLI, SDK en MCP

  • CLI: npx @meterapp/car-image 3d create --vehicle veh_b6kgpb03d73r9 --color "#1f3a5f" --publish --wait bestelt een lakkleur, wacht tot die klaar is en print de embedcode.
  • SDK: client.vehicles({ make, model }), client.createImageUrls(…), client.create3dModel({ vehicle }, { color, publish: true }) en client.wait3dModel(id).
  • MCP: met ?toolset=all kan een assistent via create_3d_model, get_3d_model en publish_3d_model een lakkleur bestellen en publiceren voor een verkoper. De installatie staat op de MCP-pagina.

Veelgestelde vragen

Toont de afbeelding de uitvoering waarop het maandbedrag is gebaseerd?
Nee. De catalogus is ingedeeld op merk, model en jaar, dus elke uitvoering van een modeljaar wordt als hetzelfde voertuig gerenderd. Zet de uitvoering in de tekst van de aanbieding, naast de afbeelding, en beschrijf de afbeelding nooit als die uitvoering of als een auto op voorraad.
Kost een lakkleur van de fabrikant meer dan een standaardkleur?
Nee. Elke lak is een herkleuring van één voorbereid aanzicht, dus een hex telt als één voertuigafbeelding, net als elk van de 15 vooraf ingestelde kleuren, en een hex die gelijk is aan het kleurstaal van een vooraf ingestelde kleur, is die kleur. De hex wordt toegepast als exact die sRGB-waarde onder studiobelichting, dus vergelijk de render met het kleurstaal voordat het aanbod live gaat.
Wat kost een configurator met 4 lakkleuren?
400 credits, eenmalig: 100 credits voor elke lakkleur van het voertuig. Een voertuig en lakkleur die uw account al bezit opnieuw bestellen is gratis (billing.already_owned is true), en publiceren, pollen, downloads en elke keer dat een gepubliceerd model wordt geladen zijn ook gratis.
Hoe lang duurt een 3D-model en wat als het mislukt?
Het eerste model van een voertuig duurt 10–20 minutes; elke volgende lakkleur van hetzelfde voertuig hergebruikt de mesh en duurt 1–2 minutes. Een model dat mislukt, wordt volledig terugbetaald, en wanneer 3D-generatie de dagelijkse capaciteit heeft bereikt, wordt het verzoek geweigerd met een tijdstip om het opnieuw te proberen, voordat er iets in rekening wordt gebracht.
Mag een offerte-PDF de afbeelding behouden nadat het aanbod is afgelopen?
Ja. Met een betaald plan dekt de licentie een render in wat uw product voor klanten maakt, inclusief een offerte of brochure, zolang het plan actief is; binnen 30 dagen na afloop worden opgeslagen kopieën verwijderd. Afbeeldingen die u blijvend in opgeslagen offertes nodig hebt, kunt u eenmalig kopen als Image Pack.

Lees verder

Klantverhaal · Auto-aftermarketZo toont u een wrap, raamfolie of PPF vooraf op de exacte auto van de klantEen klant wil de wrap op zijn eigen auto zien, niet op die van een ander. Wrapbedrijven renderen het exacte modeljaar in het wit, leggen het materiaal eroverheen, matchen een lak op hex-code en bestellen een 3D-model voor de draaiende weergave.