MyŠkoda Public API

Read connected-vehicle data and control your Škoda from your own integrations.

The MyŠkoda Public API lets third-party developers read connected-vehicle data and remotely control Škoda vehicles - for example to connect a car to a smart-home platform such as Home Assistant. If you own a connected Škoda and want to build on top of its data, this API is for you.

What you get

For each vehicle the API returns its current state:

Remote commands let you start and stop charging and air conditioning. The data available for a specific vehicle depends on what that vehicle supports.

Getting an API key

Every request needs an API key. Keys are created and managed in the MyŠkoda app.

Are you on a mobile phone with MyŠkoda installed?

Manage API keys

Reading this on a computer? Scan the QR code below with your phone to open key management in the app:

QR code linking to API key management in the MyŠkoda app

Don't have MyŠkoda? Download it here.

Quickstart

Pass the key in the X-API-Key header. Fetch your vehicle and its current state:

curl -H "X-API-Key: YOUR_API_KEY" \
  https://public.api.connect.skoda-auto.cz/api/v1/vehicles/YOUR_VIN

A trimmed example response:

{
  "vehicle": {
    "vin": "TMBJB9NY5RF999999",
    "name": "My Enyaq",
    "licensePlate": "1MB 1234",
    "status": {
      "overall": { "doorsLocked": "YES" }
    },
    "charging": { }
  },
  "errors": []
}

The response can be limited to selected parts of the data with the include query parameter - see the API reference for details.

Authentication and key expiry

Send the API key with every request in the X-API-Key header. Keys are bound to the vehicles you selected when creating them, and they expire.

In both cases the fix is the same: create or update a key in the MyŠkoda app.

Partial data

A 200 response is not always complete. Parts of the data that your vehicle does not support are omitted, and so are parts that could not be retrieved at that moment. Every omitted part is described by an entry in the errors list of the response, with a machine-readable type code. Treat the errors list as informational - a non-empty list does not mean the request failed.

Rate limits

Requests are rate-limited per API key. The current limit is 20 requests per hour; this value is not final and may change. The response headers are the authoritative source:

When the limit is exceeded the API responds with 429 Too Many Requests; wait for the period indicated by the Retry-After header before retrying.

Every authenticated request to a rate-limited endpoint counts against the quota, including requests that end with an error response (for example a 5xx caused by a temporary outage) - such responses carry the RateLimit-* headers too. Requests rejected with 401 or 403 do not consume quota, and requests rejected with 429 do not prolong the current window.

API reference

The full contract - all endpoints, schemas and headers - lives in the interactive reference:

Open the API reference

Errors

Error responses use the application/problem+json format (RFC 9457). Generic errors that carry no meaning beyond their HTTP status code use the type about:blank; specific error conditions have their own problem type URI, which doubles as a link to its documentation page:

Problem type Status Meaning
api-key-expired 401 The API key has passed its expiry date.
api-key-not-authorized 403 The API key is not authorized to execute the operation.
operation-not-authorized 403 The vehicle refused the operation for the user the API key belongs to.
operation-not-supported 422 The vehicle lacks the capability the operation needs.
operation-disabled 422 The capability the operation needs is currently disabled for the vehicle.
rate-limit-exceeded 429 The rate limit for the API key has been exceeded.
vehicle-not-accepting-requests 429 The vehicle declined the operation and it can be retried later.