Authentication
Create a key in Dashboard → API & MCP (Pro). Send it as a bearer token. Keys are shown once and stored hashed; revoke them anytime.
Authorization: Bearer bst_…REST API
Base URL https://beastify.xyz/api/v1. JSON in, JSON out. CORS is open, so you can call it from anywhere, but keep keys server-side.
/api/v1/improveAnalysis + 3–4 rewrites. With meme, also picks a template, writes captions and renders it.
{ "post": "…", "meme": "auto" | true | false }/api/v1/transformOne quick remix of a version.
{ "text": "…", "kind": "shorter" | "hook" | "human" | "funnier" | "angle" }/api/v1/memes?query=&mediaType=&limit=&offset=Search the template library by keywords. mediaType: all, image, video.
/api/v1/memes/:handleA template's input fields (text1, text2… with labels/aliases), size and media type.
/api/v1/memes/:handle/generateRender a meme. Images → JPEG, video/GIF templates → MP4. Returns a public URL.
{ "inputs": { "text1": "…", "text2": "…" } }/api/v1/memes/suggestLet Beastify choose and caption the best template for a post.
{ "post": "…", "query": "optional hint" }/api/v1/meYour plan and today's usage.
Improve a post
curl https://beastify.xyz/api/v1/improve \
-H "Authorization: Bearer $BEASTIFY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"post": "We launched a new feature that reduces meetings", "meme": "auto"}'{
"id": "6720…",
"analysis": {
"mainWeakness": "You're explaining the feature before giving people a reason to care.",
"summary": "…",
"scores": { "hook": 3, "clarity": 7, "specificity": 5, "curiosity": 4, "personality": 6, "conversation": 8 }
},
"variants": [
{ "id": "…", "strategy": "Best", "text": "Your team doesn't need another tool…", "why": "…" }
],
"meme": { "handle": "two-buttons", "url": "https://static.beastify.xyz/memes/…jpg", "mimeType": "image/jpeg", "inputs": { "text1": "…" } },
"usage": { "used": 12, "limit": 1000, "remaining": 988, "resetsAt": "…" }
}Search and render a meme
curl "https://beastify.xyz/api/v1/memes?query=choice&limit=3" -H "Authorization: Bearer $BEASTIFY_API_KEY"
curl https://beastify.xyz/api/v1/memes/two-buttons/generate \
-H "Authorization: Bearer $BEASTIFY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"inputs": {"text1": "Ship it", "text2": "Write tests", "text3": "Me at 5pm"}}'const res = await fetch("https://beastify.xyz/api/v1/memes/suggest", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.BEASTIFY_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({ post: "Mondays are for deleting unused SaaS tools" }),
});
const { meme } = await res.json(); // meme.url → JPEG or MP4MCP server
Streamable HTTP endpoint https://beastify.xyz/mcp, stateless, authenticated with your API key. Tools: improve_post, transform_post, search_memes, get_meme_template, generate_meme, suggest_meme.
claude mcp add --transport http beastify https://beastify.xyz/mcp \
--header "Authorization: Bearer bst_…"{
"mcpServers": {
"beastify": {
"type": "http",
"url": "https://beastify.xyz/mcp",
"headers": {
"Authorization": "Bearer bst_…"
}
}
}
}Agent skill
A ready-made SKILL.md that teaches agents when and how to use Beastify (REST, no MCP needed). Save it to ~/.claude/skills/beastify/SKILL.md (or your agent's skills folder) and export BEASTIFY_API_KEY.
mkdir -p ~/.claude/skills/beastify && curl -o ~/.claude/skills/beastify/SKILL.md https://beastify.xyz/skill/beastify/SKILL.md
export BEASTIFY_API_KEY=bst_…Errors & limits
Errors look like {"error": {"code": "RATE_LIMITED", "message": "…"}}. Common codes: MISSING_API_KEY/INVALID_API_KEY (401), PRO_REQUIRED (402), POST_TOO_LONG/INVALID_INPUTS (400), MEME_NOT_FOUND (404), RATE_LIMITED (429), LLM_TIMEOUT (504).
Pro is unlimited for normal use. A daily fair-use ceiling (1,000 improvements, 3,000 follow-ups, 1,500 renders) only stops runaway scripts. Video renders take 10–30 seconds; set your client timeout to at least 120 seconds.