API'nin belgelenmiş davranışına dayanarak yazılmış bir uygulama kılavuzu; hiçbir müşterinin adını vermez. tarihinde yayınlandı.
Sorun: kayıtta adı geçen arabayı kimse göremiyor
Bir teklif formu, bir poliçe kaydı ve bir ilk hasar ihbarı aracı aynı şekilde tanımlar: müşterinin yazdığı ya da ruhsattan okunan VIN ile. Ardından bir kişinin araç hakkında gördüğü her şey metindir: bir yıl, bir marka, bir model ve belki bir donanım paketi. Bir satır metnin yanında "Bu sizin aracınız mı?" diye sormak, her şeye evet denmesine davetiye çıkarır.
VIN'in çözümlendiği modelin bir resmi, müşterinin ve eksperin kaydın doğru türde bir aracı belirttiğini bir bakışta kontrol etmesini sağlar. Ancak hangi araç olduğunu gösteremez: render, katalogdaki bir marka, model ve yılın stüdyo illüstrasyonudur ve belirli bir fiziksel aracı tasvir etmez. Aşağıdaki entegrasyonun tamamı bu tek gerçeğe göre şekillenir.
Entegrasyon nasıl görünür
- Kayıt sırasında çözümleyin. Teklif akışı veya poliçe sistemi VIN'i bir kez ve ücretsiz olarak çözümler, kataloğun araç kimliğini poliçeyle birlikte saklar. Poliçeye bağlı açılan hasar dosyaları bu kimliği devralır.
- Her yerde tek görünüm. Ana açı olan
front-3-4; teklif ekranında, hasar çalışma alanında, teklif PDF'inde ve poliçe portalında tek bir kutu içinde; böylece her ekran modeli aynı şekilde gösterir. - Anahtar değil, her zaman imzalı URL'ler. Tarayıcılar ve PDF oluşturucular, sunucunuzun ürettiği anahtarsız URL'leri yükler.
- Görselin söyleyemediği şeyler için sözcükler. Donanım, opsiyonlar, kayıtlı renk, hasar ve kilometre metin ve fotoğraf olarak kalır; görsel ise temsili olduğunu belirtir.
1. Adım: VIN'i ücretsiz çözümleyin
GET /api/v1/vin/{vin} ücretsizdir ve images:read yetkisine sahip bir anahtar gerektirir. NHTSA'nın vPIC verilerinden çözümlenen alanlarla (yıl, marka, model, donanım, seri, gövde tipi, motor ve vPIC'in bildiği diğer tüm özellikler) ve araç katalogda varsa, kalıcı kimliğini ve kullanıma hazır bir image_path değerini içeren bir vehicle nesnesiyle yanıt verir.
curl --fail-with-body \
-H "Authorization: Bearer $CAR_IMAGE_API_KEY" \
"https://carimage.dev/api/v1/vin/WP0AA2A96RS201834"{
"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"
}
}trim alanını okuyun: "Carrera, Carrera T, Carrera 4". Bu VIN'in deseni üç donanım seviyesini kapsar; dolayısıyla çözümleme bile poliçenin hangisini sigortaladığını söyleyemez, 2024 911 görseli ise hiç söyleyemez. Müşteriden donanım seviyesini onaylamasını isteyin, bunu series ve body_class ile birlikte metin olarak saklayın ve görselin modeli göstermesine izin verin.
- Kontrol hanesi hatalı bir VIN yine de çözümlenir;
valid: falsedöner ve sorunerrorsiçinde yer alır.suggested_vin, vPIC'in hatalı olduğunu düşündüğü karakteri!ile işaretler; yazan kişiye gösterilmesi gereken de budur. - Yalnızca ilk karakterleri bulunan bir form kısmi VIN gönderebilir: en az beş karakter, bilinmeyen her konum için
*ve isteğe bağlı biryear. 404, vPIC'te bu kalıba ait kayıt olmadığı anlamına gelir. vPIC, ABD pazarı için üretilmiş araçları kapsar; diğer pazarlar için marka ve modeldenPOST /api/v1/images/resolveile başlayın, bu da ücretsizdir.
Adım 2: araç kimliğini poliçede ve hasar dosyasında saklayın
data.vehicle.id değerini poliçede düz bir dize olarak saklayın ve bu poliçeye karşı açılan her hasar dosyasına kopyalayın. Kimlik deterministik ve kalıcıdır: aynı araç her dağıtımda ve her katalog sürümünden sonra aynı kimliğe sahiptir; bu yüzden yabancı anahtar olarak güvenle kullanılabilir ve sonraki her istek marka ve modeli yazmak yerine vehicle=veh_78qtwrgh37bkr belirtir.
data.vehicle null olduğunda, römorklarda ve bazı ticari şasilerde olduğu gibi, çözümlenen marka ve model katalogda yoktur. Çözümlenen alanları yine de gösterebilirsiniz. Bunları görselsiz gösterin ve asla yerine benzer bir araç koymayın.
Adım 3: hasar dosyası ve teklif PDF'i için tek görünüm
Teklif ekranı, hasar çalışma alanı ve poliçe portalı tarayıcı uygulamalarıdır; bu nedenle sunucunuz imzalı URL'leri POST /api/v1/image-urls ile üretir: her URL, üretildiği anda görselini ayın araç görseli olarak sayar, çağrı başına en fazla 50 URL üretilebilir ve süresi dolana kadar yüklemek ücretsizdir. Görseli bir kez çerçeveleyin ve aynı şekli yeniden kullanın: 640×400 kutuda fit: "contain" ile front-3-4 ve bir coupe ile bir pikabın kutuyu aynı şekilde doldurması için biraz padding ile trim. Her URL'nin ne kadar süre geçerli olacağı, nerede gösterildiğine bağlıdır:
- Hasar iş ekranı. URL'yi ekran çizildiğinde oluşturun. 1 saatlik varsayılan geçerlilik süresi bir çalışma oturumunu kapsar; yarın yeniden açılan bir hasar dosyası yeni bir URL alır.
- Teklif PDF'i. PDF HTML'den oluşturulduğunda, oluşturucu görseli bir kez yükleyip gömer; bu nedenle varsayılan geçerlilik süresi fazlasıyla yeterlidir ve PDF hizmeti anahtarınızı hiçbir zaman tutmaz.
format: "jpg"görseli beyaz zemin üzerine düzleştirir; bir belge için istenen de budur. - Poliçe portalı ve yenileme e-postası. Bunlar herhangi bir geçerlilik süresinden daha uzun süre kullanılır; bu yüzden
renew: truevettl_seconds: 604800(7 gün) ile oluşturun. URL çalışmaya devam eder; bir yenileme, görseli denk geldiği ayda bir kez sayar, o ay zaten sayılmışsa hiçbir şey eklemez; izin verilen en uzun değer olanrenew_days: 365ise bir yıllık poliçe dönemini kapsar.
URL'leri üreten anahtara panelde izin verilen kaynakların (origin) bir listesini tanımlayın: başka bir siteden yüklenen URL 403 ve origin_not_allowed ile yanıt verir; Referer göndermeyen e-posta istemcileri ve PDF görüntüleyiciler ise onu yüklemeye devam eder. Anahtarı iptal etmek, ürettiği tüm URL'leri geçersiz kılar.
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` }
);
}4. Adım: sigortalı araç olarak değil, model olarak etiketleyin
Etiketi yalnızca bir dipnota değil, görselin bulunduğu yere koyun: alt metne ve görselin altındaki açıklamaya. Render, seçtiğiniz bir boya renginde marka, model ve yılı gösterir; color poliçedeki rengi izleyebilir (hazır bir renk adı veya herhangi bir hex kodu). Yine de bu, müşterinin aracı değil, o renkteki modeldir.
<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>Maliyeti ve size uygun plan
- Ücretsiz: VIN çözümleme, resolve, katalog sorguları ve imzalı bir URL'nin geçerlilik süresi içindeki her yüklenmesi.
- Tek araç görseli: her boya ve görünümdeki her araç, herhangi bir boyut ve formatta ne sıklıkla teslim edilirse, üretilirse veya yenilenirse yenilensin ayda bir kez sayılır.
- Aylık araç görselleri: bir teklif hunisi birçok farklı araç görür ve her plan ayda belirli sayıda araç görseli içerir: Ücretsiz 100, Pro 2.500 ve Business 10.000; Enterprise için pazarlık yapılır. Bu ay zaten sayılmış bir görsel her zaman sunulur ve kotayı aşan bir istek, hiçbir şey sayılmadan önce 402 ile yanıtlanır; bu yüzden planı teklif verdiğiniz araçlara göre seçin.
Ücretli bir planda lisans, plan aktif olduğu sürece ürününüzün kullanıcıları için ürettiği içeriklerdeki (teklif veya rapor dahil) bir render'ı kapsar; ayrıntılar lisansta yer alır.
CLI, SDK ve MCP
# 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: yukarıdaki gibi
client.decodeVin(vin, { year? })veclient.createImageUrls(…); VIN'i olmayan bir araç içinclient.resolve(query). - MCP:
decode_vinvecreate_car_image_urlsçekirdek araç setinde yer alır; böylece bağlamında hasar dosyası bulunan bir asistan, kayıtlı VIN'den yola çıkarak "sigortalı modeli göster" isteğini yanıtlayabilir. Kurulum MCP sayfasında anlatılır.
Sıkça sorulan sorular
- Görsel, sigortalı aracın fotoğraflarının yerine geçebilir mi?
- Hayır. Bu, katalogdaki marka, model ve yılın bir stüdyo görselidir; fotoğraf değildir ve belirli bir aracı göstermez. Müşterinin ya da eksperin, kaydın doğru türde bir aracı belirttiğini görmesine yardımcı olur. Durum, hasar, donanım, opsiyonlar ve modifikasyonlar fotoğraflardan, ekspertizlerden ve çözümlenmiş metinden gelir; görselin temsili olduğu da belirtilmelidir.
- Her teklifte bir görselin maliyeti nedir?
- VIN çözümleme ücretsizdir. Görsel, imzalı URL'si oluşturulduğunda veya baytları sunucunuza teslim edildiğinde ayın bir araç görseli olarak sayılır ve ardından gerektiği kadar sık sunulur; imzalı bir URL'yi yüklemek, süresi dolana kadar ücretsizdir. Yenilenen bir URL, görseli sonraki her ayda açıldığı takdirde bir kez sayar; kimsenin bakmadığı aylarda hiçbir şey saymaz.
- VIN çözümleniyor ancak vehicle null dönüyor. Şimdi ne yapmalı?
- Çözümleyici aracı tanıdı ancak katalogda bu marka, model ve yıl için bir kayıt yok; bu durum römorklarda ve bazı ticari şasilerde görülür. Çözümlenen alanları görselsiz gösterin ve asla benzer bir araçla değiştirmeyin. Yazım farklı olabileceği için kataloğu arayın; gerçekten eksikse herkese açık talep panosunda isteyin.
- VIN çözümleme, ABD pazarı dışındaki araçlar için de çalışır mı?
- Kod çözücü, NHTSA'nın vPIC verilerini kullanır ve bu veriler ABD pazarı için üretilmiş araçları kapsar. Bu nedenle başka bir pazara ait, doğru yazılmış bir VIN 404 yanıtı verebilir ya da model bilgisi olmadan çözümlenebilir. Bu durumda aracı ücretsiz resolve uç noktasıyla marka, model ve yıla göre bulun; katalog, diğer pazarların model adlarını da kapsar.
- Bir hasar dosyası görseli ne kadar süre saklayabilir?
- Planınız etkin olduğu sürece. Ücretli bir planda lisans, ürününüzün ürettiği içeriklerdeki (teklif veya rapor dahil) bir render'ı kapsar; plan sona erdikten sonraki 30 gün içinde saklanan kopyalar silinir. Görselleri kayıtlarda kalıcı olarak tutmak için bunları Görsel Paketi olarak satın alın. Render'lar zamanla iyileştirilebilir; bu nedenle müşterinin tam olarak gördüğünü koruması gereken bir kayıt, URL yerine dosyanın kendisini saklamalıdır.