Authentication
All APIs use Bearer token auth. Pass your key in the Authorization header:
bash
curl -H "Authorization: Bearer sk_live_..." https://api.shipkits.dev/og/generateGet your key at /pricing.
POST/og/generate
Generate a branded 1200×630 OG image. Returns PNG bytes.
Parameters
titlestringrequiredHeadline text (max 80 chars)
descriptionstringoptionalSubtext (max 120 chars)
themestringoptional"dark" (default) or "light"
curl
bash
curl -X POST https://api.shipkits.dev/og/generate \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"title": "Agent-ops kits for Cursor, Claude Code, and Grok Bot.", "description": "Catalog v1 multi-harness agent-ops kits."}' \
--output og.pngpython
python
import httpx
response = httpx.post(
"https://api.shipkits.dev/og/generate",
headers={"Authorization": "Bearer YOUR_KEY"},
json={"title": "Agent-ops kits for Cursor, Claude Code, and Grok Bot.", "description": "Catalog v1 kits."},
)
with open("og.png", "wb") as f:
f.write(response.content)POST/score
Score content for developer appeal, clarity, and conversion. Returns JSON.
curl
bash
curl -X POST https://api.shipkits.dev/score \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"content": "Your blog post text here...", "content_type": "blog_post"}'response
json
{
"overall_score": 82,
"clarity": 88,
"developer_appeal": 79,
"conversion_potential": 74,
"seo_strength": 85,
"feedback": "Strong technical specificity. CTA could be more prominent.",
"top_improvements": ["Add a code sample in the intro", "Lead with the outcome", "Shorten the second paragraph"]
}POST/pdf/generate
Generate a branded PDF from Markdown content. Returns PDF bytes.
python
python
import httpx
response = httpx.post(
"https://api.shipkits.dev/pdf/generate",
headers={"Authorization": "Bearer YOUR_KEY"},
json={
"title": "AI Agent Cheat Sheet",
"content": "## Setup\n\n- Install anthropic\n- Set ANTHROPIC_API_KEY\n\n## Patterns\n\n...",
"template": "default"
},
)
with open("output.pdf", "wb") as f:
f.write(response.content)