Cardmarket API endpoint
Reads the public singles, non-singles, or global accessories export and applies local name/category/expansion filters. Category and expansion IDs and labels are discovered from the complete selected file. Game IDs 26-33 have price guides but no verified catalogue files. The response is a catalogue snapshot, not current seller offers.
/cardmarket/catalogQuery parameters:
kind: singles, nonsingles, or accessories; defaults to singles.game_id: required for singles and nonsingles; accepted values are 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, and 25. Omit it for global accessories.category_id: optional current category ID discovered through /api/v1/cardmarket/catalog/categories. The response also includes current category IDs and labels.expansion_id: optional current expansion ID discovered through /api/v1/cardmarket/catalog/categories. The response also includes all expansion IDs in the file; an upstream display label is included when present in that file.q: optional case-insensitive substring match against product names; maximum 200 characters.limit: 1–500 rows; defaults to 100.offset: zero-based; defaults to 0.Filters are applied locally over the complete downloaded file. The response is a product catalogue snapshot, not current seller offers. Game IDs 26–33 have price guides but no verified products catalogue. Full-file refreshes are cached for 12 hours, with a stale snapshot served if upstream refresh fails.
Example response (one product row shown; the live response includes every discovered category and expansion, with their exact counts):
{
"code": 200,
"msg": "OK",
"data": {
"kind": "singles",
"game_id": 6,
"source_url": "https://downloads.s3.cardmarket.com/productCatalog/productList/products_singles_6.json",
"version": 1,
"created_at": "2026-10-27T13:57:38+0100",
"fetched_at": "2026-10-28T00:00:00Z",
"stale": false,
"categories": [{"id": 51, "name": "Pokémon Single", "product_count": 75066}],
"expansions": [{"id": 1585, "product_count": 100}],
"items": [{"id": 273532, "name": "Weedle [Multiply]", "category_id": 51, "category": "Pokémon Single", "expansion_id": 1585, "metacard_id": 340471}],
"total": 75066,
"limit": 100,
"offset": 0
}
}
| Field | Filled in, of 40 checked | Values in the sample |
|---|---|---|
| id | 40 | |
| name | 40 | “Weedle [Multiply]” and 39 other values |
| category_id | 40 | |
| category | 40 | Pokémon Single in all 40 |
| expansion_id | 40 | |
| metacard_id | 40 | |
| date_added | 40 | 0000-00-00 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| kind | string | No | singles | Catalogue file type; defaults to singles Allowed values: singles, nonsingles, accessories. | singles |
| game_id | integer | No | Required for singles/nonsingles; omit for global accessories Allowed values: 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25. | 6 | |
| category_id | integer | No | Optional current category ID; discover the full set with /cardmarket/catalog/categories | 51 | |
| expansion_id | integer | No | Optional current expansion ID; discover the full set with /cardmarket/catalog/categories | 1585 | |
| q | string | No | Optional case-insensitive local product-name substring, up to 200 characters | pikachu | |
| limit | integer | No | 100 | Rows per page, 1-500; defaults to 100 | 100 |
| offset | integer | No | 0 | Zero-based offset; defaults to 0 | 0 |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/cardmarket/catalog?kind=singles&game_id=1&q=coffee&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"kind": "singles",
"game_id": 6,
"source_url": "https://downloads.s3.cardmarket.com/productCatalog/productList/products_singles_6.json",
"version": 1,
"created_at": "2026-10-27T13:57:38+0100",
"fetched_at": "2026-10-28T00:00:00Z",
"stale": false,
"categories": [
{
"id": 51,
"name": "Pokémon Single",
"product_count": 75066
}
],
"expansions": [
{
"id": 1585,
"product_count": 100
}
],
"items": [
{
"id": 273532,
"name": "Weedle [Multiply]",
"category_id": 51,
"category": "Pokémon Single",
"expansion_id": 1585,
"metacard_id": 340471
}
],
"total": 75066,
"limit": 100,
"offset": 0
}
}Request schema
No body schema
Response schema
#/definitions/cardmarket.catalogResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | cardmarket.CatalogResponse | No | ||||
| data.categories | array | No | ||||
| data.categories[].id | integer | No | ||||
| data.categories[].name | string | No | ||||
| data.categories[].product_count | integer | No | ||||
| data.category_id | integer | No | ||||
| data.created_at | string | No | ||||
| data.empty_state | string | No | ||||
| data.expansion_id | integer | No | ||||
| data.expansions | array | No | ||||
| data.expansions[].id | integer | No | ||||
| data.expansions[].name | string | No | ||||
| data.expansions[].product_count | integer | No | ||||
| data.fetched_at | string | No | ||||
| data.game_id | integer | No | ||||
| data.items | array | No | ||||
| data.items[].category | string | No | ||||
| data.items[].category_id | integer | No | ||||
| data.items[].date_added | string | No | ||||
| data.items[].expansion | string | No | ||||
| data.items[].expansion_id | integer | No | ||||
| data.items[].id | integer | No | ||||
| data.items[].metacard_id | integer | No | ||||
| data.items[].name | string | No | ||||
| data.kind | string | No | ||||
| data.limit | integer | No | ||||
| data.offset | integer | No | ||||
| data.q | string | No | ||||
| data.source_url | string | No | ||||
| data.stale | boolean | No | ||||
| data.total | integer | No | ||||
| data.version | integer | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/cardmarket/catalog?kind=singles&game_id=1&q=coffee&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"