API access uses API Consumers and JWT bearer tokens. Create credentials in your dashboard, keep Client Secrets on your server, and request an audience-specific token before calling this API. See the API access and authentication guidance.
Our VINbarcode API only works with Code 39. Generally speaking, unlike a VIN captured by our VINocr API, a VIN captured through VINbarcode API requires no sanity check.
To achieve the highest possible recognition speed, the image size is a key factor.
Avoid Submitting The Same Image More Than Once
Our system deducts one credit from your account balance for each XML or JSON result returned, regardless of the outcome. Therefore, please ensure your system has a mechanism in place to prevent sending the same image to the API service more than once.
REST API Description
This API uses multipart POST HTTP method. Ensure your POST is a multipart/form-data request. The following three parameters and their values are required.
| Parameter Name | Parameter | Value | Used in Request |
| JWT Bearer Token | Authorization header | Bearer <jwt-token> | Authorization: Bearer <jwt-token> |
| Input Image* | Image File* | JPG, JPEG, PNG, GIF, BMP | POST https://www.recognition.ws/vinbarcode/v3?saveimage=TRUE with multipart/form-data file |
| Save Image** | saveimage** | TRUE or FALSE (default: FALSE) | POST https://www.recognition.ws/vinbarcode/v3?saveimage=TRUE |
| VIN Decode*** | vindecode*** | TRUE or FALSE (default: FALSE) | POST https://www.recognition.ws/vinbarcode/v3?saveimage=TRUE&vindecode=TRUE |
| Data Format**** | format**** | XML or JSON (default: XML) | POST https://www.recognition.ws/vinbarcode/v3?saveimage=TRUE&vindecode=TRUE&format=JSON |
POST https://identity.vinquery.com/connect/token using an API Consumer with audience vinquery:api:vinbarcode.
<html>
<form enctype="multipart/form-data" action="https://www.recognition.ws/vinbarcode/v3?saveimage=FALSE&
vindecode=FALSE" method="POST">
Add HTTP header: Authorization: Bearer <jwt-token>
Choose an image to process: <input name="anyName" type="file" />
<input type="submit" value="Go" />
</form>
</html>
Output in XML or JSON
- VIN: VIN number in ASCII
- Position of the barcdoe in an input image: Top(pixels), Left(pixels), Width(pixels), Height(pixels). The origin(0,0) is the top-left corner of an input image.
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<VINbarcode Version="3.0" Date="12/14/2025 3:23:58 PM" Status="SUCCESS">
<VIN_Captured>XXXXXXXXXXXXXXXXX</VIN_Captured>
<Left>299</Left>
<Top>429</Top>
<Width>450</Width>
<Height>42</Height>
</VINbarcode>
{
"service": "vinbarcode",
"version": "3.0",
"date": "3/7/2026 3:53:26 PM",
"status": "SUCCESS",
"vin_captured": "XXXXXXXXXXXXXXXXX",
"left": 299.0,
"top": 429.0,
"width": 450.0,
"height": 42.0
}
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<VINbarcode Version="3.0" Date="8/14/2025 10:13:32 AM" Status="SUCCESS">
<VIN_Captured>XXXXXXXXXXXXXXXXX</VIN_Captured>
<VINdecode Status="SUCCESS">
<Make>Audi</Make>
<Model>A4</Model>
<Year>2010</Year>
</VINdecode>
<Left>299</Left>
<Top>429</Top>
<Width>450</Width>
<Height>42</Height>
</VINbarcode>
{
"service": "vinbarcode",
"version": "3.0",
"date": "3/7/2026 3:53:26 PM",
"status": "SUCCESS",
"vin_captured": "XXXXXXXXXXXXXXXXX",
"vindecode": {
"status": "SUCCESS",
"make": "Audi",
"model": "A4",
"year": 2010
},
"left": 299.0,
"top": 429.0,
"width": 450.0,
"height": 42.0
}
