---
title: "Replace contact topics"
method: PUT
path: "/v1/contacts/{id}/topics"
tags: ["contacts"]
---

# Replace contact topics

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

## Request

- Base URL: `https://api.wraps.dev`
- URL: `https://api.wraps.dev/v1/contacts/{id}/topics`
- Auth: HTTP bearer

Replaces all topic subscriptions for a contact. Use PATCH to add topics without removing existing ones.

## Path parameters

- `id` string, required

## Request body

- object
  - `topicIds` string[]: Topic IDs to subscribe
  - `topicSlugs` string[]: Topic slugs to subscribe

## Response `200`

- object
  - `topics` object[], required
    - `topicId` string, required
    - `topicName` string, required
    - `status` string, required
    - `subscribedAt` string, required
  - `pendingTopics` string[]

## Other responses

- `400`: Malformed request — unparseable body or an invalid parameter.
- `401`: Missing, malformed, or revoked credentials. Send `Authorization: Bearer <api key>`.
- `403`: Authenticated, but the resource belongs to another organization.
- `404`
- `422`: The request parsed but failed schema validation.
- `429`: Rate limit exceeded. Wait for the window named by the RateLimit headers.
- `500`: Unexpected server failure. Safe to retry with backoff; quote `requestId` if it persists.

---

[API](https://skmtc.dev/wraps/apis/wraps-platform-api.md) · [All operations](https://skmtc.dev/wraps/apis/wraps-platform-api/llms.txt) · [OpenAPI document](https://skmtc.dev/wraps/apis/wraps-platform-api/revisions/12116fb21af7?raw)
