Car Image API

Zastosowania · Ubezpieczenia

Obrazy samochodów do likwidacji szkód i ofert ubezpieczeniowych

Bezpłatne dekodowanie numeru VIN z polisy lub zgłoszenia szkody, zapisanie identyfikatora pojazdu i jeden opisany widok ubezpieczonego modelu w aktach szkody i w PDF z ofertą.

Przewodnik wdrożeniowy oparty na udokumentowanym działaniu API; nie wymienia żadnego klienta. Opublikowano .

Problem: rekord wskazuje samochód, którego nikt nie widzi

Formularz wyceny, polisa i pierwsze zgłoszenie szkody identyfikują pojazd w ten sam sposób: po numerze VIN wpisanym przez klienta lub odczytanym z dowodu rejestracyjnego. Wszystko, co człowiek potem widzi o samochodzie, to tekst: rok, marka, model i ewentualnie wersja wyposażenia. Pytanie „Czy to Państwa pojazd?” obok linijki tekstu zachęca do odpowiedzi „tak” na cokolwiek.

Obraz modelu wskazanego przez VIN pozwala klientowi i likwidatorowi szkód od razu sprawdzić, czy w dokumentacji figuruje właściwy typ samochodu. Nie pokazuje jednak, o który konkretnie samochód chodzi: render jest studyjną ilustracją marki, modelu i roku z katalogu i nie przedstawia żadnego konkretnego fizycznego pojazdu. Ten jeden fakt kształtuje całą opisaną niżej integrację.

Jak wygląda integracja

  • Dekodowanie przy przyjęciu. Proces wyceny lub system polis dekoduje VIN raz, bezpłatnie, i zapisuje identyfikator pojazdu z katalogu razem z polisą. Szkody zgłaszane w ramach polisy dziedziczą ten identyfikator.
  • Jeden widok wszędzie. front-3-4, główne ujęcie, w jednym polu na ekranie wyceny, w stanowisku obsługi szkód, w PDF z wyceną i w portalu polis, dzięki czemu każdy ekran pokazuje model w ten sam sposób.
  • Podpisane URL-e, nigdy klucz. Przeglądarki i generatory PDF wczytują URL-e bez klucza, generowane przez Państwa serwer.
  • Słowa tam, gdzie obraz nie wystarczy. Wersja, wyposażenie dodatkowe, kolor w dokumentacji, uszkodzenia i przebieg pozostają w tekście i na zdjęciach, a przy obrazie widnieje informacja, że jest poglądowy.

Krok 1: bezpłatne dekodowanie numeru VIN

GET /api/v1/vin/{vin} jest bezpłatny i wymaga klucza z uprawnieniem images:read. Zwraca zdekodowane pola z danych vPIC agencji NHTSA (rok, marka, model, wersja wyposażenia, seria, typ nadwozia, silnik i każdy inny atrybut znany vPIC), a gdy pojazd jest w katalogu – także obiekt vehicle z jego stałym id i gotową ścieżką image_path.

Dekodowanie VIN z kalkulacji składki
curl --fail-with-body \
  -H "Authorization: Bearer $CAR_IMAGE_API_KEY" \
  "https://carimage.dev/api/v1/vin/WP0AA2A96RS201834"
200 OK (skrócone)
{
  "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"
  }
}

Proszę odczytać trim: „Carrera, Carrera T, Carrera 4”. Wzorzec tego VIN obejmuje trzy wersje wyposażenia, więc nawet dekodowanie nie określi, którą z nich obejmuje polisa, a render 911 z 2024 roku tym bardziej. Należy poprosić klienta o potwierdzenie wersji, zapisać ją jako tekst razem z series i body_class, a obraz niech pokazuje model.

  • VIN z błędną cyfrą kontrolną nadal zostanie zdekodowany, z valid: false i opisem problemu w errors; suggested_vin oznacza znakiem ! pozycję, którą vPIC uważa za błędną — to właśnie należy pokazać osobie wpisującej numer.
  • Formularz, który ma tylko pierwsze znaki, może wysłać częściowy VIN: co najmniej pięć znaków, z * w miejscu każdej nieznanej pozycji i opcjonalnym year.
  • 404 oznacza, że vPIC nie ma zapisu tego wzorca. vPIC obejmuje pojazdy produkowane na rynek amerykański, więc dla innych rynków należy zacząć od marki i modelu przez POST /api/v1/images/resolve, co również jest bezpłatne.

Krok 2: zapisanie identyfikatora pojazdu w polisie i zgłoszeniu szkody

Należy zapisać data.vehicle.id w polisie jako zwykły ciąg znaków i kopiować go do każdej szkody zgłoszonej z tej polisy. Identyfikator jest deterministyczny i trwały: ten sam pojazd ma ten sam identyfikator przy każdym wdrożeniu i po każdym wydaniu katalogu, więc można go bezpiecznie używać jako klucza obcego, a każde kolejne żądanie podaje vehicle=veh_78qtwrgh37bkr zamiast marki i modelu.

Gdy data.vehicle ma wartość null, zdekodowanej marki i modelu nie ma w katalogu, jak w przypadku przyczep i niektórych podwozi użytkowych. Zdekodowane pola nadal można wyświetlić. Należy je pokazać bez obrazu i nigdy nie wstawiać w ich miejsce podobnego samochodu.

Krok 3: jeden widok w aktach szkody i w PDF-ie z ofertą

Ekran wyceny, panel obsługi szkód i portal polis to aplikacje przeglądarkowe, więc serwer generuje podpisane URL-e przez POST /api/v1/image-urls: każdy URL zalicza swój obraz jako obraz pojazdu w danym miesiącu w chwili wygenerowania, do 50 na wywołanie, a jego wczytywanie jest bezpłatne aż do wygaśnięcia. Kadr warto ustalić raz i używać go ponownie: front-3-4 w ramce 640×400 z fit: "contain" oraz trim z niewielkim padding, aby coupé i pickup wypełniały ramkę tak samo. Czas ważności każdego URL-a zależy od miejsca, w którym jest wyświetlany:

  • Stanowisko obsługi szkód. URL należy generować w chwili renderowania ekranu. Domyślny czas ważności (1 godzina) wystarcza na sesję pracy, a szkoda otwarta ponownie następnego dnia dostaje nowy URL.
  • PDF z ofertą. Gdy PDF jest generowany z HTML, renderer raz wczytuje obraz i go osadza, więc domyślny czas ważności w zupełności wystarcza, a usługa PDF nigdy nie ma dostępu do Państwa klucza. format: "jpg" spłaszcza obraz na białe tło, a tego właśnie potrzebuje dokument.
  • Portal polis i e-mail o odnowieniu. Działają dłużej niż jakikolwiek czas ważności, dlatego należy generować URL z renew: true i ttl_seconds: 604800 (7 dni). URL nadal działa, odnowienie liczy obraz raz w miesiącu, w którym nastąpi, i nic więcej, jeśli został już policzony w tym miesiącu, a renew_days: 365, najdłuższa dozwolona wartość, obejmuje roczny okres polisy.

Kluczowi generującemu URL-e należy przypisać listę dozwolonych originów w panelu: URL wczytany z innej witryny zwraca 403 z origin_not_allowed, a programy pocztowe i przeglądarki PDF, które nie wysyłają nagłówka Referer, nadal go wczytują. Unieważnienie klucza kończy działanie wszystkich wygenerowanych nim URL-i.

Przyjęcie zgłoszenia, stanowisko robocze, PDF i portal z SDK dla 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` }
  );
}

Krok 4: oznaczenie jako model, nigdy jako ubezpieczony samochód

Opis należy umieścić tam, gdzie jest obraz, a nie tylko w przypisie: w tekście alternatywnym i w podpisie pod obrazem. Render pokazuje markę, model i rocznik w wybranym lakierze, a color może odpowiadać kolorowi z polisy (nazwa gotowego koloru lub dowolny kod hex). Nadal jest to jednak model w tym lakierze, a nie samochód klienta.

Sekcja pojazdu w ofercie
<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>

Ile to kosztuje i jaki plan wybrać

  • Bezpłatne: dekodowanie VIN, resolve, zapytania do katalogu i każde wczytanie podpisanego URL w okresie jego ważności.
  • Jeden obraz pojazdu: każdy pojazd w każdym lakierze i ujęciu, liczony raz w miesiącu niezależnie od tego, ile razy zostanie dostarczony, wygenerowany lub odnowiony, w dowolnym rozmiarze i formacie.
  • Obrazy pojazdów miesięcznie: lejek ofertowy obejmuje wiele różnych pojazdów, a każdy plan zawiera określoną ich liczbę miesięcznie: Free 100, Pro 2500 i Business 10 000; w planie Enterprise warunki są negocjowane. Obraz już naliczony w tym miesiącu jest zawsze serwowany, a żądanie ponad limit otrzymuje odpowiedź 402, zanim cokolwiek zostanie naliczone, więc plan warto dobrać do liczby wycenianych pojazdów.

W planie płatnym licencja obejmuje render umieszczony w materiałach, które Państwa produkt tworzy dla swoich użytkowników, w tym w ofercie lub raporcie, przez cały okres aktywności planu; szczegóły zawiera licencja.

CLI, SDK i 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? }) i client.createImageUrls(…), jak wyżej; client.resolve(query) dla pojazdu bez numeru VIN.
  • MCP: decode_vin i create_car_image_urls należą do podstawowego zestawu narzędzi, więc asystent mający szkodę w kontekście może odpowiedzieć na prośbę „pokaż ubezpieczony model” na podstawie VIN zapisanego w aktach. Konfiguracja jest opisana na stronie MCP.

Najczęściej zadawane pytania

Czy obraz może zastąpić zdjęcia ubezpieczonego pojazdu?
Nie. To studyjny render marki, modelu i rocznika z katalogu, a nie zdjęcie, i nie przedstawia żadnego konkretnego pojazdu. Pomaga klientowi lub likwidatorowi szkód sprawdzić, czy rekord wskazuje właściwy rodzaj samochodu. Stan, uszkodzenia, wersja wyposażenia, opcje i modyfikacje wynikają ze zdjęć, oględzin i zdekodowanego tekstu, a obraz powinien być oznaczony jako poglądowy.
Ile kosztuje obraz w każdej ofercie?
Dekodowanie VIN jest bezpłatne. Zdjęcie liczy się jako jeden obraz pojazdu w miesiącu w chwili wygenerowania jego podpisanego URL-a lub dostarczenia jego bajtów na Państwa serwer, a potem może być wyświetlane dowolnie często; ładowanie podpisanego URL-a jest bezpłatne do momentu jego wygaśnięcia. Odnawiany URL liczy obraz raz w każdym kolejnym miesiącu, w którym zostanie otwarty, i nic w miesiącach, w których nikt go nie ogląda.
VIN został zdekodowany, ale vehicle ma wartość null. Co dalej?
Dekoder rozpoznał pojazd, ale katalog nie zawiera wpisu dla tej marki, modelu i rocznika, co zdarza się w przypadku przyczep i niektórych podwozi użytkowych. Należy wyświetlić zdekodowane pola bez obrazu i nigdy nie podstawiać podobnego samochodu. Warto przeszukać katalog na wypadek innej pisowni, a jeśli pojazdu naprawdę brakuje, zgłosić prośbę na publicznej tablicy zgłoszeń.
Czy dekodowanie VIN działa dla pojazdów spoza rynku USA?
Dekoder korzysta z danych vPIC agencji NHTSA, które obejmują pojazdy produkowane na rynek amerykański, dlatego poprawnie wpisany VIN z innego rynku może zwrócić 404 lub zostać zdekodowany bez modelu. Taki samochód należy wtedy wyszukać po marce, modelu i roku za pomocą bezpłatnego endpointu resolve; sam katalog obejmuje modele z innych rynków.
Jak długo akta szkody mogą przechowywać obraz?
Dopóki plan jest aktywny. W płatnym planie licencja obejmuje render w materiałach generowanych przez Państwa produkt, w tym w ofertach i raportach; w ciągu 30 dni od zakończenia planu przechowywane kopie są usuwane. Aby zachować obrazy w dokumentacji na zawsze, należy kupić je jako Image Pack. Rendery mogą też być z czasem ulepszane, dlatego rekord, który musi zachować dokładnie to, co widział klient, powinien przechowywać plik, a nie URL.

Czytaj dalej

Historia klienta · Oprogramowanie dealerskieJak zamienić VIN lub arkusz stanów magazynowych w zdjęcie każdego pojazdu w oprogramowaniu dla dealerówRekord pojazdu ma VIN i numer magazynowy na długo przed zdjęciem. Narzędzia dla dealerów bezpłatnie dekodują VIN, zapisują identyfikator pojazdu w rekordzie i pokazują jeden spójny widok w CRM dzięki podpisanym URL-om.