---
title: "Subscribe contact to topic"
method: POST
path: "/audience/contacts/{contactId}/topics/{topicId}"
tags: ["Audience"]
---

# Subscribe contact to topic

`POST /audience/contacts/{contactId}/topics/{topicId}`

## Request

- Base URL: `https://app.lettr.com/api`
- URL: `https://app.lettr.com/api/audience/contacts/{contactId}/topics/{topicId}`
- Auth: HTTP bearer

Subscribe a contact to a topic. Returns `201` if the subscription is new, or `200` if the contact was already subscribed. Requires the `audience:write` scope and is blocked for sandbox API keys.

## Path parameters

- `contactId` string, uuid, required
- `topicId` string, uuid, required

## Response `200`

Contact was already subscribed

- AttachContactToTopicResponse
  - `message` string, required

## Other responses

- `201`: Contact subscribed to topic
- `401`: Unauthorized - Missing or invalid API key
- `403`: Forbidden - API key does not have the required scope
- `404`: Resource not found
- `500`: Internal server error
- `503`: Service unavailable - the API key could not be verified, so the request was not processed. This does not mean the key is invalid; retry after the delay given in the Retry-After header.

---

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