--- name: anypost-md description: "Social post to Markdown for LLMs via anypost.md — not a generic web scraper. Use when the user wants to read, fetch, summarize, quote, or ingest a post or thread (x.com/twitter.com link, tweet URL, x.com→anypost.md rewrite, or Reddit/Threads/Bluesky/Mastodon/HN/YouTube/Substack/LinkedIn) for an LLM, agent, or research. Also when they ask what's in a tweet/post/thread, to pull thread context, read replies in order, or convert a social URL to markdown." version: 1.0.0 author: AnyPost license: MIT tags: [social, markdown, llm, agents, api, thread, comments, conversion, rag, x, reddit, bluesky] platforms: [linux, macos, windows] triggers: - read this tweet - read this thread - read this post - summarize this tweet - what does this tweet say - x.com or twitter.com link - replace x.com with anypost.md - fetch x.com or reddit or threads link - convert post to markdown - swap domain to anypost.md - get thread for LLM or RAG - ingest post for agent - user pastes social post link --- # anypost.md **Social post → Markdown** for LLMs (X, LinkedIn, Reddit, Threads, Bluesky, and more). Not for arbitrary homepages or docs — use a web reader for those. Domain swap returns **plain text**; `/api/convert` returns **JSON** with a `markdown` field. **Base URL:** `https://anypost.md` **Docs:** https://anypost.md/docs · **Skill:** https://anypost.md/i/skill.md · **Login:** https://anypost.md/login · **Pricing:** https://anypost.md/pricing · **Compose (Markdown → social):** https://anypost.md/compose · **Free tools:** https://anypost.md/free-tools ## Reverse workflow (Markdown → social) When the user wants to **draft** or **format** a post for LinkedIn, X, Instagram, Reddit, Discord, or other networks — not read an existing URL — send them to **Compose** at https://anypost.md/compose. It is free, browser-only, with real-time preview and guest drafts in local storage. This skill does not call Compose; it is the complement for URL→Markdown ingestion. ## When to invoke Apply when user intent matches any **trigger** in the frontmatter above. **Do not invoke** for: drafting or posting to social platforms, engagement analytics only, or platform developer API setup unrelated to reading post content. ## Three steps AnyPost is a single, memorable trick that fits into any workflow. **01 — Find any post** Open a post or thread on X, LinkedIn, Reddit, Threads, Bluesky — any supported platform. **02 — Swap the domain** Change the domain to `anypost.md`. No extension, no copy-paste, no scraping required. **03 — Get clean Markdown** Receive LLM-ready Markdown — author, text, media, stats and a source link. Ready to paste. ## Choose a path | Goal | Method | |------|--------| | Human/browser, one post | Replace the platform host with `anypost.md` and prefix the path with the platform slug | | Programmatic, have platform slug + path | `GET https://anypost.md//` | | Programmatic, only have full post URL | `GET https://anypost.md/api/convert?url={encoded_url}` | **URL rewrite examples:** ```text https://x.com/jack/status/20 → https://anypost.md/x/jack/status/20 https://x.com/AnyPostMD → https://anypost.md/x/AnyPostMD?latest=5&apikey=apk_live_… (profile: API key required; 2 credits + 1 per included post) https://reddit.com/r/python/comments/abc/title/ → https://anypost.md/reddit/r/python/comments/abc/title/ https://bsky.app/profile/user.bsky.social/post/abc → https://anypost.md/bluesky/profile/user.bsky.social/post/abc ``` Mastodon is instance-based: `https://anypost.md/mastodon//`. ## Authentication **Programmatic (agents):** `apk_live_…` or `apk_test_…` via `Authorization: Bearer ...` or `?apikey=`. Issue keys after purchase at https://anypost.md/login (agents paste API key) or https://anypost.md/pricing. **Humans:** Google sign-in at https://anypost.md/login — receive an `apk_` key to store in your agent. Domain rewrite does **not** read browser session cookies. Free (no key): **10 single-post conversions per day per IP** — `thread=off`, `userinfo=off`, `comments=off` only. Paid options require a real `apk_` key (never `apk_demo_preview`). ## Pick `format` | `format` | Use when | |----------|----------| | `markdown` | Default; readable notes with stats, media, quotes, and long-form body when the platform provides it | | `obsidian` | Vault import (YAML frontmatter + headings) | ## Query parameters | Param | Default | Values | |-------|---------|--------| | `format` | `markdown` | `markdown`, `obsidian` | | `thread` | `off` | `off`, `full`, or `2`–`100` (paid + key) | | `comments` | `off` | `off`, `on` (10 replies), or `2`–`50` (paid + key) | | `userinfo` | `off` | `off`, `author`, `all` (+2 credits per unique author; paid + key) | | `latest` | `5` | Profile only: `0`–`50` or `off` (recent posts section; API key required) | | `replies` | `off` | Profile only: include reply tweets when `on` | | `pinnedpost` | `on` | Profile only: include pinned post when available | | `apikey` | — | `apk_…` or `Authorization: Bearer` | - `thread=off` — single post only - `thread=full` — same-author chain where supported (best on X, Bluesky, Mastodon) - `thread=N` — up to N posts in chain - `comments=on` — reply section (Reddit, Hacker News, Bluesky, Mastodon, Threads, LinkedIn, Instagram, Substack notes; paid + key) - `userinfo=author` / `userinfo=all` — profile fields (+2 credits per unique author) All options default to **`off`** when omitted — set paid options explicitly. ## Supported platforms **Live today:** X, Reddit, Threads, Bluesky, Mastodon, Hacker News, YouTube, Substack, LinkedIn, Instagram. Instagram, LinkedIn, Substack, and Threads (plus X long-form articles) require **Pro+** (`402 plan_upgrade_required`). **Medium:** live today. **6 credits** per article (8 with `userinfo`); **API key required** (not on free tier). ## Credits - **1 credit** per post or comment item returned (except premium bundles below) - **6 credits** flat per Medium article (+2 with `userinfo`) - **10 credits** flat for X long-form articles, Reddit+comments, or thread+comments together - **+2 credits** per unique author when `userinfo=author` or `userinfo=all` - Free tier: single post only, 5/month, all options `off` (Medium excluded) - On `402` or `429`, send the user to https://anypost.md/pricing ## Checkout (no API key yet) Link the user to credit packs: - https://anypost.md/signup?plan=starter — $5 / 500 credits - https://anypost.md/signup?plan=pro — $19 / 2,200 credits (best value) - https://anypost.md/signup?plan=scale — $49 / 6,000 credits After purchase, use **Login for Agents** at https://anypost.md/login to paste the `apk_` key. ## Examples ```bash # Single post (domain swap path) curl -sS "https://anypost.md/x/jack/status/20" # Full thread + Obsidian (paid) curl -sS -H "Authorization: Bearer apk_live_..." \ "https://anypost.md/x/jack/status/20?thread=full&format=obsidian" # From full URL only (JSON) curl -sS -H "Authorization: Bearer apk_live_..." \ "https://anypost.md/api/convert?url=https%3A%2F%2Fx.com%2Fjack%2Fstatus%2F20&thread=full" ``` ## Errors **Domain swap:** plain-text body on failure. **`/api/convert`:** JSON `{"code":"…","message":"…"}`. `400` bad input · `401` bad key · `402` paid feature / no credits · `404` unavailable · `422` unsupported platform · `429` free limit · `503` overloaded ## Agent rules 1. **Ask** for an existing `apk_…` key first. If none (or `402`/`429`), link https://anypost.md/pricing and https://anypost.md/login. 2. **Preserve** source URL, author, post ID, and platform attribution in downstream output. 3. **Prefer** `markdown` for agents and notes; `obsidian` when saving to a vault. 4. **Use** `/api/convert` when the user supplies a full platform URL; use path form when you already have platform slug and path. 5. **Do not** send `apk_demo_preview` as a real key — use a stored `apk_live_…` / `apk_test_…` or omit for free-tier single post. 6. On failure, surface the response body; for credit/limit errors, link pricing and login.