> This page is for Direct Executions.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://infonite.dev/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://infonite.dev/_mcp/server.

# Owned vehicles

GET https://clients.infonite.tech/api/executions/results/{execution_id}/public/v1/driver/vehicles

The vehicles registered to your customer, from the Spanish traffic authority (DGT).

One entry per vehicle: identification, insurance situation, roadworthiness inspection and administrative state. Field by field in [Vehicles](/guides/data-models/vehicles).

**It reads both ways.** As asset verification — what they own — and as a liability check: an uninsured vehicle, or one overdue for inspection, shows up here.

Features are chosen when the execution **starts**, not here. An execution that did not ask for `vehicles_data` answers `204`, and the only way to get the data is to run another one.

| Status | Meaning                                                                                                                      |
| :----- | :--------------------------------------------------------------------------------------------------------------------------- |
| `200`  | The vehicles.                                                                                                                |
| `202`  | `feature_not_ready` — `vehicles_data` is still running. **Only this family waits**: the ones that already closed answer now. |
| `204`  | The execution never asked for `vehicles_data`. No body.                                                                      |
| `404`  | No execution with that id for your application, or it has been deleted.                                                      |

**Server to server only.** This call is authorised with your application secret: it belongs in your backend, never in a browser, a mobile app or anything your customer can read.

Reference: https://infonite.dev/direct-executions/api-reference/direct-executions-api/fetching-the-results/public-administration/direct-executions-v-1-results-public-owned-vehicles

## Authentication

- `X-APP-SECRET` header (required) — Application Secret

## Servers

- `https://clients.infonite.tech/api` (Legacy, default)
- `https://clients.infonite.io/api` (Production)

## Request

### Path parameters

- `execution_id` (string, required) — The execution, as the acceptance response returned it.

## Response

### 200

**200 OK**Vehicles registered in your customer’s name: plate, make, model, registration date and the administrative state the register reports for each one. **An empty list is an answer, not a gap**: the feature ran and the source reported none.

- `list of EUOwnedVehicleSchema`

### 202

**202 Accepted**`feature_not_ready`: `vehicles_data` is still running. **You do not have to wait for the whole execution** — every family answers as soon as its own feature closes, so a slow source does not hold up the ones that already finished. The SAME code carries the RECORDS when this family HAS finished and the execution has not: `202` means the run is still going, and the body says which of the two you are holding — `detail` when there is nothing yet, the records when there is.

- `detail` (string, required) — Error message

## Errors

### 404 Not Found Error

**404 Not Found**No execution with that id for your application, or it has been deleted.

- `detail` (string, required) — Error message

### 422 Unprocessable Entity Error

Validation Error

- `detail` (list of ValidationError, optional)

## Types

### EUOwnedVehicleSchema

- `product` ("driver_data", required)
- `sub_family` ("driver_data:eu_owned_vehicle", required)
- `fetch_date` (string, required) — Date this product was fetched
- `country` (string, required) — Country where the vehicle is registered.
- `registration_date` (date, required, deprecated) — **Deprecated: read `last_registration_date` and `first_registration_date` instead.** A registration date as the source reports it, which is not always the same registration: the one in `country` when the source gives it, the vehicle's first registration when the source gives only that one. Still present, and filled as before.
- `first_registration_date` (date, optional) — Date the vehicle was registered for the first time, in any country: for an imported vehicle, its original registration abroad. It belongs to the vehicle, not to its owner — a vehicle bought second hand keeps it — and it is the date that tells the vehicle's age. Equal to `last_registration_date` when the vehicle was first registered in `country`. Absent when the source consulted does not give it — and then `last_registration_date` may well be the first registration too: the absence only says the source does not tell.
- `last_registration_date` (date, optional) — Date the vehicle was registered in `country`: the registration in force. Equal to `first_registration_date` for a vehicle first registered there, later for one registered abroad before. It belongs to the vehicle, not to its owner — a change of owner leaves it as it was. Absent when the source consulted does not give it — and then `first_registration_date` may well be the registration in `country` too: the absence only says the source does not tell.
- `inspection_expiry_date` (date, optional) — Expiry date of the vehicle inspection.
- `inspection_pending` (boolean, optional) — If true, the vehicle has failed the previous inspection or is pending to be inspected.
- `license_plate` (string, optional) — License plate number of the vehicle.
- `administrative_situation` (string, optional) — Current administrative situation of the vehicle.
- `vin` (string, optional) — Vehicle Identification Number.
- `make` (string, optional) — Vehicle manufacturer.
- `model` (string, optional) — Vehicle model name.
- `trim` (string, optional) — Specific vehicle trim/variant.
- `color` (string, optional) — Color of the vehicle.
- `mileage` (integer, optional)
- `mileage_date` (date, optional) — Date when the mileage was recorded.
- `fuel_type` (string, optional) — Fuel type of the vehicle.
- `emission_class` (string, optional) — Emission class of the vehicle.
- `insurance` (VehicleInsuranceSchema, optional) — Vehicle insurance policy.
- `simple_vehicle_report` (SimpleVehicleReport, optional) — Whether the vehicle has incidents, and which ones. Present only when `vehicles_data` is requested with `simple_vehicle_report: true` in its configurations.

### ValidationError

- `loc` (list of ValidationErrorLocItems, required)
- `msg` (string, required)
- `type` (string, required)
- `input` (any, optional)
- `ctx` (ValidationErrorCtx, optional)

### VehicleInsuranceSchema

Vehicle insurance policy.

- `is_active` (boolean, required) — Whether the vehicle has an active insurance policy.
- `company` (string, optional) — Name of the insurance company.
- `start_date` (date, optional) — Start date of the insurance policy.
- `end_date` (date, optional) — End date of the insurance policy.

### SimpleVehicleReport

Whether the vehicle has incidents, and which ones. Present only when `vehicles_data` is requested with `simple_vehicle_report: true` in its configurations.

- `report_date` (string, required) — Date when the information was consulted.
- `has_incidents` (boolean, required) — Whether the vehicle has incidents, meaning that at the time of the inquiry, there are one or more annotations that prevent administrative processing or the circulation of the vehicle. For your safety, request a full vehicle report to know the details of all the information held in the Registry regarding the vehicle consulted. Always `true` when `flags` names any — an expired inspection included.
- `flags` (list of enum, optional) — The incidents that make this vehicle a risk to buy, finance or insure: what the registry flags on it — a seizure, a seal, a financing charge, a deregistration — and `inspection_expired` when its inspection (ITV) had expired at the time of the report. Each code appears once, in no particular order. Absent when the source does not say; empty when it says there are none. A vehicle can have incidents no flag names, so an empty list does not mean `has_incidents` is `false`.
  - Allowed values: `seizure`, `seal`, `financing_charge`, `temporary_deregistration`, `permanent_deregistration`, `theft_deregistration`, `transfer_deregistration`, `inspection_expired`

### ValidationErrorLocItems

- string
- integer

### ValidationErrorCtx

## Examples

### Two vehicles registered to the person

**Response**

```json
[
  {
    "product": "driver_data",
    "sub_family": "driver_data:eu_owned_vehicle",
    "fetch_date": "2026-09-12T01:26:48+00:00",
    "country": "ES",
    "registration_date": "2011-08-04",
    "inspection_expiry_date": "2027-07-07",
    "inspection_pending": false,
    "license_plate": "0000AAA",
    "administrative_situation": "FAVORABLE",
    "vin": "11111111111111111",
    "make": "AUDI",
    "model": "A4",
    "mileage": 122623,
    "fuel_type": "DIESEL",
    "emission_class": "ES:B",
    "insurance": {
      "is_active": true,
      "company": "MUTUA MADRILEÑA AUTOMOVILISTA",
      "start_date": "2016-02-19"
    },
    "simple_vehicle_report": {
      "report_date": "2026-09-12T01:26:48+00:00",
      "has_incidents": false
    }
  },
  {
    "product": "driver_data",
    "sub_family": "driver_data:eu_owned_vehicle",
    "fetch_date": "2026-09-12T01:26:48+00:00",
    "country": "ES",
    "registration_date": "2024-11-20",
    "inspection_expiry_date": "2028-11-20",
    "inspection_pending": true,
    "license_plate": "0000BBB",
    "administrative_situation": "FAVORABLE",
    "vin": "00000000000000000",
    "make": "TOYOTA",
    "model": "YARIS",
    "fuel_type": "GASOLINA",
    "emission_class": "ES:ECO",
    "insurance": {
      "is_active": false,
      "company": "MAPFRE ESPAÑA",
      "start_date": "2024-11-20"
    },
    "simple_vehicle_report": {
      "report_date": "2026-09-12T01:26:48+00:00",
      "has_incidents": true
    }
  }
]
```

**SDK Code**

```python Two vehicles registered to the person
import requests

url = "https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/public/v1/driver/vehicles"

headers = {"X-APP-SECRET": "<apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript Two vehicles registered to the person
const url = 'https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/public/v1/driver/vehicles';
const options = {method: 'GET', headers: {'X-APP-SECRET': '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Two vehicles registered to the person
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/public/v1/driver/vehicles"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("X-APP-SECRET", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Two vehicles registered to the person
require 'uri'
require 'net/http'

url = URI("https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/public/v1/driver/vehicles")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["X-APP-SECRET"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

```java Two vehicles registered to the person
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/public/v1/driver/vehicles")
  .header("X-APP-SECRET", "<apiKey>")
  .asString();
```

```php Two vehicles registered to the person
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/public/v1/driver/vehicles', [
  'headers' => [
    'X-APP-SECRET' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp Two vehicles registered to the person
using RestSharp;

var client = new RestClient("https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/public/v1/driver/vehicles");
var request = new RestRequest(Method.GET);
request.AddHeader("X-APP-SECRET", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift Two vehicles registered to the person
import Foundation

let headers = ["X-APP-SECRET": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/public/v1/driver/vehicles")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

### This family has not finished

**Response**

```json
{
  "detail": "feature_not_ready"
}
```

**SDK Code**

```python This family has not finished
import requests

url = "https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/public/v1/driver/vehicles"

headers = {"X-APP-SECRET": "<apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript This family has not finished
const url = 'https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/public/v1/driver/vehicles';
const options = {method: 'GET', headers: {'X-APP-SECRET': '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go This family has not finished
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/public/v1/driver/vehicles"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("X-APP-SECRET", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby This family has not finished
require 'uri'
require 'net/http'

url = URI("https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/public/v1/driver/vehicles")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["X-APP-SECRET"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

```java This family has not finished
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/public/v1/driver/vehicles")
  .header("X-APP-SECRET", "<apiKey>")
  .asString();
```

```php This family has not finished
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/public/v1/driver/vehicles', [
  'headers' => [
    'X-APP-SECRET' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp This family has not finished
using RestSharp;

var client = new RestClient("https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/public/v1/driver/vehicles");
var request = new RestRequest(Method.GET);
request.AddHeader("X-APP-SECRET", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift This family has not finished
import Foundation

let headers = ["X-APP-SECRET": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/public/v1/driver/vehicles")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```