API Docs

Manage projects and reusable audiences from agents, internal tools, and automation. Every request is authenticated with a bearer token and returns JSON.

Get started

The examples below are ready to read with placeholder values. Sign in to generate a real key in one click and have it filled in automatically.

Set it up with your coding agent

Paste this into Claude Code (or any coding agent). It creates a project from your product URL and generates a first image and video ad. Swap in your product URL and key.

Paste into your coding agent
Set up Growth Chicken to generate ads for my product: YOUR_PRODUCT_URL

Growth Chicken turns a product page into on-brand image and video ads through a REST API at https://web-production-e0ab4f.up.railway.app. My API key is YOUR_API_KEY - send it on every request as the header "Authorization: Bearer YOUR_API_KEY".

1. Read the API reference at https://web-production-e0ab4f.up.railway.app/docs/openapi.json for the exact endpoints and request bodies.
2. Create a project from my product page:
   POST https://web-production-e0ab4f.up.railway.app/api/v1/projects/from_url with body {"url": "YOUR_PRODUCT_URL"}
   Growth Chicken reads the page and builds the brief and brand kit. Save the project "slug" from the response.
3. Generate two sample ads for that project. Generation is async: each create returns HTTP 202 with a "poll_url"; GET it until "status" is "ready".
   - Image ad: POST https://web-production-e0ab4f.up.railway.app/api/v1/projects/<slug>/ads with {"ad": {"requested_output": "image", "placements": ["square"]}}
   - Video ad: POST https://web-production-e0ab4f.up.railway.app/api/v1/projects/<slug>/ads with {"ad": {"requested_output": "video", "placements": ["instagram_story"]}}
4. When each ad is "ready", download its deliverable from the response "files" list: "asset_url" is the .png (image) or .mp4 (video). The first request may return 202 while the asset renders, so retry until 200; "document_url" is the self-contained HTML version and is always available as a fallback.
5. Show me both ads.

Authentication

Send your key as a bearer token in the Authorization header. Requests without a valid key return 401.

Base URL
https://web-production-e0ab4f.up.railway.app
Authorization header
Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN

Highlighted values like YOUR_PROJECT_SLUG are placeholders — swap in your own.

Endpoints

Projects

List projects

curl
curl https://web-production-e0ab4f.up.railway.app/api/v1/projects \
  -H "Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN"
Example response
200 OK
{
  "projects": [
    {
      "id": "00000000-0000-0000-0000-000000000001",
      "slug": "launchpad",
      "name": "LaunchPad",
      "description": "A complete project brief.",
      "tagline": "Launch creative faster.",
      "avatar_url": "/images/avatars/1.png",
      "status": "active",
      "source_url": "https://example.com",
      "brand_kit": {
        "colors": [
          "#111111"
        ],
        "font_preferences": {
          "direction": "Clean sans."
        },
        "logos": [],
        "style_notes": "Bright."
      },
      "created_at": "2026-05-25T12:00:00Z",
      "updated_at": "2026-05-25T12:00:00Z",
      "assets_count": 0,
      "creatives_count": 0
    }
  ]
}

Create project

Request body
{
  "project": {
    "name": "LaunchPad",
    "description": "A detailed project brief with audience, offer, proof points, visual direction, tone, constraints, claims, channel context, product benefits, objections, conversion goal, and enough substance for generated creative work.",
    "tagline": "Launch creative faster.",
    "source_url": "https://example.com",
    "brand_kit": {
      "colors": [
        "#111111",
        "#ffcc00"
      ],
      "font_preferences": {
        "direction": "Clean geometric sans with expressive display accents."
      },
      "style_notes": "Bright, direct, and product-led."
    }
  }
}
curl
curl -X POST https://web-production-e0ab4f.up.railway.app/api/v1/projects \
  -H "Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"project":{"name":"LaunchPad","description":"A detailed project brief with audience, offer, proof points, visual direction, tone, constraints, claims, channel context, product benefits, objections, conversion goal, and enough substance for generated creative work.","tagline":"Launch creative faster.","source_url":"https://example.com","brand_kit":{"colors":["#111111","#ffcc00"],"font_preferences":{"direction":"Clean geometric sans with expressive display accents."},"style_notes":"Bright, direct, and product-led."}}}'
Example response
200 OK
{
  "project": {
    "id": "00000000-0000-0000-0000-000000000001",
    "slug": "launchpad",
    "name": "LaunchPad",
    "description": "A complete project brief.",
    "tagline": "Launch creative faster.",
    "avatar_url": "/images/avatars/1.png",
    "status": "active",
    "source_url": "https://example.com",
    "brand_kit": {
      "colors": [
        "#111111"
      ],
      "font_preferences": {
        "direction": "Clean sans."
      },
      "logos": [],
      "style_notes": "Bright."
    },
    "created_at": "2026-05-25T12:00:00Z",
    "updated_at": "2026-05-25T12:00:00Z",
    "assets_count": 0,
    "creatives_count": 0
  }
}

Create project from a URL

Request body
{
  "url": "https://example.com"
}
curl
curl -X POST https://web-production-e0ab4f.up.railway.app/api/v1/projects/from_url \
  -H "Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com"}'
Example response
200 OK
{
  "project": {
    "id": "00000000-0000-0000-0000-000000000001",
    "slug": "launchpad",
    "name": "LaunchPad",
    "description": "A complete project brief.",
    "tagline": "Launch creative faster.",
    "avatar_url": "/images/avatars/1.png",
    "status": "active",
    "source_url": "https://example.com",
    "brand_kit": {
      "colors": [
        "#111111"
      ],
      "font_preferences": {
        "direction": "Clean sans."
      },
      "logos": [],
      "style_notes": "Bright."
    },
    "created_at": "2026-05-25T12:00:00Z",
    "updated_at": "2026-05-25T12:00:00Z",
    "assets_count": 0,
    "creatives_count": 0
  }
}

Get project

curl
curl https://web-production-e0ab4f.up.railway.app/api/v1/projects/YOUR_PROJECT_SLUG \
  -H "Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN"
Example response
200 OK
{
  "project": {
    "id": "00000000-0000-0000-0000-000000000001",
    "slug": "launchpad",
    "name": "LaunchPad",
    "description": "A complete project brief.",
    "tagline": "Launch creative faster.",
    "avatar_url": "/images/avatars/1.png",
    "status": "active",
    "source_url": "https://example.com",
    "brand_kit": {
      "colors": [
        "#111111"
      ],
      "font_preferences": {
        "direction": "Clean sans."
      },
      "logos": [],
      "style_notes": "Bright."
    },
    "created_at": "2026-05-25T12:00:00Z",
    "updated_at": "2026-05-25T12:00:00Z",
    "assets_count": 0,
    "creatives_count": 0
  }
}

Update project

Request body
{
  "project": {
    "name": "LaunchPad",
    "description": "A detailed project brief with audience, offer, proof points, visual direction, tone, constraints, claims, channel context, product benefits, objections, conversion goal, and enough substance for generated creative work.",
    "tagline": "Launch creative faster.",
    "source_url": "https://example.com",
    "brand_kit": {
      "colors": [
        "#111111",
        "#ffcc00"
      ],
      "font_preferences": {
        "direction": "Clean geometric sans with expressive display accents."
      },
      "style_notes": "Bright, direct, and product-led."
    }
  }
}
curl
curl -X PATCH https://web-production-e0ab4f.up.railway.app/api/v1/projects/YOUR_PROJECT_SLUG \
  -H "Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"project":{"name":"LaunchPad","description":"A detailed project brief with audience, offer, proof points, visual direction, tone, constraints, claims, channel context, product benefits, objections, conversion goal, and enough substance for generated creative work.","tagline":"Launch creative faster.","source_url":"https://example.com","brand_kit":{"colors":["#111111","#ffcc00"],"font_preferences":{"direction":"Clean geometric sans with expressive display accents."},"style_notes":"Bright, direct, and product-led."}}}'
Example response
200 OK
{
  "project": {
    "id": "00000000-0000-0000-0000-000000000001",
    "slug": "launchpad",
    "name": "LaunchPad",
    "description": "A complete project brief.",
    "tagline": "Launch creative faster.",
    "avatar_url": "/images/avatars/1.png",
    "status": "active",
    "source_url": "https://example.com",
    "brand_kit": {
      "colors": [
        "#111111"
      ],
      "font_preferences": {
        "direction": "Clean sans."
      },
      "logos": [],
      "style_notes": "Bright."
    },
    "created_at": "2026-05-25T12:00:00Z",
    "updated_at": "2026-05-25T12:00:00Z",
    "assets_count": 0,
    "creatives_count": 0
  }
}

Delete project

curl
curl -X DELETE https://web-production-e0ab4f.up.railway.app/api/v1/projects/YOUR_PROJECT_SLUG \
  -H "Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN"

List ads

curl
curl https://web-production-e0ab4f.up.railway.app/api/v1/projects/YOUR_PROJECT_SLUG/ads \
  -H "Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN"
Example response
200 OK
{
  "ads": [
    {
      "id": "00000000-0000-0000-0000-000000000401",
      "slug": "summer-sale",
      "project_id": "00000000-0000-0000-0000-000000000001",
      "name": "LaunchPad - Ship campaigns in minutes",
      "status": "generating",
      "ready": false,
      "generating": true,
      "failed": false,
      "requested_output": "video",
      "video_style": "live_scene",
      "video_style_label": "Live scene",
      "audience_id": "00000000-0000-0000-0000-000000000101",
      "platform_aspect": "9:16",
      "placements": [
        "instagram_story",
        "square"
      ],
      "token_cost": 163,
      "created_at": "2026-06-20T12:00:00Z",
      "updated_at": "2026-06-20T12:00:00Z",
      "url": "http://localhost:3000/projects/launchpad/creative_compositions/summer-sale",
      "poll_url": "http://localhost:3000/api/v1/projects/launchpad/ads/summer-sale",
      "files": [
        {
          "placement": "square",
          "label": "Square (1:1)",
          "width": 1080,
          "height": 1080,
          "document_url": "http://localhost:3000/api/v1/projects/launchpad/ads/summer-sale/file.html?placement=square",
          "asset_url": "http://localhost:3000/api/v1/projects/launchpad/ads/summer-sale/file.mp4?placement=square"
        }
      ],
      "snapshots": []
    }
  ]
}

Generate an ad

Request body
{
  "ad": {
    "requested_output": "video",
    "video_style": "live_scene",
    "prompt": "Bold launch ad highlighting the new dashboard.",
    "copy": "Ship campaigns in minutes",
    "cta": "Start free",
    "audience_id": "00000000-0000-0000-0000-000000000101",
    "placements": [
      "instagram_story",
      "square"
    ],
    "variant_count": 1
  }
}
curl
curl -X POST https://web-production-e0ab4f.up.railway.app/api/v1/projects/YOUR_PROJECT_SLUG/ads \
  -H "Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ad":{"requested_output":"video","video_style":"live_scene","prompt":"Bold launch ad highlighting the new dashboard.","copy":"Ship campaigns in minutes","cta":"Start free","audience_id":"00000000-0000-0000-0000-000000000101","placements":["instagram_story","square"],"variant_count":1}}'
Example response
200 OK
{
  "ad": {
    "id": "00000000-0000-0000-0000-000000000401",
    "slug": "summer-sale",
    "project_id": "00000000-0000-0000-0000-000000000001",
    "name": "LaunchPad - Ship campaigns in minutes",
    "status": "generating",
    "ready": false,
    "generating": true,
    "failed": false,
    "requested_output": "video",
    "video_style": "live_scene",
    "video_style_label": "Live scene",
    "audience_id": "00000000-0000-0000-0000-000000000101",
    "platform_aspect": "9:16",
    "placements": [
      "instagram_story",
      "square"
    ],
    "token_cost": 163,
    "created_at": "2026-06-20T12:00:00Z",
    "updated_at": "2026-06-20T12:00:00Z",
    "url": "http://localhost:3000/projects/launchpad/creative_compositions/summer-sale",
    "poll_url": "http://localhost:3000/api/v1/projects/launchpad/ads/summer-sale",
    "files": [
      {
        "placement": "square",
        "label": "Square (1:1)",
        "width": 1080,
        "height": 1080,
        "document_url": "http://localhost:3000/api/v1/projects/launchpad/ads/summer-sale/file.html?placement=square",
        "asset_url": "http://localhost:3000/api/v1/projects/launchpad/ads/summer-sale/file.mp4?placement=square"
      }
    ],
    "snapshots": []
  }
}

Get ad (poll status and asset URLs)

curl
curl https://web-production-e0ab4f.up.railway.app/api/v1/projects/YOUR_PROJECT_SLUG/ads/YOUR_PROJECT_SLUG \
  -H "Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN"
Example response
200 OK
{
  "ad": {
    "id": "00000000-0000-0000-0000-000000000401",
    "slug": "summer-sale",
    "project_id": "00000000-0000-0000-0000-000000000001",
    "name": "LaunchPad - Ship campaigns in minutes",
    "status": "generating",
    "ready": false,
    "generating": true,
    "failed": false,
    "requested_output": "video",
    "video_style": "live_scene",
    "video_style_label": "Live scene",
    "audience_id": "00000000-0000-0000-0000-000000000101",
    "platform_aspect": "9:16",
    "placements": [
      "instagram_story",
      "square"
    ],
    "token_cost": 163,
    "created_at": "2026-06-20T12:00:00Z",
    "updated_at": "2026-06-20T12:00:00Z",
    "url": "http://localhost:3000/projects/launchpad/creative_compositions/summer-sale",
    "poll_url": "http://localhost:3000/api/v1/projects/launchpad/ads/summer-sale",
    "files": [
      {
        "placement": "square",
        "label": "Square (1:1)",
        "width": 1080,
        "height": 1080,
        "document_url": "http://localhost:3000/api/v1/projects/launchpad/ads/summer-sale/file.html?placement=square",
        "asset_url": "http://localhost:3000/api/v1/projects/launchpad/ads/summer-sale/file.mp4?placement=square"
      }
    ],
    "snapshots": []
  }
}

Download the rendered asset (mp4/png/jpg) or the composed HTML document

curl
curl https://web-production-e0ab4f.up.railway.app/api/v1/projects/YOUR_PROJECT_SLUG/ads/YOUR_PROJECT_SLUG/file \
  -H "Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN"

Audiences

List audiences

curl
curl https://web-production-e0ab4f.up.railway.app/api/v1/projects/YOUR_PROJECT_SLUG/audiences \
  -H "Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN"
Example response
200 OK
{
  "audiences": [
    {
      "id": "00000000-0000-0000-0000-000000000101",
      "slug": "finance_operators",
      "project_id": "00000000-0000-0000-0000-000000000001",
      "organization_id": "00000000-0000-0000-0000-000000000201",
      "creator_user_id": "00000000-0000-0000-0000-000000000301",
      "name": "Finance operators",
      "description": "Operations and finance leaders who need audit-ready campaign workflows.",
      "rules": "Avoid hype. Mention controls, approvals, and reliable reporting.",
      "metadata": {
        "segment": "finance"
      },
      "used_by_ads": false,
      "created_at": "2026-06-18T12:00:00Z",
      "updated_at": "2026-06-18T12:00:00Z"
    }
  ]
}

Create audience

Request body
{
  "audience": {
    "name": "Finance operators",
    "description": "Operations and finance leaders who need audit-ready campaign workflows.",
    "rules": "Avoid hype. Mention controls, approvals, and reliable reporting.",
    "metadata": {
      "segment": "finance"
    }
  }
}
curl
curl -X POST https://web-production-e0ab4f.up.railway.app/api/v1/projects/YOUR_PROJECT_SLUG/audiences \
  -H "Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"audience":{"name":"Finance operators","description":"Operations and finance leaders who need audit-ready campaign workflows.","rules":"Avoid hype. Mention controls, approvals, and reliable reporting.","metadata":{"segment":"finance"}}}'
Example response
200 OK
{
  "audience": {
    "id": "00000000-0000-0000-0000-000000000101",
    "slug": "finance_operators",
    "project_id": "00000000-0000-0000-0000-000000000001",
    "organization_id": "00000000-0000-0000-0000-000000000201",
    "creator_user_id": "00000000-0000-0000-0000-000000000301",
    "name": "Finance operators",
    "description": "Operations and finance leaders who need audit-ready campaign workflows.",
    "rules": "Avoid hype. Mention controls, approvals, and reliable reporting.",
    "metadata": {
      "segment": "finance"
    },
    "used_by_ads": false,
    "created_at": "2026-06-18T12:00:00Z",
    "updated_at": "2026-06-18T12:00:00Z"
  }
}

Get audience

curl
curl https://web-production-e0ab4f.up.railway.app/api/v1/projects/YOUR_PROJECT_SLUG/audiences/YOUR_AUDIENCE_SLUG \
  -H "Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN"
Example response
200 OK
{
  "audience": {
    "id": "00000000-0000-0000-0000-000000000101",
    "slug": "finance_operators",
    "project_id": "00000000-0000-0000-0000-000000000001",
    "organization_id": "00000000-0000-0000-0000-000000000201",
    "creator_user_id": "00000000-0000-0000-0000-000000000301",
    "name": "Finance operators",
    "description": "Operations and finance leaders who need audit-ready campaign workflows.",
    "rules": "Avoid hype. Mention controls, approvals, and reliable reporting.",
    "metadata": {
      "segment": "finance"
    },
    "used_by_ads": false,
    "created_at": "2026-06-18T12:00:00Z",
    "updated_at": "2026-06-18T12:00:00Z"
  }
}

Update audience

Request body
{
  "audience": {
    "name": "Finance operators",
    "description": "Operations and finance leaders who need audit-ready campaign workflows.",
    "rules": "Avoid hype. Mention controls, approvals, and reliable reporting.",
    "metadata": {
      "segment": "finance"
    }
  }
}
curl
curl -X PATCH https://web-production-e0ab4f.up.railway.app/api/v1/projects/YOUR_PROJECT_SLUG/audiences/YOUR_AUDIENCE_SLUG \
  -H "Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"audience":{"name":"Finance operators","description":"Operations and finance leaders who need audit-ready campaign workflows.","rules":"Avoid hype. Mention controls, approvals, and reliable reporting.","metadata":{"segment":"finance"}}}'
Example response
200 OK
{
  "audience": {
    "id": "00000000-0000-0000-0000-000000000101",
    "slug": "finance_operators",
    "project_id": "00000000-0000-0000-0000-000000000001",
    "organization_id": "00000000-0000-0000-0000-000000000201",
    "creator_user_id": "00000000-0000-0000-0000-000000000301",
    "name": "Finance operators",
    "description": "Operations and finance leaders who need audit-ready campaign workflows.",
    "rules": "Avoid hype. Mention controls, approvals, and reliable reporting.",
    "metadata": {
      "segment": "finance"
    },
    "used_by_ads": false,
    "created_at": "2026-06-18T12:00:00Z",
    "updated_at": "2026-06-18T12:00:00Z"
  }
}

Delete audience

curl
curl -X DELETE https://web-production-e0ab4f.up.railway.app/api/v1/projects/YOUR_PROJECT_SLUG/audiences/YOUR_AUDIENCE_SLUG \
  -H "Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN"