curl --request GET \
--url https://{host}/v1/watches/{id}/related \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{host}/v1/watches/{id}/related', 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}/related",
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}/related"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"type": "watches",
"id": "91912",
"attributes": {
"reference": "126610LN",
"name": "Rolex Submariner Date",
"description": "Box and papers, 2021.",
"translatedDescription": "Box and papers, 2021.",
"price": 1420000,
"shippingCosts": 0,
"priceOnRequest": false,
"applicationFee": null,
"box": true,
"warranty": true,
"papers": true,
"status": "available",
"reviewNote": null,
"reserved": false,
"feedManaged": false,
"minimumProposal": null,
"agreedPrice": null,
"favorited": false,
"viewerOrder": null,
"webUrl": "https://wristler.eu/watches/91912-rolex-submariner-date-126610ln",
"purchasable": false,
"availabilityOnRequest": true,
"referencedWatchUuid": null,
"specifications": {
"AVAILABILITY": "ON_REQUEST",
"CONDITION": "VERY_GOOD"
},
"specificationLabels": {
"AVAILABILITY": {
"label": "Availability",
"value": "On request"
},
"CONDITION": {
"label": "Condition",
"value": "Very good"
}
},
"createdAt": "2026-09-02T06:12:00.000000Z",
"updatedAt": "2026-09-30T14:40:27.000000Z"
}
}
]
}{
"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"
}
}List related listings
Scope: catalogue:read
What else somebody might want, under the listing they are looking at: up to eight, the same ones the website shows and worked out the same way — the same brand, reference and dial first, then the same reference, then the same model, then the same brand, widening until there are enough. Worked out once a day per listing, as on the website.
A listing that is not for sale has no page to hang this off, so it answers
404.
curl --request GET \
--url https://{host}/v1/watches/{id}/related \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{host}/v1/watches/{id}/related', 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}/related",
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}/related"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"type": "watches",
"id": "91912",
"attributes": {
"reference": "126610LN",
"name": "Rolex Submariner Date",
"description": "Box and papers, 2021.",
"translatedDescription": "Box and papers, 2021.",
"price": 1420000,
"shippingCosts": 0,
"priceOnRequest": false,
"applicationFee": null,
"box": true,
"warranty": true,
"papers": true,
"status": "available",
"reviewNote": null,
"reserved": false,
"feedManaged": false,
"minimumProposal": null,
"agreedPrice": null,
"favorited": false,
"viewerOrder": null,
"webUrl": "https://wristler.eu/watches/91912-rolex-submariner-date-126610ln",
"purchasable": false,
"availabilityOnRequest": true,
"referencedWatchUuid": null,
"specifications": {
"AVAILABILITY": "ON_REQUEST",
"CONDITION": "VERY_GOOD"
},
"specificationLabels": {
"AVAILABILITY": {
"label": "Availability",
"value": "On request"
},
"CONDITION": {
"label": "Condition",
"value": "Very good"
}
},
"createdAt": "2026-09-02T06:12:00.000000Z",
"updatedAt": "2026-09-30T14:40:27.000000Z"
}
}
]
}{
"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 Response
Up to eight listings.