# Get a blog category

**Publié le** : 2026-05-12
**Catégorie** : Storefront API

## `GET /categories/:slug`

**Get a blog category**

Fetch a category by slug and its paginated contents. Envelope
deviates from the `{ data }` wrap: top-level keys are `category`,
`contents` (with its own `{ data, meta }`), and `locale`.

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `slug` | path | string | Yes | URL-friendly identifier, unique per site and locale |
| `page` | query | number | No | Number |
| `limit` | query | number | No | Number <= 500 |
| `locale` | query | string | No | BCP 47 locale code (e.g. "en", "fr") |


### Responses

| Status | Description |
| --- | --- |
| `200` | Successful response |
| `404` | Not found |


> **Notes:** Cache: `Cache-Control: public, max-age=120`. Rate-limit bucket:
> general.

### Examples

```curl
curl "https://api.lynkow.com/public/{siteId}/categories/engineering?page=1&limit=10&locale=en"
```

```javascript
const res = await fetch(`https://api.lynkow.com/public/${siteId}/categories/engineering?page=1&limit=10&locale=en`)
const { category, contents, locale } = await res.json()
```

### Response Example

```json
"{\n  \"category\": {\n    \"id\": \"01J9PA0NZK7BX4HQ7M2DC9V5T8\",\n    \"name\": \"Engineering\",\n    \"slug\": \"engineering\",\n    \"path\": \"/blog/engineering\",\n    \"description\": \"Posts about the engineering team.\",\n    \"image\": \"https://cdn.lynkow.com/sites/acme/cat/engineering.jpg\",\n    \"contentMode\": \"standard\",\n    \"displayOrder\": 1,\n    \"locale\": \"en\"\n  },\n  \"contents\": {\n    \"data\": [\n      {\n        \"id\": \"01J9P1B5N4XZRWQEKM2H6A3T8C\",\n        \"title\": \"How we set our pricing\",\n        \"slug\": \"how-we-set-our-pricing\",\n        \"locale\": \"en\",\n        \"publishedAt\": \"2026-05-05T08:00:00.000Z\"\n      }\n    ],\n    \"meta\": { \"page\": 1, \"perPage\": 10, \"total\": 12, \"lastPage\": 2 }\n  },\n  \"locale\": \"en\"\n}\n"
```

---