---
title: "Post Site Summary Unsubscribe"
method: POST
path: "/site-summaries/unsubscribe"
tags: ["site summaries"]
---

# Post Site Summary Unsubscribe

`POST /site-summaries/unsubscribe`

## Request

- Base URL: `https://api.verdun.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.verdun.ai/site-summaries/unsubscribe`
- Auth: none declared

Flip `daily_summary_opt_out`. Idempotent.

THE TOKEN MAY ARRIVE TWO WAYS (amendment A6). RFC 8058 one-click POSTs to
the `List-Unsubscribe` URL itself with the body `List-Unsubscribe=One-Click`
— so the token is in the QUERY STRING and the body carries no token at all.
The confirm form in the GET page posts it as a field. The query wins when
both are present, because that is the URL we signed into the header.

THE RESPONSE IS THE SAME PAGE FOR EVERY OUTCOME — valid, expired, forged,
a contact row that no longer exists, and (R6.5) a contact row whose e-mail
has since been changed to somebody else's. Anything else makes this an
oracle for "was this token ever real", which is a statement about a real
customer's address, answerable by anyone who can guess.

## Query parameters

- `token` string: Unsubscribe token; RFC 8058 one-click posts to the List-Unsubscribe URL, so it arrives here.

## Request body `application/x-www-form-urlencoded`

- BodyPostSiteSummaryUnsubscribeSiteSummariesUnsubscribePost
  - `token` string, nullable

## Response `200`

Successful Response

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/verdun/apis/verdun-api.md) - [All operations](https://skmtc.dev/verdun/apis/verdun-api/llms.txt) - [OpenAPI document](https://skmtc.dev/verdun/apis/verdun-api/revisions/35a2a6ebedda?raw)
