Summarizer API
One endpoint. Send text, an article URL or a YouTube link — get the summary back as JSON. Free accounts get 100 requests a day, Pro gets unlimited.
Authentication
Every account has an API token — it's on your account page. Send it as a Bearer header.
Create a free account to get your tokenEndpoint
POST https://summarizer.free/api/v1/summarize/
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json
{
"kind": "url", // "text" | "url" | "youtube"
"mode": "bullets", // "tldr" | "bullets" | "detailed"
"lang": "en", // output language (ISO code, 100 supported)
"input": "https://example.com/article"
}
cURL
curl -s https://summarizer.free/api/v1/summarize/ \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"kind":"youtube","mode":"tldr","input":"https://www.youtube.com/watch?v=VIDEO_ID"}'
Python
import requests
r = requests.post(
"https://summarizer.free/api/v1/summarize/",
headers={"Authorization": "Bearer YOUR_API_TOKEN"},
json={"kind": "text", "mode": "bullets",
"input": open("report.txt").read()},
)
print(r.json()["summary"])
Node.js
const r = await fetch("https://summarizer.free/api/v1/summarize/", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({kind: "url", mode: "detailed",
input: "https://example.com/article"}),
});
const {summary} = await r.json();
Response
{
"ok": true,
"summary": "…markdown…",
"title": "Source title when known",
"kind": "url", "mode": "bullets", "lang": "en",
"used": 12, "limit": 100
}
Errors come back with ok:false and a code: unauthorized (401), bad_input (400), quota (429), an extraction code (422), or engine_busy (503). Text inputs need at least 200 characters; YouTube videos need captions.
Limits
Free account: 100 requests/day, inputs to ~165k characters. Pro: unlimited (2,000/day fair use), inputs to ~500k characters.