Car Image API

使用场景 · 汽车租赁

用于租赁报价和方案的汽车图片

按车型年份渲染每个租赁报价,并以 hex 值精确指定车漆颜色;通过签名 URL 将图片放入报价 PDF,并在配置器中嵌入 3D 模型。

依据 API 文档所述行为编写的构建指南,不涉及任何具体客户。 发布于 。

问题所在:报价是精确的,图片却不是

租赁报价是具体的:一个车型年份、月供所依据的配置、制造商当前色板中的一种车漆颜色,以及在某个日期前有效的月付金额。而旁边的图片往往并不具体:去年的新闻图片、该车已不再提供的颜色,甚至是不同的车身。当月供精确而图片只是近似时,客户质疑的便是图片。

同一份报价随后会出现在多个地方:车型页面、报价 PDF、电子邮件,以及客户可以旋转查看车辆的配置器。每个地方都需要同一辆车、同一种漆色。

集成方式一览

  • 每个车型年份对应一个报价,以该年份的目录车辆 id 作为键。
  • 厂商原厂漆色的十六进制色值,应用于该方案的每张图片。
  • 报价 PDF 和电子邮件中使用同一张图片,通过签名 URL 提供,因此任何文档或渲染器都无需持有密钥。
  • 每种车漆一个 3D 模型,用于配置器,以两行嵌入代码发布。

第 1 步:以车型年款的车辆 id 作为每个租赁方案的键

GET /api/v1/vehicles?make=&model= 免费且公开,会列出某车型的所有年款,每个年款都有稳定的车辆 ID。请将方案所对应车型年款的 ID 与该租赁方案一同保存。

某一车型的所有年款
curl -s "https://carimage.dev/api/v1/vehicles?make=honda&model=cr-v"
200 OK(已精简)
{
  "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 永不改变,因此基于它构建的页面或报价在车型年款更替后仍能正常使用。目录以品牌、车型和年份为键,因此月供报价所依据的配置(如 EX-L、Sport Touring)是方案上的文字,绝不由图片来体现。

第 2 步:按十六进制值使用厂商原厂漆色

15 种预设涵盖常见颜色;但方案需要的是车辆实际提供的车漆。从制造商色卡获取十六进制值,在 URL 中直接发送(color=1f3a5f),或在 JSON 中带上 # 发送("color": "#1f3a5f")。十六进制颜色与预设计数相同,均为一张车辆图片,因为每种车漆都是对同一个已准备视角的重新着色;与某预设色样相同的十六进制颜色即视为该预设,只缓存一次。

优惠方案的配图
# 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 在生成时即将其图片计为本月的一张车辆图片。

报价邮件会在客户方便时才被打开。为其图片生成签名 URL 时,请使用 renew: true,并将 ttl_seconds 设为最长的 7 天,同时将 renew_days 设为报价剩余的天数:续期会在其发生的月份将图片计入一次,若该月已计入则不再重复计数,无人打开的几周不计数,报价结束后 URL 停止续期并过期。付费套餐的授权涵盖您的产品为客户生成的内容中的渲染图,包括报价单。

使用 TypeScript SDK 生成 PDF 和邮件
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 及浏览器版本),并为其提供无需密钥的 URL 和两行嵌入代码。每个车辆和颜色从套餐所含点数中扣除 100 点,仅收取一次;从您的账户再次订购相同车辆的相同车漆免费。某车辆的第一个模型需要 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}'
202 Accepted(已精简)
{
  "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_url 和 webhook_secret,在模型就绪时接收一次签名的 POST 请求。data.public.embed.html 包含脚本和一个 <car-3d> 元素:请将其粘贴到优惠方案页面中。该元素会立即显示封面图,并在模型首次滚动进入视口时加载查看器;view、spin、backdrop、ar 和 alt 分别用于设置初始角度、转台旋转、背景、手机上的 AR 按钮(在 iOS 上通过 USDZ 使用 Quick Look)以及 alt 文本。发布和每次加载均免费。

基于已发布车型的车漆选择器
<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>

包含 4 种漆色的配置器就是 4 个模型,一次性消耗 400 个积分。通过 API 订购 3D 模型的车身改色和车窗贴膜店也采用相同方式;他们的案例介绍了文件和格式,3D 文档则涵盖 webhook、下载和取消发布。

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 页面。

常见问题

图片展示的是月供报价所对应的配置吗?
不会。目录以品牌、车型和年份为键,因此同一车型年款的所有配置都会渲染为同一辆车。请将配置写在优惠方案的文字中、图片旁边,切勿将图片描述为该配置或现车。
厂商原厂车漆色是否比预设颜色更贵?
不会。每种车漆都是对同一个已准备视角的重新着色,因此十六进制颜色与 15 种预设颜色中的任何一种一样,计为一张车辆图片;与某预设色样相同的十六进制颜色即视为该预设。十六进制颜色会在影棚灯光下按精确的 sRGB 值应用,因此请在方案上线前将渲染图与色卡进行比对。
提供 4 种车漆的配置器需要多少费用?
400 积分,一次性支付:该车辆每种车漆 100 积分。再次订购您账户已拥有的车辆和车漆免费(billing.already_owned 为 true),发布、轮询、下载以及已发布模型的每次加载也均免费。
生成一个 3D 模型需要多长时间?如果失败怎么办?
某车辆的首个模型需要 10–20 minutes;同一车辆的其他每种车漆会复用其 3D 网格,需要 1–2 minutes。生成失败的模型会全额退款;当 3D 生成达到每日容量上限时,请求会在扣费前被拒绝,并告知重试时间。
方案结束后,报价 PDF 还能保留图片吗?
可以。在付费套餐有效期间,许可涵盖您的产品为客户生成的内容中所使用的渲染图,包括报价单或宣传册;套餐结束后 30 天内,需删除已存储的副本。若需在存档报价中永久保留图片,可一次性购买图片包。

继续阅读

客户案例 · 汽车后市场如何在客户自己的车型上预览改色膜、车窗膜或隐形车衣(PPF)客户想看到的是改色膜贴在自己的车上,而不是别人的车上。门店会以白色渲染确切的车型年份,将膜材合成到车身上,按十六进制色值匹配车漆,并订购 3D 模型用于转台展示。