The data is generated at build time from the same files that render the pages,
so the API can never disagree with what you see here. It currently covers
229 Shopware versions, from 5.5.7 to 6.7.13.1.
Responses are static JSON served with Access-Control-Allow-Origin: *,
so you can fetch them straight from a browser.
Lists every version SWDB knows about, oldest first — the same order the version
picker uses. Around 60 KB. Start here if you want to discover what exists.
Response
[
{
"version": "6.7.13.1",
"slug": "6_7_13_1",
"major": 6,
"minor": 7,
"majorMinor": "6.7",
"status": "available",
"tableCount": 252,
"url": "https://swdb.dev/version/6_7_13_1/",
"schemaUrl": "https://swdb.dev/api/schemas/6_7_13_1.schema.json"
}
]
Fields
| Field | Type | Meaning |
version | string | Release number as Shopware writes it, e.g. "6.7.12.2". |
slug | string | The same version with dots replaced by underscores. Used in every URL. |
major | number | Major version, 5 or 6. |
minor | number | Minor version, e.g. 7. |
majorMinor | string | Major and minor joined, e.g. "6.7". Handy for grouping. |
status | string | "available" when a schema exists, "withdrawn" when Shopware pulled the release. |
tableCount | number | null | Number of tables in the schema. null for withdrawn releases. |
url | string | The browsable page for this version. |
schemaUrl | string | null | The raw schema JSON. null for withdrawn releases. |
withdrawn | object | Only on withdrawn entries: releasedAt, supersededBy and a reason. |
Withdrawn releases
Shopware occasionally pulls a release after publishing it. Those versions are
listed with status: "withdrawn" and carry no schema — there is
none to extract, because no Docker image was ever built for them. Filter on
status if you only want versions you can actually inspect.
{
"version": "6.7.12.0",
"slug": "6_7_12_0",
"status": "withdrawn",
"tableCount": null,
"schemaUrl": null,
"withdrawn": {
"releasedAt": "2026-07-07",
"supersededBy": "6.7.12.1",
"reason": "Shopware withdrew this release shortly after publishing it…"
}
}
GET /api/schemas/<slug>.schema.json
The complete schema of one release: every table with its columns, indexes and
foreign key relations in both directions. Take slug from the index
above, e.g. 6_7_13_1. These files are large — 1 to 3 MB each.
Response
[
{
"table": "product",
"fields": [
{
"Field": "id",
"Type": "binary(16)",
"Null": false,
"Key": "PRI",
"Default": null,
"Extra": ""
}
],
"indexes": [
{ "Index": "PRIMARY", "Columns": "id,version_id", "Unique": 1 }
],
"relationsFromTable": [
{
"localField": "tax_id",
"foreignSchema": "shopware",
"foreignTable": "tax",
"foreignField": "id"
}
],
"relationsToTable": []
}
]
Fields
| Field | Type | Meaning |
table | string | Table name. |
fields[] | array | Columns, in the order MySQL reports them. |
fields[].Field | string | Column name. |
fields[].Type | string | Column type as MySQL reports it, e.g. "varchar(255)". |
fields[].Null | boolean | Whether the column accepts NULL. |
fields[].Key | string | "PRI", "UNI", "MUL" or empty. |
fields[].Default | string | null | Default value, if any. |
fields[].Extra | string | Extra attributes, e.g. "auto_increment". |
indexes[] | array | Index name, its columns as a comma-separated string, and whether it is unique. |
relationsFromTable[] | array | Foreign keys this table declares, pointing outwards. |
relationsToTable[] | array | Foreign keys other tables declare against this one. |
These files are excluded in robots.txt. That keeps crawlers from
spending their budget on multi-megabyte dumps; it is not a restriction on you.
# every version SWDB knows about
curl -s https://swdb.dev/api/schemas.json
# the newest version's slug
curl -s https://swdb.dev/api/schemas.json \
| jq -r '[.[] | select(.status == "available")] | last | .slug'
# that version's full schema
curl -s https://swdb.dev/api/schemas/6_7_13_1.schema.json \
| jq '.[] | select(.table == "product") | .fields | length'
Using the data
Free to use, including commercially. Attribution is not required but is
appreciated — a link back to swdb.dev helps other developers
find it. The schemas are extracted from publicly available Shopware releases;
SWDB is not affiliated with Shopware AG.
There is no rate limit because there is no server to overload: everything is
static files behind a CDN-friendly cache. Please still fetch the large schema
files once and cache them rather than on every page view.