API のドキュメントに記載された動作に基づいて作成した構築ガイドです。特定の顧客名は挙げていません。 公開。
課題:オファーは正確でも、画像はそうではない
リースのオファーは具体的です。1 つのモデルイヤー、月額の算出根拠となるグレード、メーカーの現行カラーパレットにある塗装色、期日まで有効な月額料金。ところが、その横に並ぶ写真はそうでないことがよくあります。昨年のプレス写真、もう設定のない色、別のボディ形状。支払額が正確で写真がおおよそなら、顧客が疑問を抱くのは写真のほうです。
その後、同じオファーがさまざまな場所で使われます。車種ページ、見積もり PDF、メール、そしてお客様が車を回転させて見られるコンフィギュレーターです。いずれも、同じ塗装色の同じ車両が必要です。
連携の全体像
- モデルイヤーごとに1つのオファー。その年のカタログ車両IDをキーにします。
- メーカーの塗装色をhexで指定し、オファーのすべての画像に適用します。
- 見積もり PDF とメールに同じ画像を署名付き URL で表示するため、ドキュメントやレンダラーがキーを保持することはありません。
- コンフィギュレーター用の塗装色ごとの 3D モデルを、2 行の埋め込みコードとして公開します。
ステップ1:各オファーをその年式の車両 ID に紐付ける
GET /api/v1/vehicles?make=&model= は無料の公開エンドポイントで、モデルの全年式をそれぞれの固定の車両IDとともに一覧表示します。オファー対象の年式のIDをオファーと一緒に保存してください。
curl -s "https://carimage.dev/api/v1/vehicles?make=honda&model=cr-v"{
"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"
}
]
}
}2027 年モデルのオファーが公開されると、それらには 2027 年の ID が使われ、2026 年のオファーは元の ID のままです。ID は変わらないため、その ID で作成したページや見積もりはモデルイヤーが切り替わった後も機能し続けます。カタログはメーカー、モデル、年式をキーとしているため、支払額の見積もり対象となるトリム(EX-L、Sport Touring など)はオファー上のテキストであり、画像が示すものではありません。
ステップ2:メーカー純正の塗装色をhexで指定
15 種類のプリセットで一般的なカラーをカバーできますが、オファーには実際に提供されているカラーが必要です。メーカーのカラーチップから 16 進カラーコードを取得し、URL ではそのまま(color=1f3a5f)、JSON では # 付きで("color": "#1f3a5f")送信します。16 進コードの料金はプリセットと同じ 1 クレジット です。すべてのカラーは 1 枚のニュートラルなレンダリングを再着色したものだからです。また、プリセットの色見本と一致する 16 進コードはそのプリセットとして扱われ、キャッシュも 1 回だけです。
# 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ステップ3:署名付きURLで見積もりPDFとオファーメールに掲載
見積もりPDFは通常、PDFサービスやヘッドレスブラウザでレンダリングしたHTMLです。テンプレートにはキーではなく、POST /api/v1/image-urls で発行した署名付きURLを入れてください。レンダラーは画像を一度読み込んで埋め込むため、デフォルトの有効期間1時間で十分です。また、format: "jpg" を指定すると白背景に合成され、文書に適した形になります。URLは発行時に1クレジットを消費します。
オファーメールは顧客の都合のよいときに開封されます。その画像は renew: true と最大の 7 日の ttl_seconds で発行し、renew_days をオファーの残り日数に設定してください。メールが開かれた週ごとに追加で 1 クレジットかかり、開かれない週は費用がかからず、オファー終了時に URL の更新が止まって失効します。有料プランでは、ライセンスにより、見積書を含め、お客様の製品が顧客向けに作成するものの中でレンダリング画像を使用できます。
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`,
}
);ステップ4:コンフィギュレーター用の3Dモデル
POST /api/v1/3d にオファーの車両 ID、そのカラー、publish: true を指定すると、テクスチャ付きモデル(GLB、USDZ、FBX、ブラウザ用ビルド)が生成され、2 行の埋め込みコード付きでキー不要の URL が発行されます。料金は車両とカラーごとに 100 クレジット($1.00)で、課金は 1 回のみです。同じアカウントから同じ車両を同じカラーで再度注文する場合は無料です。車両の最初のモデルには 10–20 minutes かかり、以降のカラーはそのメッシュを再利用するため 1–2 minutes で完成します。
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}'{
"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
}
}GET /api/v1/3d/{id} をポーリングするか(10〜15 秒ごとで十分です)、webhook_secret とともに webhook_url を渡し、モデルの準備ができたときに署名付き POST を1回受け取ります。data.public.embed.html はスクリプトと <car-3d> 要素で構成されており、オファーページに貼り付けてください。この要素はすぐにポスター画像を表示し、モデルが初めてスクロールで表示領域に入ったときにビューアーを読み込みます。view、spin、backdrop、ar、alt で、初期アングル、ターンテーブル、背景、スマートフォンでの AR ボタン(iOS では USDZ による Quick Look)、代替テキストを設定します。公開と毎回の読み込みは無料です。
<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>CLI、SDK、MCP
- CLI:
npx @meterapp/car-image 3d create --vehicle veh_b6kgpb03d73r9 --color "#1f3a5f" --publish --waitは塗装色を指定してリクエストし、完了を待って埋め込みコードを出力します。 - SDK:
client.vehicles({ make, model })、client.createImageUrls(…)、client.create3dModel({ vehicle }, { color, publish: true })、client.wait3dModel(id)。 - MCP:
?toolset=allを指定すると、create_3d_model、get_3d_model、publish_3d_modelにより、アシスタントが営業担当者のためにペイントカラーを注文・公開できます。設定方法はMCPページをご覧ください。
よくある質問
- 画像には、支払額の算出に使ったトリムが表示されますか?
- いいえ。カタログはメーカー、モデル、年式をキーとしているため、同じ年式のグレードはすべて同じ車両としてレンダリングされます。グレードはオファーの本文で画像の横に記載し、画像をそのグレードや在庫車として説明しないでください。
- メーカー純正の塗装色は、プリセットより料金が高くなりますか?
- いいえ。すべての塗装色は1つのニュートラルなレンダリングを再着色したものなので、hex は 15 種類のプリセットと同じく 1 クレジット で、プリセットの色見本と一致する hex はそのプリセットと同じものです。hex はスタジオ照明下でその正確な sRGB 値として適用されるため、オファーを公開する前にレンダリングとカラーチップを見比べてください。
- 4 色のコンフィギュレーターの費用はいくらですか?
- 400 クレジットを一度だけ:車両の塗装色ごとに 100 クレジットです。アカウントですでに保有している車両と塗装色を再度注文しても無料です(billing.already_owned が true)。公開、ポーリング、ダウンロード、公開済みモデルの読み込みもすべて無料です。
- 3D モデルの生成にはどれくらい時間がかかりますか?失敗した場合はどうなりますか?
- 車両の最初のモデルには 10–20 minutes かかり、同じ車両の以降のカラーはメッシュを再利用するため 1–2 minutes で完成します。生成に失敗したモデルは全額返金されます。また、3D 生成が 1 日の処理上限に達している場合は、課金前にリクエストが拒否され、再試行可能な時刻が返されます。
- オファー終了後も、見積もりPDFに画像を残せますか?
- はい。有料プランでは、見積書やパンフレットを含め、貴社製品がお客様向けに生成するものの中でレンダリング画像を使用することがライセンスの対象となります。また、プラン期間中に提供されたレンダリング画像はプラン終了後もそのライセンスが維持されるため、保存済みの見積書から画像が失われることはありません。新しいオファーのレンダリング画像を作成するには、その時点で有効なプランが必要です。