---
title: "Mint a preference-center link for a contact"
method: POST
path: "/contacts/{id}/preferences-link"
tags: ["Contacts"]
---

# Mint a preference-center link for a contact

`POST /contacts/{id}/preferences-link`

## Request

- Base URL: `https://api.mepmail.dev`
- URL: `https://api.mepmail.dev/contacts/{id}/preferences-link`
- Auth: HTTP bearer

MepMail extension. Returns the contact's hosted preferences URL, the same page the unsubscribe links in their emails open, so a product settings screen can deep-link into it. The page lists the team's public topics and carries the global unsubscribe. The link is a signed, contact-scoped capability with no expiry: anyone holding it can change that contact's preferences, so hand it only to the contact.

## Path parameters

- `id` string, required

## Response `200`

The contact's preference page URL

- ContactPreferencesLinkResponse
  - `object` 'preferences_link', required
  - `contact` string, uuid, required
  - `url` string, uri, required: The contact's hosted preference page; no expiry, treat as a secret

## Other responses

- `401`: Missing, malformed or invalid API key
- `404`: Not found
- `422`: APP_BASE_URL or the encryption key is not configured
- `429`: Rate limit exceeded: 600 requests per minute per API key and 3,000 per team; wait for Retry-After

---

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