Public Cars API
Fetch your published cars from your own website.
Create a key
- Sign in to autolink as the organization owner and open Connections.
- In Website / API, click Create API key and give it a name, for example "Company website".
- Copy the key and store it on your server. It is shown only once.
Keys start with alk_live_. You can have up to 10 active keys per organization and revoke any of them at any time on the same page. A revoked key stops working on its next request.
Which cars are returned
A car is returned only when both of these are true:
- The car's status is In stock or Reserved.
- Its publication on Internal website has the status Active.
| Publication status on "Internal website" | In the API |
|---|---|
| Active | Yes |
| Not listed, Paused, Expired, Removed, Error | No |
| Car status | In the API |
|---|---|
| In stock, Reserved | Yes (status is in_stock or reserved, so your site can show a "Reserved" badge) |
| Sold, Archived | No |
An active publication on any other portal never makes a car appear in the API.
Publish a car
- In autolink open Listings.
- Find the car. In the Internal website column click Publish (or Resume if it is Paused).
- The status becomes Active and the car appears in the API on the next request.
To take a car off your website, open the status menu in the same cell and choose Pause or Remove, or mark the car Sold or Archived. It disappears on the next request.
Authentication
Send the key in the Authorization header:
Authorization: Bearer alk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Keys in the URL (?key=...) are rejected. Call the API from your server, never from browser code.
List cars
GET https://www.autolink.sk/api/public/v1/cars
| Parameter | Description |
|---|---|
limit | Cars per page, 1 to 100. Default 20. |
cursor | The next_cursor of the previous page. |
curl "https://www.autolink.sk/api/public/v1/cars?limit=20" \ -H "Authorization: Bearer $AUTOLINK_API_KEY"
const response = await fetch('https://www.autolink.sk/api/public/v1/cars?limit=20', {
headers: { Authorization: `Bearer ${process.env.AUTOLINK_API_KEY}` },
});
const { data, next_cursor } = await response.json();
Response:
{
"data": [
{
"id": "0b6c3a52-6f3e-4a35-9d3e-2a6f0f3b1c10",
"brand": "Skoda",
"model": "Octavia",
"variant": "2.0 TDI Style",
"year": 2021,
"first_registration": "2021-03-15",
"mileage_km": 64200,
"power_kw": 110,
"engine_l": 2.0,
"engine_ccm": 1968,
"fuel": "diesel",
"transmission": "automatic",
"body": "combi",
"color": "grey",
"color_name": "Moon white",
"emission": "EU6d",
"drive": "fwd",
"doors": 5,
"seats": 5,
"equipment": [],
"asking_price": 18900,
"currency": "EUR",
"status": "in_stock",
"description": "First owner, service history.",
"photos": [],
"updated_at": "2026-10-20T09:15:00.123456+00:00"
}
],
"next_cursor": "WyIyMDI2LTEwLTIwVDA5OjE1OjAwLjEyMzQ1NiswMDowMCIsIjBiNmMzYTUyLTZmM2UtNGEzNS05ZDNlLTJhNmYwZjNiMWMxMCJd"
}
Cars are sorted by updated_at, newest first. When next_cursor is null, there are no more pages.
Get one car
GET https://www.autolink.sk/api/public/v1/cars/{id}
Returns { "data": { ...car } }. A car that does not exist, belongs to another organization or is not published answers 404.
Fields
| Field | Type | Notes |
|---|---|---|
id | string | Car id (UUID). |
brand, model, variant | string | variant can be null. |
year, first_registration | number, date | Can be null. |
mileage_km, power_kw, engine_l, engine_ccm | number | Can be null. |
fuel | string | electric, hybrid, lpg, cng, diesel, petrol. |
transmission | string | automatic, manual. |
body | string | combi, suv, mpv, cabrio, liftback, coupe, sedan, hatchback, pickup. |
color, color_name | string | Base color code and free-text name. |
emission | string | EU3 to EU6d. |
drive | string | fwd, rwd, awd. |
doors, seats | number | Can be null. |
equipment | string[] | Feature codes. |
asking_price, currency | number, string | EUR or CZK. Price can be null. |
status | string | in_stock or reserved. |
description | string | Listing text, can be null. |
photos | string[] | Reserved. Always empty until photo upload ships. |
updated_at | string | ISO 8601. |
Errors
Errors are JSON: { "error": "<code>" }.
| Status | error | Meaning |
|---|---|---|
| 400 | invalid_limit, invalid_cursor, key_in_query | Fix the request. |
| 401 | invalid_api_key | Missing, unknown or revoked key. |
| 404 | not_found | No such published car. |
| 429 | rate_limited | Too many requests. See the Retry-After header. |
| 500 | server_error | Try again later. |
Limits
Each key may make about 120 requests per minute. An address that keeps sending wrong keys is answered with 429 for a minute, before the key is even checked. Responses are not cacheable (Cache-Control: private, no-store): cache them on your side if your site gets a lot of visits. CORS is off on purpose, because the key must stay on your server.
Security
- Keep the key in your server's environment, not in browser code, mobile apps or a public repository.
- Use one key per website or service, so you can revoke one without touching the others.
- If a key may have leaked, revoke it on the Connections page and create a new one.