---
title: "Subscribe an address to THE SIGNAL"
method: POST
path: "/api/newsletter/subscribe"
tags: ["newsletter"]
---

# Subscribe an address to THE SIGNAL

`POST /api/newsletter/subscribe`

## Request

- Base URL: `https://www.immersivecommons.com`
- URL: `https://www.immersivecommons.com/api/newsletter/subscribe`
- Auth: none required

Public, anonymous. SINGLE OPT-IN: `consent` must be literally true - it is the checkbox, not a default. `company` is a HONEYPOT and must be empty; a trip returns a FAKE success so a bot cannot distinguish accept from reject. Rate limited per source IP per hour. Re-subscribing an existing address answers 200 with `already:true`.

## Request body

- NewsletterSubscribeRequest
  - `email` string, required: Valid address, at most 254 characters.
  - `consent` true, required: MUST be true. Single opt-in — this is the checkbox, not a default.
  - `source` 'newsletter_footer' | 'newsletter_index' | 'issue_page'
  - `company` string: HONEYPOT. Must be empty. A trip returns a FAKE success so a bot cannot tell accept from reject.

## Response `200`

Subscribed (or already on the list).

- NewsletterSubscribeResponse
  - `ok` boolean, required
  - `status` 'subscribed', required
  - `already` boolean: The address was already on the list.
  - `message` string

## Other responses

- `400`: Invalid email, consent not given, or a malformed body.
- `429`: Per-IP hourly cap exceeded.
- `500`: Persistence failed.

---

[API](https://skmtc.dev/immersivecommons/apis/immersive-commons-agent-rest-api.md) · [All operations](https://skmtc.dev/immersivecommons/apis/immersive-commons-agent-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/immersivecommons/apis/immersive-commons-agent-rest-api/revisions/be67c1f67c27?raw)
