---
title: "Subscribe to the blog newsletter (sends a confirmation email; double opt-in)"
method: POST
path: "/v1/newsletter"
tags: ["public"]
---

# Subscribe to the blog newsletter (sends a confirmation email; double opt-in)

`POST /v1/newsletter`

## Request

- Base URL: `https://api.wavehouse.cloud`
- URL: `https://api.wavehouse.cloud/v1/newsletter`
- Auth: none declared

Public and unauthenticated. Always returns 202 with the same body — it never reveals whether the address was new, so it cannot be used to test who is subscribed. The address is NOT subscribed until the confirmation link is clicked.

## Headers

- `CF-IPCountry` string
- `User-Agent` string

## Request body

- SubscribeNewsletterInput
  - `email` string, required: Email address to subscribe
  - `referrer` string
  - `source` string: Which form/surface this came from (e.g. hero, cta, blog-post)
  - `utm_campaign` string
  - `utm_content` string
  - `utm_medium` string
  - `utm_source` string
  - `utm_term` string

## Response `202`

Accepted

- SubscribeNewsletterOutput
  - `message` string, required
  - `status` string, required: Always "pending_confirmation"

## Other responses

- `429`: Rate limited, per client IP, API key or org; a client IP is also refused on every route for a while after repeated authentication failures. A limited operation carries RateLimit-Policy and RateLimit on every response; wait Retry-After seconds before retrying.
- `default`: Error

---

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