> ## Documentation Index
> Fetch the complete documentation index at: https://docs.publica.la/llms.txt
> Use this file to discover all available pages before exploring further.

# List Add-ons

Retrieve every add-on of a product you own, drafts included.

## Endpoint

```
GET /api/v3/content/{content}/add-ons
```

`{content}` is the product's internal ID, or any of its identifiers with `id_type=external`.

---

## Query Parameters

### Product lookup

| Parameter | Type   | Default    | Description                                        |
| --------- | ------ | ---------- | -------------------------------------------------- |
| `id_type` | string | `internal` | `internal` (product ID) or `external` (identifier) |

### Pagination

| Parameter  | Type    | Default | Description                                    |
| ---------- | ------- | ------- | ---------------------------------------------- |
| `per_page` | integer | 100     | Items per page (1-500)                         |
| `cursor`   | string  | -       | Cursor token from `links.next` or `links.prev` |

### Sorting

| Parameter | Type   | Default      | Description                                |
| --------- | ------ | ------------ | ------------------------------------------ |
| `sort`    | string | `start_page` | Sort field. Prefix with `-` for descending |

**Allowed sort fields:** `start_page`, `created_at`, `updated_at`

### Filters

| Parameter        | Type   | Description                                    |
| ---------------- | ------ | ---------------------------------------------- |
| `filter[status]` | string | `draft` or `published`                         |
| `filter[type]`   | string | `article`, `audio`, `video`, `image` or `link` |

### Fields Selection

| Parameter | Type   | Description                              |
| --------- | ------ | ---------------------------------------- |
| `fields`  | string | Comma-separated list of fields to return |

---

## Request Examples

```bash
# All add-ons of publication 123, in reading order
curl -X GET "https://yourstore.publica.la/api/v3/content/123/add-ons" \
  -H "X-User-Token: your-api-token"

# Only drafts, by external identifier
curl -X GET "https://yourstore.publica.la/api/v3/content/9789561234567/add-ons?id_type=external&filter[status]=draft" \
  -H "X-User-Token: your-api-token"

# Trimmed payload
curl -X GET "https://yourstore.publica.la/api/v3/content/123/add-ons?fields=id,title,status,start_page" \
  -H "X-User-Token: your-api-token"
```

## Response

```json
{
  "data": [
    {
      "id": "1044",
      "content_id": "123",
      "title": "Interview with the author",
      "pretitle": null,
      "author": null,
      "by_line": null,
      "type": "article",
      "body": "<p>…</p>",
      "body_format": "html",
      "image_url": null,
      "image_caption": null,
      "start_page": 3,
      "end_page": 3,
      "location_in_start_page": { "x": 25.5, "y": 40 },
      "anchor": { "type": "point", "page": 3, "point": { "x": 25.5, "y": 40 } },
      "status": "draft",
      "created_at": "2026-08-13T14:05:00.000000Z",
      "updated_at": "2026-08-13T14:05:00.000000Z"
    }
  ],
  "links": {
    "next": "https://yourstore.publica.la/api/v3/content/123/add-ons?cursor=eyJ...",
    "prev": null
  },
  "meta": {
    "has_more": true
  }
}
```

:::info Owners see drafts
This endpoint returns add-ons in every status. Drafts are hidden from **readers** (web reader, apps, offline downloads), never from the owner managing them.
:::

## Errors

| Status | Condition                                                                                       |
| ------ | ----------------------------------------------------------------------------------------------- |
| `401`  | Missing or invalid `X-User-Token`                                                               |
| `403`  | Add-ons feature not enabled, non-administrator token, or the product is not owned by your store |
| `404`  | Product not found                                                                               |
| `422`  | Invalid query parameter (unknown sort field, invalid filter value)                              |
