# List a contact's topics

`GET /v1/contacts/{id}/topics`

Requires an API key with the `contacts:read` scope. [About keys and scopes](/docs/api/authentication)

Any member. Every topic, with whether it reaches this contact.

## Path parameters

- `id` (string, required, uuid)

## Returns

Returns `200 OK`. Otherwise returns an error; [Errors](/docs/api/errors) lists every code and which to retry.

- `id` (string, required, uuid)
- `name` (string, required)
- `description` (string | null, required)
- `mode` (string, required, one of `opt_out`, `opt_in`) — `opt_out` reaches everyone who has not left; `opt_in` only those who joined.
- `createdAt` (string, required, date-time)
- `updatedAt` (string, required, date-time)
- `subscribed` (boolean, required) — Whether campaigns and journey steps on this topic reach the contact.
- `channels` (object, required) — The same per channel: a channel's own choice wins over `subscribed` there.
  - `email` (boolean, required)
  - `push` (boolean, required)

## Example

```bash
curl https://api.kirora.io/v1/contacts/018f2a4e-6b1c-7d3e-9f40-37386ae05a6b/topics \
  -H "Authorization: Bearer $KIRORA_API_KEY"
```

Response `200`:

```json
{
  "data": [
    {
      "id": "018f2a4e-6b1c-7d3e-9f40-37386ae05a6b",
      "name": "Weekend specials",
      "description": "description_example",
      "mode": "opt_out",
      "createdAt": "2030-03-14T09:30:00Z",
      "updatedAt": "2030-03-14T09:30:00Z",
      "subscribed": true,
      "channels": {
        "email": true,
        "push": true
      }
    }
  ]
}
```
