curl --request GET \
--url https://{host}/v1/watches/{id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{host}/v1/watches/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{host}/v1/watches/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}import requests
url = "https://{host}/v1/watches/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": {
"type": "watches",
"id": "91827",
"attributes": {
"reference": "116610LN",
"name": "Rolex Submariner Date",
"description": "Full set, bought new in 2019 and worn sparingly.",
"translatedDescription": "Full set, bought new in 2019 and worn sparingly.",
"price": 1295000,
"shippingCosts": 0,
"priceOnRequest": false,
"applicationFee": null,
"box": true,
"warranty": true,
"papers": true,
"status": "available",
"reviewNote": null,
"reserved": false,
"feedManaged": false,
"minimumProposal": 1165500,
"agreedPrice": null,
"favorited": false,
"viewerOrder": null,
"webUrl": "https://wristler.eu/watches/91827-rolex-submariner-date-116610ln",
"purchasable": true,
"availabilityOnRequest": false,
"productSafety": {
"articleType": "Watch",
"brand": "Rolex",
"reference": "116610LN",
"manufacturer": {
"name": "Rolex SA",
"addressLine1": "Rue François-Dussaud 3",
"addressLine2": null,
"zipcode": "1211",
"city": "Geneva",
"country": "CH",
"email": null,
"website": "https://www.rolex.com",
"phone": null
},
"euResponsibleRequired": true,
"euResponsible": null
},
"manufacturerWarranty": {
"years": 5,
"transferable": true,
"text": "The manufacturer offers a 5-year international warranty from the warranty activation date, transferable within that period. This date can differ from the year of production, so the remaining warranty depends on this specific watch; see its papers."
},
"referencedWatchUuid": "3f7c1e02-8a11-4a7b-9f0e-2c6d5b4a1e93",
"specifications": {
"CONDITION": "VERY_GOOD",
"CASE_MATERIAL": "STEEL"
},
"specificationLabels": {
"CONDITION": {
"label": "Condition",
"value": "Very good"
},
"CASE_MATERIAL": {
"label": "Case material",
"value": "Steel"
}
},
"createdAt": "2026-08-04T08:21:00.000000Z",
"updatedAt": "2026-09-19T12:02:11.000000Z"
},
"links": {
"self": "https://api.wristler.eu/v1/watches/91827"
}
}
}{
"errors": [
{
"status": "404",
"code": "watch_reserved",
"title": "Not Found",
"detail": "<string>",
"meta": {},
"source": {
"pointer": "/data/attributes/reference",
"parameter": "<string>"
}
}
],
"jsonapi": {
"version": "1.0"
}
}{
"errors": [
{
"status": "404",
"code": "watch_reserved",
"title": "Not Found",
"detail": "<string>",
"meta": {},
"source": {
"pointer": "/data/attributes/reference",
"parameter": "<string>"
}
}
],
"jsonapi": {
"version": "1.0"
}
}Show catalogue listing
Scope: catalogue:read
What the catalogue lists: a listing for sale (status: available) at a shop that is
open and can take payments. Anything else — a draft, something sold, something in
review, or a listing for sale at a shop that has closed or cannot take payments yet —
answers 404 here to anybody but the business it belongs to, which reads it at
/v1/sellers/{sellerId}/watches/{id}. A listing served here can still be
purchasable: false: a watch on request is bought through the shop’s offer.
The description and the seller’s own identifiers are the seller’s: to anyone else this address returns the published listing and nothing more.
curl --request GET \
--url https://{host}/v1/watches/{id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{host}/v1/watches/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{host}/v1/watches/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}import requests
url = "https://{host}/v1/watches/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": {
"type": "watches",
"id": "91827",
"attributes": {
"reference": "116610LN",
"name": "Rolex Submariner Date",
"description": "Full set, bought new in 2019 and worn sparingly.",
"translatedDescription": "Full set, bought new in 2019 and worn sparingly.",
"price": 1295000,
"shippingCosts": 0,
"priceOnRequest": false,
"applicationFee": null,
"box": true,
"warranty": true,
"papers": true,
"status": "available",
"reviewNote": null,
"reserved": false,
"feedManaged": false,
"minimumProposal": 1165500,
"agreedPrice": null,
"favorited": false,
"viewerOrder": null,
"webUrl": "https://wristler.eu/watches/91827-rolex-submariner-date-116610ln",
"purchasable": true,
"availabilityOnRequest": false,
"productSafety": {
"articleType": "Watch",
"brand": "Rolex",
"reference": "116610LN",
"manufacturer": {
"name": "Rolex SA",
"addressLine1": "Rue François-Dussaud 3",
"addressLine2": null,
"zipcode": "1211",
"city": "Geneva",
"country": "CH",
"email": null,
"website": "https://www.rolex.com",
"phone": null
},
"euResponsibleRequired": true,
"euResponsible": null
},
"manufacturerWarranty": {
"years": 5,
"transferable": true,
"text": "The manufacturer offers a 5-year international warranty from the warranty activation date, transferable within that period. This date can differ from the year of production, so the remaining warranty depends on this specific watch; see its papers."
},
"referencedWatchUuid": "3f7c1e02-8a11-4a7b-9f0e-2c6d5b4a1e93",
"specifications": {
"CONDITION": "VERY_GOOD",
"CASE_MATERIAL": "STEEL"
},
"specificationLabels": {
"CONDITION": {
"label": "Condition",
"value": "Very good"
},
"CASE_MATERIAL": {
"label": "Case material",
"value": "Steel"
}
},
"createdAt": "2026-08-04T08:21:00.000000Z",
"updatedAt": "2026-09-19T12:02:11.000000Z"
},
"links": {
"self": "https://api.wristler.eu/v1/watches/91827"
}
}
}{
"errors": [
{
"status": "404",
"code": "watch_reserved",
"title": "Not Found",
"detail": "<string>",
"meta": {},
"source": {
"pointer": "/data/attributes/reference",
"parameter": "<string>"
}
}
],
"jsonapi": {
"version": "1.0"
}
}{
"errors": [
{
"status": "404",
"code": "watch_reserved",
"title": "Not Found",
"detail": "<string>",
"meta": {},
"source": {
"pointer": "/data/attributes/reference",
"parameter": "<string>"
}
}
],
"jsonapi": {
"version": "1.0"
}
}Authorizations
Headers
The language to answer in: specificationLabels, translatedDescription, facet
and label names, the content pages, and every other translated word in the
answer. Read on every request, whatever the endpoint. One we do not have falls
back to English rather than failing.
en, nl, de, es, fr, it, pt, fi, pl Query Parameters
Related resources to return alongside. Combine them with commas —
include=images,watchModel. Anything else is refused with 400 rather than
ignored.
favorite is the viewer's own favorite of this listing, or null. Ask for
it when you draw a heart that has to be able to turn itself off: removing a
favorite needs its id, and without this a client has to fetch somebody's whole
list to find one. favorited is the cheaper read when the heart is all you are
drawing.
seller, watchModel, images, cover, favorite