---
title: "Create a link post"
method: POST
path: "/posts"
tags: ["Posts"]
---

# Create a link post

`POST /posts`

## Request

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

Publish a link post. When `url` is provided we auto-scrape og:image/title/description.

## Request body

- object
  - `url` string, uri, required: URL to publish. DOOMSCROLLR attempts to fetch/repair preview metadata first; Polymarket event/market URLs are automatically rendered as owned widget embeds. Generic published links without a usable preview image/embed are rejected unless allow_no_image=true or status=draft.
  - `title` string
  - `description` string
  - `tags` string: Comma-separated tags
  - `status` 'published' | 'draft' | 'scheduled'
  - `publish_at` string, date-time: Future publish time. When provided, status is set to scheduled.
  - `shoppable` boolean: Show a buy button on this post
  - `post_type` 'default' | 'url_embed' | 'product': Optional advanced override. Polymarket URLs automatically become url_embed posts.
  - `allow_no_image` boolean: Advanced override. By default, published link posts are not created if DOOMSCROLLR cannot repair/fetch a usable preview image or embed after metadata enrichment. Set true only when a text-only/link-only card is intentional.

## Response `201`

Post created

- Post
  - `id` integer
  - `url` string
  - `title` string
  - `description` string
  - `image` string, uri
  - `status` 'published' | 'draft' | 'scheduled'
  - `post_type` string
  - `created_at` string, date-time
  - `publish_at` string, date-time, nullable

## Other responses

- `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)
