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

# Topics

> Organize communication into categories that contacts can subscribe to or opt out of.

Topics represent categories of communication, such as product updates, newsletters, security notices, or account announcements.

They give your team a stable preference model without tying those preferences to a specific campaign or broadcast.

## Topic settings

Each topic has:

* a name,
* an optional description,
* a `default_subscription` of `opt_in` or `opt_out`,
* a visibility of `public` or `private`.

The default subscription determines the starting preference for contacts that do not yet have an explicit subscription for that topic.

## Public and private topics

Visibility describes how a topic is intended to be exposed in preference experiences.

Use public topics for preferences that customers may be allowed to manage themselves. Use private topics for internal or application-controlled categories that should not appear as normal customer-facing choices.

## Topics are not segments

Topics describe **what kind of communication** a contact wants to receive. Segments describe **which contacts belong to a target audience**.

A contact can be in a segment and still be opted out of the relevant topic. That distinction becomes important when determining final delivery eligibility.

## Changing a topic

A topic's name, description, and visibility can change over time. Its `default_subscription` is part of the topic's preference model and should be chosen deliberately when the topic is created.

## Pagination

`GET /topics` uses `limit` and `offset` pagination. It does not use cursor parameters such as `after` or `before`.

* `limit` defaults to `50` when omitted or non-positive.
* A `limit` greater than `100` resets to the default `50` rather than being clamped to `100`.
* `offset` defaults to `0`, and negative values are treated as `0`.
* Malformed integer values for `limit` or `offset` return `400 Bad Request`.

The list response includes `object: "list"`, a `data` array, and `has_more`. The server fetches one extra record internally to determine `has_more` without exposing that lookahead record in the page.

To walk the list, increase `offset` by the number of records returned and continue while `has_more` is `true`.

For endpoint details, request fields, and responses, see the Topics section in the API Reference.
