Most CarsXE APIs bill **per successful call**. A few bill per returned result or per item in the request. This page covers the result-based exceptions and points bulk VIN jobs to their own docs.

---

## Default: per successful call

A typical successful call (`success: true`) is billed as one call. Failed or empty lookups (`success: false`, `404 no_data`, validation `400`) are free.

This is **not** true of every endpoint:

- **Per result** — Ownership (below) and YMM Options bulk variants (below).
- **Per VIN in the request** — [Recalls Batch](/docs/v1/recalls-batch) and VINs Batch. See those product docs; a 500-VIN submit is 500 units, not 1.

---

## Ownership — per returned record

All five Ownership lookups (VIN, Person, Address, Phone, ZIP) bill per **record** returned, not per request.

- Zero records → `404 no_data` → **free**.
- *N* records in the response (`owners` / `matches` / `records`) → **N billable units**.

Example: a VIN lookup that returns 3 owners bills 3 units. A ZIP page with 40 records bills 40.

See [Ownership docs](/docs/v1/ownership) for details on each lookup type.

---

## YMM Options — bulk variants bill per model

Most YMM Options requests are billed per successful call, like any other API.

The exception is the **bulk variant list**: `dimension=variants` with `year` + `make` and **no `model`**. That request bills **per distinct model** in the response. `modelCount` is the billed quantity, with a **minimum of 1** even when `modelCount` is 0.

Example: 82 variant strings across 12 models → `modelCount: 12` → **12 billable units**.

See [YMM Options docs](/docs/v1/ymm-options) for full parameter reference.
