The job
Desks follow sources, not feeds. Point a monitor at a channel or search and your tool receives each new item as it appears.
Endpoints
| Endpoint | Returns | Cost |
|---|---|---|
GET /v1/telegram/channel/posts | Telegram public channel posts | 1 credit |
GET /v1/bluesky/profile/posts | Bluesky profile posts | 1 credit |
GET /v1/youtube/search | YouTube search | 1 credit |
GET /v1/twitter/search/posts | X post search | 1 credit |
POST /v1/monitors | Create a monitor | Free |
Failed requests and cached repeats cost 0 credits. Send max_age_days to accept a recent cached copy. See credits and caching.
Recipe
- List the public sources you follow.
- Create a monitor per source or search.
- Verify the signature on each delivery, then route it to the desk.
Preview
The API is in early access. Calls use
api.socialscrape.io and return the shapes in the reference.Python
import os
import requests
API = "https://api.socialscrape.io"
HEADERS = {"x-api-key": os.environ["SOCIALSCRAPE_API_KEY"]}
def get(path, **params):
res = requests.get(API + path, headers=HEADERS, params=params, timeout=60)
res.raise_for_status()
return res.json()["data"]
# Telegram public channel posts
posts = get("/v1/telegram/channel/posts", handle="telegram")
# YouTube search
fresh = get("/v1/youtube/search", query="breaking news", type="video", upload_date="hour", sort="latest")
for p in posts["items"][:5]:
print(p["published_at"], p["url"])
for v in fresh["items"][:5]:
print(v["url"])TypeScript
const API = "https://api.socialscrape.io";
const headers = { "x-api-key": process.env.SOCIALSCRAPE_API_KEY! };
async function get(path: string, params: Record<string, string | number | boolean>) {
const query = new URLSearchParams(Object.entries(params).map(([k, v]) => [k, String(v)]));
const res = await fetch(`${API}${path}?${query}`, { headers });
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
return (await res.json()).data;
}
// Telegram public channel posts
const posts = await get("/v1/telegram/channel/posts", { handle: "telegram" });
// YouTube search
const fresh = await get("/v1/youtube/search", { query: "breaking news", type: "video", upload_date: "hour", sort: "latest" });
for (const p of posts.items.slice(0, 5)) console.log(p.published_at, p.url);
for (const v of fresh.items.slice(0, 5)) console.log(v.url);Good to know
Telegram returns public web-preview pages only. Verification of what you find stays your job.