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.

<CodeGroup title="Request" tag="GET" label="/v1/international-vin-decoder">

```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
<?php

require_once __DIR__ . '/vendor/autoload.php';

$client = new GuzzleHttp\Client([
    'base_uri' => '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<String> 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<object>(url);
```

</CodeGroup>

### 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

<Note>
  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`.
</Note>
