curl --request GET \
--url https://{host}/v1/articles \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{host}/v1/articles', 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/articles",
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/articles"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"type": "articles",
"id": "1188",
"attributes": {
"name": "How to spot a fake",
"slug": "how-to-spot-a-fake",
"locale": "en",
"excerpt": "Six things a counterfeiter almost never gets right.",
"type": "default",
"seoTitle": "How to spot a fake watch",
"seoDescription": "Six things a counterfeiter almost never gets right.",
"robots": "index, follow",
"featured": true,
"url": "https://wristler.eu/insights/how-to-spot-a-fake",
"image": "https://cdn.wristler.eu/insights/fake-hero.jpg",
"publishedAt": "2026-09-12T06:00:00.000000Z",
"updatedAt": "2026-09-14T09:31:00.000000Z",
"blocks": null
}
}
],
"meta": {
"page": {
"currentPage": 1,
"from": 1,
"lastPage": 9,
"perPage": 25,
"to": 25,
"total": 214
}
}
}{
"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 Insights
Scope: content:read
Newest first. blocks is null here — a card shows the excerpt — and is
filled in when the article itself is asked for.
filter[q] is the autocomplete, the other half of the one on
/v1/filter-pages. Ask both and you have the website’s dropdown.
Nothing unpublished, including something published for next Tuesday.
curl --request GET \
--url https://{host}/v1/articles \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{host}/v1/articles', 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/articles",
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/articles"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"type": "articles",
"id": "1188",
"attributes": {
"name": "How to spot a fake",
"slug": "how-to-spot-a-fake",
"locale": "en",
"excerpt": "Six things a counterfeiter almost never gets right.",
"type": "default",
"seoTitle": "How to spot a fake watch",
"seoDescription": "Six things a counterfeiter almost never gets right.",
"robots": "index, follow",
"featured": true,
"url": "https://wristler.eu/insights/how-to-spot-a-fake",
"image": "https://cdn.wristler.eu/insights/fake-hero.jpg",
"publishedAt": "2026-09-12T06:00:00.000000Z",
"updatedAt": "2026-09-14T09:31:00.000000Z",
"blocks": null
}
}
],
"meta": {
"page": {
"currentPage": 1,
"from": 1,
"lastPage": 9,
"perPage": 25,
"to": 25,
"total": 214
}
}
}{
"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
Typed text, for an autocomplete — the other half of the website's search
bar, which offers pages and Insights together. Same index and same
relevance threshold as /v1/filter-pages, newest first among what matched.
blocks is null, as in any list. Three is what the website shows.
While searching, sort and the other filters are not applied. If the index
cannot be reached the answer is 503 search_unavailable, never an empty page.
Response
A page of articles.