Developers
The Addy API.
Everything the app does, over HTTPS. Available on Pro and Enterprise. Keys live in Settings → API.
Authentication
Send your key as a Bearer token. Keys are scoped to one workspace and shown once at creation.
Authorization: Bearer addy_live_•••••••••••• Content-Type: application/json
Base URL: https://use-addy.site/api/v1. All requests and responses are JSON. Errors return { error: { code, message } } with a 4xx or 5xx status. Rate limit: 60 requests per minute per key; generation concurrency follows your plan.
POST /brands/analyze
Learn a brand from a URL. Returns the brand profile Addy uses for every concept.
curl -X POST https://use-addy.site/api/v1/brands/analyze \
-H "Authorization: Bearer $ADDY_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "https://example.com" }'{
"brandId": "brd_8f2k",
"name": "Example",
"oneLiner": "Sleep tracking without a wearable.",
"palette": ["#0B0B0B", "#F5F0E8", "#2387F4"],
"tone": ["direct", "warm", "slightly nerdy"],
"products": [{ "name": "Example Pad", "price": 149 }],
"audiences": ["biohackers", "new parents"]
}POST /concepts
Generate concepts for a brand. Each concept has a format, a hook, a script and a caption.
curl -X POST https://use-addy.site/api/v1/concepts \
-H "Authorization: Bearer $ADDY_KEY" \
-H "Content-Type: application/json" \
-d '{
"brandId": "brd_8f2k",
"count": 10,
"formats": ["ugc-talking-head", "baby-podcast", "meme"],
"goal": "installs"
}'POST /generate
Render a concept with Wan 3.0 (video) or an image model (static). Asynchronous: returns a job. Credits are reserved on submit and refunded if the job fails.
curl -X POST https://use-addy.site/api/v1/generate \
-H "Authorization: Bearer $ADDY_KEY" \
-H "Content-Type: application/json" \
-d '{
"conceptId": "cpt_31aa",
"quality": "hd", // "hd" (720p, 70 credits) | "draft" (480p, 35 credits)
"aspect": "9:16",
"voice": true,
"captions": true,
"webhookUrl": "https://yourapp.com/hooks/addy"
}'{ "jobId": "job_z91c", "status": "queued", "creditsReserved": 70 }GET /jobs/:id
Poll a job, or wait for the webhook. Finished jobs include a signed download URL valid for 24 hours; the file stays in your library.
{
"jobId": "job_z91c",
"status": "done", // queued | running | done | failed
"creativeId": "crt_77d0",
"url": "https://blob.use-addy.site/.../crt_77d0.mp4?sig=...",
"quality": "hd",
"creditsCharged": 70
}POST /posts
Schedule a creative to a connected social account.
curl -X POST https://use-addy.site/api/v1/posts \
-H "Authorization: Bearer $ADDY_KEY" \
-H "Content-Type: application/json" \
-d '{
"creativeId": "crt_77d0",
"accountId": "acc_ig_01",
"caption": "I deleted 14 apps and kept this one. Link in bio.",
"publishAt": "2026-11-03T16:00:00Z"
}'Webhooks
Addy POSTs { event: 'job.done' | 'job.failed' | 'post.published', data } to your webhookUrl with an Addy-Signature header (HMAC-SHA256 of the raw body using your webhook secret). Retries 5 times over 2 hours.
TypeScript
const BASE = "https://use-addy.site/api/v1";
const headers = { Authorization: `Bearer ${process.env.ADDY_KEY}`, "Content-Type": "application/json" };
const brand = await fetch(`${BASE}/brands/analyze`, { method: "POST", headers, body: JSON.stringify({ url: "https://example.com" }) }).then(r => r.json());
const { concepts } = await fetch(`${BASE}/concepts`, { method: "POST", headers, body: JSON.stringify({ brandId: brand.brandId, count: 5 }) }).then(r => r.json());
const job = await fetch(`${BASE}/generate`, { method: "POST", headers, body: JSON.stringify({ conceptId: concepts[0].id, quality: "hd" }) }).then(r => r.json());
let status = job;
while (status.status !== "done" && status.status !== "failed") {
await new Promise(r => setTimeout(r, 5000));
status = await fetch(`${BASE}/jobs/${job.jobId}`, { headers }).then(r => r.json());
}
console.log(status.url);Prefer an agent? Use the MCP server and call the same functions from Claude or Cursor.
Questions
+Which plans include the API?
Pro and Enterprise. Credits are shared with the app.
+Is there a sandbox?
Yes. Keys starting with addy_test_ return mock jobs that complete in 3 seconds and do not spend credits.
+What are the limits?
60 requests per minute per key. Concurrent generations: 5 on Pro, 20 on Enterprise.
Build on Addy.
Pro includes API + MCP. Start with the free trial and upgrade when you are ready.
Start free