---
title: "Newsletter Subscribe"
method: POST
path: "/api/newsletter/subscribe"
---

# Newsletter Subscribe

`POST /api/newsletter/subscribe`

## Request

- Base URL: `https://panafricadata.com` (the document declares no server; this is the origin it was published from)
- URL: `https://panafricadata.com/api/newsletter/subscribe`
- Auth: none declared
- TypeScript: <https://skmtc.dev/panafricadata/apis/pan-africa-data-api/docs/api/newsletter/subscribe/post.ts> (a function with typed inputs; its response is checked against the schema)

Subscribe an email to the Pan Africa Data newsletter. Sends no email.
Bot defences (8 Nov 2026; api/newsletter_guard.py):
  - honeypot field filled: the success response, nothing stored;
  - not an address, or a disposable domain: 400 with one generic message;
  - more than 3 successful subscribes from one client in 24 h: 429, logged as 'newsletter_rate';
  - an address already on the list (active or not): the success response, nothing inserted or changed.

## Request body

- NewsletterSignupRequest
  - `email` string, required
  - `source` string
  - `website` string

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

## Changes

- **2026-11-08** `1803a1857b20`: 1 info
  - added the new optional request property `website`
- **2026-10-04** `0d659cc81745`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/panafricadata/apis/pan-africa-data-api/changes/api/newsletter/subscribe/post.md)

---

[API](https://skmtc.dev/panafricadata/apis/pan-africa-data-api.md) - [All operations](https://skmtc.dev/panafricadata/apis/pan-africa-data-api/llms.txt) - [OpenAPI document](https://skmtc.dev/panafricadata/apis/pan-africa-data-api/revisions/1803a1857b20?raw)
