Queek docs
Storefront endpoint reference

Posts

GET
/store/posts

Published posts, paginated; filter by category or tag. Fetch one with posts/{slug}.

Authorization

clientKey
X-Client-Key<token>

The store's API key (Dashboard → Settings → API keys). pk_live_… public keys are for browser code and only work from an origin on the key's allowlist; sk_live_… private keys are for servers and native apps and need no Origin.

In: header

Query Parameters

tag?|
Lengthlength <= 100
category?|
Lengthlength <= 140
per_page?|
Range1 <= value <= 50
page?string
starting_after?string

Keyset cursor: pass the previous page next_cursor. Walk while has_more is true; a stale, tampered, cross-list or filter-changed cursor answers 422 starting_after_invalid. Never combine with page.

limit?integer

Items per read (alias of per_page, max 50). page mode caps at page 50 (page_too_deep); walk the cursor past that.

locale?string

Render this read in a published store locale (see GET store/locales). Unknown or unpublished codes fall back to the primary locale; the answer carries the locale used in Content-Language.

Header Parameters

X-Client-Key*string

Your store API key (Dashboard → Settings → API keys). pk_live_… public keys are for browser code and only work from an origin on the key's allowlist; sk_live_… private keys are for servers and native apps and need no Origin.

X-Request-Id?string

Your own correlation id (8–128 chars, ^[A-Za-z0-9_.:-]+$). Echoed back on the response and on every log line of the request; one is generated when you omit it.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/store/posts?tag=ankara&category=style-notes&per_page=12&limit=15" \  -H "X-Client-Key: {{clientKey}}"
{  "status": "success",  "message": "Store posts retrieved",  "data": [    {      "id": "019b0c4d-5e6f-7a8b-9c0d-1e2f3a4b5c73",      "type": "post",      "template": null,      "slug": "how-to-style-ankara",      "title": "How to style ankara without looking costumey",      "content": [        {          "type": "content",          "data": {            "markdown": "Rule one: one print at a time. Rule two: modern shoes. Rule three: confidence."          }        }      ],      "media_index": {},      "excerpt": "Three rules for modern ankara.",      "cover_image_url": "https://media.usequeek.com/uploads/stores/2207/posts/ankara-style.jpg",      "cover_image_variants": null,      "tags": [        "ankara",        "style"      ],      "seo": {        "title": "How to style ankara | Zuri Atelier",        "description": "Three rules for modern ankara."      },      "blog_categories": [        {          "name": "Style Notes",          "slug": "style-notes"        }      ],      "reading_time": 1,      "author": {        "name": "Zuri Atelier",        "avatar_url": "https://media.usequeek.com/uploads/stores/2207/logo.png"      },      "is_home": false,      "chrome": "full",      "show_page_title": true,      "status": "published",      "position": 1,      "published_at": "2026-09-12T07:00:00.000000Z",      "created_at": "2026-09-10T15:20:00.000000Z",      "updated_at": "2026-09-12T07:00:00.000000Z"    },    {      "id": "019b0c4d-5e6f-7a8b-9c0d-1e2f3a4b5c74",      "type": "post",      "template": null,      "slug": "cotton-vs-ankara",      "title": "Cotton vs ankara: what we cut and why",      "content": [        {          "type": "content",          "data": {            "markdown": "Zuri Atelier cuts every piece in our Lekki atelier."          }        }      ],      "media_index": {},      "excerpt": "Fabric notes from the atelier.",      "cover_image_url": "https://media.usequeek.com/uploads/stores/2207/posts/fabric.jpg",      "cover_image_variants": null,      "tags": [        "fabric"      ],      "seo": {        "title": "Cotton vs ankara | Zuri Atelier",        "description": "Fabric notes from the atelier."      },      "blog_categories": [        {          "name": "Fabric Guide",          "slug": "fabric-guide"        }      ],      "reading_time": 1,      "author": {        "name": "Zuri Atelier",        "avatar_url": "https://media.usequeek.com/uploads/stores/2207/logo.png"      },      "is_home": false,      "chrome": "full",      "show_page_title": true,      "status": "published",      "position": 2,      "published_at": "2026-09-05T07:00:00.000000Z",      "created_at": "2026-09-03T15:20:00.000000Z",      "updated_at": "2026-09-05T07:00:00.000000Z"    }  ],  "has_more": false,  "next_cursor": null}
GET
/store/posts/{slug}

A published post by slug with its cover image, excerpt and content[] blocks.

Authorization

clientKey
X-Client-Key<token>

The store's API key (Dashboard → Settings → API keys). pk_live_… public keys are for browser code and only work from an origin on the key's allowlist; sk_live_… private keys are for servers and native apps and need no Origin.

In: header

Path Parameters

slug*string

Query Parameters

locale?string

Render this read in a published store locale (see GET store/locales). Unknown or unpublished codes fall back to the primary locale; the answer carries the locale used in Content-Language.

Header Parameters

X-Client-Key*string

Your store API key (Dashboard → Settings → API keys). pk_live_… public keys are for browser code and only work from an origin on the key's allowlist; sk_live_… private keys are for servers and native apps and need no Origin.

X-Request-Id?string

Your own correlation id (8–128 chars, ^[A-Za-z0-9_.:-]+$). Echoed back on the response and on every log line of the request; one is generated when you omit it.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/store/posts/how-to-style-ankara" \  -H "X-Client-Key: {{clientKey}}"
{  "status": "success",  "message": "Store post retrieved",  "data": {    "id": "019b0c4d-5e6f-7a8b-9c0d-1e2f3a4b5c73",    "type": "post",    "template": null,    "slug": "how-to-style-ankara",    "title": "How to style ankara without looking costumey",    "content": [      {        "type": "content",        "data": {          "markdown": "Rule one: one print at a time. Rule two: modern shoes. Rule three: confidence."        }      }    ],    "media_index": {},    "excerpt": "Three rules for modern ankara.",    "cover_image_url": "https://media.usequeek.com/uploads/stores/2207/posts/ankara-style.jpg",    "cover_image_variants": null,    "tags": [      "ankara",      "style"    ],    "seo": {      "title": "How to style ankara | Zuri Atelier",      "description": "Three rules for modern ankara."    },    "blog_categories": [      {        "name": "Style Notes",        "slug": "style-notes"      }    ],    "reading_time": 1,    "author": {      "name": "Zuri Atelier",      "avatar_url": "https://media.usequeek.com/uploads/stores/2207/logo.png"    },    "is_home": false,    "chrome": "full",    "show_page_title": true,    "status": "published",    "position": 1,    "published_at": "2026-09-12T07:00:00.000000Z",    "created_at": "2026-09-10T15:20:00.000000Z",    "updated_at": "2026-09-12T07:00:00.000000Z",    "related": [      {        "id": "019b0c4d-5e6f-7a8b-9c0d-1e2f3a4b5c74",        "type": "post",        "template": null,        "slug": "cotton-vs-ankara",        "title": "Cotton vs ankara: what we cut and why",        "content": [          {            "type": "content",            "data": {              "markdown": "Zuri Atelier cuts every piece in our Lekki atelier."            }          }        ],        "media_index": {},        "excerpt": "Fabric notes from the atelier.",        "cover_image_url": "https://media.usequeek.com/uploads/stores/2207/posts/fabric.jpg",        "cover_image_variants": null,        "tags": [          "fabric"        ],        "seo": {          "title": "Cotton vs ankara | Zuri Atelier",          "description": "Fabric notes from the atelier."        },        "blog_categories": [          {            "name": "Fabric Guide",            "slug": "fabric-guide"          }        ],        "reading_time": 1,        "author": {          "name": "Zuri Atelier",          "avatar_url": "https://media.usequeek.com/uploads/stores/2207/logo.png"        },        "is_home": false,        "chrome": "full",        "show_page_title": true,        "status": "published",        "position": 2,        "published_at": "2026-09-05T07:00:00.000000Z",        "created_at": "2026-09-03T15:20:00.000000Z",        "updated_at": "2026-09-05T07:00:00.000000Z"      }    ]  }}