---
title: "Set a contact's topic preference (alias of POST)"
method: PUT
path: "/contacts/{id}/topics"
tags: ["Topics"]
---

# Set a contact's topic preference (alias of POST)

`PUT /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

Identical to [Set a contact's topic preference](#post-contacts-id-topics) — provided so clients that prefer `PUT` semantics for an upsert can use it interchangeably. Requires the `topics:write` capability.

## Request body

- ContactTopicSet
  - `topic_id` string
  - `topic` string
  - `subscribed` boolean, required

## Response `201`

The resolved subscription.

- ContactTopic
  - `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 or topic not found.
- `422`: Validation error.

---

[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)
