---
title: "Build an owned newsletter"
method: POST
path: "/flows/newsletter"
tags: ["Replacement Flows"]
---

# Build an owned newsletter

`POST /flows/newsletter`

## Request

- Base URL: `https://doomscrollr.com/api/v1`
- URL: `https://doomscrollr.com/api/v1/flows/newsletter`
- Auth: HTTP bearer

Creates an owned newsletter site with first-party email list capture. Returns created artifacts, URLs, next steps, and an ownership message.

## Request body

- object
  - `title` string
  - `intro` string
  - `style_preset` 'skims' | 'brutalist' | 'editorial' | 'minimal'
  - `add_to_navigation` boolean
  - `navigation_label` string
  - `links` object[]
    - `label` string, required
    - `url` string, required
  - `products` object[]
    - `title` string, required
    - `description` string
    - `price` number, required
    - `type` 'physical' | 'digital' | 'ticket' | 'subscription'
    - `cover_photo_url` string, uri
  - `pages` object[]
    - `title` string, required
    - `content` string, required
  - `feed_url` string, uri
  - `source_query` string
  - `limit` integer
  - `price` number
  - `cover_photo_url` string, uri

## Response `200`

Replacement flow created

## Other responses

- `401` (unresolved $ref)
- `422`: Validation error
- `429`: Monthly API rate limit exceeded

---

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