> ## Documentation Index
> Fetch the complete documentation index at: https://docs.drin.run/llms.txt
> Use this file to discover all available pages before exploring further.

# Resubscribe a contact

> POST /v1/contacts/{id}/resubscribe — opt a contact back in, setting subscribed to true and clearing unsubscribedAt.

A convenience flip that opts a contact back in: sets subscribed to true and clears unsubscribedAt.

**`POST /v1/contacts/{id}/resubscribe`**

## Path parameters

<ParamField body="id" type="string" required>
  The contact id to opt back in.
</ParamField>

This endpoint takes no request body.

<Warning>
  **Only with explicit consent.** Re-subscribing flips an app-level flag, but it does not give you permission to email someone who asked to stop. Re-subscribe only when the contact has explicitly opted back in.
</Warning>

## Request

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.drin.run/v1/contacts/ct_7Yh2Lp/resubscribe \
    -H "Authorization: Bearer $DRIN_API_KEY"
  ```

  ```typescript Node.js theme={null}
  import { DrinClient } from "@drin00/sdk";

  const drin = new DrinClient({ apiKey: process.env.DRIN_API_KEY });

  const contact = await drin.contacts.resubscribe("ct_7Yh2Lp");
  console.log(contact.subscribed);      // true
  console.log(contact.unsubscribedAt);  // null
  ```
</CodeGroup>

## Response

Returns `200 OK` with the contact, now showing `subscribed: true` and `unsubscribedAt: null`. The call is idempotent. An unknown id returns `404 not_found`.

```json 200 OK theme={null}
{
  "id": "ct_7Yh2Lp",
  "email": "ada@example.com",
  "firstName": "Ada",
  "lastName": "Lovelace",
  "subscribed": true,
  "unsubscribedAt": null,
  "metadata": { "plan": "pro" },
  "createdAt": "2026-06-02T17:30:00.000Z",
  "updatedAt": "2026-06-02T18:20:05.000Z"
}
```
