Car Image API
Documentation

Pricing & billing

Credits, packs, auto-reload and Stripe.

Plans

A plan carries the license to use renders and 3D models (commercial on a paid plan, evaluation on Free) and a monthly allowance of credits. Every plan gets the whole catalog, every view, any paint color and full quality; usage beyond the allowance is metered in the same credits at $1 per 100.

PlanPriceCreditsDistinct vehicles a monthLicenseRequests a minute per key
Free$0100 once, at signup100Evaluation and personal projects120
Pro$29 a month or $290 a year25,000 a month2,500Commercial; delivered renders keep it120
Business$99 a month or $990 a year150,000 a month15,000Commercial; delivered renders keep it600
EnterpriseCustomNegotiatedNo capCommercial, plus export or self-hosting by agreement1,200
  • Pro and Business are started from the dashboard through Stripe Checkout, monthly or yearly, and renew until cancelled. An upgrade takes effect at once and grants the difference in credits for the current month; a downgrade or a cancellation takes effect at the end of the period you paid for. Invoices and payment methods live in the Stripe customer portal.
  • Distinct vehicles are counted per calendar month (UTC). A make, model and year the account has already served this month is always allowed, so a cap never breaks a live product; a request that would add more new vehicles than the cap allows is refused with 402 and "code": "plan_vehicle_limit" before anything is charged.
  • Every plan also has a rate limit per account across all of its keys and a share of the daily render budget for cold renders; see Rate limits & caching. Business gets a priority share; Enterprise can reserve capacity.
  • Enterprise is a written agreement: negotiated volume, no vehicle cap, reserved capacity, custom limits, invoicing, an SLA and, if your product needs one, a bulk export or a copy of part of the catalog delivered as a set. Email support@carimage.dev.

Credits

Every successful image delivery costs 1 credit — cold or CDN hit, any size, any format, any paint color. A 3D model costs 100 credits ($1) once per vehicle and color. Included and purchased credits sit in one balance and are spent the same way:

  • Keyed image request → 1 credit on 200, presets and hex paints alike.
  • Make logo → 1 credit per successful delivery, including cached logos. No trademark license is granted.
  • Signed URL → 1 credit at creation; redemptions are free.
  • 304 Not Modified → free.
  • Failed render (502) → refunded.
  • 3D model → 100 credits at creation, cached or not, and 0 for a vehicle and color your account already owns; polling, file downloads, webhooks, publishing and every load of a published model are free; a failed model is refunded; a 503 at capacity charges nothing.
  • Search, resolve, vehicle lookups by id, VIN decoding, options, account, feedback → free.

Included and purchased credits

  • Included credits are granted at the start of each month of a paid plan (on a yearly plan too) and are spent first. Whatever is left when the month ends, or when the plan ends, expires.
  • Purchased credits (packs and auto-reload) never expire while the account exists, and are only touched once the month’s included credits are gone.
  • Free accounts get 100 credits once, at signup, with no card. They do not renew; for more, buy credits or pick a plan.

Extra credits

Every account, including Free, can buy credits at $1 per 100 credits, bought as a pack or by auto-reload. No subscription is required and there is no monthly purchase cap. Both add to your purchased credit bank, which never expires and is used after subscription credits.

PriceCredits
$1100
$5500
$101,000
$252,500
$10010,000

Packs are bought through Stripe Checkout from the dashboard; card details never touch our servers. Credits are added the moment Stripe confirms the payment.

Auto-reload. With a saved payment method you can enable auto-reload: whenever the balance drops below 100 credits we charge the card for 1,000 credits ($10). Attempts are rate-limited to one per ten minutes, and a failed charge turns auto-reload off and shows the reason in the dashboard. Auto-reload keeps agents running past the allowance without a human in the loop.

License

Renders and 3D models are licensed, not sold, and the license comes with the plan. A paid plan (Pro, Business, Enterprise) carries a commercial license: use them in any product you build, with no attribution, and keep copies on your own servers or CDN to serve that product. A render delivered on a paid plan keeps that license after the plan ends, inside the product it was delivered for; what ends with the plan is new renders, signed URLs, hosted delivery and re-renders. Free covers evaluating the API and personal projects, and a render is licensed by the plan in force when it is delivered. A bulk export or a copy of part of the catalog is an Enterprise agreement. The full text is in the terms; the help center answers the usual questions.

Billing from the API

Keys with billing:write (created through the CLI device flow) can create hosted Stripe pages. Creating a session never charges anyone — a human still completes the purchase in the browser. Plan changes and cancellation happen in the dashboard, not through the API.

POST/api/v1/billing/checkout
billing:writefree
ParameterTypeDescription
credits
100 | 500 | 1000 | 2500 | 10000
Which pack of extra credits to buy. Returns a hosted Checkout URL in 201. Send credits or plan, not both.
plan
pro | business
Start a plan instead of buying a pack: a hosted Checkout URL in subscription mode. The allowance is granted when the first invoice is paid.
interval
month | year
How often the plan bills. Only with plan.Default: month
bash
curl -X POST https://carimage.dev/api/v1/billing/checkout \
  -H "Authorization: Bearer $CAR_IMAGE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"plan": "pro", "interval": "month"}'
# or a pack of extra credits:
#   -d '{"credits": 10000}'
POST/api/v1/billing/portal
billing:writefree

Returns a Stripe Customer Portal URL for invoices and payment methods. Requires a previous purchase or an active paid plan.

Letting an agent pay

An agent can pay for Pro or Business, or for a renewal, with a one-time payment token from its platform: a Stripe Shared Payment Token (spt_…), minted from the buyer's card and capped by them. The agent never sends a card number, and any number that looks like one is refused. Two limits apply, and both must pass: the token's own cap, and the monthly agent spending limit you set in the dashboard's Let agents buy card, which also says which plans an agent may buy and which keys may pay (the billing:purchase scope, off by default, never on a connected app or a key with allowed origins). Only you raise the limit, signed in; an API key can only lower it. Without a limit, the agent gets a checkout link to hand you, as before.

Every agent charge emails you a receipt with the key, the amount and the limit left, and you can refund it from the card for 7 days. A token pays once, so a plan bought with one renews from a card you save in billing settings, or the agent pays the open renewal invoice with a fresh token.

POST/api/v1/billing/purchase
billing:purchasethe plan's price
bash
# Quote first: checks the limit and the token, writes nothing.
curl -X POST https://carimage.dev/api/v1/billing/purchase \
  -H "Authorization: Bearer $CAR_IMAGE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"plan": "pro", "payment": {"type": "shared_payment_token", "token": "spt_..."}, "max_amount": 2900, "dry_run": true}'
# Then buy with an Idempotency-Key; the same key again replays and never charges twice.
#   -H "Idempotency-Key: purchase-2026-10-17-pro"  and  "dry_run": false
POST/api/v1/billing/invoices/{id}/pay
billing:purchasethe invoice amount
GET/api/v1/billing/checkout/{session_id}
account:readfree
GET/api/v1/billing/agent-limit
account:readfree

Refusals carry code and checkout_url: no_mandate, mandate_exceeded, plan_not_allowed, payment_failed, requires_action (3D Secure, with the page the human finishes on), already_subscribed, price_changed (the price passed your max_amount) and the token checks. An agent paying in the browser instead, with an agent card or Link, polls GET /api/v1/billing/checkout/{session_id} until complete. MCP: purchase_plan, pay_invoice, checkout_status. CLI: car-image upgrade --plan pro --payment-token spt_… --max-amount 2900 --dry-run, car-image billing pay, car-image billing limit.

Watching the balance

X-Credits-Remaining is on every image response, and GET /api/v1/account returns the balance, auto-reload state, current prices and, as data.plan, the plan the account is on — free of charge. active says whether the license and allowance are in force right now (a plan whose renewal Stripe is still retrying stays active), allowance_period_end is when the included credits reset, and limits are the plan’s, with any written-agreement overrides applied. limits.vehicles_per_term, a cap on distinct vehicles over a written Enterprise agreement’s whole term, is null on every self-serve plan.

data.plan
{
  "code": "pro",
  "name": "Pro",
  "status": "active",
  "active": true,
  "provider": "stripe",
  "interval": "month",
  "current_period_start": "2026-09-17T09:00:00Z",
  "current_period_end": "2026-10-17T09:00:00Z",
  "cancel_at_period_end": false,
  "included_credits": 25000,
  "allowance_granted_at": "2026-09-17T09:00:00Z",
  "allowance_period_end": "2026-10-17T09:00:00Z",
  "license": "commercial",
  "limits": {
    "rate_limit_per_minute": 120,
    "account_rate_limit_per_minute": 600,
    "vehicles_per_month": 2500,
    "vehicles_per_term": null,
    "generation_share_pct": 10,
    "max_keys": 10
  }
}