{"openapi":"3.0.0","paths":{"/v1/organizations/{organizationId}":{"get":{"operationId":"OrganizationsController_findById_v1","parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Get organization by ID","tags":["Organizations"],"x-api-key-accessible":true},"patch":{"operationId":"OrganizationsController_update_v1","parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOrganizationDto"}}}},"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Update organization","tags":["Organizations"],"x-api-key-accessible":true}},"/v1/organizations/{organizationId}/members":{"get":{"operationId":"MembersController_list_v1","parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List organization members","tags":["Organization Members"],"x-api-key-accessible":true}},"/v1/organizations/{organizationId}/members/{memberId}":{"delete":{"operationId":"MembersController_delete_v1","parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}},{"name":"memberId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Remove member from organization","tags":["Organization Members"],"x-api-key-accessible":true}},"/v1/invitations/organization/{organizationId}":{"get":{"operationId":"InvitationsController_list_v1","parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"email","required":false,"in":"query","schema":{"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["pending","accepted","rejected","canceled"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List organization invitations","tags":["Invitations"],"x-api-key-accessible":true}},"/v1/invitations/organization/{organizationId}/{invitationId}":{"delete":{"operationId":"InvitationsController_delete_v1","parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}},{"name":"invitationId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Revoke invitation","tags":["Invitations"],"x-api-key-accessible":true}},"/v1/tools/serp/maps/campaigns":{"post":{"operationId":"MapsCampaignsController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMapsCampaignDto"}}}},"responses":{"201":{"description":""}},"security":[{"api-key":[]}],"summary":"Create maps campaign","tags":["SERP Maps"],"x-api-key-accessible":true},"get":{"operationId":"MapsPublicController_listCampaigns_v1","parameters":[{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"projectId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["active","paused","archived"]}},{"name":"isPublic","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"List maps campaigns","tags":["SERP Maps (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/maps/campaigns/{campaignId}":{"patch":{"operationId":"MapsCampaignsController_update_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMapsCampaignDto"}}}},"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Update maps campaign","tags":["SERP Maps"],"x-api-key-accessible":true},"delete":{"operationId":"MapsCampaignsController_delete_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete maps campaign","tags":["SERP Maps"],"x-api-key-accessible":true},"get":{"operationId":"MapsPublicController_getCampaign_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"Get maps campaign","tags":["SERP Maps (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/maps/campaigns/{campaignId}/status":{"patch":{"operationId":"MapsCampaignsController_updateStatus_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMapsCampaignStatusDto"}}}},"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Update maps campaign status","tags":["SERP Maps"],"x-api-key-accessible":true}},"/v1/tools/serp/maps/campaigns/{campaignId}/runs/run":{"post":{"operationId":"MapsRunsController_create_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"api-key":[]}],"summary":"Trigger manual run","tags":["SERP Maps — Runs"],"x-api-key-accessible":true}},"/v1/tools/serp/maps/campaigns/{campaignId}/runs/{runId}":{"delete":{"operationId":"MapsRunsController_delete_v1","parameters":[{"name":"runId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete run","tags":["SERP Maps — Runs"],"x-api-key-accessible":true},"get":{"operationId":"MapsPublicController_getRun_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"runId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"Get maps run","tags":["SERP Maps (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/maps/checks/{checkId}":{"delete":{"operationId":"MapsChecksController_delete_v1","parameters":[{"name":"checkId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete check","tags":["SERP Maps — Checks"],"x-api-key-accessible":true}},"/v1/tools/serp/maps/results/{resultId}":{"delete":{"operationId":"MapsResultsController_delete_v1","parameters":[{"name":"resultId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete result","tags":["SERP Maps — Results"],"x-api-key-accessible":true}},"/v1/tools/serp/maps/campaigns/{campaignId}/runs":{"get":{"operationId":"MapsPublicController_listRuns_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"campaignId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["running","completed","partial","failed","skipped"]}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"List maps runs","tags":["SERP Maps (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/maps/campaigns/{campaignId}/checks":{"get":{"operationId":"MapsPublicController_listChecks_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"runId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"campaignId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"surface","required":false,"in":"query","schema":{"type":"string","enum":["canvas","pack"]}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["pending","running","pending_callback","processing","completed","no_answer","failed"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List maps checks","tags":["SERP Maps (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/maps/campaigns/{campaignId}/runs/{runId}/checks":{"get":{"operationId":"MapsPublicController_listRunChecks_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"runId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"runId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"campaignId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"surface","required":false,"in":"query","schema":{"type":"string","enum":["canvas","pack"]}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["pending","running","pending_callback","processing","completed","no_answer","failed"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List maps checks for a run","tags":["SERP Maps (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/maps/campaigns/{campaignId}/results":{"get":{"operationId":"MapsPublicController_listResults_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"campaignId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"checkId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"keyword","required":false,"in":"query","schema":{"type":"string"}},{"name":"surface","required":false,"in":"query","schema":{"type":"string","enum":["canvas","pack"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List maps results for a campaign","tags":["SERP Maps (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/maps/campaigns/{campaignId}/runs/{runId}/heatmap":{"get":{"operationId":"MapsPublicController_getHeatmap_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"runId","required":true,"in":"path","schema":{"type":"string"}},{"name":"keyword","required":true,"in":"query","schema":{"minLength":1,"maxLength":500,"type":"string"}},{"name":"placeId","required":false,"in":"query","schema":{"minLength":1,"maxLength":300,"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Grid heatmap for one keyword of a run: the tracked business, or one competitor by placeId","tags":["SERP Maps (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/maps/campaigns/{campaignId}/runs/{runId}/divergence":{"get":{"operationId":"MapsPublicController_getDivergence_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"runId","required":true,"in":"path","schema":{"type":"string"}},{"name":"keyword","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Pack-vs-map divergence for one keyword of a run","tags":["SERP Maps (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/maps/campaigns/{campaignId}/runs/{runId}/competitors":{"get":{"operationId":"MapsPublicController_getCompetitors_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"runId","required":true,"in":"path","schema":{"type":"string"}},{"name":"keyword","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Competitor matrix for one keyword of a run","tags":["SERP Maps (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/maps/campaigns/{campaignId}/runs/{runId}/competitor-insights":{"get":{"operationId":"MapsPublicController_getCompetitorInsights_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"runId","required":true,"in":"path","schema":{"type":"string"}},{"name":"keyword","required":true,"in":"query","schema":{"minLength":1,"maxLength":500,"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Competitor intelligence for one keyword of a run: listings, review pace, map visibility and changes","tags":["SERP Maps (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/maps/campaigns/{campaignId}/competitor-trend":{"get":{"operationId":"MapsPublicController_getCompetitorTrend_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"keyword","required":true,"in":"query","schema":{"minLength":1,"maxLength":500,"type":"string"}},{"name":"place","required":false,"in":"query","schema":{"minLength":1,"maxLength":600,"default":"you","type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"One business across recent runs: rating, reviews and grid share","tags":["SERP Maps (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/maps/campaigns/{campaignId}/runs/{runId}/cells/{row}/{col}":{"get":{"operationId":"MapsPublicController_getCellDetail_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"runId","required":true,"in":"path","schema":{"type":"string"}},{"name":"row","required":true,"in":"path","schema":{"type":"number"}},{"name":"col","required":true,"in":"path","schema":{"type":"number"}},{"name":"keyword","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Pack and map results at one grid point","tags":["SERP Maps (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/maps/campaigns/{campaignId}/trend":{"get":{"operationId":"MapsPublicController_getTrend_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"keyword","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Local Presence Score over recent runs","tags":["SERP Maps (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/maps/campaigns/{campaignId}/alerts":{"get":{"operationId":"MapsPublicController_listAlerts_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["visibility_change","new_ad","ad_stopped","competitor_ad","position_entered_top10","position_left_top10","position_changed","position_url_changed","position_competitor_top3","position_ai_overview_citation","ad_started_serp","ad_stopped_serp","ad_new_advertiser","ad_copy_changed","ad_brand_bidding","maps_entered_top3","maps_left_top3","maps_lps_changed","maps_competitor_closed","maps_competitor_entered_top3","maps_competitor_review_spike","maps_rating_dropped","marketplace_entered_top10","marketplace_left_top10","marketplace_rank_changed","marketplace_price_changed"]}},{"name":"severity","required":false,"in":"query","schema":{"type":"string","enum":["success","warning","info","error"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List maps campaign alerts","tags":["SERP Maps (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/maps/campaigns/{campaignId}/stream":{"get":{"operationId":"MapsPublicController_stream_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"Stream campaign updates (SSE) — authed, own-org only","tags":["SERP Maps (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/position-tracker/campaigns":{"post":{"operationId":"PositionCampaignsController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePositionTrackerCampaignDto"}}}},"responses":{"201":{"description":""}},"security":[{"api-key":[]}],"summary":"Create position tracker campaign","tags":["SERP Position Tracker"],"x-api-key-accessible":true},"get":{"operationId":"PositionTrackerPublicController_listCampaigns_v1","parameters":[{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"projectId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"status","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["active","paused","archived"]},{"type":"array","items":{"type":"string","enum":["active","paused","archived"]}}]}},{"name":"isPublic","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"List campaigns (own org + public)","tags":["SERP Position Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/position-tracker/campaigns/{campaignId}":{"patch":{"operationId":"PositionCampaignsController_update_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePositionTrackerCampaignDto"}}}},"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Update position tracker campaign","tags":["SERP Position Tracker"],"x-api-key-accessible":true},"delete":{"operationId":"PositionCampaignsController_delete_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete position tracker campaign","tags":["SERP Position Tracker"],"x-api-key-accessible":true},"get":{"operationId":"PositionTrackerPublicController_getCampaign_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"Get campaign (own org or public)","tags":["SERP Position Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/position-tracker/campaigns/{campaignId}/status":{"patch":{"operationId":"PositionCampaignsController_updateStatus_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePositionTrackerCampaignStatusDto"}}}},"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Toggle campaign status","tags":["SERP Position Tracker"],"x-api-key-accessible":true}},"/v1/tools/serp/position-tracker/checks/{checkId}":{"delete":{"operationId":"PositionTrackerChecksController_delete_v1","parameters":[{"name":"checkId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete check","tags":["SERP Position Tracker — Checks"],"x-api-key-accessible":true}},"/v1/tools/serp/position-tracker/campaigns/analytics/summaries":{"get":{"operationId":"PositionTrackerPublicController_listCampaignSummaries_v1","parameters":[{"name":"ids","required":true,"in":"query","schema":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"minItems":1,"maxItems":8,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}]}},{"name":"dateFrom","required":true,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"dateTo","required":true,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"domain","required":false,"in":"query","schema":{"maxLength":253,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"Compact analytics summaries for many campaigns","tags":["SERP Position Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/position-tracker/campaigns/{campaignId}/analytics/overview":{"get":{"operationId":"PositionTrackerPublicController_analyticsOverview_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"keywords","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},{"name":"domains","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Campaign analytics overview","tags":["SERP Position Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/position-tracker/campaigns/{campaignId}/analytics/keywords/{keyword}":{"get":{"operationId":"PositionTrackerPublicController_analyticsKeyword_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"keyword","required":true,"in":"path","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"keywords","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},{"name":"domains","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Per-keyword analytics","tags":["SERP Position Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/position-tracker/campaigns/{campaignId}/analytics/serp-insights":{"get":{"operationId":"PositionTrackerPublicController_analyticsSerpInsights_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"keywords","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},{"name":"domains","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Competitors, share of voice, SERP features and volatility","tags":["SERP Position Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/position-tracker/campaigns/{campaignId}/keywords/{keyword}/serp":{"get":{"operationId":"PositionTrackerPublicController_keywordSerp_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"keyword","required":true,"in":"path","schema":{"type":"string"}},{"name":"checkId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"A keyword's top 20 SERP and your ranking URL history","tags":["SERP Position Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/position-tracker/campaigns/{campaignId}/runs":{"get":{"operationId":"PositionTrackerPublicController_listRuns_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"campaignId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"status","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["running","completed","partial","failed","skipped"]},{"type":"array","items":{"type":"string","enum":["running","completed","partial","failed","skipped"]}}]}},{"name":"trigger","required":false,"in":"query","schema":{"type":"string","enum":["scheduled","manual"]}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"List runs for campaign","tags":["SERP Position Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/position-tracker/campaigns/{campaignId}/runs/{runId}":{"get":{"operationId":"PositionTrackerPublicController_getRun_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"runId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"Get run","tags":["SERP Position Tracker (Public)"],"x-api-key-accessible":true},"delete":{"operationId":"PositionTrackerRunsController_delete_v1","parameters":[{"name":"runId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete run","tags":["SERP Position Tracker — Runs"],"x-api-key-accessible":true}},"/v1/tools/serp/position-tracker/campaigns/{campaignId}/runs/{runId}/checks":{"get":{"operationId":"PositionTrackerPublicController_listChecks_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"runId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"campaignId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"runId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"status","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["pending","running","pending_callback","processing","completed","no_answer","failed"]},{"type":"array","items":{"type":"string","enum":["pending","running","pending_callback","processing","completed","no_answer","failed"]}}]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List checks for run","tags":["SERP Position Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/position-tracker/campaigns/{campaignId}/results":{"get":{"operationId":"PositionTrackerPublicController_listResults_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"campaignId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"checkId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"domain","required":false,"in":"query","schema":{"type":"string"}},{"name":"keyword","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List results for campaign","tags":["SERP Position Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/position-tracker/campaigns/{campaignId}/latest-results":{"get":{"operationId":"PositionTrackerPublicController_listLatestResults_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"domain","required":false,"in":"query","schema":{"maxLength":253,"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Every keyword's newest completed check with its results","tags":["SERP Position Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/position-tracker/campaigns/{campaignId}/keywords/{keyword}/days":{"get":{"operationId":"PositionTrackerPublicController_keywordDays_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"keyword","required":true,"in":"path","schema":{"type":"string"}},{"name":"period","required":false,"in":"query","schema":{"default":"30d","type":"string","enum":["7d","30d","90d"]}},{"name":"timeZone","required":false,"in":"query","schema":{"minLength":1,"maxLength":64,"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"One keyword's rank grid row over a period","tags":["SERP Position Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/position-tracker/campaigns/{campaignId}/alerts":{"get":{"operationId":"PositionTrackerPublicController_listAlerts_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["visibility_change","new_ad","ad_stopped","competitor_ad","position_entered_top10","position_left_top10","position_changed","position_url_changed","position_competitor_top3","position_ai_overview_citation","ad_started_serp","ad_stopped_serp","ad_new_advertiser","ad_copy_changed","ad_brand_bidding","maps_entered_top3","maps_left_top3","maps_lps_changed","maps_competitor_closed","maps_competitor_entered_top3","maps_competitor_review_spike","maps_rating_dropped","marketplace_entered_top10","marketplace_left_top10","marketplace_rank_changed","marketplace_price_changed"]}},{"name":"severity","required":false,"in":"query","schema":{"type":"string","enum":["success","warning","info","error"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List campaign alerts","tags":["SERP Position Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/position-tracker/campaigns/{campaignId}/stream":{"get":{"operationId":"PositionTrackerPublicController_stream_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"Stream campaign updates (SSE) — authed, own-org only","tags":["SERP Position Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/position-tracker/results/{resultId}":{"delete":{"operationId":"PositionTrackerResultsController_delete_v1","parameters":[{"name":"resultId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete result","tags":["SERP Position Tracker — Results"],"x-api-key-accessible":true}},"/v1/tools/serp/position-tracker/campaigns/{campaignId}/runs/run":{"post":{"operationId":"PositionTrackerRunsController_create_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"api-key":[]}],"summary":"Trigger manual run","tags":["SERP Position Tracker — Runs"],"x-api-key-accessible":true}},"/v1/tools/serp/search-activity":{"get":{"operationId":"SearchActivityController_getActivity_v1","parameters":[{"name":"projectId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"days","required":false,"in":"query","schema":{"minimum":1,"maximum":90,"type":"integer"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Team search activity across every SERP search tool","tags":["SERP Search Activity"],"x-api-key-accessible":true}},"/v1/organizations/{organizationId}/projects":{"get":{"operationId":"ProjectsController_list_v1","parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List organization projects","tags":["Projects"],"x-api-key-accessible":true},"post":{"operationId":"ProjectsController_create_v1","parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectDto"}}}},"responses":{"201":{"description":""}},"security":[{"api-key":[]}],"summary":"Create project","tags":["Projects"],"x-api-key-accessible":true}},"/v1/organizations/{organizationId}/projects/saved-searches":{"get":{"operationId":"ProjectsController_listSavedSearches_v1","parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"projectId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"List saved searches in an organization","tags":["Projects"],"x-api-key-accessible":true}},"/v1/organizations/{organizationId}/projects/{projectId}":{"get":{"operationId":"ProjectsController_findById_v1","parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}},{"name":"projectId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Get project by ID","tags":["Projects"],"x-api-key-accessible":true},"patch":{"operationId":"ProjectsController_update_v1","parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}},{"name":"projectId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectDto"}}}},"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Update project","tags":["Projects"],"x-api-key-accessible":true},"delete":{"operationId":"ProjectsController_delete_v1","parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}},{"name":"projectId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete project","tags":["Projects"],"x-api-key-accessible":true}},"/v1/tools/serp/ad-tracker/campaigns":{"post":{"operationId":"AdTrackerCampaignsController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAdTrackerCampaignDto"}}}},"responses":{"201":{"description":""}},"security":[{"api-key":[]}],"summary":"Create campaign","tags":["SERP Ad Tracker — Campaigns"],"x-api-key-accessible":true},"get":{"operationId":"AdTrackerPublicController_listCampaigns_v1","parameters":[{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"projectId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"status","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["active","paused","archived"]},{"type":"array","items":{"type":"string","enum":["active","paused","archived"]}}]}},{"name":"isPublic","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"List campaigns (own org + public)","tags":["SERP Ad Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/ad-tracker/campaigns/{campaignId}":{"patch":{"operationId":"AdTrackerCampaignsController_update_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAdTrackerCampaignDto"}}}},"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Update campaign (own org only)","tags":["SERP Ad Tracker — Campaigns"],"x-api-key-accessible":true},"delete":{"operationId":"AdTrackerCampaignsController_delete_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete campaign (own org only)","tags":["SERP Ad Tracker — Campaigns"],"x-api-key-accessible":true},"get":{"operationId":"AdTrackerPublicController_getCampaign_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"Get campaign (own org or public)","tags":["SERP Ad Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/ad-tracker/campaigns/{campaignId}/status":{"patch":{"operationId":"AdTrackerCampaignsController_updateStatus_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAdTrackerCampaignStatusDto"}}}},"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Toggle campaign status","tags":["SERP Ad Tracker — Campaigns"],"x-api-key-accessible":true}},"/v1/tools/serp/ad-tracker/checks/{checkId}":{"delete":{"operationId":"AdTrackerChecksController_delete_v1","parameters":[{"name":"checkId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete check","tags":["SERP Ad Tracker — Checks"],"x-api-key-accessible":true}},"/v1/tools/serp/ad-tracker/campaigns/results/latest":{"get":{"operationId":"AdTrackerPublicController_listLatestResults_v1","parameters":[{"name":"ids","required":true,"in":"query","schema":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"minItems":1,"maxItems":8,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}]}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"default":100,"type":"integer"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Each campaign's newest results, for many campaigns","tags":["SERP Ad Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/ad-tracker/campaigns/{campaignId}/analytics/overview":{"get":{"operationId":"AdTrackerPublicController_analyticsOverview_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"keywords","required":false,"in":"query","schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":500},{"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":500}}]}},{"name":"domains","required":false,"in":"query","schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":500},{"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":500}}]}},{"name":"adTypes","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["text","shopping","local","other"]},{"type":"array","items":{"type":"string","enum":["text","shopping","local","other"]}}]}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Campaign analytics overview","tags":["SERP Ad Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/ad-tracker/campaigns/{campaignId}/analytics/advertisers":{"get":{"operationId":"AdTrackerPublicController_analyticsAdvertisers_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"keywords","required":false,"in":"query","schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":500},{"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":500}}]}},{"name":"domains","required":false,"in":"query","schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":500},{"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":500}}]}},{"name":"adTypes","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["text","shopping","local","other"]},{"type":"array","items":{"type":"string","enum":["text","shopping","local","other"]}}]}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Advertisers, ad copy, landing pages and ad mix over a window","tags":["SERP Ad Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/ad-tracker/campaigns/{campaignId}/analytics/keywords/{keyword}":{"get":{"operationId":"AdTrackerPublicController_analyticsKeyword_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"keyword","required":true,"in":"path","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"keywords","required":false,"in":"query","schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":500},{"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":500}}]}},{"name":"domains","required":false,"in":"query","schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":500},{"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":500}}]}},{"name":"adTypes","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["text","shopping","local","other"]},{"type":"array","items":{"type":"string","enum":["text","shopping","local","other"]}}]}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Per-keyword analytics","tags":["SERP Ad Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/ad-tracker/campaigns/{campaignId}/runs":{"get":{"operationId":"AdTrackerPublicController_listRuns_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"campaignId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"status","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["running","completed","partial","failed","skipped"]},{"type":"array","items":{"type":"string","enum":["running","completed","partial","failed","skipped"]}}]}},{"name":"trigger","required":false,"in":"query","schema":{"type":"string","enum":["scheduled","manual"]}},{"name":"dateFrom","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"List runs for campaign","tags":["SERP Ad Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/ad-tracker/campaigns/{campaignId}/runs/{runId}":{"get":{"operationId":"AdTrackerPublicController_getRun_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"runId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"Get run","tags":["SERP Ad Tracker (Public)"],"x-api-key-accessible":true},"delete":{"operationId":"AdTrackerRunsController_delete_v1","parameters":[{"name":"runId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete run","tags":["SERP Ad Tracker — Runs"],"x-api-key-accessible":true}},"/v1/tools/serp/ad-tracker/campaigns/{campaignId}/runs/{runId}/checks":{"get":{"operationId":"AdTrackerPublicController_listChecks_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"runId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"campaignId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"runId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"status","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["pending","running","pending_callback","processing","completed","no_answer","failed"]},{"type":"array","items":{"type":"string","enum":["pending","running","pending_callback","processing","completed","no_answer","failed"]}}]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List checks for run","tags":["SERP Ad Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/ad-tracker/campaigns/{campaignId}/results":{"get":{"operationId":"AdTrackerPublicController_listResults_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"campaignId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"checkId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"domain","required":false,"in":"query","schema":{"type":"string"}},{"name":"keyword","required":false,"in":"query","schema":{"type":"string"}},{"name":"adTypes","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["text","shopping","local","other"]},{"type":"array","items":{"type":"string","enum":["text","shopping","local","other"]}}]}},{"name":"dateFrom","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List results for campaign","tags":["SERP Ad Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/ad-tracker/campaigns/{campaignId}/alerts":{"get":{"operationId":"AdTrackerPublicController_listAlerts_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["visibility_change","new_ad","ad_stopped","competitor_ad","position_entered_top10","position_left_top10","position_changed","position_url_changed","position_competitor_top3","position_ai_overview_citation","ad_started_serp","ad_stopped_serp","ad_new_advertiser","ad_copy_changed","ad_brand_bidding","maps_entered_top3","maps_left_top3","maps_lps_changed","maps_competitor_closed","maps_competitor_entered_top3","maps_competitor_review_spike","maps_rating_dropped","marketplace_entered_top10","marketplace_left_top10","marketplace_rank_changed","marketplace_price_changed"]}},{"name":"severity","required":false,"in":"query","schema":{"type":"string","enum":["success","warning","info","error"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List campaign alerts","tags":["SERP Ad Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/ad-tracker/campaigns/{campaignId}/stream":{"get":{"operationId":"AdTrackerPublicController_stream_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"Stream campaign updates (SSE) — authed, own-org only","tags":["SERP Ad Tracker (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/ad-tracker/results/{resultId}":{"delete":{"operationId":"AdTrackerResultsController_delete_v1","parameters":[{"name":"resultId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete result","tags":["SERP Ad Tracker — Results"],"x-api-key-accessible":true}},"/v1/tools/serp/ad-tracker/campaigns/{campaignId}/runs/run":{"post":{"operationId":"AdTrackerRunsController_create_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"api-key":[]}],"summary":"Trigger manual run","tags":["SERP Ad Tracker — Runs"],"x-api-key-accessible":true}},"/v1/tools/serp/proxy-search":{"get":{"operationId":"ProxySearchController_list_v1","parameters":[{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"projectId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"userId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"array","items":{"type":"string","enum":["pending","running","completed","partial","failed"]}}},{"name":"saved","required":false,"in":"query","schema":{"type":"string"}},{"name":"demo","required":false,"in":"query","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List proxy searches","tags":["SERP Proxy Search"],"x-api-key-accessible":true},"post":{"operationId":"ProxySearchController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProxySearchDto"}}}},"responses":{"201":{"description":""}},"security":[{"api-key":[]}],"summary":"Create new proxy search","tags":["SERP Proxy Search"],"x-api-key-accessible":true}},"/v1/tools/serp/proxy-search/{searchId}":{"delete":{"operationId":"ProxySearchController_delete_v1","parameters":[{"name":"searchId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete proxy search","tags":["SERP Proxy Search"],"x-api-key-accessible":true},"get":{"operationId":"ProxySearchPublicController_getById_v1","parameters":[{"name":"searchId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Get proxy search with pages","tags":["SERP Proxy Search (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/proxy-search/{searchId}/pages":{"post":{"operationId":"ProxySearchController_createPages_v1","parameters":[{"name":"searchId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddProxySearchPagesDto"}}}},"responses":{"201":{"description":""}},"security":[{"api-key":[]}],"summary":"Add pages to existing search","tags":["SERP Proxy Search"],"x-api-key-accessible":true},"get":{"operationId":"ProxySearchPublicController_listPages_v1","parameters":[{"name":"searchId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"searchId","required":true,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"array","items":{"type":"string","enum":["pending","running","completed","partial","failed"]}}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List pages for a search","tags":["SERP Proxy Search (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/proxy-search/{searchId}/pages/{pageId}":{"delete":{"operationId":"ProxySearchController_deletePage_v1","parameters":[{"name":"pageId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete a search page","tags":["SERP Proxy Search"],"x-api-key-accessible":true},"get":{"operationId":"ProxySearchPublicController_getPageById_v1","parameters":[{"name":"searchId","required":true,"in":"path","schema":{"type":"string"}},{"name":"pageId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Get a search page","tags":["SERP Proxy Search (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/proxy-search/{searchId}/pages/{pageId}/html":{"get":{"operationId":"ProxySearchPublicController_downloadPageHtml_v1","parameters":[{"name":"searchId","required":true,"in":"path","schema":{"type":"string"}},{"name":"pageId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"api-key":[]}],"summary":"Download stored HTML for a search page","tags":["SERP Proxy Search (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/proxy-search/{searchId}/stream":{"get":{"operationId":"ProxySearchPublicController_stream_v1","parameters":[{"name":"searchId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"Stream search progress (SSE)","tags":["SERP Proxy Search (Public)"],"x-api-key-accessible":true}},"/v1/organizations/{organizationId}/projects/{projectId}/dashboard":{"get":{"operationId":"ProjectDashboardController_getProjectDashboard_v1","parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}},{"name":"projectId","required":true,"in":"path","schema":{"type":"string"}},{"name":"period","required":false,"in":"query","schema":{"default":"30d","type":"string","enum":["7d","30d","90d"]}},{"name":"timeZone","required":false,"in":"query","schema":{"minLength":1,"maxLength":64,"type":"string"}},{"name":"sections","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["position","ads","maps","ai","marketplace","gaps","campaigns","changes","searches"]},{"minItems":1,"type":"array","items":{"type":"string","enum":["position","ads","maps","ai","marketplace","gaps","campaigns","changes","searches"]}}]}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Get a project dashboard (or some of its sections)","tags":["Dashboards"],"x-api-key-accessible":true}},"/v1/organizations/{organizationId}/projects/{projectId}/gaps":{"get":{"operationId":"ProjectDashboardController_listGaps_v1","parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}},{"name":"projectId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"period","required":false,"in":"query","schema":{"default":"30d","type":"string","enum":["7d","30d","90d"]}},{"name":"timeZone","required":false,"in":"query","schema":{"minLength":1,"maxLength":64,"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"List every gap of a project's rankings","tags":["Dashboards"],"x-api-key-accessible":true}},"/v1/organizations/{organizationId}/dashboard":{"get":{"operationId":"ProjectDashboardController_getPortfolioDashboard_v1","parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}},{"name":"period","required":false,"in":"query","schema":{"default":"30d","type":"string","enum":["7d","30d","90d"]}},{"name":"timeZone","required":false,"in":"query","schema":{"minLength":1,"maxLength":64,"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"type":"string","enum":["true","false"]}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Get the All projects dashboard","tags":["Dashboards"],"x-api-key-accessible":true}},"/v1/organizations/{organizationId}/changes":{"get":{"operationId":"ProjectDashboardController_listChanges_v1","parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"projectId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"tool","required":false,"in":"query","schema":{"type":"string","enum":["position","ads","maps","ai","marketplace"]}},{"name":"severity","required":false,"in":"query","schema":{"type":"string","enum":["success","warning","info","error"]}},{"name":"period","required":false,"in":"query","schema":{"type":"string","enum":["7d","30d","90d"]}},{"name":"timeZone","required":false,"in":"query","schema":{"minLength":1,"maxLength":64,"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"List what changed across projects and tools","tags":["Dashboards"],"x-api-key-accessible":true}},"/v1/tools/ai/visibility/campaigns":{"get":{"operationId":"AiVisibilityPublicController_listCampaigns_v1","parameters":[{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"projectId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"status","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["active","paused","archived"]},{"type":"array","items":{"type":"string","enum":["active","paused","archived"]}}]}},{"name":"isPublic","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"List campaigns (own org + public)","tags":["AI Visibility (Public)"],"x-api-key-accessible":true},"post":{"operationId":"AiVisibilityCampaignsController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAiVisibilityCampaignDto"}}}},"responses":{"201":{"description":""}},"security":[{"api-key":[]}],"summary":"Create AI visibility campaign","tags":["AI Visibility"],"x-api-key-accessible":true}},"/v1/tools/ai/visibility/campaigns/analytics/overviews":{"get":{"operationId":"AiVisibilityPublicController_listCampaignOverviews_v1","parameters":[{"name":"ids","required":true,"in":"query","schema":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"minItems":1,"maxItems":50,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}]}},{"name":"dateFrom","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"prompts","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},{"name":"platforms","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["chatgpt","google_ai_overview","google_ai_mode","gemini","perplexity"]},{"type":"array","items":{"type":"string","enum":["chatgpt","google_ai_overview","google_ai_mode","gemini","perplexity"]}}]}},{"name":"locations","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"Analytics overviews for many campaigns, keyed by campaign id","tags":["AI Visibility (Public)"],"x-api-key-accessible":true}},"/v1/tools/ai/visibility/campaigns/{campaignId}":{"get":{"operationId":"AiVisibilityPublicController_getCampaign_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"Get campaign (own org or public)","tags":["AI Visibility (Public)"],"x-api-key-accessible":true},"patch":{"operationId":"AiVisibilityCampaignsController_update_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAiVisibilityCampaignDto"}}}},"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Update AI visibility campaign","tags":["AI Visibility"],"x-api-key-accessible":true},"delete":{"operationId":"AiVisibilityCampaignsController_delete_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete AI visibility campaign","tags":["AI Visibility"],"x-api-key-accessible":true}},"/v1/tools/ai/visibility/campaigns/{campaignId}/runs":{"get":{"operationId":"AiVisibilityPublicController_listRuns_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"campaignId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"status","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["running","completed","partial","failed","skipped"]},{"type":"array","items":{"type":"string","enum":["running","completed","partial","failed","skipped"]}}]}},{"name":"trigger","required":false,"in":"query","schema":{"type":"string","enum":["scheduled","manual"]}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"List runs for campaign","tags":["AI Visibility (Public)"],"x-api-key-accessible":true}},"/v1/tools/ai/visibility/campaigns/{campaignId}/runs/{runId}":{"get":{"operationId":"AiVisibilityPublicController_getRun_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"runId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"Get run","tags":["AI Visibility (Public)"],"x-api-key-accessible":true},"delete":{"operationId":"AiVisibilityRunsController_delete_v1","parameters":[{"name":"runId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete run","tags":["AI Visibility — Runs"],"x-api-key-accessible":true}},"/v1/tools/ai/visibility/campaigns/{campaignId}/checks":{"get":{"operationId":"AiVisibilityPublicController_listCampaignChecks_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"campaignId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"runId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"platform","required":false,"in":"query","schema":{"type":"string","enum":["chatgpt","google_ai_overview","google_ai_mode","gemini","perplexity"]}},{"name":"location","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["pending","running","pending_callback","processing","completed","no_answer","failed"]},{"type":"array","items":{"type":"string","enum":["pending","running","pending_callback","processing","completed","no_answer","failed"]}}]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List checks for campaign","tags":["AI Visibility (Public)"],"x-api-key-accessible":true}},"/v1/tools/ai/visibility/campaigns/{campaignId}/runs/{runId}/checks":{"get":{"operationId":"AiVisibilityPublicController_listChecks_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"runId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"campaignId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"runId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"platform","required":false,"in":"query","schema":{"type":"string","enum":["chatgpt","google_ai_overview","google_ai_mode","gemini","perplexity"]}},{"name":"location","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["pending","running","pending_callback","processing","completed","no_answer","failed"]},{"type":"array","items":{"type":"string","enum":["pending","running","pending_callback","processing","completed","no_answer","failed"]}}]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List checks for run","tags":["AI Visibility (Public)"],"x-api-key-accessible":true}},"/v1/tools/ai/visibility/campaigns/{campaignId}/checks/{checkId}":{"get":{"operationId":"AiVisibilityPublicController_getCheck_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"checkId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Get check detail","tags":["AI Visibility (Public)"],"x-api-key-accessible":true}},"/v1/tools/ai/visibility/campaigns/{campaignId}/alerts":{"get":{"operationId":"AiVisibilityPublicController_listAlerts_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"campaignId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["visibility_change","new_ad","ad_stopped","competitor_ad","position_entered_top10","position_left_top10","position_changed","position_url_changed","position_competitor_top3","position_ai_overview_citation","ad_started_serp","ad_stopped_serp","ad_new_advertiser","ad_copy_changed","ad_brand_bidding","maps_entered_top3","maps_left_top3","maps_lps_changed","maps_competitor_closed","maps_competitor_entered_top3","maps_competitor_review_spike","maps_rating_dropped","marketplace_entered_top10","marketplace_left_top10","marketplace_rank_changed","marketplace_price_changed"]}},{"name":"severity","required":false,"in":"query","schema":{"type":"string","enum":["success","warning","info","error"]}},{"name":"read","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List campaign alerts","tags":["AI Visibility (Public)"],"x-api-key-accessible":true}},"/v1/tools/ai/visibility/campaigns/{campaignId}/stream":{"get":{"operationId":"AiVisibilityPublicController_stream_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"Stream campaign updates (SSE) — authed, own-org only","tags":["AI Visibility (Public)"],"x-api-key-accessible":true}},"/v1/tools/ai/visibility/campaigns/{campaignId}/analytics/overview":{"get":{"operationId":"AiVisibilityAnalyticsController_overview_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"prompts","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},{"name":"platforms","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["chatgpt","google_ai_overview","google_ai_mode","gemini","perplexity"]},{"type":"array","items":{"type":"string","enum":["chatgpt","google_ai_overview","google_ai_mode","gemini","perplexity"]}}]}},{"name":"locations","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Campaign analytics overview","tags":["AI Visibility (Public) — Analytics"],"x-api-key-accessible":true}},"/v1/tools/ai/visibility/campaigns/{campaignId}/analytics/visibility":{"get":{"operationId":"AiVisibilityAnalyticsController_visibility_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"prompts","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},{"name":"platforms","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["chatgpt","google_ai_overview","google_ai_mode","gemini","perplexity"]},{"type":"array","items":{"type":"string","enum":["chatgpt","google_ai_overview","google_ai_mode","gemini","perplexity"]}}]}},{"name":"locations","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Visibility breakdown (by prompt / location / platform)","tags":["AI Visibility (Public) — Analytics"],"x-api-key-accessible":true}},"/v1/tools/ai/visibility/campaigns/{campaignId}/analytics/ads":{"get":{"operationId":"AiVisibilityAnalyticsController_ads_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"prompts","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},{"name":"platforms","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["chatgpt","google_ai_overview","google_ai_mode","gemini","perplexity"]},{"type":"array","items":{"type":"string","enum":["chatgpt","google_ai_overview","google_ai_mode","gemini","perplexity"]}}]}},{"name":"locations","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Ad detections and coverage gaps","tags":["AI Visibility (Public) — Analytics"],"x-api-key-accessible":true}},"/v1/tools/ai/visibility/campaigns/{campaignId}/analytics/competitors":{"get":{"operationId":"AiVisibilityAnalyticsController_competitors_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"prompts","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},{"name":"platforms","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["chatgpt","google_ai_overview","google_ai_mode","gemini","perplexity"]},{"type":"array","items":{"type":"string","enum":["chatgpt","google_ai_overview","google_ai_mode","gemini","perplexity"]}}]}},{"name":"locations","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Competitor analysis (mentions, share-of-voice, insights)","tags":["AI Visibility (Public) — Analytics"],"x-api-key-accessible":true}},"/v1/tools/ai/visibility/campaigns/{campaignId}/analytics/prompts":{"get":{"operationId":"AiVisibilityAnalyticsController_prompts_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"prompts","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},{"name":"platforms","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["chatgpt","google_ai_overview","google_ai_mode","gemini","perplexity"]},{"type":"array","items":{"type":"string","enum":["chatgpt","google_ai_overview","google_ai_mode","gemini","perplexity"]}}]}},{"name":"locations","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Per-prompt status grid + summary","tags":["AI Visibility (Public) — Analytics"],"x-api-key-accessible":true}},"/v1/tools/ai/visibility/campaigns/{campaignId}/analytics/sources":{"get":{"operationId":"AiVisibilityAnalyticsController_sources_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"prompts","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},{"name":"platforms","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["chatgpt","google_ai_overview","google_ai_mode","gemini","perplexity"]},{"type":"array","items":{"type":"string","enum":["chatgpt","google_ai_overview","google_ai_mode","gemini","perplexity"]}}]}},{"name":"locations","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Cited sources: top domains, your cited pages, and the source gap","tags":["AI Visibility (Public) — Analytics"],"x-api-key-accessible":true}},"/v1/tools/ai/visibility/campaigns/{campaignId}/analytics/depth":{"get":{"operationId":"AiVisibilityAnalyticsController_depth_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"prompts","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},{"name":"platforms","required":false,"in":"query","schema":{"anyOf":[{"type":"string","enum":["chatgpt","google_ai_overview","google_ai_mode","gemini","perplexity"]},{"type":"array","items":{"type":"string","enum":["chatgpt","google_ai_overview","google_ai_mode","gemini","perplexity"]}}]}},{"name":"locations","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Sentiment and recommendation trends, answer types and depth","tags":["AI Visibility (Public) — Analytics"],"x-api-key-accessible":true}},"/v1/tools/ai/visibility/campaigns/{campaignId}/status":{"patch":{"operationId":"AiVisibilityCampaignsController_updateStatus_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAiVisibilityCampaignStatusDto"}}}},"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Toggle campaign status","tags":["AI Visibility"],"x-api-key-accessible":true}},"/v1/tools/ai/visibility/campaigns/{campaignId}/runs/run":{"post":{"operationId":"AiVisibilityRunsController_create_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"api-key":[]}],"summary":"Trigger manual campaign run","tags":["AI Visibility — Runs"],"x-api-key-accessible":true}},"/v1/tools/ai/visibility/checks/{checkId}":{"delete":{"operationId":"AiVisibilityChecksController_delete_v1","parameters":[{"name":"checkId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete check","tags":["AI Visibility — Checks"],"x-api-key-accessible":true}},"/v1/tools/ai/visibility/suggestions":{"post":{"operationId":"AiVisibilitySuggestionsController_generate_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiSuggestRequestDto"}}}},"responses":{"201":{"description":""}},"security":[{"api-key":[]}],"summary":"Generate AI-powered suggestions","tags":["AI Visibility"],"x-api-key-accessible":true}},"/v1/tools/ecommerce/marketplace/campaigns":{"post":{"operationId":"MarketplaceCampaignsController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMarketplaceCampaignDto"}}}},"responses":{"201":{"description":""}},"security":[{"api-key":[]}],"summary":"Create marketplace campaign","tags":["Marketplace"],"x-api-key-accessible":true},"get":{"operationId":"MarketplacePublicController_listCampaigns_v1","parameters":[{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"projectId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"platform","required":false,"in":"query","schema":{"type":"string","enum":["google_shopping","amazon","walmart"]}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["active","paused","archived"]}},{"name":"isPublic","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"List marketplace campaigns","tags":["Marketplace (Public)"],"x-api-key-accessible":true}},"/v1/tools/ecommerce/marketplace/campaigns/{id}":{"patch":{"operationId":"MarketplaceCampaignsController_update_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMarketplaceCampaignDto"}}}},"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Update marketplace campaign","tags":["Marketplace"],"x-api-key-accessible":true},"delete":{"operationId":"MarketplaceCampaignsController_delete_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete marketplace campaign","tags":["Marketplace"],"x-api-key-accessible":true}},"/v1/tools/ecommerce/marketplace/campaigns/{id}/status":{"patch":{"operationId":"MarketplaceCampaignsController_updateStatus_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMarketplaceCampaignStatusDto"}}}},"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Update marketplace campaign status","tags":["Marketplace"],"x-api-key-accessible":true}},"/v1/tools/ecommerce/marketplace/campaigns/{campaignId}/runs/run":{"post":{"operationId":"MarketplaceRunsController_create_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"api-key":[]}],"summary":"Trigger manual run","tags":["Marketplace — Runs"],"x-api-key-accessible":true}},"/v1/tools/ecommerce/marketplace/campaigns/{campaignId}/runs/{runId}":{"delete":{"operationId":"MarketplaceRunsController_delete_v1","parameters":[{"name":"runId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete run","tags":["Marketplace — Runs"],"x-api-key-accessible":true}},"/v1/tools/ecommerce/marketplace/checks/{checkId}":{"delete":{"operationId":"MarketplaceChecksController_delete_v1","parameters":[{"name":"checkId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete check","tags":["Marketplace — Checks"],"x-api-key-accessible":true}},"/v1/tools/ecommerce/marketplace/results/{resultId}":{"delete":{"operationId":"MarketplaceResultsController_delete_v1","parameters":[{"name":"resultId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete result","tags":["Marketplace — Results"],"x-api-key-accessible":true}},"/v1/tools/ecommerce/marketplace/campaigns/{campaignId}":{"get":{"operationId":"MarketplacePublicController_getCampaign_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"Get marketplace campaign","tags":["Marketplace (Public)"],"x-api-key-accessible":true}},"/v1/tools/ecommerce/marketplace/campaigns/{campaignId}/runs":{"get":{"operationId":"MarketplacePublicController_listRuns_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"campaignId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["running","completed","partial","failed","skipped"]}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"List marketplace runs","tags":["Marketplace (Public)"],"x-api-key-accessible":true}},"/v1/tools/ecommerce/marketplace/runs/{runId}":{"get":{"operationId":"MarketplacePublicController_getRun_v1","parameters":[{"name":"runId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"Get marketplace run","tags":["Marketplace (Public)"],"x-api-key-accessible":true}},"/v1/tools/ecommerce/marketplace/campaigns/{campaignId}/checks":{"get":{"operationId":"MarketplacePublicController_listChecks_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"runId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"campaignId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["pending","running","pending_callback","processing","completed","no_answer","failed"]}},{"name":"keyword","required":false,"in":"query","schema":{"maxLength":500,"type":"string"}},{"name":"platform","required":false,"in":"query","schema":{"type":"string","enum":["google_shopping","amazon","walmart"]}},{"name":"marketplace","required":false,"in":"query","schema":{"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List marketplace checks","tags":["Marketplace (Public)"],"x-api-key-accessible":true}},"/v1/tools/ecommerce/marketplace/campaigns/{campaignId}/results":{"get":{"operationId":"MarketplacePublicController_listResults_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"checkId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"runId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"campaignId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"keyword","required":false,"in":"query","schema":{"maxLength":500,"type":"string"}},{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["organic_result","paid_result"]}},{"name":"platform","required":false,"in":"query","schema":{"type":"string","enum":["google_shopping","amazon","walmart"]}},{"name":"marketplace","required":false,"in":"query","schema":{"maxLength":20,"type":"string"}},{"name":"rankedOnly","required":false,"in":"query","schema":{"type":"string"}},{"name":"trackedOnly","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List marketplace results","tags":["Marketplace (Public)"],"x-api-key-accessible":true}},"/v1/tools/ecommerce/marketplace/campaigns/{campaignId}/overview":{"get":{"operationId":"MarketplacePublicController_getOverview_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Marketplace visibility overview for the latest run","tags":["Marketplace (Public)"],"x-api-key-accessible":true}},"/v1/tools/ecommerce/marketplace/campaigns/{campaignId}/trend":{"get":{"operationId":"MarketplacePublicController_getTrend_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"keyword","required":true,"in":"query","schema":{"minLength":1,"maxLength":200,"type":"string"}},{"name":"platform","required":true,"in":"query","schema":{"type":"string","enum":["google_shopping","amazon","walmart"]}},{"name":"marketplace","required":false,"in":"query","schema":{"type":"string","maxLength":20,"nullable":true}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Rank history for one keyword on one target","tags":["Marketplace (Public)"],"x-api-key-accessible":true}},"/v1/tools/ecommerce/marketplace/campaigns/{campaignId}/competitors":{"get":{"operationId":"MarketplacePublicController_getCompetitors_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Products that outrank or surround the tracked ones","tags":["Marketplace (Public)"],"x-api-key-accessible":true}},"/v1/tools/ecommerce/marketplace/campaigns/{campaignId}/alerts":{"get":{"operationId":"MarketplacePublicController_listAlerts_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["visibility_change","new_ad","ad_stopped","competitor_ad","position_entered_top10","position_left_top10","position_changed","position_url_changed","position_competitor_top3","position_ai_overview_citation","ad_started_serp","ad_stopped_serp","ad_new_advertiser","ad_copy_changed","ad_brand_bidding","maps_entered_top3","maps_left_top3","maps_lps_changed","maps_competitor_closed","maps_competitor_entered_top3","maps_competitor_review_spike","maps_rating_dropped","marketplace_entered_top10","marketplace_left_top10","marketplace_rank_changed","marketplace_price_changed"]}},{"name":"severity","required":false,"in":"query","schema":{"type":"string","enum":["success","warning","info","error"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List marketplace alerts","tags":["Marketplace (Public)"],"x-api-key-accessible":true}},"/v1/tools/ecommerce/marketplace/campaigns/{campaignId}/stream":{"get":{"operationId":"MarketplacePublicController_stream_v1","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"Stream campaign updates (SSE) — authed, own-org only","tags":["Marketplace (Public)"],"x-api-key-accessible":true}},"/v1/tools/serp/direct-search":{"get":{"operationId":"DirectSearchController_list_v1","parameters":[{"name":"cursor","required":false,"in":"query","schema":{"maxLength":255,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"type":"integer"}},{"name":"sort","required":false,"in":"query","schema":{"maxLength":50,"type":"string"}},{"name":"order","required":false,"in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"maxLength":100,"type":"string"}},{"name":"organizationId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"projectId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"userId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"saved","required":false,"in":"query","schema":{"type":"string"}},{"name":"demo","required":false,"in":"query","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"api-key":[]}],"summary":"List direct searches","tags":["SERP Direct Search"],"x-api-key-accessible":true},"post":{"operationId":"DirectSearchController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDirectSearchDto"}}}},"responses":{"201":{"description":""}},"security":[{"api-key":[]}],"summary":"Create direct search","tags":["SERP Direct Search"],"x-api-key-accessible":true}},"/v1/tools/serp/direct-search/{searchId}":{"get":{"operationId":"DirectSearchController_getById_v1","parameters":[{"name":"searchId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Get direct search","tags":["SERP Direct Search"],"x-api-key-accessible":true},"delete":{"operationId":"DirectSearchController_delete_v1","parameters":[{"name":"searchId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"api-key":[]}],"summary":"Delete direct search","tags":["SERP Direct Search"],"x-api-key-accessible":true}}},"info":{"title":"iSearchFrom API Key API","description":"Routes accessible via API key authentication (X-API-Key header)","version":"1.0"},"tags":[],"servers":[],"components":{"securitySchemes":{"api-key":{"type":"apiKey","in":"header","name":"X-API-Key"}},"schemas":{"UpdateOrganizationDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","maxLength":500,"nullable":true},"logoId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","nullable":true},"defaultMemberDailyTokens":{"type":"integer","minimum":0,"maximum":9007199254740991,"nullable":true},"defaultMemberMonthlyTokens":{"type":"integer","minimum":0,"maximum":9007199254740991,"nullable":true}}},"CreateMapsCampaignDto":{"type":"object","properties":{"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","maxLength":500},"trackedName":{"type":"string","minLength":1,"maxLength":300},"trackedPlaceId":{"type":"string","maxLength":300},"keywords":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"centerLat":{"type":"number","minimum":-90,"maximum":90},"centerLon":{"type":"number","minimum":-180,"maximum":180},"radiusKm":{"type":"number","minimum":0.25,"maximum":50},"gridSize":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"zoom":{"default":14,"type":"number","minimum":8,"maximum":20},"surfaces":{"default":["canvas","pack"],"minItems":1,"maxItems":2,"type":"array","items":{"type":"string","enum":["canvas","pack"]}},"excludedCells":{"default":[],"maxItems":169,"type":"array","items":{"type":"string","pattern":"^\\d+:\\d+$"}},"country":{"type":"string","minLength":1,"maxLength":10},"language":{"type":"string","minLength":1,"maxLength":10,"description":"Full locale code, e.g. \"en-US\" or \"en-GB\", not a bare language like \"en\"."},"device":{"type":"string","enum":["desktop","desktop_chrome","desktop_edge","desktop_firefox","desktop_opera","desktop_safari","mobile","mobile_android","mobile_ios","tablet","tablet_android","tablet_ios"]},"alertSettings":{"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"notify":{"type":"string","enum":["all","problems"]},"types":{"description":"Alert types to turn on (true) or off (false). A type left out is on, except the opt-in ones (competitor and copy changes: new advertisers, ad copy changes, competitors bidding on your brand, ranking URL changes, competitors entering the top 3, AI Overview citations, maps competitor closures and review spikes, rating drops), which stay off until set to true. The app turns these on for campaigns it creates; a campaign created through the API or MCP without `types` has them off.","type":"object","additionalProperties":{"type":"boolean"}},"email":{"default":true,"type":"boolean"},"webhookUrl":{"type":"string","format":"uri","default":null,"nullable":true},"destinationIds":{"maxItems":10,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"nullable":true}}},"isPublic":{"type":"boolean"},"schedule":{"type":"object","properties":{"cronExpression":{"type":"string","minLength":1,"maxLength":50},"timezone":{"type":"string","maxLength":50},"enabled":{"type":"boolean"}},"required":["cronExpression"]}},"required":["projectId","name","trackedName","keywords","centerLat","centerLon","radiusKm","gridSize","country","language"]},"UpdateMapsCampaignDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","maxLength":500},"trackedName":{"type":"string","minLength":1,"maxLength":300},"trackedPlaceId":{"type":"string","maxLength":300},"keywords":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"centerLat":{"type":"number","minimum":-90,"maximum":90},"centerLon":{"type":"number","minimum":-180,"maximum":180},"radiusKm":{"type":"number","minimum":0.25,"maximum":50},"gridSize":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"zoom":{"default":14,"type":"number","minimum":8,"maximum":20},"surfaces":{"default":["canvas","pack"],"minItems":1,"maxItems":2,"type":"array","items":{"type":"string","enum":["canvas","pack"]}},"excludedCells":{"default":[],"maxItems":169,"type":"array","items":{"type":"string","pattern":"^\\d+:\\d+$"}},"country":{"type":"string","minLength":1,"maxLength":10},"language":{"type":"string","minLength":1,"maxLength":10,"description":"Full locale code, e.g. \"en-US\" or \"en-GB\", not a bare language like \"en\"."},"device":{"type":"string","enum":["desktop","desktop_chrome","desktop_edge","desktop_firefox","desktop_opera","desktop_safari","mobile","mobile_android","mobile_ios","tablet","tablet_android","tablet_ios"]},"alertSettings":{"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"notify":{"type":"string","enum":["all","problems"]},"types":{"description":"Alert types to turn on (true) or off (false). A type left out is on, except the opt-in ones (competitor and copy changes: new advertisers, ad copy changes, competitors bidding on your brand, ranking URL changes, competitors entering the top 3, AI Overview citations, maps competitor closures and review spikes, rating drops), which stay off until set to true. The app turns these on for campaigns it creates; a campaign created through the API or MCP without `types` has them off.","type":"object","additionalProperties":{"type":"boolean"}},"email":{"default":true,"type":"boolean"},"webhookUrl":{"type":"string","format":"uri","default":null,"nullable":true},"destinationIds":{"maxItems":10,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"nullable":true}}},"isPublic":{"type":"boolean"},"schedule":{"type":"object","properties":{"cronExpression":{"type":"string","minLength":1,"maxLength":50},"timezone":{"type":"string","maxLength":50}}}}},"UpdateMapsCampaignStatusDto":{"type":"object","properties":{"status":{"type":"string","enum":["active","paused","archived"]}},"required":["status"]},"CreatePositionTrackerCampaignDto":{"type":"object","properties":{"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","maxLength":500},"trackedDomains":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"string","maxLength":253}},"keywords":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"string","maxLength":100}},"country":{"type":"string","minLength":1,"maxLength":10},"language":{"type":"string","minLength":1,"maxLength":10,"description":"Full locale code, e.g. \"en-US\" or \"en-GB\", not a bare language like \"en\"."},"device":{"type":"string","enum":["desktop","desktop_chrome","desktop_edge","desktop_firefox","desktop_opera","desktop_safari","mobile","mobile_android","mobile_ios","tablet","tablet_android","tablet_ios"]},"engine":{"type":"string","enum":["google"]},"city":{"description":"City name for local targeting. City geocoding is approximate — the same city can resolve to different points across runs, so results vary. Prefer lat/lon coordinates for accurate, repeatable local results.","type":"string","maxLength":100},"lat":{"description":"Latitude for pin-point local targeting (must be sent with lon). Coordinates give the most accurate and stable local results — prefer them over city.","type":"number","minimum":-90,"maximum":90},"lon":{"description":"Longitude for pin-point local targeting (must be sent with lat).","type":"number","minimum":-180,"maximum":180},"domain":{"type":"string","maxLength":10,"description":"Search engine domain SUFFIX, e.g. \"lt\" for google.lt or \"co.uk\" for google.co.uk — the full hostname (\"google.lt\") is also accepted and normalized to the suffix."},"isPublic":{"type":"boolean"},"alertSettings":{"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"notify":{"type":"string","enum":["all","problems"]},"types":{"description":"Alert types to turn on (true) or off (false). A type left out is on, except the opt-in ones (competitor and copy changes: new advertisers, ad copy changes, competitors bidding on your brand, ranking URL changes, competitors entering the top 3, AI Overview citations, maps competitor closures and review spikes, rating drops), which stay off until set to true. The app turns these on for campaigns it creates; a campaign created through the API or MCP without `types` has them off.","type":"object","additionalProperties":{"type":"boolean"}},"email":{"default":true,"type":"boolean"},"webhookUrl":{"type":"string","format":"uri","default":null,"nullable":true},"destinationIds":{"maxItems":10,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"nullable":true}}},"schedule":{"type":"object","properties":{"cronExpression":{"type":"string","minLength":1,"maxLength":50},"timezone":{"type":"string","maxLength":50},"enabled":{"type":"boolean"}},"required":["cronExpression"]}},"required":["projectId","name","trackedDomains","keywords","country","language","schedule"]},"UpdatePositionTrackerCampaignDto":{"type":"object","properties":{"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","maxLength":500,"nullable":true},"status":{"type":"string","enum":["active","paused","archived"]},"trackedDomains":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"string","maxLength":253}},"keywords":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"string","maxLength":100}},"country":{"type":"string","minLength":1,"maxLength":10},"language":{"type":"string","minLength":1,"maxLength":10,"description":"Full locale code, e.g. \"en-US\" or \"en-GB\", not a bare language like \"en\"."},"device":{"type":"string","enum":["desktop","desktop_chrome","desktop_edge","desktop_firefox","desktop_opera","desktop_safari","mobile","mobile_android","mobile_ios","tablet","tablet_android","tablet_ios"]},"engine":{"type":"string","enum":["google"]},"city":{"type":"string","maxLength":100,"description":"City name for local targeting. City geocoding is approximate — the same city can resolve to different points across runs, so results vary. Prefer lat/lon coordinates for accurate, repeatable local results.","nullable":true},"lat":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude for pin-point local targeting (must be sent with lon). Coordinates give the most accurate and stable local results — prefer them over city.","nullable":true},"lon":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude for pin-point local targeting (must be sent with lat).","nullable":true},"domain":{"type":"string","maxLength":10,"description":"Search engine domain SUFFIX, e.g. \"lt\" for google.lt or \"co.uk\" for google.co.uk — the full hostname (\"google.lt\") is also accepted and normalized to the suffix.","nullable":true},"isPublic":{"type":"boolean"},"alertSettings":{"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"notify":{"type":"string","enum":["all","problems"]},"types":{"description":"Alert types to turn on (true) or off (false). A type left out is on, except the opt-in ones (competitor and copy changes: new advertisers, ad copy changes, competitors bidding on your brand, ranking URL changes, competitors entering the top 3, AI Overview citations, maps competitor closures and review spikes, rating drops), which stay off until set to true. The app turns these on for campaigns it creates; a campaign created through the API or MCP without `types` has them off.","type":"object","additionalProperties":{"type":"boolean"}},"email":{"default":true,"type":"boolean"},"webhookUrl":{"type":"string","format":"uri","default":null,"nullable":true},"destinationIds":{"maxItems":10,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"nullable":true}},"nullable":true},"schedule":{"type":"object","properties":{"cronExpression":{"type":"string","minLength":1,"maxLength":50},"timezone":{"type":"string","maxLength":50}}}}},"UpdatePositionTrackerCampaignStatusDto":{"type":"object","properties":{"status":{"type":"string","enum":["active","paused","archived"]}},"required":["status"]},"CreateProjectDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","maxLength":500},"ownDomain":{"type":"string","maxLength":2048,"nullable":true},"active":{"type":"boolean"},"memberIds":{"maxItems":500,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},"required":["name"]},"UpdateProjectDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","maxLength":500,"nullable":true},"logoId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","nullable":true},"ownDomain":{"type":"string","maxLength":2048,"nullable":true},"active":{"type":"boolean"}}},"CreateAdTrackerCampaignDto":{"type":"object","properties":{"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","maxLength":500},"trackedDomains":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"string","maxLength":253}},"keywords":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"string","maxLength":100}},"country":{"type":"string","minLength":1,"maxLength":10},"language":{"type":"string","minLength":1,"maxLength":10,"description":"Full locale code, e.g. \"en-US\" or \"en-GB\", not a bare language like \"en\"."},"device":{"type":"string","enum":["desktop","desktop_chrome","desktop_edge","desktop_firefox","desktop_opera","desktop_safari","mobile","mobile_android","mobile_ios","tablet","tablet_android","tablet_ios"]},"engine":{"type":"string","enum":["google","bing"]},"city":{"description":"City name for local targeting. City geocoding is approximate — the same city can resolve to different points across runs, so results vary. Prefer lat/lon coordinates for accurate, repeatable local results.","type":"string","maxLength":100},"lat":{"description":"Latitude for pin-point local targeting (must be sent with lon). Coordinates give the most accurate and stable local results — prefer them over city.","type":"number","minimum":-90,"maximum":90},"lon":{"description":"Longitude for pin-point local targeting (must be sent with lat).","type":"number","minimum":-180,"maximum":180},"domain":{"type":"string","maxLength":10,"description":"Search engine domain SUFFIX, e.g. \"lt\" for google.lt or \"co.uk\" for google.co.uk — the full hostname (\"google.lt\") is also accepted and normalized to the suffix."},"safeSearch":{"type":"string","enum":["off","medium","high"]},"specifiedLanguageOnly":{"type":"boolean"},"specifiedCountryOnly":{"type":"boolean"},"isPublic":{"type":"boolean"},"alertSettings":{"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"notify":{"type":"string","enum":["all","problems"]},"types":{"description":"Alert types to turn on (true) or off (false). A type left out is on, except the opt-in ones (competitor and copy changes: new advertisers, ad copy changes, competitors bidding on your brand, ranking URL changes, competitors entering the top 3, AI Overview citations, maps competitor closures and review spikes, rating drops), which stay off until set to true. The app turns these on for campaigns it creates; a campaign created through the API or MCP without `types` has them off.","type":"object","additionalProperties":{"type":"boolean"}},"email":{"default":true,"type":"boolean"},"webhookUrl":{"type":"string","format":"uri","default":null,"nullable":true},"destinationIds":{"maxItems":10,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"nullable":true}}},"schedule":{"type":"object","properties":{"cronExpression":{"type":"string","minLength":1,"maxLength":50},"timezone":{"type":"string","maxLength":50},"enabled":{"type":"boolean"}},"required":["cronExpression"]}},"required":["projectId","name","trackedDomains","keywords","country","language","schedule"]},"UpdateAdTrackerCampaignDto":{"type":"object","properties":{"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","maxLength":500,"nullable":true},"status":{"type":"string","enum":["active","paused","archived"]},"trackedDomains":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"string","maxLength":253}},"keywords":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"string","maxLength":100}},"country":{"type":"string","minLength":1,"maxLength":10},"language":{"type":"string","minLength":1,"maxLength":10,"description":"Full locale code, e.g. \"en-US\" or \"en-GB\", not a bare language like \"en\"."},"device":{"type":"string","enum":["desktop","desktop_chrome","desktop_edge","desktop_firefox","desktop_opera","desktop_safari","mobile","mobile_android","mobile_ios","tablet","tablet_android","tablet_ios"]},"engine":{"type":"string","enum":["google","bing"]},"city":{"type":"string","maxLength":100,"description":"City name for local targeting. City geocoding is approximate — the same city can resolve to different points across runs, so results vary. Prefer lat/lon coordinates for accurate, repeatable local results.","nullable":true},"lat":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude for pin-point local targeting (must be sent with lon). Coordinates give the most accurate and stable local results — prefer them over city.","nullable":true},"lon":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude for pin-point local targeting (must be sent with lat).","nullable":true},"domain":{"type":"string","maxLength":10,"description":"Search engine domain SUFFIX, e.g. \"lt\" for google.lt or \"co.uk\" for google.co.uk — the full hostname (\"google.lt\") is also accepted and normalized to the suffix.","nullable":true},"safeSearch":{"type":"string","enum":["off","medium","high",null],"nullable":true},"specifiedLanguageOnly":{"type":"array","items":{"type":"boolean"}},"specifiedCountryOnly":{"type":"array","items":{"type":"boolean"}},"isPublic":{"type":"boolean"},"alertSettings":{"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"notify":{"type":"string","enum":["all","problems"]},"types":{"description":"Alert types to turn on (true) or off (false). A type left out is on, except the opt-in ones (competitor and copy changes: new advertisers, ad copy changes, competitors bidding on your brand, ranking URL changes, competitors entering the top 3, AI Overview citations, maps competitor closures and review spikes, rating drops), which stay off until set to true. The app turns these on for campaigns it creates; a campaign created through the API or MCP without `types` has them off.","type":"object","additionalProperties":{"type":"boolean"}},"email":{"default":true,"type":"boolean"},"webhookUrl":{"type":"string","format":"uri","default":null,"nullable":true},"destinationIds":{"maxItems":10,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"nullable":true}},"nullable":true},"schedule":{"type":"object","properties":{"cronExpression":{"type":"string","minLength":1,"maxLength":50},"timezone":{"type":"string","maxLength":50}}}}},"UpdateAdTrackerCampaignStatusDto":{"type":"object","properties":{"status":{"type":"string","enum":["active","paused","archived"]}},"required":["status"]},"CreateProxySearchDto":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":500},"country":{"type":"string","minLength":1,"maxLength":10},"language":{"type":"string","minLength":1,"maxLength":10,"description":"Full locale code, e.g. \"en-US\" or \"en-GB\", not a bare language like \"en\"."},"engine":{"type":"string","enum":["google","bing"]},"device":{"type":"string","enum":["desktop","desktop_chrome","desktop_edge","desktop_firefox","desktop_opera","desktop_safari","mobile","mobile_android","mobile_ios","tablet","tablet_android","tablet_ios"]},"city":{"description":"City name for local targeting. City geocoding is approximate — the same city can resolve to different points across runs, so results vary. Prefer lat/lon coordinates for accurate, repeatable local results.","type":"string","maxLength":100},"lat":{"description":"Latitude for pin-point local targeting (must be sent with lon). Coordinates give the most accurate and stable local results — prefer them over city.","type":"number","minimum":-90,"maximum":90},"lon":{"description":"Longitude for pin-point local targeting (must be sent with lat).","type":"number","minimum":-180,"maximum":180},"domain":{"type":"string","maxLength":10,"description":"Search engine domain SUFFIX, e.g. \"lt\" for google.lt or \"co.uk\" for google.co.uk — the full hostname (\"google.lt\") is also accepted and normalized to the suffix."},"safeSearch":{"type":"string","enum":["off","medium","high"]},"specifiedLanguageOnly":{"type":"boolean"},"specifiedCountryOnly":{"type":"boolean"},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"pages":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"integer","minimum":1,"maximum":10}}},"required":["query","country","language","engine","device"]},"AddProxySearchPagesDto":{"type":"object","properties":{"pages":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"integer","minimum":1,"maximum":10}}},"required":["pages"]},"CreateAiVisibilityCampaignDto":{"type":"object","properties":{"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","maxLength":500},"domain":{"type":"string","maxLength":253},"brandNames":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","maxLength":100},"description":"Names and aliases of YOUR OWN brand only (e.g. \"NordVPN\", product names, abbreviations). Never list competitors here — use the competitors field."},"industry":{"type":"string","maxLength":100},"competitors":{"description":"Rival brands — a name (\"Semrush\") or a domain (\"surfshark.com\"). Names are usually better: an AI answer names the brand in prose, it rarely writes the domain.","maxItems":20,"type":"array","items":{"type":"string","maxLength":100}},"prompts":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"string","maxLength":2000}},"locations":{"minItems":1,"maxItems":50,"type":"array","items":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"object","properties":{"country":{"type":"string","minLength":2,"maxLength":2},"city":{"type":"string","minLength":1,"maxLength":120},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["country"]}]},"description":"Where to ask from. A bare ISO code (\"AU\") is a country; add `city` (\"Brisbane, Queensland\") or `lat`/`lon` for finer targeting. ChatGPT and Google AI Mode honour a pin, Perplexity and Gemini a country."},"platforms":{"minItems":1,"type":"array","items":{"type":"string","enum":["chatgpt","google_ai_overview","google_ai_mode","gemini","perplexity"]}},"alertSettings":{"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"notify":{"type":"string","enum":["all","problems"]},"types":{"description":"Alert types to turn on (true) or off (false). A type left out is on, except the opt-in ones (competitor and copy changes: new advertisers, ad copy changes, competitors bidding on your brand, ranking URL changes, competitors entering the top 3, AI Overview citations, maps competitor closures and review spikes, rating drops), which stay off until set to true. The app turns these on for campaigns it creates; a campaign created through the API or MCP without `types` has them off.","type":"object","additionalProperties":{"type":"boolean"}},"email":{"default":true,"type":"boolean"},"webhookUrl":{"type":"string","format":"uri","default":null,"nullable":true},"destinationIds":{"maxItems":10,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"nullable":true}}},"isPublic":{"type":"boolean"},"schedule":{"type":"object","properties":{"cronExpression":{"type":"string","minLength":1,"maxLength":50},"timezone":{"type":"string","maxLength":50},"enabled":{"type":"boolean"}},"required":["cronExpression"]}},"required":["projectId","name","domain","brandNames","prompts","locations","platforms","schedule"]},"UpdateAiVisibilityCampaignDto":{"type":"object","properties":{"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","maxLength":500,"nullable":true},"status":{"type":"string","enum":["active","paused","archived"]},"domain":{"type":"string","maxLength":253},"brandNames":{"description":"Names and aliases of YOUR OWN brand only (e.g. \"NordVPN\", product names, abbreviations). Never list competitors here — use the competitors field.","minItems":1,"maxItems":20,"type":"array","items":{"type":"string","maxLength":100}},"industry":{"type":"string","maxLength":100,"nullable":true},"competitors":{"description":"Rival brands — a name (\"Semrush\") or a domain (\"surfshark.com\"). Names are usually better: an AI answer names the brand in prose, it rarely writes the domain.","maxItems":20,"type":"array","items":{"type":"string","maxLength":100}},"prompts":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"string","maxLength":2000}},"locations":{"minItems":1,"maxItems":50,"type":"array","items":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"object","properties":{"country":{"type":"string","minLength":2,"maxLength":2},"city":{"type":"string","minLength":1,"maxLength":120},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["country"]}]}},"platforms":{"minItems":1,"type":"array","items":{"type":"string","enum":["chatgpt","google_ai_overview","google_ai_mode","gemini","perplexity"]}},"alertSettings":{"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"notify":{"type":"string","enum":["all","problems"]},"types":{"description":"Alert types to turn on (true) or off (false). A type left out is on, except the opt-in ones (competitor and copy changes: new advertisers, ad copy changes, competitors bidding on your brand, ranking URL changes, competitors entering the top 3, AI Overview citations, maps competitor closures and review spikes, rating drops), which stay off until set to true. The app turns these on for campaigns it creates; a campaign created through the API or MCP without `types` has them off.","type":"object","additionalProperties":{"type":"boolean"}},"email":{"default":true,"type":"boolean"},"webhookUrl":{"type":"string","format":"uri","default":null,"nullable":true},"destinationIds":{"maxItems":10,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"nullable":true}},"nullable":true},"isPublic":{"type":"boolean"},"schedule":{"type":"object","properties":{"cronExpression":{"type":"string","minLength":1,"maxLength":50},"timezone":{"type":"string","maxLength":50}}}}},"UpdateAiVisibilityCampaignStatusDto":{"type":"object","properties":{"status":{"type":"string","enum":["active","paused","archived"]}},"required":["status"]},"AiSuggestRequestDto":{"type":"object","properties":{"type":{"type":"string","enum":["competitors","prompts"]},"domain":{"type":"string","minLength":1,"maxLength":253},"brandNames":{"type":"array","items":{"type":"string","maxLength":100}},"industry":{"type":"string","maxLength":100},"competitors":{"type":"array","items":{"type":"string","maxLength":253}},"locations":{"type":"array","items":{"type":"string","maxLength":10}}},"required":["type","domain"]},"CreateMarketplaceCampaignDto":{"type":"object","properties":{"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","maxLength":500},"targets":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"object","properties":{"platform":{"type":"string","enum":["google_shopping","amazon","walmart"]},"marketplace":{"type":"string","maxLength":20,"default":null,"nullable":true}},"required":["platform"]}},"keywords":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"trackedProductIds":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":2048}},"trackedBrands":{"default":[],"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"country":{"type":"string","minLength":1,"maxLength":10},"language":{"type":"string","minLength":1,"maxLength":10,"description":"Full locale code, e.g. \"en-US\" or \"en-GB\", not a bare language like \"en\"."},"geoLocation":{"type":"string","maxLength":100,"nullable":true},"alertSettings":{"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"notify":{"type":"string","enum":["all","problems"]},"types":{"description":"Alert types to turn on (true) or off (false). A type left out is on, except the opt-in ones (competitor and copy changes: new advertisers, ad copy changes, competitors bidding on your brand, ranking URL changes, competitors entering the top 3, AI Overview citations, maps competitor closures and review spikes, rating drops), which stay off until set to true. The app turns these on for campaigns it creates; a campaign created through the API or MCP without `types` has them off.","type":"object","additionalProperties":{"type":"boolean"}},"email":{"default":true,"type":"boolean"},"webhookUrl":{"type":"string","format":"uri","default":null,"nullable":true},"destinationIds":{"maxItems":10,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"nullable":true}}},"isPublic":{"type":"boolean"},"schedule":{"type":"object","properties":{"cronExpression":{"type":"string","minLength":1,"maxLength":50},"timezone":{"type":"string","maxLength":50},"enabled":{"type":"boolean"}},"required":["cronExpression"]}},"required":["projectId","name","targets","keywords","country","language"]},"UpdateMarketplaceCampaignDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","maxLength":500},"targets":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"object","properties":{"platform":{"type":"string","enum":["google_shopping","amazon","walmart"]},"marketplace":{"type":"string","maxLength":20,"default":null,"nullable":true}},"required":["platform"]}},"keywords":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"trackedProductIds":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":2048}},"trackedBrands":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"country":{"type":"string","minLength":1,"maxLength":10},"language":{"type":"string","minLength":1,"maxLength":10,"description":"Full locale code, e.g. \"en-US\" or \"en-GB\", not a bare language like \"en\"."},"geoLocation":{"type":"string","maxLength":100,"nullable":true},"alertSettings":{"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"notify":{"type":"string","enum":["all","problems"]},"types":{"description":"Alert types to turn on (true) or off (false). A type left out is on, except the opt-in ones (competitor and copy changes: new advertisers, ad copy changes, competitors bidding on your brand, ranking URL changes, competitors entering the top 3, AI Overview citations, maps competitor closures and review spikes, rating drops), which stay off until set to true. The app turns these on for campaigns it creates; a campaign created through the API or MCP without `types` has them off.","type":"object","additionalProperties":{"type":"boolean"}},"email":{"default":true,"type":"boolean"},"webhookUrl":{"type":"string","format":"uri","default":null,"nullable":true},"destinationIds":{"maxItems":10,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"nullable":true}}},"isPublic":{"type":"boolean"},"schedule":{"type":"object","properties":{"cronExpression":{"type":"string","minLength":1,"maxLength":50},"timezone":{"type":"string","maxLength":50}}}}},"UpdateMarketplaceCampaignStatusDto":{"type":"object","properties":{"status":{"type":"string","enum":["active","paused","archived"]}},"required":["status"]},"CreateDirectSearchDto":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":500},"country":{"type":"string","minLength":1,"maxLength":10},"language":{"type":"string","minLength":1,"maxLength":10,"description":"Full locale code, e.g. \"en-US\" or \"en-GB\", not a bare language like \"en\"."},"engine":{"type":"string","enum":["google","bing"]},"city":{"description":"City name for local targeting. City geocoding is approximate — the same city can resolve to different points across runs, so results vary. Prefer lat/lon coordinates for accurate, repeatable local results.","type":"string","maxLength":100},"lat":{"description":"Latitude for pin-point local targeting (must be sent with lon). Coordinates give the most accurate and stable local results — prefer them over city.","type":"number","minimum":-90,"maximum":90},"lon":{"description":"Longitude for pin-point local targeting (must be sent with lat).","type":"number","minimum":-180,"maximum":180},"domain":{"type":"string","maxLength":10,"description":"Search engine domain SUFFIX, e.g. \"lt\" for google.lt or \"co.uk\" for google.co.uk — the full hostname (\"google.lt\") is also accepted and normalized to the suffix."},"safeSearch":{"type":"string","enum":["off","medium","high"]},"specifiedLanguageOnly":{"type":"boolean"},"specifiedCountryOnly":{"type":"boolean"},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["query","country","language","engine"]}}}}