{"openapi":"3.1.0","info":{"title":"Adrex AI","description":"Production-grade AI-powered advertising campaign management system","version":"2.0.0"},"paths":{"/api/v1/auth/register":{"post":{"tags":["Authentication"],"summary":"Register","description":"Register a new user","operationId":"register_api_v1_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/login":{"post":{"tags":["Authentication"],"summary":"Login","description":"Login and get access token","operationId":"login_api_v1_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLogin"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/refresh":{"post":{"tags":["Authentication"],"summary":"Refresh Token","description":"Refresh access token","operationId":"refresh_token_api_v1_auth_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenRefresh"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/me":{"get":{"tags":["Authentication"],"summary":"Get Current User","description":"Get current authenticated user","operationId":"get_current_user_api_v1_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/forgot-password":{"post":{"tags":["Authentication"],"summary":"Forgot Password","description":"Send a password reset email.","operationId":"forgot_password_api_v1_auth_forgot_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/reset-password":{"post":{"tags":["Authentication"],"summary":"Reset Password","description":"Reset password using a valid reset token.","operationId":"reset_password_api_v1_auth_reset_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/change-password":{"post":{"tags":["Authentication"],"summary":"Change Password","description":"Change password for the currently authenticated user.","operationId":"change_password_api_v1_auth_change_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/campaigns":{"get":{"tags":["Campaigns"],"summary":"Get Campaigns","description":"Get all campaigns with optional filtering","operationId":"get_campaigns_api_v1_campaigns_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Client Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"platform","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Campaigns"],"summary":"Create Campaign","description":"Create a new campaign","operationId":"create_campaign_api_v1_campaigns_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/live/time-series/{campaign_id}":{"get":{"tags":["Campaigns"],"summary":"Get Campaign Time Series","description":"Get daily time-series metrics for a specific campaign from ad platforms","operationId":"get_campaign_time_series_api_v1_campaigns_live_time_series__campaign_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"platform","in":"query","required":true,"schema":{"type":"string","description":"Platform: 'google' or 'meta'","title":"Platform"},"description":"Platform: 'google' or 'meta'"},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Account ID (required for Google)","title":"Account Id"},"description":"Account ID (required for Google)"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":7,"description":"Number of days of data","default":30,"title":"Days"},"description":"Number of days of data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/live/time-series/ad-group/{ad_group_id}":{"get":{"tags":["Campaigns"],"summary":"Get Ad Group Time Series","description":"Get daily time-series metrics for a specific ad group/ad set.","operationId":"get_ad_group_time_series_api_v1_campaigns_live_time_series_ad_group__ad_group_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ad_group_id","in":"path","required":true,"schema":{"type":"string","title":"Ad Group Id"}},{"name":"platform","in":"query","required":true,"schema":{"type":"string","description":"Platform: 'google' or 'meta'","title":"Platform"},"description":"Platform: 'google' or 'meta'"},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":7,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/live/time-series/ad/{ad_id}":{"get":{"tags":["Campaigns"],"summary":"Get Ad Time Series","description":"Get daily time-series metrics for a specific ad.","operationId":"get_ad_time_series_api_v1_campaigns_live_time_series_ad__ad_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ad_id","in":"path","required":true,"schema":{"type":"string","title":"Ad Id"}},{"name":"platform","in":"query","required":true,"schema":{"type":"string","description":"Platform: 'google' or 'meta'","title":"Platform"},"description":"Platform: 'google' or 'meta'"},{"name":"ad_group_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Ad group ID (required for Google)","title":"Ad Group Id"},"description":"Ad group ID (required for Google)"},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":7,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/live/breakdowns/{campaign_id}":{"get":{"tags":["Campaigns"],"summary":"Get Campaign Breakdowns","description":"Get campaign metrics broken down by device, demographics, placement, etc.","operationId":"get_campaign_breakdowns_api_v1_campaigns_live_breakdowns__campaign_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"platform","in":"query","required":true,"schema":{"type":"string","description":"Platform: 'google' or 'meta'","title":"Platform"},"description":"Platform: 'google' or 'meta'"},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":7,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/live/breakdowns/ad-group/{ad_group_id}":{"get":{"tags":["Campaigns"],"summary":"Get Ad Group Breakdowns","description":"Get ad group/ad set metrics broken down by device, demographics, etc.","operationId":"get_ad_group_breakdowns_api_v1_campaigns_live_breakdowns_ad_group__ad_group_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ad_group_id","in":"path","required":true,"schema":{"type":"string","title":"Ad Group Id"}},{"name":"platform","in":"query","required":true,"schema":{"type":"string","description":"Platform: 'google' or 'meta'","title":"Platform"},"description":"Platform: 'google' or 'meta'"},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":7,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/live/breakdowns/ad/{ad_id}":{"get":{"tags":["Campaigns"],"summary":"Get Ad Breakdowns Endpoint","description":"Get ad metrics broken down by device, demographics, etc.","operationId":"get_ad_breakdowns_endpoint_api_v1_campaigns_live_breakdowns_ad__ad_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ad_id","in":"path","required":true,"schema":{"type":"string","title":"Ad Id"}},{"name":"platform","in":"query","required":true,"schema":{"type":"string","description":"Platform: 'google' or 'meta'","title":"Platform"},"description":"Platform: 'google' or 'meta'"},{"name":"ad_group_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Ad group ID (required for Google)","title":"Ad Group Id"},"description":"Ad group ID (required for Google)"},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":7,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/live/all":{"get":{"tags":["Campaigns"],"summary":"Get All Live Campaigns","description":"Get live campaigns from ALL accessible accounts.\n\nFetches accounts directly from the API (source of truth), then\nfetches campaigns for each accessible account.","operationId":"get_all_live_campaigns_api_v1_campaigns_live_all_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/campaigns/live":{"get":{"tags":["Campaigns"],"summary":"Get Live Campaigns","description":"Get live campaigns directly from connected ad platforms.\n\nAccepts account IDs directly — no DB lookup needed.","operationId":"get_live_campaigns_api_v1_campaigns_live_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"google_customer_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Google Ads customer ID to fetch campaigns for","title":"Google Customer Id"},"description":"Google Ads customer ID to fetch campaigns for"},{"name":"meta_ad_account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Meta ad account ID to fetch campaigns for","title":"Meta Ad Account Id"},"description":"Meta ad account ID to fetch campaigns for"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/meta/pages":{"get":{"tags":["Campaigns"],"summary":"Get Meta Pages","description":"Get Facebook Pages accessible by the connected Meta user","operationId":"get_meta_pages_api_v1_campaigns_meta_pages_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/campaigns/meta/pages/{page_id}/engagement":{"get":{"tags":["Campaigns"],"summary":"Get Meta Page Engagement","description":"Get a Facebook Page's followers + recent post engagement (pages_read_engagement).","operationId":"get_meta_page_engagement_api_v1_campaigns_meta_pages__page_id__engagement_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","title":"Page Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}":{"get":{"tags":["Campaigns"],"summary":"Get Campaign","description":"Get a specific campaign by ID","operationId":"get_campaign_api_v1_campaigns__campaign_id__get","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"integer","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Campaigns"],"summary":"Update Campaign","description":"Update a campaign","operationId":"update_campaign_api_v1_campaigns__campaign_id__put","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"integer","title":"Campaign Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Campaigns"],"summary":"Delete Campaign","description":"Delete a campaign.\n\nArgs:\n    campaign_id: Local DB ID or platform-specific campaign ID\n    platform: Optional - \"google\" or \"meta\". Required when using platform-specific IDs.","operationId":"delete_campaign_api_v1_campaigns__campaign_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"platform","in":"query","required":false,"schema":{"type":"string","title":"Platform"}},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Platform account ID (Google customer ID or Meta ad account ID) for direct API deletion","title":"Account Id"},"description":"Platform account ID (Google customer ID or Meta ad account ID) for direct API deletion"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/launch":{"post":{"tags":["Campaigns"],"summary":"Launch Campaign","description":"Launch a campaign to ad platforms","operationId":"launch_campaign_api_v1_campaigns__campaign_id__launch_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"integer","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/pause":{"post":{"tags":["Campaigns"],"summary":"Pause Campaign","description":"Pause a running campaign.\n\nArgs:\n    campaign_id: Local DB ID or platform-specific campaign ID\n    platform: Optional - \"google\" or \"meta\". Required when using platform-specific IDs.","operationId":"pause_campaign_api_v1_campaigns__campaign_id__pause_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"platform","in":"query","required":false,"schema":{"type":"string","title":"Platform"}},{"name":"account_id","in":"query","required":false,"schema":{"type":"string","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/resume":{"post":{"tags":["Campaigns"],"summary":"Resume Campaign","description":"Resume/activate a paused campaign.\n\nArgs:\n    campaign_id: Local DB ID or platform-specific campaign ID\n    platform: Optional - \"google\" or \"meta\". Required when using platform-specific IDs.","operationId":"resume_campaign_api_v1_campaigns__campaign_id__resume_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"platform","in":"query","required":false,"schema":{"type":"string","title":"Platform"}},{"name":"account_id","in":"query","required":false,"schema":{"type":"string","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/update-live":{"post":{"tags":["Campaigns"],"summary":"Update Live Campaign","description":"Update a live campaign's settings (name, budget, bidding strategy).\n\nArgs:\n    campaign_id: Local DB ID or platform-specific campaign ID\n    updates: Fields to update (name, budget, bidding_strategy)\n    platform: Optional - \"google\" or \"meta\". Required when using platform-specific IDs.","operationId":"update_live_campaign_api_v1_campaigns__campaign_id__update_live_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"platform","in":"query","required":false,"schema":{"type":"string","title":"Platform"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignLiveUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/ad-groups":{"get":{"tags":["Campaigns"],"summary":"Get Ad Groups","description":"Get ad groups (Google) or ad sets (Meta) for a campaign.\n\nSupports two modes:\n1. Local DB lookup: Pass local campaign_id (integer)\n2. Direct platform lookup: Pass platform campaign_id + platform + account_id","operationId":"get_ad_groups_api_v1_campaigns__campaign_id__ad_groups_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"platform","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Platform: 'google' or 'meta'","title":"Platform"},"description":"Platform: 'google' or 'meta'"},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Account ID for direct platform lookup","title":"Account Id"},"description":"Account ID for direct platform lookup"},{"name":"include_metrics","in":"query","required":false,"schema":{"type":"boolean","description":"Include performance metrics","default":false,"title":"Include Metrics"},"description":"Include performance metrics"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Campaigns"],"summary":"Create Ad Group","description":"Create an ad group (Google) or ad set (Meta) for a campaign\n\nArgs:\n    campaign_id: The campaign ID (local DB ID or platform campaign ID)\n    name: Name for the ad group/ad set\n    daily_budget: Daily budget for Meta ad sets\n    cpc_bid: CPC bid for Google ad groups\n    targeting: Targeting options (Meta)\n    platform: Optional - \"google\" or \"meta\" to create for only one platform\n    optimization_goal: Optimization goal for Meta ad sets\n    account_id: Account ID for direct platform creation (required when using platform campaign ID)","operationId":"create_ad_group_api_v1_campaigns__campaign_id__ad_groups_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"name","in":"query","required":true,"schema":{"type":"string","title":"Name"}},{"name":"daily_budget","in":"query","required":false,"schema":{"type":"number","default":10.0,"title":"Daily Budget"}},{"name":"cpc_bid","in":"query","required":false,"schema":{"type":"number","default":1.0,"title":"Cpc Bid"}},{"name":"platform","in":"query","required":false,"schema":{"type":"string","title":"Platform"}},{"name":"optimization_goal","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Meta optimization goal (auto-detected if not provided)","title":"Optimization Goal"},"description":"Meta optimization goal (auto-detected if not provided)"},{"name":"ad_group_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Google ad group type (auto-detected from campaign channel type if not provided)","title":"Ad Group Type"},"description":"Google ad group type (auto-detected from campaign channel type if not provided)"},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Account ID for direct platform creation","title":"Account Id"},"description":"Account ID for direct platform creation"},{"name":"advantage_placements","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Meta Advantage+ Placements","title":"Advantage Placements"},"description":"Meta Advantage+ Placements"}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/AdGroupTargetingBody"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/ad-groups/{ad_group_id}":{"delete":{"tags":["Campaigns"],"summary":"Delete Ad Group","description":"Delete an ad group (Google) or ad set (Meta)","operationId":"delete_ad_group_api_v1_campaigns__campaign_id__ad_groups__ad_group_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"ad_group_id","in":"path","required":true,"schema":{"type":"string","title":"Ad Group Id"}},{"name":"platform","in":"query","required":true,"schema":{"type":"string","title":"Platform"}},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Account ID for direct platform deletion","title":"Account Id"},"description":"Account ID for direct platform deletion"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Campaigns"],"summary":"Update Ad Group","description":"Update fields on an ad group (Google) or ad set (Meta).","operationId":"update_ad_group_api_v1_campaigns__campaign_id__ad_groups__ad_group_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"ad_group_id","in":"path","required":true,"schema":{"type":"string","title":"Ad Group Id"}},{"name":"platform","in":"query","required":true,"schema":{"type":"string","description":"Platform: 'google' or 'meta'","title":"Platform"},"description":"Platform: 'google' or 'meta'"},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Account ID for direct platform call","title":"Account Id"},"description":"Account ID for direct platform call"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdGroupUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/ad-groups/{ad_group_id}/ads":{"get":{"tags":["Campaigns"],"summary":"Get Ads","description":"Get ads for an ad group (Google) or ad set (Meta)","operationId":"get_ads_api_v1_campaigns__campaign_id__ad_groups__ad_group_id__ads_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"ad_group_id","in":"path","required":true,"schema":{"type":"string","title":"Ad Group Id"}},{"name":"platform","in":"query","required":true,"schema":{"type":"string","title":"Platform"}},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Account ID for direct platform lookup","title":"Account Id"},"description":"Account ID for direct platform lookup"},{"name":"include_metrics","in":"query","required":false,"schema":{"type":"boolean","description":"Include performance metrics","default":false,"title":"Include Metrics"},"description":"Include performance metrics"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Campaigns"],"summary":"Create Ad","description":"Create an ad in an ad group (Google) or ad set (Meta)","operationId":"create_ad_api_v1_campaigns__campaign_id__ad_groups__ad_group_id__ads_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"ad_group_id","in":"path","required":true,"schema":{"type":"string","title":"Ad Group Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAdRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/ad-groups/{ad_group_id}/ads/{ad_id}":{"delete":{"tags":["Campaigns"],"summary":"Delete Ad","description":"Delete an ad","operationId":"delete_ad_api_v1_campaigns__campaign_id__ad_groups__ad_group_id__ads__ad_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"integer","title":"Campaign Id"}},{"name":"ad_group_id","in":"path","required":true,"schema":{"type":"string","title":"Ad Group Id"}},{"name":"ad_id","in":"path","required":true,"schema":{"type":"string","title":"Ad Id"}},{"name":"platform","in":"query","required":true,"schema":{"type":"string","title":"Platform"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/ad-groups/{ad_group_id}/keywords":{"get":{"tags":["Campaigns"],"summary":"Get Keywords","description":"Get keywords for a Google Ads ad group","operationId":"get_keywords_api_v1_campaigns__campaign_id__ad_groups__ad_group_id__keywords_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"ad_group_id","in":"path","required":true,"schema":{"type":"string","title":"Ad Group Id"}},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Google Ads customer ID for direct API call","title":"Account Id"},"description":"Google Ads customer ID for direct API call"},{"name":"include_metrics","in":"query","required":false,"schema":{"type":"boolean","description":"Include performance metrics","default":false,"title":"Include Metrics"},"description":"Include performance metrics"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Campaigns"],"summary":"Add Keywords","description":"Add keywords to a Google Ads ad group","operationId":"add_keywords_api_v1_campaigns__campaign_id__ad_groups__ad_group_id__keywords_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"ad_group_id","in":"path","required":true,"schema":{"type":"string","title":"Ad Group Id"}},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Google Ads customer ID for direct API call","title":"Account Id"},"description":"Google Ads customer ID for direct API call"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}},"title":"Keywords"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/negative-keywords":{"post":{"tags":["Campaigns"],"summary":"Add Negative Keywords","description":"Add negative keywords at campaign level (Google only).","operationId":"add_negative_keywords_api_v1_campaigns__campaign_id__negative_keywords_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"string"},"title":"Keywords"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/lead-form":{"post":{"tags":["Campaigns"],"summary":"Create Lead Form","description":"Create a lead form for a campaign (Google LeadFormAsset or Meta Instant Form).","operationId":"create_lead_form_api_v1_campaigns_lead_form_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLeadFormRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/campaigns/{campaign_id}/lead-form":{"get":{"tags":["Campaigns"],"summary":"Get Lead Form","description":"Get lead form details for a campaign.","operationId":"get_lead_form_api_v1_campaigns__campaign_id__lead_form_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/leads":{"get":{"tags":["Campaigns"],"summary":"Get Leads","description":"Get leads collected from a campaign's lead form.","operationId":"get_leads_api_v1_campaigns__campaign_id__leads_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/ad-groups/{ad_group_id}/status":{"patch":{"tags":["Campaigns"],"summary":"Update Ad Group Status","description":"Pause or enable an ad group (Google) or ad set (Meta)","operationId":"update_ad_group_status_api_v1_campaigns__campaign_id__ad_groups__ad_group_id__status_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"ad_group_id","in":"path","required":true,"schema":{"type":"string","title":"Ad Group Id"}},{"name":"status","in":"query","required":true,"schema":{"type":"string","description":"New status: 'enabled', 'paused', or 'active'","title":"Status"},"description":"New status: 'enabled', 'paused', or 'active'"},{"name":"platform","in":"query","required":true,"schema":{"type":"string","description":"Platform: 'google' or 'meta'","title":"Platform"},"description":"Platform: 'google' or 'meta'"},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Account ID for direct platform call","title":"Account Id"},"description":"Account ID for direct platform call"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/ad-groups/{ad_group_id}/ads/{ad_id}/status":{"patch":{"tags":["Campaigns"],"summary":"Update Ad Status","description":"Pause or enable an individual ad","operationId":"update_ad_status_api_v1_campaigns__campaign_id__ad_groups__ad_group_id__ads__ad_id__status_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"ad_group_id","in":"path","required":true,"schema":{"type":"string","title":"Ad Group Id"}},{"name":"ad_id","in":"path","required":true,"schema":{"type":"string","title":"Ad Id"}},{"name":"status","in":"query","required":true,"schema":{"type":"string","description":"New status: 'enabled', 'paused', or 'active'","title":"Status"},"description":"New status: 'enabled', 'paused', or 'active'"},{"name":"platform","in":"query","required":true,"schema":{"type":"string","description":"Platform: 'google' or 'meta'","title":"Platform"},"description":"Platform: 'google' or 'meta'"},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Account ID for direct platform call","title":"Account Id"},"description":"Account ID for direct platform call"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/ad-groups/{ad_group_id}/keywords/{keyword_id}/status":{"patch":{"tags":["Campaigns"],"summary":"Update Keyword Status","description":"Pause or enable an individual keyword (Google Ads only)","operationId":"update_keyword_status_api_v1_campaigns__campaign_id__ad_groups__ad_group_id__keywords__keyword_id__status_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"ad_group_id","in":"path","required":true,"schema":{"type":"string","title":"Ad Group Id"}},{"name":"keyword_id","in":"path","required":true,"schema":{"type":"string","title":"Keyword Id"}},{"name":"status","in":"query","required":true,"schema":{"type":"string","description":"New status: 'enabled' or 'paused'","title":"Status"},"description":"New status: 'enabled' or 'paused'"},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Google Ads customer ID for direct API call","title":"Account Id"},"description":"Google Ads customer ID for direct API call"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/ad-groups/{ad_group_id}/keywords/{keyword_id}":{"delete":{"tags":["Campaigns"],"summary":"Delete Keyword","description":"Delete a keyword from a Google Ads ad group","operationId":"delete_keyword_api_v1_campaigns__campaign_id__ad_groups__ad_group_id__keywords__keyword_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"ad_group_id","in":"path","required":true,"schema":{"type":"string","title":"Ad Group Id"}},{"name":"keyword_id","in":"path","required":true,"schema":{"type":"string","title":"Keyword Id"}},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Google Ads customer ID for direct API call","title":"Account Id"},"description":"Google Ads customer ID for direct API call"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/targeting/search":{"get":{"tags":["Campaigns"],"summary":"Search Targeting","description":"Search for targeting options (interests, behaviors) on Meta","operationId":"search_targeting_api_v1_campaigns_targeting_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","title":"Query"}},{"name":"client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Client Id"}},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/targeting/audiences":{"get":{"tags":["Campaigns"],"summary":"Get Custom Audiences","description":"Get custom audiences for a Meta ad account","operationId":"get_custom_audiences_api_v1_campaigns_targeting_audiences_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"client_id","in":"query","required":true,"schema":{"type":"integer","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/ad-groups/{ad_group_id}/targeting":{"put":{"tags":["Campaigns"],"summary":"Update Targeting","description":"Update targeting for a Meta ad set","operationId":"update_targeting_api_v1_campaigns__campaign_id__ad_groups__ad_group_id__targeting_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"integer","title":"Campaign Id"}},{"name":"ad_group_id","in":"path","required":true,"schema":{"type":"string","title":"Ad Group Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Targeting"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/advantage-shopping":{"post":{"tags":["Campaigns"],"summary":"Create Advantage Shopping Campaign","description":"Create an Advantage+ Shopping Campaign (ASC) on Meta Ads.\n\nThis creates an automated shopping campaign with minimal targeting\n(country only) and Meta's auto-optimization for sales/conversions.","operationId":"create_advantage_shopping_campaign_api_v1_campaigns_advantage_shopping_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdvantageShoppingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/creative/upload-image":{"post":{"tags":["Creative"],"summary":"Upload Image","description":"Upload an ad image and return its URL.","operationId":"upload_image_api_v1_creative_upload_image_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_image_api_v1_creative_upload_image_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/creative/image-gallery":{"get":{"tags":["Creative"],"summary":"List Images","description":"List all generated, uploaded, and resized images for the image picker.","operationId":"list_images_api_v1_creative_image_gallery_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/creative/packets":{"get":{"tags":["Creative"],"summary":"Get Ad Packets","description":"Get all ad packets","operationId":"get_ad_packets_api_v1_creative_packets_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"is_favorite","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Favorite"}},{"name":"client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AdPacketResponse"},"title":"Response Get Ad Packets Api V1 Creative Packets Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Creative"],"summary":"Create Ad Packet","description":"Create a new ad packet","operationId":"create_ad_packet_api_v1_creative_packets_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdPacketCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdPacketResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/rules/templates":{"get":{"tags":["Budget Rules"],"summary":"Get Rule Templates","description":"Get all available rule templates (hardcoded + custom) with enabled campaign counts","operationId":"get_rule_templates_api_v1_rules_templates_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RuleTemplateResponse"},"title":"Response Get Rule Templates Api V1 Rules Templates Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/rules/templates/{template_id}":{"get":{"tags":["Budget Rules"],"summary":"Get Rule Template","description":"Get a specific rule template","operationId":"get_rule_template_api_v1_rules_templates__template_id__get","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleTemplateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/rules/campaigns/{campaign_id}":{"get":{"tags":["Budget Rules"],"summary":"Get Campaign Rules","description":"Get the rules this user has configured for a campaign.","operationId":"get_campaign_rules_api_v1_rules_campaigns__campaign_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CampaignRuleResponse"},"title":"Response Get Campaign Rules Api V1 Rules Campaigns  Campaign Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/rules/campaigns":{"post":{"tags":["Budget Rules"],"summary":"Enable Rule For Campaign","description":"Enable a rule for one of this user's campaigns.","operationId":"enable_rule_for_campaign_api_v1_rules_campaigns_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignRuleCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignRuleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/rules/campaigns/{campaign_id}/{rule_template_id}":{"delete":{"tags":["Budget Rules"],"summary":"Disable Rule For Campaign","description":"Disable a rule for one of this user's campaigns.","operationId":"disable_rule_for_campaign_api_v1_rules_campaigns__campaign_id___rule_template_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"rule_template_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/rules/parse":{"post":{"tags":["Budget Rules"],"summary":"Parse Rule","description":"Parse a natural language rule description into a structured rule definition","operationId":"parse_rule_api_v1_rules_parse_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseRuleRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/rules/templates/custom":{"post":{"tags":["Budget Rules"],"summary":"Create Custom Template","description":"Create a new custom rule template from structured data","operationId":"create_custom_template_api_v1_rules_templates_custom_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomTemplateCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleTemplateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/rules/templates/custom/{template_id}":{"put":{"tags":["Budget Rules"],"summary":"Update Custom Template","description":"Update an existing custom rule template","operationId":"update_custom_template_api_v1_rules_templates_custom__template_id__put","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomTemplateUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleTemplateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Budget Rules"],"summary":"Delete Custom Template","description":"Delete a custom rule template","operationId":"delete_custom_template_api_v1_rules_templates_custom__template_id__delete","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/rules/evaluate":{"post":{"tags":["Budget Rules"],"summary":"Evaluate Rules","description":"Evaluate enabled rules against campaign metrics.\nReturns suggested actions without applying them.","operationId":"evaluate_rules_api_v1_rules_evaluate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvaluateRulesRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvaluationResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/rules/apply":{"post":{"tags":["Budget Rules"],"summary":"Apply Action","description":"Apply a suggested budget action to the ad platform","operationId":"apply_action_api_v1_rules_apply_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyActionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/rules/revert/{action_log_id}":{"post":{"tags":["Budget Rules"],"summary":"Revert Action","description":"Revert a previously applied action by restoring the original budget","operationId":"revert_action_api_v1_rules_revert__action_log_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"action_log_id","in":"path","required":true,"schema":{"type":"integer","title":"Action Log Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/RevertActionWithAccountRequest"},{"type":"null"}],"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/rules/activity":{"get":{"tags":["Budget Rules"],"summary":"Get Activity Log","description":"Get rule activity log with optional filters","operationId":"get_activity_log_api_v1_rules_activity_get","parameters":[{"name":"campaign_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Campaign Id"}},{"name":"rule_template_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Template Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ActivityLogResponse"},"title":"Response Get Activity Log Api V1 Rules Activity Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/list":{"get":{"tags":["Campaign Agent"],"summary":"List Agents","description":"Every agent belonging to the current user.","operationId":"list_agents_api_v1_agent_list_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AgentConfigResponse"},"type":"array","title":"Response List Agents Api V1 Agent List Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/agent/create":{"post":{"tags":["Campaign Agent"],"summary":"Create Agent","description":"Create an agent. It starts disabled and approval-gated.","operationId":"create_agent_api_v1_agent_create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/agent/{agent_id}":{"delete":{"tags":["Campaign Agent"],"summary":"Delete Agent","description":"Delete an agent along with its history, and unschedule it.","operationId":"delete_agent_api_v1_agent__agent_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"integer","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/status":{"get":{"tags":["Campaign Agent"],"summary":"Get Agent Status","description":"Whether the agent is on, when it last ran, and when it runs next.","operationId":"get_agent_status_api_v1_agent_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/config":{"get":{"tags":["Campaign Agent"],"summary":"Get Agent Config","description":"Read an agent's settings.","operationId":"get_agent_config_api_v1_agent_config_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Campaign Agent"],"summary":"Update Agent Config","description":"Change an agent's settings and reschedule it.","operationId":"update_agent_config_api_v1_agent_config_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentConfigUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/trigger":{"post":{"tags":["Campaign Agent"],"summary":"Trigger Cycle","description":"Run one cycle now and return its summary.","operationId":"trigger_cycle_api_v1_agent_trigger_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/trigger/stream":{"post":{"tags":["Campaign Agent"],"summary":"Trigger Cycle Stream","description":"Run one cycle now, streaming progress as Server-Sent Events.","operationId":"trigger_cycle_stream_api_v1_agent_trigger_stream_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/decisions":{"get":{"tags":["Campaign Agent"],"summary":"Get Decisions","description":"Decision history, newest first.","operationId":"get_decisions_api_v1_agent_decisions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"}},{"name":"decision_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decision Type"}},{"name":"campaign_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Campaign Id"}},{"name":"outcome","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Outcome"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentDecisionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/decisions/{cycle_id}":{"get":{"tags":["Campaign Agent"],"summary":"Get Cycle Decisions","description":"Every decision from one cycle, in the order they were made.","operationId":"get_cycle_decisions_api_v1_agent_decisions__cycle_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cycle_id","in":"path","required":true,"schema":{"type":"string","title":"Cycle Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AgentDecisionResponse"},"title":"Response Get Cycle Decisions Api V1 Agent Decisions  Cycle Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/analytics":{"get":{"tags":["Campaign Agent"],"summary":"Get Agent Analytics","description":"Totals across the agent's decisions.","operationId":"get_agent_analytics_api_v1_agent_analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentAnalyticsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/campaigns":{"get":{"tags":["Campaign Agent"],"summary":"Get Agent Campaigns","description":"Distinct campaigns this agent has looked at.","operationId":"get_agent_campaigns_api_v1_agent_campaigns_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/pending":{"get":{"tags":["Campaign Agent"],"summary":"Get Pending Decisions","description":"Decisions waiting for a human.","operationId":"get_pending_decisions_api_v1_agent_pending_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AgentDecisionResponse"},"title":"Response Get Pending Decisions Api V1 Agent Pending Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/pending/{decision_id}/approve":{"post":{"tags":["Campaign Agent"],"summary":"Approve Decision","description":"Approve a queued decision and apply it to the live account.","operationId":"approve_decision_api_v1_agent_pending__decision_id__approve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"decision_id","in":"path","required":true,"schema":{"type":"integer","title":"Decision Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/pending/{decision_id}/reject":{"post":{"tags":["Campaign Agent"],"summary":"Reject Decision","description":"Decline a queued decision.","operationId":"reject_decision_api_v1_agent_pending__decision_id__reject_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"decision_id","in":"path","required":true,"schema":{"type":"integer","title":"Decision Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/insights":{"get":{"tags":["Campaign Agent"],"summary":"Get Agent Insights","description":"A written summary of what the agent has been doing.","operationId":"get_agent_insights_api_v1_agent_insights_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentInsightsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/chat":{"post":{"tags":["Campaign Agent"],"summary":"Agent Chat","description":"Ask the agent about its decisions.","operationId":"agent_chat_api_v1_agent_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentChatResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/agent/chat/clear":{"post":{"tags":["Campaign Agent"],"summary":"Clear Agent Chat","description":"Forget the chat history.","operationId":"clear_agent_chat_api_v1_agent_chat_clear_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/agent/chat/suggestions":{"get":{"tags":["Campaign Agent"],"summary":"Get Agent Chat Suggestions","description":"Starter questions for the chat box.","operationId":"get_agent_chat_suggestions_api_v1_agent_chat_suggestions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/audit/waste":{"get":{"tags":["Waste Audit"],"summary":"Waste Report","description":"Ranked, dollar-quantified waste for the selected account, or all of them.\n\nPassing either account id scopes the audit *and* the benchmark it judges\nagainst. That matters: findings calibrate on the blended conversion rate and\nCPA of whatever is in scope, so auditing one account against an agency's\nwhole book would flatter the bad accounts and punish the good ones.","operationId":"waste_report_api_v1_audit_waste_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":7,"description":"Lookback window","default":30,"title":"Days"},"description":"Lookback window"},{"name":"include_keywords","in":"query","required":false,"schema":{"type":"boolean","description":"Scan keyword-level waste","default":true,"title":"Include Keywords"},"description":"Scan keyword-level waste"},{"name":"google_customer_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Scope to one Google Ads account","title":"Google Customer Id"},"description":"Scope to one Google Ads account"},{"name":"meta_ad_account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Scope to one Meta ad account","title":"Meta Ad Account Id"},"description":"Scope to one Meta ad account"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Waste Report Api V1 Audit Waste Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/audit/campaign/{campaign_id}":{"get":{"tags":["Waste Audit"],"summary":"Campaign Waste","description":"Waste inside one campaign — keywords, search terms and ads.\n\nGoogle only. Meta has no keyword equivalent, and its ad-set/creative\nanalogue is separate work.\n\nThe benchmark is deliberately the whole account, not this campaign. Compare\na keyword only against its own campaign and a uniformly bad campaign looks\nhealthy — which is exactly the campaign worth flagging. So this pays for one\nextra account-wide fetch to get an honest blended CPA.","operationId":"campaign_waste_api_v1_audit_campaign__campaign_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"customer_id","in":"query","required":true,"schema":{"type":"string","description":"Google Ads account the campaign belongs to","title":"Customer Id"},"description":"Google Ads account the campaign belongs to"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":7,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Campaign Waste Api V1 Audit Campaign  Campaign Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/oauth/google/authorize":{"get":{"tags":["OAuth"],"summary":"Google Authorize","description":"Get the Google OAuth authorization URL.","operationId":"google_authorize_api_v1_oauth_google_authorize_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/oauth/google/callback":{"get":{"tags":["OAuth"],"summary":"Google Callback","description":"Handle Google OAuth callback -- exchange code for tokens.","operationId":"google_callback_api_v1_oauth_google_callback_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}},{"name":"state","in":"query","required":true,"schema":{"type":"string","title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/oauth/meta/authorize":{"get":{"tags":["OAuth"],"summary":"Meta Authorize","description":"Get the Meta OAuth authorization URL.","operationId":"meta_authorize_api_v1_oauth_meta_authorize_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/oauth/meta/callback":{"get":{"tags":["OAuth"],"summary":"Meta Callback","description":"Handle Meta OAuth callback -- exchange code for tokens.","operationId":"meta_callback_api_v1_oauth_meta_callback_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}},{"name":"state","in":"query","required":true,"schema":{"type":"string","title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/oauth/connections":{"get":{"tags":["OAuth"],"summary":"Get Connections","description":"Get active platform connections for the current user.\n\nSource of truth is Firestore (is_active), NOT the per-instance in-memory\nservice cache. Cloud Run runs multiple instances, each with its own cache, so\ngating on a cached service made a disconnect performed on one instance look\n\"still connected\" when /connections was served by a different instance.","operationId":"get_connections_api_v1_oauth_connections_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/oauth/{platform}/disconnect":{"delete":{"tags":["OAuth"],"summary":"Disconnect Platform","description":"Disconnect a platform (clear per-user cache and Firestore state).","operationId":"disconnect_platform_api_v1_oauth__platform__disconnect_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"platform","in":"path","required":true,"schema":{"type":"string","title":"Platform"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/oauth/{platform}/token":{"get":{"tags":["OAuth"],"summary":"Get Platform Token","description":"Get the stored token for a connected platform.","operationId":"get_platform_token_api_v1_oauth__platform__token_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"platform","in":"path","required":true,"schema":{"type":"string","title":"Platform"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/oauth/connect-token":{"post":{"tags":["OAuth"],"summary":"Connect Token","description":"Accept an access token for Google or Meta, reinitialize the\nin-memory service, and verify the connection works via a live API call.\nReturns {\"connected\": true/false, \"error\": \"...\", \"clients\": [...]}.","operationId":"connect_token_api_v1_oauth_connect_token_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenConnectRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/oauth/accounts":{"get":{"tags":["OAuth"],"summary":"Get Live Accounts","description":"Return all ad accounts from connected platforms via live API calls.\n\nThis is the source of truth for the account selector -- no DB involved.\nGoogle and Meta are fetched concurrently (each is a slow external API call),\nso total latency is the slower of the two rather than their sum.","operationId":"get_live_accounts_api_v1_oauth_accounts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/oauth/meta/ad-accounts":{"get":{"tags":["OAuth"],"summary":"Get Meta Ad Accounts","description":"List Meta ad accounts accessible to the connected user.","operationId":"get_meta_ad_accounts_api_v1_oauth_meta_ad_accounts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/oauth/api-key":{"get":{"tags":["OAuth"],"summary":"Get Api Key Status","description":"Check if user has an active API key.","operationId":"get_api_key_status_api_v1_oauth_api_key_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["OAuth"],"summary":"Generate Api Key","description":"Generate a new API key for MCP server access. Revokes any existing key.","operationId":"generate_api_key_api_v1_oauth_api_key_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"delete":{"tags":["OAuth"],"summary":"Revoke Api Key Endpoint","description":"Revoke the current API key.","operationId":"revoke_api_key_endpoint_api_v1_oauth_api_key_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/oauth/api-key/settings":{"patch":{"tags":["OAuth"],"summary":"Update Api Key Settings Endpoint","description":"Update MCP guardrail flags (read_only, allow_destructive) on the active key.","operationId":"update_api_key_settings_endpoint_api_v1_oauth_api_key_settings_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeySettings"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/oauth/mcp/consent/{request_id}":{"get":{"tags":["OAuth"],"summary":"Mcp Consent Details","description":"Public: the consent page reads the pending request (the id is the secret).","operationId":"mcp_consent_details_api_v1_oauth_mcp_consent__request_id__get","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/oauth/mcp/consent":{"post":{"tags":["OAuth"],"summary":"Mcp Consent Decision","description":"The signed-in user approves or denies. Returns the client redirect URL.","operationId":"mcp_consent_decision_api_v1_oauth_mcp_consent_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpConsentDecision"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/oauth/mcp/grants":{"get":{"tags":["OAuth"],"summary":"Mcp List Grants","description":"AI apps the user has authorized against the remote MCP server.","operationId":"mcp_list_grants_api_v1_oauth_mcp_grants_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/oauth/mcp/grants/{client_id}":{"delete":{"tags":["OAuth"],"summary":"Mcp Revoke Grant","description":"Revoke one AI app's access. Its tokens stop working within a minute.","operationId":"mcp_revoke_grant_api_v1_oauth_mcp_grants__client_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/oauth/mcp-config":{"get":{"tags":["OAuth"],"summary":"Get Mcp Config","description":"Onboarding info for connecting an MCP client.\n\nTwo paths are returned:\n  - `remote`: the recommended, zero-key flow — the client authenticates in\n    the browser via OAuth. Nothing to copy or paste.\n  - `stdio`: the classic npx + API-key flow. NOTE: the raw API key is only\n    available at generation time (it is hashed at rest and never retrievable),\n    so this template uses a placeholder — regenerate to get a ready-to-paste\n    value, or paste the key you saved.","operationId":"get_mcp_config_api_v1_oauth_mcp_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/social/google/authorize":{"get":{"tags":["Social Login"],"summary":"Google Signin Authorize","description":"Get the Google Sign-In authorization URL.","operationId":"google_signin_authorize_api_v1_social_google_authorize_get","parameters":[{"name":"return_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Frontend-relative path to land on after sign-in (default /login).","title":"Return To"},"description":"Frontend-relative path to land on after sign-in (default /login)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/social/google/callback":{"get":{"tags":["Social Login"],"summary":"Google Signin Callback","description":"Handle Google Sign-In callback.","operationId":"google_signin_callback_api_v1_social_google_callback_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}},{"name":"state","in":"query","required":true,"schema":{"type":"string","title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/social/google/callback/":{"get":{"tags":["Social Login"],"summary":"Google Signin Callback","description":"Handle Google Sign-In callback.","operationId":"google_signin_callback_api_v1_social_google_callback__get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}},{"name":"state","in":"query","required":true,"schema":{"type":"string","title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/social/meta/authorize":{"get":{"tags":["Social Login"],"summary":"Meta Signin Authorize","description":"Get the Facebook Login authorization URL.\n\nNo UI currently surfaces this — the sign-in and MCP consent screens offer\nGoogle only — but the endpoint is kept in step with its Google twin.","operationId":"meta_signin_authorize_api_v1_social_meta_authorize_get","parameters":[{"name":"return_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Frontend-relative path to land on after sign-in (default /login).","title":"Return To"},"description":"Frontend-relative path to land on after sign-in (default /login)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/social/meta/callback":{"get":{"tags":["Social Login"],"summary":"Meta Signin Callback","description":"Handle Facebook Login callback.","operationId":"meta_signin_callback_api_v1_social_meta_callback_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}},{"name":"state","in":"query","required":true,"schema":{"type":"string","title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/social/meta/callback/":{"get":{"tags":["Social Login"],"summary":"Meta Signin Callback","description":"Handle Facebook Login callback.","operationId":"meta_signin_callback_api_v1_social_meta_callback__get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}},{"name":"state","in":"query","required":true,"schema":{"type":"string","title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/experiments/list":{"get":{"tags":["Experiments"],"summary":"List Experiments","description":"List all experiments for the current user.","operationId":"list_experiments_api_v1_experiments_list_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"experiment_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Experiment Type"}},{"name":"campaign_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/experiments/create":{"post":{"tags":["Experiments"],"summary":"Create Experiment","description":"Create a new experiment with its variants.","operationId":"create_experiment_api_v1_experiments_create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/experiments/{experiment_id}":{"get":{"tags":["Experiments"],"summary":"Get Experiment","description":"Get a single experiment with all variants.","operationId":"get_experiment_api_v1_experiments__experiment_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"integer","title":"Experiment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Experiments"],"summary":"Update Experiment","description":"Update experiment settings (only when draft or paused).","operationId":"update_experiment_api_v1_experiments__experiment_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"integer","title":"Experiment Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Experiments"],"summary":"Delete Experiment","description":"Delete an experiment and all its variants.","operationId":"delete_experiment_api_v1_experiments__experiment_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"integer","title":"Experiment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/experiments/{experiment_id}/variants":{"post":{"tags":["Experiments"],"summary":"Add Variant","description":"Add a variant to an experiment.","operationId":"add_variant_api_v1_experiments__experiment_id__variants_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"integer","title":"Experiment Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VariantCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/experiments/{experiment_id}/variants/{variant_id}":{"put":{"tags":["Experiments"],"summary":"Update Variant","description":"Update a variant's config.","operationId":"update_variant_api_v1_experiments__experiment_id__variants__variant_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"integer","title":"Experiment Id"}},{"name":"variant_id","in":"path","required":true,"schema":{"type":"integer","title":"Variant Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VariantUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Experiments"],"summary":"Delete Variant","description":"Delete a variant (cannot delete control).","operationId":"delete_variant_api_v1_experiments__experiment_id__variants__variant_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"integer","title":"Experiment Id"}},{"name":"variant_id","in":"path","required":true,"schema":{"type":"integer","title":"Variant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/experiments/{experiment_id}/start":{"post":{"tags":["Experiments"],"summary":"Start Experiment","description":"Start running an experiment.","operationId":"start_experiment_api_v1_experiments__experiment_id__start_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"integer","title":"Experiment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/experiments/{experiment_id}/pause":{"post":{"tags":["Experiments"],"summary":"Pause Experiment","description":"Pause a running experiment.","operationId":"pause_experiment_api_v1_experiments__experiment_id__pause_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"integer","title":"Experiment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/experiments/{experiment_id}/complete":{"post":{"tags":["Experiments"],"summary":"Complete Experiment","description":"Mark experiment as completed with a winner.","operationId":"complete_experiment_api_v1_experiments__experiment_id__complete_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"integer","title":"Experiment Id"}},{"name":"winner_variant_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Winner Variant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/experiments/{experiment_id}/cancel":{"post":{"tags":["Experiments"],"summary":"Cancel Experiment","description":"Cancel an experiment.","operationId":"cancel_experiment_api_v1_experiments__experiment_id__cancel_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"integer","title":"Experiment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/experiments/platform/list":{"get":{"tags":["Experiments"],"summary":"List Platform Experiments","description":"List experiments from the ad platform (Google Ads or Meta).","operationId":"list_platform_experiments_api_v1_experiments_platform_list_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"platform","in":"query","required":true,"schema":{"type":"string","title":"Platform"}},{"name":"account_id","in":"query","required":true,"schema":{"type":"string","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/experiments/platform/details":{"get":{"tags":["Experiments"],"summary":"Get Platform Experiment Details","description":"Get experiment details with arm/cell metrics from the platform.","operationId":"get_platform_experiment_details_api_v1_experiments_platform_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"experiment_id","in":"query","required":true,"schema":{"type":"string","title":"Experiment Id"}},{"name":"platform","in":"query","required":true,"schema":{"type":"string","title":"Platform"}},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/experiments/platform/create":{"post":{"tags":["Experiments"],"summary":"Create Platform Experiment","description":"Create an experiment on the ad platform.","operationId":"create_platform_experiment_api_v1_experiments_platform_create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformExperimentCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/experiments/platform/{experiment_id}/start":{"post":{"tags":["Experiments"],"summary":"Start Platform Experiment","description":"Start/schedule a platform experiment.","operationId":"start_platform_experiment_api_v1_experiments_platform__experiment_id__start_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","title":"Experiment Id"}},{"name":"platform","in":"query","required":true,"schema":{"type":"string","title":"Platform"}},{"name":"account_id","in":"query","required":true,"schema":{"type":"string","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/experiments/platform/{experiment_id}/end":{"post":{"tags":["Experiments"],"summary":"End Platform Experiment","description":"End or graduate a platform experiment.","operationId":"end_platform_experiment_api_v1_experiments_platform__experiment_id__end_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","title":"Experiment Id"}},{"name":"platform","in":"query","required":true,"schema":{"type":"string","title":"Platform"}},{"name":"account_id","in":"query","required":true,"schema":{"type":"string","title":"Account Id"}},{"name":"graduate","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Graduate"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/experiments/platform/delete":{"delete":{"tags":["Experiments"],"summary":"Delete Platform Experiment","description":"Delete a platform experiment.","operationId":"delete_platform_experiment_api_v1_experiments_platform_delete_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"experiment_id","in":"query","required":true,"schema":{"type":"string","title":"Experiment Id"}},{"name":"platform","in":"query","required":true,"schema":{"type":"string","title":"Platform"}},{"name":"account_id","in":"query","required":true,"schema":{"type":"string","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp/call":{"post":{"tags":["MCP Proxy"],"summary":"Mcp Call","operationId":"mcp_call_api_v1_mcp_call_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpToolCall"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpToolResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/mcp/status":{"get":{"tags":["MCP Proxy"],"summary":"Mcp Status","operationId":"mcp_status_api_v1_mcp_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/mcp/tools":{"get":{"tags":["MCP Proxy"],"summary":"List Tools","operationId":"list_tools_api_v1_mcp_tools_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/billing/plans":{"get":{"tags":["Billing"],"summary":"List Plans","description":"Public list of plans for the pricing page.","operationId":"list_plans_api_v1_billing_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/billing/status":{"get":{"tags":["Billing"],"summary":"Billing Status","description":"Current user's tier, trial standing and usage.","operationId":"billing_status_api_v1_billing_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/checkout":{"post":{"tags":["Billing"],"summary":"Create Checkout","description":"Create a Stripe Checkout Session for a paid tier.","operationId":"create_checkout_api_v1_billing_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/portal":{"post":{"tags":["Billing"],"summary":"Create Portal","description":"Open the Stripe Customer Portal for managing/cancelling the subscription.","operationId":"create_portal_api_v1_billing_portal_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/webhook":{"post":{"tags":["Billing"],"summary":"Stripe Webhook","description":"Handle Stripe events. Source of truth for a user's tier.","operationId":"stripe_webhook_api_v1_billing_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/contact/message":{"post":{"tags":["Contact"],"summary":"Send Contact Message","description":"Forward an in-app message to info@adrex.ai, tagged with the user's email.","operationId":"send_contact_message_api_v1_contact_message_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactMessage"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/contact/public":{"post":{"tags":["Contact"],"summary":"Send Public Contact Message","description":"Public (unauthenticated) contact form used on the marketing site. Accepts a\nfrom-email, a message, and optional file attachments; forwards them to the\nsupport inbox with the sender set as Reply-To.","operationId":"send_public_contact_message_api_v1_contact_public_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_send_public_contact_message_api_v1_contact_public_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/.well-known/oauth-protected-resource/mcp":{"get":{"tags":["MCP OAuth"],"summary":"Protected Resource Metadata","operationId":"protected_resource_metadata__well_known_oauth_protected_resource_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/oauth-protected-resource":{"get":{"tags":["MCP OAuth"],"summary":"Protected Resource Metadata","operationId":"protected_resource_metadata__well_known_oauth_protected_resource_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/oauth-authorization-server/mcp":{"get":{"tags":["MCP OAuth"],"summary":"Authorization Server Metadata","operationId":"authorization_server_metadata__well_known_oauth_authorization_server_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/oauth-authorization-server":{"get":{"tags":["MCP OAuth"],"summary":"Authorization Server Metadata","operationId":"authorization_server_metadata__well_known_oauth_authorization_server_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/oauth2/register":{"post":{"tags":["MCP OAuth"],"summary":"Register","operationId":"register_oauth2_register_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/oauth2/authorize":{"get":{"tags":["MCP OAuth"],"summary":"Authorize","operationId":"authorize_oauth2_authorize_get","parameters":[{"name":"response_type","in":"query","required":true,"schema":{"type":"string","title":"Response Type"}},{"name":"client_id","in":"query","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string","title":"Redirect Uri"}},{"name":"code_challenge","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Challenge"}},{"name":"code_challenge_method","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"S256","title":"Code Challenge Method"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"scope","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope"}},{"name":"resource","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth2/token":{"post":{"tags":["MCP OAuth"],"summary":"Token","operationId":"token_oauth2_token_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_token_oauth2_token_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mcp/":{"get":{"tags":["MCP Server"],"summary":"Mcp Get","operationId":"mcp_get_mcp__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["MCP Server"],"summary":"Mcp Endpoint","operationId":"mcp_endpoint_mcp__post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"delete":{"tags":["MCP Server"],"summary":"Mcp Delete","operationId":"mcp_delete_mcp__delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/mcp":{"get":{"tags":["MCP Server"],"summary":"Mcp Get","operationId":"mcp_get_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["MCP Server"],"summary":"Mcp Endpoint","operationId":"mcp_endpoint_mcp_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"delete":{"tags":["MCP Server"],"summary":"Mcp Delete","operationId":"mcp_delete_mcp_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"Root","description":"Root endpoint - API info","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health Check","description":"Health check endpoint","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"ActionType":{"type":"string","enum":["increase_budget","decrease_budget","pause_campaign","resume_campaign"],"title":"ActionType"},"ActivityLogResponse":{"properties":{"id":{"type":"integer","title":"Id"},"campaign_id":{"type":"string","title":"Campaign Id"},"campaign_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Campaign Name"},"platform":{"type":"string","title":"Platform"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"},"rule_template_id":{"type":"string","title":"Rule Template Id"},"rule_name":{"type":"string","title":"Rule Name"},"status":{"type":"string","title":"Status"},"action_type":{"type":"string","title":"Action Type"},"old_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Old Value"},"new_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"New Value"},"change_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Change Percent"},"reason":{"type":"string","title":"Reason"},"triggered_at":{"type":"string","format":"date-time","title":"Triggered At"},"applied_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Applied At"},"reverted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Reverted At"},"applied_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Applied By"}},"type":"object","required":["id","campaign_id","campaign_name","platform","account_id","rule_template_id","rule_name","status","action_type","old_value","new_value","change_percent","reason","triggered_at","applied_at","reverted_at","applied_by"],"title":"ActivityLogResponse","description":"Activity log entry response"},"AdGroupTargetingBody":{"properties":{"targeting":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Targeting"}},"type":"object","title":"AdGroupTargetingBody"},"AdGroupUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"daily_budget":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Daily Budget"},"lifetime_budget":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lifetime Budget"},"cpc_bid":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cpc Bid"},"cpm_bid":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cpm Bid"},"target_cpa":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Cpa"},"target_roas":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Roas"},"bid_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bid Amount"},"bid_strategy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bid Strategy"},"optimization_goal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Optimization Goal"},"billing_event":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Event"},"start_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Time"},"end_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Time"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"targeting":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Targeting"}},"type":"object","title":"AdGroupUpdateRequest","description":"Fields editable on an ad group (Google) or ad set (Meta)."},"AdPacketCreate":{"properties":{"name":{"type":"string","title":"Name"},"business_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Name"},"business_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Description"},"unique_selling_point":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unique Selling Point"},"target_audience":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Audience"},"campaign_goal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Campaign Goal"},"platform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform"},"tone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tone"},"headlines":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Headlines"},"descriptions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Descriptions"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"call_to_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Call To Action"},"destination_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Url"},"client_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Client Id"}},"type":"object","required":["name"],"title":"AdPacketCreate"},"AdPacketResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"business_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Name"},"business_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Description"},"unique_selling_point":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unique Selling Point"},"target_audience":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Audience"},"campaign_goal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Campaign Goal"},"platform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform"},"tone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tone"},"headlines":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Headlines"},"descriptions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Descriptions"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"call_to_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Call To Action"},"destination_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Url"},"is_ai_generated":{"type":"boolean","title":"Is Ai Generated","default":false},"is_favorite":{"type":"boolean","title":"Is Favorite","default":false},"times_used":{"type":"integer","title":"Times Used","default":0},"status":{"type":"string","title":"Status","default":"draft"},"client_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Client Id"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","name"],"title":"AdPacketResponse"},"AdvantageShoppingRequest":{"properties":{"ad_account_id":{"type":"string","title":"Ad Account Id"},"name":{"type":"string","title":"Name"},"daily_budget":{"type":"number","title":"Daily Budget"},"country":{"type":"string","title":"Country","default":"US"},"catalog_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Catalog Id"},"pixel_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pixel Id"},"target_roas":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Roas"}},"type":"object","required":["ad_account_id","name","daily_budget"],"title":"AdvantageShoppingRequest"},"AgentAnalyticsResponse":{"properties":{"actions_by_type":{"additionalProperties":{"type":"integer"},"type":"object","title":"Actions By Type"},"success_rate":{"type":"number","title":"Success Rate"},"total_budget_increased":{"type":"number","title":"Total Budget Increased"},"total_budget_decreased":{"type":"number","title":"Total Budget Decreased"},"decisions_today":{"type":"integer","title":"Decisions Today"}},"type":"object","required":["actions_by_type","success_rate","total_budget_increased","total_budget_decreased","decisions_today"],"title":"AgentAnalyticsResponse"},"AgentChatRequest":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"AgentChatRequest"},"AgentChatResponse":{"properties":{"response":{"type":"string","title":"Response"},"success":{"type":"boolean","title":"Success"},"suggested_questions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Suggested Questions"}},"type":"object","required":["response","success"],"title":"AgentChatResponse"},"AgentConfigResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name","default":"Default Agent"},"user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Id"},"is_enabled":{"type":"boolean","title":"Is Enabled","default":false},"interval_minutes":{"type":"integer","title":"Interval Minutes","default":30},"allowed_actions":{"items":{"type":"string"},"type":"array","title":"Allowed Actions","description":"What the agent may do: 'budget' to change daily budgets, 'pause' to pause campaigns."},"max_budget_change_percent":{"type":"number","title":"Max Budget Change Percent","default":25.0},"min_budget":{"type":"number","title":"Min Budget","default":5.0},"max_budget":{"type":"number","title":"Max Budget","default":10000.0},"require_approval":{"type":"boolean","title":"Require Approval","default":true},"target_campaign_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Campaign Ids","description":"Limit the agent to these campaigns. None means every campaign on connected accounts."},"target_cpa":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Cpa"},"target_roas":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Roas"},"budget_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Budget Currency","description":"ISO code the budget limits and target CPA were entered in. Recorded so a later account in a different currency cannot silently reinterpret them — 10000 meant as dollars is a crippling ceiling read as rupees."},"business_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Context"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id"],"title":"AgentConfigResponse"},"AgentConfigUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"is_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Enabled"},"interval_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Interval Minutes"},"allowed_actions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Actions"},"max_budget_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Budget Change Percent"},"min_budget":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Budget"},"max_budget":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Budget"},"require_approval":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Require Approval"},"target_campaign_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Campaign Ids"},"target_cpa":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Cpa"},"target_roas":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Roas"},"budget_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Budget Currency"},"business_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Context"}},"type":"object","title":"AgentConfigUpdate"},"AgentCreateRequest":{"properties":{"name":{"type":"string","title":"Name"}},"type":"object","required":["name"],"title":"AgentCreateRequest"},"AgentDecisionListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AgentDecisionResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"AgentDecisionListResponse"},"AgentDecisionResponse":{"properties":{"id":{"type":"integer","title":"Id"},"agent_config_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Config Id"},"cycle_id":{"type":"string","title":"Cycle Id"},"decision_type":{"type":"string","title":"Decision Type"},"campaign_id":{"type":"string","title":"Campaign Id"},"campaign_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Campaign Name"},"platform":{"type":"string","title":"Platform"},"rule_template_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Template Id"},"action_details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Action Details"},"outcome":{"type":"string","title":"Outcome"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"metrics_snapshot":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metrics Snapshot"},"rollback_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rollback Status","default":"not_rolled_back"},"rolled_back_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Rolled Back At"},"rolled_back_by_decision_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rolled Back By Decision Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","cycle_id","decision_type","campaign_id","platform","outcome","created_at"],"title":"AgentDecisionResponse"},"AgentInsightsResponse":{"properties":{"summary":{"type":"string","title":"Summary"},"generated_at":{"type":"string","format":"date-time","title":"Generated At"}},"type":"object","required":["summary","generated_at"],"title":"AgentInsightsResponse"},"AgentStatusResponse":{"properties":{"is_running":{"type":"boolean","title":"Is Running"},"is_enabled":{"type":"boolean","title":"Is Enabled"},"last_cycle_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Cycle At"},"next_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Run At"},"total_cycles":{"type":"integer","title":"Total Cycles"},"total_actions":{"type":"integer","title":"Total Actions"}},"type":"object","required":["is_running","is_enabled","total_cycles","total_actions"],"title":"AgentStatusResponse"},"ApiKeySettings":{"properties":{"read_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Read Only"},"allow_destructive":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allow Destructive"},"max_daily_budget":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Max Daily Budget"}},"type":"object","title":"ApiKeySettings"},"ApplyActionRequest":{"properties":{"campaign_id":{"type":"string","title":"Campaign Id"},"platform":{"type":"string","title":"Platform"},"rule_template_id":{"type":"string","title":"Rule Template Id"},"new_budget":{"type":"number","title":"New Budget"},"reason":{"type":"string","title":"Reason"},"metric_values":{"additionalProperties":true,"type":"object","title":"Metric Values"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"},"budget_type":{"type":"string","title":"Budget Type","default":"daily"}},"type":"object","required":["campaign_id","platform","rule_template_id","new_budget","reason","metric_values"],"title":"ApplyActionRequest","description":"Request to apply a suggested action"},"Body_send_public_contact_message_api_v1_contact_public_post":{"properties":{"email":{"type":"string","title":"Email"},"message":{"type":"string","title":"Message"},"files":{"anyOf":[{"items":{"type":"string","contentMediaType":"application/octet-stream"},"type":"array"},{"type":"null"}],"title":"Files"}},"type":"object","required":["email","message"],"title":"Body_send_public_contact_message_api_v1_contact_public_post"},"Body_token_oauth2_token_post":{"properties":{"grant_type":{"type":"string","title":"Grant Type"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"code_verifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Verifier"},"redirect_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirect Uri"},"refresh_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"}},"type":"object","required":["grant_type"],"title":"Body_token_oauth2_token_post"},"Body_upload_image_api_v1_creative_upload_image_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_image_api_v1_creative_upload_image_post"},"CampaignCreate":{"properties":{"name":{"type":"string","maxLength":255,"title":"Name","default":""},"google_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Google Name"},"meta_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Meta Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"platform":{"type":"string","pattern":"^(google|meta|both)$","title":"Platform"},"objective":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Objective"},"budget_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Budget Type"},"budget_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Budget Amount"},"google_budget":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Google Budget"},"meta_budget":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Meta Budget"},"currency":{"type":"string","title":"Currency","default":"USD"},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"},"target_audience":{"anyOf":[{"$ref":"#/components/schemas/TargetAudience"},{"type":"null"}]},"target_locations":{"anyOf":[{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array"},{"type":"null"}],"title":"Target Locations"},"target_keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Keywords"},"channel_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Type","default":"SEARCH"},"bidding_strategy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bidding Strategy","default":"MAXIMIZE_CLICKS"},"special_ad_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Special Ad Category","default":"NONE"},"target_cpa":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Cpa"},"target_roas":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Roas"},"target_countries":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Countries","default":["US"]},"target_age_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Target Age Min","default":18},"target_age_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Target Age Max","default":65},"target_genders":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Genders","default":["all"]},"client_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Client Id"},"google_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Google Customer Id"},"meta_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Account Id"},"campaign_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Campaign Type"},"is_cbo":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Cbo"},"bid_strategy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bid Strategy"},"meta_campaign_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Campaign Id"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"meta_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Status"}},"type":"object","required":["platform"],"title":"CampaignCreate"},"CampaignListResponse":{"properties":{"campaigns":{"items":{"$ref":"#/components/schemas/CampaignResponse"},"type":"array","title":"Campaigns"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["campaigns","total"],"title":"CampaignListResponse"},"CampaignLiveUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"budget":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Budget"},"bidding_strategy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bidding Strategy"}},"type":"object","title":"CampaignLiveUpdate"},"CampaignResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"platform":{"type":"string","title":"Platform"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","default":"draft"},"google_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Google Status","default":"draft"},"meta_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Status","default":"draft"},"objective":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Objective"},"budget_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Budget Type"},"budget_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Budget Amount"},"google_budget":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Google Budget"},"meta_budget":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Meta Budget"},"currency":{"type":"string","title":"Currency","default":"USD"},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"},"target_audience":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Target Audience"},"target_locations":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Target Locations"},"target_keywords":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Target Keywords"},"google_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Google Customer Id"},"meta_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Account Id"},"google_campaign_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Google Campaign Id"},"meta_campaign_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Campaign Id"},"client_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Client Id"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","name","platform"],"title":"CampaignResponse"},"CampaignRuleCreate":{"properties":{"campaign_id":{"type":"string","title":"Campaign Id"},"platform":{"type":"string","title":"Platform"},"rule_template_id":{"type":"string","title":"Rule Template Id"},"custom_threshold":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Custom Threshold"}},"type":"object","required":["campaign_id","platform","rule_template_id"],"title":"CampaignRuleCreate","description":"Request to enable a rule for a campaign"},"CampaignRuleResponse":{"properties":{"id":{"type":"integer","title":"Id"},"campaign_id":{"type":"string","title":"Campaign Id"},"platform":{"type":"string","title":"Platform"},"rule_template_id":{"type":"string","title":"Rule Template Id"},"rule_name":{"type":"string","title":"Rule Name"},"is_enabled":{"type":"boolean","title":"Is Enabled"},"custom_threshold":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Custom Threshold"},"last_triggered_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Triggered At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","campaign_id","platform","rule_template_id","rule_name","is_enabled","custom_threshold","last_triggered_at","created_at"],"title":"CampaignRuleResponse","description":"Campaign rule assignment response"},"CampaignUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"platform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"objective":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Objective"},"budget_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Budget Type"},"budget_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Budget Amount"},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"},"target_audience":{"anyOf":[{"$ref":"#/components/schemas/TargetAudience"},{"type":"null"}]},"target_locations":{"anyOf":[{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array"},{"type":"null"}],"title":"Target Locations"},"target_keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Keywords"}},"type":"object","title":"CampaignUpdate"},"ChangePasswordRequest":{"properties":{"current_password":{"type":"string","title":"Current Password"},"new_password":{"type":"string","minLength":6,"title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"ChangePasswordRequest"},"CheckoutRequest":{"properties":{"tier":{"type":"string","title":"Tier"}},"type":"object","required":["tier"],"title":"CheckoutRequest"},"ContactMessage":{"properties":{"message":{"type":"string","maxLength":5000,"minLength":1,"title":"Message"}},"type":"object","required":["message"],"title":"ContactMessage"},"CreateAdRequest":{"properties":{"platform":{"type":"string","title":"Platform"},"name":{"type":"string","title":"Name","default":""},"headlines":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Headlines"},"descriptions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Descriptions"},"final_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Final Url"},"channel_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Type"},"video_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Video Url"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"business_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Name"},"creative_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creative Id"},"page_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Id"},"link_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link Url"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"},"lead_gen_form_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lead Gen Form Id"}},"type":"object","required":["platform"],"title":"CreateAdRequest"},"CreateLeadFormRequest":{"properties":{"platform":{"type":"string","title":"Platform"},"campaign_id":{"type":"string","title":"Campaign Id"},"page_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Id"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"},"lead_form":{"$ref":"#/components/schemas/LeadFormConfig"}},"type":"object","required":["platform","campaign_id","lead_form"],"title":"CreateLeadFormRequest"},"CustomTemplateCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"category":{"type":"string","title":"Category"},"icon":{"type":"string","title":"Icon","default":"zap"},"conditions":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Conditions"},"action":{"additionalProperties":true,"type":"object","title":"Action"},"guardrails":{"additionalProperties":true,"type":"object","title":"Guardrails"},"original_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Prompt"},"client_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Client Id"}},"type":"object","required":["name","description","category","conditions","action","guardrails"],"title":"CustomTemplateCreate","description":"Request to create a custom rule template"},"CustomTemplateUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"conditions":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Conditions"},"action":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Action"},"guardrails":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Guardrails"}},"type":"object","title":"CustomTemplateUpdate","description":"Request to update a custom rule template"},"EvaluateRulesRequest":{"properties":{"campaign_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Campaign Ids"},"days":{"type":"integer","title":"Days","default":7}},"type":"object","title":"EvaluateRulesRequest","description":"Request to evaluate rules"},"EvaluationResult":{"properties":{"evaluated_at":{"type":"string","format":"date-time","title":"Evaluated At"},"campaigns_evaluated":{"type":"integer","title":"Campaigns Evaluated"},"rules_checked":{"type":"integer","title":"Rules Checked"},"suggestions":{"items":{"$ref":"#/components/schemas/SuggestedAction"},"type":"array","title":"Suggestions"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors","default":[]}},"type":"object","required":["evaluated_at","campaigns_evaluated","rules_checked","suggestions"],"title":"EvaluationResult","description":"Result of evaluating rules for campaigns"},"ExperimentCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"experiment_type":{"type":"string","title":"Experiment Type","default":"creative"},"campaign_id":{"type":"string","title":"Campaign Id"},"campaign_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Campaign Name"},"platform":{"type":"string","title":"Platform"},"primary_metric":{"type":"string","title":"Primary Metric","default":"ctr"},"min_duration_days":{"type":"integer","title":"Min Duration Days","default":7},"max_duration_days":{"type":"integer","title":"Max Duration Days","default":30},"min_impressions_per_variant":{"type":"integer","title":"Min Impressions Per Variant","default":1000},"traffic_split_pct":{"type":"integer","title":"Traffic Split Pct","default":50},"confidence_threshold":{"type":"number","title":"Confidence Threshold","default":0.95},"auto_apply_winner":{"type":"boolean","title":"Auto Apply Winner","default":false},"variants":{"items":{"$ref":"#/components/schemas/VariantCreate"},"type":"array","title":"Variants","default":[]}},"type":"object","required":["name","campaign_id","platform"],"title":"ExperimentCreate"},"ExperimentUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"primary_metric":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Metric"},"min_duration_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Duration Days"},"max_duration_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Duration Days"},"min_impressions_per_variant":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Impressions Per Variant"},"traffic_split_pct":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Traffic Split Pct"},"confidence_threshold":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence Threshold"},"auto_apply_winner":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Apply Winner"}},"type":"object","title":"ExperimentUpdate"},"ForgotPasswordRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ForgotPasswordRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LeadFormConfig":{"properties":{"form_name":{"type":"string","title":"Form Name","default":"Lead Form"},"headline":{"type":"string","title":"Headline","default":"Sign up for more info"},"description":{"type":"string","title":"Description","default":"Fill out this form and we'll get back to you."},"fields":{"items":{"type":"string"},"type":"array","title":"Fields","default":["FULL_NAME","EMAIL","PHONE_NUMBER"]},"privacy_policy_url":{"type":"string","title":"Privacy Policy Url"},"call_to_action":{"type":"string","title":"Call To Action","default":"SIGN_UP"},"thank_you_headline":{"type":"string","title":"Thank You Headline","default":"Thank you!"},"thank_you_description":{"type":"string","title":"Thank You Description","default":"We'll be in touch shortly."}},"type":"object","required":["privacy_policy_url"],"title":"LeadFormConfig","description":"Lead form configuration for lead generation campaigns."},"McpConsentDecision":{"properties":{"request_id":{"type":"string","title":"Request Id"},"approve":{"type":"boolean","title":"Approve"}},"type":"object","required":["request_id","approve"],"title":"McpConsentDecision"},"McpToolCall":{"properties":{"tool":{"type":"string","title":"Tool"},"params":{"additionalProperties":true,"type":"object","title":"Params","default":{}}},"type":"object","required":["tool"],"title":"McpToolCall"},"McpToolResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"result":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success"],"title":"McpToolResponse"},"MessageResponse":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"MessageResponse"},"ParseRuleRequest":{"properties":{"description":{"type":"string","title":"Description"}},"type":"object","required":["description"],"title":"ParseRuleRequest","description":"Request to parse a natural language rule"},"PlatformExperimentCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description","default":""},"platform":{"type":"string","title":"Platform"},"campaign_id":{"type":"string","title":"Campaign Id"},"campaign_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Campaign Ids"},"account_id":{"type":"string","title":"Account Id"},"traffic_split_pct":{"type":"integer","title":"Traffic Split Pct","default":50},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"},"treatment":{"anyOf":[{"$ref":"#/components/schemas/TreatmentConfig"},{"type":"null"}]}},"type":"object","required":["name","platform","campaign_id","account_id"],"title":"PlatformExperimentCreate"},"ResetPasswordRequest":{"properties":{"token":{"type":"string","title":"Token"},"new_password":{"type":"string","minLength":6,"title":"New Password"}},"type":"object","required":["token","new_password"],"title":"ResetPasswordRequest"},"RevertActionWithAccountRequest":{"properties":{"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"}},"type":"object","title":"RevertActionWithAccountRequest","description":"Request to revert an action with account info"},"RuleTemplateResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Icon"},"category":{"type":"string","title":"Category"},"conditions_summary":{"type":"string","title":"Conditions Summary"},"action_summary":{"type":"string","title":"Action Summary"},"guardrails_summary":{"type":"string","title":"Guardrails Summary"},"enabled_campaigns_count":{"type":"integer","title":"Enabled Campaigns Count","default":0},"is_custom":{"type":"boolean","title":"Is Custom","default":false},"original_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Prompt"}},"type":"object","required":["id","name","description","icon","category","conditions_summary","action_summary","guardrails_summary"],"title":"RuleTemplateResponse","description":"Rule template for API response"},"SuggestedAction":{"properties":{"campaign_id":{"type":"string","title":"Campaign Id"},"campaign_name":{"type":"string","title":"Campaign Name"},"platform":{"type":"string","title":"Platform"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"},"rule_template_id":{"type":"string","title":"Rule Template Id"},"rule_name":{"type":"string","title":"Rule Name"},"rule_icon":{"type":"string","title":"Rule Icon"},"action_type":{"$ref":"#/components/schemas/ActionType"},"old_value":{"type":"number","title":"Old Value"},"new_value":{"type":"number","title":"New Value"},"change_percent":{"type":"number","title":"Change Percent"},"reason":{"type":"string","title":"Reason"},"metric_values":{"additionalProperties":true,"type":"object","title":"Metric Values"},"priority_score":{"type":"number","title":"Priority Score","default":0.0}},"type":"object","required":["campaign_id","campaign_name","platform","rule_template_id","rule_name","rule_icon","action_type","old_value","new_value","change_percent","reason","metric_values"],"title":"SuggestedAction","description":"A suggested action from rule evaluation"},"TargetAudience":{"properties":{"age_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Age Min","default":18},"age_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Age Max","default":65},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender","default":"all"},"interests":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Interests","default":[]}},"type":"object","title":"TargetAudience"},"TokenConnectRequest":{"properties":{"platform":{"type":"string","title":"Platform"},"token":{"type":"string","title":"Token"}},"type":"object","required":["platform","token"],"title":"TokenConnectRequest","description":"Request body for connecting with a direct access/refresh token."},"TokenRefresh":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token"}},"type":"object","required":["refresh_token"],"title":"TokenRefresh"},"TokenResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"type":"string","title":"Refresh Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"}},"type":"object","required":["access_token","refresh_token"],"title":"TokenResponse"},"TreatmentConfig":{"properties":{"bidding_strategy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bidding Strategy"},"target_cpa":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Cpa"},"target_roas":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Roas"},"budget":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Budget"},"headlines":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Headlines"},"descriptions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Descriptions"}},"type":"object","title":"TreatmentConfig","description":"What to change in the treatment variant."},"UserCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"username":{"type":"string","maxLength":100,"minLength":3,"title":"Username"},"password":{"type":"string","minLength":6,"title":"Password"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"}},"type":"object","required":["email","username","password"],"title":"UserCreate"},"UserLogin":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"UserLogin"},"UserResponse":{"properties":{"id":{"type":"integer","title":"Id"},"email":{"type":"string","title":"Email"},"username":{"type":"string","title":"Username"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"is_active":{"type":"boolean","title":"Is Active"},"is_admin":{"type":"boolean","title":"Is Admin"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","email","username","is_active","is_admin","created_at"],"title":"UserResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VariantCreate":{"properties":{"variant_label":{"type":"string","title":"Variant Label","default":"B"},"is_control":{"type":"boolean","title":"Is Control","default":false},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"variant_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Variant Config"}},"type":"object","required":["name"],"title":"VariantCreate"},"VariantUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"variant_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Variant Config"}},"type":"object","title":"VariantUpdate"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"},"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"}}}}