Need structured data from Bluesky, Substack, or Hacker News? We built a free-tier API that returns clean JSON — no browser automation, no rate limit fighting, no scraper maintenance.
You get 100 free calls just by registering with your email.
Step 1: Get your free API key
curl -s -X POST https://frog03-20494.wykr.es/api/register
-H 'Content-Type: application/json'
-d '{"email": "you@example.com"}'
Response:
{
"api_key": "dc_xxxxxxxxxxxxxxxxxxxx",
"calls_left": 100,
"message": "API key created",
"usage": "Authorization: Bearer dc_xxxxxxxxxxxxxxxxxxxx"
}
Save that key. You get 100 calls free, no credit card, no OAuth dance.
Step 2: Search Hacker News
curl -s -X POST https://frog03-20494.wykr.es/api/hn/search
-H 'Authorization: Bearer YOUR_API_KEY'
-H 'Content-Type: application/json'
-d '{"query": "fastapi", "maxItems": 5}'
Returns an array of stories with title, URL, score, comment count, author, and HN link:
[
{
"id": 47384352,
"title": "Building async APIs with FastAPI",
"url": "https://example.com/fastapi-guide",
"author": "devuser",
"score": 136,
"commentCount": 31,
"createdAt": "2026-03-15T04:23:43.000Z",
"storyType": "story",
"hnUrl": "https://news.ycombinator.com/item?id=47384352"
}
]
Step 3: Search Bluesky
curl -s -X POST https://frog03-20494.wykr.es/api/bluesky/search
-H 'Authorization: Bearer YOUR_API_KEY'
-H 'Content-Type: application/json'
-d '{"query": "python", "maxItems": 5}'
Bluesky’s AT Protocol returns structured posts — author handle, text, like/repost counts, indexed timestamp.
Step 4: Search Substack
curl -s -X POST https://frog03-20494.wykr.es/api/substack/search
-H 'Authorization: Bearer YOUR_API_KEY'
-H 'Content-Type: application/json'
-d '{"query": "machine learning", "maxArticles": 5}'
Returns newsletter posts with title, author, publication name, subtitle, and post URL. Good for tracking newsletter trends or building a reading aggregator.
Python example
Here’s a minimal script that searches all three sources at once:
import httpx
API_KEY = "dc_your_key_here"
BASE = "https://frog03-20494.wykr.es/api"
HEADERS = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
def search_all(query: str, max_items: int = 10):
results = {}
endpoints = [
("hn", {"query": query, "maxItems": max_items}),
("bluesky", {"query": query, "maxItems": max_items}),
("substack", {"query": query, "maxArticles": max_items}),
]
with httpx.Client() as client:
for source, payload in endpoints:
r = client.post(f"{BASE}/{source}/search", headers=HEADERS, json=payload)
results[source] = r.json() if r.status_code == 200 else []
return results
if __name__ == "__main__":
data = search_all("python", max_items=5)
for source, items in data.items():
print(f"n=== {source.upper()} ({len(items)} results) ===")
for item in items:
title = item.get("title") or item.get("text", "")[:80]
print(f" - {title}")
Use cases
- Content aggregator: Monitor what’s trending across Bluesky + HN simultaneously
- Newsletter research: Find what Substack authors are writing about a topic before you write yours
- Social listening: Track mentions of your project/library across platforms
- Dataset building: Collect labeled text for fine-tuning (check each platform’s ToS)
- Competitor intel: See what devs are sharing about tools in your space
What powers it
The backend runs on Apify actors — pre-built scrapers maintained by the community. We wrap them in a FastAPI service with key-based auth and usage tracking. When you hit your 100 free calls, paid plans start at $0.05/call (crypto micropayments via x402 protocol).
Discovery endpoints
The API is also MCP-compatible (Model Context Protocol) — AI agents can call it directly:
curl -s https://frog03-20494.wykr.es/.well-known/mcp.json
And it supports the x402 payment standard for agent-to-agent billing:
curl -s https://frog03-20494.wykr.es/.well-known/x402-discovery
Register at https://frog03-20494.wykr.es/api/register — 100 calls, no card, one curl.
Built with FastAPI + Apify. Questions or feedback welcome in the comments.
