Car Image API

Bruksområder · Leasing

Bilbilder for leasingtilbud

Gjengi hvert leasingtilbud som riktig årsmodell i nøyaktig lakkfarge etter hex-kode, legg det inn i tilbuds-PDF-er via signerte URL-er, og bygg inn en 3D-modell i konfiguratoren.

En byggeguide skrevet ut fra API-ets dokumenterte virkemåte; den nevner ingen kunder. Publisert .

Problemet: tilbudet er nøyaktig, bildet er det ikke

Et leasingtilbud er spesifikt: én årsmodell, utstyrsvarianten betalingen er beregnet på, en lakkfarge fra produsentens nåværende palett, et månedsbeløp som gjelder til en bestemt dato. Bildet ved siden av er det ofte ikke: fjorårets pressebilde, en farge bilen ikke lenger tilbys i, et annet karosseri. Når betalingen er nøyaktig og bildet omtrentlig, er det bildet kunden stiller spørsmål ved.

Det samme tilbudet blir så med videre: til en modellside, inn i en tilbuds-PDF, inn i en e-post og inn i en konfigurator der kunden kan snu bilen rundt. Alle disse trenger samme kjøretøy i samme lakkfarge.

Slik ser integrasjonen ut

  • Ett tilbud per årsmodell, med katalogens kjøretøy-id for det året som nøkkel.
  • Produsentens lakk som hex-kode, på hvert bilde i tilbudet.
  • Det samme bildet i tilbuds-PDF-en og e-posten, via signerte URL-er, slik at ingen dokumenter eller renderere noen gang har en nøkkel.
  • En 3D-modell per lakkfarge til konfiguratoren, publisert som en innebyggingskode på to linjer.

Trinn 1: knytt hvert tilbud til kjøretøy-ID-en for modellåret

GET /api/v1/vehicles?make=&model= er gratis og offentlig og lister opp alle årganger av en modell, hver med sin stabile kjøretøy-ID. Lagre ID-en til tilbudets årsmodell sammen med tilbudet.

Alle årganger av én modell
curl -s "https://carimage.dev/api/v1/vehicles?make=honda&model=cr-v"
200 OK (forkortet)
{
  "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"
      }
    ]
  }
}

Når 2027-tilbudene publiseres, får de 2027-ID-en, og 2026-tilbudene beholder sin: en ID endres aldri, så en side eller et tilbud som er bygget på den, fortsetter å virke etter årsmodellskiftet. Katalogen bruker merke, modell og år som nøkkel, så utstyrsversjonen betalingen er beregnet for (en EX-L, en Sport Touring), står som tekst i tilbudet og er aldri noe bildet påstår.

Trinn 2: produsentens lakkfarge, som hex-kode

De 15 forhåndsdefinerte fargene dekker de vanlige fargene; et tilbud trenger lakken bilen faktisk tilbys i. Hent hex-verdien fra produsentens fargeprøve og send den uten prefiks i en URL (color=1f3a5f) eller med # i JSON ("color": "#1f3a5f"). En hex teller det samme som en forhåndsdefinert farge, ett kjøretøybilde, fordi hver lakk er en omfarging av én klargjort visning, og en hex som tilsvarer fargeprøven til en forhåndsdefinert farge, er den fargen, mellomlagret én gang.

Bildet i tilbudet
# 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

Trinn 3: tilbuds-PDF-en og e-posten med tilbudet, via signerte URL-er

En tilbuds-PDF er vanligvis HTML som gjengis av en PDF-tjeneste eller en headless nettleser. Legg en signert URL fra POST /api/v1/image-urls i malen, aldri nøkkelen. Rendereren laster bildet én gang og bygger det inn, så standard levetid på 1 time er mer enn nok, og format: "jpg" legger det på hvit bakgrunn, noe som passer for et dokument. URL-en teller bildet som et kjøretøybilde for måneden når den lages.

Tilbudse-posten åpnes når kunden kommer til den. Lag bildet med renew: true og ttl_seconds satt til maksimum på 7 dager, og sett renew_days til antall dager som gjenstår av tilbudet. En fornyelse teller bildet én gang i måneden den faller i, og ikke noe mer hvis det allerede er telt den måneden. Stille uker teller ingenting, og når tilbudet avsluttes, slutter URL-en å fornyes og utløper. På en betalt plan dekker lisensen en rendering i det produktet ditt lager for kunder, inkludert tilbud.

PDF-en og e-posten, med TypeScript SDK-en
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`,
  }
);

Trinn 4: en 3D-modell for konfiguratoren

POST /api/v1/3d med tilbudets kjøretøy-id, lakken og publish: true bygger en teksturert modell (GLB, USDZ, FBX og en nettleserversjon) og gir den URL-er uten nøkkel med en innbyggingskode på to linjer. Det koster 100 kreditter per kjøretøy og farge fra kredittene planen din inkluderer, belastet én gang; å bestille samme kjøretøy i samme lakk igjen fra kontoen din er gratis. Den første modellen av et kjøretøy tar 10–20 minutes, og hver ytterligere lakk gjenbruker modellnettet og tar 1–2 minutes.

Én lakkfarge i konfiguratoren
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 (forkortet)
{
  "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} (hvert 10.–15. sekund er nok), eller send med en webhook_url og en webhook_secret og motta én signert POST når modellen er klar. data.public.embed.html er skriptet og et <car-3d>-element: lim det inn på tilbudssiden. Elementet viser plakatbildet med en gang og henter viseren første gang modellen rulles inn i synsfeltet; view, spin, backdrop, ar og alt angir startvinkelen, dreieskiven, bakgrunnen, en AR-knapp på mobiler (Quick Look via USDZ på iOS) og alt-teksten. Publisering og alle innlastinger er gratis.

En fargevelger for publiserte modeller
<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>

En konfigurator i 4 lakker er 4 modeller, 400 kreditter én gang. Folierings- og vindustoningsverkstedene som bruker API-et, bestiller 3D-modeller på samme måte; historien deres dekker filene og formatene, og 3D-dokumentasjonen dekker webhooks, nedlastinger og avpublisering.

CLI, SDK og MCP

  • CLI: npx @meterapp/car-image 3d create --vehicle veh_b6kgpb03d73r9 --color "#1f3a5f" --publish --wait bestiller en lakkfarge, venter på den og skriver ut innbyggingskoden.
  • SDK: client.vehicles({ make, model }), client.createImageUrls(…), client.create3dModel({ vehicle }, { color, publish: true }) og client.wait3dModel(id).
  • MCP: med ?toolset=all lar create_3d_model, get_3d_model og publish_3d_model en assistent bestille og publisere en lakkfarge for en selger. Oppsett er beskrevet på MCP-siden.

Ofte stilte spørsmål

Viser bildet utstyrsnivået som månedsprisen er beregnet ut fra?
Nei. Katalogen er basert på merke, modell og år, så alle utstyrsversjoner av et modellår gjengis som samme kjøretøy. Skriv utstyrsversjonen i tilbudsteksten, ved siden av bildet, og beskriv aldri bildet som den utstyrsversjonen eller som en bil på lager.
Koster en produsentlakk mer enn en forhåndsinnstilt farge?
Nei. Hver lakk er en omfarging av én klargjort visning, så en hex teller som ett kjøretøybilde, akkurat som hvilken som helst av de 15 forhåndsdefinerte fargene, og en hex som tilsvarer fargeprøven til en forhåndsdefinert farge, er den fargen. Hex-verdien brukes som nøyaktig den sRGB-verdien under studiobelysning, så sammenlign renderingen med fargeprøven før tilbudet publiseres.
Hva koster en konfigurator med 4 lakkfarger?
400 kreditter, én gang: 100 kreditter for hver lakkfarge på kjøretøyet. Det er gratis å bestille på nytt et kjøretøy og en lakkfarge som kontoen din allerede har (billing.already_owned er true), og publisering, polling, nedlastinger og hver innlasting av en publisert modell er også gratis.
Hvor lang tid tar en 3D-modell, og hva skjer hvis den mislykkes?
Den første modellen av et kjøretøy tar 10–20 minutes; hver ekstra lakkfarge av samme kjøretøy gjenbruker meshen og tar 1–2 minutes. En modell som mislykkes, refunderes i sin helhet, og når 3D-genereringen har nådd sin daglige kapasitet, avvises forespørselen med et tidspunkt for nytt forsøk før noe belastes.
Kan en tilbuds-PDF beholde bildet etter at tilbudet er utløpt?
Ja. På en betalt plan dekker lisensen et render-bilde i det produktet ditt lager for kunder, også i et tilbud eller en brosjyre, så lenge planen er aktiv. Lagrede kopier slettes innen 30 dager etter at planen avsluttes. Bilder du trenger permanent i lagrede tilbud, kan kjøpes én gang som en Image Pack.

Les videre

Kundehistorie · Ettermarked for bilSlik forhåndsviser man folie, solfilm eller PPF på nøyaktig den bilen kunden harEn kunde vil se folien på sin egen bil, ikke på en annens. Verkstedene rendrer nøyaktig riktig årsmodell i hvitt, legger materialet oppå, matcher en lakk etter hex-kode og bestiller en 3D-modell til den roterende visningen.