---
title: "List a contact's topic subscriptions"
method: GET
path: "/contacts/{id}/topics"
tags: ["Topics"]
---

# List a contact's topic subscriptions

`GET /contacts/{id}/topics`

## Request

- Base URL: `https://www.unitpost.com/api/v1`
- URL: `https://www.unitpost.com/api/v1/contacts/{id}/topics`
- Auth: HTTP bearer

Retrieve a contact's effective subscription state for every active topic, cursor-paginated. Each row resolves the contact's explicit preference against the topic's `default_opt_in`, so `subscribed` is always the answer to "would this contact receive a campaign scoped to this topic?". Change a preference with [Set a contact's topic preference](#post-contacts-id-topics). Requires the `topics:read` capability.

## Query parameters

- `limit` integer
- `after` string
- `before` string

## Response `200`

A page of the contact's topic subscriptions.

- object
  - `object` 'list', required
  - `has_more` boolean, required
  - `data` ContactTopic[], required
    - `object` 'contact_topic', required
    - `topic_id` string, required
    - `channel` 'email' | 'sms', required: The topic's channel: manage it under `/email/topics` or `/sms/topics`.
    - `subscribed` boolean, required
    - `status` 'subscribed' | 'unsubscribed', required
    - `source` 'user' | 'manual' | 'import' | 'api', required

## Other responses

- `401`: Missing or invalid API key.
- `404`: Contact not found.
- `422`: Invalid pagination params.

---

[API](https://skmtc.dev/unitpost/apis/unitpost-api.md) · [All operations](https://skmtc.dev/unitpost/apis/unitpost-api/llms.txt) · [OpenAPI document](https://skmtc.dev/unitpost/apis/unitpost-api/revisions/86ff7c890967?raw)
