# Documentation > Welcome to CarsXE API's documentation. Source: https://carsxe.com/docs Learn everything there is to know about CarsXE API and integrate CarsXE into your product. #### Getting started To get started, [sign in or create an account](https://carsxe.com/signin) and grab an API key, then read about how to make requests for the resources you need to access using our HTTP APIs. ## Guides
### Quickstart Get a quick start integrating the API into your application. ### Authentication Learn how to authenticate your API requests. ### Organizations Share API access with your team using roles and organization API keys. ### Errors Read about the different types of errors returned by the API. ### Industry Guides Discover best practices and step-by-step examples for leveraging the CarsXE API across different industries. ### Agents & AI Get an API key, read docs, and make calls — all from inside your AI agent. ### Latency & Regions Learn about API regions and how to reduce latency from Europe using the EU endpoint.
## API Reference Select a resource to learn more about it.
### Specifications Learn about the Vehicle Specifications API and how to retrieve vehicle specifications from VINs. ### Plate Decoder Learn about the Vehicle Plate Decoder API and how to retrieve vehicle specifications from license plates and vehicle registrations. ### Images Learn about the Vehicle Images API and how to retrieve vehicle images. ### Market Value Learn about the Market Value API and how to retrieve vehicle market values from VINs. ### International VIN Decoder Learn about the International VIN Decoder API and how to retrieve vehicle specifications from international VINs. ### Recalls Learn about the Vehicle Recalls API and how to search for safety recalls based on a vehicle's VIN. ### History Learn about the Vehicle History API and how to retrieve vehicle history reports from VINs. ### VIN OCR Learn about the VIN Optical Character Recognition API and how to quickly identify a vehicle's VIN from an image. ### Market Value (v1) Learn about the v1 Market Value API and how to retrieve vehicle market value estimates from VINs. ### Lien & Theft Learn about the Lien & Theft API and how to check for active liens and theft records on a vehicle. ### Recalls Batch Learn about the Recalls Batch API and how to search safety recalls for many VINs in a single request. ### Plate Image Recognition Learn about the Plate Image Recognition API and how to detect and read license plates from image URLs. ### Year Make Model Learn about the Year Make Model API and how to look up vehicle attributes by year, make, model, and trim. ### OBD Codes Decoder Learn about the OBD Codes Decoder API and how to decode OBD-II diagnostic trouble codes.
--- # Agents & AI > Everything you need to use CarsXE vehicle data APIs from AI coding agents, LLMs, and automated pipelines — including browser-based onboarding, machine-readable documentation, and content negotiation. Source: https://carsxe.com/docs/agents CarsXE is built to be agent-friendly. Whether you are a coding agent onboarding a new project, an LLM reasoning about vehicle data, or an automation pipeline calling REST endpoints, this page covers the features we ship specifically for AI and agent use cases. --- ## Browser-based agent onboarding Getting a CarsXE API key from inside any AI agent — Claude Code, Claude Desktop, Cursor, Codex CLI, Gemini CLI, or any other coding assistant — takes just a few steps with no CLI install required. The agent directs you to a browser page, waits for you to authorize, then retrieves and stores your key automatically. The complete machine-readable skill document for agents is available at `https://carsxe.com/agent-onboarding/SKILL.md`. Agents that support skill discovery (such as Claude Code) will pick this up automatically. ### Step 1 — Give your agent the onboarding skill Pass the skill document URL to your agent so it knows exactly how to authenticate: > "Use this skill to get a CarsXE API key: https://carsxe.com/agent-onboarding/SKILL.md" The agent fetches the skill, generates secure session parameters, then presents you with a clickable link to open in your browser. ### Step 2 — Authorize in the browser Click the link the agent provides. You will be taken to the CarsXE authorization page where you can sign in or create an account and approve access. No typing required — just click **Authorize**. ### Step 3 — Your agent retrieves the key Once you click Authorize, the agent polls in the background and retrieves your API key. It stores it automatically (typically as `CARSXE_API_KEY` in your environment or project `.env` file). ### Step 4 — Start making calls Your agent can immediately start making vehicle data calls on your behalf: > "Decode VIN WBAFR7C57CC811956" > "What is the market value of this vehicle with 50,000 miles?" > "Check for any open recalls." --- ## Machine-readable documentation (`Accept: text/markdown`) CarsXE documentation pages support HTTP content negotiation. Send `Accept: text/markdown` on any documentation, support, or guide page to receive clean Markdown instead of HTML — fewer tokens, no layout markup, and higher signal for RAG pipelines and LLM context windows. ### How to use it ```bash # Any docs page as Markdown curl -H "Accept: text/markdown" https://carsxe.com/docs/quickstart # Specific API reference page curl -H "Accept: text/markdown" https://carsxe.com/docs/v1/specifications # Direct Markdown endpoint — no content negotiation needed curl https://carsxe.com/api/markdown/docs/v1/specifications ``` ### Supported content types The site produces two content types: | Type | Description | | --------------- | ------------------------------------------------ | | `text/html` | Default browser response | | `text/markdown` | Clean Markdown — no layout, no navigation chrome | If the `Accept` header explicitly excludes both (for example `Accept: application/pdf`), the server returns `406 Not Acceptable` with a plain-text body listing the available types. ### The `Vary: Accept` header All responses include `Vary: Accept` so HTTP caches store separate entries for the HTML and Markdown representations of the same URL. ### The `Link: rel="alternate"` header HTML responses on documentation, support, and guide pages include a `Link` header advertising the direct Markdown URL. Agents that inspect response headers can discover the Markdown endpoint without making a second request. ```bash Link: ; rel="alternate"; type="text/markdown" Vary: Accept ``` ### Direct Markdown endpoint The `/api/markdown/[[...slug]]` route serves `text/markdown` unconditionally — no `Accept` header required. Use it when you want to hard-code the Markdown URL in a retrieval pipeline or a prompt template. ```bash curl https://carsxe.com/api/markdown/docs/quickstart curl https://carsxe.com/api/markdown/docs/authentication curl https://carsxe.com/api/markdown/docs/v1/specifications curl https://carsxe.com/api/markdown/docs/v2/market-value curl https://carsxe.com/api/markdown/support/ARTICLE_SLUG curl https://carsxe.com/api/markdown/guides/GUIDE_SLUG ``` Responses include `Cache-Control: s-maxage=300, stale-while-revalidate=86400` and `Vary: Accept`. --- ## Site index for LLMs (`llms.txt`) The site exposes a machine-readable index at `/llms.txt`. This document provides a plain-text overview of CarsXE for language models — product description, all API endpoints with pricing, subscription tiers, quick links, and recent blog posts. It is generated on each request with live pricing data so models always see current overage rates and tier names. ```bash curl https://carsxe.com/llms.txt ``` --- ## Making API calls from an agent All endpoints accept `key=YOUR_API_KEY` as a query parameter — the same environment variable the onboarding flow stores. POST endpoints also send the body as JSON with `Content-Type: application/json`. ### Vehicle Specifications (VIN Decode) Decode a VIN and retrieve full vehicle specifications: make, model, year, engine, trim, equipment, and more. See [full reference](https://carsxe.com/docs/v1/specifications). ```bash curl -G https://api.carsxe.com/specs \ -d key=YOUR_API_KEY \ -d vin=WBAFR7C57CC811956 ``` ### Market Value Estimate retail, trade-in, and auction values for a vehicle by VIN, with optional mileage, state, and condition adjustments. See [full reference](https://carsxe.com/docs/v2/market-value). ```bash curl -G https://api.carsxe.com/v2/marketvalue \ -d key=YOUR_API_KEY \ -d vin=WBAFR7C57CC811956 \ -d mileage=50000 \ -d state=CA \ -d condition=clean ``` ### Vehicle History Retrieve a comprehensive history report including title records, junk/salvage events, and insurance information for a VIN. See [full reference](https://carsxe.com/docs/v1/history). ```bash curl -G https://api.carsxe.com/history \ -d key=YOUR_API_KEY \ -d vin=WBAFR7C57CC811956 ``` ### Vehicle Recalls Check for open safety recalls associated with a VIN. See [full reference](https://carsxe.com/docs/v1/vehicle-recalls). ```bash curl -G https://api.carsxe.com/v1/recalls \ -d key=YOUR_API_KEY \ -d vin=WBAFR7C57CC811956 ``` ### Lien & Theft Check Check whether a vehicle has active liens or has been reported stolen. See [full reference](https://carsxe.com/docs/v1/lien-theft). ```bash curl -G https://api.carsxe.com/v1/lien-theft \ -d key=YOUR_API_KEY \ -d vin=WBAFR7C57CC811956 ``` ### Plate Decoder Look up a vehicle by license plate number. Supports 50+ countries. See [full reference](https://carsxe.com/docs/v2/plate-decoder). ```bash curl -G https://api.carsxe.com/v2/platedecoder \ -d key=YOUR_API_KEY \ -d plate=7XER187 \ -d country=US \ -d state=CA ``` ### International VIN Decoder Decode a non-US VIN from European, Asian, and other markets. See [full reference](https://carsxe.com/docs/v1/international-vin-decoder). ```bash curl -G https://api.carsxe.com/v1/international-vin-decoder \ -d key=YOUR_API_KEY \ -d vin=WF0MXXGBWM8R43240 ``` ### Vehicle Images Retrieve vehicle photos by make, model, and year. Supports filtering by color, angle, photo type, and size. See [full reference](https://carsxe.com/docs/v1/images). ```bash curl -G https://api.carsxe.com/images \ -d key=YOUR_API_KEY \ -d make=BMW \ -d model=5-Series \ -d year=2012 ``` ### Year / Make / Model Look up vehicle data when you don't have a VIN — search by year, make, and model instead. See [full reference](https://carsxe.com/docs/v1/year-make-model). ```bash curl -G https://api.carsxe.com/v1/ymm \ -d key=YOUR_API_KEY \ -d year=2012 \ -d make=BMW \ -d model=5-Series ``` ### Plate Image Recognition Extract and decode a license plate number from an image URL. See [full reference](https://carsxe.com/docs/v1/plate-image-recognition). ```bash curl -X POST "https://api.carsxe.com/platerecognition?key=YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"image_url": "https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public"}' ``` ### VIN OCR Extract a VIN from a photo of a VIN plate or dashboard sticker. See [full reference](https://carsxe.com/docs/v1/vin-ocr). ```bash curl -X POST "https://api.carsxe.com/v1/vinocr?key=YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"image_url": "https://user-images.githubusercontent.com/5663423/30922082-64edb4fa-a3a8-11e7-873e-3fbcdce8ea3a.png"}' ``` ### OBD Codes Decoder Decode a diagnostic trouble code (DTC) from an OBD-II scanner — over 3,000 codes supported. See [full reference](https://carsxe.com/docs/v1/obd-codes-decoder). ```bash curl -G https://api.carsxe.com/obdcodesdecoder \ -d key=YOUR_API_KEY \ -d code=P0300 ``` --- ## MCP server for AI tools For interactive AI editors and chat clients (Claude Desktop, Cursor, VS Code, Windsurf), the CarsXE MCP server is the recommended integration path — it exposes all endpoints as named tools and formats responses as Markdown automatically. See the [MCP Quickstart Guide](https://carsxe.com/docs/integrations/mcp-quickstart) for installation instructions for each editor. --- ## What's next? - [Agent onboarding skill document](https://carsxe.com/agent-onboarding/SKILL.md) — machine-readable PKCE auth flow - [llms.txt](https://carsxe.com/llms.txt) — full site index for LLMs - [MCP Quickstart](https://carsxe.com/docs/integrations/mcp-quickstart) — MCP server for Claude, Cursor, VS Code, Windsurf - [Claude Code Plugin](https://carsxe.com/docs/integrations/claude-quickstart) — slash commands and auto-invoked skills - [CLI Quickstart](https://carsxe.com/docs/integrations/cli-quickstart) — terminal tool for agent-driven shell workflows - [Authentication](https://carsxe.com/docs/authentication) — API key management - [Quickstart](https://carsxe.com/docs/quickstart) — first API call walkthrough --- # Authentication > In this guide, we’ll look at how authentication works. CarsXE offers one way to authenticate your API requests, Basic authentication. Source: https://carsxe.com/docs/authentication You'll need to authenticate your requests to access any of the CarsXE API endpoints. In this guide, we'll look at how authentication works. CarsXE offers a very simple way to authenticate with an API key. You can find your API key on the [dashboard](https://carsxe.com/dashboard). ## API key With basic authentication, you use your API key to authenticate your HTTP requests. Here's how to authenticate using cURL: ```bash curl https://api.carsxe.com/v1/auth/validate \ -d key=CARSXE_API_KEY \ ``` Please don't commit your CarsXE API key to GitHub! --- # Errors > Every error the CarsXE API returns — what it means, why it happened, and how to fix it. Includes the error envelope, status codes, and retry guidance. Source: https://carsxe.com/docs/errors This page is a complete reference for every error the CarsXE API can return. Each entry explains **why the error happened** and **how to fix it**, so you can resolve most issues without contacting support. You can tell whether a request succeeded from the HTTP status code. Every response body also includes a `success` boolean, so you can check either one. --- ## The error envelope All errors share the same JSON shape: Always false for errors. Successful responses return true. A human-readable description of what went wrong. Messages are stable strings — you can match on them — but prefer matching on the HTTP status code where possible. Present only on 429 quota errors. Contains current, limit, and remaining so you can see exactly where you stand. See [Rate Limits & Quotas](https://carsxe.com/docs/rate-limits). A few legacy v1 routes return a 500 status for validation problems (for example, a missing make/model on the Images API). Always check the success field in addition to the status code when working with v1 endpoints. v2 endpoints use precise status codes throughout. --- ## Status codes | Status | Meaning | Safe to retry? | | --- | --- | --- | | `200` | Success. | — | | `202` | Accepted — an async job (e.g. [Recalls Batch](https://carsxe.com/docs/v1/recalls-batch)) was queued. Poll its status endpoint. | — | | `400` | Bad request — a parameter is missing or invalid. | No — fix the request first. | | `401` | Authentication failed — missing, invalid, or inactive API key. | No — fix your key or billing. | | `403` | Forbidden — your key is blocked or your plan doesn't include this API. | No | | `404` | Not found — no data exists for this VIN/plate, or an invalid state/country code. | No — same input returns the same result. | | `405` | Method not allowed — e.g. `GET` sent to a `POST`-only endpoint. | No — change the HTTP method. | | `429` | Usage quota exceeded. | Not as-is — quota errors persist until you upgrade, enable overage, or the period resets. See [Rate Limits & Quotas](https://carsxe.com/docs/rate-limits). | | `500` | Internal server error. | Yes — once, with backoff. If persistent, contact support. | | `502` | Upstream data provider could not be reached. | Yes — with backoff. | | `503` | Upstream provider temporarily unavailable. | Yes — with backoff. | | `504` | Upstream request timed out. | Yes — with backoff. | --- ## Authentication errors | Message | Status | Why it happened | How to fix it | | --- | --- | --- | --- | | `Missing API key` | `401` | The request did not include the `key` parameter. | Pass your API key as the `key` query parameter on every request. See [Authentication](https://carsxe.com/docs/authentication). | | `User with this API key was not found or the API key is disabled` | `401` | The key has a typo, was revoked, or was disabled. | Copy the key again from your [dashboard](https://carsxe.com/dashboard). Check for whitespace or truncation. | | `User with this API key is not active. To activate update your billing on https://carsxe.com/dashboard/billing` | `401` | A payment failed or your billing is not in good standing, so API access was suspended. | Update your payment method on the [billing page](https://carsxe.com/dashboard/billing). Access resumes immediately after. | | `This API key has been blocked, please contact support if you believe this is an error.` | `403` | The key was flagged for abuse. | Contact support with your account email. | | `This API is not available for your current subscription tier. Visit https://carsxe.com/pricing to review upgrade options.` | `403` | Your plan does not include this endpoint. | Compare plans on the [pricing page](https://carsxe.com/pricing) and upgrade, or remove the call. | --- ## Validation errors These are returned before any lookup happens, so they don't count against your quota. Fix the request and resend. | Message | Status | How to fix it | | --- | --- | --- | | `Missing vin (vehicle identification number)` | `400` | Pass the `vin` parameter. | | `Wrong VIN length, must be 17 characters` | `400` | VINs are exactly 17 characters. Strip whitespace; check for `O`/`0` and `I`/`1` transcription mistakes. | | `Missing vehicle registration number or license plate number` | `400` | Pass the `plate` parameter. | | `Missing 2 letter state code` | `400` | Pass `state` as a 2-letter code (e.g. `CA`). Required for US plate lookups. | | `Invalid state or country code.` | `404` | Use ISO-style 2-letter codes. See the supported-country list on the [Plate Decoder page](https://carsxe.com/docs/v2/plate-decoder). | | `Invalid condition. Available conditions: excellent, clean, average, rough` | `400` | The `condition` parameter on [Market Value v2](https://carsxe.com/docs/v2/market-value) accepts only those four values. | | `Invalid mileage. Must be a number` | `400` | Pass `mileage` as digits only — no commas or units. | | `Missing image data` | `400` | VIN OCR and Plate Recognition need an image — pass a URL or base64 string. | | `Invalid image data format. Must be a valid URL or base64 encoded string.` | `400` | Check the URL is publicly reachable, or that the base64 payload is complete. | | `Please supply a make and model. Visit https://carsxe.com/docs for more information` | `500` | The Images API requires both `make` and `model`. (Legacy route — note the 500 status.) | The [Recalls Batch](https://carsxe.com/docs/v1/recalls-batch) endpoints have additional validation rules (VIN count, CSV size and hosting, webhook URLs) — those messages are self-describing and documented on the batch page. --- ## Data not found A `404` with one of these messages means the request was valid, but no data exists for that vehicle. Retrying the same input returns the same result. | Message | How to fix it | | --- | --- | | `No data found for this VIN` | Verify the VIN is correct. Coverage varies by market and model year. | | `No data found for this VIN. Try a deep search by setting deepdata=1 in your request` | Retry with `deepdata=1` on the [Specifications API](https://carsxe.com/docs/v1/specifications) for an extended-source lookup. | | `Plate searches for this country have been disabled, or No data found for this plate` | Check the plate and region. Some countries are unavailable; see the coverage list on the Plate Decoder page. | | `No lien or theft data found for this VIN` | No records exist — for many use cases this is the answer you want. | | `No images found` | Try a less specific query (drop `trim` or `color`). | | `No plates detected in image` | Use a sharper, better-lit image where the plate is clearly visible. | | `No valid VIN candidates found in the image` / `No text detected in the image` | Use a higher-resolution image of the VIN plate or windshield etching. | Not-found results for VIN lookups are cached for about one day. If you believe data should exist, wait before retrying rather than hammering the endpoint with the same VIN. --- ## Rate limit and quota errors A `429` means you've used up your plan's included volume for this API: See [Rate Limits & Quotas](https://carsxe.com/docs/rate-limits) for how limits work, the exact response shapes, and backoff strategies. --- ## Server and upstream errors CarsXE aggregates data from multiple providers. When a provider fails or times out, you'll see one of these: | Message | Status | What it means | What to do | | --- | --- | --- | --- | | `Internal server error` | `500` | An unhandled error on our side. | Retry once with backoff. If it persists, contact support with the endpoint, parameters, and timestamp. | | `Unable to authenticate internal request (code CV-001). Please try again later` | `500` | An internal provider credential issue — not your request. | Retry later. Quote the `CV-001` code to support if it persists. | | `Unable to authenticate internal request (code CV-002). Please try again later` | `500` | Same as above, for the History API. | Retry later. Quote `CV-002` to support. | | `Could not fetch data` | `502` | The upstream provider was unreachable or returned an error. | Retry with exponential backoff. | | `Cannot access the internet at this time` | `503` | The upstream provider is temporarily down. | Retry with backoff. | | `Request timed out. Please try again.` | `504` | The provider didn't respond in time. | Retry with backoff — these are usually transient. | --- ## Handling errors in code Check `response.ok` / the status code first, then branch on the category. Retry only `5xx` — a `4xx` (including quota `429`s, which persist until you upgrade or enable overage) needs a fix, not a retry: ```bash CARSXE_API_KEY="CARSXE_API_KEY" URL="https://api.carsxe.com/specs?key=${CARSXE_API_KEY}&vin=1HGCM82633A004352" retries=3 for attempt in $(seq 0 $retries); do response=$(curl -s -w "\n%{http_code}" "$URL") body=$(echo "$response" | sed '$d') status=$(echo "$response" | tail -n 1) if [ "$(echo "$body" | jq -r '.success')" = "true" ]; then echo "$body" exit 0 fi # 4xx: fix the request (or your quota) — retrying won't help if [ "$status" -lt 500 ]; then echo "CarsXE $status: $(echo "$body" | jq -r '.message')" >&2 exit 1 fi # 5xx: exponential backoff if [ "$attempt" -lt "$retries" ]; then sleep $((2 ** attempt)) fi done echo "CarsXE request failed after retries" >&2 exit 1 ``` ```js async function carsxeRequest(url, { retries = 3 } = {}) { for (let attempt = 0; attempt <= retries; attempt++) { const res = await fetch(url); const body = await res.json(); if (body.success) return body; // 4xx: fix the request (or your quota) — retrying won't help if (res.status < 500) { throw new Error(`CarsXE ${res.status}: ${body.message}`); } // 5xx: exponential backoff if (attempt < retries) { await new Promise((r) => setTimeout(r, 2 ** attempt * 1000)); } } throw new Error('CarsXE request failed after retries'); } ``` ```python import time import httpx def carsxe_request(url: str, params: dict, retries: int = 3) -> dict: for attempt in range(retries + 1): res = httpx.get(url, params=params) body = res.json() if body.get("success"): return body # 4xx: fix the request (or your quota) — retrying won't help if res.status_code < 500: raise RuntimeError(f"CarsXE {res.status_code}: {body['message']}") # 5xx: exponential backoff if attempt < retries: time.sleep(2 ** attempt) raise RuntimeError("CarsXE request failed after retries") ``` ```php get($path, ['query' => $query, 'http_errors' => false]); $body = json_decode((string) $res->getBody(), true); $status = $res->getStatusCode(); if ($body['success'] ?? false) { return $body; } // 4xx: fix the request (or your quota) — retrying won't help if ($status < 500) { throw new RuntimeException("CarsXE {$status}: {$body['message']}"); } // 5xx: exponential backoff if ($attempt < $retries) { sleep(2 ** $attempt); } } throw new RuntimeException('CarsXE request failed after retries'); } ``` ```ruby require 'json' require 'net/http' require 'uri' def carsxe_request(url, retries: 3) uri = URI(url) (0..retries).each do |attempt| res = Net::HTTP.get_response(uri) body = JSON.parse(res.body) return body if body['success'] # 4xx: fix the request (or your quota) — retrying won't help if res.code.to_i < 500 raise "CarsXE #{res.code}: #{body['message']}" end # 5xx: exponential backoff sleep(2**attempt) if attempt < retries end raise 'CarsXE request failed after retries' end ``` ```go package main import ( "encoding/json" "fmt" "io" "net/http" "time" ) func carsxeRequest(url string, retries int) (map[string]any, error) { for attempt := 0; attempt <= retries; attempt++ { res, err := http.Get(url) if err != nil { return nil, err } bodyBytes, _ := io.ReadAll(res.Body) res.Body.Close() var body map[string]any if err := json.Unmarshal(bodyBytes, &body); err != nil { return nil, err } if success, _ := body["success"].(bool); success { return body, nil } // 4xx: fix the request (or your quota) — retrying won't help if res.StatusCode < 500 { return nil, fmt.Errorf("CarsXE %d: %v", res.StatusCode, body["message"]) } // 5xx: exponential backoff if attempt < retries { time.Sleep(time.Duration(1< carsxeRequest(String url, int retries) throws Exception { HttpClient client = HttpClient.newBuilder() .connectTimeout(Duration.ofSeconds(10)) .build(); for (int attempt = 0; attempt <= retries; attempt++) { HttpRequest request = HttpRequest.newBuilder(URI.create(url)).GET().build(); HttpResponse res = client.send(request, HttpResponse.BodyHandlers.ofString()); Map body = MAPPER.readValue(res.body(), Map.class); if (Boolean.TRUE.equals(body.get("success"))) { return body; } // 4xx: fix the request (or your quota) — retrying won't help if (res.statusCode() < 500) { throw new RuntimeException("CarsXE " + res.statusCode() + ": " + body.get("message")); } // 5xx: exponential backoff if (attempt < retries) { Thread.sleep((long) Math.pow(2, attempt) * 1000); } } throw new RuntimeException("CarsXE request failed after retries"); } } ``` ```swift import Foundation func carsxeRequest(url: URL, retries: Int = 3) async throws -> [String: Any] { for attempt in 0...retries { let (data, response) = try await URLSession.shared.data(from: url) guard let http = response as? HTTPURLResponse else { throw URLError(.badServerResponse) } let body = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:] if body["success"] as? Bool == true { return body } // 4xx: fix the request (or your quota) — retrying won't help if http.statusCode < 500 { let message = body["message"] as? String ?? "Unknown error" throw NSError(domain: "CarsXE", code: http.statusCode, userInfo: [NSLocalizedDescriptionKey: "CarsXE \(http.statusCode): \(message)"]) } // 5xx: exponential backoff if attempt < retries { try await Task.sleep(nanoseconds: UInt64(pow(2.0, Double(attempt))) * 1_000_000_000) } } throw NSError(domain: "CarsXE", code: -1, userInfo: [NSLocalizedDescriptionKey: "CarsXE request failed after retries"]) } ``` ```csharp using System; using System.Net.Http; using System.Text.Json; using System.Threading.Tasks; class Program { static async Task CarsxeRequest(string url, int retries = 3) { using var client = new HttpClient(); for (int attempt = 0; attempt <= retries; attempt++) { var res = await client.GetAsync(url); var body = await res.Content.ReadAsStringAsync(); using var doc = JsonDocument.Parse(body); var root = doc.RootElement; if (root.GetProperty("success").GetBoolean()) { return JsonDocument.Parse(body); } // 4xx: fix the request (or your quota) — retrying won't help if ((int)res.StatusCode < 500) { var message = root.GetProperty("message").GetString(); throw new Exception($"CarsXE {(int)res.StatusCode}: {message}"); } // 5xx: exponential backoff if (attempt < retries) { await Task.Delay((int)Math.Pow(2, attempt) * 1000); } } throw new Exception("CarsXE request failed after retries"); } } ``` --- ## CORS errors The CarsXE API is meant to be called **from your server**, never from the browser. This protects your API key from being stolen — any key shipped to a browser is public. If you call the API from frontend JavaScript, the browser will block the request with a CORS error. Route requests through your backend instead, and keep your key in an environment variable. --- ## Still stuck? If you've checked the tables above and the error doesn't make sense, contact support and include: - The **endpoint** and **parameters** you sent (redact your API key) - The **full response body** and **HTTP status code** - The **timestamp** (with timezone) of the failing request --- # Industry Guides > Explore industry-specific implementation guides for parking, dealerships, insurance, and more. Source: https://carsxe.com/docs/industry-guides ## Available Guides ### Parking & Valet Services Learn how parking companies and applications can leverage CarsXE APIs to provide smart parking solutions based on vehicle dimensions, EV capabilities, and weight restrictions. [View Parking Guide](https://carsxe.com/docs/industry-guides/car-parking-and-valet) --- ## Coming Soon We're working on additional industry guides including: - **Car Dealerships** - VIN decoding, specifications, and history for inventory management - **Insurance Companies** - Risk assessment, claims processing, and underwriting - **Fleet Management** - Vehicle tracking, maintenance scheduling, and compliance - **Car Rental Services** - Vehicle classification, pricing optimization, and damage assessment - **Auto Repair Shops** - Parts lookup, service history, and recall information - **Vehicle Marketplaces** - Listing enrichment, fraud detection, and buyer confidence --- ## Request a Guide Is your industry not listed? We'd love to help! Contact us at [support@carsxe.com](mailto:support@carsxe.com) to request an industry-specific guide. --- # CarsXE for Parking Applications > Learn how parking companies and applications can leverage CarsXE APIs to provide smart parking solutions based on vehicle dimensions, EV capabilities, and other key specifications. Source: https://carsxe.com/docs/industry-guides/car-parking-and-valet Parking applications face a unique challenge: matching vehicles with suitable parking spaces. Whether it's ensuring a large truck can fit in a garage, directing EV owners to charging-enabled spots, or filtering results based on vehicle height restrictions, having accurate vehicle data is essential. CarsXE provides two powerful APIs that parking companies can use to deliver intelligent, personalized parking experiences: 1. **Vehicle Plate Decoder API** - Get vehicle information from license plates 2. **Vehicle Specifications API** - Get detailed specifications from VINs --- ## Common Use Cases ### 1. Size-Based Parking Recommendations **Challenge**: A truck owner in NYC needs to find parking spots that can accommodate their vehicle's dimensions. **Solution**: Use CarsXE to automatically determine vehicle dimensions and filter parking options accordingly. { return spot.maxLength >= parseDimension(dimensions.length) && spot.maxWidth >= parseDimension(dimensions.width) && spot.maxHeight >= parseDimension(dimensions.height); }); ` }} /> **Key Vehicle Attributes**: - `overall_length` - Total vehicle length - `overall_width` - Total vehicle width - `overall_height` - Total vehicle height - `wheelbase_length` - Distance between front and rear axles - `turning_diameter` - Turning radius for tight spaces --- ### 2. EV Charging Station Prioritization **Challenge**: Show EV charging availability prominently to electric vehicle owners. **Solution**: Detect if a vehicle is electric and highlight charging-enabled parking locations. **Fuel Types to Check**: - `Electric` - Fully electric vehicles - `Plug-in Hybrid` - PHEVs requiring charging - `Gasoline` - Traditional gas vehicles - `Diesel` - Diesel vehicles - `Hybrid` - Non-plug-in hybrids --- ### 3. Vehicle Type Classification **Challenge**: Different parking rates and restrictions for motorcycles, compact cars, SUVs, and commercial vehicles. **Solution**: Automatically classify vehicles and apply appropriate pricing/restrictions. **Vehicle Classification Attributes**: - `type` - General vehicle type (Sedan, SUV, Pickup, Motorcycle, etc.) - `style` - Body style (SEDAN 4-DR, COUPE 2-DR, etc.) - `category` - Vehicle category - `vehicle_class` - Weight class (1=Light, 2=Medium, 3=Heavy) - `size` - Size classification --- ### 4. Weight Restrictions **Challenge**: Parking garages often have weight limits for structural safety. **Solution**: Check vehicle weight against garage capacity. garageMaxWeight) { // Show warning or exclude location return { suitable: false, reason: \`Vehicle weight (\${curbWeight} lbs) exceeds garage limit (\${garageMaxWeight} lbs)\` }; } ` }} /> --- ## Implementation Guide ### Step 1: Capture Vehicle Information Parking apps can capture vehicle data in several ways: **Option A: License Plate Entry** **Option B: VIN Entry** **Option C: User Profile** --- ### Step 2: Extract Key Data Points Based on your parking application's needs, extract relevant attributes: --- ### Step 3: Filter & Personalize Results Use the extracted data to customize the parking experience: { // Check dimensions if (spot.maxHeight && parseDimension(vehicleData.height) > spot.maxHeight) { return false; } if (spot.maxLength && parseDimension(vehicleData.length) > spot.maxLength) { return false; } // Check weight if (spot.maxWeight && parseDimension(vehicleData.weight) > spot.maxWeight) { return false; } return true; }).map(spot => { // Add relevance score spot.relevanceScore = 0; // Boost EV charging spots for EV owners if (vehicleData.isEV && spot.hasEVCharging) { spot.relevanceScore += 10; spot.badges = spot.badges || []; spot.badges.push("EV Charging Available"); } // Boost oversized spots for large vehicles if (parseDimension(vehicleData.length) > 200 && spot.oversized) { spot.relevanceScore += 5; } return spot; }).sort((a, b) => b.relevanceScore - a.relevanceScore); } ` }} /> --- ## API Reference Quick Guide ### Vehicle Plate Decoder API **Endpoint**: `GET https://api.carsxe.com/platedecoderr` **Required Parameters**: - `key` - Your CarsXE API key - `plate` - License plate number - `state` - Two-letter state code (for US, CA, AU) - `country` - Two-letter country code (optional for US) **Example Request**: **Key Response Fields**: - `vin` - Vehicle Identification Number (use for detailed specs) - `make` - Vehicle manufacturer - `model` - Vehicle model - `year` / `registration_year` - Model/registration year - `description` - Full vehicle description --- ### Vehicle Specifications API **Endpoint**: `GET https://api.carsxe.com/specs` **Required Parameters**: - `key` - Your CarsXE API key - `vin` - 17-character Vehicle Identification Number **Optional Parameters**: - `format` - Response format (`json` or `xml`) - `deepdata` - Set to `1` for additional data (slower response) **Example Request**: **Key Response Fields for Parking Apps**: | Attribute | Description | Example | |-----------|-------------|---------| | `overall_length` | Total vehicle length | "193.10 in." | | `overall_width` | Total vehicle width | "73.20 in." | | `overall_height` | Total vehicle height | "57.60 in." | | `curb_weight` | Vehicle weight without cargo | "4090 lbs" | | `fuel_type` | Type of fuel/power | "Electric", "Gasoline" | | `type` | Vehicle type | "Sedan/Saloon", "SUV" | | `style` | Body style | "SEDAN 4-DR" | | `turning_diameter` | Turning circle | "37.50 in." | | `wheelbase_length` | Wheelbase length | "116.90 in." | --- ## Best Practices ### 1. Cache Vehicle Data Store vehicle information in user profiles to avoid repeated API calls: new Date()) { // Use cached data return cachedVehicle.specs; } else { // Refresh from API return await carsxe.specs({ vin: userVIN }); } ` }} /> ### 2. Handle Missing Data Gracefully Not all vehicles will have complete specification data: spot.maxHeight) { return { suitable: false }; } return { suitable: true }; } ` }} /> ### 3. Provide Visual Indicators Help users understand why certain spots are recommended: 200 && spot.oversized) { badges.push({ icon: "🚛", text: "Oversized Friendly", type: "info" }); } if (spot.maxHeight > parseDimension(vehicleData.height) + 12) { badges.push({ icon: "📏", text: "Plenty of Clearance", type: "success" }); } return badges; } ` }} /> ### 4. Error Handling --- ## International Support The Plate Decoder API supports license plates from 50+ countries across 6 continents. This enables global parking applications to serve diverse markets: **North America**: US, Canada, Mexico, Costa Rica **Europe**: UK, Germany, France, Spain, Italy, Netherlands, and 25+ more **Asia**: India, China, Singapore, Malaysia, UAE, and more **Oceania**: Australia, New Zealand **South America**: Brazil, Argentina, Chile, Colombia, and more **Africa**: South Africa, Nigeria, Tunisia See the [full country list](https://carsxe.com/docs/v2/plate-decoder#international-support) in the Plate Decoder API documentation. --- ## Pricing & Sandbox **Free Sandbox**: The Vehicle Specifications API is included in the free Sandbox as part of the shared lifetime quota (up to 100 API calls), allowing you to test integration before committing. **Plate Decoder API**: Included in the free Sandbox as part of the shared lifetime quota (up to 100 API calls). Visit our [pricing page](https://carsxe.com/pricing) for details. **Production Use**: Contact sales for volume pricing and enterprise plans tailored to parking applications. --- ## Next Steps 1. [Sign up for a free API key](https://carsxe.com/signin) 2. Review the [Plate Decoder API documentation](https://carsxe.com/docs/v2/plate-decoder) 3. Review the [Specifications API documentation](https://carsxe.com/docs/v1/specifications) 4. Test the integration in your development environment 5. Contact [support@carsxe.com](mailto:support@carsxe.com) for integration assistance --- ## Example: Complete Parking Search Flow Here's a complete example showing how a parking app might implement vehicle-aware search: { return isVehicleSuitable(vehicleData, spot); }); // Step 3: Rank by relevance const rankedSpots = filteredSpots.map(spot => ({ ...spot, relevance: calculateRelevance(vehicleData, spot), badges: generateBadges(vehicleData, spot) })).sort((a, b) => b.relevance - a.relevance); return { vehicleData, results: rankedSpots, filteredCount: parkingLocations.length - filteredSpots.length }; } function extractParkingData(attributes) { return { length: parseFloat(attributes.overall_length) || null, width: parseFloat(attributes.overall_width) || null, height: parseFloat(attributes.overall_height) || null, weight: parseFloat(attributes.curb_weight) || null, isEV: attributes.fuel_type === "Electric", isPHEV: attributes.fuel_type === "Plug-in Hybrid", type: attributes.type, make: attributes.make, model: attributes.model, year: attributes.year }; } function isVehicleSuitable(vehicle, spot) { if (!vehicle) return true; // No vehicle data, show all if (spot.maxHeight && vehicle.height && vehicle.height > spot.maxHeight) { return false; } if (spot.maxLength && vehicle.length && vehicle.length > spot.maxLength) { return false; } if (spot.maxWeight && vehicle.weight && vehicle.weight > spot.maxWeight) { return false; } return true; } function calculateRelevance(vehicle, spot) { let score = 0; // EV charging match if ((vehicle.isEV || vehicle.isPHEV) && spot.hasEVCharging) { score += 20; } // Comfortable fit (not too tight) if (vehicle.height && spot.maxHeight) { const clearance = spot.maxHeight - vehicle.height; if (clearance > 12) score += 10; // 1 foot+ clearance } // Covered parking bonus for all if (spot.covered) score += 5; // Security features if (spot.security24_7) score += 5; return score; } function generateBadges(vehicle, spot) { const badges = []; if ((vehicle.isEV || vehicle.isPHEV) && spot.hasEVCharging) { badges.push({ text: "EV Charging", icon: "⚡", variant: "success" }); } if (vehicle.length > 200 && spot.oversized) { badges.push({ text: "Large Vehicle OK", icon: "🚛", variant: "info" }); } return badges; } // Usage const results = await searchParking( { plate: "7XER187", state: "CA" }, allParkingLocations ); ` }} /> --- ## Support Have questions about integrating CarsXE into your parking application? - **Documentation**: [docs.carsxe.com](https://carsxe.com/docs) - **Email**: [support@carsxe.com](mailto:support@carsxe.com) - **API Status**: [status.carsxe.com](https://status.carsxe.com) We're here to help you build better parking experiences! --- # Integrations > Explore our official SDKs and third-party integrations to accelerate your development with the CarsXE API. Source: https://carsxe.com/docs/integrations Integrate the CarsXE API into your applications with our official libraries and tools. These resources simplify the process of making API calls and handling responses, allowing you to focus on building your product. ## Official SDKs
Go logo
### Go
Official Go SDK for integrating CarsXE API into your Go applications.
Java logo
### Java
Official Java SDK for integrating CarsXE API into your Java applications.
.NET logo
### .NET
Official .NET SDK for integrating CarsXE API into your .NET, C#, and ASP.NET applications with full async/await support.
Node.js logo
### Node.js
Use our official Node.js library to integrate CarsXE into your JavaScript or TypeScript projects.
PHP logo
### PHP
Official PHP SDK for integrating CarsXE API into your PHP applications.
Python logo
### Python
The official Python package for accessing the CarsXE API from your Python application.
Ruby logo
### Ruby
Official Ruby gem for integrating CarsXE API into your Ruby and Rails applications.
Swift logo
### Swift
Official Swift Package for integrating CarsXE API into your iOS, macOS, and server-side Swift applications.
## Developer Tools
CarsXE CLI logo
### CLI
Query vehicle specs, market value, history, recalls, plates, and OBD codes directly from your terminal.
## AI & Automation Integrations
MCP logo
### MCP Integration
AI-powered vehicle data integration for Claude, Cursor, and other MCP-compatible tools.
Claude logo
### Claude Code Plugin
Access CarsXE vehicle data APIs directly from Claude Code with simple commands and auto-invoked skills.
Codex logo
### Codex Plugin
Access CarsXE vehicle data APIs directly from OpenAI Codex with auto-invoked skills — no slash commands to memorize.
Gemini logo
### Gemini CLI Extension
Access CarsXE vehicle data APIs directly from Gemini CLI with simple commands and auto-invoked skills.
Google ADK logo
### Google ADK
Connect the CarsXE MCP server to your Google Agent Development Kit (ADK) agents — VIN and plate decoding, market values, history, recalls, images, and OBD codes over a single remote endpoint.
OpenClaw logo
### OpenClaw Skill
Extend your OpenClaw AI agent with CarsXE vehicle data — VIN decoding, plate lookup, market values, history, and more.
## Data Tools
Snowflake logo
### Snowflake
Access comprehensive vehicle data directly in Snowflake via the CarsXE Native App, with Streamlit UI and SQL-callable procedures for seamless integration.
## No-Code Integrations
n8n logo
### n8n
Automate vehicle data workflows in n8n with the official CarsXE node — VIN decoding, plate lookup, history reports, market values, and more.
Zapier logo
### Zapier
Connect CarsXE with thousands of other apps and automate your workflows with no code using our Zapier integration.
Make logo
### Make
Build powerful automations and connect CarsXE with your favorite apps using Make's visual no-code platform.
--- # Google ADK Integration > Connect the CarsXE MCP server to your Google Agent Development Kit (ADK) agents — decode VINs and plates, get market values, history, recalls, liens, images, and OBD codes with natural language. Source: https://carsxe.com/docs/integrations/adk-quickstart ## What is the CarsXE Integration for Google ADK? The CarsXE MCP server brings the full suite of CarsXE vehicle data APIs into your [Google Agent Development Kit (ADK)](https://google.github.io/adk-docs/) agents through a single remote endpoint at `https://mcp.carsxe.com/mcp`. Your agents can decode VINs and license plates, retrieve market values and ownership history, check safety recalls, and diagnose trouble codes — all from natural language queries, with no local install. **ADK Integration Page**: [adk.dev/integrations/carsxe](https://adk.dev/integrations/carsxe/) **MCP Endpoint**: `https://mcp.carsxe.com/mcp` ## Key Use Cases - **Vehicle identification** — turn VINs or license plates into structured data: make, model, year, engine, trim, and equipment specifications. - **Vehicle assessment** — market valuations, ownership histories, and active safety recall information to inform purchasing and servicing decisions. - **Diagnostic support** — convert OBD-II trouble codes (like `P0300`) into readable definitions and probable causes. - **Image processing** — extract vehicle identifiers from photos and retrieve visual media by make and model. ## Prerequisites Before you begin, ensure you have: 1. An installed [ADK environment](https://google.github.io/adk-docs/get-started/) 2. A CarsXE API key — get one from the [CarsXE developer dashboard](https://carsxe.com/dashboard/developer) ## Installation The integration connects to the hosted CarsXE MCP server over streamable HTTP — there is nothing to install locally. Add the `McpToolset` to your agent and pass your CarsXE API key via the `X-API-Key` header. ### Python ```python from google.adk.agents import Agent from google.adk.tools.mcp_tool import McpToolset from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams CARSXE_API_KEY = "YOUR_CARSXE_API_KEY" root_agent = Agent( model="gemini-flash-latest", name="carsxe_agent", instruction="You are a vehicle data assistant...", tools=[ McpToolset( connection_params=StreamableHTTPConnectionParams( url="https://mcp.carsxe.com/mcp", headers={"X-API-Key": CARSXE_API_KEY}, ), ) ], ) ``` ### TypeScript ```typescript import { LlmAgent, MCPToolset } from "@google/adk"; const CARSXE_API_KEY = "YOUR_CARSXE_API_KEY"; const rootAgent = new LlmAgent({ model: "gemini-flash-latest", name: "carsxe_agent", instruction: "You are a vehicle data assistant...", tools: [ new MCPToolset({ type: "StreamableHTTPConnectionParams", url: "https://mcp.carsxe.com/mcp", transportOptions: { requestInit: { headers: { "X-API-Key": CARSXE_API_KEY }, }, }, }), ], }); ``` ## Available Tools | Tool | Function | |------|----------| | `get-vehicle-specs` | Decode a VIN to full specifications | | `decode-vehicle-plate` | Extract vehicle data from a license plate | | `get-market-value` | Determine current vehicle valuation | | `get-vehicle-history` | Access ownership and accident records | | `get-vehicle-recalls` | Check active safety recalls | | `get-lien-theft` | Verify lien and theft status | | `international-vin-decoder` | Decode non-US VINs | | `vin-ocr` | Extract a VIN from an image | | `recognize-plate-image` | Identify a plate in a photo | | `get-year-make-model` | Retrieve specs by vehicle attributes | | `get-vehicle-images` | Fetch images by make and model | | `decode-obd-code` | Translate OBD-II trouble codes | ## Authentication The integration uses header-based authentication. Send your CarsXE API key in the `X-API-Key` header on every request to the hosted MCP server over a streamable HTTP connection — no local installation required. If you do not have a key yet, sign up and get one from the [CarsXE developer dashboard](https://carsxe.com/dashboard/developer). ## Usage Examples Once the toolset is attached, your ADK agent invokes CarsXE tools automatically when it detects relevant context. For example: - *"What can you tell me about VIN WBAFR7C57CC811956?"* — calls `get-vehicle-specs` - *"Does this car have any open recalls? VIN: WBAFR7C57CC811956"* — calls `get-vehicle-recalls` - *"My check engine light is on with code P0300"* — calls `decode-obd-code` - *"How much is a 2012 BMW X5 worth?"* — calls `get-market-value` ## API Documentation Full API documentation is available at [carsxe.com/docs](https://carsxe.com/docs). --- # Claude Code Plugin > Access the full suite of CarsXE vehicle data APIs directly from Claude Code — decode VINs, look up license plates, get market values, check history, recalls, liens, OBD codes, and more. Source: https://carsxe.com/docs/integrations/claude-quickstart ## What is the CarsXE Plugin for Claude Code? The CarsXE Plugin for Claude Code provides direct access to our comprehensive automotive APIs through simple commands and auto-invoked skills. Decode VINs, look up license plates, get market values, check vehicle history, recalls, liens, OBD codes, and more — all within your Claude Code environment. **GitHub Repository**: [carsxe-claude-plugin](https://github.com/carsxe/carsxe-claude-plugin) ## Plugin Marketplaces You can also find and install the CarsXE plugin from these Claude plugin directories: - [Claude Plugin Hub](https://www.claudepluginhub.com/plugins/carsxe-carsxe-carsxe) - [Build With Claude](https://buildwithclaude.com/plugins?q=CarsXE) ## Installation ### Step 1: Add the CarsXE Marketplace ```bash /plugin marketplace add carsxe/carsxe-claude-plugin ``` ### Step 2: Install the Plugin ```bash /plugin install carsxe ``` ## Setup ### 1. Get Your CarsXE API Key 1. Visit the [CarsXE API dashboard](https://carsxe.com/dashboard/developer) 2. Navigate to your API keys section 3. Copy your API key ### 2. Authenticate with Your API Key Use the auth command to validate credentials and establish session access: /carsxe:auth your_api_key_here ## Available Commands | Command | Description | | ------------------------------------------ | ------------------------------------- | | `/carsxe:auth ` | Validate and configure API credentials | | `/carsxe:specs ` | Decode a VIN — full vehicle specs | | `/carsxe:plate [STATE]` | Look up vehicle from license plate | | `/carsxe:value ` | Get current market value | | `/carsxe:history ` | Full vehicle history report | | `/carsxe:images [YEAR]` | Fetch vehicle photos | | `/carsxe:recalls ` | Check for open safety recalls | | `/carsxe:intvin ` | Decode international (non-US) VINs | | `/carsxe:ocr ` | Extract VIN from a photo | | `/carsxe:lien ` | Check for liens and theft records | | `/carsxe:plateocr ` | Extract license plate from a photo | | `/carsxe:ymm [TRIM]` | Look up vehicle by Year/Make/Model | | `/carsxe:obd ` | Decode an OBD diagnostic trouble code | ## Usage Examples ### Decode a VIN /carsxe:specs WBAFR7C57CC811956 ### Look up a California Plate /carsxe:plate 7XER187 US CA ### Check Market Value /carsxe:value WBAFR7C57CC811956 ### Get Vehicle History /carsxe:history WBAFR7C57CC811956 ### Find Vehicle Images /carsxe:images BMW X5 2019 ### Check Recalls /carsxe:recalls WBAFR7C57CC811956 ### Decode an International VIN /carsxe:intvin WF0MXXGBWM8R43240 ### Extract VIN from a Photo /carsxe:ocr https://example.com/vin-photo.jpg ### Check Liens and Theft /carsxe:lien WBAFR7C57CC811956 ### Extract Plate from a Photo /carsxe:plateocr https://example.com/plate-photo.jpg ### Look up by Year/Make/Model /carsxe:ymm 2020 Toyota Camry LE ### Decode an OBD Code /carsxe:obd P0300 ## Skills (Auto-invoked) Skills are automatically triggered by Claude based on the conversation context. No need to type a command — just describe what you need naturally. | Natural Language Query | Triggered Skill | | ---------------------------------------------- | ----------------- | | "What are the specs of VIN WBAFR7C57CC811956?" | `vehicle-specs` | | "Does this car have any recalls?" | `vehicle-recalls` | | "What does the check engine code P0300 mean?" | `obd-decoder` | | "What's the value of this vehicle?" | `market-value` | | "Show me images of a 2020 Tesla Model 3" | `vehicle-images` | | "Get the history report for this VIN" | `vehicle-history` | ## Troubleshooting ### Common Issues **Authentication Error** - Verify your API key is correct - Ensure the `CARSXE_API_KEY` environment variable is set - Check that your API key has the necessary permissions **Plugin Not Found** - Verify you've added the marketplace correctly - Try reinstalling the plugin - Restart Claude Code **Command Not Working** - Check the command syntax matches the examples above - Ensure all required parameters are provided - Verify your API account has sufficient credits Ready to supercharge your vehicle data workflows with CarsXE and Claude Code! --- # CLI Quickstart Guide > Query vehicle specs, market value, history, recalls, license plates, OBD codes, and more — directly from your terminal using the CarsXE CLI. Source: https://carsxe.com/docs/integrations/cli-quickstart
CarsXE CLI
The CarsXE CLI lets you query vehicle data straight from your terminal — no browser, no code, no boilerplate. It works on Linux, macOS, and Windows, and is designed to integrate naturally with shell scripts, AI agents, and developer workflows. You will need a CarsXE API key before using the CLI. Grab one from your [Dashboard → Developer](https://carsxe.com/dashboard/developer) page. ## Requirements - **Node.js 22 or higher** — [nodejs.org](https://nodejs.org) ## Installation Install the CLI globally with npm: ```bash npm install -g @carsxe/cli ``` Verify the installation: ```bash carsxe --version ``` ## Setup Save your API key once — it is stored locally and used automatically for every command: ```bash carsxe config set-key YOUR_API_KEY ``` The key is saved to a local config file: | OS | Path | | --- | --- | | Linux / macOS | `~/.carsxe/config.json` | | Windows | `C:\Users\\.carsxe\config.json` | ### Using an environment variable instead If you prefer not to save the key to disk, set the `CARSXE_API_KEY` environment variable. The environment variable takes precedence over the saved config file. ```bash export CARSXE_API_KEY=YOUR_API_KEY ``` ```bash $env:CARSXE_API_KEY = "YOUR_API_KEY" ``` ```bash set CARSXE_API_KEY=YOUR_API_KEY ``` To make the variable permanent on Linux/macOS, add the `export` line to your `~/.bashrc`, `~/.zshrc`, or `~/.profile`. --- ## Global Options These options apply to every command: | Option | Description | | --- | --- | | `--table` | Output as a formatted table instead of JSON | | `--raw` | Output compact single-line JSON (useful with `jq`) | | `-v, --version` | Print the version number | | `-h, --help` | Display help | Run `carsxe --help` to see all options for any specific command. --- ## Commands ### `specs` — Vehicle Specifications Decode a VIN and get full vehicle specifications: make, model, year, engine, trim, equipment, and more. ```bash carsxe specs --vin 1HGBH41JXMN109186 ``` | Option | Required | Description | | --- | --- | --- | | `--vin ` | Yes | Vehicle Identification Number | | `--deep-data` | No | Enable deep data (additional equipment details) | | `--disable-int-vin` | No | Disable international VIN decoding fallback | --- ### `market-value` — Market Value Get the current estimated market value of a vehicle. ```bash carsxe market-value --vin 1HGBH41JXMN109186 --mileage 45000 --state CA --condition clean ``` | Option | Required | Description | | --- | --- | --- | | `--vin ` | Yes | Vehicle Identification Number | | `--mileage ` | No | Current odometer reading in miles | | `--state ` | No | Two-letter US state code for regional pricing (e.g. `CA`, `TX`) | | `--condition ` | No | Vehicle condition: `excellent` \| `clean` \| `average` \| `rough` | | `--country ` | No | Country code for pricing (default: `US`) | --- ### `history` — Vehicle History Get a full vehicle history report including past owners, accidents, title status, and odometer readings. ```bash carsxe history --vin 1HGBH41JXMN109186 ``` | Option | Required | Description | | --- | --- | --- | | `--vin ` | Yes | Vehicle Identification Number | --- ### `recalls` — Safety Recalls Check for open safety recalls on a vehicle. ```bash carsxe recalls --vin 1HGBH41JXMN109186 ``` | Option | Required | Description | | --- | --- | --- | | `--vin ` | Yes | Vehicle Identification Number | --- ### `lien-theft` — Lien & Theft Check Check whether a vehicle has active liens or has been reported stolen. ```bash carsxe lien-theft --vin 1HGBH41JXMN109186 ``` | Option | Required | Description | | --- | --- | --- | | `--vin ` | Yes | Vehicle Identification Number | --- ### `international-vin` — International VIN Decoder Decode a VIN from a non-US vehicle (European, Asian, and other markets). ```bash carsxe international-vin --vin WBAFR7C57CC811956 ``` | Option | Required | Description | | --- | --- | --- | | `--vin ` | Yes | Vehicle Identification Number | --- ### `plate-decoder` — License Plate Decoder Look up vehicle information from a license plate number. ```bash carsxe plate-decoder --plate ABC1234 --country US --state CA ``` | Option | Required | Description | | --- | --- | --- | | `--plate ` | Yes | License plate number | | `--country ` | Yes | Country code (e.g. `US`, `GB`, `DE`, `CA`) | | `--state ` | No | State or province code (e.g. `CA`, `TX`, `ON`) | | `--district ` | No | District or region | --- ### `plate-image` — Plate Image Recognition Extract and decode a license plate from an image URL. ```bash carsxe plate-image --image https://example.com/car-photo.jpg ``` | Option | Required | Description | | --- | --- | --- | | `--image ` | Yes | Publicly accessible URL of the image | --- ### `vin-ocr` — VIN OCR from Image Extract a VIN from a photo of a VIN plate or dashboard sticker. ```bash carsxe vin-ocr --image https://example.com/vin-sticker.jpg ``` | Option | Required | Description | | --- | --- | --- | | `--image ` | Yes | Publicly accessible URL of the image | --- ### `ymm` — Year / Make / Model Look up vehicle data when you don't have a VIN — search by year, make, and model instead. ```bash carsxe ymm --year 2020 --make Toyota --model Camry --trim LE ``` | Option | Required | Description | | --- | --- | --- | | `--year ` | Yes | Model year (e.g. `2020`) | | `--make ` | Yes | Vehicle make (e.g. `Toyota`) | | `--model ` | Yes | Vehicle model (e.g. `Camry`) | | `--trim ` | No | Trim level (e.g. `LE`, `XSE`) | --- ### `images` — Vehicle Images Retrieve photos of a vehicle by make, model, and year. ```bash carsxe images --make Toyota --model Camry --year 2020 --angle front --size Large ``` | Option | Required | Description | | --- | --- | --- | | `--make ` | Yes | Vehicle make | | `--model ` | Yes | Vehicle model | | `--year ` | No | Model year | | `--trim ` | No | Trim level | | `--color ` | No | Vehicle color | | `--angle ` | No | Photo angle: `front` \| `side` \| `back` | | `--photo-type ` | No | Photo type: `interior` \| `exterior` \| `engine` | | `--size ` | No | Image size: `Small` \| `Medium` \| `Large` \| `Wallpaper` \| `All` | --- ### `obd` — OBD-II Code Decoder Decode a diagnostic trouble code (DTC) from your OBD-II scanner. ```bash carsxe obd --code P0300 ``` | Option | Required | Description | | --- | --- | --- | | `--code ` | Yes | OBD-II code (e.g. `P0300`, `C1234`, `B0001`, `U0100`) | --- ### `config` — Configuration Manage your saved API key. ```bash # Save your API key carsxe config set-key YOUR_API_KEY # Show active key and its source carsxe config get-key # Remove the saved key carsxe config remove-key ``` --- ## Output Formats By default all commands return pretty-printed JSON. Two flags change the format: **Table view** — human-friendly two-column layout, great for quick inspection: ```bash carsxe --table obd --code P0300 ``` Nested objects are flattened with dot notation (e.g. `engine.cylinders`). Arrays of primitives are joined on a single line. **Raw JSON** — compact single-line output: ```bash carsxe --raw specs --vin 1HGBH41JXMN109186 ``` --- ## What's next? - [Grab your API key from the CarsXE dashboard](https://carsxe.com/dashboard/developer) - [Browse the full Vehicle Specifications API](https://carsxe.com/docs/v1/specifications) - [Learn about authentication](https://carsxe.com/docs/authentication) - [Check the full list of error codes](https://carsxe.com/docs/errors) --- # Codex Plugin > Access the full suite of CarsXE vehicle data APIs directly from OpenAI Codex — decode VINs, look up license plates, get market values, check history, recalls, liens, OBD codes, and more. Source: https://carsxe.com/docs/integrations/codex-quickstart ## What is the CarsXE Plugin for OpenAI Codex? The CarsXE Plugin for OpenAI Codex provides direct access to our comprehensive automotive APIs through auto-invoked skills. Codex picks the right skill based on what you ask — no slash commands to memorize, just describe what you need. Decode VINs, look up license plates, get market values, check vehicle history, recalls, liens, OBD codes, and more — all within your Codex environment. **GitHub Repository**: [carsxe-codex-plugin](https://github.com/carsxe/carsxe-codex-plugin) **Plugin Registry**: [hol.org/registry/plugins/carsxe/carsxe](https://hol.org/registry/plugins/carsxe%2Fcarsxe) ## Installation Install from the Codex Plugin Marketplace: ```bash npx codex-marketplace add carsxe/carsxe-codex-plugin --plugin --project ``` Or browse and install interactively from within Codex: ```bash /plugins ``` ## Setup ### 1. Get Your CarsXE API Key 1. Visit the [CarsXE API dashboard](https://carsxe.com/dashboard/developer) 2. Navigate to your API keys section 3. Copy your API key ### 2. Set the `CARSXE_API_KEY` Environment Variable Codex skills read your key from `CARSXE_API_KEY`. Set it before launching Codex: ```bash export CARSXE_API_KEY="cxe_live_YOUR_KEY" ``` ```powershell $env:CARSXE_API_KEY="cxe_live_YOUR_KEY" ``` Add it to your shell profile to persist it across sessions. ## Skills (Auto-invoked) Skills are automatically triggered by Codex based on the conversation context. No need to type a command — just describe what you need naturally. You can also call a skill explicitly by name with the `@` prefix, e.g. `@vehicle-specs`. | Skill | What it does | | ------------------------- | -------------------------------------------- | | `vehicle-specs` | Decode a VIN — full vehicle specifications | | `plate-decoder` | Look up a vehicle from a license plate | | `market-value` | Estimate a vehicle's current market value | | `vehicle-history` | Full vehicle history report | | `vehicle-images` | Fetch vehicle photos by make/model/year | | `vehicle-recalls` | Check for open safety recalls | | `international-vin` | Decode international (non-US) VINs | | `vin-ocr` | Extract a VIN from a photo | | `lien-theft` | Check for liens and theft records | | `plate-image-recognition` | Extract a license plate number from a photo | | `year-make-model` | Look up a vehicle by Year/Make/Model | | `obd-decoder` | Decode an OBD-II diagnostic trouble code | ## Usage Examples Just ask Codex naturally — the matching skill is invoked automatically: ### Decode a VIN Decode VIN WBAFR7C57CC811956 ### Look up a California Plate Look up California plate 7XER187 ### Check Market Value What's this car worth? VIN WBAFR7C57CC811956, 45k miles, clean condition ### Get Vehicle History Get the history report for WBAFR7C57CC811956 ### Check Recalls Does 1C4JJXR64PW696340 have any open recalls? ### Check Liens and Theft Is this VIN stolen or have a lien? WBAFR7C57CC811956 ### Decode an International VIN Decode this international VIN: WF0MXXGBWM8R43240 ### Look up by Year/Make/Model Look up a 2020 Toyota Camry LE ### Decode an OBD Code What does check engine code P0300 mean? ### Extract VIN from a Photo Extract the VIN from this photo: https://example.com/vin.jpg ### Extract Plate from a Photo Read the plate in this image: https://example.com/plate.jpg ### Find Vehicle Images Show me photos of a 2019 BMW X5 ## Troubleshooting ### Common Issues **Authentication Error** - Verify your API key is correct - Ensure the `CARSXE_API_KEY` environment variable is set - Check that your API key has the necessary permissions **Plugin Not Found** - Verify you installed via `npx codex-marketplace add carsxe/carsxe-codex-plugin --plugin --project` - Try reinstalling the plugin via `/plugins` - Restart Codex **Skill Not Triggering** - Try calling the skill explicitly with the `@` prefix, e.g. `@vehicle-specs` - Ensure all required parameters (VIN, plate, etc.) are included in your prompt - Verify your API account has sufficient credits Ready to supercharge your vehicle data workflows with CarsXE and OpenAI Codex! --- # .NET Quickstart Guide > Get started with CarsXE's .NET SDK to integrate comprehensive vehicle data into your .NET applications. Source: https://carsxe.com/docs/integrations/dotnet-quickstart The CarsXE .NET SDK provides a simple and powerful way to integrate vehicle data into your .NET applications. This guide will help you get started quickly. For more information, see the package on NuGet. ## Installation Install the CarsXE .NET package using NuGet: `dotnet add package CarsXE` ## Setup First, import the CarsXE client and initialize it with your API key: ```csharp using carsxe; string API_KEY = "YOUR_API_KEY"; CarsXE carsxe = new CarsXE(API_KEY); ``` ## Basic Usage ### VIN Specifications ```csharp string vin = "WBAFR7C57CC811956"; try { var specs = carsxe.Specs(new Dictionary { { "vin", vin } }).Result; Console.WriteLine("API Response:"); Console.WriteLine(specs.RootElement.GetProperty("input").GetProperty("vin").ToString()); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` ### International VIN Decoder ```csharp try { var intvin = carsxe.InternationalVinDecoder(new Dictionary { { "vin", "WF0MXXGBWM8R43240" } }).Result; Console.WriteLine(intvin); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` ### Market Value ```csharp try { var marketvalue = carsxe.MarketValue(new Dictionary { { "vin", "WBAFR7C57CC811956" } }).Result; Console.WriteLine(marketvalue); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` ### Vehicle History ```csharp try { var history = carsxe.History(new Dictionary { { "vin", "WBAFR7C57CC811956" } }).Result; Console.WriteLine(history); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` ### License Plate Decoder ```csharp try { var decodedPlate = carsxe.PlateDecoder(new Dictionary { { "plate", "7XER187" }, { "state", "CA" }, { "country", "US" } }).Result; Console.WriteLine(decodedPlate); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` ### Vehicle Images ```csharp try { var images = carsxe.Images(new Dictionary { { "make", "BMW" }, { "model", "X5" }, { "year", "2019" } }).Result; Console.WriteLine(images); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` ### Vehicle Recalls ```csharp try { var recalls = carsxe.Recalls(new Dictionary { { "vin", "1C4JJXR64PW696340" } }).Result; Console.WriteLine(recalls); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` ### Plate Image Recognition ```csharp try { var plateimg = carsxe.PlateImageRecognition( "https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public" ).Result; Console.WriteLine(plateimg); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` ### VIN OCR from Image ```csharp try { var vinocr = carsxe.VinOcr( "https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public" ).Result; Console.WriteLine(vinocr); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` ### Year-Make-Model Search ```csharp try { var yymm = carsxe.YearMakeModel(new Dictionary { { "year", "2012" }, { "make", "BMW" }, { "model", "5 Series" } }).Result; Console.WriteLine(yymm); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` ### OBD Code Decoder ```csharp try { var obdcode = carsxe.ObdCodesDecoder(new Dictionary { { "code", "P0115" } }).Result; Console.WriteLine(obdcode); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` ### Lien and Theft ```csharp try { var lienAndTheft = carsxe.LienAndTheft(new Dictionary { { "vin", "2C3CDXFG1FH762860" } }).Result; Console.WriteLine(lienAndTheft); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` Start building powerful automotive applications with CarsXE's .NET SDK! --- # Gemini CLI Extension > Access the full suite of CarsXE vehicle data APIs directly from Gemini CLI — decode VINs, look up license plates, get market values, check history, recalls, liens, OBD codes, and more. Source: https://carsxe.com/docs/integrations/gemini-quickstart ## What is the CarsXE Extension for Gemini CLI? Access the full suite of CarsXE vehicle data APIs directly from Gemini CLI. Decode VINs, look up license plates, get market values, vehicle history, recalls, lien and theft records, OBD codes, and more. **GitHub Repository**: [carsxe-gemini-extension](https://github.com/carsxe/carsxe-gemini-extension) ## Features | Command | Description | | ------------------------------------------ | --------------------------------------------- | | `/carsxe:auth ` | Validate and set your CarsXE API key | | `/carsxe:specs ` | Decode a VIN with full vehicle specifications | | `/carsxe:plate [STATE]` | Look up a vehicle by license plate | | `/carsxe:value ` | Get current market value | | `/carsxe:history ` | Full vehicle history report | | `/carsxe:images [YEAR]` | Retrieve vehicle photos | | `/carsxe:recalls ` | Check for open safety recalls | | `/carsxe:intvin ` | Decode an international (non-US) VIN | | `/carsxe:ocr ` | Extract a VIN from a photo (OCR) | | `/carsxe:lien ` | Check for liens and theft records | | `/carsxe:plateocr ` | Extract a plate number from a photo | | `/carsxe:ymm [TRIM]` | Look up by Year/Make/Model | | `/carsxe:obd ` | Decode an OBD-II trouble code | All commands also have corresponding **skills** that Gemini auto-invokes when it detects relevant context in your conversation. ## Prerequisites Before installing the extension, make sure you have the [Gemini CLI](https://github.com/google-gemini/gemini-cli) installed and your `GEMINI_API_KEY` environment variable set. You can get a Gemini API key from [Google AI Studio](https://aistudio.google.com/apikey). **macOS / Linux — add to your shell profile for persistence:** ```bash echo 'export GEMINI_API_KEY=your_gemini_api_key_here' >> ~/.bashrc source ~/.bashrc ``` If you use Zsh (default on macOS), replace `~/.bashrc` with `~/.zshrc`. **Windows — PowerShell (current session):** ```powershell $env:GEMINI_API_KEY="your_gemini_api_key_here" ``` **Windows — PowerShell (persist across sessions):** ```powershell [System.Environment]::SetEnvironmentVariable("GEMINI_API_KEY","your_gemini_api_key_here","User") ``` **Windows — Command Prompt:** ```cmd setx GEMINI_API_KEY "your_gemini_api_key_here" ``` After `setx`, restart your terminal for the variable to take effect. ## Installation Install the extension from the GitHub repository: ```bash gemini extensions install https://github.com/carsxe/carsxe-gemini-extension.git ``` During installation, Gemini CLI prompts you for your CarsXE API key. If you do not have a key yet, sign up and get one from the [CarsXE developer dashboard](https://carsxe.com/dashboard/developer). If you skipped that prompt, or you want to change your API key after installing, run: ```bash gemini extensions config carsxe ``` This stores your API key securely in the system keychain. ## Usage Examples ### Decode a VIN ```bash /carsxe:specs WBAFR7C57CC811956 ``` ### Look up a license plate ```bash /carsxe:plate 7XER187 US CA ``` ### Get market value ```bash /carsxe:value WBAFR7C57CC811956 ``` ### Vehicle history report ```bash /carsxe:history WBAFR7C57CC811956 ``` ### Vehicle images ```bash /carsxe:images BMW X5 2019 ``` ### Check recalls ```bash /carsxe:recalls WBAFR7C57CC811956 ``` ### International VIN ```bash /carsxe:intvin WF0MXXGBWM8R43240 ``` ### VIN OCR from image ```bash /carsxe:ocr https://example.com/vin-photo.jpg ``` ### Lien and theft check ```bash /carsxe:lien WBAFR7C57CC811956 ``` ### Plate recognition from image ```bash /carsxe:plateocr https://example.com/plate-photo.jpg ``` ### Year/Make/Model lookup ```bash /carsxe:ymm 2020 Toyota Camry LE ``` ### OBD code decode ```bash /carsxe:obd P0300 ``` ## Skills (Auto-invoked) Gemini will automatically use the CarsXE tools when it detects relevant queries. For example: - *"What can you tell me about VIN WBAFR7C57CC811956?"* — triggers the `vehicle-specs` skill - *"Does this car have any recalls? VIN: WBAFR7C57CC811956"* — triggers the `vehicle-recalls` skill - *"My check engine light is on with code P0300"* — triggers the `obd-decoder` skill - *"How much is a 2012 BMW X5 worth? VIN WBAFR7C57CC811956"* — triggers the `market-value` skill ## API Documentation Full API documentation is available at [carsxe.com/docs](https://carsxe.com/docs). --- # Go Quickstart Guide > Get started with CarsXE's Go package to integrate comprehensive vehicle data into your Go applications. Source: https://carsxe.com/docs/integrations/go-quickstart The CarsXE Go package provides a simple and powerful way to integrate vehicle data into your Go applications. This guide will help you get started quickly. For more information, see the package on pkg.go.dev. ## Installation Install the CarsXE Go package using go get: `go get -u github.com/carsxe/carsxe-go-package` ## Setup First, import the CarsXE client and initialize it with your API key: ```go package main import ( "fmt" "github.com/carsxe/carsxe-go-package" ) func main() { // Initialize the client client := carsxe.New("YOUR_API_KEY_HERE") } ``` ## Basic Usage ### VIN Specifications ```go vin := "WBAFR7C57CC811956" vehicle := client.Specs(map[string]string{"vin": vin}) fmt.Println(vehicle["input"].(map[string]interface{})["vin"]) ``` ### International VIN Decoder ```go intvin := client.InternationalVINDecoder(map[string]string{ "vin": "WF0MXXGBWM8R43240", }) fmt.Println(intvin) ``` ### Market Value ```go marketvalue := client.MarketValue(map[string]string{ "vin": "WBAFR7C57CC811956", }) fmt.Println(marketvalue) ``` ### Vehicle History ```go history := client.History(map[string]string{ "vin": "WBAFR7C57CC811956", }) fmt.Println(history) ``` ### License Plate Decoder ```go decodedPlate := client.PlateDecoder(map[string]string{ "plate": "7XER187", "state": "CA", "country": "US", }) fmt.Println(decodedPlate) ``` ### Vehicle Images ```go images := client.Images(map[string]string{ "make": "BMW", "model": "X5", "year": "2019", }) fmt.Println(images) ``` ### Vehicle Recalls ```go recalls := client.Recalls(map[string]string{ "vin": "1C4JJXR64PW696340", }) fmt.Println(recalls) ``` ### Plate Image Recognition ```go plateimg := client.PlateImageRecognition(map[string]string{ "upload_url": "https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public", }) fmt.Println(plateimg) ``` ### VIN OCR from Image ```go vinocr := client.VinOCR(map[string]string{ "upload_url": "https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public", }) fmt.Println(vinocr) ``` ### Year-Make-Model Search ```go yymm := client.YearMakeModel(map[string]string{ "year": "2012", "make": "BMW", "model": "5 Series", }) fmt.Println(yymm) ``` ### OBD Code Decoder ```go obdcode := client.ObdCodesDecoder(map[string]string{ "code": "P0115", }) fmt.Println(obdcode) ``` ### Lien and Theft ```go lienAndTheft := client.LienAndTheft(map[string]string{ "vin": "2C3CDXFG1FH762860", }) fmt.Println(lienAndTheft) ``` Start building powerful automotive applications with CarsXE's Go package! --- # Java Quickstart Guide > Get started with CarsXE's Java SDK to integrate comprehensive vehicle data into your Java applications. Source: https://carsxe.com/docs/integrations/java-quickstart The CarsXE Java SDK provides a simple and powerful way to integrate vehicle data into your Java applications. This guide will help you get started quickly. For more information, see the package on Maven Central. ## Installation ### Maven Add the following dependency to your `pom.xml`: ```xml io.github.carsxe carsxe 1.0.3 ``` ## Setup Initialize the CarsXE object with your API key: ```java import io.github.carsxe.CarsXE; public class Main { public static void main(String[] args) { // Initialize the CarsXE object CarsXE carsxe = new CarsXE("YOUR_API_KEY_HERE"); } } ``` ## Basic Usage ### VIN Specifications ```java import io.github.carsxe.CarsXE; import java.util.Map; import java.util.HashMap; public class Main { public static void main(String[] args) { CarsXE carsxe = new CarsXE("YOUR_API_KEY_HERE"); Map params = new HashMap<>(); params.put("vin", "WBAFR7C57CC811956"); Map specs = carsxe.specs(params); System.out.println(specs); } } ``` ### International VIN Decoder ```java Map params = new HashMap<>(); params.put("vin", "WF0MXXGBWM8R43240"); Map internationalVin = carsxe.internationalVinDecoder(params); System.out.println(internationalVin); ``` ### Market Value ```java Map params = new HashMap<>(); params.put("vin", "WBAFR7C57CC811956"); Map marketValue = carsxe.marketvalue(params); System.out.println(marketValue); ``` ### Vehicle History ```java Map params = new HashMap<>(); params.put("vin", "WBAFR7C57CC811956"); Map history = carsxe.history(params); System.out.println(history); ``` ### License Plate Decoder ```java Map params = new HashMap<>(); params.put("plate", "7XER187"); params.put("state", "CA"); params.put("country", "US"); Map plateInfo = carsxe.platedecoder(params); System.out.println(plateInfo); ``` ### Vehicle Images ```java Map params = new HashMap<>(); params.put("make", "BMW"); params.put("model", "X5"); params.put("year", "2019"); Map images = carsxe.images(params); System.out.println(images); ``` ### Vehicle Recalls ```java Map params = new HashMap<>(); params.put("vin", "1C4JJXR64PW696340"); Map recalls = carsxe.recalls(params); System.out.println(recalls); ``` ### Plate Image Recognition ```java String imageUrl = "https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public"; Map plateRecognition = carsxe.plateImageRecognition(imageUrl); System.out.println(plateRecognition); ``` ### VIN OCR from Image ```java String imageUrl = "https://user-images.githubusercontent.com/5663423/30922082-64edb4fa-a3a8-11e7-873e-3fbcdce8ea3a.png"; Map vinOcr = carsxe.vinOcr(imageUrl); System.out.println(vinOcr); ``` ### Year-Make-Model Search ```java Map params = new HashMap<>(); params.put("year", "2023"); params.put("make", "Toyota"); params.put("model", "Camry"); Map ymm = carsxe.yearMakeModel(params); System.out.println(ymm); ``` ### OBD Code Decoder ```java Map params = new HashMap<>(); params.put("code", "P0115"); Map obdCodes = carsxe.obdcodesdecoder(params); System.out.println(obdCodes); ``` ### Lien and Theft ```java Map params = new HashMap<>(); params.put("vin", "2C3CDXFG1FH762860"); Map lienTheft = carsxe.LienAndTheft(params); System.out.println(lienTheft); ``` Start building powerful automotive applications with CarsXE's Java SDK! --- # MCP Quickstart Guide > Get started with CarsXE's MCP server for AI-powered vehicle data integration in Claude, Cursor, VS Code, and other MCP-compatible tools. Source: https://carsxe.com/docs/integrations/mcp-quickstart ## Available on Marketplaces The CarsXE MCP server is listed on all major MCP marketplaces and registries: | Marketplace | Link | | ----------- | ---- | | **MCP.so** | [View on MCP.so](https://mcp.so/server/carsxe/carsxe) | | **MCP Market** | [View on MCP Market](https://mcpmarket.com/server/carsxe) | | **Glama.ai** | [View on Glama.ai](https://glama.ai/mcp/servers/carsxe/cars-xe) | | **MCP Registry** | [View on MCP Registry](https://registry.modelcontextprotocol.io/?q=carsxe) | | **MCP Servers** | [View on MCP Servers](https://mcpservers.org/servers/carsxe/carsxe-mcp-server) | ## What is MCP? Model Context Protocol (MCP) is an open standard that allows AI applications to securely connect to external data sources and tools. The CarsXE MCP server provides direct access to our comprehensive automotive database. ## What is the CarsXE MCP Server? The CarsXE MCP server is a **Node.js/TypeScript** application that exposes a suite of tools for querying comprehensive vehicle data from the CarsXE API. It is designed for seamless integration with LLMs (like Anthropic Claude, OpenAI GPT, etc.), chatbots, and developer tools, providing: - **Clean, modular code** for each CarsXE endpoint - **Consistent, Markdown-rich output** for chat/LLM environments - **Robust error handling** and user-friendly messages - **Easy extensibility** for new endpoints and features ## Why Use CarsXE with MCP? Connecting CarsXE to your AI editor or chat client via MCP gives you a supercharged vehicle data experience — directly inside the tools you already use: | Benefit | Description | | --------------------------------- | ------------------------------------------------------------------------------------------- | | **Ask in plain English** | No need to know API endpoints or parameters — just describe what you want | | **Context-aware answers** | The AI combines live vehicle data with your question for tailored, actionable responses | | **No tab switching** | Get VIN specs, history, recalls, and values without leaving your editor or chat | | **Chain requests effortlessly** | Decode a plate → get full specs → check recalls → get market value, all in one conversation | | **Always live data** | Every query hits the CarsXE API in real time — no stale cache or outdated results | | **Works in your favorite editor** | Claude Desktop, Cursor, VS Code, Windsurf, and any MCP-compatible client | ## Features - Provides structured, Markdown-ready results that LLMs and MCP clients can use to generate comprehensive, professional answers based on the API data and user query - Query vehicle specs, history, images, recalls, market value, and more - Decode license plates and VINs (including OCR from images) - Decode OBD (On-Board Diagnostics) codes - All endpoints return elegant, grouped, emoji-rich Markdown - Modular code: types, API logic, and formatters are separated for maintainability - Simple to run, test, and extend ## Prerequisites - **CarsXE API key** ([get one here](https://carsxe.com/dashboard/developer)) - **Node.js 18+ and npm** — required by editors that launch the MCP server via `npx mcp-remote@latest` (Claude Desktop, Windsurf). [Download Node.js](https://nodejs.org/) - **An MCP-compatible client or editor** — one of: [Claude Desktop](https://claude.ai/download), [Cursor](https://www.cursor.com/), [VS Code](https://code.visualstudio.com/) with the GitHub Copilot extension, [Windsurf](https://windsurf.com/), or any other MCP-compatible tool ## Installation by Editor All editors use the same remote MCP endpoint. Replace `YOUR_API_KEY` with your actual CarsXE API key in every config below. ### Claude.ai (Web) — Custom Connector Claude.ai supports connecting to the CarsXE MCP server directly — no API key to copy, no config file. Authentication happens through a standard OAuth sign-in with your CarsXE account. #### 1. Add the Connector - Open [claude.ai](https://claude.ai) and go to **Settings → Connectors** - Click **Add custom connector** - Enter the CarsXE MCP server URL: ``` https://mcp.carsxe.com/mcp ``` #### 2. Connect Your CarsXE Account - Click **Connect** next to the CarsXE connector - A CarsXE sign-in window opens — sign in with your CarsXE account and click **Authorize** - Claude.ai receives a secure access token tied to your account; your API key never leaves CarsXE > Requests made through the connector use your CarsXE subscription and count toward your plan's quota, exactly like direct API calls. #### 3. Use It - In any chat, Claude can now call CarsXE tools (e.g., get-vehicle-specs, get-market-value) - Try: _"Decode VIN 1HGBH41JXMN109186 and give me its market value"_ ### Claude Desktop #### 1. Download and Install Claude Desktop - Go to the official [Claude Desktop download page](https://claude.ai/download) - Download the installer for your operating system (macOS, Windows, or Linux) - Install Claude Desktop by following the on-screen instructions #### 2. Configure Claude Desktop to Use the CarsXE MCP Server **a. Open Claude Desktop Settings** - Launch the Claude Desktop app - Go to **Settings** click on CTRL + , (or CMD + , on Mac) to open settings - In the Settings window, go to the **Developer** tab (you may need to scroll or expand advanced options) - Click **Edit Config** (or **Open Config File**) **b. Edit the Configuration File** - This will open the `claude_desktop_config.json` file in your default text editor. - Locate the `"mcpServers"` section. If it does not exist, add it as shown below. - Add or update the following entry for CarsXE: ```json showLineNumbers { "mcpServers": { "carsxe": { "command": "npx", "args": [ "mcp-remote@latest", "https://mcp.carsxe.com/mcp", "--header", "X-API-Key: YOUR_API_KEY" ] } } } ``` - Replace `YOUR_API_KEY` with your actual CarsXE API Key - **Tip:** You can add multiple MCP servers under `"mcpServers"` if you use more than one. - **Save** the configuration file and close your editor. **c. Restart Claude Desktop** - Close and reopen the Claude Desktop app to apply the new configuration. > It may take a short delay for the changes to take effect. #### 3. Verify the CarsXE MCP Server is Available - After restarting, open Claude Desktop. - Go to the tools or plugins section (usually in the search bar or under a tools menu). - You should see **carsxe** listed as an available MCP server/tool. - Try running a CarsXE tool (e.g., get-vehicle-specs) to verify everything is working. > This will only work if your API key is associated with an active subscription. ### Cursor } > Install CarsXE MCP for Cursor The install dialog will open pre-filled with: | Field | Value | | ---------- | -------------------------- | | **Name** | CarsXE | | **Type** | streamableHttp | | **URL** | https://mcp.carsxe.com/mcp | | **Header** | `X-API-Key: YOUR_API_KEY` | Replace `YOUR_API_KEY` with your actual [CarsXE API key](https://carsxe.com/dashboard/developer), then click **Install**. ### Visual Studio Code (GitHub Copilot) } > Install CarsXE MCP for VS Code After clicking install, you'll need to add your API key manually: 1. Open **Command Palette** (`Ctrl+Shift+P` / `Cmd+Shift+P`) 2. Run **MCP: List Servers** 3. Find **CarsXE** in the list and click on it 4. Click **Show Configuration** 5. Replace `YOUR_API_KEY` with your actual [CarsXE API key](https://carsxe.com/dashboard/developer): ```json showLineNumbers { "mcpServers": { "CarsXE": { "type": "http", "url": "https://mcp.carsxe.com/mcp", "headers": { "X-API-Key": "YOUR_API_KEY" } } } } ``` 6. Save the file — VS Code will connect automatically. > **Note:** Make sure you have the **GitHub Copilot** extension installed and agent mode enabled (`chat.agent.enabled` in VS Code settings). ### Windsurf #### 1. Open MCP Configuration - Go to **Windsurf Settings** → **MCP** (or press `Ctrl+,` and search for MCP) - Click **"Edit Config"** to open `~/.codeium/windsurf/mcp_config.json` #### 2. Add the CarsXE Server ```json showLineNumbers { "mcpServers": { "carsxe": { "command": "npx", "args": [ "mcp-remote@latest", "https://mcp.carsxe.com/mcp", "--header", "X-API-Key: YOUR_API_KEY" ] } } } ``` #### 3. Restart Windsurf ### Claude CLI The Claude CLI supports direct HTTP connections to MCP servers. #### 1. Add the Server **Using the Command Line:** ```bash claude mcp add --transport http carsxe https://mcp.carsxe.com/mcp \ --header "X-API-Key: YOUR_API_KEY" ``` **Manual Configuration:** Edit `~/.claude.json`: ```json showLineNumbers { "mcpServers": { "carsxe": { "type": "http", "url": "https://mcp.carsxe.com/mcp", "headers": { "X-API-Key": "YOUR_API_KEY" } } } } ``` #### 2. Verify and Start List configured servers: ```bash claude mcp list ``` Start Claude CLI: ```bash claude ``` ### Gemini CLI #### 1. Configure the Server Edit: `~/.gemini/settings.json` ```json showLineNumbers { "theme": "Default", "selectedAuthType": "oauth-personal", "mcpServers": { "carsxe": { "url": "https://mcp.carsxe.com/mcp", "headers": { "X-API-Key": "YOUR_API_KEY" } } } } ``` Replace `YOUR_API_KEY` with your actual [CarsXE API key](https://carsxe.com/dashboard/developer). #### 2. Start Gemini ```bash gemini ``` The CarsXE MCP server will be available immediately. ### Kiro CLI #### 1. Configure the Server Ensure you have the [Kiro CLI tool installed](https://kiro.dev/cli/) on your machine. Create or edit `~/.kiro/settings/mcp.json`: ```json showLineNumbers { "mcpServers": { "carsxe": { "url": "https://mcp.carsxe.com/mcp", "headers": { "X-API-Key": "YOUR_API_KEY" }, "disabled": false } } } ``` Replace `YOUR_API_KEY` with your actual [CarsXE API key](https://carsxe.com/dashboard/developer). #### 2. Connect 1. Open your terminal and run: ```bash kiro-cli ``` 2. Activate MCP servers: ```bash /mcp ``` 3. The CarsXE server will be listed and ready to use ### Codex CLI #### 1. Configure the Server Ensure you have the [Codex CLI tool installed](https://developers.openai.com/codex/cli/) on your machine. Edit `~/.codex/config.toml`: ```toml showLineNumbers [mcp_servers.carsxe] url = "https://mcp.carsxe.com/mcp" http_headers = { "X-API-Key" = "YOUR_API_KEY" } ``` Replace `YOUR_API_KEY` with your actual [CarsXE API key](https://carsxe.com/dashboard/developer). #### 2. Start Codex ```bash codex ``` Then list MCP servers: ```bash /mcp ``` The CarsXE server will be available in the list. ## Example Usage Here are some example prompts you can try: Can you decode this VIN: 1HGBH41JXMN109186 and tell me the market value? What recalls exist for a 2020 Honda Civic with VIN SHHFK7H47LU419620? Show me images of a 2019 Tesla Model 3 Decode this license plate: ABC123 from California ## Available Tools For a full list of supported tools and their descriptions, visit the [CarsXE Products page](https://carsxe.com/all-products). ### Supported Regions - **United States**: Full coverage for all tools - **Canada**: VIN decoding and market values - **International**: VIN decoding for major markets - **Europe**: Limited VIN decoding support ## Troubleshooting ### Common Issues **Authentication Error** - Verify your API key is correct - Ensure you have an active subscription with sufficient API credits - Check that your API key has the necessary permissions **Connection Issues** - For clients that launch the MCP server via `npx` (e.g., Claude Desktop, Windsurf), confirm Node.js is installed and accessible; for VS Code/Cursor setups that connect directly to the HTTP endpoint, Node.js is only needed if your client uses `npx` to start a local server. - Verify your internet connection - Check that the MCP server URL is correct: `https://mcp.carsxe.com/mcp` **Tool Not Found** - Restart your MCP client - Verify the configuration syntax - Check the server logs for errors ### Getting Help - **Documentation**: [Full API Documentation](https://carsxe.com/docs) - **Support**: [Contact Support](https://carsxe.com/support) Ready to revolutionize your AI-powered vehicle data workflows with CarsXE MCP server! --- # n8n Quickstart Guide > Connect CarsXE vehicle data APIs to your n8n workflows — decode VINs, look up license plates, check vehicle history, market values, recalls, and more using the official CarsXE node. Source: https://carsxe.com/docs/integrations/n8n-quickstart ## What is the CarsXE Node for n8n? The CarsXE node for n8n is an official community node that brings comprehensive vehicle data to your automation workflows. Decode VINs, look up license plates, fetch market values, run history reports, check recalls, and more — all without writing a single line of code. **n8n Integration Page**: [n8n.io/integrations/carsxe](https://n8n.io/integrations/carsxe/) **npm Package**: [n8n-nodes-carsxe](https://www.npmjs.com/package/n8n-nodes-carsxe) ## Prerequisites Before you begin, ensure you have: 1. A running n8n instance (cloud or self-hosted) 2. A CarsXE API account — [Sign in or create an account here](https://carsxe.com/signin) 3. Your CarsXE API key ## Installation ### Via Community Nodes (Recommended) 1. In your n8n instance, go to **Settings** → **Community Nodes** 2. Click **Install a community node** 3. Enter `n8n-nodes-carsxe` 4. Click **Install** ### Via npm (Self-hosted) ```bash # Global installation npm install -g n8n-nodes-carsxe # Then restart n8n n8n start ``` ### Via Docker ```bash docker run -d \ --name n8n \ -p 5678:5678 \ -e N8N_COMMUNITY_PACKAGES=n8n-nodes-carsxe \ -v n8n_data:/home/node/.n8n \ n8nio/n8n ``` ## Setup ### Step 1: Get Your API Key 1. Visit the [CarsXE API dashboard](https://carsxe.com/dashboard/developer) 2. Navigate to your API keys section 3. Copy your API key ### Step 2: Add CarsXE Credentials in n8n 1. In n8n, go to **Credentials** → **New** 2. Search for **CarsXE API** 3. Paste your API key and click **Save** ## Available Operations ### VIN Operations | Operation | Description | |-----------|-------------| | Decode VIN | Full vehicle specifications from a 17-character VIN | | Decode International VIN | Worldwide VIN support for non-US vehicles | | Get History Report | Ownership records and accident history | | Get Market Value | Current market valuation | | Get Safety Recalls | Manufacturer recall information | ### License Plate Operations | Operation | Description | |-----------|-------------| | Decode License Plate | Vehicle information from a plate number (US, CA, AU, UK, and more) | | Recognize Plate From Image | OCR extraction of a plate number from a photo URL | ### Vehicle Data Operations | Operation | Description | |-----------|-------------| | Get Images | Professional vehicle photos by make, model, and year | | Query by Year/Make/Model | Search vehicle data without a VIN | ### Diagnostic Operations | Operation | Description | |-----------|-------------| | Decode OBD Code | Interpret check engine and diagnostic trouble codes | | Extract VIN From Image | OCR extraction of a VIN from a photo URL | ## Example Workflows ### VIN Decoder API ``` [Webhook] → [CarsXE: Decode VIN] → [HTTP Response] ``` Receive a VIN via webhook and instantly return full vehicle specifications to the caller. ### License Plate Scanner ``` [Webhook] → [CarsXE: Decode License Plate] → [Database] ``` Accept a plate number and country, look up the vehicle, and store the result in your database. ### Daily Recall Checker ``` [Schedule] → [CarsXE: Get Safety Recalls] → [Email / Slack] ``` Run a scheduled check against a list of VINs and notify your team of any newly issued recalls. ### Market Value Monitor ``` [Schedule] → [CarsXE: Get Market Value] → [Google Sheets / CRM] ``` Periodically pull updated market valuations for your inventory and sync them to a spreadsheet or CRM. ## Quick Example: Decode a VIN Configure the **CarsXE** node with: | Field | Value | |-------|-------| | Resource | VIN | | Operation | Decode VIN | | VIN | `WBAFR7C57CC811956` | **Response:** ```json { "success": true, "vin": "WBAFR7C57CC811956", "year": "2012", "make": "BMW", "model": "7 Series", "trim": "750i", "engine": "4.4L V8 Turbocharged" } ``` ## Quick Example: License Plate Lookup Configure the **CarsXE** node with: | Field | Value | |-------|-------| | Resource | License Plate | | Operation | Decode License Plate | | Plate | `7XER187` | | Country | `US` | | State *(Additional Options)* | `CA` | **Response:** ```json { "success": true, "plate": "7XER187", "state": "CA", "make": "BMW", "model": "750Li" } ``` ## Troubleshooting ### Common Issues **"Request failed with status code 401"** - Check your API key in **Credentials** - Ensure your account has sufficient credits - Generate a new key from the [CarsXE Dashboard](https://carsxe.com/dashboard/developer) **"Invalid VIN format"** - VINs must be exactly 17 characters - Example: `WBAFR7C57CC811956` **Node not appearing after installation** - Refresh your browser - Clear the n8n cache: `rm -rf ~/.n8n/cache` - Restart your n8n instance Ready to automate your vehicle data workflows with CarsXE and n8n! --- # Node.js Quickstart Guide > Get started with CarsXE's Node.js SDK to integrate comprehensive vehicle data into your JavaScript and TypeScript applications. Source: https://carsxe.com/docs/integrations/nodejs-quickstart The CarsXE Node.js SDK provides a simple and powerful way to integrate vehicle data into your JavaScript and TypeScript applications. This guide will help you get started quickly. For more information, see the package on npm. ## Installation Install the CarsXE Node.js package using npm or yarn: `npm install carsxe-api` or `yarn add carsxe-api` ## Setup First, import the CarsXE client and initialize it with your API key: ```javascript const { CarsXE } = require("carsxe-api"); // Initialize the client const carsxe = new CarsXE("YOUR_API_KEY_HERE"); ``` For TypeScript: ```typescript import { CarsXE } from "carsxe-api"; const carsxe = new CarsXE("YOUR_API_KEY_HERE"); ``` ## Basic Usage ### VIN Specifications ```javascript const vin = 'WBAFR7C57CC811956'; carsxe .specs({ vin }) .then((vehicle) => console.log(vehicle.input.vin)) .catch((error) => console.error(error)); ``` Or using async/await: ```javascript async function decodeVIN() { try { const vehicle = await carsxe.specs({ vin: 'WBAFR7C57CC811956' }); console.log(vehicle.input.vin); } catch (error) { console.error("Error:", error); } } decodeVIN(); ``` ### International VIN Decoder ```javascript async function decodeInternationalVIN() { try { const intVin = await carsxe.internationalVinDecoder({ vin: 'WF0MXXGBWM8R43240' }); console.log(intVin); } catch (error) { console.error("Error:", error); } } ``` ### Market Value ```javascript async function getMarketValue() { try { const value = await carsxe.marketvalue({ vin: 'WBAFR7C57CC811956' }); console.log(value); } catch (error) { console.error("Error:", error); } } ``` ### Vehicle History ```javascript async function getVehicleHistory() { try { const history = await carsxe.history({ vin: 'WBAFR7C57CC811956' }); console.log(history); } catch (error) { console.error("Error:", error); } } ``` ### License Plate Decoder ```javascript async function decodePlate() { try { const plate = await carsxe.platedecoder({ plate: '7XER187', state: 'CA', country: 'US' }); console.log(plate); } catch (error) { console.error("Error:", error); } } ``` ### Vehicle Images ```javascript async function getVehicleImages() { try { const imgs = await carsxe.images({ make: 'BMW', model: 'X5', year: '2019' }); console.log(imgs); } catch (error) { console.error("Error:", error); } } ``` ### Vehicle Recalls ```javascript async function checkRecalls() { try { const recalls = await carsxe.recalls({ vin: '1C4JJXR64PW696340' }); console.log(recalls); } catch (error) { console.error("Error:", error); } } ``` ### Plate Image Recognition ```javascript async function recognizePlateFromImage() { try { const plateImg = await carsxe.plateImageRecognition({ imageUrl: 'https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public' }); console.log(plateImg); } catch (error) { console.error("Error:", error); } } ``` ### VIN OCR from Image ```javascript async function extractVINFromImage() { try { const vinOcr = await carsxe.vinOcr({ imageUrl: 'https://user-images.githubusercontent.com/5663423/30922082-64edb4fa-a3a8-11e7-873e-3fbcdce8ea3a.png' }); console.log(vinOcr); } catch (error) { console.error("Error:", error); } } ``` ### Year-Make-Model Search ```javascript async function searchByYearMakeModel() { try { const ymm = await carsxe.yearMakeModel({ year: '2023', make: 'Toyota', model: 'Camry' }); console.log(ymm); } catch (error) { console.error("Error:", error); } } ``` ### OBD Code Decoder ```javascript async function decodeOBDCode() { try { const obd = await carsxe.obdcodesdecoder({ code: 'P0115' }); console.log(obd); } catch (error) { console.error("Error:", error); } } ``` ### Lien and Theft ```javascript async function getLienAndTheft() { try { const lienTheft = await carsxe.lienAndTheft({ vin: '2C3CDXFG1FH762860' }); console.log(lienTheft); } catch (error) { console.error("Error:", error); } } ``` Start building powerful automotive applications with CarsXE's Node.js SDK! --- # OpenClaw Skill > Access the full suite of CarsXE vehicle data APIs directly from OpenClaw — decode VINs, look up license plates, get market values, check history, recalls, liens, OBD codes, and more. Source: https://carsxe.com/docs/integrations/openclaw-quickstart ## What is the CarsXE Skill for OpenClaw? [OpenClaw](https://openclaw.ai) is an AI agent platform that extends a conversational AI into a capable assistant through a skill system. The CarsXE skill gives your OpenClaw agent comprehensive automotive data capabilities — decode VINs, look up license plates, get market values, check vehicle history, recalls, lien and theft records, OBD codes, and more, all without leaving your agent environment. Skills are installed from [Clawhub](https://clawhub.ai), OpenClaw's official skill marketplace. The CarsXE skill is listed at [CarsXE](https://clawhub.ai/carsxe/carsxe). ## Installation Install the CarsXE skill from Clawhub with a single command: ```bash openclaw skills install carsxe ``` ## Setup ### Set Your CarsXE API Key After installation, configure the skill with your CarsXE API key: ```bash openclaw config set skills.entries.carsxe.env.CARSXE_KEY "cxe_live_YOUR_KEY" ``` Then restart the OpenClaw gateway for the change to take effect. Don't have an API key yet? Get one from the [CarsXE developer dashboard](https://carsxe.com/dashboard/developer). ### Verify the Key is Set The skill reads your key from the `CARSXE_KEY` environment variable. If it is missing or empty, OpenClaw will display an error. Re-run the config command above with your actual key and restart the gateway. ## Usage Examples The skill is auto-invoked based on context — just describe what you need naturally. OpenClaw selects the right endpoint and chains requests when required. ### Decode a VIN What are the specs for VIN WBAFR7C57CC811956? ### Decode a License Plate Decode California plate 7XER187. ### Get Market Value What's my car worth? VIN WBAFR7C57CC811956, 45k miles, clean condition, California. ### Check Safety Recalls Does VIN 1C4JJXR64PW696340 have any open safety recalls? ### Lien and Theft Check Check liens and theft records for VIN WBAFR7C57CC811956. ### Vehicle History Report Show me the full history report for VIN WBAFR7C57CC811956. ### Decode an International VIN Decode this international VIN: WF0MXXGBWM8R43240. ### Year/Make/Model Lookup Look up a 2020 Toyota Camry LE. ### OBD Code Diagnosis My check engine light shows P0300 — what does that mean? ### VIN from a Photo Extract the VIN from this photo: https://example.com/vin.jpg ### Plate from a Photo Extract the plate number from this photo: https://example.com/plate.jpg ### Vehicle Images Get vehicle images for a 2019 BMW X5. ## Chained Requests The skill automatically chains multiple API calls when a query requires it. For example: **"Is this plate stolen and does it have open recalls?"** 1. `GET /v2/platedecoder` — resolve the plate to a VIN 2. `GET /v1/lien-theft` + `GET /v1/recalls` — run both checks in parallel against the VIN OpenClaw handles the chaining transparently and presents a combined result. ## Error Handling | HTTP Status | Meaning | What Happens | | ----------- | ------- | ------------ | | `401` / `invalid key` | Bad or missing API key | OpenClaw prompts you to set the key via `openclaw config set` | | `404` / `no results` | VIN or plate not found | You are informed and asked to double-check the input | | `429` | Rate limit exceeded | The skill waits and retries automatically | | `5xx` | Server error | Retried once; error is reported if it persists | > The skill also checks the `error` field in JSON responses — CarsXE can return HTTP 200 with an error body, and these are caught and surfaced to you. ## Managing the Skill ### Update the Skill ```bash openclaw skills update carsxe ``` ### Disable Without Removing ```json { "skills": { "carsxe": { "enabled": false } } } ``` ## Troubleshooting **Authentication error / invalid key** - Run `openclaw config set skills.entries.carsxe.env.CARSXE_KEY "cxe_live_YOUR_KEY"` with your actual key - Restart the OpenClaw gateway after updating the key - Ensure your CarsXE account has an active subscription **Skill not found after install** - Restart your OpenClaw session - Verify installation with `openclaw skills list` - Check that `carsxe` is listed as `enabled: true` in your `openclaw.json` **Tool not being auto-invoked** - Ensure the skill is enabled in `openclaw.json` - Restart the gateway to reload the skill registry - Describe your request more specifically if the skill is not triggering ### Getting Help - **Clawhub listing**: [carsxe](https://clawhub.ai/carsxe/carsxe) - **CarsXE documentation**: [Full API Documentation](https://carsxe.com/docs) - **Support**: [Contact Support](https://carsxe.com/support) Ready to power your OpenClaw agent with comprehensive vehicle data from CarsXE! --- # PHP Quickstart Guide > Get started with CarsXE's PHP SDK to integrate comprehensive vehicle data into your PHP applications. Source: https://carsxe.com/docs/integrations/php-quickstart The CarsXE PHP SDK provides a simple and powerful way to integrate vehicle data into your PHP applications. This guide will help you get started quickly. For more information, see the package on Packagist. ## Installation Install the CarsXE PHP package using Composer: `composer require carsxe/carsxe` ## Setup First, require the autoloader and initialize the CarsXE client: ```php ## Basic Usage ### VIN Specifications ```php specs(['vin' => $vin]); echo $vehicle['input']['vin']; } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ### International VIN Decoder ```php intVinDecoder([ 'vin' => 'WF0MXXGBWM8R43240' ]); echo json_encode($intvin, JSON_PRETTY_PRINT); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ### Market Value ```php marketValue([ 'vin' => 'WBAFR7C57CC811956' ]); echo json_encode($marketvalue, JSON_PRETTY_PRINT); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ### Vehicle History ```php history([ 'vin' => 'WBAFR7C57CC811956' ]); echo json_encode($history, JSON_PRETTY_PRINT); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ### License Plate Decoder ```php plateDecoder([ 'plate' => '7XER187', 'state' => 'CA', 'country' => 'US' ]); echo json_encode($decoded_plate, JSON_PRETTY_PRINT); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ### Vehicle Images ```php images([ 'make' => 'BMW', 'model' => 'X5', 'year' => '2019' ]); echo json_encode($images, JSON_PRETTY_PRINT); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ### Vehicle Recalls ```php recalls([ 'vin' => '1C4JJXR64PW696340' ]); echo json_encode($recalls, JSON_PRETTY_PRINT); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ### Plate Image Recognition ```php plateImageRecognition([ 'upload_url' => 'https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public' ]); echo json_encode($plateimg, JSON_PRETTY_PRINT); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ### VIN OCR from Image ```php vinOcr([ 'upload_url' => 'https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public' ]); echo json_encode($vinocr, JSON_PRETTY_PRINT); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ### Year-Make-Model Search ```php yearMakeModel([ 'year' => '2012', 'make' => 'BMW', 'model' => '5 Series' ]); echo json_encode($yymm, JSON_PRETTY_PRINT); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ### OBD Code Decoder ```php obdCodesDecoder([ 'code' => 'P0115' ]); echo json_encode($obdcode, JSON_PRETTY_PRINT); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ### Lien and Theft ```php lienAndTheft([ 'vin' => '2C3CDXFG1FH762860' ]); echo json_encode($lienAndTheft, JSON_PRETTY_PRINT); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` Start building powerful automotive applications with CarsXE's PHP SDK! --- # Python Quickstart Guide > Get started with CarsXE's Python SDK to integrate comprehensive vehicle data into your Python applications. Source: https://carsxe.com/docs/integrations/python-quickstart The CarsXE Python SDK provides a simple and powerful way to integrate vehicle data into your Python applications. This guide will help you get started quickly. For more information, see the package on PyPI. ## Installation Install the CarsXE Python package using pip: `pip install carsxe` ## Setup First, import the CarsXE client and initialize it with your API key: ```python import asyncio from carsxe_api import CarsXE # Initialize the client carsxe = CarsXE('YOUR_API_KEY_HERE') ``` ## Basic Usage ### VIN Specifications ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('YOUR_API_KEY') vin = 'WBAFR7C57CC811956' try: vehicle = asyncio.run(carsxe.specs({"vin": vin})) print(vehicle["input"]["vin"]) except Exception as error: print(f"Error: {error}") ``` ### International VIN Decoder ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('YOUR_API_KEY') try: intvin = asyncio.run(carsxe.int_vin_decoder({"vin": "WF0MXXGBWM8R43240"})) print(intvin) except Exception as error: print(f"Error: {error}") ``` ### Market Value ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('YOUR_API_KEY') try: marketvalue = asyncio.run(carsxe.market_value({"vin": "WBAFR7C57CC811956"})) print(marketvalue) except Exception as error: print(f"Error: {error}") ``` ### Vehicle History ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('YOUR_API_KEY') try: history = asyncio.run(carsxe.history({"vin": "WBAFR7C57CC811956"})) print(history) except Exception as error: print(f"Error: {error}") ``` ### License Plate Decoder ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('YOUR_API_KEY') try: decoded_plate = asyncio.run(carsxe.plate_decoder({"plate": "7XER187", "state": "CA", "country": "US"})) print(decoded_plate) except Exception as error: print(f"Error: {error}") ``` ### Vehicle Images ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('YOUR_API_KEY') try: images = asyncio.run(carsxe.images({"make": "BMW", "model": "X5", "year": "2019"})) print(images) except Exception as error: print(f"Error: {error}") ``` ### Vehicle Recalls ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('YOUR_API_KEY') try: recalls = asyncio.run(carsxe.recalls({"vin": "1C4JJXR64PW696340"})) print(recalls) except Exception as error: print(f"Error: {error}") ``` ### Plate Image Recognition ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('YOUR_API_KEY') try: plateimg = asyncio.run(carsxe.plate_image_recognition({"upload_url": "https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public"})) print(plateimg) except Exception as error: print(f"Error: {error}") ``` ### VIN OCR from Image ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('YOUR_API_KEY') try: vinocr = asyncio.run(carsxe.vin_ocr({"upload_url": "https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public"})) print(vinocr) except Exception as error: print(f"Error: {error}") ``` ### Year-Make-Model Search ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('YOUR_API_KEY') try: yymm = asyncio.run(carsxe.year_make_model({"year": "2012", "make": "BMW", "model": "5 Series"})) print(yymm) except Exception as error: print(f"Error: {error}") ``` ### OBD Code Decoder ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('YOUR_API_KEY') try: obdcode = asyncio.run(carsxe.obd_codes_decoder({"code": "P0115"})) print(obdcode) except Exception as error: print(f"Error: {error}") ``` ### Lien and Theft ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('YOUR_API_KEY') try: lien_and_theft = asyncio.run(carsxe.lien_and_theft({"vin": "2C3CDXFG1FH762860"})) print(lien_and_theft) except Exception as error: print(f"Error: {error}") ``` Start building powerful automotive applications with CarsXE's Python SDK! --- # Ruby Quickstart Guide > Get started with CarsXE's Ruby gem to integrate comprehensive vehicle data into your Ruby applications. Source: https://carsxe.com/docs/integrations/ruby-quickstart The CarsXE Ruby gem provides a simple and powerful way to integrate vehicle data into your Ruby applications. This guide will help you get started quickly. For more information, see the gem on RubyGems. ## Installation Install the CarsXE Ruby gem using gem or bundler: `gem install carsxe` Or add it to your Gemfile: ```ruby gem 'carsxe' ``` Then run `bundle install`. ## Setup First, require the CarsXE client and initialize it with your API key: ```ruby require 'carsxe' # Initialize the client API_KEY = 'YOUR_API_KEY_HERE' carsxe = Carsxe::CarsXE.new(api_key: API_KEY) ``` ## Basic Usage ### VIN Specifications ```ruby vin = 'WBAFR7C57CC811956' begin vehicle = carsxe.specs('vin' => vin) puts vehicle['input']['vin'] rescue StandardError => error puts "Error: #{error.message}" end ``` ### International VIN Decoder ```ruby begin intvin = carsxe.int_vin_decoder('vin' => 'WF0MXXGBWM8R43240') puts intvin rescue StandardError => error puts "Error: #{error.message}" end ``` ### Market Value ```ruby begin marketvalue = carsxe.market_value('vin' => 'WBAFR7C57CC811956') puts marketvalue rescue StandardError => error puts "Error: #{error.message}" end ``` ### Vehicle History ```ruby begin history = carsxe.history('vin' => 'WBAFR7C57CC811956') puts history rescue StandardError => error puts "Error: #{error.message}" end ``` ### License Plate Decoder ```ruby begin decoded_plate = carsxe.plate_decoder('plate' => '7XER187', 'state' => 'CA', 'country' => 'US') puts decoded_plate rescue StandardError => error puts "Error: #{error.message}" end ``` ### Vehicle Images ```ruby begin images = carsxe.images('make' => 'BMW', 'model' => 'X5', 'year' => '2019') puts images rescue StandardError => error puts "Error: #{error.message}" end ``` ### Vehicle Recalls ```ruby begin recalls = carsxe.recalls('vin' => '1C4JJXR64PW696340') puts recalls rescue StandardError => error puts "Error: #{error.message}" end ``` ### Plate Image Recognition ```ruby begin plateimg = carsxe.plate_image_recognition('upload_url' => 'https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public') puts plateimg rescue StandardError => error puts "Error: #{error.message}" end ``` ### VIN OCR from Image ```ruby begin vinocr = carsxe.vin_ocr('upload_url' => 'https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public') puts vinocr rescue StandardError => error puts "Error: #{error.message}" end ``` ### Year-Make-Model Search ```ruby begin yymm = carsxe.year_make_model('year' => '2012', 'make' => 'BMW', 'model' => '5 Series') puts yymm rescue StandardError => error puts "Error: #{error.message}" end ``` ### OBD Code Decoder ```ruby begin obdcode = carsxe.obd_codes_decoder('code' => 'P0115') puts obdcode rescue StandardError => error puts "Error: #{error.message}" end ``` ### Lien and Theft ```ruby begin lien_and_theft = carsxe.lien_and_theft('vin' => '2C3CDXFG1FH762860') puts lien_and_theft rescue StandardError => error puts "Error: #{error.message}" end ``` Start building powerful automotive applications with CarsXE's Ruby gem! --- # Snowflake Quickstart Guide > Access comprehensive vehicle data directly in Snowflake through CarsXE's powerful API. This Native App provides an intuitive Streamlit interface and SQL callable procedures for seamless integration into your data workflows. Source: https://carsxe.com/docs/integrations/snowflake-quickstart # CarsXE Vehicle Data for Snowflake Get started with the [CarsXE Snowflake Native App](https://app.snowflake.com/marketplace/listing/GZ2FQZRTA1H/carsxe-vehicle-data-from-carsxe) for comprehensive vehicle data access directly in your Snowflake environment. ## Features - **Vehicle Data Endpoints** including VIN decoding, plate lookup, market value, history, images, recalls, Lien And Theft checks, and more - **Streamlit UI** with guided setup and interactive endpoint testing - **SQL Interface** for direct procedure calls in your queries and workflows - **Secure API Key Storage** encrypted within your Snowflake account - **Auto-Navigation** through setup steps for quick onboarding ## Prerequisites - A Snowflake account with Native App installation permissions - A CarsXE account with an active API key ([Sign up here](https://carsxe.com/register)) - The app only requires outbound access to `api.carsxe.com` and does not access any other external domains. ## Installation 1. **Install from Snowflake Marketplace** - Search for "CarsXE" - Select the "Vehicle Data from CarsXE" - Click "Get" and follow the installation prompts 2. **Open the App** - Navigate to the installed app in your Snowflake account - The setup wizard will launch automatically 3. **Complete Setup (3 Simple Steps)** The app guides you through each step: **Step 1: Connect External Access** - Click "Connect CarsXE EAI ↗" - Select or create an External Access Integration for `api.carsxe.com` **Step 2: Add Your API Key** - Enter your CarsXE API key - Click "Validate API key" to verify and save - **Note:** The API key is now stored securely using a bind variable in the `CORE.CONFIG` table to prevent SQL identifier issues. **Step 3: Start Using the APIs** - You're ready! Select an endpoint and make your first call ## Using the Streamlit UI 1. **Choose an Endpoint** from the dropdown menu (e.g., "Specs (VIN specs)") 2. **Enter Required Fields** (marked clearly in the form) 3. **Add Optional Parameters** if needed (expand "Optional parameters" section) 4. **Click "Call endpoint"** to get results ## Using SQL Directly You can call the app fully through SQL, without using the UI, via: ```sql CALL CORE.CALL_CARSXE_ENDPOINT( path => '', method => '', params => '' ); ``` **Parameters:** - `path` – API endpoint path (e.g., `"/specs"`, `/v2/platedecoder`, `/v2/marketvalue`). For a complete list of available endpoints and their versions, see the [CarsXE API Documentation](https://carsxe.com/docs) - `method` – `"GET"` or `"POST"` (most endpoints use GET; some endpoints like plate recognition and VIN OCR use POST. Check the [API Documentation](https://carsxe.com/docs) for endpoint-specific method requirements) - `params` – JSON string with endpoint-specific parameters (do not include `key`; the app injects it automatically) ### SQL Examples > **Important:** Before using these SQL examples, you must complete the setup steps in the Streamlit UI app, including configuring the External Access Integration (EAI) and adding your API key. See the [Installation](#installation) section above for details. #### Validating API Key ```sql -- Validate your CarsXE API key CALL CORE.VALIDATE_CARSXE_API_KEY('your_api_key_here'); ``` #### Saving API Key ```sql -- Save CarsXE API key in the secure CORE.CONFIG table CALL CORE.SET_CARSXE_API_KEY('your_api_key_here'); ``` > **Note:** The API key storage now uses a bind variable internally to avoid SQL compilation errors with identifiers. #### Specs by VIN ```sql CALL CORE.CALL_CARSXE_ENDPOINT( '/specs', 'GET', '{"vin":"WBAFR7C57CC811956"}' ); ``` #### Plate Decoder ```sql CALL CORE.CALL_CARSXE_ENDPOINT( '/v2/platedecoder', 'GET', '{"plate":"7XER187","country":"US","state":"CA"}' ); ``` #### Market Value ```sql CALL CORE.CALL_CARSXE_ENDPOINT( '/v2/marketvalue', 'GET', '{"vin":"WBAFR7C57CC811956"}' ); ``` #### Images ```sql CALL CORE.CALL_CARSXE_ENDPOINT( '/images', 'GET', '{"make":"toyota","model":"tacoma","year":"2018", "color":"blue","format":"json"}' ); ``` #### Plate Image Recognition (image URL) ```sql CALL CORE.CALL_CARSXE_ENDPOINT( '/platerecognition', 'POST', '{"upload_url":"https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public"}' ); ``` #### VIN OCR (image URL) ```sql CALL CORE.CALL_CARSXE_ENDPOINT( '/v1/vinocr', 'POST', '{"upload_url":"https://user-images.githubusercontent.com/5663423/30922082-64edb4fa-a3a8-11e7-873e-3fbcdce8ea3a.png"}' ); ``` #### Lien And Theft Check ```sql CALL CORE.CALL_CARSXE_ENDPOINT( '/v1/lien-theft', 'GET', '{"vin":"2C3CDXFG1FH762860"}' ); ``` Internally, each call automatically adds `key=` in the request to CarsXE. ## Security & Governance - The API key is stored securely in the `CORE.CONFIG` table using a bind variable to prevent SQL injection and identifier issues. - All external HTTP calls run through a Snowflake External Access Integration approved for the app, which follows Snowflake governance policies. - The app does not store, cache, or log CarsXE API responses outside the execution context of the request; it simply returns them to the caller (UI or SQL). ## Limitations - No built-in caching: each call goes directly to CarsXE, which means latency and rate limits depend on your CarsXE plan and network conditions. - The app does not modify or normalize CarsXE responses; it returns them as received (wrapped in JSON where necessary). ## Support - For API behavior, data quality, pricing, or rate limit issues, contact CarsXE support via their official channels. - For issues specific to this Snowflake Native App (installation errors, procedure failures, UI errors), use the contact information provided on the Snowflake Marketplace listing. --- # Swift Quickstart Guide > Get started with CarsXE's Swift package to integrate comprehensive vehicle data into your iOS, macOS, and other Swift applications. Source: https://carsxe.com/docs/integrations/swift-quickstart The CarsXE Swift package provides a simple and powerful way to integrate vehicle data into your Swift applications across iOS, macOS, tvOS, and watchOS. This guide will help you get started quickly. For more information, see the package on Swift Package Index. ## Installation ### Swift Package Manager Add the CarsXE Swift Package to your project by adding this dependency to your `Package.swift`: ```swift // Package.swift (example) dependencies: [ .package(url: "https://github.com/carsxe/carsxe-swift-package.git", branch: "main") ] ``` And include it in your target dependencies: ```swift // Package.swift (targets example) targets: [ .executableTarget( name: "YourApp", dependencies: [ .product(name: "carsxe", package: "carsxe-swift-package") ] ) ] ``` ### Xcode In Xcode, go to **File → Add Packages...** and enter: `https://github.com/carsxe/carsxe-swift-package.git` ## Setup First, import the CarsXE package and initialize it with your API key: ```swift import SwiftUI import carsxe struct ContentView: View { // Initialize the client let carsxe = CarsXE(apiKey: "YOUR_API_KEY_HERE") var body: some View { // Your UI code here Text("CarsXE Example") } } ``` ## Basic Usage ### VIN Specifications ```swift import carsxe class VehicleService { private let carsxe = CarsXE(apiKey: "YOUR_API_KEY_HERE") func decodeVIN() { let vin = "WBAFR7C57CC811956" do { let vehicle = try carsxe.specs(["vin": vin]) if let input = vehicle["input"] as? [String: Any], let vinValue = input["vin"] as? String { print("VIN: \(vinValue)") } } catch { print("Error: \(error)") } } } ``` ### International VIN Decoder ```swift func decodeInternationalVIN() { do { let intvin = try carsxe.intVinDecoder(["vin": "WF0MXXGBWM8R43240"]) print(intvin) } catch { print("Error: \(error)") } } ``` ### Market Value ```swift func getMarketValue() { do { let marketvalue = try carsxe.marketValue(["vin": "WBAFR7C57CC811956"]) print(marketvalue) } catch { print("Error: \(error)") } } ``` ### Vehicle History ```swift func getVehicleHistory() { do { let history = try carsxe.history(["vin": "WBAFR7C57CC811956"]) print(history) } catch { print("Error: \(error)") } } ``` ### License Plate Decoder ```swift func decodePlate() { do { let decodedPlate = try carsxe.plateDecoder([ "plate": "7XER187", "state": "CA", "country": "US" ]) print(decodedPlate) } catch { print("Error: \(error)") } } ``` ### Vehicle Images ```swift func getVehicleImages() { do { let images = try carsxe.images([ "make": "BMW", "model": "X5", "year": "2019" ]) print(images) } catch { print("Error: \(error)") } } ``` ### Vehicle Recalls ```swift func getRecalls() { do { let recalls = try carsxe.recalls(["vin": "1C4JJXR64PW696340"]) print(recalls) } catch { print("Error: \(error)") } } ``` ### Plate Image Recognition ```swift func recognizePlateFromImage() { do { let plateResult = try carsxe.plateImageRecognition( imageUrl: "https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public" ) print(plateResult) } catch { print("Plate image error: \(error)") } } ``` ### VIN OCR from Image ```swift func extractVINFromImage() { do { let vinocr = try carsxe.vinOCR( imageUrl: "https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public" ) print(vinocr) } catch { print("VIN OCR error: \(error)") } } ``` ### Year-Make-Model Search ```swift func searchByYearMakeModel() { do { let yymm = try carsxe.yearMakeModel([ "year": "2012", "make": "BMW", "model": "5 Series" ]) print(yymm) } catch { print("Error: \(error)") } } ``` ### OBD Code Decoder ```swift func decodeOBDCode() { do { let obdcode = try carsxe.obdCodesDecoder(["code": "P0115"]) print(obdcode) } catch { print("Error: \(error)") } } ``` ### Lien and Theft ```swift func getLienAndTheft() { do { let lienTheft = try carsxe.lienAndTheft(["vin": "2C3CDXFG1FH762860"]) print(lienTheft) } catch { print("Error: \(error)") } } ``` Start building powerful automotive applications with CarsXE's Swift package! --- # Latency & Regions > Lower request latency from Europe with the EU endpoint, plus connection-reuse and caching tips that apply globally. Source: https://carsxe.com/docs/latency-and-regions The CarsXE API is hosted in the United States (Iowa, `us-central1`). For customers based in the US this is already low-latency. For customers in Europe, every request would otherwise pay a transatlantic round-trip on top of the actual processing time — typically 80–150 ms before the request even reaches our servers. This page describes how to keep that overhead off your hot path. ## Use the EU endpoint from Europe Internationally relevant endpoints — the photo-based recognition APIs, the multi-country plate decoder, and the international VIN decoder — are also available in `europe-west1` (Belgium). There are two equivalent ways to reach the EU deployment; pick whichever is easier to configure in your client. ## eu-api.carsxe.com (regional hostname) Swap the hostname; keep the path identical to the US form. The EU hostname terminates in GCP `europe-west1` and proxies straight to the EU function deployment. ```bash curl -G https://eu-api.carsxe.com/v1/international-vin-decoder \ -d key=CARSXE_API_KEY \ -d vin=WF0MXXGBWM8R43240 ``` ```js const { data } = await axios.get("https://eu-api.carsxe.com/v1/international-vin-decoder", { params: { key: apiKey, vin }, }); ``` ```python import httpx params = { "key": "CARSXE_API_KEY", "vin": "WF0MXXGBWM8R43240", } with httpx.Client(base_url="https://eu-api.carsxe.com", timeout=30.0) as client: response = client.get("/v1/international-vin-decoder", params=params) response.raise_for_status() data = response.json() ``` ```php 'https://eu-api.carsxe.com', 'timeout' => 30, ]); $response = $client->get('/v1/international-vin-decoder', [ 'query' => [ 'key' => 'CARSXE_API_KEY', 'vin' => 'WF0MXXGBWM8R43240', ], ]); $data = json_decode($response->getBody()->getContents(), true); ``` ```ruby require 'json' require 'net/http' require 'uri' uri = URI('https://eu-api.carsxe.com/v1/international-vin-decoder') uri.query = URI.encode_www_form( key: 'CARSXE_API_KEY', vin: 'WF0MXXGBWM8R43240' ) response = Net::HTTP.get_response(uri) data = JSON.parse(response.body) ``` ```go package main import ( "encoding/json" "fmt" "net/http" "net/url" ) func main() { params := url.Values{} params.Set("key", "CARSXE_API_KEY") params.Set("vin", "WF0MXXGBWM8R43240") endpoint := "https://eu-api.carsxe.com/v1/international-vin-decoder?" + params.Encode() resp, err := http.Get(endpoint) if err != nil { panic(err) } defer resp.Body.Close() var data map[string]any if err := json.NewDecoder(resp.Body).Decode(&data); err != nil { panic(err) } fmt.Println(data) } ``` ```java import java.net.URI; import java.net.URLEncoder; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; String query = "key=" + URLEncoder.encode("CARSXE_API_KEY", StandardCharsets.UTF_8) + "&vin=" + URLEncoder.encode("WF0MXXGBWM8R43240", StandardCharsets.UTF_8); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://eu-api.carsxe.com/v1/international-vin-decoder?" + query)) .GET() .build(); HttpResponse response = HttpClient.newHttpClient() .send(request, HttpResponse.BodyHandlers.ofString()); ``` ```swift import Foundation var components = URLComponents(string: "https://eu-api.carsxe.com/v1/international-vin-decoder")! components.queryItems = [ URLQueryItem(name: "key", value: "CARSXE_API_KEY"), URLQueryItem(name: "vin", value: "WF0MXXGBWM8R43240"), ] let (data, _) = try await URLSession.shared.data(from: components.url!) let result = try JSONSerialization.jsonObject(with: data) ``` ```csharp using System.Net.Http.Json; using HttpClient client = new() { BaseAddress = new Uri("https://eu-api.carsxe.com") }; var url = $"/v1/international-vin-decoder?key={Uri.EscapeDataString(\"CARSXE_API_KEY\")}&vin={Uri.EscapeDataString(\"WF0MXXGBWM8R43240\")}"; var data = await client.GetFromJsonAsync(url); ``` ### Endpoints available in EU The EU deployment covers the APIs whose data is meaningful outside the US: - `/platedecoder`, `/v2/platedecoder` — multi-country plate decoder - `/platerecognition` — plate recognition from photos - `/v1/international-vin-decoder` — non-US VIN decoder - `/v1/vinocr` — VIN OCR from photos - `/images` — vehicle image search Other product endpoints (`/specs`, `/marketvalue`, `/v1/recalls`, `/history`, `/v1/lien-theft`, `/v1/ymm`, `/obdcodesdecoder`, etc.) are US-only — call them on `https://api.carsxe.com/...` without the `/eu` prefix. Requesting a US-only path on `eu-api.carsxe.com` returns `404`. --- # Organizations > Organizations let you share CarsXE API access with your team. Invite members, assign roles, and manage organization-wide API keys from a single workspace. Source: https://carsxe.com/docs/organizations Organizations are shared workspaces that let you collaborate with your team on CarsXE. Instead of every teammate managing their own account and API key, an organization gives you a single place to invite members, control what they can do with roles, and manage **organization API keys** that everyone can use. You manage organizations from your [dashboard](https://carsxe.com/dashboard). No separate API is required. Billing is **not** organization-specific. Usage from organization API keys rolls up to the organization owner's personal subscription. There is no separate per-organization plan or invoice. ## Key concepts
### Roles & permissions Owner, admin, editor, and viewer roles control what each member can do. ### Team & invitations Invite teammates by email. Invitations expire after 7 days. ### Organization API keys Shared keys that authenticate API requests for the whole team. ### Billing Organization usage is billed to the owner's personal subscription.
## Roles and permissions Every member of an organization has one of four roles. The **owner** is the user who created the organization and cannot be removed. All other members are assigned one of the remaining roles. | Capability | Owner | Admin | Editor | Viewer | | --- | :---: | :---: | :---: | :---: | | View team & API keys | Yes | Yes | Yes | Yes | | Create API keys | Yes | Yes | Yes | No | | Enable/disable & rename API keys | Yes | Yes | Yes | No | | Delete API keys | Yes | Yes | No | No | | Invite members | Yes | Yes | No | No | | Update member roles & remove members | Yes | Yes | No | No | | Invite, promote, or manage admins | Yes | No | No | No | | Edit organization settings | Yes | No | No | No | | Delete the organization | Yes | No | No | No | Admins can manage editors and viewers, but only the owner can invite, promote, or manage other admins. The owner cannot be removed or have their role changed. ## Team and invitations Owners and admins can invite teammates to the organization by email, one at a time or in bulk. Each invitation is sent with the role you choose for the invitee. - **Expiry** — Invitations expire 7 days after they are sent. - **Accepting** — The invitee receives an email with a link to accept. They must sign in (or create an account) with the invited email address to join. - **Pending & failed invites** — The team view lists active members alongside any pending or failed invitations so you can resend them. - **Removing members** — Owners and admins can remove members at any time. Removing a member immediately revokes their access to the organization. ## Organization API keys Organization API keys work exactly like personal API keys when calling the CarsXE API — you pass them as the `key` parameter on any endpoint. The difference is that an organization key belongs to the workspace, so any current member can use it and key management is shared across the team. - **Shared access** — Any member can use an organization key to make API requests, subject to their role's permissions for managing keys. - **Usage tracking** — Each key tracks lifetime usage and monthly usage broken down by API type. - **Status** — A key is active only while the organization owner's subscription is active. If the owner's subscription becomes inactive, the organization's keys stop working until it is reactivated. Use an organization API key the same way you use any CarsXE key: ```bash curl https://api.carsxe.com/v1/auth/validate \ -d key=ORGANIZATION_API_KEY ``` See [Authentication](https://carsxe.com/docs/authentication) for more on how API keys authenticate your requests. ## Billing Organizations are a collaboration and access-management layer — they are not a billing entity. When a request is made with an organization API key, the usage resolves to the **owner's** account and counts against the owner's personal subscription. This means: - There is no separate organization plan, invoice, or payment method. - All organization API usage is consumed from the owner's subscription quota. - If the owner's subscription is inactive, every organization API key is inactive until the subscription is restored. ## Deleting an organization Only the owner can delete an organization. Deleting an organization removes the team's access to its shared API keys. Be sure your team has migrated to other keys before deleting. ## Get started Ready to set up your team? Head to your [dashboard](https://carsxe.com/dashboard) to create an organization, invite members, and generate your first organization API key. --- # Quickstart > This guide will get you all set up and ready to use the CarsXE API. We’ll cover how to get started an API client and how to make your first API request. Source: https://carsxe.com/docs/quickstart This guide will get you all set up and ready to use the CarsXE API. We'll cover how to get started using one of our API clients and how to make your first API request. We'll also look at where to go next to find all the information you need to take full advantage of our powerful REST API. Before you can make requests to the CarsXE API, you will need to grab your API key from your dashboard. You find it under [Dashboard » Profile](https://carsxe.com/dashboard). ## Choose your client Before making your first API request, you need to pick which API client you will use. In addition to good ol' cURL HTTP requests, you can make an HTTP request using almost any programming language. ```bash # cURL is most likely already installed on your machine curl --version ``` ## Making your first API request After picking your preferred client, you are ready to make your first call to the CarsXE API. Below, you can see how to send a GET request to the Specifications endpoint to get a list of a vehicle's specification from a VIN. This is also known as VIN decoding. ```bash curl -G https://api.carsxe.com/specs \ -d key=CARSXE_API_KEY \ -d vin=WBAFR7C57CC811956 ``` ```js const axios = require("axios"); const apiKey = "CARSXE_API_KEY"; const vin = "WBAFR7C57CC811956"; try { const { data } = await axios.get("https://api.carsxe.com/specs", { params: { key: apiKey, vin: vin, }, }); } catch (e) { console.error(e); } ``` ```js import { CarsXE } from "carsxe-api"; const carsxe = new CarsXE("CARSXE_API_KEY"); const vin = "WBAFR7C57CC811956"; try { const vehicle = await carsxe.specs({ vin }); console.log(vehicle); } catch (error) { console.error(error); } ``` ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('CARSXE_API_KEY') vin = 'WBAFR7C57CC811956' try: vehicle = asyncio.run(carsxe.specs({"vin": vin})) print(vehicle) except Exception as e: print(f"Error: {e}") ``` ```php specs(['vin' => $vin]); print_r($vehicle); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ```ruby require 'carsxe' API_KEY = 'CARSXE_API_KEY' carsxe = Carsxe::CarsXE.new(api_key: API_KEY) vin = 'WBAFR7C57CC811956' begin vehicle = carsxe.specs('vin' => vin) puts vehicle rescue StandardError => error puts "Error: #{error.message}" end ``` ```go package main import ( "fmt" "github.com/carsxe/carsxe-go-package" ) func main() { client := carsxe.New("CARSXE_API_KEY") vin := "WBAFR7C57CC811956" vehicle := client.Specs(map[string]string{"vin": vin}) fmt.Println(vehicle) } ``` ```java import io.github.carsxe.CarsXE; import java.util.Map; import java.util.HashMap; public class Main { public static void main(String[] args) { CarsXE carsxe = new CarsXE("CARSXE_API_KEY"); Map params = new HashMap<>(); params.put("vin", "WBAFR7C57CC811956"); try { Map vehicle = carsxe.specs(params); System.out.println(vehicle); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } } } ``` ```swift import carsxe let carsxe = CarsXE(apiKey: "CARSXE_API_KEY") let vin = "WBAFR7C57CC811956" do { let vehicle = try carsxe.specs(["vin": vin]) print(vehicle) } catch { print("Error: \(error)") } ``` ```csharp using carsxe; using System; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { string API_KEY = "CARSXE_API_KEY"; CarsXE carsxe = new CarsXE(API_KEY); string vin = "WBAFR7C57CC811956"; try { var vehicle = await carsxe.Specs(new Dictionary { { "vin", vin } }).Result; Console.WriteLine(vehicle.RootElement); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } } } ``` ## What's next? Great, you're now set up with an API client and have made your first request to the API. Here are a few links that might be handy as you venture further into the CarsXE API: - [Grab your API key from the CarsXE dashboard](https://carsxe.com/dashboard) - [Check out the Specifications endpoint](https://carsxe.com/docs/v1/specifications) - [Learn about the different error messages in CarsXE](https://carsxe.com/docs/errors) --- # Rate Limits & Quotas > How CarsXE usage limits work — included monthly volume, the 429 response shape, overage billing, usage alerts, and how to handle limits in code. Source: https://carsxe.com/docs/rate-limits CarsXE limits are **volume-based quotas** tied to your subscription, not per-second throttles. Each API has an included monthly volume for your tier; when you reach it, what happens next depends on your overage settings. This page explains how the quotas work, exactly what a `429` looks like, and how to handle limits gracefully in code. There are no per-second request throttles on standard plans, but keep burst concurrency reasonable — extremely aggressive parallel traffic can still be rejected upstream before it reaches your quota. --- ## How quotas work - **Per-API quotas.** Each API (Specs, Market Value, History, …) has its own included monthly volume, determined by your subscription tier. A few related APIs share a combined quota. - **Monthly reset.** Usage counters reset at the start of each billing period. Sandbox lifetime allowances are one-time — they do not reset monthly. - **Units, not requests.** Most requests consume 1 unit. Bulk endpoints consume multiple units in one request — for example [Recalls Batch](https://carsxe.com/docs/v1/recalls-batch) (1 unit per VIN) and [YMM Options](https://carsxe.com/docs/v1/ymm-options) bulk variants (`dimension=variants` + year + make → 1 unit per model; see `modelCount`). - **Failed validation is free.** Requests rejected with a `400` validation error (missing VIN, bad parameter, etc.) are blocked before any lookup and don't count against your quota. Credit-wallet accounts should send an `Idempotency-Key` header on retried requests. An API key authenticates a request but does not deduplicate it. CarsXE deduplicates wallet deductions only when the same `Idempotency-Key` is reused for the same logical request; requests without that header are billed independently. This is especially important for batch submits. - **Plan-gated APIs.** Some APIs aren't included in lower tiers at all. Calling one returns a `403` — see [Errors](https://carsxe.com/docs/errors) — not a `429`. You can see your current usage per API at any time on the [developer dashboard](https://carsxe.com/dashboard/developer). --- ## What happens when you hit the limit There are two possible behaviors, controlled by your **overage billing preference** in the dashboard: | Overage billing | Behavior past the included quota | | --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | | **Enabled** (default on plans with overage pricing) | Requests keep succeeding. Each unit past your included volume is billed at your tier's per-call overage rate. You will never see a quota `429`. | | **Disabled** (opt-out) | Requests are rejected with a `429` until the period resets or you re-enable overage. | Enterprise plans use custom pricing and monthly invoicing — included volume and overage terms are set in your contract. --- ## The 429 response Quota errors use the standard [error envelope](https://carsxe.com/docs/errors) plus a `usage` object: Units consumed so far this billing period (or in total, for Sandbox lifetime allowances). Your included volume for this API on your current tier. Units left before the limit. 0 when the request was rejected. The `message` tells you which API hit its limit, the billing period (month/year), your tier, and the exact numbers. Variants you may see: - `This request requires N units.` — appended when a bulk request would exceed the limit even though `current < limit`. Reduce the batch size to fit within `remaining`, or split it across billing periods. - `Please upgrade your tier to continue using the API.` — appended for one-time (Sandbox) allowances that never reset. Waiting won't help; upgrade to continue. - `Enable overage billing in your dashboard billing preferences to continue with overage charges: …` — appended when you've opted out of overage but your plan supports it. Re-enable overage on the [developer dashboard](https://carsxe.com/dashboard/developer) and the same request will succeed immediately. --- ## Usage alerts You don't have to discover a quota `429` in production. CarsXE emails the account owner when an API reaches **80%**, **90%**, and **100%** of its included volume, so you can upgrade or enable overage before requests start failing. --- ## Handling 429s in code A quota `429` is **not transient** — unlike a `5xx`, retrying with backoff won't make it succeed. The right response depends on `usage`: Two practical patterns: - **Track `usage.remaining` proactively.** It's returned on quota errors, and your live numbers are always on the dashboard. Alerting at your own threshold (say 75%) gives you more lead time than the built-in emails. - **Size batches to fit.** Before a bulk call, make sure the VIN count is at or below your remaining units — a rejected batch consumes nothing, but it also accomplishes nothing. For generic retry/backoff handling of `5xx` errors, see the full code samples on the [Errors](https://carsxe.com/docs/errors) page. --- ## Raising your limits - **Upgrade your tier** for more included volume on every API — compare plans on the [pricing page](https://carsxe.com/pricing). - **Enable overage billing** to never be blocked: usage past the included volume is billed per call at your tier's rate. - **Go enterprise** for high or spiky volume: custom quotas, custom pricing, and consolidated monthly invoicing. [Contact us](https://carsxe.com/contact) to talk through your numbers. --- # Vehicle APIs (v1) > Below are the APIs available in version v1 with brief descriptions. Select one to view full documentation and examples. Source: https://carsxe.com/docs/v1
### Specifications Retrieve detailed vehicle specifications from VINs. ### International VIN Decoder Decode international VINs and get vehicle attributes. ### Recalls Search safety recalls based on a vehicle's VIN. ### Recalls by YMM Search safety recalls by year, make, and model — no VIN needed. ### Recalls Batch Search safety recalls for many VINs in a single batch. ### Lien & Theft Check for active liens and theft records. ### Plate Decoder Retrieve vehicle details from license plates/registrations. ### Images Retrieve representative vehicle images. ### Market Value Get estimated vehicle market values from VINs. ### History Retrieve vehicle history reports from VINs. ### Plate Image Recognition Detect and read license plates from image URLs. ### VIN OCR Identify and extract VINs from images. ### Year Make Model Look up attributes by year, make, model, and trim. ### Year Make Model Options Populate Year, Make, Model, and Variant dropdown menus. Billing: most calls cost 1 unit. Bulk variants (`dimension=variants` + year + make) cost 1 unit per model. ### OBD Codes Decoder Decode OBD-II diagnostic trouble codes. ### Ownership Resolve vehicle owners, contacts, and address residents.
--- # Vehicle History > CarsXE API reference to get comprehensive vehicle history through a quick search. Source: https://carsxe.com/docs/v1/history The Vehicle History API provides access to a library of vehicle history data. The Vehicle History API returns a comprehensive set of history records for used and new cars by VIN based on millions of historical vehicle sales stored in CarsXE's sales database. --- This endpoint allows you to retrieve the history for a specific vehicle based on its VIN. ## Required attributes Your CarsXE API key. The 17 character long vehicle identification number. ## Optional attributes The format of the response. One of `json` or `xml`. Defaults to `json`. --- ## Response attributes The vehicle identification number. Whether the history data has been retrieved. A list of dynamic maps of junk and salvage information. A list of insurance records. The count of brand records. Description of the different brand codes and their meaning. Boolean of whether VIN changed or not. Current Title Information of vehicle. Detailed history information on the vehicle. The status of the call. For example it can return a `404` for a failure. A dynamic map of the code and message if available. ```json "error": { "code": "report_not_found", "message": null } ``` You may be use the following VINs for test:
  • WBAFR7C57CC811956
},{question: "Is the Vehicle History API included in the free Sandbox?", answer: <>Yes! The Vehicle History API is included in the free Sandbox with a lifetime limit of 1 API call. For more information visit our pricing page.}]} hidePadding /> ```bash curl -G https://api.carsxe.com/history \ -d key=CARSXE_API_KEY \ -d vin=WBAFR7C57CC811956 ``` ```js import { CarsXE } from "carsxe-api"; const carsxe = new CarsXE("CARSXE_API_KEY"); const vin = "WBAFR7C57CC811956"; try { const vehicle = await carsxe.history({ vin }); console.log(vehicle); } catch (error) { console.error(error); } ``` ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('CARSXE_API_KEY') vin = 'WBAFR7C57CC811956' try: vehicle = asyncio.run(carsxe.history({"vin": vin})) print(vehicle) except Exception as e: print(f"Error: {e}") ``` ```php history(['vin' => $vin]); print_r($vehicle); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ```ruby require 'carsxe' API_KEY = 'CARSXE_API_KEY' carsxe = Carsxe::CarsXE.new(api_key: API_KEY) vin = 'WBAFR7C57CC811956' begin vehicle = carsxe.history('vin' => vin) puts vehicle rescue StandardError => error puts "Error: #{error.message}" end ``` ```go package main import ( "fmt" "github.com/carsxe/carsxe-go-package" ) func main() { client := carsxe.New("CARSXE_API_KEY") vin := "WBAFR7C57CC811956" vehicle := client.History(map[string]string{"vin": vin}) fmt.Println(vehicle) } ``` ```java import io.github.carsxe.CarsXE; import java.util.Map; import java.util.HashMap; public class Main { public static void main(String[] args) { CarsXE carsxe = new CarsXE("CARSXE_API_KEY"); Map params = new HashMap<>(); params.put("vin", "WBAFR7C57CC811956"); try { Map vehicle = carsxe.history(params); System.out.println(vehicle); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } } } ``` ```swift import carsxe let carsxe = CarsXE(apiKey: "CARSXE_API_KEY") let vin = "WBAFR7C57CC811956" do { let vehicle = try carsxe.history(["vin": vin]) print(vehicle) } catch { print("Error: \(error)") } ``` ```csharp using carsxe; using System; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { string API_KEY = "CARSXE_API_KEY"; CarsXE carsxe = new CarsXE(API_KEY); string vin = "WBAFR7C57CC811956"; try { var vehicle = await carsxe.History(new Dictionary { { "vin", vin } }); Console.WriteLine(vehicle); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } } } ``` ```json showLineNumbers {{ title: 'Response' }} { "vin": "WBAFR7C57CC811956", "success": true, "junkAndSalvageInformation": [ { "ReportingEntityAbstract": { "ReportingEntityCategoryCode": "J", "IdentificationID": "P000001", "ReportingEntityCategoryText": "Junk and Salvage", "EntityName": "Copart, Inc.", "LocationCityName": "Dallas", "LocationStateUSPostalServiceCode": "TX", "TelephoneNumberFullID": "9723915728", "ContactEmailID": "" }, "VehicleObtainedDate": "2016-12-06T00:00:00.000Z", "VehicleDispositionText": "TO BE DETERMINED", "VehicleIntendedForExportCode": "N" }, { "ReportingEntityAbstract": { "ReportingEntityCategoryCode": "J", "IdentificationID": "P000001", "ReportingEntityCategoryText": "Junk and Salvage", "EntityName": "Copart, Inc.", "LocationCityName": "Dallas", "LocationStateUSPostalServiceCode": "TX", "TelephoneNumberFullID": "9723915728", "ContactEmailID": "" }, "VehicleObtainedDate": "2016-12-06T00:00:00.000Z", "VehicleDispositionText": "SOLD", "VehicleIntendedForExportCode": "N" }, { "ReportingEntityAbstract": { "ReportingEntityCategoryCode": "J", "IdentificationID": "P801910", "ReportingEntityCategoryText": "Junk and Salvage", "EntityName": "AUTOBIDMASTER LLC", "LocationCityName": "PORTLAND", "LocationStateUSPostalServiceCode": "OR", "TelephoneNumberFullID": "5032984300", "ContactEmailID": "" }, "VehicleObtainedDate": "2015-09-17T00:00:00.000Z", "VehicleDispositionText": "SOLD", "VehicleIntendedForExportCode": "N" }, { "ReportingEntityAbstract": { "ReportingEntityCategoryCode": "J", "IdentificationID": "P000001", "ReportingEntityCategoryText": "Junk and Salvage", "EntityName": "Copart, Inc.", "LocationCityName": "Fairfield", "LocationStateUSPostalServiceCode": "CA", "TelephoneNumberFullID": "7076395294", "ContactEmailID": "" }, "VehicleObtainedDate": "2015-08-11T00:00:00.000Z", "VehicleDispositionText": "TO BE DETERMINED", "VehicleIntendedForExportCode": "N" }, { "ReportingEntityAbstract": { "ReportingEntityCategoryCode": "J", "IdentificationID": "P000001", "ReportingEntityCategoryText": "Junk and Salvage", "EntityName": "Copart, Inc.", "LocationCityName": "Fairfield", "LocationStateUSPostalServiceCode": "CA", "TelephoneNumberFullID": "7076395294", "ContactEmailID": "" }, "VehicleObtainedDate": "2015-08-11T00:00:00.000Z", "VehicleDispositionText": "SOLD", "VehicleIntendedForExportCode": "N" }, { "ReportingEntityAbstract": { "ReportingEntityCategoryCode": "J", "IdentificationID": "P000116", "ReportingEntityCategoryText": "Junk and Salvage", "EntityName": "IAA", "LocationCityName": "WESTCHESTER", "LocationStateUSPostalServiceCode": "IL", "TelephoneNumberFullID": "7084927000", "ContactEmailID": "" }, "VehicleObtainedDate": "2015-06-04T00:00:00.000Z", "VehicleDispositionText": "TO BE DETERMINED", "VehicleIntendedForExportCode": "N" }, { "ReportingEntityAbstract": { "ReportingEntityCategoryCode": "J", "IdentificationID": "P000116", "ReportingEntityCategoryText": "Junk and Salvage", "EntityName": "IAA", "LocationCityName": "WESTCHESTER", "LocationStateUSPostalServiceCode": "IL", "TelephoneNumberFullID": "7084927000", "ContactEmailID": "" }, "VehicleObtainedDate": "2015-06-04T00:00:00.000Z", "VehicleDispositionText": "SOLD", "VehicleIntendedForExportCode": "N" } ], "insuranceInformation": [ { "ReportingEntityAbstract": { "ReportingEntityCategoryCode": "I", "IdentificationID": "I200697", "ReportingEntityCategoryText": "Insurers", "EntityName": "MERCURY GENERAL GROUP", "LocationCityName": "BREA", "LocationStateUSPostalServiceCode": "CA", "TelephoneNumberFullID": "7146716600", "ContactEmailID": "DBALES@MERCURYINSURANCE.COM" }, "VehicleObtainedDate": "2015-06-05T00:00:00.000Z" } ], "brandsRecordCount": 1, "brandsInformation": [ { "code": "00", "name": "Clear", "description": "No brand exists for the vehicle." }, { "code": "01", "name": "Flood damage", "description": "\"Vehicle damaged by freshwater flood (or it is unknown whether the damage was caused by fresh water or salt water).\"" }, { "code": "02", "name": "Fire damage", "description": "Vehicle damaged by fire." }, { "code": "03", "name": "Hail damage", "description": "Vehicle damaged by hail." }, { "code": "04", "name": "Salt water damage", "description": "Vehicle damaged by saltwater flood." }, { "code": "05", "name": "Vandalism", "description": "Vehicle damaged by vandals." }, { "code": "06", "name": "Kit", "description": "\"A Vehicle that has been built by combining a chassis with a different (non-matching VIN) frame engine and body parts. The VIN on the chassis is used as the vehicle's VIN.\"" }, { "code": "07", "name": "Dismantled", "description": "The vehicle can only be sold as parts and cannot be legally driven." }, { "code": "08", "name": "Junk", "description": "The vehicle is incapable of safe operation for use on the roads or highways and has no resale value except as a source of parts or \"scrap or the vehicle's owner has irreversibly designated the vehicle\" as a source of parts or scrap. This vehicle shall never be titled or \"registered. Also known as non-repairable scrapped or destroyed.\"" }, { "code": "09", "name": "Rebuilt", "description": "\"The vehicle previously branded \"\"salvage\"\" has passed anti-theft and safety inspections or other jurisdiction procedures to ensure the vehicle was rebuilt to required standards. Also known as prior salvage (salvaged).\"" }, { "code": "10", "name": "Reconstructed", "description": "\"A vehicle that has been permanently altered from original construction by removing adding or substituting major components.\"" }, { "code": "11", "name": "Salvage", "description": "\"Damage or Not Specified - Any vehicle which has been wrecked\" \"destroyed or damaged to the extent that the total estimated or actual\" cost of parts and labor to rebuild or reconstruct the vehicle to its pre-accident condition and for legal operation on roads or highways exceeds a jurisdiction-defined percentage of the retail value of the vehicle. The retail value of the vehicle is determined by a current edition of a nationally recognized compilation (to include automated data bases) of retail values. Salvage--Damage or Not Specified also includes any vehicle to which an insurance company acquires owner- ship pursuant to a damage \"settlement or any vehicle that the vehicle's owner may wish to\" \"designate as a salvage vehicle by obtaining a salvage title without\" \"regard to extent of the vehicle's damage and repairs or any vehicle\" for which the jurisdiction cannot distinguish the reason the vehicle was designated salvage.", "record": { "ReportingEntityAbstract": { "ReportingEntityCategoryCode": "S", "IdentificationID": "CA", "ReportingEntityCategoryText": "", "EntityName": "CALIFORNIA" }, "VehicleBrandCode": "11", "VehicleBrandDate": { "Date": "2015-07-01T00:00:00.000Z" } } }, { "code": "12", "name": "Test Vehicle", "description": "The vehicle is built and retained by the manufacturer for testing." }, { "code": "13", "name": "Refurbished", "description": "\"Any vehicle modified by the installation of a new cab and chassis for the existing coach which has been renovated resulting in a vehicle of greater value or a vehicle with a new style.\"" }, { "code": "14", "name": "Collision", "description": "Vehicle damaged by collision." }, { "code": "15", "name": "Reserved", "description": "\"Eliminated in favor of code 09. Code 15 was \"\"Prior Salvage.\"\"\"" }, { "code": "16", "name": "Salvage Retention", "description": "The vehicle is branded salvage and is kept by the owner." }, { "code": "17", "name": "Prior Taxi", "description": "Vehicle previously registered as a taxi." }, { "code": "18", "name": "Prior Police", "description": "Vehicle previously registered as a police vehicle." }, { "code": "19", "name": "Original Taxi", "description": "Vehicle is currently registered as a taxi." }, { "code": "20", "name": "Original Police", "description": "Vehicle is currently registered as a police vehicle." }, { "code": "21", "name": "Remanufactured", "description": "Vehicle was reconstructed by the manufacturer." }, { "code": "22", "name": "Gray Market", "description": "\"Vehicle was manufactured for use outside of the United States and has been brought into the United States. Brand '22' has been replaced by brands '45' and '46' as of 6/25/01.\"" }, { "code": "23", "name": "Warranty Return", "description": "\"Vehicle returned to the manufacturer because of a breach in the warranty.\"" }, { "code": "24", "name": "Antique", "description": "The vehicle is over 50 years old." }, { "code": "25", "name": "Classic", "description": "\"The vehicle is over 20 years old and adheres to other jurisdiction-specific criteria e.g. vehicle make condition etc.\"" }, { "code": "26", "name": "Agricultural Vehicle", "description": "\"The vehicle will primarily be operated on private roads for agricultural purposes.\"" }, { "code": "27", "name": "Logging Vehicle", "description": "\"The vehicle will primarily be operated on private roads for logging purposes.\"" }, { "code": "28", "name": "Street Rod", "description": "\"The vehicle has been modified to not conform with the manufacturer's specifications and the modifications adhere to jurisdiction-specific criteria.\"" }, { "code": "29", "name": "\"Vehicle Contains Reissued VIN\"", "description": "\"The chassis VIN has been reissued i.e. the same VIN is reused.\"" }, { "code": "30", "name": "Replica", "description": "\"A vehicle with a body built to resemble and be a reproduction of another vehicle of a given year and given manufacturer.\"" }, { "code": "31", "name": "Totaled", "description": "\"A vehicle that is declared a total loss by a jurisdiction or an insurer that is obligated to cover the loss or that the insurer takes possession of or title to.\"" }, { "code": "32", "name": "Owner Retained", "description": "\"A vehicle that has been declared by the insurance company to be a total loss but the owner maintains possession and ownership of the vehicle.\"" }, { "code": "33", "name": "Bond Posted", "description": "\"The insurance company has issued a bond on the vehicle because the ownership of the vehicle cannot be proven; this allows the vehicle to be sold and titled. Note: This brand is not valid after January 17 2003.\"" }, { "code": "34", "name": "Memorandum Copy", "description": "\"The title document is a facsimile title and not the active (original or duplicate) title document.\"" }, { "code": "35", "name": "Parts Only", "description": "\"The vehicle may only be used for parts. This code is no longer used use '07 - Dismantled'.\"" }, { "code": "36", "name": "Recovered Theft", "description": "\"The vehicle was previously titled as salvage due to theft. The Vehicle has been repaired and inspected (or complied with other jurisdiction procedures) and may be legally driven.\"" }, { "code": "37", "name": "Undisclosed Lien", "description": "\"The vehicle has entered the titling jurisdiction from a jurisdiction that does not disclose lien-holder information on the title. The titling jurisdiction may issue a new title without this brand if no notice of a security interest in the vehicle is received within a jurisdiction defined timeframe. Note: This brand is not valid after January 17 2003.\"" }, { "code": "38", "name": "\"Prior Owner Retained\"", "description": "\"A vehicle that was previously branded owner retained and was sold. The new owner's title contains this brand.\"" }, { "code": "39", "name": "\"Vehicle Non-conformity Uncorrected\"", "description": "\"A non-safety defect reported to the jurisdiction by the vehicle manufacturer remains uncorrected.\"" }, { "code": "40", "name": "\"Vehicle Non-conformity Corrected\"", "description": "\"A non-safety defect reported to the jurisdiction by the vehicle manufacturer has been corrected.\"" }, { "code": "41", "name": "\"Vehicle Safety Defect Uncorrected\"", "description": "\"A safety defect reported to the jurisdiction by the vehicle manufacturer remains uncorrected.\"" }, { "code": "42", "name": "\"Vehicle Safety Defect Corrected\"", "description": "\"A safety defect reported to the jurisdiction by the vehicle manufacturer has been corrected.\"" }, { "code": "43", "name": "\"VIN replaced by a new state assigned VIN\"", "description": "\"A title should not be issued for the VIN. This brand can be issued for rebuilt vehicles.\"" }, { "code": "45", "name": "Gray Market", "description": "\"Vehicle was manufactured for use outside the United States and has been brought into the United States. The vehicle is not in compliance with applicable federal standards.\"" }, { "code": "46", "name": "Gray Market", "description": "\"Vehicle was manufactured for use outside the United States and has been brought into the United States. The vehicle is in compliance with applicable federal standards.\"" }, { "code": "47", "name": "Manufacturer Buy", "description": "A vehicle that has been bought back by the manufacturer under Back\"jurisdiction -defined regulations or laws such as lemon laws. For\" \"example the manufacturer could be obligated to buy back the vehicle\" when a specified number of repair attempts fails to correct a major \"problem on a new vehicle or if a new vehicle has been out of service\" for repair for the same problem for a cumulative period of 30 days or \"more within one year of purchase.\"" }, { "code": "48", "name": "Former Rental", "description": "Former Rental" }, { "code": "49", "name": "Salvage--Stolen", "description": "\"Any vehicle the reporting jurisdiction considers salvage because an insurance company has acquired ownership pursuant to a settlement based on the theft of the vehicle.\"" }, { "code": "50", "name": "\"Salvage--Reasons Other Than Damage or Stolen\"", "description": "\"Any vehicle the reporting jurisdiction considers salvage based on criteria such as abandonment not covered by the Salvage-- Damage or Not Specified and Salvage--Stolen brands. Note.--Percent of damage is not reported with brand code 50.\"" }, { "code": "51", "name": "Disclosed Damage", "description": "\"The vehicle has sustained damage to the extent that the damage is required to be disclosed under the jurisdiction's damage disclosure law.\"" }, { "code": "52", "name": "Prior Non-", "description": "A vehicle constructed by repairing a vehicle that has been destroyed Repairable /or declared to be non-repairable or otherwise declared to not be Repairedeligible for titling because of the extent of damage to the vehicle but has been issued a title pursuant to state law after falling within this criterion with this brand on the face of the certificate of title." }, { "code": "53", "name": "Crushed", "description": "\"The frame or chassis of the vehicle has been crushed or otherwise destroyed so that it is physically impossible to use it in constructing a vehicle.\"" }, { "name": "Hazardous substance", "code": "55", "description": "Hazardous Substance Contaminated Vehicle - The jurisdiction has determined that the vehicle has been contaminated by a ‘hazardous substance’ and is unsafe for use. Excluding flood damaged vehicles.

A 'hazardous substance' is any substance that could diminish the safety of the vehicle or cause injury to its occupants. The 'hazardous substance' has one or more, but is not limited to the following intrinsic 'hazardous properties':
  • Explosiveness
  • Flammability
  • Ability to oxidize (accelerate a fire)
  • Human toxicity (acute or chronic)
  • Corrosiveness (to human tissue or metal)
  • Eco toxicity (with or without bioaccumulation)
  • Capacity, on contact with air or water, to develop one or more of the above properties.
" }, { "code": "68", "name": "Actual", "description": "The true mileage for the vehicle. The odometer has not been \"tampered with reached its mechanical limits or been altered.\"" }, { "code": "69", "name": "Not Actual", "description": "The odometer reading is known to be other than the true mileage for the vehicle." }, { "code": "70", "name": "Not Actual", "description": "Odometer tampering verified - The odometer reading is known to be \"other that the true mileage for the vehicle due to tampering.\"" }, { "code": "71", "name": "\"Exempt from Odometer Disclosure\"", "description": "\"The vehicle falls within criteria that allow it to change ownership without disclosure of the odometer reading.\"" }, { "code": "72", "name": "\"Exceeds Mechanical Limits\"", "description": "\"The odometer reading is less than the true mileage of the vehicle because the odometer can not display the total number of true miles.\"" }, { "code": "73", "name": "\"Odometer may be Altered\"", "description": "\"The titling authority has reason to believe that the odometer reading does not reflect the true mileage of the vehicle because of an alteration to the odometer.\"" }, { "code": "74", "name": "Odometer Replaced", "description": "\"The odometer in the vehicle is not the odometer put in the vehicle when manufactured.\"" }, { "code": "75", "name": "\"Reading at Time of Renewal\"", "description": "\"The odometer reading was recorded when the registration was renewed.\"" }, { "code": "76", "name": "\"Odometer Discrepancy\"", "description": "\"The titling authority has reason to believe that the odometer reading does not reflect the true mileage of the vehicle because of known previous recorded values of odometer for the vehicle.\"" }, { "code": "77", "name": "Call Title Division", "description": "\"The titling authority knows of some problem with the odometer reading that it cannot print on a title. Titling authority will discuss the problem (manual process) with authorized inquirers.\"" }, { "code": "78", "name": "\"Rectify Previous Exceeds Mechanical Limits Brand\"", "description": "A state other than the brander corrected brand 72." }, { "code": "90", "name": "Pending Junk", "description": "Consumer Assistance to Recycle and Save (CARS) program is Automobile -\"processing an application which if approved will render this vehicle\" CARS.gov \"incapable of operating on public streets roads and highways. The\" \"vehicle will have no value except as a source of parts or scrap shall\" be crushed or shredded within a specified time period (including the \"engine block) and shall not be exported prior to crushing or\" shredding. For additional information concerning the CARS program visit CARS.gov. Pursuant to the Consumer Assistance to Recycle and Save Act of" }, { "code": "91", "name": "Junk Automobile -", "description": "\"2009 (CARS) this vehicle is incapable of operating on public streets\" CARS.gov\"roads and highways. The vehicle has no value except as a source of\" \"parts or scrap shall be crushed or shredded within a specified time\" \"period (including the engine block) and shall not be exported prior to\"" } ], "vinChanged": false, "currentTitleInformation": [ { "VehicleIdentification": { "IdentificationID": "WBAFR7C57CC811956" }, "TitleIssuingAuthorityName": "CA", "TitleIssueDate": { "Date": "2015-07-01T00:00:00.000Z" }, "VehicleOdometerReadingMeasure": "000026226", "VehicleOdometerReadingUnitCode": "M", "RecordMatchSequenceID": "01", "HistoricTitleAbstract": [ { "VehicleIdentification": { "IdentificationID": "WBAFR7C57CC811956" }, "TitleIssuingAuthorityName": "CA", "TitleIssueDate": { "Date": "2015-06-11T00:00:00.000Z" }, "VehicleOdometerReadingMeasure": "000024806", "VehicleOdometerReadingUnitCode": "M" }, { "VehicleIdentification": { "IdentificationID": "WBAFR7C57CC811956" }, "TitleIssuingAuthorityName": "CA", "TitleIssueDate": { "Date": "2015-04-16T00:00:00.000Z" }, "VehicleOdometerReadingMeasure": "000024806", "VehicleOdometerReadingUnitCode": "M" }, { "VehicleIdentification": { "IdentificationID": "WBAFR7C57CC811956" }, "TitleIssuingAuthorityName": "CA", "TitleIssueDate": { "Date": "2014-09-15T00:00:00.000Z" }, "VehicleOdometerReadingMeasure": "000000008", "VehicleOdometerReadingUnitCode": "M" }, { "VehicleIdentification": { "IdentificationID": "WBAFR7C57CC811956" }, "TitleIssuingAuthorityName": "CA", "TitleIssueDate": { "Date": "2012-04-14T00:00:00.000Z" }, "VehicleOdometerReadingMeasure": "000000008", "VehicleOdometerReadingUnitCode": "M" } ] } ], "historyInformation": [ { "VehicleIdentification": { "IdentificationID": "WBAFR7C57CC811956" }, "TitleIssuingAuthorityName": "CA", "TitleIssueDate": { "Date": "2015-06-11T00:00:00.000Z" }, "VehicleOdometerReadingMeasure": "000024806", "VehicleOdometerReadingUnitCode": "M" }, { "VehicleIdentification": { "IdentificationID": "WBAFR7C57CC811956" }, "TitleIssuingAuthorityName": "CA", "TitleIssueDate": { "Date": "2015-04-16T00:00:00.000Z" }, "VehicleOdometerReadingMeasure": "000024806", "VehicleOdometerReadingUnitCode": "M" }, { "VehicleIdentification": { "IdentificationID": "WBAFR7C57CC811956" }, "TitleIssuingAuthorityName": "CA", "TitleIssueDate": { "Date": "2014-09-15T00:00:00.000Z" }, "VehicleOdometerReadingMeasure": "000000008", "VehicleOdometerReadingUnitCode": "M" }, { "VehicleIdentification": { "IdentificationID": "WBAFR7C57CC811956" }, "TitleIssuingAuthorityName": "CA", "TitleIssueDate": { "Date": "2012-04-14T00:00:00.000Z" }, "VehicleOdometerReadingMeasure": "000000008", "VehicleOdometerReadingUnitCode": "M" } ], } ```
--- # Vehicle Images API > Access a library of vehicle images for your website or app. Source: https://carsxe.com/docs/v1/images The Vehicle Images API looks up high-quality photos of vehicles from their year, make, and model. You can also specify trim, vehicle color or angle. All attributes are case sensitive. To ensure you receive the intended response make sure to use the attribute values as shown below. For example, to retrieve images with a public license only use `license=Public` any other value such as `public` (lowercase) or `PUBLIC` (all caps) will not work as intended. --- This endpoint allows you to retrieve the images for a specific vehicle based on a list of possible filters such as make, model, year and more. ## Required attributes Your CarsXE API key. The vehicle make. The vehicle model. ## Optional attributes The vehicle year. The vehicle trim. The vehicle color. Prioritize images with transparent background. Could be `true` or `false`. Defaults to `true`. The vehicle's angle. One of `front`, `front three-quarter`, `side`, `rear`, or `rear three-quarter`. Omit to return all angles. Optionally request images of either the `interior`, `exterior` or `engine`. **Can only be used in conjunction with year, make, model and trim query params.** Optionally request images of size: `Small`, `Medium`, `Large`, `Wallpaper` or `All`. By default it returns all sizes. Filter images by the following license types: `Public`, `Share`, `ShareCommercially`, `Modify` or `ModifyCommercially`. You may leave this field blank to return all images. The format of the response. One of `json` or `xml`. Defaults to `json`. Return only clean, relevant vehicle photos. Defaults to `true`. May return fewer than 10 images and take slightly longer. Pass `false` for up to 10 images at full speed. --- ## Response attributes Object detailing the query you made. A list of image objects. Each contains a MIME type, full image link, context link, dimensions (height/width), byte size, and thumbnail link. Whether the images has been retrieved. String detailing error if any. Make sure to pass the proper license type you'd like to use in the API request to make sure you can use the image commercially. Note: vehicle attributes are case sensitive.}, {question: "Will images always return in the color I want?", answer: "We try our hardest to match your request to what's available but if we're unable to find a vehicle in that particular color we pass the next best thing available."}, {question: "How many images are returned?", answer: "Up to 10 per request. The default may return fewer."}, {question: "What does validate do?", answer: "On by default: returns only clean, relevant photos (may be slightly slower). Pass false for full speed."}, {question: "Is the Vehicle Images API included in the free Sandbox?", answer: <>Yes! The Vehicle Images API is included in the free Sandbox as part of the shared lifetime quota (up to 100 API calls). For more information visit our pricing page.}, ]} hidePadding /> ```bash curl -G https://api.carsxe.com/images \ -d key=CARSXE_API_KEY \ -d year=2019 \ -d make=jaguar \ -d model=f-pace ``` ```js import { CarsXE } from "carsxe-api"; const carsxe = new CarsXE("CARSXE_API_KEY"); const params = { year: "2019", make: "jaguar", model: "f-pace", }; try { const images = await carsxe.images(params); console.log(images); } catch (error) { console.error(error); } ``` ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('CARSXE_API_KEY') params = { "year": "2019", "make": "jaguar", "model": "f-pace", } try: images = asyncio.run(carsxe.images(params)) print(images) except Exception as e: print(f"Error: {e}") ``` ```php '2019', 'make' => 'jaguar', 'model' => 'f-pace', ]; try { $images = $carsxe->images($params); print_r($images); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ```ruby require 'carsxe' API_KEY = 'CARSXE_API_KEY' carsxe = Carsxe::CarsXE.new(api_key: API_KEY) params = { 'year' => '2019', 'make' => 'jaguar', 'model' => 'f-pace', } begin images = carsxe.images(params) puts images rescue StandardError => error puts "Error: #{error.message}" end ``` ```go package main import ( "fmt" "github.com/carsxe/carsxe-go-package" ) func main() { client := carsxe.New("CARSXE_API_KEY") params := map[string]string{ "year": "2019", "make": "jaguar", "model": "f-pace", } images := client.Images(params) fmt.Println(images) } ``` ```java import io.github.carsxe.CarsXE; import java.util.Map; import java.util.HashMap; public class Main { public static void main(String[] args) { CarsXE carsxe = new CarsXE("CARSXE_API_KEY"); Map params = new HashMap<>(); params.put("year", "2019"); params.put("make", "jaguar"); params.put("model", "f-pace"); try { Map images = carsxe.images(params); System.out.println(images); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } } } ``` ```swift import carsxe let carsxe = CarsXE(apiKey: "CARSXE_API_KEY") let params = [ "year": "2019", "make": "jaguar", "model": "f-pace", ] do { let images = try carsxe.images(params) print(images) } catch { print("Error: \(error)") } ``` ```csharp using carsxe; using System; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { string API_KEY = "CARSXE_API_KEY"; CarsXE carsxe = new CarsXE(API_KEY); var parameters = new Dictionary { { "year", "2019" }, { "make", "jaguar" }, { "model", "f-pace" }, }; try { var images = await carsxe.Images(parameters); Console.WriteLine(images); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } } } ``` ```json showLineNumbers { "query": { "year": "2019", "make": "jaguar", "model": "f-pace" }, "images": [ { "mime": "image/jpeg", "link": "https://www.exclusiveautomotivegroup.com/imagetag/3162/main/l/Used-2019-Jaguar-F-PACE-25t-Premium-1657742271.jpg", "contextLink": "https://www.exclusiveautomotivegroup.com/2019-jaguar-f-pace-25t-premium-c-3162/", "height": 1279, "width": 1919, "byteSize": 425535, "thumbnailLink": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT23lCo9X3qJKNVHaiVfUDLkVibj2sz58LZ5YcrfZoRr5coErPxdLmnrVI&s", "thumbnailHeight": 100, "thumbnailWidth": 150, "hostPageDomainFriendlyName": "", "accentColor": "", "datePublished": "" }, { "mime": "image/jpeg", "link": "https://www.perfectautocollection.com/imagetag/2185/2/l/Used-2019-Jaguar-F-PACE-20d-Prestige-1669673633.jpg", "contextLink": "https://www.perfectautocollection.com/used-vehicle-2019-jaguar-f-pace-20d-prestige-c-2185/", "height": 1277, "width": 1920, "byteSize": 400471, "thumbnailLink": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRG8MUlww6vvIP_52-2XCh2OPx1n-ix2THTRcevTpRl_-Im_aW8uzATMw&s", "thumbnailHeight": 100, "thumbnailWidth": 150, "hostPageDomainFriendlyName": "", "accentColor": "", "datePublished": "" }, { "mime": "image/webp", "link": "https://static.overfuel.com/photos/306/192683/3f0d5bd91fa1417d983339d61205da10.webp", "contextLink": "https://www.luxmotors.com/used-cars/2019-jaguar-f-pace-s-SADCM2FV6KA360455", "height": 682, "width": 1024, "byteSize": 79808, "thumbnailLink": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSrIrEKmkRJTbLlv1vsJUOPMOt5tkOYGnEjeWP4YEKC8WeI-Yo7Tql7qmw&s", "thumbnailHeight": 100, "thumbnailWidth": 150, "hostPageDomainFriendlyName": "", "accentColor": "", "datePublished": "" }, { "mime": "image/jpeg", "link": "https://media.production.jlrms.com/alf/images/2019-06/10837707-3ebc-4ad4-8cd6-9897079fb25b/jfpacedrivesglacierwhite30tv6portfolio280416061resizex682.JPG?VersionId=b4hIPF5rZK0TYZCf85TY5bW1GoPR8nhW", "contextLink": "https://archive.jaguar.com/en-us/news/2019/03/technical-press-kit-2019-jaguar-f-pace", "height": 682, "width": 1023, "byteSize": 229820, "thumbnailLink": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQjZwKPOPAqartXvOuqypkuMNv43bRqtS8KaXsVsx62xTeA2es0xJo8jg&s", "thumbnailHeight": 100, "thumbnailWidth": 150, "hostPageDomainFriendlyName": "", "accentColor": "", "datePublished": "" }, { "mime": "image/jpeg", "link": "https://di-uploads-pod10.dealerinspire.com/jaguarofcharleston/uploads/2019/01/2019-Jaguar-F-PACE-side-view.jpg", "contextLink": "https://www.jaguarcharleston.com/2019-jaguar-f-pace-configurations/", "height": 400, "width": 1000, "byteSize": 24570, "thumbnailLink": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTPNLEnQ7avCKJTdGQZcx95DAuFjuPk0wdYzyRClayQ0yhqMM4F5_oMhKk&s", "thumbnailHeight": 60, "thumbnailWidth": 149, "hostPageDomainFriendlyName": "", "accentColor": "", "datePublished": "" }, { "mime": "image/jpeg", "link": "https://f.hubspotusercontent00.net/hubfs/2684054/car-review-blog/review_337113_1.jpg", "contextLink": "https://www.carpro.com/vehicle-reviews/2019-jaguar-f-pace-svr-review", "height": 480, "width": 640, "byteSize": 96979, "thumbnailLink": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ8znK5YuzDubqU4InxEjrYscVBsGrSktd5_0LJPfI_wdf8iFolmuaHmYk&s", "thumbnailHeight": 103, "thumbnailWidth": 137, "hostPageDomainFriendlyName": "", "accentColor": "", "datePublished": "" }, { "mime": "image/jpeg", "link": "https://www.exoticmotorsportsok.com/imagetag/2103/main/l/Used-2019-Jaguar-F-PACE-SVR-1714496536.jpg", "contextLink": "https://www.exoticmotorsportsok.com/used-vehicle-2019-jaguar-f-pace-svr-c-2103/", "height": 1440, "width": 1920, "byteSize": 354790, "thumbnailLink": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTXj00nUImgnvD3OdpnwePeXjs5nForTarXOIWCtBCmkxqwsOZzYGFN7A&s", "thumbnailHeight": 113, "thumbnailWidth": 150, "hostPageDomainFriendlyName": "", "accentColor": "", "datePublished": "" }, { "mime": "image/jpeg", "link": "https://www.motorcarspalmbeach.com/imagetag/120/main/l/Used-2019-Jaguar-F-PACE-S-1646175841.jpg", "contextLink": "https://www.motorcarspalmbeach.com/used-vehicle-2019-jaguar-f-pace-s-c-120/", "height": 1200, "width": 1600, "byteSize": 204455, "thumbnailLink": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSRq2UAxnMDe6jsuHXnPMmm7qqV7pHCNaPD3nR_faztO2xrCPfsA-bHhQw&s", "thumbnailHeight": 113, "thumbnailWidth": 150, "hostPageDomainFriendlyName": "", "accentColor": "", "datePublished": "" } ], "success": true, "error": "" } ``` ```` --- # International VIN Decoder API > The International VIN Decoder API provides access to a library of vehicle's data based on the vehicle's VIN. Start leveraging the power of CarsXE to access accurate and up-to-date vehicle data. Source: https://carsxe.com/docs/v1/international-vin-decoder The International VIN Decoder API looks up the vehicle through the database for matches and returns the VIN, make, model and year among other attributes. It can be coupled with other APIs to become even more powerful. --- This endpoint allows you to retrieve **vehicle** information based on VIN. ## Required attributes Your CarsXE API key. The 17 character long vehicle identification number. ## Response Attributes Indicates whether the request was successful (e.g., `true` or `false`). Contains the input parameters used in the request. The Vehicle Identification Number (VIN) (e.g., "WF0MXXGBWM8R43240"). The vehicle manufacturer (e.g., "Ford"). The vehicle model (e.g., "Galaxy"). The manufacturing year of the vehicle (e.g., "2008"). The type of vehicle (e.g., "Car"). The body style of the vehicle (e.g., "Wagon"). The vehicle series or generation (e.g., "Mk3 (2006-)"). The type of fuel the vehicle uses (e.g., "Diesel"). The number of gears in the transmission (e.g., "6"). The emission standard category represents the level of exhaust emissions a vehicle complies with, based on regulations set by regional authorities. These standards limit the amount of pollutants such as nitrogen oxides (NOx), carbon monoxide (CO), hydrocarbons (HC), and particulate matter (PM) that a vehicle can emit. Common formats include: * `Euro 4`, `Euro 5`, `Euro 6` — European Union standards * `LEV`, `ULEV`, `SULEV` — U.S. standards (Low Emission Vehicle tiers) * `4L` — May represent Euro 4 Light Duty classification or similar region-specific categories The name of the vehicle manufacturer (e.g., "FORD-WERKE GmbH, D-50735 KOELN"). The address of the manufacturer (e.g., "Koeln-Niehl, Germany"). The country of manufacture (e.g., "Germany"). The manufacturer of the engine (e.g., "FORD"). The average `CO₂` emissions produced by the vehicle, measured in grams per kilometer `(g/km)`. This value represents how much carbon dioxide `(CO₂)` the vehicle emits on average while driving one kilometer, based on standardized testing cycles. Lower `CO₂` emissions generally indicate better fuel efficiency and reduced environmental impact. This metric is commonly used in Europe and other regions to assess a vehicle's environmental performance, and it may influence taxes or regulatory compliance. For example, a value of `174.03` g/km means the vehicle emits approximately `174` grams of `CO₂` for every kilometer driven. The number of axles on the vehicle (e.g., "2"). The number of doors (e.g., "4"). The number of seats (e.g., "5-7"). The rear brake type (e.g., "Disc"). The type of steering system used in the vehicle (e.g., "Steering rack and pinion"). This describes the mechanism that connects the steering wheel to the wheels and determines how the driver controls the vehicle’s direction. Common steering types include: * Rack and Pinion: A widely used, precise steering system found in most passenger cars. It uses a gearset to convert rotational motion from the steering wheel into linear motion to turn the wheels. * Recirculating Ball: Often used in trucks and older vehicles. It uses a series of ball bearings to reduce friction and steer larger vehicles effectively. * Electric Power Steering (EPS): A modern system that uses electric motors instead of hydraulic pressure for improved efficiency and driver assist features. The steering system affects handling, road feedback, and overall driving experience. The rear suspension setup (e.g., "Independent multi-link spring suspension with stabilizer"). The front suspension setup (e.g., "Independent, type McPherson with coil spring and anti-roll bar"). The standard wheel size (e.g., "215/60 R16 94H"). A list of available wheel sizes for the vehicle, typically including tire width, aspect ratio, rim diameter, and load/speed rating (e.g., "215/60 R16 94H"). Useful for identifying compatible tires and wheels. The wheelbase length in millimeters (e.g., "2850"). A list of wheelbase measurements in millimeters (e.g., "2850"). The height of the vehicle in millimeters (e.g., "1807"). The length of the vehicle in millimeters (e.g., "4820"). The width of the vehicle in millimeters (e.g., "1884"). The front track width in millimeters (e.g., "1588"). The rear track width in millimeters (e.g., "1605"). The maximum speed in kilometers per hour (e.g., "193"). The maximum trunk volume the vehicle can offer with seats folded or removed, measured in liters (e.g., "2325"). Indicates total available cargo space. The minimum trunk volume with all seats in their upright position, measured in liters (e.g., "308"). Represents the standard cargo capacity. The curb weight of the vehicle in kilograms (e.g., "1806"). The maximum gross weight in kilograms (e.g., "2505"). The maximum permissible roof load in kilograms (e.g., "75"). The maximum trailer load without brakes in kilograms (e.g., "750"). Indicates whether the vehicle is equipped with Anti-lock Braking System (ABS) (e.g., "1" for true). The VIN check digit, used for validating the VIN (e.g., "W"). The sequential production number of the vehicle (e.g., "R43240"). The timestamp of when the data was generated or retrieved (e.g., "2025-04-04T09:13:45.835Z"). You may use the following VIN for test: WF0MXXGBWM8R43240},{question: "Is the International VIN Decoder API included in the free Sandbox?", answer: <>Yes! The International VIN Decoder API is included in the free Sandbox as part of the shared lifetime quota (up to 100 API calls). For more information visit our pricing page.}, { question: "How can I get started with the API?", answer: "Getting started with the API is easy. Simply sign up for an account, and you'll be able to start using the API right away. You can also contact our sales team for more information."}]} /> ```bash curl -G https://api.carsxe.com/v1/international-vin-decoder \ -d key=CARSXE_API_KEY \ -d vin=WF0MXXGBWM8R43240 ``` ```js import { CarsXE } from "carsxe-api"; const carsxe = new CarsXE("CARSXE_API_KEY"); const vin = "WF0MXXGBWM8R43240"; try { const vehicle = await carsxe.internationalVinDecoder({ vin }); console.log(vehicle); } catch (error) { console.error(error); } ``` ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('CARSXE_API_KEY') vin = 'WF0MXXGBWM8R43240' try: vehicle = asyncio.run(carsxe.int_vin_decoder({"vin": vin})) print(vehicle) except Exception as e: print(f"Error: {e}") ``` ```php intVinDecoder(['vin' => $vin]); print_r($vehicle); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ```ruby require 'carsxe' API_KEY = 'CARSXE_API_KEY' carsxe = Carsxe::CarsXE.new(api_key: API_KEY) vin = 'WF0MXXGBWM8R43240' begin vehicle = carsxe.int_vin_decoder('vin' => vin) puts vehicle rescue StandardError => error puts "Error: #{error.message}" end ``` ```go package main import ( "fmt" "github.com/carsxe/carsxe-go-package" ) func main() { client := carsxe.New("CARSXE_API_KEY") vin := "WF0MXXGBWM8R43240" vehicle := client.InternationalVINDecoder(map[string]string{"vin": vin}) fmt.Println(vehicle) } ``` ```java import io.github.carsxe.CarsXE; import java.util.Map; import java.util.HashMap; public class Main { public static void main(String[] args) { CarsXE carsxe = new CarsXE("CARSXE_API_KEY"); Map params = new HashMap<>(); params.put("vin", "WF0MXXGBWM8R43240"); try { Map vehicle = carsxe.internationalVinDecoder(params); System.out.println(vehicle); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } } } ``` ```swift import carsxe let carsxe = CarsXE(apiKey: "CARSXE_API_KEY") let vin = "WF0MXXGBWM8R43240" do { let vehicle = try carsxe.intVinDecoder(["vin": vin]) print(vehicle) } catch { print("Error: \(error)") } ``` ```csharp using carsxe; using System; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { string API_KEY = "CARSXE_API_KEY"; CarsXE carsxe = new CarsXE(API_KEY); string vin = "WF0MXXGBWM8R43240"; try { var vehicle = await carsxe.InternationalVinDecoder(new Dictionary { { "vin", vin } }); Console.WriteLine(vehicle); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } } } ``` ```json showLineNumbers {{ title: 'Response' }} { "success": true, "input": { "vin": "WF0MXXGBWM8R43240" }, "attributes": { "vin": "WF0MXXGBWM8R43240", "vid": "1623", "make": "Ford", "model": "Galaxy", "year": "2008", "product_type": "Car", "body": "Wagon", "series": "Mk3 (2006-)", "fuel_type": "Diesel", "gears": "6", "emission_standard": "4L", "manufacturer": "FORD-WERKE GmbH, D-50735 KOELN", "manufacturer_address": "Koeln-Niehl, Germany", "plant_country": "Germany", "engine_manufacturer": "FORD", "avg_co2_emission_g_km": "174.03", "no_of_axels": "2", "no_of_doors": "4", "no_of_seats": "5-7", "rear_brakes": "Disc", "steering_type": "Steering rack and pinion", "rear_suspension": "Independent multi-link spring suspension with stabilizer", "front_suspension": "Independent, type McPherson with coil spring and anti-roll bar", "wheel_size": "215/60 R16 94H", "wheel_size_array": "215/60 R16 94H", "wheelbase_mm": "2850", "wheelbase_array_mm": "2850", "height_mm": "1807", "length_mm": "4820", "width_mm": "1884", "track_front_mm": "1588", "track_rear_mm": "1605", "max_speed_kmh": "193", "max_trunk_capacity_liters": "2325", "min_trunk_capacity_liters": "308", "weight_empty_kg": "1806", "max_weight_kg": "2505", "max_roof_load_kg": "75", "permitted_trailer_load_without_brakes_kg": "750", "abs": "1", "check_digit": "W", "sequential_number": "R4324" }, "timestamp": "2025-04-11T00:05:36.457Z" } ``` ``` --- # Lien & Theft Check API > Check for active liens and theft records using a VIN. Source: https://carsxe.com/docs/v1/lien-theft The Lien & Theft Check API provides access to lien and theft data by allowing users to search for records based on a vehicle's VIN. This API is useful for developers who need to verify the legal status of a specific vehicle. --- This endpoint allows you to retrieve lien and theft information using a VIN. ## Required attributes Your CarsXE API key. The 17 character long vehicle identification number. --- ## Response attributes Whether the vehicle data has been retrieved successfully. Object detailing the query you made, including the VIN. The timestamp of the API response. The model year of the vehicle. The make (brand) of the vehicle. The model name of the vehicle. The vehicle type (e.g. CAR). A list of events (liens, thefts) associated with the vehicle. Detailed trim and specification data for the vehicle. ## Event Types The `events` array can contain the following types of records: | Event Type | Field Labels | Details | Derived Text | | :--- | :--- | :--- | :--- | | Open Lien | lienholder, location, date | Text as supplied, State, Date | `Vehicle is reported to have an open lien on title: ` | | Active Theft | location | State | `The vehicle is reported to be an active theft.` | | Recovered Theft | location | State | `The vehicle is reported to be a recovered theft` | | Exported | date, location | MM/DD/YYYY, State | `Vehicle is reported to have been exported out of the United States` | | Towing/Impound | date, location | MM/DD/YYYY, State | `Vehicle is reported as Towed or Impounded` | | Vehicle for Sale | date | MM/DD/YYYY | `Vehicle is reported to have been available for sale on eBay Motors.com...` | Yes! The Lien & Theft Check API is included in the free Sandbox with a lifetime limit of 5 API calls. For more information visit our pricing page.} ]} hidePadding /> ```bash curl -G https://api.carsxe.com/v1/lien-theft \ -d key=CARSXE_API_KEY \ -d vin=2C3CDXFG1FH762860 ``` ```js import { CarsXE } from 'carsxe'; const carsxe = new CarsXE('CARSXE_API_KEY'); const vin = '2C3CDXFG1FH762860'; try { const response = await carsxe.lienAndTheft({ vin }); console.log(response); } catch (error) { console.error(error); } ``` ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('CARSXE_API_KEY') vin = '2C3CDXFG1FH762860' try: vehicle = asyncio.run(carsxe.lien_and_theft({"vin": vin})) print(vehicle) except Exception as e: print(f"Error: {e}") ``` ```php lienAndTheft(['vin' => $vin]); print_r($vehicle); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ```ruby require 'carsxe' API_KEY = 'CARSXE_API_KEY' carsxe = Carsxe::CarsXE.new(api_key: API_KEY) vin = '2C3CDXFG1FH762860' begin vehicle = carsxe.lien_and_theft('vin' => vin) puts vehicle rescue StandardError => error puts "Error: #{error.message}" end ``` ```go package main import ( "fmt" "github.com/carsxe/carsxe-go-package" ) func main() { client := carsxe.New("CARSXE_API_KEY") vin := "2C3CDXFG1FH762860" vehicle := client.LienAndTheft(map[string]string{"vin": vin}) fmt.Println(vehicle) } ``` ```java import io.github.carsxe.CarsXE; import java.util.Map; import java.util.HashMap; public class Main { public static void main(String[] args) { CarsXE carsxe = new CarsXE("CARSXE_API_KEY"); Map params = new HashMap<>(); params.put("vin", "2C3CDXFG1FH762860"); try { Map vehicle = carsxe.LienAndTheft(params); System.out.println(vehicle); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } } } ``` ```swift import carsxe let carsxe = CarsXE(apiKey: "CARSXE_API_KEY") let vin = "2C3CDXFG1FH762860" do { let vehicle = try carsxe.lienAndTheft(["vin": vin]) print(vehicle) } catch { print("Error: \(error)") } ``` ```csharp using carsxe; using System; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { string API_KEY = "CARSXE_API_KEY"; CarsXE carsxe = new CarsXE(API_KEY); string vin = "2C3CDXFG1FH762860"; try { var vehicle = await carsxe.LienAndTheft(new Dictionary { { "vin", vin } }); Console.WriteLine(vehicle); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } } } ``` ```json showLineNumbers { "success": true, "input": { "vin": "2C3CDXFG1FH762860" }, "timestamp": "2025-12-07T20:32:11.027Z", "year": 2015, "make": "DODGE", "model": "Charger", "type": "CAR", "events": [ { "event": "Recovered Theft", "location": "OH", "details_list": [ "The vehicle is reported to be an Recovered Theft." ] } ], "trim_data": { "General": { "VIN": "2C3CDXFG*FH", "Model Year": "2015", "Make": "DODGE", "Make ID": "476", "Model": "Charger", "Model ID": "1895", "Body Class": "Sedan/Saloon", "Trim": "SE", "Vehicle Type": "PASSENGER CAR", "Manufacturer Name": "FCA CANADA INC.", "Manufacturer Id": "995", "Plant City": "BRAMPTON", "Plant Company Name": "Brampton Assembly", "Plant Country": "CANADA", "Plant State": "ONTARIO" }, "Passive Safety System": { "Front Air Bag Locations": "1st Row (Driver and Passenger)", "Side Air Bag Locations": "All Rows", "Other Restraint System Info": "Active Seat Belt: All Seating Positions; Air Bags: Outboard Seating Positions", "Seat Belts Type": "Manual" }, "Mechanical": { "Drive Type": "AWD/All-Wheel Drive" }, "Exterior": { "Bed Type": "Not Applicable", "Cab Type": "Not Applicable", "Body Class": "Sedan/Saloon", "Bus Floor Configuration Type": "Not Applicable", "Bus Type": "Not Applicable", "Custom Motorcycle Type": "Not Applicable", "Doors": "4", "Gross Vehicle Weight Rating": "Class 1: 6,000 lb or less (2,722 kg or less)", "Gross Vehicle Weight Rating up to": "Class 1: 6,000 lb or less (2,722 kg or less)", "Motorcycle Chassis Type": "Not Applicable", "Motorcycle Suspension Type": "Not Applicable", "Trailer Body Type": "Not Applicable", "Trailer Type Connection": "Not Applicable" }, "Engine": { "Displacement (Cubic Centimeters)": "3600.0", "Displacement (Cubic Litre)": "219.68547874103", "Displacement (Litre)": "3.6", "Engine Configuration": "V-Shaped", "Engine Number of Cylinders": "6", "Engine Brake (hp)": "292", "Engine Manufacturer": "FCA", "Fuel Type - Primary": "Gasoline", "Other Engine Info": "Sales Code: ERB", "Turbo": "No" }, "Interior": { "Steering Location": "Left-Hand Drive (LHD)" } } } ``` --- # Vehicle Market Value > Discover comprehensive vehicle market value including historical vehicle sale history. Learn more about above and below market pricing. Source: https://carsxe.com/docs/v1/market-value The Vehicle Market Value API provides access to a library of vehicle market value data. The Vehicle Market Value API estimates the market value for used and new cars by VIN based on millions of historical vehicle sales stored in CarsXE's sales database. With the assumption that sale prices are normally distributed, CarsXE's market value model estimates the "below market" and "above market" values within a distribution. --- This endpoint allows you to retrieve the market value for a specific vehicle based on its VIN. ## Required attributes Your CarsXE API key. The 17 character long vehicle identification number. ## Optional attributes The format of the response. One of `json` or `xml`. Defaults to `json`. --- ## Response attributes The vehicle identification number. Whether market value data has been retrieved. Retail price of the vehicle. The trade in price of the vehicle. The rough trade in price of the vehicle. The average trade in of the vehicle. Loan value of vehicle. Manufacturer suggested retail price of vehicle. A list of trade in values recorded for the vehicle. Map of auction value ranges in a given data range. You may be use the following VINs for test:
  • JN1EV7AP6JM355294
  • WBAFR7C57CC811956
},{question: "Is the Vehicle Market Value API included in the free Sandbox?", answer: <>Yes! The Vehicle Market Value API is included in the free Sandbox with a lifetime limit of 5 API calls. For more information visit our pricing page.}]} hidePadding /> ```bash curl -G https://api.carsxe.com/marketvalue \ -d key=CARSXE_API_KEY \ -d vin=WBAFR7C57CC811956 ``` ```js import { CarsXE } from "carsxe-api"; const carsxe = new CarsXE("CARSXE_API_KEY"); const vin = "WBAFR7C57CC811956"; try { const vehicle = await carsxe.marketValue({ vin }); console.log(vehicle); } catch (error) { console.error(error); } ``` ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('CARSXE_API_KEY') vin = 'WBAFR7C57CC811956' try: vehicle = asyncio.run(carsxe.market_value({"vin": vin})) print(vehicle) except Exception as e: print(f"Error: {e}") ``` ```php marketValue(['vin' => $vin]); print_r($vehicle); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ```ruby require 'carsxe' API_KEY = 'CARSXE_API_KEY' carsxe = Carsxe::CarsXE.new(api_key: API_KEY) vin = 'WBAFR7C57CC811956' begin vehicle = carsxe.market_value('vin' => vin) puts vehicle rescue StandardError => error puts "Error: #{error.message}" end ``` ```go package main import ( "fmt" "github.com/carsxe/carsxe-go-package" ) func main() { client := carsxe.New("CARSXE_API_KEY") vin := "WBAFR7C57CC811956" vehicle := client.MarketValue(map[string]string{"vin": vin}) fmt.Println(vehicle) } ``` ```java import io.github.carsxe.CarsXE; import java.util.Map; import java.util.HashMap; public class Main { public static void main(String[] args) { CarsXE carsxe = new CarsXE("CARSXE_API_KEY"); Map params = new HashMap<>(); params.put("vin", "WBAFR7C57CC811956"); try { Map vehicle = carsxe.marketvalue(params); System.out.println(vehicle); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } } } ``` ```swift import carsxe let carsxe = CarsXE(apiKey: "CARSXE_API_KEY") let vin = "WBAFR7C57CC811956" do { let vehicle = try carsxe.marketValue(["vin": vin]) print(vehicle) } catch { print("Error: \(error)") } ``` ```csharp using carsxe; using System; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { string API_KEY = "CARSXE_API_KEY"; CarsXE carsxe = new CarsXE(API_KEY); string vin = "WBAFR7C57CC811956"; try { var vehicle = await carsxe.MarketValue(new Dictionary { { "vin", vin } }); Console.WriteLine(vehicle); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } } } url = URI("https://api.carsxe.com/marketvalue?key=CARSXE_API_KEY&vin=WBAFR7C57CC811956") https = Net::HTTP.new(url.host, url.port) https.use_ssl = true request = Net::HTTP::Get.new(url) response = https.request(request) puts response.read_body ``` ```json showLineNumbers {{ title: 'Response' }} { "retail": "16075", "tradeIn": "13575", "roughTradeIn": "10250", "averageTradeIn": "12050", "loanValue": "12225", "uid": 1172227, "msrp": "52250", "tradeInValues": [ { "date": "2018-08-01T00:00:00.000Z", "value": "13575", }, { "date": "2018-07-01T00:00:00.000Z", "value": "13600", }, { "date": "2018-06-01T00:00:00.000Z", "value": "14175", }, { "date": "2018-05-01T00:00:00.000Z", "value": "14175", }, { "date": "2018-04-01T00:00:00.000Z", "value": "14650", }, ], "auctionValues": { "lowAuctionValue": 9050, "averageAuctionValue": 11925, "highAuctionValue": 14825, "dateRange": "8/6/2018 - 8/12/2018", }, } ```
--- # Vehicle OBD Codes Decoder > Decode OBD codes through a robust API for your applications needs Source: https://carsxe.com/docs/v1/obd-codes-decoder The OBD Codes Decoder API provides access to a library of over 3000 OBD codes and their matching vehicle diagnosis. The OBD Codes Decoder API matches the code to the vehicle trouble or diagnosis. --- This endpoint allows you to retrieve a vehicle's license plate number or registration number from an image of the plate. ## Required attributes Your CarsXE API key. The OBD code. --- ## Response attributes Whether we could retrieve code information. The diagnosis of the OBD code. The date of the search. The OBD Code. Yes! The OBD Decoder API is included in the free Sandbox as part of the shared lifetime quota (up to 100 API calls). For more information visit our pricing page.}]} hidePadding /> ```bash curl -G https://api.carsxe.com/obdcodesdecoder \ -d key=CARSXE_API_KEY \ -d code=P0115 ``` ```js import { CarsXE } from "carsxe-api"; const carsxe = new CarsXE("CARSXE_API_KEY"); const code = "P0115"; try { const obdCode = await carsxe.obdcodesdecoder({ code }); console.log(obdCode); } catch (error) { console.error(error); } ``` ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('CARSXE_API_KEY') code = 'P0115' try: obd_code = asyncio.run(carsxe.obd_codes_decoder({"code": code})) print(obd_code) except Exception as e: print(f"Error: {e}") ``` ```php obdCodesDecoder(['code' => $code]); print_r($obdCode); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ```ruby require 'carsxe' API_KEY = 'CARSXE_API_KEY' carsxe = Carsxe::CarsXE.new(api_key: API_KEY) code = 'P0115' begin obd_code = carsxe.obd_codes_decoder('code' => code) puts obd_code rescue StandardError => error puts "Error: #{error.message}" end ``` ```go package main import ( "fmt" "github.com/carsxe/carsxe-go-package" ) func main() { client := carsxe.New("CARSXE_API_KEY") code := "P0115" obdCode := client.ObdCodesDecoder(map[string]string{"code": code}) fmt.Println(obdCode) } ``` ```java import io.github.carsxe.CarsXE; import java.util.Map; import java.util.HashMap; public class Main { public static void main(String[] args) { CarsXE carsxe = new CarsXE("CARSXE_API_KEY"); Map params = new HashMap<>(); params.put("code", "P0115"); try { Map obdCode = carsxe.obdcodesdecoder(params); System.out.println(obdCode); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } } } ``` ```swift import carsxe let carsxe = CarsXE(apiKey: "CARSXE_API_KEY") let code = "P0115" do { let obdCode = try carsxe.obdCodesDecoder(["code": code]) print(obdCode) } catch { print("Error: \(error)") } ``` ```csharp using carsxe; using System; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { string API_KEY = "CARSXE_API_KEY"; CarsXE carsxe = new CarsXE(API_KEY); string code = "P0115"; try { var obdCode = await carsxe.ObdCodesDecoder(new Dictionary { { "code", code } }); Console.WriteLine(obdCode); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } } } ``` ```json showLineNumbers { "success": true, "diagnosis": "Engine Coolant Temperature Circuit Malfunction", "date": "2020-07-04T21:44:39.767Z", "code": "P0115" } ``` --- # Ownership API > Resolve vehicle owners, contact details, and address residents from CarsXE's identity graph — by VIN, name and address, address alone, phone, or ZIP code. Enterprise only. Source: https://carsxe.com/docs/v1/ownership The Ownership API is available on **Enterprise plans only**. If you're interested in access, [contact us](https://carsxe.com/contact) and we'll walk you through your options. The Ownership API answers one core question from five different starting points: **who is connected to this vehicle, person, or place?** You always have something to start from — a VIN, a name and address, just an address, a phone number, or a ZIP code — and the API resolves the rest: a registered owner, a resident, or a pool of people matching a set of filters. All five lookup types are gated behind a single `ownership` entitlement on your API key and billed the same way: you're only ever charged when a match is found. | You have… | You call… | You get back… | | :-------------------- | :-------------------------- | :------------------------------------------------------------------- | | A 17-character VIN | `GET /v1/ownership/vin` | The vehicle's registered owner(s), contact info, and vehicle history | | A full name + address | `GET /v1/ownership/person` | Contact details and any vehicle linked to that identity | | Just a street address | `GET /v1/ownership/address` | Everyone on file at that address, contact info, and vehicle history | | A US phone number | `GET` or `POST /v1/ownership/phone` | People linked to that number, contact info, and vehicle history | | A ZIP code + filters | `GET /v1/ownership/zip` | A page of matching people in that area | Every response follows a strict **"charge only on non-empty results"** rule: if there's no match, you get a **404** with `error: "no_data"`, your usage counter doesn't move, and nothing is billed. When there is a match, billing scales with how many records come back — **not a flat rate per request**: the billed quantity is exactly the number of entries in `owners`/`matches`/`records`, so a 3-owner VIN response bills 3 units, not 1. ZIP is the one to watch here — it can return dozens of records in a single page, so one call there can consume far more quota than a typical VIN/Person/Address lookup. Phone can also return several matches (and accepts up to 100 numbers per call). Across all five lookup types, `include` (and, on Address and ZIP, the legacy `variant`) only shapes which sections of the response are shown — everything is fetched, and billed, as a single base call. --- ## VIN → Owner Look up the registered owner(s) of a vehicle by VIN, along with vehicle attributes, vehicle history, and contact details. ### Required attributes Your CarsXE API key. The 17-character vehicle identification number. ### Optional attributes Comma-separated subset of `demographics,emails,phones,vehicle_history`. Omit it to get everything. `demographics`, `vehicle_history`, `emails`, and `phones` all come from the same single call — nothing about `include` changes what's fetched or billed, only which sections appear in the response. Omit `include` to get everything back by default. --- ### Response attributes Whether the request was processed successfully. The VIN you queried. Echoes the `include` value you passed. Omitted entirely when you didn't pass one. Attributes for the queried vehicle. See the table below. One entry per person linked to this VIN, each billed as a separate unit (see the billing note above). Listed in order of recency — the most recent owner is first. See the table below. Machine-readable error code, or `""` on success. #### `vehicle` object | Field | Type | Description | | :--- | :--- | :--- | | `make`, `model` | string | Vehicle make and model. | | `year` | number \| null | Model year. | | `manufacturer` | string | Full legal manufacturer name. | | `fuel_type`, `drive_type`, `transmission_type` | string | e.g. `Diesel`, `4WD`, `A`. | | `body_type`, `body_subtype` | string | e.g. `PICKUP`, `Crew Cab`. | | `doors`, `engine_cylinders` | number \| null | | | `vehicle_class`, `size`, `vehicle_type` | string | e.g. `Mainstream`, `Full-Size`, `TRUCK`. | #### `owners[]` object | Field | Type | Description | | :--- | :--- | :--- | | `record_id` | string | Internal identity ID for this person. | | `first_name`, `last_name` | string | | | `age`, `gender` | string | Empty when not on file. | | `address` | object | `{ street, city, state, zip }`. | | `first_observed`, `last_observed` | string | `YYYY-MM-DD`. The date range this VIN-to-person link has been on file — how long it's been known, and how recently it was reconfirmed. Empty when not on file. | | `source_count` | number \| null | How many independent sources confirm this link. `null` when not on file. | | `demographics` | object | `marital_status`, `home_owner`, `children_in_household`, `veteran_in_household`, `occupation`, `income_range`, `net_worth_range`, `credit_range` — all raw string values, empty unless on file. | | `emails[]` | array | `{ address, last_seen }`. | | `phones[]` | array | `{ number, type, dnc }`. | | `vehicle_history[]` | array | Up to 3 other vehicles linked to this owner: `{ make, model, year, vin }`. | ### Errors | Status | `error` | Cause | | :--- | :--- | :--- | | 400 | `invalid_inputs` | Missing `vin`. | | 400 | `invalid_vin` | Not a well-formed 17-character VIN. | | 404 | `no_data` | No match — not billed. | ```bash curl -G https://api.carsxe.com/v1/ownership/vin \ -d key=CARSXE_API_KEY \ -d vin=1FT8X3BT0BEA61538 ``` ```bash curl -G https://api.carsxe.com/v1/ownership/vin \ -d key=CARSXE_API_KEY \ -d vin=1FT8X3BT0BEA61538 \ -d include=demographics ``` ```json showLineNumbers { "success": true, "vin": "1FT8X3BT0BEA61538", "vehicle": { "make": "Ford", "model": "F-350", "year": 2011, "manufacturer": "Ford Motor Company", "fuel_type": "Diesel", "drive_type": "4WD", "transmission_type": "A", "body_type": "PICKUP", "body_subtype": "Crew Cab", "doors": 4, "engine_cylinders": 8, "vehicle_class": "Mainstream", "size": "Full-Size", "vehicle_type": "TRUCK" }, "owners": [ { "record_id": "2074367570", "first_name": "Mark", "last_name": "Spence", "age": "57", "gender": "Male", "address": { "street": "910 Lucabaugh Mill Rd", "city": "Westminster", "state": "MD", "zip": "21157" }, "first_observed": "2019-11-04", "last_observed": "2026-07-30", "source_count": 4, "demographics": { "marital_status": "Married", "home_owner": "Home Owner", "children_in_household": "", "veteran_in_household": "", "occupation": "President", "income_range": "$100,000 - $149,999", "net_worth_range": "$250,000 - $499,999", "credit_range": "700 - 749" }, "emails": [{ "address": "mspence32@gmail.com", "last_seen": "2026-03-08" }], "phones": [{ "number": "4437890815", "type": "mobile", "dnc": true }], "vehicle_history": [{ "make": "Ford", "model": "Explorer", "year": 2015, "vin": "1FM5K8D84FGA12345" }] } ], "error": "" } ``` The sample VIN above returns a canned documentation response (before auth) with fully populated demographics so the complete shape is visible. Demographics come back by default for any other VIN too — the second request example just narrows the response down to the `demographics` section alone. --- ## Person → Contact Info Resolve contact details for a specific person you already have a name and address for. ### Required attributes Your CarsXE API key. Max 50 characters. Max 50 characters. Street address only (no city/state) — max 100 characters. 5-digit US ZIP, optionally ZIP+4. ### Optional attributes Comma-separated subset of `demographics,emails,phones,vehicle_history`. Omit it to get everything. `demographics`, `vehicle_history`, `emails`, and `phones` all come from the same single call — nothing about `include` changes what's fetched or billed, only which sections appear in the response. Omit `include` to get everything back by default. --- ### Response attributes Whether the request was processed successfully. Echo of the query you made — `first_name`, `last_name`, `address`, `zip`, plus `include` when you passed one. Number of matches found — this is exactly what's billed (see the billing note above). One entry per matched person. See the table below. Machine-readable error code, or `""` on success. #### `matches[]` object | Field | Type | Description | | :--- | :--- | :--- | | `record_id` | string | Internal identity ID for this person. | | `first_name`, `last_name` | string | | | `age`, `gender` | string | Empty when not on file. | | `address` | object | `{ street, city, state, zip }` — `city`/`state` are the canonical values for the address, which may differ in formatting from what you sent. | | `vin` | string | A vehicle linked to this identity, or `""` when none. | | `emails[]` | array | `{ address, last_seen }`. Can be empty. | | `phones[]` | array | `{ number, type, dnc }`. Can be empty — don't assume a match has both emails and phones. | | `demographics` | object | `marital_status`, `home_owner`, `children_in_household`, `veteran_in_household`, `occupation`, `income_range`, `net_worth_range`, `credit_range` — all raw string values, empty unless on file. | | `vehicle_history[]` | array | Up to 3 other vehicles linked to this identity: `{ make, model, year, vin }`. | ### Errors | Status | `error` | Cause | | :--- | :--- | :--- | | 400 | `invalid_inputs` | Missing or oversized name/address. | | 400 | `invalid_zip` | Not a valid 5-digit (or ZIP+4) US ZIP. | | 404 | `no_data` | No match — not billed. | ```bash curl -G https://api.carsxe.com/v1/ownership/person \ -d key=CARSXE_API_KEY \ -d first_name=John \ -d last_name=Sample \ -d address="123 Example St" \ -d zip=90210 ``` ```json showLineNumbers { "success": true, "input": { "first_name": "John", "last_name": "Sample", "address": "123 Example St", "zip": "90210" }, "count": 1, "matches": [ { "record_id": "2074367570", "first_name": "John", "last_name": "Sample", "age": "45", "gender": "Male", "address": { "street": "123 Example St", "city": "Beverly Hills", "state": "CA", "zip": "90210" }, "vin": "1FT8X3BT0BEA61538", "emails": [ { "address": "john.sample@gmail.com", "last_seen": "2026-03-08" }, { "address": "jsample@msn.com", "last_seen": "" } ], "phones": [ { "number": "3105551901", "type": "", "dnc": false }, { "number": "3105558018", "type": "", "dnc": false } ], "demographics": { "marital_status": "Married", "home_owner": "Home Owner", "children_in_household": "", "veteran_in_household": "", "occupation": "President", "income_range": "$100,000 - $149,999", "net_worth_range": "$250,000 - $499,999", "credit_range": "700 - 749" }, "vehicle_history": [{ "make": "Ford", "model": "F-350", "year": 2011, "vin": "1FT8X3BT0BEA61538" }] } ], "error": "" } ``` --- ## Address → Residents Find everyone on file at a street address. ### Required attributes Your CarsXE API key. Street address only, max 100 characters. 5-digit US ZIP, optionally ZIP+4. ### Optional attributes Comma-separated subset of `demographics,emails,phones,vehicle_history`. Omit it to get everything. Legacy alias (`vehicle_history` or `compliance`) from before `include` existed — still accepted and echoed back, but no longer changes what's fetched or shown. Use `include` instead. `demographics`, `vehicle_history`, `emails`, and `phones` all come from the same single call — nothing about `include` changes what's fetched or billed, only which sections appear in the response. Omit `include` to get everything back by default. --- ### Response attributes Whether the request was processed successfully. Echo of the query you made — `address`, `zip`, plus `include`/`variant` when you passed them. Number of matches found — this is exactly what's billed (see the billing note above). One entry per matched resident. See the table below. Machine-readable error code, or `""` on success. #### `matches[]` object | Field | Type | Description | | :--- | :--- | :--- | | `record_id` | string | Internal identity ID for this person. | | `first_name`, `last_name` | string | | | `age`, `gender` | string | Empty when not on file. | | `address` | object | `{ street, city, state, zip }` — `city`/`state` are the canonical values for the address, which may differ in formatting from what you sent. | | `vin` | string | A vehicle linked to this identity, or `""` when none. | | `emails[]` | array | `{ address, last_seen }`. Can be empty. | | `phones[]` | array | `{ number, type, dnc }`. Can be empty — don't assume a match has both emails and phones. | | `demographics` | object | `marital_status`, `home_owner`, `children_in_household`, `veteran_in_household`, `occupation`, `income_range`, `net_worth_range`, `credit_range` — all raw string values, empty unless on file. | | `vehicle_history[]` | array | Up to 3 other vehicles linked to this identity: `{ make, model, year, vin }`. | ### Errors | Status | `error` | Cause | | :--- | :--- | :--- | | 400 | `invalid_inputs` | Missing/oversized address, or invalid `variant`. | | 400 | `invalid_zip` | Not a valid 5-digit (or ZIP+4) US ZIP. | | 404 | `no_data` | No match — not billed. | ```bash curl -G https://api.carsxe.com/v1/ownership/address \ -d key=CARSXE_API_KEY \ -d address="123 Example St" \ -d zip=90210 ``` ```json showLineNumbers { "success": true, "input": { "address": "123 Example St", "zip": "90210" }, "count": 2, "matches": [ { "record_id": "2074367570", "first_name": "John", "last_name": "Sample", "age": "45", "gender": "Male", "address": { "street": "123 Example St", "city": "Beverly Hills", "state": "CA", "zip": "90210" }, "vin": "1FT8X3BT0BEA61538", "emails": [{ "address": "john.sample@gmail.com", "last_seen": "2026-03-08" }], "phones": [{ "number": "3105551901", "type": "", "dnc": false }], "demographics": { "marital_status": "Married", "home_owner": "Home Owner", "children_in_household": "", "veteran_in_household": "", "occupation": "President", "income_range": "$100,000 - $149,999", "net_worth_range": "$250,000 - $499,999", "credit_range": "700 - 749" }, "vehicle_history": [{ "make": "Ford", "model": "F-350", "year": 2011, "vin": "1FT8X3BT0BEA61538" }] }, { "record_id": "7304690614", "first_name": "Jane", "last_name": "Sample", "age": "43", "gender": "Female", "address": { "street": "123 Example St", "city": "Beverly Hills", "state": "CA", "zip": "90210" }, "vin": "", "emails": [{ "address": "jane.sample@yahoo.com", "last_seen": "" }], "phones": [{ "number": "3105558018", "type": "", "dnc": false }], "demographics": { "marital_status": "", "home_owner": "", "children_in_household": "", "veteran_in_household": "", "occupation": "", "income_range": "", "net_worth_range": "", "credit_range": "" }, "vehicle_history": [] } ], "error": "" } ``` --- ## Phone → Contact Info Resolve people linked to a US phone number. GET accepts one number or a comma-separated list; POST accepts a `phones` array. Max 100 unique numbers per request. ### Required attributes Your CarsXE API key (`query` on both GET and POST). GET: one or more US 10-digit numbers, comma-separated. Formatting and a leading `+1` are stripped. POST body: array of US 10-digit numbers (same normalization as GET). ### Optional attributes Comma-separated subset of `demographics,emails,phones,vehicle_history`. Omit it to get everything. Each returned `matches[]` entry is billed. If you send three numbers and two hit, you get a **200** with those matches and are billed for that count. If none hit, you get **404** `no_data` and are not billed. `queried_phone` on each match tells you which input number produced it. --- ### Response attributes Whether the request was processed successfully. Echo of the normalized numbers you queried — `phones`, plus `include` when you passed one. Number of matches found — this is exactly what's billed. One entry per matched person. Same fields as Person, plus `queried_phone`. Machine-readable error code, or `""` on success. ```bash curl -G https://api.carsxe.com/v1/ownership/phone \ -d key=YOUR_API_KEY \ -d phone=3105551901 ``` ```bash curl -X POST "https://api.carsxe.com/v1/ownership/phone?key=YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"phones":["3105551901","3105558018"]}' ``` --- ## ZIP → Area Search Search a broader area for people matching optional gender, age, and income filters. This is the only one-to-many, paginated lookup in the product. ### Required attributes Your CarsXE API key. Exactly 5 digits. ### Optional attributes `M` or `F`, case-insensitive. Whole number. Optional — only forwarded upstream when provided (CarsXE does not apply a default). Whole number. Optional — only forwarded upstream when provided (CarsXE does not apply a default). Full label, letter code, or a loose case/whitespace variant of either. See the table below. Default `1`. Default `15`, max `100`. Each record returned is billed individually, so a full page at `limit=100` bills up to 100 units in one call. Comma-separated subset of `demographics,emails,phones,vehicle_history`. Omit it to get everything — same behavior as VIN/Person. Legacy, deprecated. `vehicle_history` is accepted and echoed back for backward compatibility, but no longer changes the response — use `include` instead. #### Valid `income` values Pass the full string, the letter code alone, or a sloppy variant of either — `f`, `F. $50,000-$59,999`, and ` f ` all resolve to the same bucket. | Code | Full value | | :--- | :--- | | — | `Unknown` | | `A` | Under $10,000 | | `B` | $10,000–$19,999 | | `C` | $20,000–$29,999 | | `D` | $30,000–$39,999 | | `E` | $40,000–$49,999 | | `F` | $50,000–$59,999 | | `G` | $60,000–$74,999 | | `H` | $75,000–$99,999 | | `K` | $100,000–$149,999 | | `L` | $150,000–$174,999 | | `M` | $175,000–$199,999 | | `N` | $200,000–$249,999 | | `O` | $250K + | --- ### Response attributes Whether the request was processed successfully. The ZIP you queried. Only the filters you actually set — not the resolved defaults. Current page. Page size. Number of records on this page — this is exactly what's billed for this call (see the billing note above). One entry per matched person. See the table below. Echoes the `include` value you passed. Omitted entirely when you didn't pass one. Echoes the (legacy) `variant` value you passed. Omitted entirely when you didn't pass one. Machine-readable error code, or `""` on success. #### `records[]` object | Field | Type | Description | | :--- | :--- | :--- | | `record_id` | string | | | `first_name`, `last_name` | string | | | `age`, `gender` | string | Each record's own values, same as VIN/Person/Address — unrelated to the `gender`/`min_age`/`max_age` filter params (those only narrow which records match, they don't determine what's shown per record). | | `address` | object | `{ street, city, state, zip }`. | | `vin` | string | Linked VIN, or `""` when none. | | `vehicle` | object \| null | `{ make, model, year }`, or `null` when no vehicle is linked. | | `emails[]` | array | `{ address, last_seen }`. Included by default; narrow with `include`. | | `phones[]` | array | `{ number, dnc }`. Included by default; narrow with `include`. | | `demographics` | object | `marital_status`, `home_owner`, `children_in_household`, `veteran_in_household`, `occupation`, `income_range`, `net_worth_range`, `credit_range` — same shape as VIN/Person/Address, all raw string values. Frequently blank — this is a broad-search endpoint, not every record has every attribute on file. Included by default; narrow with `include`. | | `vehicle_history[]` | array | Up to 3 other vehicles linked to this person: `{ make, model, year, vin }`. Included by default; narrow with `include`. | ### Errors | Status | `error` | Cause | | :--- | :--- | :--- | | 400 | `invalid_zip` | Missing or not exactly 5 digits. | | 400 | `invalid_gender` | Not `M`/`F` after normalization. | | 400 | `invalid_age` | `min_age`/`max_age` not a whole number. | | 400 | `invalid_income` | Doesn't match any known code or label. | | 400 | `invalid_variant` | Unrecognized `variant` value. `variant` is a legacy, inert alias — kept for backward compatibility, still validated, but no longer changes what's fetched or shown. | | 404 | `no_data` | No records match — not billed. | ```bash curl -G https://api.carsxe.com/v1/ownership/zip \ -d key=CARSXE_API_KEY \ -d zip=00000 \ -d gender=f \ -d min_age=45 ``` ```json showLineNumbers { "success": true, "zip": "00000", "filters": {}, "page": 1, "limit": 15, "count": 1, "records": [ { "record_id": "2104840276", "first_name": "Victoria", "last_name": "Rose", "age": "34", "gender": "F", "address": { "street": "141 Hardwood Ln SE", "city": "Kalkaska", "state": "MI", "zip": "49646" }, "vin": "1HGBH41JXMN109186", "vehicle": { "make": "Honda", "model": "Civic", "year": 2021 }, "emails": [ { "address": "victoria.rose@example.com", "last_seen": "2026-07-11" }, { "address": "vrose2@gmail.com", "last_seen": "" } ], "phones": [ { "number": "2314567890", "dnc": false }, { "number": "2319876543", "dnc": true } ], "demographics": { "marital_status": "Married", "home_owner": "Home Owner", "children_in_household": "1", "veteran_in_household": "", "occupation": "Professional", "income_range": "F. $50,000-$59,999", "net_worth_range": "D. $50,000-$99,999", "credit_range": "H. 700-749" }, "vehicle_history": [{ "make": "Honda", "model": "Civic", "year": 2021, "vin": "1HGBH41JXMN109186" }] } ], "error": "" } ``` --- ## Shared behavior **Billing.** All five lookups follow the same rule: zero records means a `404` with `error: "no_data"`, no usage increment, and no charge. When there is data, you're billed per record returned, not per request — the charged quantity is exactly the number of entries in the response (`owners`/`matches`/`records`), so a 3-owner VIN response or a 40-record ZIP page bills 3 or 40 units respectively. ZIP and Phone are the ones to watch: ZIP is paginated (up to `limit=100`) and Phone accepts up to 100 numbers per call. **Every response tells you what request produced it.** Optional parameters that shape the response — `include` on all five endpoints, plus the legacy `variant` on Address and ZIP — are echoed back whenever they're set, and simply omitted when they're not. **`include` is one concept everywhere now.** On VIN, Person, Address, Phone, and ZIP alike, it only decides which already-fetched fields to show — the full record is always fetched and billed as a single base call regardless of what you pass. An unrecognized `include` value is ignored and falls back to showing everything; it's never rejected with `400`. The `variant` param on Address and ZIP is a legacy, inert alias kept for backward compatibility — it no longer selects a different lookup. --- ## Error codes | Status | Meaning | Seen on | | :-------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------- | :------- | | 200 | Success — at least one match found. | All five | | 400 | Malformed input — fix the request before retrying. | All five | | 401 | Missing/invalid API key, or an inactive account. | All five | | 403 | `api_not_enabled` — your key doesn't have the `ownership` entitlement. | All five | | 404 | `no_data` — valid request, zero matches, not billed. | All five | | 429 | Usage limit reached for your plan. | All five | | 503 | Kill-switch — Ownership temporarily unavailable. Body is `{ success: false, message: "The Ownership API is temporarily unavailable." }` (no `error` code). | All five | | 408 / 500 | Upstream timeout or vendor error — safe to retry. | All five |
  • Have a VIN? Use VIN.
  • Have a full name and address? Use Person.
  • Only have an address? Use Address.
  • Have a US phone number? Use Phone.
  • Have a ZIP code and want a filtered list of people in that area? Use ZIP.
  • }, { question: "Do I get charged if there's no match?", answer: "No. A 404 with error: \"no_data\" means the API correctly found nothing — it's not billed and doesn't count against your usage."}, { question: "What's the difference between variant and include on the Address endpoint?", answer: "There isn't one anymore in practice. variant is a legacy alias from before include existed — it's still accepted and echoed back for backward compatibility, but it no longer changes what's fetched or shown. Use include to pick which of demographics, emails, phones, and vehicle_history appear in the response; omit it to get everything."}, { question: "Why is demographics empty even though I didn't pass include?", answer: "demographics, like the rest of the response, comes back by default — you don't need to pass include to get it. An empty demographics object (or blank age/gender fields) just means that data isn't on file for that match, not that it was withheld."}, { question: "Can a VIN or address resolve to more than one person?", answer: "Yes — co-owners, prior owners still on file, roommates, or family members can all be legitimately linked to the same VIN or address. Always iterate the full owners/matches array rather than assuming the first entry is the only answer."}, { question: "Why are age and gender blank on ZIP search results?", answer: "On the ZIP endpoint, age and gender are filter inputs, not guaranteed per-record output fields. If you need a confirmed age or gender for a specific person, use VIN or Person instead."}, { question: "Does this API require authentication?", answer: "Yes. All five endpoints require your CarsXE API key as the key query parameter, and your key must have the ownership entitlement enabled."} ]} hidePadding /> --- # Vehicle Plate Decoder (Deprecated) > The Vehicle Plate Decoder API provides access to a library of vehicle's data based on the vehicle's registration/license plate number and state. Source: https://carsxe.com/docs/v1/plate-decoder This API is deprecated and will be removed in the future. Please use the [Plate Decoder V2 API](https://carsxe.com/docs/v2/plate-decoder) instead. The Vehicle Plate Decoder API looks up the vehicle through the database for matches and returns the VIN, make, model and year among other attributes. It can be coupled with other APIs to become even more powerful. The state is a two letter abbreviation of one of the 50 states, or DC (District of Columbia), GU (Guam), PR (Puerto Rico) or VI (Virgin Islands). International support includes the following countries: Australia, Brazil, United Kingdom, Ireland, Italy, Spain, India, Mexico and New Zealand. --- This endpoint allows you to retrieve vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. The two letter state code (US) such as `CA` or `NY`, Australian state (see FAQ) or Brazil `BR`, United Kingdom `UK`, Ireland `IR`, Italy `IT`, Spain `ES`, India `IND`, Mexico `MX` and New Zealand `NZ`. Australia `AU` Optional for `US`. ## Optional attributes The format of the response. One of `json` or `xml`. Defaults to `json`. --- ## Response attributes The vehicle identification number. Whether the plate decoder data has been retrieved. A stock photo of that general vehicle. (Use [Images API](https://carsxe.com/docs/v1/images) for more control) Where the vehicle was assembled. Vehicle description of make, model and trim. Year of the vehicle's registration. The vehicle make. The model of the vehicle. The specific vehicle body style. The vehicle's engine size. You may be use the following plate for test:
    • Plate: 7XER187
    • State: CA
    },{question: "How can I search Australian vehicle registrations?", answer: <>For Australia use country=AU&state=NSW. The list of possible Australian states are:
    • NSW (New South Wales),
    • VIC (Victoria),
    • QLD (Queensland incl. North Queensland),
    • SA (South Australia),
    • ACT (Canberra),
    • NT (Northern Territory),
    • TAS (Tasmania),
    • WA (Western Australia),
    },{question: "Is the Vehicle Plate Decoder API included in the free Sandbox?", answer: <>Yes! The Vehicle Plate Decoder API is included in the free Sandbox as part of the shared lifetime quota (up to 100 API calls). For more information visit our pricing page.}]} hidePadding /> ```bash curl -G https://api.carsxe.com/platedecoder \ -d key=CARSXE_API_KEY \ -d plate=7XER187 \ -d state=CA ``` ```js import { CarsXE } from "carsxe-api"; const carsxe = new CarsXE("CARSXE_API_KEY"); const plate = "7XER187"; const state = "CA"; try { const plateDecoder = await carsxe.plateDecoder({ plate, state }); console.log(plateDecoder); } catch (error) { console.error(error); } ``` ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('CARSXE_API_KEY') plate = '7XER187' state = 'CA' try: plate_decoder = asyncio.run(carsxe.plate_decoder({"plate": plate, "state": state})) print(plate_decoder) except Exception as e: print(f"Error: {e}") ``` ```php plateDecoder(['plate' => $plate, 'state' => $state]); print_r($plateDecoder); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ```ruby require 'carsxe' API_KEY = 'CARSXE_API_KEY' carsxe = Carsxe::CarsXE.new(api_key: API_KEY) plate = '7XER187' state = 'CA' begin plate_decoder = carsxe.plate_decoder('plate' => plate, 'state' => state) puts plate_decoder rescue StandardError => error puts "Error: #{error.message}" end ``` ```go package main import ( "fmt" "github.com/carsxe/carsxe-go-package" ) func main() { client := carsxe.New("CARSXE_API_KEY") plate := "7XER187" state := "CA" plateDecoder := client.PlateDecoder(map[string]string{"plate": plate, "state": state}) fmt.Println(plateDecoder) } ``` ```java import io.github.carsxe.CarsXE; import java.util.Map; import java.util.HashMap; public class Main { public static void main(String[] args) { CarsXE carsxe = new CarsXE("CARSXE_API_KEY"); Map params = new HashMap<>(); params.put("plate", "7XER187"); params.put("state", "CA"); try { Map plateDecoder = carsxe.platedecoder(params); System.out.println(plateDecoder); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } } } ``` ```swift import carsxe let carsxe = CarsXE(apiKey: "CARSXE_API_KEY") let plate = "7XER187" let state = "CA" do { let plateDecoder = try carsxe.plateDecoder(["plate": plate, "state": state]) print(plateDecoder) } catch { print("Error: \(error)") } ``` ```csharp using carsxe; using System; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { string API_KEY = "CARSXE_API_KEY"; CarsXE carsxe = new CarsXE(API_KEY); string plate = "7XER187"; string state = "CA"; try { var plateDecoder = await carsxe.PlateDecoder(new Dictionary { { "plate", plate }, { "state", state } }); Console.WriteLine(plateDecoder); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } } } ``` ```json showLineNumbers {{ title: 'Response' }} { "success": true, "input": { "plate": "7XER187", "state": "CA", "country": "US" }, "vin": "3KPFK4A78HE103497", "assembly": "Mexico", "Description": "Kia Forte LX", "BodyStyle": "Sedan", "RegistrationYear": "2017", "EngineSize": "2.0L I4 MPI", "CarMake": "Kia", "CarModel": "Forte" } ```
    --- # License Plate Image Recognition > High-accuracy, fast ALPR software via API Cloud for retrieving vehicle license plates or registration numbers from images. Source: https://carsxe.com/docs/v1/plate-image-recognition Our plate recognition API provides accurate recognition of license plates from images. The API is trained on license plates from over 100 countries and states. You can use this in conjunction with the [Vehicle Plate Decoder API](https://carsxe.com/vehicle-plate-decoder) to first decipher the plate number from an image and then retrieve the vehicle's specifications. --- This endpoint allows you to retrieve a vehicle's license plate number or registration number from an image of the plate. ## Required attributes Your CarsXE API key. JSON body field containing a URL to an image of a vehicle's license plate. --- ## Response attributes Whether the algorithm has been able to successfully analyze the image. A list (array) of "plate" elements or objects, each of which contain the box of where the plate is in the image, a list of candidates with the relative confidence scores, the region and more info. The confidence score is a probability that the plate in the image matches the values returned String detailing error if any. How much time it took to process the image. Yes! The License Plate Image Recognition API is included in the free Sandbox as part of the shared lifetime quota (up to 100 API calls). For more information visit our pricing page.}]} hidePadding /> ```bash curl --location 'https://api.carsxe.com/platerecognition?key=CARSXE_API_KEY' \ --header 'Content-Type: application/json' \ --data '{"image_url": "https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public" }' ``` ```js import { CarsXE } from "carsxe-api"; const carsxe = new CarsXE("CARSXE_API_KEY"); const imageUrl = "https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public"; try { const plateRecognition = await carsxe.plateRecognition({ imageUrl }); console.log(plateRecognition); } catch (error) { console.error(error); } ``` ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('CARSXE_API_KEY') image_url = 'https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public' try: plate_recognition = asyncio.run(carsxe.plate_image_recognition({"upload_url": image_url})) print(plate_recognition) except Exception as e: print(f"Error: {e}") ``` ```php plateRecognition(['imageUrl' => $imageUrl]); print_r($plateRecognition); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ```ruby require 'carsxe' API_KEY = 'CARSXE_API_KEY' carsxe = Carsxe::CarsXE.new(api_key: API_KEY) image_url = 'https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public' begin plate_recognition = carsxe.plate_recognition('imageUrl' => image_url) puts plate_recognition rescue StandardError => error puts "Error: #{error.message}" end ``` ```go package main import ( "fmt" "github.com/carsxe/carsxe-go-package" ) func main() { client := carsxe.New("CARSXE_API_KEY") imageUrl := "https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public" plateRecognition := client.PlateRecognition(map[string]string{"imageUrl": imageUrl}) fmt.Println(plateRecognition) } ``` ```java import io.github.carsxe.CarsXE; import java.util.Map; import java.util.HashMap; public class Main { public static void main(String[] args) { CarsXE carsxe = new CarsXE("CARSXE_API_KEY"); Map params = new HashMap<>(); params.put("imageUrl", "https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public"); try { Map plateRecognition = carsxe.plateRecognition(params); System.out.println(plateRecognition); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } } } ``` ```swift import carsxe let carsxe = CarsXE(apiKey: "CARSXE_API_KEY") let imageUrl = "https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public" do { let plateRecognition = try carsxe.plateRecognition(["imageUrl": imageUrl]) print(plateRecognition) } catch { print("Error: \(error)") } ``` ```csharp using carsxe; using System; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { string API_KEY = "CARSXE_API_KEY"; CarsXE carsxe = new CarsXE(API_KEY); string imageUrl = "https://imagedelivery.net/moyiiSImjJPI_EZVxNMBBw/f49aed53-d736-4370-f3f4-97418841c800/public"; try { var plateRecognition = await carsxe.PlateRecognition(new Dictionary { { "imageUrl", imageUrl } }); Console.WriteLine(plateRecognition); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } } } ``` ```json showLineNumbers { "success": true, "message": "", "results": [ { "box": { "xmin": 2045, "ymin": 1400, "xmax": 2732, "ymax": 1849 }, "plate": "9djc652", "region": { "code": "us-ca", "score": 0.849 }, "score": 1, "candidates": [ { "score": 1, "plate": "9djc652" } ], "dscore": 0.928, "vehicle": { "score": 0.963, "type": "Sedan", "box": { "xmin": 56, "ymin": 0, "xmax": 3594, "ymax": 2913 } } } ], "processing_time": 117.822 } ``` --- # Recalls Batch API > Check thousands of vehicles for safety recalls in a single batch by submitting VINs and polling for results. Source: https://carsxe.com/docs/v1/recalls-batch The Recalls Batch API allows you to submit up to 10,000 VINs in a single request for bulk recall checking. Unlike the standard [Vehicle Recalls API](https://carsxe.com/docs/v1/vehicle-recalls) which checks one VIN at a time, the batch API is designed for high-volume operations like fleet management, dealership inventory scans, and wholesale auction processing. The Recalls Batch API is **asynchronous**: **submit** your VINs, **poll** for status (or use a **webhook**), then **retrieve** results when the job is `completed` or `partial`. VINs that are not already in CarsXE cache are queued for full batch processing; turnaround is typically **30-60 minutes** depending on batch size and system load. --- ## How It Works 1. **Submit** — POST your VINs (JSON array, inline CSV, or HTTPS URL to a CSV). You get a `batchId` immediately. The HTTP status is **202 Accepted** when the batch is accepted. 2. **Poll** — Call the status endpoint with `batchId` until status is `completed`, `partial`, or `failed` (or wait for your **customer webhook**). 3. **Retrieve** — GET results as JSON or download CSV from `/v1/recalls-batch/download`. **Caching:** VINs that were checked recently may be served from cache. If **every** VIN in the batch is cached, the submit response can already show `status: "completed"` with full `processedVins` and no `uploading` / `processing` phase. **Full processing path:** Uncached VINs move through `uploading`, then `processing`, while CarsXE prepares and runs the batch; results are written when processing finishes. --- ## Step 1: Submit a Batch Send a POST request with VINs to start a batch recall check. You can provide VINs in three ways — use whichever is most convenient, or even combine them: ### Input methods (provide at least one) JSON array of 17-character VIN strings. Inline CSV text containing VINs (one per line, or a single `vin` column). HTTPS URL to a CSV file containing VINs. Supported hosts: Google Sheets, Google Cloud Storage, AWS S3, Dropbox, Azure Blob, DigitalOcean Spaces, and Box. Google Sheets sharing links and Dropbox sharing links are auto-converted to direct download format. Max file size: 5 MB. You can combine input methods — for example, pass some VINs in `vins` and a `csvUrl` for the rest. All VINs are merged and deduplicated before processing. The combined total must not exceed 10,000. ### Required query parameter Your CarsXE API key (query parameter). Official SDKs may send the same key in the `x-api-key` header instead. ### Optional attributes HTTPS URL for a **customer** webhook: CarsXE POSTs a JSON payload when the batch finishes (see [Webhook notifications](#webhook-notifications)). Must be a valid HTTPS URL allowed by CarsXE validation rules. --- ### Submit response Successful submission returns **HTTP 202** with: `true` when the batch was accepted. Unique identifier for your batch. Use this for status, results, and download. `uploading` (batch being prepared), `processing` (recall check in progress), or `completed` if all VINs were satisfied from cache. Number of unique VINs in the batch (after deduplication). VINs already reflected in this response (e.g. cache hits); increases again when the batch completes. Count of VINs with at least one **safety** recall (aligned with `hasRecalls` on results). Percentage `(hitCount / processedVins) × 100` when processing is done; may be `0` on the initial 202 until completion. ISO 8601 timestamp when the batch was created. ISO 8601 timestamp of the last job update. ```bash curl -X POST "https://api.carsxe.com/v1/recalls-batch/submit?key=CARSXE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "vins": [ "1HGBH41JXMN109186", "5YJSA1E26HF000001", "1C4JJXR64PW696340" ], "webhookUrl": "https://your-server.com/webhook" }' ``` ```js import { CarsXE } from "@carsxe/sdk"; const carsxe = new CarsXE({ apiKey: "CARSXE_API_KEY" }); try { const response = await carsxe.submitBulkRecallBatch({ vins: [ "1HGBH41JXMN109186", "5YJSA1E26HF000001", "1C4JJXR64PW696340", ], webhookUrl: "https://your-server.com/webhook", }); console.log(response.data?.batchId); } catch (error) { console.error(error); } ``` ```python import asyncio from carsxe import CarsXE async def main(): async with CarsXE(api_key="CARSXE_API_KEY") as carsxe: response = await carsxe.submit_bulk_recall_batch( vins=[ "1HGBH41JXMN109186", "5YJSA1E26HF000001", "1C4JJXR64PW696340", ], webhook_url="https://your-server.com/webhook", ) print(response.data.batch_id) asyncio.run(main()) ``` ```bash # Google Sheets sharing link (auto-converted to CSV export) curl -X POST "https://api.carsxe.com/v1/recalls-batch/submit?key=CARSXE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "csvUrl": "https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/edit" }' # AWS S3 signed URL curl -X POST "https://api.carsxe.com/v1/recalls-batch/submit?key=CARSXE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "csvUrl": "https://my-bucket.s3.amazonaws.com/vins.csv?X-Amz-Signature=..." }' # Dropbox sharing link (auto-converted to direct download) curl -X POST "https://api.carsxe.com/v1/recalls-batch/submit?key=CARSXE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "csvUrl": "https://www.dropbox.com/s/abc123/vins.csv" }' ``` ```js import { CarsXE } from "@carsxe/sdk"; const carsxe = new CarsXE({ apiKey: "CARSXE_API_KEY" }); try { // Paste a Google Sheets sharing link directly const response = await carsxe.submitBulkRecallBatch({ csvUrl: "https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/edit", }); console.log(response.data?.batchId); } catch (error) { console.error(error); } ``` ```python import asyncio from carsxe import CarsXE async def main(): async with CarsXE(api_key="CARSXE_API_KEY") as carsxe: response = await carsxe.submit_bulk_recall_batch( csv_url="https://docs.google.com/spreadsheets/d/SHEET_ID/export?format=csv", ) print(response.data.batch_id) asyncio.run(main()) ``` ```json showLineNumbers { "success": true, "data": { "batchId": "brb_mnablbn7_wvbaqv", "status": "uploading", "totalVins": 3, "processedVins": 0, "hitCount": 0, "hitRate": 0, "createdAt": "2026-03-24T10:00:00.000Z", "updatedAt": "2026-03-24T10:00:00.000Z" }, "message": "Batch submitted and queued for processing. Poll the status endpoint or wait for webhook notification." } ``` --- ## Step 2: Check Status Poll the status endpoint to check if your batch has finished processing. ### Required attributes Your CarsXE API key. The batch ID returned from the submit endpoint. --- ### Status values | Status | Description | | :--- | :--- | | `pending` | Reserved for future use; batches created through this API typically start as `uploading` or `completed`. | | `uploading` | Batch accepted; CarsXE is preparing the batch for processing. | | `processing` | Recall check in progress. Poll every 30–60 seconds. | | `completed` | All VINs processed. Results are ready. | | `partial` | Results available, but fewer VIN rows were returned than `totalVins` (treat as complete for retrieval). | | `failed` | Processing failed. See `errorMessage`. | --- ### Status response attributes The batch identifier. Optional numeric correlation id assigned when results are finalized. Current processing status (see table above). Total VINs submitted in this batch. Number of VINs with rows in the merged result set. VINs with at least one **safety** recall. Percentage of processed VINs with a safety recall hit (0–100, two decimal places). ISO 8601 timestamp when processing finished (`undefined` / omitted while in progress). Error details if status is `failed`. ```bash curl -G "https://api.carsxe.com/v1/recalls-batch/status" \ -d key=CARSXE_API_KEY \ -d batchId=brb_mnablbn7_wvbaqv ``` ```js import { CarsXE } from "@carsxe/sdk"; const carsxe = new CarsXE({ apiKey: "CARSXE_API_KEY" }); try { const status = await carsxe.getBulkRecallBatchStatus("brb_mnablbn7_wvbaqv"); console.log(status.data?.status); console.log(`${status.data?.processedVins}/${status.data?.totalVins}`); } catch (error) { console.error(error); } ``` ```python import asyncio from carsxe import CarsXE async def main(): async with CarsXE(api_key="CARSXE_API_KEY") as carsxe: status = await carsxe.get_bulk_recall_batch_status("brb_mnablbn7_wvbaqv") print(status.data.status) print(f"{status.data.processed_vins}/{status.data.total_vins}") asyncio.run(main()) ``` ```json showLineNumbers { "success": true, "data": { "batchId": "brb_mnablbn7_wvbaqv", "numericBatchId": 200426, "status": "completed", "totalVins": 3, "processedVins": 3, "hitCount": 2, "hitRate": 66.67, "createdAt": "2026-03-24T10:00:00.000Z", "updatedAt": "2026-03-24T10:16:43.000Z", "completedAt": "2026-03-24T10:16:43.000Z", "errorMessage": null } } ``` --- ## Step 3: Retrieve Results Once the batch status is `completed` or `partial`, fetch full recall rows as JSON or download CSV. ### Required attributes Your CarsXE API key. The batch ID returned from the submit endpoint. --- ### Results shape Each VIN has `vin`, `hasRecalls` (true if there is at least one **safety** recall), `recallCount`, and `recalls` — an array of **sparse** objects in **camelCase**, mirroring CarsXE’s bulk recall row layout: - Only **non-empty** string fields and booleans are included per recall. - Dealer and batch metadata (`dealerName`, `dealerCode`, batch name/date fields) are **not** exposed in JSON. Common keys include (when present): `recallNhtsaNumber`, `recallOemNumber`, `recallTitle`, `recallDescription`, `recallRiskDescription`, `recallRemedyDescription`, `recallType`, `recallState`, `recallStatus`, `recallIssueDate`, `recallRefreshDate`, `severityCode`, `vehicleYear`, `vehicleMake`, `vehicleModel`, `isRemedied`, optional `field1`–`field10`, etc. See the `@carsxe/shared` type `BulkRecallBatchRow` for the full schema; the API returns the trimmed `BulkRecallBatchRowApi` projection. --- ### CSV download GET `/v1/recalls-batch/download` with the same `key` and `batchId`. Returns `text/csv` with a `Content-Disposition` filename. You can also build the URL with `getBulkRecallBatchDownloadUrl` (JS) or `get_bulk_recall_batch_download_url` (Python). ```bash curl -G "https://api.carsxe.com/v1/recalls-batch/results" \ -d key=CARSXE_API_KEY \ -d batchId=brb_mnablbn7_wvbaqv ``` ```js import { CarsXE } from "@carsxe/sdk"; const carsxe = new CarsXE({ apiKey: "CARSXE_API_KEY" }); try { const results = await carsxe.getBulkRecallBatchResults("brb_mnablbn7_wvbaqv"); for (const result of results.data?.results ?? []) { console.log(`${result.vin}: ${result.recallCount} rows`); if (result.hasRecalls) { for (const recall of result.recalls) { console.log(` - ${recall.recallNhtsaNumber ?? recall.recallOemNumber}: ${recall.recallTitle}`); } } } } catch (error) { console.error(error); } ``` ```python import asyncio from carsxe import CarsXE async def main(): async with CarsXE(api_key="CARSXE_API_KEY") as carsxe: results = await carsxe.get_bulk_recall_batch_results("brb_mnablbn7_wvbaqv") for result in results.data["results"]: print(f"{result.vin}: {result.recall_count} rows") if result.has_recalls: for recall in result.recalls: rid = recall.recall_nhtsa_number or recall.recall_oem_number print(f" - {rid}: {recall.recall_title}") asyncio.run(main()) ``` ```bash curl -G "https://api.carsxe.com/v1/recalls-batch/download" \ -d key=CARSXE_API_KEY \ -d batchId=brb_mnablbn7_wvbaqv \ -o recalls_brb_mnablbn7_wvbaqv.csv ``` ```json showLineNumbers { "success": true, "data": { "job": { "batchId": "brb_mnablbn7_wvbaqv", "numericBatchId": 200426, "status": "completed", "totalVins": 3, "processedVins": 3, "hitCount": 2, "hitRate": 66.67, "createdAt": "2026-03-24T10:00:00.000Z", "completedAt": "2026-03-24T10:16:43.000Z" }, "results": [ { "vin": "1HGBH41JXMN109186", "hasRecalls": true, "recallCount": 1, "recalls": [ { "recallNhtsaNumber": "20V123000", "vehicleMake": "Honda", "recallTitle": "Passenger frontal air bag inflator", "recallDescription": "Takata front passenger air bag inflator may rupture.", "recallRiskDescription": "Rupture may cause injury from metal fragments.", "recallRemedyDescription": "Dealers will replace the inflator, free of charge.", "recallType": "Safety", "recallStatus": "Open", "recallIssueDate": "2020-03-15", "isRemedied": false } ] }, { "vin": "5YJSA1E26HF000001", "hasRecalls": false, "recallCount": 0, "recalls": [] } ] } } ``` --- ## Webhook notifications If you pass `webhookUrl` on submit, CarsXE sends an **HTTPS POST** with `Content-Type: application/json` when the batch reaches a terminal state (`completed` or `partial`). Redirects are not followed. The request times out on CarsXE’s side after about **30 seconds** — respond quickly on your server. ```json { "event": "bulk_recall_batch_complete", "batchId": "brb_mnablbn7_wvbaqv", "status": "completed", "totalVins": 100, "processedVins": 100, "hitCount": 25, "hitRate": 25, "downloadUrl": "https://api.carsxe.com/v1/recalls-batch/download?key=…&batchId=…", "timestamp": "2026-03-24T10:16:43.000Z" } ``` The `downloadUrl` includes your API key in the query string so you can fetch the CSV without assembling the URL yourself. Your API key is **not** repeated as a separate JSON field. --- ## Complete example: submit, poll, and retrieve ```js import { CarsXE } from "@carsxe/sdk"; const carsxe = new CarsXE({ apiKey: "CARSXE_API_KEY" }); const submitResponse = await carsxe.submitBulkRecallBatch({ vins: [ "1HGBH41JXMN109186", "5YJSA1E26HF000001", "1C4JJXR64PW696340", ], }); const batchId = submitResponse.data?.batchId; if (!batchId) throw new Error("No batchId"); console.log(`Batch submitted: ${batchId}`); let status; do { await new Promise((r) => setTimeout(r, 30_000)); status = await carsxe.getBulkRecallBatchStatus(batchId); console.log(`Status: ${status.data?.status}`); } while ( status.data?.status === "processing" || status.data?.status === "uploading" ); if (status.data?.status === "completed" || status.data?.status === "partial") { const results = await carsxe.getBulkRecallBatchResults(batchId); console.log(`Processed: ${results.data?.job.processedVins} VINs`); console.log(`Safety recall hits: ${results.data?.job.hitCount}`); for (const result of results.data?.results ?? []) { if (result.hasRecalls) { console.log(`${result.vin}: ${result.recallCount} recall row(s)`); } } } ``` ```python import asyncio from carsxe import CarsXE async def main(): async with CarsXE(api_key="CARSXE_API_KEY") as carsxe: submit = await carsxe.submit_bulk_recall_batch( vins=[ "1HGBH41JXMN109186", "5YJSA1E26HF000001", "1C4JJXR64PW696340", ], ) batch_id = submit.data.batch_id print(f"Batch submitted: {batch_id}") while True: await asyncio.sleep(30) status = await carsxe.get_bulk_recall_batch_status(batch_id) print(f"Status: {status.data.status}") if status.data.status not in ("processing", "uploading"): break if status.data.status in ("completed", "partial"): results = await carsxe.get_bulk_recall_batch_results(batch_id) job = results.data["job"] print(f"Processed: {job.processed_vins} VINs") print(f"Safety recall hits: {job.hit_count}") for result in results.data["results"]: if result.has_recalls: print(f"{result.vin}: {result.recall_count} recall row(s)") asyncio.run(main()) ``` --- ## Error responses | Status | Error | Description | | :--- | :--- | :--- | | 400 | `BULK_RECALL_BATCH_MISSING_VINS` | No VINs provided. Supply `vins`, `csv`, or `csvUrl`. | | 400 | `BULK_RECALL_BATCH_TOO_MANY_VINS` | Combined VIN count exceeds 10,000. | | 400 | `BULK_RECALL_BATCH_INVALID_VIN` | One or more VINs are not 17 valid characters. | | 400 | `BULK_RECALL_BATCH_CSV_URL_INVALID` | The `csvUrl` is not a valid HTTPS URL. | | 400 | `BULK_RECALL_BATCH_CSV_URL_HOST_NOT_ALLOWED` | The `csvUrl` host is not allowed. | | 400 | `BULK_RECALL_BATCH_CSV_URL_TOO_LARGE` | The CSV at `csvUrl` exceeds the size limit (5 MB). | | 400 | `BULK_RECALL_BATCH_CSV_URL_NOT_TEXT` | The URL did not return a plain text CSV. | | 400 | `BULK_RECALL_BATCH_CSV_URL_HTTP_ERROR` | The storage server returned an HTTP error (e.g. expired signed URL). | | 400 | `BULK_RECALL_BATCH_CSV_URL_REDIRECT_ERROR` | Too many redirects or an invalid redirect when fetching `csvUrl`. | | 400 | `BULK_RECALL_BATCH_CSV_URL_TIMEOUT` | Downloading the CSV from `csvUrl` timed out. | | 400 | `BULK_RECALL_BATCH_INVALID_WEBHOOK_URL` | The `webhookUrl` is not a valid allowed HTTPS URL. | | 401 | `MISSING_API_KEY` | No API key provided. | | 401 | `USER_NOT_FOUND` | Invalid API key. | | 401 | `USER_NOT_ACTIVE` | Account is not active. | | 404 | `BULK_RECALL_BATCH_NOT_FOUND` | Batch not found or you don't have access. | | 405 | `ONLY_POST_ALLOWED` | Submit endpoint requires POST. | | 409 | `BULK_RECALL_BATCH_NOT_COMPLETE` | Batch still processing (results/download only). | | 429 | _(usage message)_ | Plan or usage limit exceeded (when usage metering applies). | | 500 | `BULK_RECALL_BATCH_STORAGE_ERROR` | Internal storage or batch handoff error. Retry later. | | 502 | `BULK_RECALL_BATCH_CSV_URL_FETCH_FAILED` | Server could not fetch the CSV from `csvUrl`. | --- Yes! The Recalls Batch API is included in the free Sandbox with a lifetime limit of 5 API calls. For more information visit our pricing page.} ]} hidePadding /> --- # Recalls by YMM > Look up safety recalls by year, make, and model — no VIN needed. Source: https://carsxe.com/docs/v1/recalls-ymm The Recalls by YMM API provides structured safety recall data by year, make, and model — no VIN required. This is ideal for developers who need to check recalls for an entire model line, populate fleet dashboards, or enrich vehicle listings without individual VINs. --- This endpoint allows you to retrieve safety recall data for any vehicle using its year, make, and model. ## Required attributes Your CarsXE API key. The 4-digit model year of the vehicle (e.g. `2019`). Must be between 1900 and the current model year plus one. The vehicle manufacturer name (e.g. `Toyota`). Case-insensitive — the API normalises to uppercase internally. The vehicle model name (e.g. `Camry`). Case-insensitive — the API normalises to uppercase internally. --- ## Response attributes Whether the request was processed successfully. The normalised input values echoed back: `year`, `make` (uppercase), `model` (uppercase). The recall result object for the requested vehicle. The vehicle manufacturer name, normalised to uppercase. The vehicle model name, normalised to uppercase. The 4-digit model year of the vehicle. The total number of recalls found for this year, make, and model combination. `true` when `recall_count` is greater than zero; `false` otherwise. An array of recall objects. Empty array when there are no recalls. The NHTSA campaign number uniquely identifying this recall (e.g. `19V312000`). The full legal name of the manufacturer issuing the recall. `true` if NHTSA advises parking the vehicle until the remedy is completed. `true` if NHTSA advises parking the vehicle outside and away from structures until the remedy is completed. `true` if the remedy can be delivered via an over-the-air software update. The date NHTSA received the recall report, in `MM/DD/YYYY` format. The vehicle component or system affected by the recall (e.g. `ELECTRICAL SYSTEM`). A detailed description of the defect or non-compliance that prompted the recall. The safety risk to vehicle occupants or others if the defect is not corrected. The corrective action the manufacturer will take, including whether it is free of charge. Additional notes from the manufacturer or NHTSA, such as owner notification timelines. ISO 8601 timestamp of the API response. Yes! The Recalls by YMM API is included in the free Sandbox as part of the shared lifetime quota (up to 100 API calls). For more information visit our pricing page. } ]} hidePadding /> ```bash curl -G https://api.carsxe.com/v1/recalls-ymm \ -d key=CARSXE_API_KEY \ -d year=2026 \ -d make=toyota \ -d model=corolla ``` ```js import { CarsXE } from "carsxe-api"; const carsxe = new CarsXE("CARSXE_API_KEY"); try { const recalls = await carsxe.recallsYmm({ year: "2026", make: "toyota", model: "corolla", }); console.log(recalls); } catch (error) { console.error(error); } ``` ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('CARSXE_API_KEY') try: recalls = asyncio.run(carsxe.recalls_ymm({ "year": "2026", "make": "toyota", "model": "corolla", })) print(recalls) except Exception as e: print(f"Error: {e}") ``` ```php recallsYmm([ 'year' => '2026', 'make' => 'toyota', 'model' => 'corolla', ]); print_r($recalls); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ```ruby require 'carsxe' carsxe = Carsxe::CarsXE.new(api_key: 'CARSXE_API_KEY') begin recalls = carsxe.recalls_ymm( 'year' => '2026', 'make' => 'toyota', 'model' => 'corolla' ) puts recalls rescue StandardError => error puts "Error: #{error.message}" end ``` ```go package main import ( "fmt" "github.com/carsxe/carsxe-go-package" ) func main() { client := carsxe.New("CARSXE_API_KEY") recalls := client.RecallsYmm(map[string]string{ "year": "2026", "make": "toyota", "model": "corolla", }) fmt.Println(recalls) } ``` ```java import io.github.carsxe.CarsXE; import java.util.Map; import java.util.HashMap; public class Main { public static void main(String[] args) { CarsXE carsxe = new CarsXE("CARSXE_API_KEY"); Map params = new HashMap<>(); params.put("year", "2026"); params.put("make", "toyota"); params.put("model", "corolla"); try { Map recalls = carsxe.recallsYmm(params); System.out.println(recalls); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } } } ``` ```swift import carsxe let carsxe = CarsXE(apiKey: "CARSXE_API_KEY") do { let recalls = try carsxe.recallsYmm([ "year": "2026", "make": "toyota", "model": "corolla", ]) print(recalls) } catch { print("Error: \(error)") } ``` ```csharp using carsxe; using System; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { CarsXE carsxe = new CarsXE("CARSXE_API_KEY"); var params = new Dictionary { { "year", "2026" }, { "make", "toyota" }, { "model", "corolla" }, }; try { var recalls = await carsxe.RecallsYmm(params); Console.WriteLine(recalls); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } } } ``` ```json showLineNumbers { "success": true, "input": { "year": "2026", "make": "TOYOTA", "model": "COROLLA" }, "data": { "make": "TOYOTA", "model": "COROLLA", "model_year": "2026", "recall_count": 1, "has_recalls": true, "recalls": [ { "nhtsa_campaign_number": "26V110000", "manufacturer": "Toyota Motor Engineering & Manufacturing", "park_it": false, "park_outside": false, "over_the_air_update": false, "report_received_date": "25/02/2026", "component": "EXTERIOR LIGHTING:HEADLIGHTS", "summary": "Toyota Motor Engineering & Manufacturing (Toyota) is recalling certain 2026 Corolla vehicles. The front headlights may have missing headlight aim markings, which can result in improperly aimed headlights during service. As such, these vehicles fail to comply with the requirements of Federal Motor Vehicle Safety Standard number 108, \"Lamps, Reflective Devices, and Associated Equipment.\"", "consequence": "Incorrectly aimed headlights can reduce driver visibility or create a glare for oncoming traffic, increasing the risk of a crash.", "remedy": "Dealers will replace both front headlight assemblies, free of charge. Owner notification letters were mailed April 20, 2026. Owners may contact Toyota's customer service at 1-800-331-4331. Toyota's number for this recall is 26TA05.", "notes": null } ] }, "timestamp": "2026-06-29T12:00:45.786Z" } ``` --- # Vehicle Specifications API > Discover comprehensive vehicle specifications and decode vehicle identification numbers (VINs) effortlessly with CarsXE API. Get detailed information about any vehicle by querying its VIN. Explore the different endpoints available to manage contacts programmatically. Start leveraging the power of CarsXE to access accurate and up-to-date vehicle data. Source: https://carsxe.com/docs/v1/specifications As the name suggests, vehicle specifications (a.k.a VIN Decoding) are a core part of CarsXE — the very reason CarsXE exists is so you can retrieve vehicle information. On this page, we'll dive into the different contact endpoints you can use to manage contacts programmatically. We'll look at how to query and retrieve vehicle specifications from a vehicle identification number (VIN). --- ## Required attributes Your CarsXE API key. The 17 character long vehicle identification number. ## Optional attributes The format of the response. One of `json` or `xml`. Defaults to `json`. Request for extra data. Set to `1` to use. Significantly slower than the regular request but will retrieve additional data. If we're unable to decode the VIN an [International VIN decoding](https://carsxe.com/docs/v1/international-vin-decoder) check is run to get some data. Set this to `1` to disable and return an error instead of a potential response. --- ## Response attributes Contains the input parameters specified by the query. A map of specifications about the VIN (VIN, Year, Make, Model, Trim, Trim Selections, Style, Type, Size, Category, Made In, Made In City, Doors, Fuel Type, Fuel Capacity, CityMileage, Highway Mileage, Engine, Engine Size, Engine Cylinders, Transmission, Transmission Type, Transmission Speeds, Drivetrain, Anti-Brake System, Steering Type, Curb Weight, Gross Weight, Gross Vehicle Weight Rating, Overall Height, Overall Length, Overall Width, Wheelbase Length, Standard Seating, Optional Seating, Invoice Price, Delivery Charges, Manufacturer Suggested Retail Price). A list of objects with details about available color options based on the vehicle’s year, make, and model. Details about a vehicle’s equipment based on the vehicle’s year, make, and model. List of objects containing standard vehicle warranties available by `type`, `miles` and `months`. More information on the vehicle from our deep data search. More information on the vehicle from our deep data search. One of the following error codes: * `invalid_inputs` (missing VIN, ID, or year/make/model/trim) * `invalid_vin` (not a valid VIN) * `no_data` (no specifications available) * `api_not_enabled` (functionality not enabled for API key) * or (blank) if no error You may be use the following VINs for test: WBAFR7C57CC811956},{question: "Is the Vehicle Specifications API included in the free Sandbox?", answer: <>Yes! The Vehicle Specifications API is included in the free Sandbox as part of the shared lifetime quota (up to 100 API calls). For more information visit our pricing page.}]} hidePadding /> ```bash curl -G https://api.carsxe.com/specs \ -d key=CARSXE_API_KEY \ -d vin=WBAFR7C57CC811956 ``` ```js import { CarsXE } from "carsxe-api"; const carsxe = new CarsXE("CARSXE_API_KEY"); const vin = "WBAFR7C57CC811956"; try { const vehicle = await carsxe.specs({ vin }); console.log(vehicle); } catch (error) { console.error(error); } ``` ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('CARSXE_API_KEY') vin = 'WBAFR7C57CC811956' try: vehicle = asyncio.run(carsxe.specs({"vin": vin})) print(vehicle) except Exception as e: print(f"Error: {e}") ``` ```php specs(['vin' => $vin]); print_r($vehicle); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ```ruby require 'carsxe' API_KEY = 'CARSXE_API_KEY' carsxe = Carsxe::CarsXE.new(api_key: API_KEY) vin = 'WBAFR7C57CC811956' begin vehicle = carsxe.specs('vin' => vin) puts vehicle rescue StandardError => error puts "Error: #{error.message}" end ``` ```go package main import ( "fmt" "github.com/carsxe/carsxe-go-package" ) func main() { client := carsxe.New("CARSXE_API_KEY") vin := "WBAFR7C57CC811956" vehicle := client.Specs(map[string]string{"vin": vin}) fmt.Println(vehicle) } ``` ```java import io.github.carsxe.CarsXE; import java.util.Map; import java.util.HashMap; public class Main { public static void main(String[] args) { CarsXE carsxe = new CarsXE("CARSXE_API_KEY"); Map params = new HashMap<>(); params.put("vin", "WBAFR7C57CC811956"); try { Map vehicle = carsxe.specs(params); System.out.println(vehicle); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } } } ``` ```swift import carsxe let carsxe = CarsXE(apiKey: "CARSXE_API_KEY") let vin = "WBAFR7C57CC811956" do { let vehicle = try carsxe.specs(["vin": vin]) print(vehicle) } catch { print("Error: \(error)") } ``` ```csharp using carsxe; using System; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { string API_KEY = "CARSXE_API_KEY"; CarsXE carsxe = new CarsXE(API_KEY); string vin = "WBAFR7C57CC811956"; try { var vehicle = await carsxe.Specs(new Dictionary { { "vin", vin } }); Console.WriteLine(vehicle); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } } } ``` ```json showLineNumbers { "success": true, "input": { "key": "API_KEY", "vin": "WBAFR7C57CC811956" }, "attributes": { "year": "2012", "make": "BMW", "model": "5-Series", "trim": "535i", "style": "SEDAN 4-DR", "type": "Sedan/Saloon", "size": "", "category": "", "made_in": "GERMANY", "made_in_city": "DINGOLFING", "doors": "4", "fuel_type": "Gasoline", "fuel_capacity": "18.50 gallon", "city_mileage": "19 - 21 miles/gallon", "highway_mileage": "29 - 31 miles/gallon", "engine": "3.0L L6 DOHC 24V", "engine_size": "", "engine_cylinders": "6", "transmission": "6-Speed Manual | 8-Speed Automatic", "transmission_short": "6M | 8A", "transmission_type": "", "transmission_speeds": "", "drivetrain": "RWD", "anti_brake_system": "4-Wheel ABS", "steering_type": "R&P", "curb_weight": "4090 lbs", "gross_vehicle_weight_rating": "", "overall_height": "57.60 in.", "overall_length": "193.10 in.", "overall_width": "73.20 in.", "wheelbase_length": "116.90 in.", "standard_seating": "5", "invoice_price": "$48,480 USD", "delivery_charges": "$895 USD", "manufacturer_suggested_retail_price": "$52,500 USD", "production_seq_number": "811956", "front_brake_type": "Disc", "rear_brake_type": "Disc", "turning_diameter": "37.50 in.", "front_suspension": "Ind", "rear_suspension": "Ind", "front_spring_type": "Coil", "rear_spring_type": "Coil", "tires": "245/45R18", "front_headroom": "40.50 in.", "rear_headroom": "38.30 in.", "front_legroom": "", "rear_legroom": "", "front_shoulder_room": "58.30 in.", "rear_shoulder_room": "56.20 in.", "front_hip_room": "", "rear_hip_room": "", "interior_trim": [ "Black Dakota Leather Interior", "Black Nappa Leather Interior", "Cinnamon Brown/Black Dakota Leather Interior", "Everest Gray Dakota Leather Interior", "Oyster/Black Dakota Leather Interior", "Oyster/Black Nappa Leather Interior", "Venetian Beige Dakota Leather Interior" ], "exterior_color": [ "Alpine White", "Black Sapphire Metallic", "Carbon Black Metallic", "Cashmere Silver Metallic", "Deep Sea Blue Metallic", "Dark Graphite Metallic II", "Imperial Blue Metallic", "Jet Black", "Milano Beige Metallic", "Mojave Metallic", "Space Gray Metallic", "Tasman Green Metallic", "Titanium Silver Metallic" ], "curb_weight_manual": "4056 lbs", "ground_clearance": "", "track_front": "63.00 in.", "track_rear": "64.10 in.", "cargo_length": "", "width_at_wheelwell": "", "width_at_wall": "", "depth": "", "optional_seating": "", "passenger_volume": "", "cargo_volume": "", "cargo_volume_seats_in_place": "", "maximum_cargo_volume": "", "standard_towing": "", "maximum_towing": "", "standard_payload": "", "maximum_payload": "", "maximum_gvwr": "", "vehicle_class": "1", "vehicle_rating": "Light" }, "colors": [ { "category": "Interior", "name": "Black Dakota Leather Interior" }, { "category": "Interior", "name": "Black Nappa Leather Interior" }, { "category": "Interior", "name": "Cinnamon Brown/Black Dakota Leather Interior" }, { "category": "Interior", "name": "Everest Gray Dakota Leather Interior" }, { "category": "Interior", "name": "Oyster/Black Dakota Leather Interior" }, { "category": "Interior", "name": "Oyster/Black Nappa Leather Interior" }, { "category": "Interior", "name": "Venetian Beige Dakota Leather Interior" }, { "category": "Exterior", "name": "Alpine White" }, { "category": "Exterior", "name": "Black Sapphire Metallic" }, { "category": "Exterior", "name": "Carbon Black Metallic" }, { "category": "Exterior", "name": "Cashmere Silver Metallic" }, { "category": "Exterior", "name": "Deep Sea Blue Metallic" }, { "category": "Exterior", "name": "Dark Graphite Metallic II" }, { "category": "Exterior", "name": "Imperial Blue Metallic" }, { "category": "Exterior", "name": "Jet Black" }, { "category": "Exterior", "name": "Milano Beige Metallic" }, { "category": "Exterior", "name": "Mojave Metallic" }, { "category": "Exterior", "name": "Space Gray Metallic" }, { "category": "Exterior", "name": "Tasman Green Metallic" }, { "category": "Exterior", "name": "Titanium Silver Metallic" } ], "equipment": { "4wd_awd": "N/A", "abs_brakes": "Std.", "adjustable_foot_pedals": "N/A", "air_conditioning": "Std.", "alloy_wheels": "Std.", "am_fm_radio": "Std.", "automatic_headlights": "Std.", "automatic_load_leveling": "N/A", "cargo_area_cover": "N/A", "cargo_area_tiedowns": "N/A", "cargo_net": "N/A", "cassette_player": "N/A", "cd_changer": "Opt.", "cd_player": "Std.", "child_safety_door_locks": "Std.", "chrome_wheels": "N/A", "cruise_control": "Std.", "daytime_running_lights": "Std.", "deep_tinted_glass": "N/A", "driver_airbag": "Std.", "driver_multi_adjustable_power_seat": "Std.", "dvd_player": "Opt.", "electrochromic_exterior_rearview_mirror": "Std.", "electrochromic_interior_rearview_mirror": "Std.", "electronic_brake_assistance": "Std.", "electronic_parking_aid": "Opt.", "first_aid_kit": "N/A", "fog_lights": "Std.", "front_air_dam": "Std.", "front_cooled_seat": "Opt.", "front_heated_seat": "Opt.", "front_power_lumbar_support": "Std.", "front_power_memory_seat": "Std.", "front_side_airbag": "Std.", "front_side_airbag_with_head_protection": "N/A", "front_split_bench_seat": "N/A", "full_size_spare_tire": "N/A", "genuine_wood_trim": "Std.", "glass_rear_window_on_convertible": "N/A", "heated_exterior_mirror": "Std.", "heated_steering_wheel": "Opt.", "high_intensity_discharge_headlights": "Std.", "interval_wipers": "Std.", "keyless_entry": "Std.", "leather_seat": "Std.", "leather_steering_wheel": "Std.", "limited_slip_differential": "Std.", "load_bearing_exterior_rack": "N/A", "locking_differential": "N/A", "locking_pickup_truck_tailgate": "N/A", "manual_sunroof": "Std.", "navigation_aid": "Opt.", "passenger_airbag": "Std.", "passenger_multi_adjustable_power_seat": "Std.", "pickup_truck_bed_liner": "N/A", "pickup_truck_cargo_box_light": "N/A", "power_adjustable_exterior_mirror": "Std.", "power_door_locks": "Std.", "power_sliding_side_van_door": "N/A", "power_sunroof": "Std.", "power_trunk_lid": "Opt.", "power_windows": "Std.", "rain_sensing_wipers": "Std.", "rear_spoiler": "Opt.", "rear_window_defogger": "Std.", "rear_wiper": "N/A", "remote_ignition": "N/A", "removable_top": "N/A", "run_flat_tires": "Std.", "running_boards": "N/A", "second_row_folding_seat": "N/A", "second_row_heated_seat": "Opt.", "second_row_multi_adjustable_power_seat": "N/A", "second_row_removable_seat": "N/A", "second_row_side_airbag": "N/A", "second_row_side_airbag_with_head_protection": "N/A", "second_row_sound_controls": "Opt.", "separate_driver_front_passenger_climate_controls": "Std.", "side_head_curtain_airbag": "Std.", "skid_plate": "N/A", "sliding_rear_pickup_truck_window": "N/A", "splash_guards": "N/A", "steel_wheels": "N/A", "steering_wheel_mounted_controls": "Std.", "subwoofer": "Std.", "tachometer": "Std.", "telematics_system": "Std.", "telescopic_steering_column": "Std.", "third_row_removable_seat": "N/A", "tilt_steering": "Std.", "tilt_steering_column": "Std.", "tire_pressure_monitor": "Std.", "tow_hitch_receiver": "N/A", "towing_preparation_package": "N/A", "traction_control": "Std.", "trip_computer": "Std.", "trunk_anti_trap_device": "Std.", "vehicle_anti_theft": "Std.", "vehicle_stability_control_system": "Std.", "voice_activated_telephone": "N/A", "wind_deflector_for_convertibles": "N/A" }, "warranties": [ { "type": "Basic", "miles": "50,000 mile", "months": "48 month" }, { "type": "Powertrain", "miles": "50,000 mile", "months": "48 month" }, { "type": "Rust", "months": "144 month", "miles": "Unlimited mile" } ], "deepdata": { "Error Code": "0", "Error Text": "0 - VIN decoded clean. Check Digit (9th position) is correct", "Vehicle Descriptor": "WBAFR7C5*CC", "Make": "BMW", "Manufacturer Name": "BMW AG", "Model": "535i", "Model Year": "2012", "Plant City": "DINGOLFING", "Series": "5-Series", "Trim": "", "Vehicle Type": "PASSENGER CAR", "Plant Country": "GERMANY", "Plant Company Name": "", "Plant State": "", "Body Class": "Sedan/Saloon", "Doors": "4", "Gross Vehicle Weight Rating From": "Class 1: 6,000 lb or less (2,722 kg or less)", "Gross Vehicle Weight Rating To": "Class 1: 6,000 lb or less (2,722 kg or less)", "Wheel Base (inches) From": "116.9", "Bed Type": "Not Applicable", "Cab Type": "Not Applicable", "Trailer Type Connection": "Not Applicable", "Trailer Body Type": "Not Applicable", "Number of Wheels": "4", "Wheel Size Front (inches)": "18", "Wheel Size Rear (inches)": "18", "Custom Motorcycle Type": "Not Applicable", "Motorcycle Suspension Type": "Not Applicable", "Motorcycle Chassis Type": "Not Applicable", "Bus Floor Configuration Type": "Not Applicable", "Bus Type": "Not Applicable", "Steering Location": "Left-Hand Drive (LHD)", "Number of Seats": "5", "Number of Seat Rows": "2", "Transmission Style": "", "Transmission Speeds": "", "Axles": "2", "Drive Type": "RWD/Rear-Wheel Drive", "Brake System Type": "Hydraulic", "Engine Number of Cylinders": "6", "Displacement (CC)": "2979.1682352", "Displacement (CI)": "181.8", "Displacement (L)": "3.0", "Engine Stroke Cycles": "4", "Engine Model": "", "Fuel Type - Primary": "Gasoline", "Valve Train Design": "Dual Overhead Cam (DOHC)", "Fuel Type - Secondary": "", "Fuel Delivery / Fuel Injection Type": "", "Engine Configuration": "In-Line", "Turbo": "Yes", "Engine Manufacturer": "BMW", "Engine Brake (hp) From": "300", "Cooling Type": "Water", "Electrification Level": "", "Other Engine Info": "", "Pretensioner": "Yes", "Seat Belt Type": "Manual", "Other Restraint System Info": "Head Inflatable Restraint for Driver, Front Passenger, Rear Outboard Driver-side and Rear Outboard Passenger-side. Knee Inflatable Restraint for Driver and Front Passenger. Pretensioners for Driver and Front Passenger.", "Curtain Air Bag Locations": "1st and 2nd Rows", "Front Air Bag Locations": "1st Row (Driver and Passenger)", "Knee Air Bag Locations": "1st Row (Driver and Passenger)", "Side Air Bag Locations": "1st Row (Driver and Passenger)", "Anti-lock Braking System (ABS)": "Standard", "Electronic Stability Control (ESC)": "Standard", "Traction Control": "Standard", "Tire Pressure Monitoring System (TPMS) Type": "Direct", "Auto-Reverse System for Windows and Sunroofs": "", "Event Data Recorder (EDR)": "", "Keyless Ignition": "", "Adaptive Cruise Control (ACC)": "", "Crash Imminent Braking (CIB)": "", "Forward Collision Warning (FCW)": "", "Dynamic Brake Support (DBS)": "", "Pedestrian Automatic Emergency Braking (PAEB)": "", "Blind Spot Warning (BSW)": "", "Lane Departure Warning (LDW)": "", "Lane Keeping Assistance (LKA)": "", "Blind Spot Intervention (BSI)": "", "Lane Centering Assistance": "", "Backup Camera": "", "Parking Assist": "", "Rear Cross Traffic Alert": "", "Rear Automatic Emergency Braking": "", "Automatic Crash Notification (ACN) / Advanced Automatic Crash Notification (AACN)": "", "Daytime Running Light (DRL)": "", "Headlamp Light Source": "", "Semiautomatic Headlamp Beam Switching": "", "Adaptive Driving Beam (ADB)": "", "NCSA Body Type": "4-door sedan, hardtop", "NCSA Make": "BMW", "NCSA Model": "5-series" }, "timestamp": "2025-10-01T22:40:36.374Z" } ``` --- # US Vehicle Plate Decoder > The US Vehicle Plate Decoder API provides access to a library of vehicle's data based on the vehicle's registration/license plate number and state. Source: https://carsxe.com/docs/v1/us-plate-decoder The US Vehicle Plate Decoder API looks up the vehicle through the database for matches and returns the VIN, make, model and year among other attributes. It can be coupled with other APIs to become even more powerful. The state is a two letter abbreviation of one of the 50 states, or District of Columbia (DC), or Puerto Rico (PR). All requests are made with `API key`, `plate` and `state`. This endpoint allows you to retrieve **US** vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. The state is a two letter abbreviation of one of the 50 states, or District of Columbia (`DC`), or Puerto Rico (`PR`). ## Optional attributes If set to `true`, the API will attempt to decode the VIN number and return the vehicle's information. ## Response Attributes Indicates whether the request was **successful** (e.g., `true` or `false`). Contains the **input parameters** used in the request. The **license plate** of the vehicle (e.g., "H37SFS"). The **state** where the vehicle is registered (e.g., "NJ"). The **Vehicle Identification Number** (VIN), a unique code identifying the specific vehicle (e.g., "1GNSCGKC0JR318026"). The **manufacturing year** of the vehicle (e.g., "2018"). The **manufacturer** of the vehicle (e.g., "Chevrolet"). The **specific model name** of the vehicle (e.g., "Suburban"). The **trim level** or configuration of the vehicle (e.g., "LS"). A **brief description** of the vehicle, including the year, make, and model (e.g., "2018 Chevrolet Suburban"). The **engine's displacement and type**, indicating its size and configuration (e.g., "5.3L V8 OHV 16V"). A **detailed description** of the vehicle's body style (e.g., "SUV"). The **type of transmission system** the vehicle uses, such as manual or automatic (e.g., "Automatic"). The **drive configuration** of the vehicle, such as front-wheel drive (FWD), rear-wheel drive (RWD), or all-wheel drive (AWD) (e.g., "RWD"). The **type of fuel** the vehicle uses (e.g., "Flexible-Fuel"). The **exterior color** of the vehicle (e.g., "Black"). Contains **detailed specifications** of the vehicle. The full response matches that of the [Vehicle Specifications](https://carsxe.com/docs/v1/specifications) API. You may be use the following plate for test:
    • Plate: H37SFS
    • State: NJ
    },{question: "Is the US Vehicle Plate Decoder API included in the free Sandbox?", answer: <>Yes! The US Vehicle Plate Decoder API is included in the free Sandbox as part of the shared lifetime quota (up to 100 API calls). For more information visit our pricing page.}]} hidePadding /> ```bash curl -G https://api.carsxe.com/v1/us-platedecoder \ -d key=CARSXE_API_KEY \ -d plate=H37SFS \ -d state=NJ -d decodeVIN=true ``` ```js const axios = require('axios'); const apiKey = 'CARSXE_API_KEY'; const plate = 'H37SFS'; const state = 'NJ'; const decodeVIN = 'true'; try { const { data } = await axios.get('https://api.carsxe.com/v1/us-platedecoder', { params: { key: apiKey, plate: plate, state: state decodeVIN: decodeVIN } }) } catch (e) { console.error(e); } ``` ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('CARSXE_API_KEY') params = { "plate": "H37SFS", "state": "NJ", "decodeVIN": "true" } try: plate_decoder = asyncio.run(carsxe.plate_decoder(params)) print(plate_decoder) except Exception as e: print(f"Error: {e}") ``` ```php 'H37SFS', 'state' => 'NJ', 'decodeVIN' => 'true' ]; try { $plateDecoder = $carsxe->plateDecoder($params); print_r($plateDecoder); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ```ruby require 'carsxe' API_KEY = 'CARSXE_API_KEY' carsxe = Carsxe::CarsXE.new(api_key: API_KEY) params = { 'plate' => 'H37SFS', 'state' => 'NJ', 'decodeVIN' => 'true' } begin plate_decoder = carsxe.plate_decoder(params) puts plate_decoder rescue StandardError => error puts "Error: #{error.message}" end ``` ```go package main import ( "fmt" "github.com/carsxe/carsxe-go-package" ) func main() { client := carsxe.New("CARSXE_API_KEY") params := map[string]string{ "plate": "H37SFS", "state": "NJ", "decodeVIN": "true", } plateDecoder := client.PlateDecoder(params) fmt.Println(plateDecoder) } ``` ```java import io.github.carsxe.CarsXE; import java.util.Map; import java.util.HashMap; public class Main { public static void main(String[] args) { CarsXE carsxe = new CarsXE("CARSXE_API_KEY"); Map params = new HashMap<>(); params.put("plate", "H37SFS"); params.put("state", "NJ"); params.put("decodeVIN", "true"); try { Map plateDecoder = carsxe.platedecoder(params); System.out.println(plateDecoder); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } } } ``` ```swift import carsxe let carsxe = CarsXE(apiKey: "CARSXE_API_KEY") let params = [ "plate": "H37SFS", "state": "NJ", "decodeVIN": "true" ] do { let plateDecoder = try carsxe.plateDecoder(params) print(plateDecoder) } catch { print("Error: \(error)") } ``` ```csharp using carsxe; using System; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { string API_KEY = "CARSXE_API_KEY"; CarsXE carsxe = new CarsXE(API_KEY); var parameters = new Dictionary { { "plate", "H37SFS" }, { "state", "NJ" }, { "decodeVIN", "true" } }; try { var plateDecoder = await carsxe.PlateDecoder(parameters); Console.WriteLine(plateDecoder); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } } } ``` ```json showLineNumbers {{ title: 'Response' }} { "success": true, "input": { "plate": "H37SFS", "state": "NJ" }, "vin": "1GNSCGKC0JR318026", "year": "2018", "make": "Chevrolet", "model": "Suburban", "trim": "LS", "description": "2018 Chevrolet Suburban", "engine_size": "5.3L V8 OHV 16V", "body_style": "SUV", "transmission": "Automatic", "drive_type": "RWD", "fuel_type": "Flexible-Fuel", "color": "Black", "vehicle_specs": { "attributes": { "year": "2018", "make": "Chevrolet", "model": "Suburban", "trim": "LS 2WD", "style": "SPORT UTILITY 4-DR", "type": "", "size": "", "category": "", "made_in": "UNITED STATES", "made_in_city": "", "doors": "", "fuel_type": "", "fuel_capacity": "31.00 gallon", "city_mileage": "16 miles/gallon", "highway_mileage": "23 miles/gallon", "engine": "5.3L V8 OHV 16V", "engine_size": "", "engine_cylinders": "", "transmission": "6-Speed Automatic", "transmission_short": "6A", "transmission_type": "", "transmission_speeds": "", "drivetrain": "RWD", "anti_brake_system": "4-Wheel ABS", "steering_type": "R&P", "curb_weight": "", "gross_vehicle_weight_rating": "", "overall_height": "74.40 in.", "overall_length": "224.40 in.", "overall_width": "80.50 in.", "wheelbase_length": "130.00 in.", "standard_seating": "8", "invoice_price": "$47,141 USD", "delivery_charges": "$1,295 USD", "manufacturer_suggested_retail_price": "$50,150 USD", "production_seq_number": "318026", "front_brake_type": "Disc", "rear_brake_type": "Disc", "turning_diameter": "", "front_suspension": "Ind", "rear_suspension": "Ind", "front_spring_type": "", "rear_spring_type": "", "tires": "P265/65R18", "front_headroom": "42.80 in.", "rear_headroom": "39.10 in.", "front_legroom": "45.30 in.", "rear_legroom": "39.70 in.", "front_shoulder_room": "64.80 in.", "rear_shoulder_room": "65.10 in.", "front_hip_room": "60.80 in.", "rear_hip_room": "60.30 in.", "interior_trim": [ "Cocoa/Dune, cloth", "Jet Black, cloth" ], "exterior_color": [ "Black", "Blue Velvet Metallic", "Havana Metallic", "Iridescent Pearl Tricoat", "Pepperdust Metallic", "Satin Steel Metallic", "Silver Ice Metallic", "Siren Red Tintcoat", "Summit White", "Tungsten Metallic" ], "curb_weight_manual": "", "ground_clearance": "7.90 in.", "track_front": "", "track_rear": "", "cargo_length": "", "width_at_wheelwell": "", "width_at_wall": "", "depth": "", "optional_seating": "", "passenger_volume": "", "cargo_volume": "", "cargo_volume_seats_in_place": "", "maximum_cargo_volume": "", "standard_towing": "", "maximum_towing": "", "standard_payload": "", "maximum_payload": "", "maximum_gvwr": "" }, "colors": [ { "category": "Interior", "name": "Cocoa/Dune, cloth" }, { "category": "Interior", "name": "Jet Black, cloth" }, { "category": "Exterior", "name": "Black" }, { "category": "Exterior", "name": "Blue Velvet Metallic" }, { "category": "Exterior", "name": "Havana Metallic" }, { "category": "Exterior", "name": "Iridescent Pearl Tricoat" }, { "category": "Exterior", "name": "Pepperdust Metallic" }, { "category": "Exterior", "name": "Satin Steel Metallic" }, { "category": "Exterior", "name": "Silver Ice Metallic" }, { "category": "Exterior", "name": "Siren Red Tintcoat" }, { "category": "Exterior", "name": "Summit White" }, { "category": "Exterior", "name": "Tungsten Metallic" } ], "equipment": { "4wd_awd": "N/A", "abs_brakes": "Std.", "adjustable_foot_pedals": "N/A", "air_conditioning": "N/A", "alloy_wheels": "Std.", "am_fm_radio": "N/A", "automatic_headlights": "N/A", "automatic_load_leveling": "N/A", "cargo_area_cover": "N/A", "cargo_area_tiedowns": "N/A", "cargo_net": "N/A", "cassette_player": "N/A", "cd_changer": "N/A", "cd_player": "N/A", "child_safety_door_locks": "Std.", "chrome_wheels": "N/A", "cruise_control": "Std.", "daytime_running_lights": "N/A", "deep_tinted_glass": "N/A", "driver_airbag": "Std.", "driver_multi_adjustable_power_seat": "Std.", "dvd_player": "N/A", "electrochromic_exterior_rearview_mirror": "N/A", "electrochromic_interior_rearview_mirror": "N/A", "electronic_brake_assistance": "N/A", "electronic_parking_aid": "N/A", "first_aid_kit": "N/A", "fog_lights": "N/A", "front_air_dam": "N/A", "front_cooled_seat": "N/A", "front_heated_seat": "N/A", "front_power_lumbar_support": "Std.", "front_power_memory_seat": "N/A", "front_side_airbag": "Std.", "front_side_airbag_with_head_protection": "N/A", "front_split_bench_seat": "N/A", "full_size_spare_tire": "N/A", "genuine_wood_trim": "N/A", "glass_rear_window_on_convertible": "N/A", "heated_exterior_mirror": "N/A", "heated_steering_wheel": "N/A", "high_intensity_discharge_headlights": "N/A", "interval_wipers": "N/A", "keyless_entry": "N/A", "leather_seat": "N/A", "leather_steering_wheel": "N/A", "limited_slip_differential": "N/A", "load_bearing_exterior_rack": "N/A", "locking_differential": "N/A", "locking_pickup_truck_tailgate": "N/A", "manual_sunroof": "N/A", "navigation_aid": "N/A", "passenger_airbag": "Std.", "passenger_multi_adjustable_power_seat": "Std.", "pickup_truck_bed_liner": "N/A", "pickup_truck_cargo_box_light": "N/A", "power_adjustable_exterior_mirror": "N/A", "power_door_locks": "N/A", "power_sliding_side_van_door": "N/A", "power_sunroof": "N/A", "power_trunk_lid": "N/A", "power_windows": "Std.", "rain_sensing_wipers": "N/A", "rear_spoiler": "N/A", "rear_window_defogger": "N/A", "rear_wiper": "N/A", "remote_ignition": "N/A", "removable_top": "N/A", "run_flat_tires": "N/A", "running_boards": "N/A", "second_row_folding_seat": "N/A", "second_row_heated_seat": "N/A", "second_row_multi_adjustable_power_seat": "N/A", "second_row_removable_seat": "N/A", "second_row_side_airbag": "N/A", "second_row_side_airbag_with_head_protection": "N/A", "second_row_sound_controls": "N/A", "separate_driver_front_passenger_climate_controls": "N/A", "side_head_curtain_airbag": "Std.", "skid_plate": "N/A", "sliding_rear_pickup_truck_window": "N/A", "splash_guards": "N/A", "steel_wheels": "N/A", "steering_wheel_mounted_controls": "N/A", "subwoofer": "N/A", "tachometer": "N/A", "telematics_system": "N/A", "telescopic_steering_column": "N/A", "third_row_removable_seat": "N/A", "tilt_steering": "N/A", "tilt_steering_column": "N/A", "tire_pressure_monitor": "N/A", "tow_hitch_receiver": "N/A", "traction_control": "N/A", "trip_computer": "N/A", "trunk_anti_trap_device": "N/A", "vehicle_anti_theft": "Std.", "vehicle_stability_control_system": "N/A", "voice_activated_telephone": "N/A", "wind_deflector_for_convertibles": "N/A" }, "warranties": [ { "type": "Basic", "miles": "36,000 mile", "months": "36 month" }, { "type": "Powertrain", "miles": "60,000 mile", "months": "60 month" }, { "type": "Rust", "months": "72 month", "miles": "100,000 mile" } ] } } ```
    --- # Vehicle Recalls API > Retrieve Vehicle Recall information using a VIN. Source: https://carsxe.com/docs/v1/vehicle-recalls The Vehicle Recalls API provides access to recall data by allowing users to search for safety recalls based on a vehicle's VIN. This API is useful for developers who need to access recall information for a specific vehicle. --- This endpoint allows you to retrieve vehicle recall information using a VIN. ## Required attributes Your CarsXE API key. The 17 character long vehicle identification number. --- ## Response attributes Whether the vehicle data has been retrieved successfully. Object detailing the query you made, including the API key and VIN. Object containing vehicle details, recall information, and related metadata. Unique identifier for the vehicle record. The Vehicle Identification Number (VIN) of the queried vehicle. The name of the vehicle manufacturer. The model year of the vehicle. The make (brand) of the vehicle. The model name of the vehicle. Indicates whether there are any recalls associated with the vehicle. Number of recalls associated with the vehicle. A list of recall objects, each containing detailed recall information. The date the recall was issued. The expiration date of the recall, if applicable. The recall ID assigned by NHTSA (National Highway Traffic Safety Administration). The recall ID assigned by the manufacturer. The type of recall campaign (e.g., NHTSA, manufacturer-initiated). The name or title of the recall campaign. The vehicle component affected by the recall. A short description of the recall. A detailed explanation of the risks associated with the recall. Indicates whether the recall includes a stop-sale order. Indicates whether the recall includes a "do not drive" advisory. Indicates whether a remedy for the recall is available. Description of the manufacturer’s remedy for the recall. Indicates whether the necessary parts for the recall remedy are available. Minimum estimated labor hours for the recall repair. Maximum estimated labor hours for the recall repair. The current status of the recall (e.g., Incomplete, Completed). The timestamp of the API response. Yes! The Vehicle Recalls API is included in the free Sandbox as part of the shared lifetime quota (up to 100 API calls). For more information visit our pricing page.} ]} hidePadding /> ```bash curl -G https://api.carsxe.com/v1/recalls \ -d key=CARSXE_API_KEY \ -d vin=1C4JJXR64PW696340 ``` ```js import { CarsXE } from "carsxe-api"; const carsxe = new CarsXE("CARSXE_API_KEY"); const vin = "1C4JJXR64PW696340"; try { const recalls = await carsxe.recalls({ vin }); console.log(recalls); } catch (error) { console.error(error); } ``` ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('CARSXE_API_KEY') vin = '1C4JJXR64PW696340' try: recalls = asyncio.run(carsxe.recalls({"vin": vin})) print(recalls) except Exception as e: print(f"Error: {e}") ``` ```php recalls(['vin' => $vin]); print_r($recalls); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ```ruby require 'carsxe' API_KEY = 'CARSXE_API_KEY' carsxe = Carsxe::CarsXE.new(api_key: API_KEY) vin = '1C4JJXR64PW696340' begin recalls = carsxe.recalls('vin' => vin) puts recalls rescue StandardError => error puts "Error: #{error.message}" end ``` ```go package main import ( "fmt" "github.com/carsxe/carsxe-go-package" ) func main() { client := carsxe.New("CARSXE_API_KEY") vin := "1C4JJXR64PW696340" recalls := client.Recalls(map[string]string{"vin": vin}) fmt.Println(recalls) } ``` ```java import io.github.carsxe.CarsXE; import java.util.Map; import java.util.HashMap; public class Main { public static void main(String[] args) { CarsXE carsxe = new CarsXE("CARSXE_API_KEY"); Map params = new HashMap<>(); params.put("vin", "1C4JJXR64PW696340"); try { Map recalls = carsxe.recalls(params); System.out.println(recalls); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } } } ``` ```swift import carsxe let carsxe = CarsXE(apiKey: "CARSXE_API_KEY") let vin = "1C4JJXR64PW696340" do { let recalls = try carsxe.recalls(["vin": vin]) print(recalls) } catch { print("Error: \(error)") } ``` ```csharp using carsxe; using System; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { string API_KEY = "CARSXE_API_KEY"; CarsXE carsxe = new CarsXE(API_KEY); string vin = "1C4JJXR64PW696340"; try { var recalls = await carsxe.Recalls(new Dictionary { { "vin", vin } }); Console.WriteLine(recalls); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } } } ``` ```json showLineNumbers { "success": true, "input": { "key": "API_KEY", "vin": "1C4JJXR64PW696340" }, "data": { "uuid": "d1269d6b-54a2-4bf3-8119-1c8fdb4f0563", "vin": "1C4JJXR64PW696340", "manufacturer": "FCA US LLC", "model_year": "2023", "make": "JEEP", "model": "Wrangler", "has_recalls": true, "recall_count": 1, "recalls": [ { "recall_date": "2024-09-27", "expiration_date": null, "nhtsa_id": "24V720", "manufacturer_id": "95B", "recall_campaign_type": "NHTSA", "recall_name": "2020-2024 JL & 2022-2024 WL PHEV High Voltage Battery", "component": "", "recall_description": "2020-2024 JL & 2022-2024 WL PHEV High Voltage Battery", "risk_description": "In rare circumstances, a battery pack may contain cells with separator damage. Separator damage, combined with other complex interactions within the cells, may lead to a vehicle fire. A vehicle fire can result in increased risk of occupant injury and/or injury to persons outside the vehicle, as well as property damage.", "stop_sale": null, "dont_drive": null, "remedy_available": null, "recall_remedy": "FCA US will conduct a voluntary safety recall on all affected vehicles. Remedy is a software flash followed by a HV battery replacement if needed.", "parts_available": null, "labor_hours_min": null, "labor_hours_max": null, "recall_status": "Incomplete" } ] }, "timestamp": "2025-10-03T08:46:03.701Z" } ``` --- # VIN OCR > Extract the Vehicle Identification Number (VIN) from an image using OCR Source: https://carsxe.com/docs/v1/vin-ocr Ever needed to quickly identify a vehicle's VIN from an image? Whether it's for verifying vehicle details or tracking, the VIN OCR API allows you to extract the VIN from an image (either a URL or base64 string) using optical character recognition (OCR) and computer vision. This API is capable of recognizing VINs from a wide range of vehicles, ensuring accurate and detailed vehicle information retrieval. --- This endpoint allows you to retrieve a vehicle's VIN. ## Required attributes Your CarsXE API key. JSON body field containing a URL to an image or the base64 string of the image. --- ## Response attributes Whether the algorithm has been able to successfully analyze the VIN from the image. The extracted VIN number from the image. The confidence score, which is a probability value (between 0 and 1) indicating how certain the algorithm is that the extracted VIN is correct. String detailing error if any. Yes! The VIN OCR API is included in the free Sandbox as part of the shared lifetime quota (up to 100 API calls). For more information visit our pricing page.}]} hidePadding /> ```bash curl --location 'https://api.carsxe.com/v1/vinocr?key=CARSXE_API_KEY' \ --header 'Content-Type: application/json' \ --data '{"image_url": "https://user-images.githubusercontent.com/5663423/30922082-64edb4fa-a3a8-11e7-873e-3fbcdce8ea3a.png"}' ``` ```js import { CarsXE } from "carsxe-api"; const carsxe = new CarsXE("CARSXE_API_KEY"); const imageUrl = "https://user-images.githubusercontent.com/5663423/30922082-64edb4fa-a3a8-11e7-873e-3fbcdce8ea3a.png"; try { const vinOcr = await carsxe.vinOcr({ imageUrl }); console.log(vinOcr); } catch (error) { console.error(error); } ``` ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('CARSXE_API_KEY') image_url = 'https://user-images.githubusercontent.com/5663423/30922082-64edb4fa-a3a8-11e7-873e-3fbcdce8ea3a.png' try: vin_ocr = asyncio.run(carsxe.vin_ocr({"upload_url": image_url})) print(vin_ocr) except Exception as e: print(f"Error: {e}") ``` ```php vinOcr(['upload_url' => $imageUrl]); print_r($vinOcr); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ```ruby require 'carsxe' API_KEY = 'CARSXE_API_KEY' carsxe = Carsxe::CarsXE.new(api_key: API_KEY) image_url = 'https://user-images.githubusercontent.com/5663423/30922082-64edb4fa-a3a8-11e7-873e-3fbcdce8ea3a.png' begin vin_ocr = carsxe.vin_ocr('upload_url' => image_url) puts vin_ocr rescue StandardError => error puts "Error: #{error.message}" end ``` ```go package main import ( "fmt" "github.com/carsxe/carsxe-go-package" ) func main() { client := carsxe.New("CARSXE_API_KEY") imageUrl := "https://user-images.githubusercontent.com/5663423/30922082-64edb4fa-a3a8-11e7-873e-3fbcdce8ea3a.png" vinOcr := client.VinOCR(map[string]string{"upload_url": imageUrl}) fmt.Println(vinOcr) } ``` ```java import io.github.carsxe.CarsXE; import java.util.Map; public class Main { public static void main(String[] args) { CarsXE carsxe = new CarsXE("CARSXE_API_KEY"); String imageUrl = "https://user-images.githubusercontent.com/5663423/30922082-64edb4fa-a3a8-11e7-873e-3fbcdce8ea3a.png"; try { Map vinOcr = carsxe.vinOcr(imageUrl); System.out.println(vinOcr); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } } } ``` ```swift import carsxe let carsxe = CarsXE(apiKey: "CARSXE_API_KEY") let imageUrl = "https://user-images.githubusercontent.com/5663423/30922082-64edb4fa-a3a8-11e7-873e-3fbcdce8ea3a.png" do { let vinOcr = try carsxe.vinOCR(imageUrl: imageUrl) print(vinOcr) } catch { print("Error: \(error)") } ``` ```csharp using carsxe; using System; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { string API_KEY = "CARSXE_API_KEY"; CarsXE carsxe = new CarsXE(API_KEY); string imageUrl = "https://user-images.githubusercontent.com/5663423/30922082-64edb4fa-a3a8-11e7-873e-3fbcdce8ea3a.png"; try { var vinOcr = await carsxe.VinOcr(imageUrl); Console.WriteLine(vinOcr); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } } } ``` ```json showLineNumbers {{ title: 'Response' }} { "success": true, "vin": "JHLRD77874C026456", "box": { "xmin": 257, "xmax": 1673, "ymin": 635, "ymax": 793 }, "confidence": 0.9834251403808594, "candidates": [ { "vin": "JHLRD77874C026456", "confidence": 0.9834251403808594, "box": { "xmin": 257, "xmax": 1673, "ymin": 635, "ymax": 793 } } ] } ``` --- # Year Make Model API > Retrieve comprehensive vehicle information by specifying its year, make, and model. Get detailed specifications, trim levels, and features for vehicles across different regions with our Year Make Model (YMM) API. Source: https://carsxe.com/docs/v1/year-make-model Ever needed to look up vehicle details without a VIN? The Year Make Model API allows you to retrieve detailed vehicle information by simply specifying the year of manufacture, make, and model. For more specific results, you can optionally include the trim. --- This endpoint allows you to retrieve vehicle information based on its year, make, and model. --- ## Required attributes Your CarsXE API key. The manufacturing year of the vehicle. The manufacturer of the vehicle (e.g., Toyota, Ford, BMW). The specific model of the vehicle. (e.g., Camry, F-150, X5) ## Optional attributes The vehicle trim. (e.g., XLE, XSE, etc.) All trim options available for a year, make, and model. Set to 1 to use. --- ## Response attributes Indicates whether the request was successful. The parameters used in the request (key, year, make, model, trim). Vehicle information container with the following properties: Full vehicle name including trim and engine details Base manufacturer's suggested retail price Base dealer invoice price Total seating capacity of the vehicle Detailed exterior and interior color options with RGB values Comprehensive list of standard and optional features categorized by: - Power Features - Rear Seats - Warranty - Measurements - Comfort & Convenience - Drive Train - Suspension - Instrumentation - In Car Entertainment - Front Seats - Fuel - Telematics - Safety - Tires and Wheels - Engine Categorized list of optional features and packages with pricing: - Safety & Security Options - Exterior Options - Interior Options - Packages - Additional Fees Options Indicates if the vehicle is a truck Indicates if the vehicle is electric Indicates if the vehicle is a plug-in hybrid ISO timestamp of when the response was generated Error message if the request fails. Possible values: * `Missing year, make, or model` * `User not found` * `User not active` * Internal server error messages The API will return information for the most popular trim level for that year/make/model combination. }, { question: "What if I specify a trim that doesn't exactly match?", answer: <>The API uses fuzzy matching to find the closest matching trim level. If no close match is found, it falls back to the most popular trim. }, { question: "Is the Year Make Model API included in the free Sandbox?", answer: <>Yes! The Year Make Model API is included in the free Sandbox as part of the shared lifetime quota (up to 100 API calls). For more information visit our pricing page. }, { question: "Building a Year → Make → Model menu for your own UI?", answer: <>See the Year Make Model Options API — one list per request for dropdown menus. Typical flow: years → makes → models → variants. Required filters (`make` for models, `model` for variants/trims) help you get better results. Use dimension=years with make + model to find which years a vehicle was sold. } ]} hidePadding /> ```bash curl -G https://api.carsxe.com/v1/ymm \ -d key=CARSXE_API_KEY \ -d year=2023 \ -d make=Toyota \ -d model=Camry \ -d trim=XLE ``` ```js import { CarsXE } from "carsxe-api"; const carsxe = new CarsXE("CARSXE_API_KEY"); const params = { year: "2023", make: "Toyota", model: "Camry", trim: "XLE", }; try { const ymm = await carsxe.yearMakeModel(params); console.log(ymm); } catch (error) { console.error(error); } ``` ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('CARSXE_API_KEY') params = { "year": "2023", "make": "Toyota", "model": "Camry", "trim": "XLE" } try: ymm = asyncio.run(carsxe.year_make_model(params)) print(ymm) except Exception as e: print(f"Error: {e}") ``` ```php '2023', 'make' => 'Toyota', 'model' => 'Camry', 'trim' => 'XLE' ]; try { $ymm = $carsxe->yearMakeModel($params); print_r($ymm); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ```ruby require 'carsxe' API_KEY = 'CARSXE_API_KEY' carsxe = Carsxe::CarsXE.new(api_key: API_KEY) params = { 'year' => '2023', 'make' => 'Toyota', 'model' => 'Camry', 'trim' => 'XLE' } begin ymm = carsxe.year_make_model(params) puts ymm rescue StandardError => error puts "Error: #{error.message}" end ``` ```go package main import ( "fmt" "github.com/carsxe/carsxe-go-package" ) func main() { client := carsxe.New("CARSXE_API_KEY") params := map[string]string{ "year": "2023", "make": "Toyota", "model": "Camry", "trim": "XLE", } ymm := client.YearMakeModel(params) fmt.Println(ymm) } ``` ```java import io.github.carsxe.CarsXE; import java.util.Map; import java.util.HashMap; public class Main { public static void main(String[] args) { CarsXE carsxe = new CarsXE("CARSXE_API_KEY"); Map params = new HashMap<>(); params.put("year", "2023"); params.put("make", "Toyota"); params.put("model", "Camry"); params.put("trim", "XLE"); try { Map ymm = carsxe.yearMakeModel(params); System.out.println(ymm); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } } } ``` ```swift import carsxe let carsxe = CarsXE(apiKey: "CARSXE_API_KEY") let params = [ "year": "2023", "make": "Toyota", "model": "Camry", "trim": "XLE" ] do { let ymm = try carsxe.yearMakeModel(params) print(ymm) } catch { print("Error: \(error)") } ``` ```csharp using carsxe; using System; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { string API_KEY = "CARSXE_API_KEY"; CarsXE carsxe = new CarsXE(API_KEY); var parameters = new Dictionary { { "year", "2023" }, { "make", "Toyota" }, { "model", "Camry" }, { "trim", "XLE" } }; try { var ymm = await carsxe.YearMakeModel(parameters); Console.WriteLine(ymm); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } } } ``` ```json showLineNumbers {{ title: 'Response' }} { "bestMatch": { "make": "Toyota", "model": "Camry", "year": "2023", "name": "XLE 4dr Sedan (3.5L 6cyl 8A)", "base_msrp": 36195, "base_invoice": 32938, "total_seating": 5, "color": { "exterior": [ { "name": "Supersonic Red", "rgb": "226,5,0" }, { "name": "Predawn Gray Mica", "rgb": "99,97,94" }, { "name": "Midnight Black Metallic", "rgb": "0,3,30" }, { "name": "Celestial Silver Metallic", "rgb": "130,131,135" }, { "name": "Wind Chill Pearl", "rgb": "227,233,233" }, { "name": "Reservoir Blue", "rgb": "0,20,70" } ], "interior": [ { "name": "Macadamia, leather", "rgb": "208,190,166" }, { "name": "Ash, leather", "rgb": "125,124,119" }, { "name": "Black, leather", "rgb": "0,0,0" } ] }, "features": { "standard": [ { "category": "Power Feature", "features": [ { "name": "4 one-touch power windows", "value": null }, { "name": "1st row power glass extended moonroof", "value": null }, { "name": "hands-free entry", "value": null }, { "name": "Heated mirrors", "value": null } ] }, { "category": "Rearseats", "features": [ { "name": "Rear head room", "value": "38.0 in." }, { "name": "Rear leg room", "value": "38.0 in." }, { "name": "Rear shoulder room", "value": "55.7 in." }, { "name": "Rear hip room", "value": "54.7 in." }, { "name": "Split-folding rear seatback", "value": null }, { "name": "folding center armrest", "value": null } ] }, { "category": "Warranty", "features": [ { "name": "Basic", "value": "3 yr./ 36000 mi." }, { "name": "Drivetrain", "value": "5 yr./ 60000 mi." }, { "name": "Rust", "value": "5 yr./ unlimited mi." }, { "name": "Roadside assistance", "value": "2 yr./ unlimited mi." }, { "name": "Free maintenance", "value": "2 yr./ 25000 mi." } ] }, { "category": "Measurements", "features": [ { "name": "Length", "value": "192.1 in." }, { "name": "Overall width without mirrors", "value": "72.4 in." }, { "name": "Height", "value": "56.9 in." }, { "name": "Wheelbase", "value": "111.2 in." }, { "name": "EPA interior volume", "value": "114.4 cu.ft." }, { "name": "Cargo capacity, all seats in place", "value": "15.1 cu.ft." }, { "name": "Turning circle", "value": "38.0 ft." }, { "name": "Ground clearance", "value": "5.7 in." }, { "name": "Curb weight", "value": "3595 lbs." }, { "name": "Country of final assembly", "value": "United States" } ] }, { "category": "Comfort & Convenience", "features": [ { "name": "keyless ignition", "value": null }, { "name": "tilt and telescopic steering wheel", "value": null }, { "name": "Audio and cruise controls on steering wheel", "value": null }, { "name": "electric power steering", "value": null }, { "name": "rear view camera", "value": null }, { "name": "Wireless charging", "value": null }, { "name": "adaptive cruise control", "value": null }, { "name": "universal remote transmitter (for garage door, security system, etc.)", "value": null }, { "name": "front and rear cupholders", "value": null }, { "name": "front and rear door pockets", "value": null }, { "name": "overhead console with storage", "value": null }, { "name": "front seatback storage", "value": null }, { "name": "leather and simulated alloy steering wheel", "value": null }, { "name": "Dual zone front climate control", "value": null }, { "name": "rear ventilation ducts", "value": null }, { "name": "interior air filtration", "value": null }, { "name": "Dual illuminating vanity mirrors", "value": null }, { "name": "electrochromatic inside rearview mirror", "value": null }, { "name": "turn signal in mirrors", "value": null } ] }, { "category": "Drive Train", "features": [ { "name": "Transmission", "value": "8-speed shiftable automatic" }, { "name": "Drive type", "value": "front wheel drive" } ] }, { "category": "Suspension", "features": [ { "name": "four-wheel independent suspension", "value": null }, { "name": "Front and rear stabilizer bar", "value": null } ] }, { "category": "Instrumentation", "features": [ { "name": "trip computer", "value": null }, { "name": "external temperature display", "value": null }, { "name": "tachometer", "value": null }, { "name": "clock", "value": null } ] }, { "category": "In Car Entertainment", "features": [ { "name": "9.0\" infotainment display size", "value": null }, { "name": "AM/FM stereo", "value": null }, { "name": "JBL premium brand speakers", "value": null }, { "name": "800 watts stereo output", "value": null }, { "name": "9 total speakers", "value": null }, { "name": "1 subwoofer(s)", "value": null }, { "name": "Android Auto/Apple CarPlay", "value": null }, { "name": "USB connection", "value": null }, { "name": "USB with external media control", "value": null }, { "name": "satellite radio w/real time traffic satellite radio", "value": null }, { "name": "3 months of provided satellite radio service", "value": null } ] }, { "category": "Frontseats", "features": [ { "name": "Front head room", "value": "37.5 in." }, { "name": "Front leg room", "value": "42.1 in." }, { "name": "Front shoulder room", "value": "57.7 in." }, { "name": "Front hip room", "value": "55.4 in." }, { "name": "leather", "value": null }, { "name": "bucket front seats", "value": null }, { "name": "8-way power driver seat", "value": null }, { "name": "height adjustable driver seat", "value": null }, { "name": "Driver seat with power adjustable lumbar support", "value": null }, { "name": "8-way power passenger seat", "value": null }, { "name": "height adjustable passenger seat", "value": null }, { "name": "multi-level heated driver seat", "value": null }, { "name": "multi-level heated passenger seat", "value": null } ] }, { "category": "Fuel", "features": [ { "name": "Fuel type", "value": "regular unleaded" }, { "name": "EPA city/highway MPG", "value": "22/33 MPG" }, { "name": "EPA combined MPG", "value": "26 MPG" }, { "name": "Range in miles (city/hwy)", "value": "347.6/521.4 mi." }, { "name": "Fuel tank capacity", "value": "15.8 gal." } ] }, { "category": "Telematics", "features": [ { "name": "Emergency Service", "value": null }, { "name": "Airbag Deployment Notification", "value": null }, { "name": "Stolen Vehicle Tracking/Assistance", "value": null }, { "name": "Roadside Assistance", "value": null } ] }, { "category": "Safety", "features": [ { "name": "blind spot and lane departure warnings accident avoidance system", "value": null }, { "name": "Lane keep assist", "value": null }, { "name": "Rear cross traffic alert", "value": null }, { "name": "pre-collision safety system", "value": null }, { "name": "post-collision safety system", "value": null }, { "name": "dual front and dual rear side-mounted airbags", "value": null }, { "name": "front and rear head airbags", "value": null }, { "name": "Passenger airbag occupant sensing deactivation", "value": null }, { "name": "stability control", "value": null }, { "name": "traction control", "value": null }, { "name": "child seat anchors", "value": null }, { "name": "Rear door child safety locks", "value": null }, { "name": "4-wheel ABS", "value": null }, { "name": "Ventilated front disc / solid rear disc brakes", "value": null }, { "name": "Emergency braking assist", "value": null }, { "name": "tire pressure monitoring", "value": null }, { "name": "dusk sensing headlamps", "value": null }, { "name": "auto delay off headlamps", "value": null }, { "name": "LED headlamp", "value": null }, { "name": "daytime running lights", "value": null }, { "name": "Turn signal mirrors", "value": null }, { "name": "2 front headrests", "value": null }, { "name": "Front height adjustable headrests", "value": null }, { "name": "3 rear headrests", "value": null }, { "name": "Rear height adjustable headrests", "value": null }, { "name": "Rear center 3-point belt", "value": null }, { "name": "remote anti-theft alarm system", "value": null }, { "name": "engine immobilizer", "value": null } ] }, { "category": "Tires and Wheels", "features": [ { "name": "alloy wheels", "value": null }, { "name": "18 x 8.0 in. wheels", "value": null }, { "name": "All season tires", "value": null }, { "name": "P235/45R18 tires", "value": null }, { "name": "temporary spare tire", "value": null }, { "name": "inside mounted spare tire", "value": null } ] }, { "category": "Engine", "features": [ { "name": "Base engine size", "value": "3.5 L" }, { "name": "Cylinders", "value": "V6" }, { "name": "Base engine type", "value": "gas" }, { "name": "Horsepower", "value": "301 hp @ 6600 rpm" }, { "name": "Torque", "value": "267 lb-ft @ 4700 rpm" }, { "name": "Valves", "value": "24" }, { "name": "Cam type", "value": "Double overhead cam (DOHC)" }, { "name": "Valve timing", "value": "Variable" }, { "name": "direct injection", "value": null } ] } ], "optional": [ { "category": "Safety & Security Options", "features": [ { "name": "First Aid Kit w/PPE", "price": 25 }, { "name": "Emergency Assistance Kit", "price": 75 } ] }, { "category": "Exterior Options", "features": [ { "name": "Alloy Wheel Locks", "price": 80 }, { "name": "Door Edge Guards", "price": 129 }, { "name": "Special Color", "price": 425 }, { "name": "Paint Protection Film", "price": 439 }, { "name": "Rear Bumper Applique", "price": 69 }, { "name": "Mudguards", "price": 129 }, { "name": "Rear Spoiler", "price": 199 } ] }, { "category": "Packages", "features": [ { "name": "Protection Package", "price": 497 }, { "name": "Protection Package", "price": 268 }, { "name": "Preferred Accessory Package w/All-Weather Floor Liners", "price": 373 }, { "name": "Driver Assist Package", "price": 830 }, { "name": "Quick Charge Cable Package", "price": 70 }, { "name": "Navigation Package", "price": 1040 }, { "name": "Preferred Accessory Package w/Carpet Mats", "price": 373 }, { "name": "Enhanced Illumination Package 3", "price": 370 }, { "name": "Carpet Mat Package", "price": 299 }, { "name": "All-Weather Floor Liner Package", "price": 299 }, { "name": "Cold Weather Package", "price": 150 } ] }, { "category": "Additional Fees Options", "features": [ { "name": "50 State Emissions", "price": 0 } ] }, { "category": "Interior Options", "features": [ { "name": "Integrated Dashcam", "price": 375 }, { "name": "Illuminated Door Sills", "price": 345 }, { "name": "USB Dual Power Port (Rear Only)", "price": 129 }, { "name": "Trunk LED Light Bulb", "price": 25 }, { "name": "Door Sill Protectors", "price": 199 }, { "name": "Hideaway Cargo Net", "price": 49 }, { "name": "Coin Holder/Ashtray Cup", "price": 29 }, { "name": "Cargo Tote", "price": 51 }, { "name": "Universal Tablet Holder", "price": 99 } ] } ] }, "is_truck": false, "is_electric": false, "is_plugin_electric": false }, "trimOptions": [], "success": true, "input": { "year": "2023", "make": "Toyota", "model": "Camry", "trim": "XLE" }, "timestamp": "2024-03-19T12:00:00.000Z" } ``` --- # Year Make Model Options API > Populate Year, Make, Model, and Variant dropdown menus — one API call returns one layer so you build menus step by step. Source: https://carsxe.com/docs/v1/ymm-options Use this endpoint to power cascading dropdowns in your own UI. Each request returns **exactly one list** — `years`, `makes`, `models`, `variants` (combined model + trim display strings, e.g. `"Tacoma TRD Pro"`), or `trims` (shorter manufacturer trim names when you explicitly request `dimension=trims`). Add `year`, `make`, and `model` filters to get better, more relevant results at each step. Typical flow: start with no filters to list years → add `year` for makes → add `make` for models → add `model` for variants. One API call per dropdown level. **Bulk variant list:** `dimension=variants` with `year` + `make` (no `model`) returns every variant for that make in one flat array. --- ## Billing Most requests cost **1 unit**. Exception: `dimension=variants` with `year` + `make` and no `model` costs **1 unit per model**. The response includes `modelCount`, the number of distinct models, which is also the amount billed — with a minimum of 1 unit even when zero models match. Example: 82 variant strings across 12 models → `modelCount: 12` → **12 units**. --- Retrieve distinct values for Year, Make, Model, or Variant lists, filtered by the parameters you supply. --- ## Required attributes Your CarsXE API key. ## Optional attributes One of `years`, `makes`, `models`, `trims`, or `variants`. When set, the response contains exactly that one array if the required filters for that dimension are present. When omitted, the response layer is inferred from `year`, `make`, and `model` — see the table below. Filter to a specific manufacturing year. Required when you filter by `model` without `make`. Filter to a specific manufacturer (e.g., Toyota, Ford, Lexus). Required for `dimension=models`. Filter to a specific model (e.g., Camry, F-150, LX). Required for `dimension=trims` and for `dimension=variants` unless both `year` and `make` are set. Also required for inferred variants when `make` is omitted. Optional substring filter on trim names. Only applied when querying `dimension=trims` or `dimension=variants` (ignored for `years`, `makes`, and `models`). ### Automatic response shape (no `dimension` given) Omit `dimension` and the API returns one array inferred from your filters: | `make`? | `model`? | `year`? | Returns | | --- | --- | --- | --- | | — | — | — | `years` | | — | — | ✓ | `makes` | | ✓ | — | * | `models` | | ✓ | ✓ | * | `variants` | | — | ✓ | — | **400** — `year` required when `model` is given without `make` | | — | ✓ | ✓ | `variants` if that model name maps to one make that year; **400** — add `make` if the name appears under multiple makes (e.g. `Sentra`) | The API never returns more than one layer per response. To populate both a model list and a variant list, make two calls. ### Explicit `dimension` values You can also set `dimension` directly. `trims` and `variants` share most filter rules; `variants` also accepts `year` + `make` (no `model`) for a bulk list. `variants` returns friendly display strings (`"Tacoma TRD Pro"`), while `trims` returns shorter manufacturer trim names. | `dimension` | Typical use | Required filters | | --- | --- | --- | | `years` | List years (optionally for a known make + model) | — | | `makes` | List makes (optionally for a known year) | — | | `models` | List models for a make | `make` | | `trims` | Shorter manufacturer trim names for a vehicle | `model` (+ `year` when `make` omitted; + `make` when model is ambiguous) | | `variants` | Model + trim display strings for menus | `year` + `make` for a bulk list, or `model` (+ `year` when `make` omitted; + `make` when model is ambiguous) | If you request `dimension=variants` or `dimension=trims` with only `make` (no `year`), the API returns `models` for that make with a `message` explaining that `model` is needed next — it does not error. With `dimension=variants`, `year`, and `make`, you get all variants for that make/year in one response. --- ## Response attributes Indicates whether the request was successful. Echoes back only the query parameters you submitted. Optional guidance when the returned layer differs from the requested `dimension`, or when explaining what to add next for better results. Distinct values for that layer when applicable. Combined model + trim display strings, deduplicated. Shorter manufacturer trim names — only when `dimension=trims` with sufficient filters. Present only for bulk variants (`dimension=variants` + year + make, no model). Equals the number of distinct models, which is also the amount billed — except a zero-match query, which returns `modelCount: 0` but still bills a minimum of 1 unit. You requested dimension=variants (or trims) with only make and no year. The API returns models for that make and a message telling you to add model=... on the next call. With dimension=variants, year, and make, you get variants directly. }, { question: "How is usage billed?", answer: <>Most requests cost 1 unit. Exception: dimension=variants with year + make and no model costs 1 unit per model. Check modelCount in the response — that is the amount billed, with a minimum of 1 unit. }, { question: "Why do I need year or make when I only have a model name?", answer: <>Without make, a year filter is required. If that model name appears under multiple makes for that year (e.g. Sentra), add make as well. If the name is unique to one make, year + model is enough. }, { question: "What is the difference between trims and variants?", answer: <>variants returns display-ready strings like "Tacoma TRD Pro". trims returns shorter manufacturer trim names. Both need a model (or disambiguating year/make) for single-vehicle lookups; only dimension=variants accepts year + make without model for a bulk list. For dropdown menus, use inferred responses or dimension=variants. }, { question: "Does this endpoint require an API key?", answer: <>Yes — every request requires a valid, active CarsXE API key and counts toward your Year Make Model Options quota. } ]} hidePadding /> ```bash # Step 1 — list years (no filters) curl -G https://api.carsxe.com/v1/ymm-options \ -d key=CARSXE_API_KEY # Step 2 — makes for a year curl -G https://api.carsxe.com/v1/ymm-options \ -d key=CARSXE_API_KEY \ -d year=2026 # Step 3 — models for a make curl -G https://api.carsxe.com/v1/ymm-options \ -d key=CARSXE_API_KEY \ -d make=Toyota # Step 4 — variants for year + make + model curl -G https://api.carsxe.com/v1/ymm-options \ -d key=CARSXE_API_KEY \ -d year=2026 \ -d make=Toyota \ -d model=Tacoma # Variants when you only know year + model (works when the name is unique to one make) curl -G https://api.carsxe.com/v1/ymm-options \ -d key=CARSXE_API_KEY \ -d year=2026 \ -d model=Tacoma # All variants for a make+year in one call (billed per model — see modelCount) curl -G https://api.carsxe.com/v1/ymm-options \ -d key=CARSXE_API_KEY \ -d dimension=variants \ -d year=2025 \ -d make=Lexus # Explicit dimension=variants with make only (no year) — returns models + guidance message curl -G https://api.carsxe.com/v1/ymm-options \ -d key=CARSXE_API_KEY \ -d dimension=variants \ -d make=Toyota # Reversed lookup — which years a make + model were sold curl -G https://api.carsxe.com/v1/ymm-options \ -d key=CARSXE_API_KEY \ -d dimension=years \ -d make=Lexus \ -d model=TX # Trim names for year + make + model (requires model — no bulk path for trims) curl -G https://api.carsxe.com/v1/ymm-options \ -d key=CARSXE_API_KEY \ -d dimension=trims \ -d year=2026 \ -d make=Toyota \ -d model=Tacoma ``` ```json showLineNumbers {{ title: 'Response' }} { "success": true, "input": { "year": 2026, "make": "Toyota", "model": "Tacoma" }, "variants": [ "Tacoma Limited", "Tacoma SR", "Tacoma SR5", "Tacoma TRD Off-Road", "Tacoma TRD PreRunner", "Tacoma TRD Pro", "Tacoma TRD Sport", "Tacoma Trailhunter" ] } ``` ```json showLineNumbers {{ title: 'Response' }} { "success": true, "input": { "make": "Toyota" }, "models": ["4Runner", "Camry", "Corolla", "Tacoma", "Tundra"] } ``` ```json showLineNumbers {{ title: 'Response' }} { "success": true, "input": { "dimension": "variants", "year": 2025, "make": "Lexus" }, "variants": [ "ES 250", "ES 300h", "GX 550 Premium", "IS 300", "LC 500", "LS 500", "LX 600 Premium", "NX 350", "RC 350", "RX 350", "RZ 450e", "TX 350", "UX 300h" ], "modelCount": 12 } ``` ```json showLineNumbers {{ title: 'Response' }} { "success": true, "input": { "dimension": "variants", "make": "Toyota" }, "message": "To receive variants, include a model filter with this make. Models are returned instead.", "models": ["4Runner", "Camry", "Corolla", "Tacoma", "Tundra"] } ``` --- # Vehicle APIs (v2) > Below are the APIs available in version v2 with brief descriptions. Select one to view full documentation and examples. Source: https://carsxe.com/docs/v2
    ### Plate Decoder Retrieve vehicle details from license plates and registrations with enhanced v2 coverage. ### Market Value Get refined vehicle market value estimates with v2 improvements.
    --- # Vehicle Market Value > Discover comprehensive vehicle market value including historical vehicle sale history. Learn more about above and below market pricing. Source: https://carsxe.com/docs/v2/market-value The **Vehicle Market Value API** provides access to a library of vehicle market value data. The Vehicle Market Value API **estimates** the market value for **used** and **new** cars by **VIN** based on **millions** of historical vehicle sales stored in CarsXE's sales database. With the assumption that sale prices are normally distributed, CarsXE's market value model estimates the "below market" and "above market" values within a distribution. --- This endpoint allows you to retrieve the **market value** for a specific vehicle based on its **VIN**. ## Required attributes Your CarsXE **API key**. The 17 character long vehicle identification number. ## Optional attributes The **US state** of the vehicle to get the **market value** for. The **current mileage** of the vehicle used to adjust the market value. Must be a **valid numeric value**. The **overall condition** of the vehicle. Accepted values are: excellent, clean, average, or rough. --- ## Response attributes A **unique identifier** for for the vehicle. A map of the input: "**vin**", "**state**", "**country**" of the vehicle. The **date** when the vehicle **market value** data was last published or **updated**. The **frequency of data updates**. It indicates that the market value data provided by the API is updated **once per day.** The state where the vehicle's market value is being assessed, in this case, **California**. The country context for the valuation, in this case, the **United States**. The **unique vehicle code**. It is a unique identifier assigned to a specific vehicle configuration or model. This code helps in accurately identifying and retrieving precise market value data for that particular vehicle. A **group identifier** used to classify or associate the vehicle with a specific category, market segment, or data grouping. e.g., sedans, SUVs. The **manufacturing year** of the vehicle model being assessed. This information is crucial as it directly impacts the vehicle's market value, reflecting depreciation, demand, and historical relevance in pricing calculations. The **brand** or **manufacturer** of the vehicle, in this case, **Lexus**. The **model** of the vehicle, which is a particular version of the Lexus brand, here being the **RX 350**. The series associated with the vehicle. Describes the vehicle **style** or **body type**. In this case: * **4D** refers to a four-door vehicle. * **SUV** indicates the vehicle type is a Sport Utility Vehicle. * **AWD** stands for All-Wheel Drive, indicating the type of drivetrain. A **category** for the vehicle's **mileage**, could represent a specific mileage **range** or **classification**. A **class code** that categorizes the vehicle into a specific **segment** or **type**. This is a human-readable description of the **vehicle's class**. It specifies that the vehicle is categorized as a **large luxury crossover/SUV**, helping to describe the vehicle's type or market segment. A **rating** or **score** based on the vehicle's description quality or completeness. Indicates whether the vehicle's market value data is the **first set of values** being used or provided. In this case, it's set to **false**, meaning the data may not be the initial set or it has been updated or revisited. A **risk score** associated with the vehicle's market value or condition. A risk score might assess factors such as potential for accidents, fraud, or reliability concerns. **Excellent** condition, typically with no significant wear. **Good** condition, with minor wear. **Average** condition, showing moderate wear. **Poor** condition, showing significant wear or issues. For each category (e.g., "whole_xclean"), there are further subfields: * **base_whole_xclean**: The base value of the vehicle in **excellent** condition, **before adjustments** (e.g., mileage or regional factors). * **mileage_whole_xclean**: Adjustments for mileage (if any). * **add_deduct_whole_xclean**: Any other **additions** or **deductions** (for special features or damages). * **regional_whole_xclean**: Adjustments based on regional market differences. * **adjusted_whole_xclean**: The final, **adjusted market value** for the vehicle. The **retail price** of a vehicle in **excellent** condition (no significant wear, like new or almost new). The **retail price** for a vehicle in **good** condition (minor wear and tear, but well-maintained). The **retail price** of a vehicle in **average** condition (moderate wear, typically for a used vehicle). The **retail price** for a vehicle in **poor** condition (significant wear and tear, possible mechanical or cosmetic issues). The **trade-in price** for a vehicle in **good** condition (minor wear and tear, well-maintained, ready for resale or continued use). The **trade-in price** for a vehicle in **average** condition (moderate wear, typical for a used vehicle with normal signs of use). The **trade-in price** for a vehicle in **poor** condition (significant wear, potential mechanical or cosmetic issues, or higher depreciation). Manufacturer’s Suggested Retail Price (MSRP) is the **recommended selling price** set by the vehicle manufacturer for the vehicle before any dealer discounts or additions. It is often used as a starting point for pricing. The **retail price** of the vehicle **equipped** with all available options and features, including any add-ons, upgrades, or packages. This describes the **options** or **features** that are **included** in the vehicle’s price. It lists the additional equipment or features that are part of the specified price. * **AC**: Air Conditioning * **AT**: Automatic Transmission * **LTH**: Leather Upholstery * **SR**: Sunroof The wheelbase is the **distance** (106.9 inches) between the front and rear axles of the vehicle. It can affect the vehicle's handling, ride quality, and interior space. The tire size indicates the **dimensions** of the tires installed on the vehicle. This includes: * **225**: The tire width in millimeters. * **65**: The aspect ratio (the height of the tire sidewall as a percentage of the width). * **SR**: The speed rating (indicating the maximum speed the tire is rated for). * **17**: The diameter of the tire in inches. **Gross Vehicle Weight** (GVW) is the total weight (5,245 pounds) of the vehicle, **including its maximum load** (passengers, cargo, etc.). The **seating capacity** indicates the **number of passengers** the vehicle can accommodate. The **type** of **fuel** the vehicle uses. The **fuel capacity** refers to the volume of fuel the vehicle's tank can hold, usually in gallons. Fuel **delivery system** type used by the vehicle. MPI stands for **Multi-Point Fuel Injection**, which is a type of fuel injection system where each cylinder has its own injector, allowing more precise control of fuel delivery. **Highway Miles Per Gallon** (MPG) represents the vehicle's fuel efficiency on highways or at constant speeds. **City Miles Per Gallon** (MPG) indicates the vehicle’s fuel efficiency in urban or stop-and-go driving conditions. This field provides a description of the vehicle’s engine. * **3.5L**: The **engine’s displacement**, meaning it has a 3.5-liter engine capacity. * **V6**: The engine has six **cylinders** arranged in a V-shape. * **SFI**: **Sequential Fuel Injection**, a system where fuel is injected into each cylinder at the appropriate time. * **DOHC**: Double Overhead Camshaft, indicating the engine has two camshafts controlling the intake and exhaust valves for better performance. The number of **cylinders** in the engine. The **engine displacement** refers to the total volume of all the cylinders in the engine, often measured in liters. The base horsepower of the engine, which measures its maximum power output. * **270**: The engine produces 270 horsepower at the specified RPM. * **6200**: The engine reaches 270 horsepower at 6,200 RPM (revolutions per minute). The **taxable horsepower** refers to the engine’s power rating used for tax or registration purposes, which might be calculated differently from the base horsepower. The engine’s **torque** is a measure of its **rotational force**, important for acceleration and towing capacity. * **251**: The engine generates 251 lb-ft of torque. * **4700**: This torque is available at 4,700 **RPM**. The type of transmission the vehicle uses. The vehicle has an **automatic** transmission, as indicated by "**A**". The vehicle’s **drivetrain** indicates how power is delivered to the wheels. The vehicle has **All-Wheel Drive** (AWD), meaning power is distributed to all four wheels for better traction, especially in poor road conditions. The **number of gears** in the vehicle's transmission. The number of **exterior doors** the vehicle has. The vehicle has **4 doors**, which is typical for a sedan or a 4-door SUV. The basic warranty for the vehicle, covering **repairs** or **defects** within a **specified time** or **mileage** limit. * **4-year/50,000-mile**: The warranty lasts for 4 years or 50,000 miles, whichever comes first. * **Limited**: The warranty is limited, meaning it may not cover all components or may have exclusions. Represents a list of **additions** or **deductions** based on specific options or features in the vehicle, and how those features impact its market value. * **uoc**: This is a **unique identifier** for the option or feature (UOC stands for Unique Option Code). * **name**: The name of the option or feature being added or deducted. * **xclean**, **clean**, **avg**, **rough**: These represent how the feature or option affects the vehicle’s value depending on its condition. These values are specific adjustments to the market value based on the condition of the vehicle: * **xclean**: Adjusted value for a vehicle in **extra clean** condition. * **clean**: Adjusted value for a vehicle in **clean** condition. * **avg**: Adjusted value for a vehicle in **average** condition. * **rough**: Adjusted value for a vehicle in **rough** condition. * **auto**: Indicates if the feature is **automatic** (whether it is part of the vehicle's default set of features or not). * **resid12**, **resid24**, **resid30**, **resid36**, **resid42**, **resid48**, **resid60**, **resid72**: * These represent the **residual values (depr**eciation or remaining value) for the option at different time periods (in months). These values are used for calculating lease residuals or depreciation over time. This is a list of model numbers associated with the vehicle. Represents a list of **additions** or **deductions** based on mileage / kilometer range (US / Canada) at the vehicle’s respective condition. * **model_year**: This is model year of the vehicle. * **range_begin**: The range at which these price adjustments apply. * **range_end**: The range at which these price adjustments end. * **xclean**, **clean**, **avg**, **rough**: These represent how the feature or option affects the vehicle’s value depending on its condition. These values are specific adjustments to the market value based on the condition of the vehicle: * **xclean**: Adjusted value for a vehicle in **extra clean** condition. * **clean**: Adjusted value for a vehicle in **clean** condition. * **avg**: Adjusted value for a vehicle in **average** condition. * **rough**: Adjusted value for a vehicle in **rough** condition. The **retail value** of the vehicle, which represents the **expected** price if the vehicle is sold to a **consumer**, typically by a **dealership**. The **trade-in value** of the vehicle, which is how much a dealership would offer to accept the vehicle as a trade-in for purchasing a different vehicle. The **rough trade-in value** of the vehicle, which represents the lowest price a dealership would offer for a vehicle in **poor condition** (rough). The **average trade-in value**, which represents a middle ground or average trade-in price for a vehicle in **average condition**. The **loan value** of the vehicle, which is the estimated amount the vehicle would be financed for, typically used by **banks** or **financial institutions** for vehicle loans. This field would typically contain additional details related to trade-in values **over time** or **across different conditions**. The **auction values** represent the price range that the vehicle could sell for at an auction, which is typically lower than retail but higher than trade-in values. Auction prices depend on the vehicle's condition and demand. * **low_auction_value**: The lowest expected price the vehicle could sell for at an auction, in this case, $3,150. * **average_auction_value**: The average price the vehicle is expected to sell for at an auction, in this case, $4,400. * **high_auction_value**: The highest expected price the vehicle could sell for at an auction, in this case, $5,675. * **date_range**: The date range during which the auction values are applicable. In this case, the values are for 12/18/2024. You may be use the following VINs for test:
    • JN1EV7AP6JM355294
    • WBAFR7C57CC811956
    },{question: "Is the Vehicle Market Value API included in the free Sandbox?", answer: <>Yes! The Vehicle Market Value API is included in the free Sandbox with a lifetime limit of 5 API calls. For more information visit our pricing page.}]} hidePadding /> ```bash curl -G https://api.carsxe.com/v2/marketvalue \ -d key=CARSXE_API_KEY \ -d vin=WBAFR7C57CC811956 ``` ```js import { CarsXE } from "carsxe-api"; const carsxe = new CarsXE("CARSXE_API_KEY"); const vin = "WBAFR7C57CC811956"; try { const marketValue = await carsxe.marketvalue({ vin }); console.log(marketValue); } catch (error) { console.error(error); } ``` ```python import asyncio from carsxe_api import CarsXE carsxe = CarsXE('CARSXE_API_KEY') vin = 'WBAFR7C57CC811956' try: marketValue = asyncio.run(carsxe.market_value({"vin": vin})) print(marketValue) except Exception as e: print(f"Error: {e}") ``` ```php marketValue(['vin' => $vin]); print_r($marketValue); } catch (Exception $error) { echo "Error: " . $error->getMessage(); } ``` ```ruby require 'carsxe' API_KEY = 'CARSXE_API_KEY' carsxe = Carsxe::CarsXE.new(api_key: API_KEY) vin = 'WBAFR7C57CC811956' begin marketValue = carsxe.market_value('vin' => vin) puts marketValue rescue StandardError => error puts "Error: #{error.message}" end ``` ```go package main import ( "fmt" "github.com/carsxe/carsxe-go-package" ) func main() { client := carsxe.New("CARSXE_API_KEY") vin := "WBAFR7C57CC811956" marketValue := client.MarketValue(map[string]string{"vin": vin}) fmt.Println(marketValue) } ``` ```java import io.github.carsxe.CarsXE; import java.util.Map; import java.util.HashMap; public class Main { public static void main(String[] args) { CarsXE carsxe = new CarsXE("CARSXE_API_KEY"); Map params = new HashMap<>(); params.put("vin", "WBAFR7C57CC811956"); try { Map marketValue = carsxe.marketvalue(params); System.out.println(marketValue); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } } } ``` ```swift import carsxe let carsxe = CarsXE(apiKey: "CARSXE_API_KEY") let vin = "WBAFR7C57CC811956" do { let marketValue = try carsxe.marketValue(["vin": vin]) print(marketValue) } catch { print("Error: \(error)") } ``` ```csharp using carsxe; using System; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { string API_KEY = "CARSXE_API_KEY"; CarsXE carsxe = new CarsXE(API_KEY); string vin = "WBAFR7C57CC811956"; try { var marketValue = await carsxe.MarketValue(new Dictionary { { "vin", vin } }); Console.WriteLine(marketValue); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } } } ``` ```json showLineNumbers {{ title: 'Response' }} { "uid": "FDE60872", "input": { "vin": "WBAFR7C57CC811956", "country": "US" }, "publish_date": "4/8/2025", "data_freq": "D", "state": "NT", "country": "US", "uvc": "2012100134", "group_num": "4265", "model_year": "2012", "make": "BMW", "model": "5-Series", "series": "535i", "style": "4D Sedan", "mileage_cat": "G", "class_code": "F", "class_name": "Luxury Car", "description_score": "", "first_values_flag": false, "risk_score": "", "whole_xclean": { "base_whole_xclean": 6500, "mileage_whole_xclean": 0, "add_deduct_whole_xclean": 0, "regional_whole_xclean": 0, "adjusted_whole_xclean": 6500 }, "whole_clean": { "base_whole_clean": 5300, "mileage_whole_clean": 0, "add_deduct_whole_clean": 0, "regional_whole_clean": 0, "adjusted_whole_clean": 5300 }, "whole_avg": { "base_whole_avg": 3675, "mileage_whole_avg": 0, "add_deduct_whole_avg": 0, "regional_whole_avg": 0, "adjusted_whole_avg": 3675 }, "whole_rough": { "base_whole_rough": 2100, "mileage_whole_rough": 0, "add_deduct_whole_rough": 0, "regional_whole_rough": 0, "adjusted_whole_rough": 2100 }, "retail_xclean": { "base_retail_xclean": 10775, "mileage_retail_xclean": 0, "add_deduct_retail_xclean": 0, "regional_retail_xclean": 0, "adjusted_retail_xclean": 10775 }, "retail_clean": { "base_retail_clean": 9325, "mileage_retail_clean": 0, "add_deduct_retail_clean": 0, "regional_retail_clean": 0, "adjusted_retail_clean": 9325 }, "retail_avg": { "base_retail_avg": 6975, "mileage_retail_avg": 0, "add_deduct_retail_avg": 0, "regional_retail_avg": 0, "adjusted_retail_avg": 6975 }, "retail_rough": { "base_retail_rough": 5150, "mileage_retail_rough": 0, "add_deduct_retail_rough": 0, "regional_retail_rough": 0, "adjusted_retail_rough": 5150 }, "trade_in_clean": { "base_trade_in_clean": 5395, "mileage_trade_in_clean": 0, "add_deduct_trade_in_clean": 0, "regional_trade_in_clean": 0, "adjusted_trade_in_clean": 5395 }, "trade_in_avg": { "base_trade_in_avg": 3770, "mileage_trade_in_avg": 0, "add_deduct_trade_in_clean": 0, "regional_trade_in_clean": 0, "adjusted_trade_in_clean": 5395 }, "trade_in_rough": { "base_trade_in_rough": 2015, "mileage_trade_in_rough": 0, "add_deduct_trade_in_rough": 0, "regional_trade_in_rough": 0, "adjusted_trade_in_rough": 2015 }, "region2": 0, "region3": 0, "region4": -50, "region5": 0, "region6": 0, "msrp": 52500, "retail_equipped": 55375, "price_includes": "AC AT LTH SR", "wheel_base": 116.9, "tire_size": "245/45R18", "gvw": 3913, "seat_cap": "5", "fuel_type": "Gas", "fuel_cap": "18.5", "fuel_delivery": "Direct injection", "hwy_mpg": "28", "city_mpg": "19", "engine_description": "3.0L I-6 DI DOHC T/C", "cylinders": "6", "engine_displacement": "3.0L", "engine_turbocharged": "Turbocharg", "base_hp": "306 @ 5800", "taxable_hp": 26.3, "torque": "400 @ 5000", "transmission": "A", "drivetrain": "RWD", "num_gears": "6", "ext_doors": "4", "airbags": "Side Curtain; Supplemental Restraint System", "basic_warranty": "4-year/50,000-mile, Limited", "road_assist_warranty": "4-year/Unlimited-mile", "add_deduct_list": [ { "uoc": "N5", "name": "Navigation System", "xclean": 0, "clean": 0, "avg": 0, "rough": 0, "auto": "N", "resid12": 0, "resid24": 0, "resid30": 0, "resid36": 0, "resid42": 0, "resid48": 0, "resid60": 0, "resid72": 0 }, { "uoc": "41", "name": "Sport Package", "xclean": 550, "clean": 550, "avg": 550, "rough": 550, "auto": "N", "resid12": 0, "resid24": 0, "resid30": 0, "resid36": 0, "resid42": 0, "resid48": 0, "resid60": 0, "resid72": 0 }, { "uoc": "MS", "name": "M Sport Package", "xclean": 600, "clean": 600, "avg": 600, "rough": 600, "auto": "N", "resid12": 0, "resid24": 0, "resid30": 0, "resid36": 0, "resid42": 0, "resid48": 0, "resid60": 0, "resid72": 0 }, { "uoc": "05", "name": "w/o Auto Trans", "xclean": -650, "clean": -650, "avg": -650, "rough": -650, "auto": "N", "resid12": 0, "resid24": 0, "resid30": 0, "resid36": 0, "resid42": 0, "resid48": 0, "resid60": 0, "resid72": 0 } ], "model_number_list": [ "125C" ], "mileage_list": [ { "model_year": "2012", "range_begin": 1, "range_end": 9000, "xclean": 2600, "clean": 2750, "avg": 2925, "rough": 2925, "finadv": 2675, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 9001, "range_end": 21000, "xclean": 2425, "clean": 2600, "avg": 2750, "rough": 2925, "finadv": 2500, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 21001, "range_end": 33000, "xclean": 2275, "clean": 2425, "avg": 2600, "rough": 2750, "finadv": 2350, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 33001, "range_end": 45000, "xclean": 2100, "clean": 2275, "avg": 2425, "rough": 2600, "finadv": 2175, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 45001, "range_end": 57000, "xclean": 1950, "clean": 2100, "avg": 2275, "rough": 2425, "finadv": 2025, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 57001, "range_end": 69000, "xclean": 1850, "clean": 1950, "avg": 2100, "rough": 2275, "finadv": 1900, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 69001, "range_end": 81000, "xclean": 1625, "clean": 1850, "avg": 1950, "rough": 2100, "finadv": 1725, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 81001, "range_end": 88000, "xclean": 1400, "clean": 1625, "avg": 1850, "rough": 1950, "finadv": 1500, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 88001, "range_end": 95000, "xclean": 1150, "clean": 1400, "avg": 1625, "rough": 1850, "finadv": 1275, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 95001, "range_end": 102000, "xclean": 925, "clean": 1150, "avg": 1400, "rough": 1625, "finadv": 1050, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 102001, "range_end": 109000, "xclean": 700, "clean": 925, "avg": 1150, "rough": 1400, "finadv": 825, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 109001, "range_end": 116000, "xclean": 600, "clean": 700, "avg": 925, "rough": 1150, "finadv": 650, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 116001, "range_end": 123000, "xclean": 500, "clean": 600, "avg": 700, "rough": 925, "finadv": 550, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 123001, "range_end": 126000, "xclean": 400, "clean": 500, "avg": 600, "rough": 700, "finadv": 450, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 126001, "range_end": 129000, "xclean": 300, "clean": 400, "avg": 500, "rough": 600, "finadv": 350, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 129001, "range_end": 132000, "xclean": 200, "clean": 300, "avg": 400, "rough": 500, "finadv": 250, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 132001, "range_end": 135000, "xclean": 100, "clean": 200, "avg": 300, "rough": 400, "finadv": 150, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 135001, "range_end": 138000, "xclean": 0, "clean": 100, "avg": 200, "rough": 300, "finadv": 50, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 138001, "range_end": 141000, "xclean": -100, "clean": 0, "avg": 100, "rough": 200, "finadv": -50, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 141001, "range_end": 144000, "xclean": -200, "clean": -100, "avg": 0, "rough": 100, "finadv": -150, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 144001, "range_end": 147000, "xclean": -300, "clean": -200, "avg": -100, "rough": 0, "finadv": -250, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 147001, "range_end": 150000, "xclean": -400, "clean": -300, "avg": -200, "rough": -100, "finadv": -350, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 150001, "range_end": 153000, "xclean": -500, "clean": -400, "avg": -300, "rough": -200, "finadv": -450, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 153001, "range_end": 156000, "xclean": -600, "clean": -500, "avg": -400, "rough": -300, "finadv": -550, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 156001, "range_end": 159000, "xclean": -700, "clean": -600, "avg": -500, "rough": -400, "finadv": -650, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 159001, "range_end": 162000, "xclean": -925, "clean": -700, "avg": -600, "rough": -500, "finadv": -825, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 162001, "range_end": 165000, "xclean": -1150, "clean": -925, "avg": -700, "rough": -600, "finadv": -1050, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 165001, "range_end": 172000, "xclean": -1400, "clean": -1150, "avg": -925, "rough": -700, "finadv": -1275, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 172001, "range_end": 179000, "xclean": -1625, "clean": -1400, "avg": -1150, "rough": -925, "finadv": -1500, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 179001, "range_end": 186000, "xclean": -1850, "clean": -1625, "avg": -1400, "rough": -1150, "finadv": -1725, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 186001, "range_end": 193000, "xclean": -2075, "clean": -1850, "avg": -1625, "rough": -1400, "finadv": -1950, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 193001, "range_end": 200000, "xclean": -2300, "clean": -2075, "avg": -1850, "rough": -1625, "finadv": -2200, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 200001, "range_end": 207000, "xclean": -2700, "clean": -2300, "avg": -2075, "rough": -1850, "finadv": -2500, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 207001, "range_end": 214000, "xclean": -2925, "clean": -2700, "avg": -2300, "rough": -2075, "finadv": -2825, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 214001, "range_end": 226000, "xclean": -3150, "clean": -2925, "avg": -2700, "rough": -2300, "finadv": -3050, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 226001, "range_end": 238000, "xclean": -3375, "clean": -3150, "avg": -2925, "rough": -2700, "finadv": -3275, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 238001, "range_end": 250000, "xclean": -3600, "clean": -3375, "avg": -3150, "rough": -2925, "finadv": -3500, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 250001, "range_end": 262000, "xclean": -3825, "clean": -3600, "avg": -3375, "rough": -3150, "finadv": -3725, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 262001, "range_end": 274000, "xclean": -3825, "clean": -3825, "avg": -3600, "rough": -3375, "finadv": -3825, "mileage_cat": "G" }, { "model_year": "2012", "range_begin": 274001, "range_end": 999999, "xclean": -3825, "clean": -3825, "avg": -3825, "rough": -3600, "finadv": -3825, "mileage_cat": "G" } ], "retail": 6975, "trade_in": 5395, "rough_trade_in": 2015, "average_trade_in": 3770, "loan_value": 9325, "trade_in_values": [], "auction_values": { "low_auction_value": 2100, "average_auction_value": 3675, "high_auction_value": 5300, "date_range": "4/8/2025" } } ```
    --- # Vehicle Plate Decoder > The Vehicle Plate Decoder API provides access to a library of vehicle's data based on the vehicle's registration/license plate number and state. Source: https://carsxe.com/docs/v2/plate-decoder The Vehicle Plate Decoder API looks up the vehicle through the database for matches and returns the VIN, make, model and year among other attributes. It can be coupled with other APIs to become even more powerful. The state is a two letter abbreviation of one of the 50 states, or District of Columbia (DC), Guam (GU), Puerto Rico (PR) or Virgin Islands (VI). International support for license plate decoding is available in the following countries: **Africa:** Nigeria (NG), South Africa (ZA), Tunisia (TN) **Asia:** China (CN), Cyprus (CY), India (IN), Kazakhstan (KZ), Malaysia (MY), Pakistan (PK), Singapore (SG), Sri Lanka (LK), Taiwan (TW), United Arab Emirates (AE) **Europe:** Albania (AL), Croatia (HR), Czech Republic (CZ), Denmark (DK), Estonia (EE), Finland (FI), France (FR), Germany (DE), Greece (GR), Hungary (HU), Iceland (IS), Ireland (IE), Isle of Man (IM), Italy (IT), Latvia (LV), Lithuania (LT), Malta (MT), Netherlands (NL), Norway (NO), Poland (PL), Portugal (PT), Romania (RO), Russia (RU), Slovakia (SK), Slovenia (SI), Spain (ES), Sweden (SE), Switzerland (CH), Ukraine (UA), United Kingdom (GB) **North America:** Canada (CA), Costa Rica (CR), Mexico (MX), United States (US) **Oceania:** Australia (AU), New Zealand (NZ) **South America:** Argentina (AR), Bolivia (BO), Brazil (BR), Chile (CL), Colombia (CO), Ecuador (EC), Peru (PE) All requests are made with `plate`, `country` (optional for `US`) and `state` (if applicable ex. for `US`, `AU`, `CA`, etc). Response attributes vary by country but consistently include `description`, `make`, `model`, and `registration_year`. --- This endpoint allows you to retrieve vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes) such as `AU` for Australia or `ZA` for South Africa. Optional for `US`. The two letter state code (US) such as `CA` or `NY` or Australian state (see FAQ). Required only for `US`, `AU`, and `CA`. --- You may be use the following plate for test:
    • Plate: 7XER187
    • State: CA
    },{question: "How can I search Australian vehicle registrations?", answer: <>For Australia use country=AU&state=NSW. The list of possible Australian states are:
    • NSW (New South Wales),
    • VIC (Victoria),
    • QLD (Queensland incl. North Queensland),
    • SA (South Australia),
    • ACT (Canberra),
    • NT (Northern Territory),
    • TAS (Tasmania),
    • WA (Western Australia),
    },{question: "Is the Vehicle Plate Decoder API included in the free Sandbox?", answer: <>Yes! The Vehicle Plate Decoder API is included in the free Sandbox as part of the shared lifetime quota (up to 100 API calls). For more information visit our pricing page.}]} hidePadding /> ```json showLineNumbers { "success": true, "input": { "plate": "7XER187", "country": "US", "state": "CA", }, "description": "Kia Forte LX", "make": "Kia", "model": "Forte LX", ... } ```
    --- ## United States This endpoint allows you to retrieve US vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. Optional for `US`. The state is a two letter abbreviation of one of the 50 states, or District of Columbia (`DC`), Guam (`GU`), Puerto Rico (`PR`) or Virgin Islands (`VI`). ```json showLineNumbers { "success": true, "input": { "plate": "7XER187", "state": "CA", "country": "US" }, "description": "Kia Forte LX", "make": "Kia", "model": "Forte", "trim": "LX", "vin": "3KPFK4A78HE103497", "style": "Sedan 4D", "year": "2017", "assembly": "Mexico", "fuel_type": "Gasoline", "color": "White", "body_style": "Sedan", "engine_size": "2.0L I4 MPI", "drive_type": "FWD", "transmission": "Automatic" } ``` --- ## Albania This endpoint allows you to retrieve Albanian vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `AL` for Albania. ```json showLineNumbers { "success": true, "input": { "plate": "AB404GM", "country": "AL" }, "description": "MERCEDES BENZ AUTOVETURE", "registration_year": "2006", "make": "MERCEDES BENZ", "model": "AUTOVETURE", "region": "", "number_of_seats": "5", "power": "2987", "color": "ZEZE", "traffic_permit": "0000000396373", "owner": "HYSOLLARI 2023 SHPK", "engine_size": "2240" } ``` --- ## Argentina This endpoint allows you to retrieve Argentinian vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `AR` for Argentina. ```json showLineNumbers { "success": true, "input": { "plate": "NOD441", "country": "AR" }, "description": "FIAT PALIO ATTRACTIVE 1.4 5 P ", "registration_year": "2014", "make": "FIAT", "model": "PALIO ATTRACTIVE 1.4 5 P ", "make_description": "FIAT", "model_description": "PALIO ATTRACTIVE 1.4 5 P ", "region": "Ciudad de Buenos Aires" } ``` --- ## Bolivia This endpoint allows you to retrieve Bolivian vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `BO` for Bolivia. ```json showLineNumbers { "success": true, "input": { "plate": "3054SXI", "country": "BO" }, "description": "DODGE RAM 1500", "registration_year": "2007", "make": "DODGE", "model": "RAM 1500", "make_description": "DODGE", "model_description": "RAM 1500", "policy": "130158395", "country": "ESTADOS UNIDOS", "class": "CAMIONETA", "service": "PARTICULAR", "drive": "4 X 2 (SIMPLE)", "cc": "5700", "colour": "PLOMO", "body": "OTROS", "load": "1", "doors": "4", "location": "LA PAZ", "vehicle_type": "REEMPLACADO", } ``` --- ## Brazil This endpoint allows you to retrieve Brazilian vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `BR` for Brazil. ```json showLineNumbers { "success": true, "input": { "plate": "KNX9595", "country": "BR" }, "description": "FERRARI F458 ITALIA F1 4.5 V8 570CV", "registration_year": "2010", "make": "FERRARI", "model": "F458 Italia F1 4.5 V8 570cv", "location": "UBERLANDIA, MG", "vin": "ZFF67NHB0A0174002", "fuel_type": "GASOLINA", "color": "VERMELHA", "power": "570", "engine_cc": "4500", "type": "PASSAGEIRO", "seats": "2", "axles": "2", "gross_weight": "153", "max_traction": "183" } ``` --- ## Canada This endpoint allows you to retrieve Canadian vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `CA` for Canada. The state is a two letter abbreviation of one of the 13 provinces and territories of Canada. | Province/Territory | Abbreviation | | ------------------- | :------------: | | Alberta | AB | | British Columbia | BC | | Manitoba | MB | | New Brunswick | NB | | Newfoundland and Labrador | NL | | Northwest Territories | NT | | Nova Scotia | NS | | Nunavut | NU | | Ontario | ON | | Prince Edward Island | PE | | Quebec | QC | | Saskatchewan | SK | | Yukon | YT | ```json showLineNumbers { "success": true, "input": { "plate": "CKST441", "state": "ON", "country": "CA" }, "description": "Volkswagen Jetta", "registration_year": "2019", "make": "Volkswagen", "model": "Jetta", "vin": "3VWE57BU5KM219002", "fuel_type": "Gasoline", "engine_size": "1.4L L4 DOHC 16V TURBO", "body_style": "Sedan", "transmission": "Automatic", "trim": "SEL", "drive_type": "FWD" } ``` --- ## Chile This endpoint allows you to retrieve Chilean vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `CL` for Chile. ```json showLineNumbers { "success": true, "input": { "plate": "DKCZ90", "country": "CL" }, "description": "BMW 116I M 1.6", "registration_year": "2012", "make": "BMW", "model": "116I M 1.6", "make_description": "BMW", "model_description": "116I M 1.6", "valid_since": "05-04-2024", "expiry": "28-02-2025", "vehicle_type": "AUTOMOVIL", "vin": "WBAUE1105CPZ56669", "engine_code": "A393I950", "fuel": "GASOLINA", "colour": "BLANCO", "owner": { "name": "ALARCON CONEJEROS HERNAN ESTEBAN", "national_id": "16287080-7" }, } ``` --- ## China This endpoint allows you to retrieve Chinese vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `CN` for China. ```json showLineNumbers { "success": true, "input": { "plate": "浙GCJ300", "country": "CN" }, "description": "haima Family", "registration_year": "2004", "make": "haima", "model": "Family", "variant": "GL New Yue Class", "engineSize": "1.6L", "make_description": "haima", "model_description": "Family", "number_of_seats": "5", "number_of_doors": "4", "body_style": "saloon", "vin": "LH17CKJF04H035018", "engine_number": "ZM", "fuel_type": "gasoline", "owner": { "name": "王坚强", "id": "330725197611214838", "address": "义乌市稠城街道殿山村", "tel": "13868977994" }, "gonggao": "HMC7161", "location": "浙江省金华市", } ``` --- ## Colombia This endpoint allows you to retrieve Colombian vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `CO` for Colombia. ```json showLineNumbers { "success": true, "input": { "plate": "HBK482", "country": "CO" }, "description": "VOLKSWAGEN JETTA [6] TRENDLINE TP 2500CC", "make": "VOLKSWAGEN", "model": "JETTA [6] TRENDLINE TP 2500CC", "engine_size": "2500", "number_of_doors": "5", "fuel_type": "", "vin": "", "vehicle_type": "AUTOMOVIL", "motor_code": "09201157", "registration_year": "2013", "insurance": "", } } ``` --- ## Costa Rica This endpoint allows you to retrieve Costa Rican vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `CR` for Costa Rica . ```json showLineNumbers { "success": true, "input": { "plate": "706854", "country": "CR" }, "description": "TOYOTA ECHO", "make": "TOYOTA", "model": "ECHO", "make_description": "TOYOTA", "model_description": "ECHO", "engine_size": "1500 C.C", "registration_year": "2001", "body": "SEDAN 2 PUERTAS", "transmission": " ", "fuel": "GASOLINA", "cabin": "DESCONOCIDO", "wheel_plan": "4X2", "vin": "JTDAT123310127285", "colour": "GRIS", "engine_code": "1NZ1573194", "owner": { "id": "107880581", "name": "MORALES BERROCAL JOHNNY FRANCISCO", }, } ``` --- ## Croatia This endpoint allows you to retrieve Croats vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `HR` for Croatia. ```json showLineNumbers { "success": true, "input": { "plate": "RI856VE", "country": "HR" }, "description": "BMW SERIJA 3, 316I", "make": "BMW", "model": "SERIJA 3, 316I", "make_description": "BMW", "model_description": "SERIJA 3, 316I", "vechile_identification_number": "WBAAY31080KP02047", "insurance_company": "SAVA OSIGURANJE D.D. PodruĹžnica Hrvatska(VELEBIT OSIGURANJE D.D. --> SAVA OSIG.)", "insurance_company_url": "http://www.sava-osiguranje.hr", "insurance_company_number": "370222400", "city": "Rijeka", } ``` --- ## Cyprus This endpoint allows you to retrieve Cypriot vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `CY` for Cyprus. ```json showLineNumbers { "success": true, "input": { "plate": "KXJ391", "country": "CY" }, "description": "DODGE CALIBER", "make": "DODGE", "model": "CALIBER", "make_description": "DODGE", "model_description": "CALIBER", "engine_size": "1998", "power": "", "registration_date": "01/01/2006", "manufacture_date": "01/01/2006", "convertible": "", "driver_side": "RHS", "usage": "Commercial", } ``` --- ## Czech Republic This endpoint allows you to retrieve Czech vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `CZ` for the Czech Republic. ```json showLineNumbers { "success": true, "input": { "plate": "3AV2714", "country": "CZ" }, "description": "ŠKODA OCTAVIA", "make": "ŠKODA", "model": "OCTAVIA", "registration_date": "04/10/2005", "registration_year": 2005, "engine_size": "1896", "fuel_type": "D", "body_style": "sedan/limuzína", "vin": "TMBCS21Z262149586", "gross_weight": "1970", "net_weight": "1 385 - 1 575", "power": "77", "region": "Hlavní město Praha" } ``` --- ## Denmark This endpoint allows you to retrieve Danish vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `DK` for Denmark. ```json { "success": true, "input": { "plate": "ZU47209", "country": "DK" }, "ABI_code": "", "description": "FERRARI 348 TS", "registration_year": "1993", "make": "FERRARI", "model": "348", "engine_size": "3405.0", "fuel_type": "Benzin", "immobiliser": "", "number_of_seats": "", "driver_side": "", "body_style": "", "vin": "ZFFKA36B000096243", "extended_information": { "@xmlns": "http://skat.dk/dmr/2007/05/31/", "vehicle_ident": "1007801199310004", "vehicle_type_number": "1", "vehicle_type_name": "Personbil", "vehicle_use_structure": { "vehicle_use_number": "1", "vehicle_use_name": "Privat personkørsel" }, "registration_number": "ZU47209", "vehicle_info_basic_structure": { "vehicle_info_created_from": "Registreringssyn", "vehicle_info_status": "Registreret", "vehicle_info_status_date": "2009-04-20T23:00:00+01:00", "vehicle_info_first_registration_date": "1993-05-03+02:00", "vehicle_info_chassis_number": "ZFFKA36B000096243", "vehicle_info_total_weight": "1680", "vehicle_info_own_weight": "1440", "vehicle_info_ready_to_drive_weight_minimum": "1565", "vehicle_info_technical_total_weight": "1680", "vehicle_info_axle_number": "2", "vehicle_info_seats_minimum": "2", "vehicle_info_connection_possibility": "false", "vehicle_info_comment": "DMR Konvertering", "vehicle_info_gear_number": "5", "vehicle_designation_structure": { "vehicle_brand_type_number": "10078", "vehicle_brand_type_name": "FERRARI", "model": { "vehicle_model_type_number": "10078008", "vehicle_model_type_name": "348" }, "variant": { "vehicle_variant_type_number": "1007800851", "vehicle_variant_type_name": "TS" }, "type": { "vehicle_type_type_number": "10078008510000000", "vehicle_type_type_name": "F119AS" } }, "vehicle_color_structure": { "color_type_structure": { "color_type_number": "1", "color_type_name": "Ukendt" } }, "vehicle_environment_info_structure": { "vehicle_environment_info_particle_filter": "false" }, "vehicle_engine_structure": { "vehicle_engine_cylinder_number": "8", "vehicle_engine_displacement": "3405.0", "vehicle_engine_maximum_power": "217.0", "vehicle_engine_mileage": "111", "vehicle_fuel_collection_structure": { "vehicle_fuel_collection": { "fuel_structure": { "propulsion_type_structure": { "propulsion_type_number": "1", "propulsion_type_name": "Benzin" }, "vehicle_engine_primary_fuel": "true" } } } } }, "inspection_result_structure": { "inspection_result_inspection_type": "PeriodiskSyn", "inspection_result_inspection_date": "2021-04-22+02:00", "inspection_result_inspection_result": "Godkendt", "inspection_result_inspection_status": "Aktiv", "inspection_result_inspection_status_date": "2021-04-22+02:00", "vehicle_engine_mileage_in_km": "111" }, "vehicle_registration_status": "Registreret", "vehicle_registration_status_date": "2009-04-20T23:00:00+01:00" } } ``` --- ## Ecuador This endpoint allows you to retrieve Ecuadorian vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `EC` for Ecuador. ```json showLineNumbers { "success": true, "input": { "plate": "PBU2742", "country": "EC" }, "description": "BMW X3 3.0SI", "make": "BMW", "model": "X3 3.0SI", "make_description": "BMW", "model_description": "X3 3.0SI", "year": "2008", "type": "LIVIANO", "sub_type": "AUTOMOVIL 4 TIEMPOS", "vehicle_identification_number": "WBXPC93488WJ05373", } ``` --- ## Estonia This endpoint allows you to retrieve Estonian vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `EE` for Estonia. ```json showLineNumbers { "success": true, "input": { "plate": "834MDF", "country": "EE" }, "description": "PEUGEOT PARTNER", "registration_year": "2002", "make": "PEUGEOT", "model": "PARTNER", "make_description": "PEUGEOT", "model_description": "PARTNER", "number_of_seats": "2", "power": "55", "gross_weight": "1717", } ``` --- ## Finland This endpoint allows you to retrieve Finnish vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `FI` for Finland. ```json showLineNumbers { "success": true, "input": { "plate": "LZF630", "country": "FI" }, "description": "Volkswagen GOLF", "registration_year": "2010", "make": "Volkswagen", "model": "GOLF", "engine_size": "1598", "fuel_type": "Diesel", "body_style": "Car", "insurance_company": "LähiTapiola", "vin": "WVWZZZ1KZBW072586", "tow_bar": "True", "registration_date": "21/09/2010", "axles": "", "power": "77", "turbo": "No", "net_weight": "1340", "engine_code": "CAYC", "transmission": "Automaattinen", "body_type": "Kombi-sedan", "model_year": "2011", "variant": "VW GOLF VI 09-13" } ``` --- ## France This endpoint allows you to retrieve vehicle information based on license plates and registration numbers from France. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `FR` for France. ```json showLineNumbers { "success": true, "input": { "plate": "EG258MA", "country": "FR" }, "description": "RENAULT SCÉNIC III", "registration_year": "2016", "make": "RENAULT", "model": "SCÉNIC III", "engine_size": "5", "fuel_type": "DIESEL", "immobiliser": "", "indicative_value": "", "driver_side": "", "body_style": "MONOSPACE COMPACT", "registration_date": "2016-06-24", "extended_information": { "anneeSortie": "2016", "boiteDeVitesse": "MECANIQUE", "carburantVersion": "D", "carrosserieVersion": "25", "classeSra": "L", "libVersion": "1.5 dCi 1461cm3 110cv ", "libelleModele": "SCÉNIC III", "marque": "RE", "modele": "81", "produit": "A1", "puissance": "5", "version": "463", "cleCarrosserie": "25MSBK5", "groupeSra": "31", "nbPlace": "5", "datePremiereMiseCirculation": "24062016", "questionBatterie": "N", "electrique": "N", "genre": "VP", "typeVehicule": "MS", "numSerieMoteur": "VF1JZ890H55864144", "valeurANeufSRA": "", "niveauRisqueVol": "0", "protectionConstructeur": "S7", "puissanceDyn": "110", "segmentVeh": "M1", "KtypeId": "5853", "EngineCC": "1461", "Co2": "105", "Cylinders": "4", "CNIT": "M10RENVP472E768" } } ``` --- ## Germany This endpoint allows you to retrieve German vehicle information based on KBA numbers instead of license plates. A KBA number ("Kraftfahrt-Bundesamt") is a unique number which is registered with the Federal Motor Transport Authority. The KBA number can be found on the vehicle registration in boxes 2 and 3 or in the registration certificate Part 1 under 2.1. and 2.2. ## Required attributes Your CarsXE API key. The KBA number in the format HSN/TSN (Herstellerschlüsselnummer / Typschlüsselnummer) ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `DE` for Germany. ```json { "success": true, "input": { "plate": "4000/305", "country": "DE" }, "description": "ALFA GIULIETTA Spider 1.3 [196101 - 196212] (59kW 80hp Otto AR 00508)", "make": "alfa romeo", "model": "GIULIETTA SPIDER", "power_kw": 59, "power_hp": 80, "engine_size": 1281, "fuel_type": "Benzin", "k_type_id": "28097" } ``` --- ## Greece This endpoint allows you to retrieve Greek vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `GR` for Greece. ```json { "success": true, "input": { "plate": "POT1309", "country": "GR" }, "description": "KIA Picanto", "make": "KIA", "model": "Picanto", "make_description": "KIA", "model_description": "Picanto", "variant": "1.0i 12v Lx", "vehicle_type": "EIX", "doors": "5", "engine_band": "7", "engine_size": "999", "registration_date": "01/07/2008", "region": "Dodecanese - Rhodes", } ``` --- ## Hungary This endpoint allows you to retrieve Hungarian vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `HU` for Hungary. ```json showLineNumbers { "success": true, "input": { "plate": "UHW781", "country": "HU" }, "description": "Suzuki GS ", "registration_year": 2006, "make": "Suzuki", "model": "GS", "engine_size": "487", "fuel_type": "BENZIN", "power": "35", "gross_weight": "380", "net_weight": "193", "registration_date": "2022-01-20", "vin": "VTTBK232100104138" } ``` --- ## Iceland This endpoint allows you to retrieve Icelander vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `IS` for Iceland. ```json showLineNumbers { "success": true, "input": { "plate": "HB355", "country": "IS" }, "description": "FIAT UNO", "registration_year": "1984", "make": "FIAT", "model": "UNO", "make_description": "FIAT", "model_description": "UNO", "vehicle_identification_number": "ZFA14600002180232", "registration_date": "20/03/1984", "next_inspection_date": "01/05/1996", "weight": { "gross": "1200", "net": "720", }, "colour": "Ljósblár", "Co2": "", } ``` --- ## India This endpoint allows you to retrieve vehicle information based on Indian license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `IN` for India. ```json showLineNumbers { "success": true, "input": { "plate": "WB24AE4770", "country": "IN" }, "description": "HYUNDAI GRAND I-10 MAGNA 1.2", "registration_year": "2016", "make": "HYUNDAI", "model": "GRAND I-10 MAGNA 1.2", "variant": "1.2 Magna U2 Diesel 1186.0", "engine_size": "1197.0", "number_of_seats": "5", "vin": "MALA851CLGM431431*C", "engine_number": "G4LAGM982033", "fuel_type": "PETROL", "registration_date": "07/06/2016", "owner": "RATHINDRA NATH SINGHA RAY", "fitness": "", "insurance": "2021-05-27", "PUCC": "2021-06-26", "vehicle_type": "MOTOR CAR(LMV)", "location": "Barrackpore " } ``` --- ## Ireland This endpoint allows you to retrieve Irish vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `IE` for Ireland. ```json showLineNumbers { "success": true, "input": { "plate": "04MH8917", "country": "IE" }, "ABI_code": "04007202", "description": "AUDI A6 TDI SE AUTO (1896cc - 4 door ) ", "registration_year": "2004", "make": "AUDI", "model": "A6", "body_style": "Saloon", "transmission": "A", "fuel_type": "D", "number_of_seats": "0", "number_of_doors": "4", "engine_size": "1896", "county": "Meath" } ``` --- ## Isle of Man This endpoint allows you to retrieve vehicle information based on license plates and registration numbers from the Isle of Man. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `IM` for Isle of Man. ```json {{ title: 'IM Response' }} { "success": true, "input": { "plate": "262KMN", "country": "IM" }, "description": "BMW X3 M40i MHEV Auto", "registration_year": "2022", "make": "BMW", "model": "X3 M40i MHEV Auto", "engine_size": "2998", "fuel_type": "Petrol", "version": "", "colour": "", "Co2": "", "registration_date": "", "wheel_plan": "", "taxed": "", "tax_expiry": "", "image_url": "https://api.carsxe.com/pic?image=@Qk1XIFgzIE00MGkgTUhFViBBdXRv" } ``` --- ## Italy This endpoint allows you to retrieve vehicle information based on license plates and registration numbers from the Italy. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `IT` for Italy. ```json showLineNumbers { "success": true, "input": { "plate": "BN071VN", "country": "IT" }, "description": "Peugeot 206", "year": "2000", "make": "Peugeot", "model": "206", "engine_size": "14 cv (da 1119,2 a 1243,6 cc.)", "fuel_type": "Benzina", "immobiliser": "", "number_of_doors": "", "version": "206 1.1 3p. Xr (08-2000)", "ABS": "N", "air_bag": "S", "vin": "", "k_type": "", "power_CV": "", "power_KW": "", "power_fiscal": "", } ``` --- ## Kazakhstan This endpoint allows you to retrieve Kazakhstani vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `KZ` for Kazakhstan. ```json showLineNumbers { "success": true, "input": { "plate": "860AMZ17", "country": "KZ" }, "description": "OPEL VECRTA", "registration_year": "1998", "make": "OPEL", "model": "VECRTA", "make_description": "OPEL", "model_description": "VECRTA", "colour": "БЕЛЫЙ", "engine_size": "1598", "region": "Jetisu Region", } ``` --- ## Latvia This endpoint allows you to retrieve Latvian vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `LV` for Latvia. ```json showLineNumbers { "success": true, "input": { "plate": "GZ3425", "country": "LV" }, "description": "VW BORA", "make": "VW", "model": "BORA", "registration_year": 1998, "variant": "BORA (1J2) (98-13)", "vin": "WVWZZZ1JZXW273563", "engine_size": 2324, "power": 110, "fuel_type": "Benzīns" } ``` --- ## Lithuania This endpoint allows you to retrieve Lithuanian vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `LT` for Lithuania. ```json showLineNumbers { "success": true, "input": { "plate": "NAO075", "country": "LT" }, "description": "VOLKSWAGEN CRAFTER", "registration_year": "2006", "make": "VOLKSWAGEN", "model": "CRAFTER", "make_description": "VOLKSWAGEN", "model_description": "CRAFTER", "engineSize": "2461", "vin": "WV1ZZZ2EZE6017394", "fuel_type": "Diesel", "insurance_company": "ERGO INSURANCE SE LIETUVOS FILIALAS", "insurance_company_number": "ACB 1798038:8192689", "vehicle_type": "LORRY", "body": "Bus", } ``` --- ## Malaysia This endpoint allows you to retrieve Malaysian vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `MY` for Malaysia. ```json showLineNumbers { "success": true, "input": { "plate": "WXX7385", "country": "MY" }, "description": "PERODUA VIVA ELITE EXCLUSIVE EJ VE 4 SP AUTOMATIC", "registration_year": "2013", "make": "PERODUA", "model": "VIVA", "make_description": "PERODUA", "model_description": "VIVA", "seats": "5", "body": "HATCHBACK", "fuel": "", "transmission": "", "vin": "PM2L251S002204297", "Nvin": "", "engine_number": "L58B67A", "engine_size": "989", "drive": "", "insurance": { "insurer": "RHB INSURANCE BERHAD", "cover_type": "Comprehensive", "policy_status": "Active", "policy_number": "D20MPCP3155505KT" }, } ``` --- ## Malta This endpoint allows you to retrieve Maltese vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `MT` for Malta. ```json showLineNumbers { "success": true, "input": { "plate": "JJA127", "country": "MT" }, "description": "PEUGEOT 307", "registration_year": "2004", "make": "PEUGEOT", "model": "307", "make_description": "PEUGEOT", "model_description": "307", "vehicle_identification_number": "VF33HNFUE4S024189", "engine_size": "1587", "power": "109", "fuel_type": "PETROL", "body": "HATCHBACK", "number_of_seats": "4", "engine_number": "10FX4X2148207", "tonnage": "2" } ``` --- ## Mexico This endpoint allows you to retrieve vehicle information based on Mexican license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `MX` for Mexico. ```json showLineNumbers { "success": true, "input": { "plate": "JGS9180", "country": "MX" }, "description": "OLDSMOBILE BRAVADA", "registration_year": "1998", "make": "OLDSMOBILE", "model": "BRAVADA", "class": "CAMIONETA", "type": "MPV", "vin": "1GHDT13W9W2711587", "NCI": "1E5P4N4O", "number_of_doors": "4", "country": "E.U.A.", "version": "SPORT UTILITY 4 PTAS 6 CIL", "engine_size": "4.3L", "cylinders": "V6", "axles": "4X4", "assembly_plant": "MORAINE (T and B), OH", "institution": "NUEVO LAREDO, TAMPS. Y AEROPUERTO INTERNACIONAL QUETZALCOATL, NUEVO LAREDO, TAMPS.", "registration_date": "23/09/2008", "issue_date": "26/09/2008", "last_update": "15/01/2018", "certifiate_of_registration": "", "observations": "" } ``` --- ## New Zealand This endpoint allows you to retrieve vehicle information based on license plates and registration numbers from New Zealand. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `NZ` for New Zealand. ```json showLineNumbers { "success": true, "input": { "plate": "HGE60", "country": "NZ" }, "description": "2008 Toyota Mark X", "registration_year": "2008", "make": "Toyota", "model": "Mark X", "engine_size": 2499, "fuel_type": "Petrol", "body_style": "SEDAN", "vin": "7AT0H64TX13059294", "chassis": "NZVTOYO2008AEIQ", "engine_number": "", "colour": "", "number_of_seats": "0", "assembly": "", "stolen": "N", "estimated_current_odometer": "0", "last_odometer_reading": "", "warrant_of_fitness": "", "plate_type": "", "origin": "", "vehicle_purpose": "", "reason_latest_registration": "", "first_local_registration": "", "imported": "" } ``` --- ## Nigeria This endpoint allows you to retrieve vehicle information based on license plates and registration numbers from Nigeria. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `NG` for Nigeria. ```json showLineNumbers { "success": true, "input": { "plate": "FST962DC", "country": "NG" }, "description": "Nissan Almera", "make": "Nissan", "model": "Almera", "registration_year": 2005, "colour": "Grey", "expiry": "2017-11-23T13:03:59", "vin": "MDHBBAN17Z0501754", "region": "" } ``` --- ## Norway This endpoint allows you to retrieve vehicle information based on license plates and registration numbers from Norway. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `NO` for Norway. ```json showLineNumbers { "success": true, "input": { "plate": "Zt49510", "country": "NO" }, "description": "CAPRON T 68/T 447/T 742", "registration_year": 2014, "make": "CAPRON", "model": "T 68/T 447/T 742", "engine_size": "2287", "make_description": "CAPRON", "model_description": "T 68/T 447/T 742", "indicative_value": "0", "power": 96, "region": "Alta\tFinnmark", "extended_information": { "kjm": "ZT49510", "unr": "ZFA25000002498708", "reg-aar": "2014", "f-g-n": "20140819", "merke": "4140", "modell": "T 68/T 447/T 742", "type": "EG/CF002", "kjtgrp": "316", "motorytelse": "0009600", "slagvolum": "002287", "drivst": "02", "lengde": "0743", "bredde": "233", "dekk-f": "215/70 R 15C", "dekk-b": "215/70 R 15C", "felg-f": "6JX15H2", "felg-b": "6JX15H2", "mili-f": "105", "mili-b": "108", "hast-f": "N", "hast-b": "", "innp-f": "0068", "innp-b": "0068", "spor-f": "1810", "spor-b": "1980", "totvekt": "003495", "egenvekt": "02855", "for-last": "01850", "bak-last": "002000", "eu-variant": "FTS8FE", "eu-versjon": "M4GI0G04CAE017", "bruktimp": "0", "avreg-dato": "00000000", "farge": "HVIT", "aksler": "02", "aksler-drift": "1", "thv-m-brems": "02000", "thv-u-brems": "00750", "tilh-kobling": "0000", "bel-h-feste": "00100", "maks-taklast": "0000", "vogntogvekt": "005495", "ytelsesmaal": "1", "siste-pkk": "00000000", "neste-pkk": "20181031", "reg-dato": "20160406", "reg-mnd": "08", "reg-dag": "19", "co2-utslipp": "0000", "euronorm": "5", "sitteplasser-totalt": "04", "registration": "ZT49510", "Kode": "4140", "Name": "CAPRON" } } ``` --- ## Oman This endpoint allows you to retrieve Omani vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `OM` for Oman. ```json showLineNumbers { "success": true, "input": { "plate": "69385H", "country": "OM" }, "description": "NISSAN SUNNY", "registration_year": 2023, "make": "NISSAN", "model": "SUNNY", "make_description": "NISSAN", "model_description": "SUNNY", "vin": "MDHBN7AD1KG646954", "colour": "WHITE", "engine_number": "HR15-752304G", "insurance_expire": "04/01/2024", "insurance_company": "Oman United Insurance Company" } ``` --- ## Pakistan This endpoint allows you to retrieve Pakistani vehicle information based on license plates and registration numbers. Only 4 wheeler vehicles (cars) are supported in Sindh. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. The district of the vehicle registration number. For the Khyber-Pakhtunkhwa province “KP”, you will need to also provide the district where the vehicle was registered, which can be one of; Abbottabad, Bannu, Battagram, Buner, Charsadda, Chitral, Dera Ismail Khan, Hangu, Haripur, Karak, Kohat, Kohistan, Lakki Marwat, Lower Dir (PATA), Malakand (PATA), Mansehra, Mardan, Nowshera, Peshawar, Shangla, Swabi, Swat, Tank, Tor Ghar or Upper Dir. The letter abbreviation for the state/district of Pakistan. * `GB` (Gilgit-Baltistan) * `KP` (Khyber Pakhtunkhwa) * `PB` (Punjab) * `SD` (Sindh) ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `PK` for Pakistan. Awaiting actual response from Postman ```json showLineNumbers { "success": true, "input": { "plate": "LZR 996", "state": "PB", "district": "PB", "country": "PK" }, "description": "EXCLUSIVE", "make": "CHEVROLET", "model": "EXCLUSIVE", "make_description": "CHEVROLET", "model_description": "EXCLUSIVE", "vechile_identification_number": "KL14M11BE5C108055", "registration_year": 2005, "extended": { "Registration Number": "LZR 996", "Chassis Number": "KL14M11BE5C108055", "Engine Number": "F8CV321778K", "Make Name": "CHEVROLET - EXCLUSIVE-LS", "Registration Date": "22-Jul-2005 12:00 AM", "Model": "2005", "Vehicle Price": "555,000", "Color": "P.BLACK", "Token Tax Paid upto": "LIFETIME", "Owner Name": "MUHAMAMD ZAHID HANIF", "Father Name": "MUHAMMAD HANIF", "Owner City": "LAHORE" } } ``` --- ## Peru This endpoint allows you to retrieve Peruvian vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `PE` for Peru. ```json showLineNumbers { "success": true, "input": { "plate": "B6U175", "country": "PE" }, "description": "RENAULT LOGAN", "registration_year": "2011", "make": "RENAULT", "model": "LOGAN", "make_description": "RENAULT", "model_description": "LOGAN", "deliveryPoint": "JR JORGE CHÁVEZ N 700 URB RAÚL PORRAS BARRENECHEA CARABAYLLO LIMA", "date": "", "vin": "9FBLSRADBCM038432", "owner": "CAMILO PARDAVE ALMERCO (04067094)", "use": "PARTICULAR" } ``` --- ## Poland This endpoint allows you to retrieve Polish vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `PL` for Poland. ```json showLineNumbers { "success": true, "input": { "plate": "EL6574U", "country": "PL" }, "description": "SAAB 9-3", "registration_date": "2002-06-04", "registration_year": 2002, "make": "SAAB", "model": "9-3", "vin": "YS3DD55C622039715", "engine_size": 1985, "power": 110, "fuel_type": "Petrol", "is_plug_in": "False", "steering_wheel_side": "L", "manufacturing_year": 2002, "mileage": 175102, "weight": "1.9", "region": "Łódź" } ``` --- ## Portugal This endpoint allows you to retrieve Portuguese vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `PT` for Portugal. ```json showLineNumbers { "success": true, "input": { "plate": "9027QL", "country": "PT" }, "ABI_code": "", "description": "MITSUBISHI PAJERO DIESEL", "registration_year": "2000", "make": "MITSUBISHI", "model": "PAJERO DIESEL", "engine_size": "3200", "fuel_type": "DIESEL", "immobiliser": "", "number_of_seats": "7", "indicative_value": "0", "driver_side": "", "version": "", "colour": "", "vin": "", "gross_weight": "2810", "net_weight": "2155" } ``` --- ## Romania This endpoint allows you to retrieve Romanian vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `RO` for Romania. ```json showLineNumbers { "success": true, "input": { "plate": "B123ABC", "country": "RO" }, "description": "Renault Clio", "registration_year": "1999", "make": "Renault", "model": "Clio", "make_description": "Renault", "model_description": "Clio", "type": "Autoturism", "vin": "VF1CB0A0F20507251", "civ": "J350228", "variant": "", "weight": "955", "fuel_type": "benzina", "number_of_seats": "5", "power": "43", "engine_size": "1149", "region": "București" } ``` --- ## Russia This endpoint allows you to retrieve Russian vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `RU` for Russia. ```json showLineNumbers { "success": true, "input": { "plate": "T131BO199", "country": "RU" }, "description": "PEHO КЛИО V6 SPORT", "english_description": "RENO CLIO V6 SPORT", "english_make": "RENO", "english_model": "CLIO V6 SPORT", "make": "PEHO", "model": "КЛИО V6 SPORT", "make_description": "PEHO", "model_description": "КЛИО V6 SPORT", "vechile_identification_number": "VF1C*********0222", "registration_year": 2003, "fuel_type": "Бензиновый", "engine": 2946, "power": 254.2, "gross_weight": 1610, "net_weight": 1335, "wheel": "LEFT", "region": "Москва Центральный" } ``` --- ## Singapore This endpoint allows you to retrieve vehicle information based on license plates and registration numbers from Singapore. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `SG` for Singapore. ```json showLineNumbers { "success": true, "input": { "plate": "SJT8954X", "country": "SG" }, "description": "TOYOTA LEXUS IS250 AUTO STD FL", "registration_year": "2009", "make": "TOYOTA", "model": "LEXUS IS250 AUTO STD FL", "tax_expiry": "05 Nov 2018" } ``` --- ## Slovakia This endpoint allows you to retrieve Slovak vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `SK` for Slovakia. ```json showLineNumbers { "success": true, "input": { "plate": "ZA282BX", "country": "SK" }, "description": "ŠKODA OCTAVIA", "registration_year": 2010, "make": "ŠKODA", "model": "OCTAVIA", "engine_size": "1595", "power": "74", "colour": "MODRÁ", "vin": "TMBCK11U4Y2370804", "region": "Žilina" } ``` --- ## Slovenia This endpoint allows you to retrieve Slovenian vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `SI` for Slovenia. ```json showLineNumbers { "success": true, "input": { "plate": "LJ-27-ZIA", "country": "SI" }, "description": "Dacia (R) Dokker Diesel", "make": "Dacia (R)", "model": "Dokker Diesel", "make_description": "Dacia (R)", "model_description": "Dokker Diesel", "variant": "Dokker 1,5 dCi 75 S&S Ambiance", "vin": "UU10SDCH560977087", "region": "Ljubljana" } ``` --- ## South Africa This endpoint allows you to retrieve vehicle information based on license plates and registration numbers from South Africa. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `ZA` for South Africa. ```json showLineNumbers { "success": true, "input": { "plate": "ZXN279GP", "country": "ZA" }, "description": "VOLKSWAGEN POLO VIVO", "registration_year": "2014", "make": "VOLKSWAGEN", "model": "POLO VIVO", "vin": "AAVZZZ6SZBU002000", "region": "Gauteng Province", "extended_information": { "Make": "VOLKSWAGEN", "Model": "POLO VIVO", "Derivative": "POLO VIVO 1.6 5Dr", "Intro date": "2010-03-16 12:00:00 AM", "Discontinued Date": "2014-08-19 12:00:00 AM", "Axle Configuration": "4X2", "Body Type": "H/B", "Cubic capacity": "1598", "Doors": "5", "Front Tyre Size": "175/65 R14", "Kilowatts": "77", "No of cylinders": "4", "Rear Tyre Size": "175/65 R14", "Tare": "1049", "Wheelbase": "2462", "CO2": "156", "Cooling": "W", "Cylinder Configuration": "I", "Drive": "F", "Engine Cycle": "4", "ETC / ORT Flag": "A2", "Front No Tyres": "2", "Fuel Tank Size": "45", "FuelType": "P", "Height": "1467", "Length": "3916", "Manual Or Auto": "M", "Model Master": "POLO VIVO", "No of Gears": "5", "Origin": "L", "Rear No Tyres": "2", "Seats": "5", "Use": "GEN", "Width": "1650" } } ``` --- ## Spain This endpoint allows you to retrieve vehicle information based on Spanish license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `ES` for Spain. ## Optional attributes Optional. Set `require_vin=true` to always include a VIN. **Additional charges apply:** when `require_vin=true`, this request is billed **2×** and usage counts **2×**. ```json showLineNumbers { "success": true, "input": { "plate": "5428GXS", "country": "ES" }, "description": "RENAULT MEGANE 3", "registration_year": "2010", "make": "RENAULT", "model": "MEGANE 3", "engine_size": "1.5", "vin": "VF1BZ0A0543644167", "registration_date": "04/07/2010", "variation": "AUTHENTIQUE 1500 DCI 85 CV 5P", "seats": "0", "variant_type": "TURISMO", "vehicle_type": "Car", "fuel_type": "", "indicative_price": "17430", "number_of_doors": "0", "all_terrain": "N", "k_type": "", "stolen": "" } ``` --- ## Sri Lanka This endpoint allows you to retrieve vehicle information based on Sri Lankan license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `LK` for Sri Lanka. ```json showLineNumbers { "success": true, "input": { "plate": "CAR-4436", "country": "LK" }, "description": "RENAULT KWID", "make": "RENAULT", "model": "KWID", "make_description": "RENAULT", "model_description": "KWID", "engine_size": "B4AA400E078454", "registration_year": "2016", "owner": "PAN ASIA BANKING CORPORATION PLC", "vehicle_class": "MOTOR CAR", "conditions": "" } ``` --- ## Taiwan This endpoint allows you to retrieve Taiwanese vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `TW` for Taiwan. ```json showLineNumbers { "success": true, "input": { "plate": "MWN-0076", "country": "TW" }, "description": "光陽", "registration_year": "2018", "make": "光陽", "model": "", "make_description": "光陽", "model_description": "", "engine_size": "149", "manufacture_date": "01/08/2018", "license_issue_date": "05/09/2018", "engine_cycle": "四行程", "inspection_status": null, "test_records": [ { "LicensePlate": "MWN-0076", "InspectionType": "定期檢驗", "HC_ppm": "102", "CO_pct": "0.1", "CO2_pct": "14.8", "SerialNo": "113080749", "Result": "合格", "TestDate": "20240822", "TestTime": "10:47:31", "LabelYear": "113" }, { "LicensePlate": "MWN-0076", "InspectionType": "定期檢驗", "HC_ppm": "315", "CO_pct": "0.1", "CO2_pct": "14.9", "SerialNo": "113070622", "Result": "合格", "TestDate": "20240718", "TestTime": "17:03:57", "LabelYear": "112" } ] } ``` --- ## Sweden This endpoint allows you to retrieve vehicle information based on Swedish license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `SE` for Sweden. ```json showLineNumbers { "success": true, "input": { "plate": "SXM788", "country": "SE" }, "ABI_code": "", "description": "Ford Focus 1.8", "registration_year": "2006", "make": "Ford", "model": "Focus 1.8", "engine_size": "1798 cm", "fuel_type": "Bensin", "make_description": "Ford", "model_description": "Focus 1.8", "immobiliser": "", "number_of_seats": "5", "driver_side": "", "body_style": "Halvkombi", "colour": "Grön", "registration_date": "2006", "vechile_identification_number": "WF05XXGCD56B24845", "transmission": "Manuell", "Co2": "167 g/km" } ``` --- ## Switzerland This endpoint allows you to retrieve vehicle information based on Swiss license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `CH` for Switzerland. ```json showLineNumbers { "success": true, "input": { "plate": "AG364769", "country": "CH" }, "description": "Honda CR-Z", "variant": "CR-Z 1.5i Hybrid GT Coupé - 3 doors - 114 HP - Manuell - 35100 Fr.", "registration_year": 2012, "registration_month": 9, "make": "Honda", "model": "CR-Z", "make_description": "Honda", "model_description": "CR-Z", "transmission": "Manual", "engine_size": "1497", "power": "84", "fuel_type": "Benzin / Elektrisch", "doors": "0", "body": "Limousine", "drive": "Vorderrad", "engine_type": "LEA1", "type_certificate": "1HA341", "euro_type_code": "e11*2007/46-79/2009*0100", "Co2": "117", "region": "Aargau" } ``` --- ## The Netherlands This endpoint allows you to retrieve vehicle information based on license plates and registration numbers from The Netherlands. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `NL` for The Netherlands. ```json showLineNumbers { "success": true, "input": { "plate": "J873GV", "country": "NL" }, "ABI_code": "", "description": "OPEL CORSA", "registration_year": 2020, "make": "OPEL", "model": "CORSA", "engine_size": "", "fuel_type": "Elektriciteit", "immobiliser": "", "number_of_seats": "5", "driver_side": "", "catalog_price": "", "colour": "GRIJS", "extended_information": { "kenteken": "J873GV", "voertuigsoort": "Personenauto", "merk": "OPEL", "handelsbenaming": "CORSA", "vervaldatum_apk": "20240731", "datum_tenaamstelling": "20200731", "inrichting": "hatchback", "aantal_zitplaatsen": "5", "eerste_kleur": "GRIJS", "tweede_kleur": "Niet geregistreerd", "massa_ledig_voertuig": "1430", "toegestane_maximum_massa_voertuig": "1920", "massa_rijklaar": "1530", "datum_eerste_toelating": "20200731", "datum_eerste_tenaamstelling_in_nederland": "20200731", "wacht_op_keuren": "Geen verstrekking in Open Data", "catalogusprijs": "38943", "wam_verzekerd": "Ja", "maximale_constructiesnelheid": "150", "aantal_deuren": "4", "aantal_wielen": "4", "afstand_hart_koppeling_tot_achterzijde_voertuig": "0", "afstand_voorzijde_voertuig_tot_hart_koppeling": "0", "lengte": "406", "breedte": "175", "europese_voertuigcategorie": "M1", "technische_max_massa_voertuig": "1920", "type": "U", "typegoedkeuringsnummer": "e2*2007/46*0639*09", "variant": "H", "uitvoering": "ZKXZ-X0A000", "volgnummer_wijziging_eu_typegoedkeuring": "0", "vermogen_massarijklaar": "0.04", "wielbasis": "254", "export_indicator": "Nee", "openstaande_terugroepactie_indicator": "Nee", "taxi_indicator": "Nee", "maximum_massa_samenstelling": "1920", "aantal_rolstoelplaatsen": "0", "maximum_ondersteunende_snelheid": "0.00", "jaar_laatste_registratie_tellerstand": "2023", "tellerstandoordeel": "Logisch", "code_toelichting_tellerstandoordeel": "00", "tenaamstellen_mogelijk": "Ja", "vervaldatum_apk_dt": "2024-07-31T00:00:00", "datum_tenaamstelling_dt": "2020-07-31T00:00:00", "datum_eerste_toelating_dt": "2020-07-31T00:00:00", "datum_eerste_tenaamstelling_in_nederland_dt": "2020-07-31T00:00:00", "hoogte_voertuig": "143", "api_gekentekende_voertuigen_assen": "", "api_gekentekende_voertuigen_brandstof": "", "api_gekentekende_voertuigen_carrosserie": "", "api_gekentekende_voertuigen_carrosserie_specifiek": "", "api_gekentekende_voertuigen_voertuigklasse": "", "Axes": [ { "kenteken": "J873GV", "as_nummer": "1", "aantal_assen": "2", "plaatscode_as": "V", "spoorbreedte": "149", "wettelijk_toegestane_maximum_aslast": "965", "technisch_toegestane_maximum_aslast": "965" }, { "kenteken": "J873GV", "as_nummer": "2", "aantal_assen": "2", "plaatscode_as": "A", "spoorbreedte": "149", "wettelijk_toegestane_maximum_aslast": "960", "technisch_toegestane_maximum_aslast": "960" } ], "Fuel": [ { "kenteken": "J873GV", "brandstof_volgnummer": "1", "brandstof_omschrijving": "Elektriciteit", "geluidsniveau_rijdend": "67", "emissiecode_omschrijving": "Z", "milieuklasse_eg_goedkeuring_licht": "715/2007*2018/1832AX", "nominaal_continu_maximumvermogen": "57.00", "elektrisch_verbruik_enkel_elektrisch_wltp": "165.00", "actie_radius_enkel_elektrisch_wltp": "335", "actie_radius_enkel_elektrisch_stad_wltp": "412", "max_vermogen_60_minuten": "57.00", "netto_max_vermogen_elektrisch": "100.00", "uitlaatemissieniveau": "AX" } ], "Body": [ { "kenteken": "J873GV", "carrosserie_volgnummer": "1", "carrosserietype": "AB", "type_carrosserie_europese_omschrijving": "Hatchback" } ], "SpecificBody": [], "VehicleClass": [] } } ``` --- ## Tunisia This endpoint allows you to retrieve vehicle information based on license plates and registration numbers from Tunisia. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `TN` for Tunisia. ```json showLineNumbers { "success": true, "input": { "plate": "818TU223", "country": "TN" }, "description": "Kia PICANTO", "registration_year": "2017", "registration_date": "01-01-2017", "make": "Kia", "model": "PICANTO", "make_description": "Kia", "model_description": "PICANTO", "fuel_type": "Essence", "variant": "III (JA) ( 03-2017 > )", "engine": "1.0 67ch ( 03-2017 > ---- ) ", "type": "VOITURE PARTICULIERE", "fiscal_power": "0" } ``` --- ## Ukraine This endpoint allows you to retrieve vehicle information based on license plates and registration numbers from Ukraine. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `UA` for Ukraine. ```json showLineNumbers { "success": true, "input": { "plate": "СА5510ІН", "country": "UA" }, "description": "TOYOTA LAND CRUISER PRADO", "registration_year": "2013", "make": "TOYOTA", "model": "LAND CRUISER PRADO", "engine_size": "2982", "fuel_type": "ДИЗЕЛЬНЕ ПАЛИВО", "make_description": "TOYOTA", "model_description": "LAND CRUISER PRADO", "body_style": "УНІВЕРСАЛ", "colour": "БІЛИЙ", "registration_date": "2013", "weight": { "net": "2090", "gross": "2600" }, "validity": { "start": "", "end": "" }, "address": "ПРИДНІПРОВСЬКИЙ", "vin": "JTEBH3FJ80K098469" } ``` --- ## United Arab Emirates This endpoint allows you to retrieve vehicle information based on license plates and registration numbers from the United Arab Emirates. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `AE` for United Arab Emirates. ```json showLineNumbers { "success": true, "input": { "plate": "F33333", "country": "AE" }, "description": "TESLA MODEL S", "make": "TESLA", "model": "MODEL S", "make_description": "TESLA", "model_description": "MODEL S", } ``` --- ## United Kingdom This endpoint allows you to retrieve vehicle information based on license plates and registration numbers from the United Kingdom. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `GB` for the United Kingdom. ```json showLineNumbers { "success": true, "input": { "plate": "YY07XHH", "country": "GB" }, "ABICode": "", "description": "PEUGEOT 307 X-LINE", "registration_year": "2007", "make": "PEUGEOT", "model": "307 X-LINE", "engine_size": "1360", "fuel_type": "PETROL", "immobiliser": "", "number_of_seats": "", "driver_side": "", "transmission": "", "number_of_doors": "", "vehicle_insurance_group": "", "vehicle_insurance_group_out_of": "", "vin": "VF33CKFUC84922414", "engine_code": "", "engine_number": "FE040407358", "body_style": "Motorbike", "colour": "SILVER", "registration_date": "" } ``` --- ## Australia This endpoint allows you to retrieve Australian vehicle information based on license plates and registration numbers. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `AU` for Australia. The letter abbreviation for the states and territories of Australia. * `ACT` (Canberra), * `NSW` (New South Wales), * `NT` (Northern Territory), * `QLD` (Queensland incl. North Queensland), * `SA` (South Australia), * `TAS` (Tasmania), * `VIC` (Victoria), * `WA` (Western Australia) ```json showLineNumbers { "success": true, "input": { "plate": "CB78MH", "state": "NT", "country": "AU" }, "description": "BLACK TOYOTA FJCRUISER 2012", "registration_year": 2012, "make": "TOYOTA", "model": "FJCRUISER", "body_style": "", "colour": "BLACK", "vin": "", "engine": "", "engine_number": "", "net_weight": "", "stolen": "", "goods_carrying_vehicle": "", "registration_serial_number": "", "compliance_date": "", "insurance_expiry": "", "insurance_company": "", "purpose": "", "expiry": "", "extended_information": {}, "registration_plate": { "can_register": true, "plate": "CB78MH", "can_inspect": true, "insurance_class": "A", "insurance_class_desc": "Vehicle not exceeding 4.5 tonne GVM or bus used for private or business.", "date_inspection": 1493510400000, "plate_type": "C", "class_code": "", "can_remind": true, "status": "REGISTERED", "date_expired": 1493510400000 } } ``` --- #### Canberra, Australia This endpoint allows you to retrieve information based on license plates and registration numbers for vehicles in the Australian Capital Territory. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `AU` for Australia. The letter abbreviation for the states and territories of Australia. * `ACT` (Canberra), * `NSW` (New South Wales), * `NT` (Northern Territory), * `QLD` (Queensland incl. North Queensland), * `SA` (South Australia), * `TAS` (Tasmania), * `VIC` (Victoria), * `WA` (Western Australia) ```json showLineNumbers { "success": true, "input": { "plate": "Yyf447", "state": "ACT", "country": "AU" }, "description": "Maroon FORD ED FALCON", "registration_year": 1994, "make": "FORD", "model": "FORD", "body_style": "", "colour": "Maroon", "vin": "", "engine": "", "engine_number": "3915", "net_weight": "1514", "stolen": "N", "goods_carrying_vehicle": "", "registration_serial_number": "", "compliance_date": "", "insurance_expiry": "", "insurance_company": "AAMI", "purpose": "", "expiry": "20/01/2017", "extended_information": {}, "registration_plate": {} } ``` --- #### New South Wales, Australia This endpoint allows you to retrieve information based on license plates and registration numbers for vehicles in the Australian state of New South Wales. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `AU` for Australia. The letter abbreviation for the states and territories of Australia. * `ACT` (Canberra), * `NSW` (New South Wales), * `NT` (Northern Territory), * `QLD` (Queensland incl. North Queensland), * `SA` (South Australia), * `TAS` (Tasmania), * `VIC` (Victoria), * `WA` (Western Australia) ```json showLineNumbers { "success": true, "input": { "plate": "BEW76P", "state": "NSW", "country": "AU" }, "description": "FORD Fiesta 5D Hatchback LX", "registration_year": "2007", "make": "FORD", "model": "Fiesta 5D Hatchback", "body_style": "Lx 5-Speed Manual", "colour": "", "vin": "FORFIELXWQ16FHS2007A", "engine": "1.6 litre, 4 cyl, WQ", "engine_number": "", "net_weight": "", "stolen": "", "goods_carrying_vehicle": "", "registration_serial_number": "", "compliance_date": "", "insurance_expiry": "", "insurance_company": "", "purpose": "", "expiry": "", "extended_information": { "nvic": "FHS07A", "code": "FORFIELXWQ16FHS2007A", "year": "2007", "make": "FORD", "model": "Fiesta 5D Hatchback", "bodyType": "Lx 5-Speed Manual", "engine": { "capacity": { "value": "1.6", "unit": "L" }, "cylinders": "4", "description": "1.6 litre, 4 cyl, WQ" }, "transmissionType": "Manual", "driveType": "5D HATCHBACK", "family": "FIESTA", "variant": "LX", "series": "WQ" }, "registration_plate": {} } ``` --- #### Northern Territory, Australia This endpoint allows you to retrieve information based on license plates and registration numbers for vehicles in the Australian territory of Northern Territory. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `AU` for Australia. The letter abbreviation for the states and territories of Australia. * `ACT` (Canberra), * `NSW` (New South Wales), * `NT` (Northern Territory), * `QLD` (Queensland incl. North Queensland), * `SA` (South Australia), * `TAS` (Tasmania), * `VIC` (Victoria), * `WA` (Western Australia) ```json showLineNumbers { "success": true, "input": { "plate": "CB78MH", "state": "NT", "country": "AU" }, "description": "BLACK TOYOTA FJCRUISER 2012", "registration_year": 2012, "make": "TOYOTA", "model": "FJCRUISER", "body_style": "", "colour": "BLACK", "vin": "", "engine": "", "engine_number": "", "net_weight": "", "stolen": "", "goods_carrying_vehicle": "", "registration_serial_number": "", "compliance_date": "", "insurance_expiry": "", "insurance_company": "", "purpose": "", "expiry": "", "extended_information": {}, "registration_plate": { "can_register": true, "plate": "CB78MH", "can_inspect": true, "insurance_class": "A", "insurance_class_desc": "Vehicle not exceeding 4.5 tonne GVM or bus used for private or business.", "date_inspection": 1493510400000, "plate_type": "C", "class_code": "", "can_remind": true, "status": "REGISTERED", "date_expired": 1493510400000 } } ``` --- #### Queensland, Australia This endpoint allows you to retrieve information based on license plates and registration numbers for vehicles in the Australian state of Queensland including North Queensland. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `AU` for Australia. The letter abbreviation for the states and territories of Australia. * `ACT` (Canberra), * `NSW` (New South Wales), * `NT` (Northern Territory), * `QLD` (Queensland incl. North Queensland), * `SA` (South Australia), * `TAS` (Tasmania), * `VIC` (Victoria), * `WA` (Western Australia) ```json showLineNumbers { "success": true, "input": { "plate": "949RWP", "state": "QLD", "country": "AU" }, "description": "2011 HYUNDAI ACCENT HATCHBACK", "registration_year": "2011", "make": "HYUNDAI", "model": "ACCENT HATCHBACK", "body_style": "", "colour": "", "vin": "KMHCT51DLCU021130", "engine": "", "engine_number": "", "net_weight": "", "stolen": "", "goods_carrying_vehicle": "", "registration_serial_number": "", "compliance_date": "", "insurance_expiry": "01/11/2019", "insurance_company": "", "purpose": "PRIVATE", "expiry": "", "extended_information": {}, "registration_plate": {} } ``` --- #### South Australia, Australia This endpoint allows you to retrieve information based on license plates and registration numbers for vehicles in the Australian state of South Australia. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `AU` for Australia. The letter abbreviation for the states and territories of Australia. * `ACT` (Canberra), * `NSW` (New South Wales), * `NT` (Northern Territory), * `QLD` (Queensland incl. North Queensland), * `SA` (South Australia), * `TAS` (Tasmania), * `VIC` (Victoria), * `WA` (Western Australia) ```json showLineNumbers { "success": true, "input": { "plate": "YY819H", "state": "SA", "country": "AU" }, "description": "WHITE MITSUBISHI STATION WAGON", "registration_year": "2015", "make": "MITSUBISHI", "model": "Pajero", "body_style": "STATION WAGON", "colour": "WHITE", "vin": "JMFLYV98WGJ003504", "engine": "", "engine_number": "", "net_weight": "", "stolen": "", "goods_carrying_vehicle": "", "registration_serial_number": "", "compliance_date": "", "insurance_expiry": "", "insurance_company": "AAMI", "purpose": "", "expiry": "05/09/2022", "extended_information": {}, "registration_plate": {} } ``` --- #### Tasmania, Australia This endpoint allows you to retrieve information based on license plates and registration numbers for vehicles in the Australian state of Tasmania. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `AU` for Australia. The letter abbreviation for the states and territories of Australia. * `ACT` (Canberra), * `NSW` (New South Wales), * `NT` (Northern Territory), * `QLD` (Queensland incl. North Queensland), * `SA` (South Australia), * `TAS` (Tasmania), * `VIC` (Victoria), * `WA` (Western Australia) ```json showLineNumbers { "success": true, "input": { "plate": "E09FK", "state": "TAS", "country": "AU" }, "description": "VOLKSWAGEN Amarok Dual Cab Utility TDI420 HIGHLINE (4x4)", "registration_year": "2015", "make": "VOLKSWAGEN", "model": "Amarok Dual Cab Utility", "body_style": "Tdi420 Highline (4X4) 8-Speed Auto", "colour": "", "vin": "VWNAMAH21A20QXQ2015A", "engine": "2.0 litre, 4 cyl diesel turbo, 2H MY14", "engine_number": "", "net_weight": "", "stolen": "", "goods_carrying_vehicle": "", "registration_serial_number": "", "compliance_date": "", "insurance_expiry": "", "insurance_company": "", "purpose": "", "expiry": "", "extended_information": { "nvic": "QXQ15A", "driveType": "DUAL CAB UTILITY", "family": "AMAROK", "variant": "TDI420 HIGHLINE (4x4)", "model": "Amarok Dual Cab Utility", "colour": "", "code": "VWNAMAH21A20QXQ2015A", "make": "VOLKSWAGEN", "fuelType": "", "capacityValue": "2.0", "series": "2H MY14", "engineDescription": "2.0 litre, 4 cyl diesel turbo, 2H MY14", "bodyDescription": "", "bodyType": "Tdi420 Highline (4X4) 8-Speed Auto", "cylinders": "DT4", "year": "2015", "capacityUnit": "L", "transmissionType": "Auto" }, "registration_plate": {} } ``` --- #### Victoria, Australia This endpoint allows you to retrieve information based on license plates and registration numbers for vehicles in the Australian state of Victoria. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `AU` for Australia. The letter abbreviation for the states and territories of Australia. * `ACT` (Canberra), * `NSW` (New South Wales), * `NT` (Northern Territory), * `QLD` (Queensland incl. North Queensland), * `SA` (South Australia), * `TAS` (Tasmania), * `VIC` (Victoria), * `WA` (Western Australia) ```json showLineNumbers { "success": true, "input": { "plate": "ZZA271", "state": "VIC", "country": "AU" }, "description": "TOYOTA Hiace", "registration_year": "2014", "make": "TOYOTA", "model": "Hiace", "body_style": "", "colour": "WHITE", "vin": "JTFHT02P700145015", "engine": "1KD2418294", "engine_number": "", "net_weight": "", "stolen": "", "goods_carrying_vehicle": "Yes", "registration_serial_number": "7168554", "compliance_date": "07/2014", "insurance_expiry": "", "insurance_company": "", "purpose": "", "expiry": "08/08/2023", "extended_information": {}, "registration_plate": {} } ``` --- #### Western Australia, Australia This endpoint allows you to retrieve information based on license plates and registration numbers for vehicles in the Australian state of Western Australia. ## Required attributes Your CarsXE API key. The vehicle registration number or license plate number. ISO 3166-1 alpha-2 codes are two-letter [country codes](https://www.iban.com/country-codes). `AU` for Australia. The letter abbreviation for the states and territories of Australia. * `ACT` (Canberra), * `NSW` (New South Wales), * `NT` (Northern Territory), * `QLD` (Queensland incl. North Queensland), * `SA` (South Australia), * `TAS` (Tasmania), * `VIC` (Victoria), * `WA` (Western Australia) ```json showLineNumbers { "success": true, "input": { "plate": "ZM06WA", "state": "WA", "country": "AU" }, "description": "MAZDA Mazda6 4D Sedan CLASSIC", "registration_year": "2008", "make": "MAZDA", "model": "Mazda6 4D Sedan", "body_style": "Classic 6-Speed Manual", "colour": "", "vin": "MAZ--6CLGH25HV92008B", "engine": "2.5 litre, 4 cyl, GH", "engine_number": "", "net_weight": "", "stolen": "", "goods_carrying_vehicle": "", "registration_serial_number": "", "compliance_date": "", "insurance_expiry": "", "insurance_company": "", "purpose": "", "expiry": "16/12/2017", "extended_information": { "nvic": "HV908B", "driveType": "4D SEDAN", "family": "MAZDA6", "variant": "CLASSIC", "model": "Mazda6 4D Sedan", "colour": "", "code": "MAZ--6CLGH25HV92008B", "make": "MAZDA", "fuelType": "", "capacityValue": "2.5", "series": "GH", "engineDescription": "2.5 litre, 4 cyl, GH", "bodyDescription": "", "bodyType": "Classic 6-Speed Manual", "cylinders": "4", "year": "2008", "capacityUnit": "L", "transmissionType": "Manual" }, "registration_plate": {} } ``` --- # Versioning & Migration > How CarsXE versions its API, what changed between v1 and v2, and a step-by-step guide for migrating the Plate Decoder and Market Value endpoints. Source: https://carsxe.com/docs/versioning CarsXE versions the API **in the URL path**, so a version you build against keeps behaving the way it did when you shipped. This page explains the versioning rules, what's new in v2, and exactly what to change when you migrate. --- ## How versioning works There are three URL patterns, reflecting when each endpoint family was introduced: | Pattern | Example | What lives there | | --- | --- | --- | | Root paths | `https://api.carsxe.com/specs` | The original v1 APIs (Specifications, Market Value, Plate Decoder, History, Images, and others). | | `/v1/...` | `https://api.carsxe.com/v1/recalls-batch/submit` | Newer additions to the v1 generation (Recalls, Recalls Batch, Lien & Theft, VIN OCR, Year Make Model, International VIN Decoder). | | `/v2/...` | `https://api.carsxe.com/v2/platedecoder` | The current generation. New capabilities ship here. | A few things you can rely on: - **Versions run side by side.** Shipping v2 does not turn off v1. There is currently no retirement date for any v1 endpoint; if one is ever scheduled, it will be announced well in advance. - **Responses can gain fields.** Within a version we may add new fields to responses as data coverage improves. Build clients that ignore unknown fields — never fail on properties you don't recognize. - **Breaking changes get a new path.** Changed parameter semantics or response shapes only ever ship under a new version prefix. Migrating is opt-in and per-endpoint. You can move Plate Decoder to v2 today and leave Market Value on v1 — there is no flag day. --- ## OpenAPI specification A machine-readable OpenAPI 3.1 spec covering every public endpoint (v1 and v2) is available at: Import it into Postman, Insomnia, or your code generator of choice to get typed clients and a request collection without writing anything by hand. --- ## What's new in v2 ### Plate Decoder [v1 docs](https://carsxe.com/docs/v1/plate-decoder) · [v2 docs](https://carsxe.com/docs/v2/plate-decoder) | | v1 | v2 | | --- | --- | --- | | URL | `GET /platedecoder` | `GET /v2/platedecoder` | | Required params | `plate`, `state` (US) | `plate`, `country` | | Region params | `state`, `country` | `state` where applicable, plus country-specific params (e.g. `district` for Pakistan) | | Coverage | Core countries | Expanded country coverage, documented per country with examples | | VIN guarantee | — | `require_vin=true` (Spain) always returns a VIN. **Billed 2× and counts 2× toward usage.** | | Response shape | Flat fields (`Description`, `CarMake`, `CarModel`, …) | Restructured per-country response — see the per-country examples in the v2 docs | **Migration steps:** 1. Change the URL from `/platedecoder` to `/v2/platedecoder`. 2. Always pass `country` (ISO 3166-1 alpha-2, e.g. `US`, `ES`, `PK`). In v1, `country` was optional and defaulted to US behavior. 3. Update your response parsing — field names and nesting differ. Compare your target countries' example responses on the [v2 page](https://carsxe.com/docs/v2/plate-decoder) against what you parse today. 4. If you need a VIN for Spanish plates, add `require_vin=true` and account for the 2× billing. ### Market Value [v1 docs](https://carsxe.com/docs/v1/market-value) · [v2 docs](https://carsxe.com/docs/v2/market-value) | | v1 | v2 | | --- | --- | --- | | URL | `GET /marketvalue` | `GET /v2/marketvalue` | | Required params | `vin` | `vin` | | Optional params | `format` | `state`, `mileage`, `condition` (`excellent`, `clean`, `average`, `rough`) | | Valuation model | Single retail/trade-in figures | Wholesale, retail, and trade-in breakdowns per condition tier, with base, mileage, regional, and add/deduct adjustments | | Response shape | `retail`, `tradeIn`, `loanValue`, `msrp`, `auctionValues`, … | `whole_*`, `retail_*`, `trade_in_*` objects per condition — see [response attributes](https://carsxe.com/docs/v2/market-value) | **Migration steps:** 1. Change the URL from `/marketvalue` to `/v2/marketvalue`. 2. Pass `mileage` and `condition` when you have them — v2 valuations adjust for both, which is the main accuracy win. 3. Map your fields: where v1 gave a single `retail` figure, v2 gives `retail_xclean` / `retail_clean` / `retail_avg` / `retail_rough` objects. Pick the tier matching the vehicle's condition (or use `condition` to let the API adjust). 4. Drop the `format` parameter — v2 responds in JSON only. --- ## Error-handling differences v2 endpoints use precise HTTP status codes for every failure mode. A few **legacy v1 routes** return `500` for what are really validation errors (for example, missing `make`/`model` on the Images API), so v1 clients should check the `success` field in the body rather than relying on status codes alone. See the [error reference](https://carsxe.com/docs/errors) for the complete catalog. Quota errors (`429`) behave identically on both versions and include the `usage` object — see [Rate Limits & Quotas](https://carsxe.com/docs/rate-limits). --- ## Migration checklist - [ ] Swap URLs to the `/v2/` paths for the endpoints you're migrating - [ ] Pass `country` on every Plate Decoder request - [ ] Update response parsing against the v2 example responses for your markets - [ ] Send `mileage` and `condition` to Market Value where available - [ ] Make response parsing tolerant of unknown fields - [ ] Re-run your integration tests against the v2 endpoints before switching production traffic