---
title: "Lien & Theft"
description: "Check whether a vehicle has active liens or has been reported stolen."
canonical_url: "https://docs.carsxe.com/docs/products/lien-theft"
markdown_url: "https://docs.carsxe.com/docs/products/lien-theft.md"
last_updated: "1980-01-01"
---

# Lien & Theft
URL: /docs/products/lien-theft
LLM index: /llms.txt
Description: Check whether a vehicle has active liens or has been reported stolen.

Check a US VIN for lien and theft-related records. The `/v1/lien-theft` endpoint returns decoded vehicle context plus any reportable lien or theft events CarsXE finds for the VIN.

Results depend on available reporting sources and jurisdictions. Treat missing fields as unavailable data from the source, not as proof that the vehicle is clear.

## Parameters

| Parameter | Required | Description |
|---|---|---|
| `vin` | Yes | The 17-character vehicle identification number |
| `key` | Yes | Your CarsXE API key |

## Example

<CodeGroup title="Check lien and theft records" tag="GET" label="/v1/lien-theft">

```bash
curl -G https://api.carsxe.com/v1/lien-theft \
  -d key=YOUR_API_KEY \
  -d vin=2C3CDXFG1FH762860
```

```js
import { CarsXE } from "carsxe-api";

const carsxe = new CarsXE("YOUR_API_KEY");
const vin = "2C3CDXFG1FH762860";

try {
  const lienAndTheft = await carsxe.lienAndTheft({ vin });
  console.log(lienAndTheft);
} catch (error) {
  console.error(error);
}
```

```python
import asyncio
from carsxe_api import CarsXE

carsxe = CarsXE("YOUR_API_KEY")
vin = "2C3CDXFG1FH762860"

try:
    lienAndTheft = asyncio.run(carsxe.lien_and_theft({"vin": vin}))
    print(lienAndTheft)
except Exception as e:
    print(f"Error: {e}")
```

```php
<?php
require_once __DIR__ . '/vendor/autoload.php';
use CarsxeDeveloper\Carsxe\Carsxe;

$carsxe = new Carsxe("YOUR_API_KEY");
$vin = "2C3CDXFG1FH762860";

try {
    $lienAndTheft = $carsxe->lienAndTheft(["vin" => $vin]);
    print_r($lienAndTheft);
} catch (Exception $error) {
    echo "Error: " . $error->getMessage();
}
```

```ruby
require "carsxe"

carsxe = Carsxe::CarsXE.new(api_key: "YOUR_API_KEY")
vin = "2C3CDXFG1FH762860"

begin
  lienAndTheft = carsxe.lien_and_theft("vin" => vin)
  puts lienAndTheft
rescue StandardError => error
  puts "Error: #{error.message}"
end
```

```go
package main

import (
	"fmt"
	"github.com/carsxe/carsxe-go-package"
)

func main() {
	client := carsxe.New("YOUR_API_KEY")
	vin := "2C3CDXFG1FH762860"
	lienAndTheft := client.LienAndTheft(map[string]string{"vin": vin})
	fmt.Println(lienAndTheft)
}
```

```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");
        Map<String, String> params = new HashMap<>();
        params.put("vin", "2C3CDXFG1FH762860");

        try {
            Map<String, Object> lienAndTheft = carsxe.lienAndTheft(params);
            System.out.println(lienAndTheft);
        } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
        }
    }
}
```

```swift
import carsxe

let carsxe = CarsXE(apiKey: "YOUR_API_KEY")
let vin = "2C3CDXFG1FH762860"

do {
    let lienAndTheft = try carsxe.lienAndTheft(["vin": vin])
    print(lienAndTheft)
} 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("YOUR_API_KEY");
        string vin = "2C3CDXFG1FH762860";

        try
        {
            var lienAndTheft = await carsxe.LienAndTheft(new Dictionary<string, string> { { "vin", vin } });
            Console.WriteLine(lienAndTheft);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}
```

```bash {{ title: "Response" }}
{
  "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."
      ]
    }
  ]
}
```

</CodeGroup>

## Response

### Top-level shape

<LienTheftTopLevelShape />

Click any object or array to expand it and see sample data. For the full interactive reference, try it live in the [API Reference](/api-reference/lien-and-theft/lien-theft-records).

All response fields are optional except fields included in a successful response. Empty or missing `events` means CarsXE did not receive an event group for that VIN in that response.

<Properties>
  <Property name="success" type="boolean">
    `true` on a successful `200` response.
  </Property>
  <Property name="input" type="object">
    Echo of request inputs, including the VIN that was checked.
  </Property>
  <Property name="timestamp" type="string">
    ISO 8601 response timestamp.
  </Property>
  <Property name="year" type="integer">
    Decoded vehicle model year returned with the record.
  </Property>
  <Property name="make" type="string">
    Decoded vehicle manufacturer.
  </Property>
  <Property name="model" type="string">
    Decoded vehicle model.
  </Property>
  <Property name="type" type="string">
    Vehicle category returned by the source. Example: `"CAR"`.
  </Property>
  <Property name="events" type="array">
    Lien or theft-related records found for the VIN.
  </Property>
  <Property name="trim_data" type="object">
    Optional decoded trim or source-specific vehicle details when returned.
  </Property>
</Properties>

### events

Each item in `events` is a reportable lien or theft-related record. Event payloads can include additional source-specific fields.

<Properties>
  <Property name="event" type="string">
    Human-readable event label. Example: `"Recovered Theft"`.
  </Property>
  <Property name="location" type="string">
    State or jurisdiction abbreviation when available. Example: `"OH"`.
  </Property>
  <Property name="details_list" type="array">
    Human-readable details from the source record.
  </Property>
</Properties>

## How to interpret results

Use this endpoint as a screening signal, not as a complete legal determination of title status.

- A `200` with `events` means CarsXE found reportable lien or theft-related records for the VIN.
- A `404` with `"No lien or theft data found for this VIN"` means this endpoint did not find lien or theft data for that VIN.
- Missing fields mean the source did not provide that value in the returned record.

## Errors

See the [Errors guide](/docs/guides/errors) for the full list. The most common cases specific to this endpoint:

- **400** — `"Missing vin (vehicle identification number)"` or `"Wrong VIN length, must be 17 characters"` — fix the input, don't retry.
- **401** — missing or invalid API key.
- **404** — `"No lien or theft data found for this VIN"` — no lien or theft data was found by this endpoint for the VIN.
- **429** — usage limit exceeded.

## Sitemap

See the full [sitemap](/sitemap.md) for all pages.
Docs-scoped sitemap: [/docs/sitemap.md](/docs/sitemap.md).
Well-known sitemap: [/.well-known/sitemap.md](/.well-known/sitemap.md).
