You have U.S. license plates and need VINs and vehicle details back in your C# app this week. By the end of this guide, you’ll call the US License Plate to VIN API from a .NET HttpClient, resolve the correct “state” code via a dedicated endpoint, extract the VIN and rich specs from a license plate, and optionally pull glass part candidates by VIN. You’ll also see how to hit the same API from AI agents via Zyla’s MCP endpoint.
What this API does and when to use it
The US License Plate to VIN API converts a U.S. license plate plus state into the associated VIN and returns additional decoded vehicle information such as make, model, year, body class, engine specs, and more. There’s also a glass endpoint to retrieve AI-generated candidate references for OEM and aftermarket glass part numbers by VIN and part type.
Typical use cases include:
- Dealership and marketplace integrations: resolve a listing’s plate to the actual VIN and specs.
- Insurance and fleet apps: auto-populate vehicle details from captured plates.
- Maintenance and parts: look up windshield and other glass candidates by VIN for quoting.
Getting started on Zyla API Hub
Zyla API Hub offers a single account, one API key, and a subscription + quota model across more than 10,000 public APIs. For this API, there’s no Free Plan. The first API typically includes a 7-day trial or 50 requests—check the API page for current access options and pricing. To begin:
- Open the US License Plate to VIN API page on Zyla.
- Click Subscribe or Start Free Trial when available.
- Get your API key from your dashboard.
All requests use the HTTP header Authorization: Bearer YOUR_API_KEY. If you don’t have an account yet, you can quickly Register and get your key.
Endpoints you’ll call
Below are the available endpoints documented for this integration. Only use the parameters shown; do not add extras.
1) Get States
Method: GET
URL: https://zylalabs.com/api/2204/us-license-plate-to-vin-api/2045/get-states
What it does: returns all supported states and their required api_code values. Use this first to ensure you’re passing a valid state code into subsequent requests.
Parameters: none documented. Send the Authorization header only.
Official curl (copy-paste as is):
curl -s -X GET "https://zylalabs.com/api/2204/us-license-plate-to-vin-api/2045/get-states" \
-H "Authorization: Bearer YOUR_API_KEY"
Official JSON (shape excerpt provided by the listing):
{"AL":{"api_code":"alabama","name":"Alabama"},"AK":{"api_code":"alaska","name":"Alaska"},"AZ":{"api_code":"arizona","name":"Arizona"},"AR":{"api_code":"arkansas","name":"Arkansas"},"CA":{"api_code":"california","name":"California"},"CO":{"api_code":"colorado","name":"Colorado"},"CT":{"api_code":"connecticut","name":"Connecticut"},"DE":{"api_code":"delaware","name":"Delaware"},"DC":{"api_code":"district-of-columbia","name":"District Of Columbia"},"FL":{"api_code":"florida","name":"Florida"},"GA":{"api_code":"georgia","name":"Georgia"},"HI":{"api_code":"hawaii","name":"Hawaii"},"ID":{"api_code":"idaho","name":"Idaho"},"IL":{"api_code":"illinois","name":"Illinois"},"IN":{"api_code":"indiana","name":"Indiana"},"IA":{"api_code":"iowa","name":"Iowa"},"KS":{"api_code":"kansas","name":"Kansas"},"KY":{"api_code":"kentucky","name":"Kentucky"},"LA":{"api_code":"louisiana","name":"Louisiana"},"ME":{"api_code":"maine","name":"Maine"},"MD":{"api_code":"maryland","name":"Maryland"},"MA":{"api_code":"massachusetts","name":"Massachusetts"},"MI":{"api_code":"michigan","name":"Michigan"},"MN":{"api_code":"minnesota","name":"Minnesota"},"MS":{"api_code":"mississippi","name":"Mississippi"},"MO":{"api_code":"missouri","name":"Missouri"},"MT":{"api_code":"montana","name":"Montana"},"NE":{"api_code":"nebraska","name":"Nebraska"},"NV":{"api_code":"nevada","name":"Nevada"},"NH":{"api_code":"new-hampshire","name":"New Hampshire"},"NJ":{"api_code":"new-jersey","name":"New Jersey"},"NM":{"api_code":"new-mexico","name":"New Mexico"},"NY":{"api_code":"new-york","name":"New York"},"NC":{"api_code":"north-carolina","name":"North Carolina"},"ND":{"api_code":"north-dakota","name":"North Dakota"},"OH":{"api_code":"ohio","name":"Ohio"},"OK":{"api_code":"oklahoma","name":"Oklahoma"},"OR":{"api_code":"oregon","name":"Oregon"},"PA":{"api_code":"pennsylvania","name":"Pennsylvania"},"RI":{"api_code":"rhode-island","name":"Rhode Island"},"SC":{"api_code":"south-carolina","name":"South Carolina"},"SD":{"api_code":"south-dakota","name":"South Dakota"},"TN":{"api_code":"tennessee","name":"Tennessee"},"TX":{"api_code":"texas","name":"Texas"},"UT":{"api_code":"utah","name":"Utah"},"VT":{"api_code":"vermont","name":"Vermont"},"VA":{"api_code":"virginia","name":"Virginia"},"WA":{"api_code":"washington","name":"Washington"},"WV":{"api_code":"west-virginia","name":"West Virginia"},"WI":{"api_code":"wisconsin","name":"Wisconsin"},"WY":{"api_code":"wyoming","name":"Wyoming"},"AS":{"api_code":"american-samoa",…
What you’ll use: the values in the “api_code” field, such as “california”, “new-york”, etc. These strings must be supplied to the Get VIN endpoint’s state parameter. The keys like “CA” are abbreviations; your code should rely on “api_code”.
2) Get VIN
Method: GET
URL: https://zylalabs.com/api/2204/us-license-plate-to-vin-api/2047/get-vin
What it does: given a license plate and a state api_code, it returns the decoded VIN information, including make, model year, transmission style, engine specs, drive type, and more.
Parameters (query):
- license_plate (string, required): e.g., 8UZS701
- state (string, required): e.g., california
Example request (values shown are from the listing’s example):
GET https://zylalabs.com/api/2204/us-license-plate-to-vin-api/2047/get-vin?license_plate=8UZS701&state=california
3) Glass
Method: GET
URL: https://zylalabs.com/api/2204/us-license-plate-to-vin-api/26877/glass
What it does: returns detailed vehicle glass candidate information by VIN and part type, including OEM and aftermarket part numbers, specs, features, and a disclaimer indicating these codes are AI-generated candidates that may require verification.
Parameters (query):
- vin (string, required): e.g., JTEBU14RX30013995
- parts (string, required): e.g., windshield
Quick test: officially provided curl for Get States
Run the following to list valid states and their api_code mappings. This is useful when you need to normalize user input like “CA” to “california”.
C# HttpClient: Get VIN from License Plate
The snippet below shows how to call the Get VIN endpoint from .NET using HttpClient. It also demonstrates defensive checks (timeouts, non-success responses) you’ll want in production. Replace YOUR_API_KEY before running.
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
public class VinLookupResult
{
// Use flexible dictionary since response fields are varied keys like "Make", "Model Year", etc.
public JsonElement Raw { get; set; }
}
public class Program
{
private static readonly Uri BaseUri = new Uri("https://zylalabs.com/");
private const string ApiPath = "api/2204/us-license-plate-to-vin-api/2047/get-vin";
private const string ApiKey = "YOUR_API_KEY";
public static async Task Main()
{
// Example values from the API listing
var licensePlate = "8UZS701";
var state = "california";
using var http = new HttpClient
{
BaseAddress = BaseUri,
Timeout = TimeSpan.FromSeconds(20)
};
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", ApiKey);
// Build query: required params only
var relative = $"{ApiPath}?license_plate={Uri.EscapeDataString(licensePlate)}&state={Uri.EscapeDataString(state)}";
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(25));
using var resp = await http.GetAsync(relative, cts.Token).ConfigureAwait(false);
if (!resp.IsSuccessStatusCode)
{
var errBody = await resp.Content.ReadAsStringAsync(cts.Token).ConfigureAwait(false);
throw new HttpRequestException($"Request failed {(int)resp.StatusCode} {resp.ReasonPhrase}: {errBody}");
}
var stream = await resp.Content.ReadAsStreamAsync(cts.Token).ConfigureAwait(false);
// The response includes fields like "Make", "Model", "Model Year", etc.
var json = await JsonDocument.ParseAsync(stream, cancellationToken: cts.Token).ConfigureAwait(false);
// Example: read a few fields when present
if (json.RootElement.TryGetProperty("Make", out var makeProp))
{
Console.WriteLine($"Make: {makeProp.GetString()}");
}
if (json.RootElement.TryGetProperty("Model", out var modelProp))
{
Console.WriteLine($"Model: {modelProp.GetString()}");
}
if (json.RootElement.TryGetProperty("Model Year", out var yearProp))
{
Console.WriteLine($"Model Year: {yearProp.GetString()}");
}
// Dump all keys for inspection the first time
Console.WriteLine("Raw payload:");
Console.WriteLine(json.RootElement.ToString());
}
}
Notes:
- Authorization: set Bearer YOUR_API_KEY on every request.
- Only pass license_plate and state (the state is the api_code value from Get States, not the two-letter abbreviation).
- Response keys include spaces and mixed casing (e.g., “Model Year”, “Vehicle Type”). Access them by exact key.
JavaScript fetch example (same endpoint)
If you need a quick Node.js or browser call, here’s a minimal fetch to the same Get VIN endpoint with the same sample values:
async function getVin() {
const url = "https://zylalabs.com/api/2204/us-license-plate-to-vin-api/2047/get-vin?license_plate=8UZS701&state=california";
const resp = await fetch(url, {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_API_KEY"
}
});
if (!resp.ok) {
const errText = await resp.text();
throw new Error(`HTTP ${resp.status}: ${errText}`);
}
const data = await resp.json();
console.log("Make:", data["Make"]);
console.log("Model:", data["Model"]);
console.log("Year:", data["Model Year"]);
console.log("All fields:", data);
}
getVin().catch(console.error);
Official JSON examples to guide your parsing
Get States response (official excerpt)
{"AL":{"api_code":"alabama","name":"Alabama"},"AK":{"api_code":"alaska","name":"Alaska"},"AZ":{"api_code":"arizona","name":"Arizona"},"AR":{"api_code":"arkansas","name":"Arkansas"},"CA":{"api_code":"california","name":"California"},"CO":{"api_code":"colorado","name":"Colorado"},"CT":{"api_code":"connecticut","name":"Connecticut"},"DE":{"api_code":"delaware","name":"Delaware"},"DC":{"api_code":"district-of-columbia","name":"District Of Columbia"},"FL":{"api_code":"florida","name":"Florida"},"GA":{"api_code":"georgia","name":"Georgia"},"HI":{"api_code":"hawaii","name":"Hawaii"},"ID":{"api_code":"idaho","name":"Idaho"},"IL":{"api_code":"illinois","name":"Illinois"},"IN":{"api_code":"indiana","name":"Indiana"},"IA":{"api_code":"iowa","name":"Iowa"},"KS":{"api_code":"kansas","name":"Kansas"},"KY":{"api_code":"kentucky","name":"Kentucky"},"LA":{"api_code":"louisiana","name":"Louisiana"},"ME":{"api_code":"maine","name":"Maine"},"MD":{"api_code":"maryland","name":"Maryland"},"MA":{"api_code":"massachusetts","name":"Massachusetts"},"MI":{"api_code":"michigan","name":"Michigan"},"MN":{"api_code":"minnesota","name":"Minnesota"},"MS":{"api_code":"mississippi","name":"Mississippi"},"MO":{"api_code":"missouri","name":"Missouri"},"MT":{"api_code":"montana","name":"Montana"},"NE":{"api_code":"nebraska","name":"Nebraska"},"NV":{"api_code":"nevada","name":"Nevada"},"NH":{"api_code":"new-hampshire","name":"New Hampshire"},"NJ":{"api_code":"new-jersey","name":"New Jersey"},"NM":{"api_code":"new-mexico","name":"New Mexico"},"NY":{"api_code":"new-york","name":"New York"},"NC":{"api_code":"north-carolina","name":"North Carolina"},"ND":{"api_code":"north-dakota","name":"North Dakota"},"OH":{"api_code":"ohio","name":"Ohio"},"OK":{"api_code":"oklahoma","name":"Oklahoma"},"OR":{"api_code":"oregon","name":"Oregon"},"PA":{"api_code":"pennsylvania","name":"Pennsylvania"},"RI":{"api_code":"rhode-island","name":"Rhode Island"},"SC":{"api_code":"south-carolina","name":"South Carolina"},"SD":{"api_code":"south-dakota","name":"South Dakota"},"TN":{"api_code":"tennessee","name":"Tennessee"},"TX":{"api_code":"texas","name":"Texas"},"UT":{"api_code":"utah","name":"Utah"},"VT":{"api_code":"vermont","name":"Vermont"},"VA":{"api_code":"virginia","name":"Virginia"},"WA":{"api_code":"washington","name":"Washington"},"WV":{"api_code":"west-virginia","name":"West Virginia"},"WI":{"api_code":"wisconsin","name":"Wisconsin"},"WY":{"api_code":"wyoming","name":"Wyoming"},"AS":{"api_code":"american-samoa",…
Interpretation tips:
- Use the nested object’s api_code when calling Get VIN. For example, for CA use “california”.
- Build a small lookup table at startup and cache it for the process lifetime; these mappings change infrequently.
Glass response (example from listing)
Example request (for reference only):
GET https://zylalabs.com/api/2204/us-license-plate-to-vin-api/26877/glass?vin=JTEBU14RX30013995&parts=windshield
Example JSON (as provided):
{"AL":{"api_code":"alabama","name":"Alabama"},"AK":{"api_code":"alaska","name":"Alaska"},"AZ":{"api_code":"arizona","name":"Arizona"},"AR":{"api_code":"arkansas","name":"Arkansas"},"CA":{"api_code":"california","name":"California"},"CO":{"api_code":"colorado","name":"Colorado"},"CT":{"api_code":"connecticut","name":"Connecticut"},"DE":{"api_code":"delaware","name":"Delaware"},"DC":{"api_code":"district-of-columbia","name":"District Of Columbia"},"FL":{"api_code":"florida","name":"Florida"},"GA":{"api_code":"georgia","name":"Georgia"},"HI":{"api_code":"hawaii","name":"Hawaii"},"ID":{"api_code":"idaho","name":"Idaho"},"IL":{"api_code":"illinois","name":"Illinois"},"IN":{"api_code":"indiana","name":"Indiana"},"IA":{"api_code":"iowa","name":"Iowa"},"KS":{"api_code":"kansas","name":"Kansas"},"KY":{"api_code":"kentucky","name":"Kentucky"},"LA":{"api_code":"louisiana","name":"Louisiana"},"ME":{"api_code":"maine","name":"Maine"},"MD":{"api_code":"maryland","name":"Maryland"},"MA":{"api_code":"massachusetts","name":"Massachusetts"},"MI":{"api_code":"michigan","name":"Michigan"},"MN":{"api_code":"minnesota","name":"Minnesota"},"MS":{"api_code":"mississippi","name":"Mississippi"},"MO":{"api_code":"missouri","name":"Missouri"},"MT":{"api_code":"montana","name":"Montana"},"NE":{"api_code":"nebraska","name":"Nebraska"},"NV":{"api_code":"nevada","name":"Nevada"},"NH":{"api_code":"new-hampshire","name":"New Hampshire"},"NJ":{"api_code":"new-jersey","name":"New Jersey"},"NM":{"api_code":"new-mexico","name":"New Mexico"},"NY":{"api_code":"new-york","name":"New York"},"NC":{"api_code":"north-carolina","name":"North Carolina"},"ND":{"api_code":"north-dakota","name":"North Dakota"},"OH":{"api_code":"ohio","name":"Ohio"},"OK":{"api_code":"oklahoma","name":"Oklahoma"},"OR":{"api_code":"oregon","name":"Oregon"},"PA":{"api_code":"pennsylvania","name":"Pennsylvania"},"RI":{"api_code":"rhode-island","name":"Rhode Island"},"SC":{"api_code":"south-carolina","name":"South Carolina"},"SD":{"api_code":"south-dakota","name":"South Dakota"},"TN":{"api_code":"tennessee","name":"Tennessee"},"TX":{"api_code":"texas","name":"Texas"},"UT":{"api_code":"utah","name":"Utah"},"VT":{"api_code":"vermont","name":"Vermont"},"VA":{"api_code":"virginia","name":"Virginia"},"WA":{"api_code":"washington","name":"Washington"},"WV":{"api_code":"west-virginia","name":"West Virginia"},"WI":{"api_code":"wisconsin","name":"Wisconsin"},"WY":{"api_code":"wyoming","name":"Wyoming"},"AS":{"api_code":"american-samoa",…
Interpretation tips:
- Use the disclaimer as-is in your UI to indicate parts require verification before ordering.
- The glass object groups results by requested parts (e.g., windshield), returning an array for each part name.
Putting it together: practical flow and edge cases
A common production flow:
- Load state mappings once with Get States and map user input like “CA” or “California” to “california”. Cache for the process lifetime.
- Call Get VIN with license_plate and state (api_code). Store both the raw JSON and a normalized subset of fields you care about (e.g., Make, Model, Model Year, Drive Type, Engine Number of Cylinders).
- Optionally, if your workflow needs glass parts, call Glass with the returned VIN and a specific parts value like windshield.
Error handling considerations:
- HTTP non-2xx: log the body for diagnostics; don’t swallow useful messages.
- Timeouts: set explicit client timeouts; retry idempotent GETs if your UX allows.
- Input validation: ensure license plates are sanitized for your jurisdiction; always use state api_code from Get States.
- Parsing: response keys contain spaces and special characters; use exact string keys when accessing them.
Performance tips:
- Cache Get States in-memory and refresh on a schedule you control.
- For high-traffic services, consider a small TTL cache of plate-to-VIN lookups to cut repeat calls during user navigation.
Call this API from AI agents using MCP
You can call any Zyla API from MCP-compatible developer tools (e.g., Claude Code, Cursor, Windsurf). Point the tool to the MCP endpoint and supply your API key. The MCP base is:
https://mcp.zylalabs.com/mcp?apikey=YOUR_API_KEY
Once configured, your agent can hit the US License Plate to VIN API endpoints using the same Authorization semantics through MCP. See the MCP docs here: MCP.
Real-world usage patterns
- One-tap vehicle intake: Your mobile app scans a plate, POSTs the plate and derived state api_code to your backend, calls Get VIN, and your UI renders Make/Model/Year immediately.
- Service desk automation: After VIN resolution, conditionally call Glass with parts=windshield to present candidates for quoting, and include the disclaimer in your invoice preview.
- Data normalization: Compress the verbose response into a fixed schema for internal databases (e.g., make, model, year, body_class, engine_l, cylinders, drive_type) and keep the raw JSON for audits.
Where to find docs, subscribe, and scale
All details for the US License Plate to VIN API, including current access options, are on its API page. Zyla uses a subscription + quota model (not pay-per-call). For your first API, expect a 7-day trial or 50 requests; check the listing for current terms and plan tiers. Zyla’s single key works across its catalog, and you can consolidate usage across teams on zylalabs.com.
FAQ
Which state value should I pass to Get VIN?
Use the “api_code” from Get States (e.g., “california”), not the postal abbreviation (e.g., “CA”).
Do I need any parameters for Get States?
No parameters are documented for Get States. Send only the Authorization header.
Can I look up glass parts for components other than the windshield?
Yes. Pass a supported value to the parts query parameter on the Glass endpoint (the listing example shows parts=windshield). Use the response disclaimer and verify parts before ordering.
How is authentication handled?
Every request must include Authorization: Bearer YOUR_API_KEY. Do not include keys in query parameters.
Is there a free tier?
There is no Free Plan for this API. For your first API, you’ll typically get a 7-day trial or 50 requests. Check the API page for current access options and pricing.
Ready to build? Create your account and get an API key now: Register. Then subscribe to the US License Plate to VIN API and ship your C# integration today.
Official API response
{"AL":{"api_code":"alabama","name":"Alabama"},"AK":{"api_code":"alaska","name":"Alaska"},"AZ":{"api_code":"arizona","name":"Arizona"},"AR":{"api_code":"arkansas","name":"Arkansas"},"CA":{"api_code":"california","name":"California"},"CO":{"api_code":"colorado","name":"Colorado"},"CT":{"api_code":"connecticut","name":"Connecticut"},"DE":{"api_code":"delaware","name":"Delaware"},"DC":{"api_code":"district-of-columbia","name":"District Of Columbia"},"FL":{"api_code":"florida","name":"Florida"},"GA":{"api_code":"georgia","name":"Georgia"},"HI":{"api_code":"hawaii","name":"Hawaii"},"ID":{"api_code":"idaho","name":"Idaho"},"IL":{"api_code":"illinois","name":"Illinois"},"IN":{"api_code":"indiana","name":"Indiana"},"IA":{"api_code":"iowa","name":"Iowa"},"KS":{"api_code":"kansas","name":"Kansas"},"KY":{"api_code":"kentucky","name":"Kentucky"},"LA":{"api_code":"louisiana","name":"Louisiana"},"ME":{"api_code":"maine","name":"Maine"},"MD":{"api_code":"maryland","name":"Maryland"},"MA":{"api_code":"massachusetts","name":"Massachusetts"},"MI":{"api_code":"michigan","name":"Michigan"},"MN":{"api_code":"minnesota","name":"Minnesota"},"MS":{"api_code":"mississippi","name":"Mississippi"},"MO":{"api_code":"missouri","name":"Missouri"},"MT":{"api_code":"montana","name":"Montana"},"NE":{"api_code":"nebraska","name":"Nebraska"},"NV":{"api_code":"nevada","name":"Nevada"},"NH":{"api_code":"new-hampshire","name":"New Hampshire"},"NJ":{"api_code":"new-jersey","name":"New Jersey"},"NM":{"api_code":"new-mexico","name":"New Mexico"},"NY":{"api_code":"new-york","name":"New York"},"NC":{"api_code":"north-carolina","name":"North Carolina"},"ND":{"api_code":"north-dakota","name":"North Dakota"},"OH":{"api_code":"ohio","name":"Ohio"},"OK":{"api_code":"oklahoma","name":"Oklahoma"},"OR":{"api_code":"oregon","name":"Oregon"},"PA":{"api_code":"pennsylvania","name":"Pennsylvania"},"RI":{"api_code":"rhode-island","name":"Rhode Island"},"SC":{"api_code":"south-carolina","name":"South Carolina"},"SD":{"api_code":"south-dakota","name":"South Dakota"},"TN":{"api_code":"tennessee","name":"Tennessee"},"TX":{"api_code":"texas","name":"Texas"},"UT":{"api_code":"utah","name":"Utah"},"VT":{"api_code":"vermont","name":"Vermont"},"VA":{"api_code":"virginia","name":"Virginia"},"WA":{"api_code":"washington","name":"Washington"},"WV":{"api_code":"west-virginia","name":"West Virginia"},"WI":{"api_code":"wisconsin","name":"Wisconsin"},"WY":{"api_code":"wyoming","name":"Wyoming"},"AS":{"api_code":"american-samoa",…