{"openapi":"3.1.0","info":{"title":"Growth Chicken API","version":"1.0.0"},"servers":[{"url":"http://localhost:3000","description":"Local Rails app"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API token"}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"string"}}},"required":["code","message"]}},"required":["error"]},"Project":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"slug":{"type":"string","pattern":"^[a-z0-9_-]+$"},"name":{"type":"string"},"description":{"type":"string","description":"Must contain at least 30 words."},"tagline":{"type":["string","null"]},"avatar_url":{"type":["string","null"]},"status":{"type":"string"},"source_url":{"type":["string","null"]},"brand_kit":{"type":["object","null"],"properties":{"colors":{"type":"array","items":{"type":"string"}},"font_preferences":{"type":"object","additionalProperties":true},"logos":{"type":"array","items":{"type":"object","additionalProperties":true}},"style_notes":{"type":["string","null"]}}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"assets_count":{"type":"integer"},"creatives_count":{"type":"integer"}},"required":["id","slug","name","description","tagline","avatar_url","status","source_url","brand_kit","created_at","updated_at","assets_count","creatives_count"]},"Audience":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"slug":{"type":"string","pattern":"^[a-z0-9_-]+$"},"project_id":{"type":"string","format":"uuid"},"organization_id":{"type":"string","format":"uuid"},"creator_user_id":{"type":["string","null"],"format":"uuid"},"name":{"type":"string"},"description":{"type":["string","null"]},"rules":{"type":["string","null"]},"metadata":{"type":"object","additionalProperties":true},"used_by_ads":{"type":"boolean","description":"True once the audience has been attached to an ad. Used audiences cannot be deleted."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","slug","project_id","organization_id","creator_user_id","name","description","rules","metadata","used_by_ads","created_at","updated_at"]},"Ad":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"slug":{"type":"string","pattern":"^[a-z0-9_-]+$"},"project_id":{"type":"string","format":"uuid"},"name":{"type":"string"},"status":{"type":"string","enum":["draft","generating","ready","failed"]},"ready":{"type":"boolean"},"generating":{"type":"boolean"},"failed":{"type":"boolean"},"requested_output":{"type":"string","enum":["image","video"]},"video_style":{"type":["string","null"],"enum":[null,"moving_background","live_scene","moving_elements"],"description":"Video sub-type. Defaults to live_scene for video ads when omitted."},"video_style_label":{"type":["string","null"]},"audience_id":{"type":["string","null"],"format":"uuid"},"platform_aspect":{"type":"string"},"placements":{"type":"array","items":{"type":"string"},"description":"Requested filesizes: instagram_story, instagram_reels, feed_portrait, square, landscape."},"token_cost":{"type":["integer","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"url":{"type":"string","description":"The GrowthChicken web URL for the generated ad."},"poll_url":{"type":"string","description":"GET this to poll status and asset URLs."},"files":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Per-placement deliverables: document_url (HTML) and asset_url (mp4/png)."},"snapshots":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Rasterized artifacts available for download."}},"required":["id","status","requested_output","placements","url","poll_url"]}}},"security":[{"bearerAuth":[]}],"paths":{"/api/v1/projects":{"get":{"summary":"List projects","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"422":{"description":"Validation failed or insufficient token balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"projects":{"type":"array","items":{"$ref":"#/components/schemas/Project"}}},"required":["projects"]},"examples":{"success":{"value":{"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}]}}}}}}}},"post":{"summary":"Create project","security":[{"bearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"examples":{"request":{"value":{"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."}}}}}}}},"responses":{"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"422":{"description":"Validation failed or insufficient token balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"201":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"project":{"$ref":"#/components/schemas/Project"}},"required":["project"]},"examples":{"success":{"value":{"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}}}}}}}}}},"/api/v1/projects/from_url":{"post":{"summary":"Create project from a URL","security":[{"bearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"examples":{"request":{"value":{"url":"https://example.com"}}}}}},"responses":{"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"422":{"description":"Validation failed or insufficient token balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"201":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"project":{"$ref":"#/components/schemas/Project"}},"required":["project"]},"examples":{"success":{"value":{"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}}}}}}}}}},"/api/v1/projects/{id}":{"get":{"summary":"Get project","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Resource UUID or slug","schema":{"type":"string","description":"Accepts UUIDs and slugs."}}],"responses":{"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"422":{"description":"Validation failed or insufficient token balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"project":{"$ref":"#/components/schemas/Project"}},"required":["project"]},"examples":{"success":{"value":{"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}}}}}}}}},"patch":{"summary":"Update project","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Resource UUID or slug","schema":{"type":"string","description":"Accepts UUIDs and slugs."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"examples":{"request":{"value":{"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."}}}}}}}},"responses":{"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"422":{"description":"Validation failed or insufficient token balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"project":{"$ref":"#/components/schemas/Project"}},"required":["project"]},"examples":{"success":{"value":{"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":{"summary":"Delete project","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Resource UUID or slug","schema":{"type":"string","description":"Accepts UUIDs and slugs."}}],"responses":{"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"422":{"description":"Validation failed or insufficient token balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"204":{"description":"Deleted"}}}},"/api/v1/projects/{project_id}/audiences":{"get":{"summary":"List audiences","security":[{"bearerAuth":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"description":"Project UUID or slug","schema":{"type":"string","description":"Accepts UUIDs and slugs."}}],"responses":{"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"422":{"description":"Validation failed or insufficient token balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"audiences":{"type":"array","items":{"$ref":"#/components/schemas/Audience"}}},"required":["audiences"]},"examples":{"success":{"value":{"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"}]}}}}}}}},"post":{"summary":"Create audience","security":[{"bearerAuth":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"description":"Project UUID or slug","schema":{"type":"string","description":"Accepts UUIDs and slugs."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"examples":{"request":{"value":{"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"}}}}}}}},"responses":{"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"422":{"description":"Validation failed or insufficient token balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"201":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"audience":{"$ref":"#/components/schemas/Audience"}},"required":["audience"]},"examples":{"success":{"value":{"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"}}}}}}}}}},"/api/v1/projects/{project_id}/audiences/{id}":{"get":{"summary":"Get audience","security":[{"bearerAuth":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"description":"Project UUID or slug","schema":{"type":"string","description":"Accepts UUIDs and slugs."}},{"name":"id","in":"path","required":true,"description":"Audience UUID or slug","schema":{"type":"string","description":"Accepts UUIDs and slugs."}}],"responses":{"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"422":{"description":"Validation failed or insufficient token balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"audience":{"$ref":"#/components/schemas/Audience"}},"required":["audience"]},"examples":{"success":{"value":{"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"}}}}}}}}},"patch":{"summary":"Update audience","security":[{"bearerAuth":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"description":"Project UUID or slug","schema":{"type":"string","description":"Accepts UUIDs and slugs."}},{"name":"id","in":"path","required":true,"description":"Audience UUID or slug","schema":{"type":"string","description":"Accepts UUIDs and slugs."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"examples":{"request":{"value":{"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"}}}}}}}},"responses":{"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"422":{"description":"Validation failed or insufficient token balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"audience":{"$ref":"#/components/schemas/Audience"}},"required":["audience"]},"examples":{"success":{"value":{"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":{"summary":"Delete audience","security":[{"bearerAuth":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"description":"Project UUID or slug","schema":{"type":"string","description":"Accepts UUIDs and slugs."}},{"name":"id","in":"path","required":true,"description":"Audience UUID or slug","schema":{"type":"string","description":"Accepts UUIDs and slugs."}}],"responses":{"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"422":{"description":"Validation failed or insufficient token balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"409":{"description":"Audience has been used by ads and cannot be deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"audience_in_use":{"value":{"error":{"code":"audience_in_use","message":"Audience has been used by ads and cannot be deleted.","details":["Audience has been used by ads and cannot be deleted"]}}}}}}},"204":{"description":"Deleted"}}}},"/api/v1/projects/{project_id}/ads":{"get":{"summary":"List ads","security":[{"bearerAuth":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"description":"Project UUID or slug","schema":{"type":"string","description":"Accepts UUIDs and slugs."}}],"responses":{"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"422":{"description":"Validation failed or insufficient token balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ads":{"type":"array","items":{"$ref":"#/components/schemas/Ad"}}},"required":["ads"]},"examples":{"success":{"value":{"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":[]}]}}}}}}}},"post":{"summary":"Generate an ad","security":[{"bearerAuth":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"description":"Project UUID or slug","schema":{"type":"string","description":"Accepts UUIDs and slugs."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"examples":{"request":{"value":{"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}}}}}}},"responses":{"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"422":{"description":"Validation failed or insufficient token balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"202":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ad":{"$ref":"#/components/schemas/Ad"}},"required":["ad"]},"examples":{"success":{"value":{"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":[]}}}}}}}}}},"/api/v1/projects/{project_id}/ads/{id}":{"get":{"summary":"Get ad (poll status and asset URLs)","security":[{"bearerAuth":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"description":"Project UUID or slug","schema":{"type":"string","description":"Accepts UUIDs and slugs."}},{"name":"id","in":"path","required":true,"description":"Ad UUID or slug","schema":{"type":"string","description":"Accepts UUIDs and slugs."}}],"responses":{"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"422":{"description":"Validation failed or insufficient token balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ad":{"$ref":"#/components/schemas/Ad"}},"required":["ad"]},"examples":{"success":{"value":{"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":[]}}}}}}}}}},"/api/v1/projects/{project_id}/ads/{id}/file":{"get":{"summary":"Download the rendered asset (mp4/png/jpg) or the composed HTML document","security":[{"bearerAuth":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"description":"Project UUID or slug","schema":{"type":"string","description":"Accepts UUIDs and slugs."}},{"name":"id","in":"path","required":true,"description":"Ad UUID or slug","schema":{"type":"string","description":"Accepts UUIDs and slugs."}},{"name":"format","in":"query","required":false,"description":"html, mp4, png, or jpg. May also be given as a URL extension, e.g. /file.mp4. Defaults to the ad's natural raster (mp4 for video, png for image).","schema":{"type":"string","enum":["html","mp4","png","jpg"]}},{"name":"placement","in":"query","required":false,"description":"Filesize/placement. Defaults to the ad's active placement.","schema":{"type":"string","enum":["instagram_story","instagram_reels","feed_portrait","square","landscape"]}}],"responses":{"200":{"description":"The asset bytes; Content-Type matches the requested format.","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}},"text/html":{"schema":{"type":"string"}}}},"202":{"description":"The raster is being rendered headlessly; poll again. Includes a Retry-After header.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"examples":{"rendering":{"value":{"status":"rendering","format":"mp4","placement":"square","poll_url":"http://localhost:3000/api/v1/projects/launchpad/ads/summer-sale"}}}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"409":{"description":"Ad is still generating, or generation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}},"422":{"description":"Invalid placement or format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation":{"value":{"error":{"code":"validation_failed","message":"Request validation failed.","details":["Description must be at least 30 words"]}}},"tokens":{"value":{"error":{"code":"insufficient_tokens","message":"Not enough tokens for this ad.","details":["Not enough tokens for this ad"]}}}}}}}}}}},"x-agent-curl-examples":["curl -H 'Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN' http://localhost:3000/api/v1/projects","curl -X POST -H 'Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN' -H 'Content-Type: application/json' -d '{\"project\":{\"name\":\"LaunchPad\",\"description\":\"A detailed project brief with enough substance for generated creative work and at least thirty words of real context about the product.\"}}' http://localhost:3000/api/v1/projects","curl -X POST -H 'Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN' -H 'Content-Type: application/json' -d '{\"url\":\"https://example.com\"}' http://localhost:3000/api/v1/projects/from_url","curl -H 'Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN' http://localhost:3000/api/v1/projects/launchpad/audiences","curl -X POST -H 'Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN' -H 'Content-Type: application/json' -d '{\"ad\":{\"requested_output\":\"video\",\"placements\":[\"square\"]}}' http://localhost:3000/api/v1/projects/launchpad/ads","curl -H 'Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN' http://localhost:3000/api/v1/projects/launchpad/ads/summer-sale","curl -L -H 'Authorization: Bearer $GROWTH_CHICKEN_API_TOKEN' 'http://localhost:3000/api/v1/projects/launchpad/ads/summer-sale/file.mp4?placement=square' -o ad.mp4"]}