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.

Header
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
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" }'
200 OK
{
  "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
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
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"
  }'
202 Accepted
{ "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.

200 OK
{
  "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
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

generate.ts
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