{"servers":[{"url":"/api/brand"}],"info":{"title":"COPS Brand API","version":"1.0.0","description":"Operator API — campaigns, creators, accounts, videos, analytics."},"security":[{"apiKeyAuth":[]}],"components":{"securitySchemes":{"apiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key","description":"API key for authentication. Keys are prefixed with `cops_`."}}},"openapi":"3.1.1","paths":{"/campaigns":{"get":{"operationId":"campaigns.list","summary":"List campaigns","description":"List the campaigns in your organization, each with a count of the accounts posting in it. Supports free-text search (q) and a result limit. Use a returned campaign id with get_campaign or as a campaignIds filter elsewhere.","tags":["Campaigns"],"parameters":[{"name":"q","in":"query","schema":{"type":"string","maxLength":200},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":-9007199254740991,"maximum":100,"exclusiveMinimum":0},"allowEmptyValue":true,"allowReserved":true},{"name":"includeArchived","in":"query","schema":{"type":"boolean"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}},"post":{"operationId":"campaigns.create","summary":"Create campaign","description":"Create a new campaign in your organization. Only name is required; an optional managerUserId must be a staff member (owner/admin/manager) of the org. Optional links is an ordered list of helpful links ({ title, url }, at most 10, http or https only) shown to creators who join. Returns the created campaign.","tags":["Campaigns"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"url":{"anyOf":[{"anyOf":[{"const":""},{"type":"string","format":"uri"}]},{"type":"null"}]},"description":{"anyOf":[{"anyOf":[{"const":""},{"type":"string"}]},{"type":"null"}]},"logo":{"anyOf":[{"anyOf":[{"const":""},{"type":"string","format":"uri"}]},{"type":"null"}]},"color":{"anyOf":[{"anyOf":[{"const":""},{"type":"string"}]},{"type":"null"}]},"startDate":{"type":"string","format":"date-time"},"platforms":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"},"default":[]},"managerUserId":{"anyOf":[{"anyOf":[{"const":""},{"type":"string","minLength":1}]},{"type":"null"}]},"active":{"type":"boolean","default":true},"links":{"type":"array","maxItems":10,"items":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":60},"url":{"type":"string"}},"required":["title","url"]}}},"required":["name"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/campaigns/{id}":{"get":{"operationId":"campaigns.get","summary":"Get campaign by ID","description":"Get one campaign in your organization with its full details. Pass an id from list_campaigns.","tags":["Campaigns"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}},"patch":{"operationId":"campaigns.update","summary":"Update campaign","description":"Update a campaign in your organization (only the fields you pass change: name, url, description, logo, color, startDate, active, managerUserId, payoutStructureId, requiresDraftApproval, links). links is the full ordered list of helpful links ({ title, url }, at most 10, http or https only) creators see in onboarding and on the campaign page; it replaces the existing list. requiresDraftApproval true flags posts published since it was turned on that do not match an approved draft. Passing true while it is already on keeps the original start date; passing false clears it, so turning it on again later starts from that later date. Pass \"\" or null for an optional field to clear it. Pass an id from list_campaigns.","tags":["Campaigns"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"url":{"anyOf":[{"anyOf":[{"const":""},{"type":"string","format":"uri"}]},{"type":"null"}]},"description":{"anyOf":[{"anyOf":[{"const":""},{"type":"string"}]},{"type":"null"}]},"logo":{"anyOf":[{"anyOf":[{"const":""},{"type":"string","format":"uri"}]},{"type":"null"}]},"color":{"anyOf":[{"anyOf":[{"const":""},{"type":"string"}]},{"type":"null"}]},"startDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"platforms":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"payoutStructureId":{"anyOf":[{"anyOf":[{"const":""},{"type":"string","pattern":"^pst_.+[\\s\\S]*$"}]},{"type":"null"}]},"managerUserId":{"anyOf":[{"anyOf":[{"const":""},{"type":"string","minLength":1}]},{"type":"null"}]},"active":{"type":"boolean"},"requiresDraftApproval":{"type":"boolean"},"links":{"type":"array","maxItems":10,"items":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":60},"url":{"type":"string"}},"required":["title","url"]}}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/campaigns/{id}/archive":{"post":{"operationId":"campaigns.archive","summary":"Archive campaign","description":"Archive a campaign (soft delete): history stays queryable, but the campaign is hidden from default lists and account defaults pointing at it are cleared so no future videos route to it. Prefer this over delete_campaign. Pass an id from list_campaigns.","tags":["Campaigns"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/campaigns/assign-videos":{"post":{"operationId":"campaigns.assignVideos","summary":"Assign videos to campaign","description":"Manually assign videos to a campaign (or unassign with campaignId: null). A video belongs to at most one campaign; manual assignments always win and are never moved by automation. By default the videos' crosspost groups follow (all copies carry the same campaign). Pass videoIds from list_videos and a campaignId from list_campaigns.","tags":["Campaigns"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"videoIds":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"string","pattern":"^vid_.+[\\s\\S]*$"}},"campaignId":{"anyOf":[{"type":"string","pattern":"^prj_.+[\\s\\S]*$"},{"type":"null"}]},"applyToCrosspostGroups":{"type":"boolean","default":true}},"required":["videoIds","campaignId"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/campaigns/{campaignId}/invites":{"post":{"operationId":"campaigns.invites.create","summary":"Create a campaign invite link","description":"Create a campaign invite. Omit `recipients` to get one shareable, multi-use link — the returned `token` is a join credential: anyone who opens /join/{token} while signed in can accept the invite and be added to the campaign as a creator, so treat it like a password. Optional `maxUses` caps how many creators may join and `expiresAt` sets a hard cutoff (links default to a 30-day lifetime). Passing `recipients` instead creates one email-bound invite per address AND emails each of them an invitation — use the shareable-link form (no recipients) for bulk/programmatic invites to avoid sending mail.","tags":["Campaigns"],"parameters":[{"name":"campaignId","in":"path","required":true,"schema":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"recipients":{"type":"array","maxItems":500,"items":{"type":"object","properties":{"email":{"type":"string","format":"email"},"creatorId":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"required":["email"]}},"maxUses":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0},"expiresAt":{"type":"string","format":"date-time"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}},"get":{"operationId":"campaigns.invites.list","summary":"List campaign invites","description":"List all invite links for a campaign in your organization. Each row includes `recipientEmail` (set for email-bound invites, null for open shareable links), `isActive`, `useCount`, `maxUses`, and `expiresAt`. The `token` (a join credential — anyone with it can join the campaign as a creator) is included only for write-capable callers; it is redacted (null) for read-only credentials. Use a returned invite `id` with delete_campaign_invite to deactivate it.","tags":["Campaigns"],"parameters":[{"name":"campaignId","in":"path","required":true,"schema":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/campaign-invites/{id}":{"delete":{"operationId":"campaigns.invites.delete","summary":"Deactivate a campaign invite","description":"Deactivate a campaign invite by id. This is a soft, reversible action — it marks the invite inactive so its `token` can no longer be used to join, but does not remove creators who already joined through it. Use list_campaign_invites to find the invite id.","tags":["Campaigns"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^cinv_.+[\\s\\S]*$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/campaigns/{campaignId}/accounts":{"get":{"operationId":"campaigns.accounts.list","summary":"Get accounts by campaign","description":"List the social accounts posting in one campaign. Pass a campaignId from list_campaigns.","tags":["Campaigns"],"parameters":[{"name":"campaignId","in":"path","required":true,"schema":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/campaigns/{campaignId}/creators":{"get":{"operationId":"campaigns.creators.list","summary":"Get creators by campaign","description":"List the creators on one campaign's roster. Pass a campaignId from list_campaigns.","tags":["Campaigns"],"parameters":[{"name":"campaignId","in":"path","required":true,"schema":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}},"post":{"operationId":"campaigns.creators.add","summary":"Add creator to campaign","description":"Add a creator to a campaign's roster, even if they have no linked accounts yet. Idempotent. Pass a creatorId from list_creators and a campaignId from list_campaigns.","tags":["Campaigns"],"parameters":[{"name":"campaignId","in":"path","required":true,"schema":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"creatorId":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"required":["creatorId"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/campaigns/{campaignId}/creators/{creatorId}":{"delete":{"operationId":"campaigns.creators.remove","summary":"Remove creator from campaign","description":"Remove a creator from a campaign's roster. Past video assignments are kept, and the campaign stops being the default for the creator's accounts. Pass a creatorId from list_creators and a campaignId from list_campaigns.","tags":["Campaigns"],"parameters":[{"name":"campaignId","in":"path","required":true,"schema":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},{"name":"creatorId","in":"path","required":true,"schema":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/crossposts":{"get":{"operationId":"crossposts.list","summary":"List crosspost groups","description":"Crosspost groups for the org's creators — the same video posted across several of a creator's accounts. Sort by latest activity / views / posts / platforms; filter by creator / platform / date / group size / match tier / submission status / payout status / group ids; offset-cursor paginated with a totals summary.","tags":["Crossposts"],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":30},"allowEmptyValue":true,"allowReserved":true},{"name":"cursor","in":"query","schema":{"anyOf":[{"type":"string"},{"type":"null"}]},"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","schema":{"enum":["lastActivity","submittedAt","totalViews","postCount","platformCount"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"sortOrder","in":"query","schema":{"enum":["asc","desc"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"minGroupSize","in":"query","schema":{"type":"integer","minimum":1,"maximum":9007199254740991},"allowEmptyValue":true,"allowReserved":true},{"name":"maxGroupSize","in":"query","schema":{"anyOf":[{"type":"integer","minimum":1,"maximum":9007199254740991},{"type":"null"}]},"allowEmptyValue":true,"allowReserved":true},{"name":"matchTiers","in":"query","schema":{"type":"array","items":{"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"submissionStatuses","in":"query","schema":{"type":"array","items":{"enum":["not_submitted","pending","approved","changes_requested"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"submissionDateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"payoutStatuses","in":"query","schema":{"type":"array","items":{"enum":["no_payout","pending","processing","paid","failed"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"excludeDrafted","in":"query","schema":{"type":"boolean"},"allowEmptyValue":true,"allowReserved":true},{"name":"topUpCandidates","in":"query","schema":{"type":"boolean"},"allowEmptyValue":true,"allowReserved":true},{"name":"groupIds","in":"query","schema":{"type":"array","maxItems":100,"items":{"type":"string","pattern":"^vcg_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/crossposts/suggestions":{"get":{"operationId":"crossposts.suggestions","summary":"List crosspost match suggestions","description":"High-confidence candidate crosspost groups for one-tap review: ungrouped videos of one creator sharing a caption + non-contradicting duration within a 2-day wave, with ≤1 per platform and ≥2 distinct platforms. Templated captions and operator-rejected pairings are excluded. Confidence-sorted, strongest first.","tags":["Crossposts"],"parameters":[{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":1000,"default":200},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/creators":{"get":{"operationId":"creators.list","summary":"List all creators","description":"List the creators working with your organization, each with rolled-up stats (account/video counts, views, engagement). Supports offset/limit paging, free-text search, and metric filters. Use a returned creator id with get_creator or as a creatorIds filter elsewhere.","tags":["Creators"],"parameters":[{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"metricFilters","in":"query","schema":{"type":"object","properties":{"totalViews":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"totalLikes":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"totalComments":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"totalShares":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"totalBookmarks":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"totalVideos":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"totalAccounts":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"engagement":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"paid":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"cpm":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","schema":{"enum":["status","name","totalViews","totalLikes","totalComments","totalShares","totalBookmarks","totalVideos","totalAccounts","avgViewsPerVideo","engagement","paid","cpm","createdAt"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"sortOrder","in":"query","schema":{"enum":["asc","desc"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0},"allowEmptyValue":true,"allowReserved":true},{"name":"status","in":"query","schema":{"enum":["active","inactive"],"type":"string"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}},"post":{"operationId":"creators.create","summary":"Create creator","description":"Create a new creator profile and auto-link it to your organization. Requires a unique username and email. Returns the created creator (without private address fields).","tags":["Creators"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"email":{"type":"string","format":"email"},"avatar":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"bio":{"anyOf":[{"type":"string"},{"type":"null"}]},"gender":{"anyOf":[{"enum":["male","female"],"type":"string"},{"type":"null"}]},"country":{"anyOf":[{"enum":["AF","AX","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"type":"string"},{"type":"null"}]},"phone":{"anyOf":[{"type":"string"},{"type":"null"}]},"birthday":{"anyOf":[{"type":"string"},{"type":"null"}]},"portfolioUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"tiktokUsername":{"anyOf":[{"type":"string"},{"type":"null"}]},"instagramUsername":{"anyOf":[{"type":"string"},{"type":"null"}]},"youtubeUsername":{"anyOf":[{"type":"string"},{"type":"null"}]},"twitterUsername":{"anyOf":[{"type":"string"},{"type":"null"}]},"threadsUsername":{"anyOf":[{"type":"string"},{"type":"null"}]},"facebookUsername":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapchatUsername":{"anyOf":[{"type":"string"},{"type":"null"}]},"discordUsername":{"anyOf":[{"type":"string"},{"type":"null"}]},"discordId":{"anyOf":[{"type":"string"},{"type":"null"}]},"discordAvatarHash":{"anyOf":[{"type":"string"},{"type":"null"}]},"userId":{"anyOf":[{"type":"string"},{"type":"null"}]},"username":{"anyOf":[{"type":"string","minLength":3,"maxLength":30,"pattern":"^[a-z0-9-]+$"},{"type":"null"}]},"isPublic":{"type":"boolean","default":true},"interests":{"anyOf":[{"type":"array","items":{"enum":["fashion","beauty","fitness","health","gaming","tech","food","travel","lifestyle","comedy","education","music","dance","sports","finance","business","art","photography","parenting","pets","automotive","home"],"type":"string"}},{"type":"null"}]},"addressLine1":{"anyOf":[{"type":"string"},{"type":"null"}]},"addressLine2":{"anyOf":[{"type":"string"},{"type":"null"}]},"city":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"anyOf":[{"type":"string"},{"type":"null"}]},"postalCode":{"anyOf":[{"type":"string"},{"type":"null"}]},"formattedAddress":{"anyOf":[{"type":"string"},{"type":"null"}]},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}]},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["name","email"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/creators/{id}":{"get":{"operationId":"creators.get","summary":"Get creator by ID","description":"Get one creator profile in your organization, with stats. A creator's private payout/shipping address is never returned to brands. Pass an id from list_creators.","tags":["Creators"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}},"patch":{"operationId":"creators.update","summary":"Update creator","description":"Update a creator's profile fields (only the fields you pass change). The creator must already work with your organization. Pass an id from list_creators.","tags":["Creators"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"email":{"type":"string","format":"email"},"avatar":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"bio":{"anyOf":[{"type":"string"},{"type":"null"}]},"gender":{"anyOf":[{"enum":["male","female"],"type":"string"},{"type":"null"}]},"country":{"anyOf":[{"enum":["AF","AX","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW"],"type":"string"},{"type":"null"}]},"phone":{"anyOf":[{"type":"string"},{"type":"null"}]},"birthday":{"anyOf":[{"type":"string"},{"type":"null"}]},"portfolioUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"tiktokUsername":{"anyOf":[{"type":"string"},{"type":"null"}]},"instagramUsername":{"anyOf":[{"type":"string"},{"type":"null"}]},"youtubeUsername":{"anyOf":[{"type":"string"},{"type":"null"}]},"twitterUsername":{"anyOf":[{"type":"string"},{"type":"null"}]},"threadsUsername":{"anyOf":[{"type":"string"},{"type":"null"}]},"facebookUsername":{"anyOf":[{"type":"string"},{"type":"null"}]},"snapchatUsername":{"anyOf":[{"type":"string"},{"type":"null"}]},"discordUsername":{"anyOf":[{"type":"string"},{"type":"null"}]},"discordId":{"anyOf":[{"type":"string"},{"type":"null"}]},"discordAvatarHash":{"anyOf":[{"type":"string"},{"type":"null"}]},"userId":{"anyOf":[{"type":"string"},{"type":"null"}]},"username":{"anyOf":[{"type":"string","minLength":3,"maxLength":30,"pattern":"^[a-z0-9-]+$"},{"type":"null"}]},"isPublic":{"type":"boolean","default":true},"interests":{"anyOf":[{"type":"array","items":{"enum":["fashion","beauty","fitness","health","gaming","tech","food","travel","lifestyle","comedy","education","music","dance","sports","finance","business","art","photography","parenting","pets","automotive","home"],"type":"string"}},{"type":"null"}]},"addressLine1":{"anyOf":[{"type":"string"},{"type":"null"}]},"addressLine2":{"anyOf":[{"type":"string"},{"type":"null"}]},"city":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"anyOf":[{"type":"string"},{"type":"null"}]},"postalCode":{"anyOf":[{"type":"string"},{"type":"null"}]},"formattedAddress":{"anyOf":[{"type":"string"},{"type":"null"}]},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}]},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}]}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/creators/{creatorId}/org-metadata":{"patch":{"operationId":"creators.updateOrgMetadata","summary":"Update creator org metadata","description":"Update a creator's organization-specific metadata: status ('active' or 'inactive' within your organization), notes, and tags. The status is a label: it never starts or stops account syncing (use set_accounts_status for that). Only the fields you pass change. This never touches the creator's shared profile — use update_creator for that. Pass an id from list_creators.","tags":["Creators"],"parameters":[{"name":"creatorId","in":"path","required":true,"schema":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"enum":["active","inactive"],"type":"string"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}]},"tags":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"autoApproveSubmissions":{"type":"boolean"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/accounts":{"get":{"operationId":"accounts.list","summary":"List accounts","description":"List the social accounts tracked in your organization, each with metrics (followers, views, video counts) and links to their creator and campaigns. Supports offset/limit paging and filters. Use a returned account id with get_account or as an accountIds filter elsewhere.","tags":["Accounts"],"parameters":[{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"metricFilters","in":"query","schema":{"type":"object","properties":{"followers":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"totalViews":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"totalLikes":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"totalComments":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"totalShares":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"totalBookmarks":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"totalVideos":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"engagement":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","schema":{"enum":["handle","name","platform","scrapeStatus","postHealth","viewHealth","followers","totalViews","totalLikes","totalComments","totalShares","totalBookmarks","totalVideos","engagement","createdAt","lastScrapedAt"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"sortOrder","in":"query","schema":{"enum":["asc","desc"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0},"allowEmptyValue":true,"allowReserved":true},{"name":"tracked","in":"query","schema":{"type":"boolean"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/accounts/{id}":{"get":{"operationId":"accounts.get","summary":"Get account by ID","description":"Get one social account tracked in your organization, with its metrics. Pass an id from list_accounts.","tags":["Accounts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/accounts/track":{"post":{"operationId":"accounts.track","summary":"Track account","description":"Start tracking one or more social accounts by profile URL for your organization. Auto-links them to the default campaign; optionally pass a campaignId or creatorId to link on creation. Fetches profile + recent videos in the background and returns which URLs were accepted vs. failed.","tags":["Accounts"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accounts":{"type":"array","minItems":1,"maxItems":2500,"items":{"type":"object","properties":{"url":{"type":"string","minLength":1},"trackingLimit":{"type":"integer","minimum":1,"maximum":5000}},"required":["url","trackingLimit"]}},"campaignId":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"},"creatorId":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"required":["accounts"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/accounts/{accountId}/refresh":{"post":{"operationId":"accounts.refresh","summary":"Refresh account","description":"Queue a manual re-fetch of one account's latest profile data and recent videos from its platform. Runs in the background; poll the account's scrapeStatus for progress. Pass an accountId from list_accounts.","tags":["Accounts"],"parameters":[{"name":"accountId","in":"path","required":true,"schema":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"maxItems":{"type":"integer","minimum":-9007199254740991,"maximum":5000,"exclusiveMinimum":0}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/accounts/status":{"patch":{"operationId":"accounts.setStatus","summary":"Set account status","description":"Set the lifecycle status for accounts in your organization: 'active' (syncing and counted in analytics), 'watching' (syncing but not counted — competitor/benchmark accounts), or 'archived' (not syncing, history still counted — departed creators). Never touches per-video exclusions.","tags":["Accounts"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountIds":{"type":"array","minItems":1,"items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"status":{"enum":["active","watching","archived"],"type":"string"}},"required":["accountIds","status"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/accounts/{accountId}/default-campaign":{"put":{"operationId":"accounts.setDefaultCampaign","summary":"Set account default campaign","description":"Set or clear (campaignId: null) the single default campaign for a tracked account. New videos synced from the account are assigned to this campaign; the account's currently-unassigned videos are assigned immediately. Switching the default is forward-only — videos already assigned to another campaign stay there. Pass an accountId from list_accounts and a campaignId from list_campaigns.","tags":["Accounts"],"parameters":[{"name":"accountId","in":"path","required":true,"schema":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"anyOf":[{"type":"string","pattern":"^prj_.+[\\s\\S]*$"},{"type":"null"}]}},"required":["campaignId"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/syncs":{"get":{"operationId":"syncs.list","summary":"List syncs","description":"Cursor-paginated list of account/video sync runs (active and historical) for the organization's tracked accounts. Pass nextCursor back as cursor for the next page.","tags":["Syncs"],"parameters":[{"name":"status","in":"query","schema":{"enum":["active","queued","running","complete","error"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"cursor","in":"query","schema":{"anyOf":[{"type":"string"},{"type":"null"}]},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":100},"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/syncs/stats":{"get":{"operationId":"syncs.stats","summary":"Sync volume stats","description":"Daily sync volume bucketed by status, for the activity chart and status-filter counts.","tags":["Syncs"],"parameters":[{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/video-comments/videos":{"get":{"operationId":"videoComments.videos","summary":"List videos with comments","description":"Videos that have at least one stored comment, with per-video comment counts (most-commented first).","tags":["Video Comments"],"parameters":[{"name":"cursor","in":"query","schema":{"anyOf":[{"type":"string"},{"type":"null"}]},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"q","in":"query","schema":{"type":"string","maxLength":200},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/video-comments/threads":{"get":{"operationId":"videoComments.threads","summary":"Get a video's comment threads","description":"Paged comment threads for a single video, with direct replies nested under the current page's roots.","tags":["Video Comments"],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}]},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","required":false,"schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","required":false,"schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200},"allowEmptyValue":true,"allowReserved":true},{"name":"videoId","in":"query","required":true,"schema":{"type":"string","pattern":"^vid_.+[\\s\\S]*$"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/videos":{"get":{"operationId":"videos.list","summary":"List videos","description":"List the videos tracked in your organization, each with metrics (views, likes, comments, shares) and its account/creator/campaign. Supports offset/limit paging and filters (creatorIds, accountIds, campaignIds, platforms, dateRange). Use a returned video id with get_video.","tags":["Videos"],"parameters":[{"name":"accountScope","in":"query","schema":{"enum":["campaign","tracked"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"metricFilters","in":"query","schema":{"type":"object","properties":{"views":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"likes":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"comments":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"shares":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"bookmarks":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"engagement":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"viralityMultiplier":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","schema":{"enum":["title","platform","accountHandle","viralityMultiplier","views","likes","comments","shares","bookmarks","engagement","publishedAt","updatedAt"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"sortOrder","in":"query","schema":{"enum":["asc","desc"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0},"allowEmptyValue":true,"allowReserved":true},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"allowEmptyValue":true,"allowReserved":true},{"name":"showExcluded","in":"query","schema":{"type":"boolean"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/videos/{id}":{"get":{"operationId":"videos.get","summary":"Get video by ID","description":"Get one video tracked in your organization, with its full metrics and engagement data. Pass an id from list_videos.","tags":["Videos"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^vid_.+[\\s\\S]*$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/videos/track":{"post":{"operationId":"videos.track","summary":"Track videos","description":"Start tracking one or more videos by URL for your organization. Requires a default campaign to be set. Fetches metrics in the background and returns which URLs were accepted vs. failed to parse.","tags":["Videos"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"videos":{"type":"array","minItems":1,"maxItems":500,"items":{"type":"string","minLength":1}}},"required":["videos"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/videos/{videoId}/refresh":{"post":{"operationId":"videos.refresh","summary":"Refresh video","description":"Queue a manual re-fetch of one video's latest metrics from its platform. Runs in the background; the video's metrics update on completion. Pass a videoId from list_videos.","tags":["Videos"],"parameters":[{"name":"videoId","in":"path","required":true,"schema":{"type":"string","pattern":"^vid_.+[\\s\\S]*$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/videos/{videoId}/download":{"post":{"operationId":"videos.download","summary":"Download video","description":"Queue a download of one video's source file to storage (YouTube only). Runs in the background. Pass a videoId from list_videos.","tags":["Videos"],"parameters":[{"name":"videoId","in":"path","required":true,"schema":{"type":"string","pattern":"^vid_.+[\\s\\S]*$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/payout-structures":{"get":{"operationId":"payoutStructures.list","summary":"List payout structures","description":"List your organization's payout structures — the rule sets that turn a creator's posts and views into an amount owed. Active only, unless you pass includeArchived.","tags":["Payout Structures"],"parameters":[{"name":"includeArchived","in":"query","schema":{"type":"boolean"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}},"post":{"operationId":"payoutStructures.create","summary":"Create payout structure","description":"Create a payout structure — a rate card built from earning rules (base pay, per post, per 1,000 views, milestone bonuses) plus optional view modifiers and gates. At least one earning rule is required; money is integer cents. Attach it to a campaign with update_campaign.","tags":["Payout Structures"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"config":{"type":"object","properties":{"version":{"const":2},"viewsBasis":{"enum":["sum","max"],"type":"string"},"rules":{"type":"object","properties":{"basePay":{"type":"object","properties":{"amountCents":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["amountCents"]},"perView":{"type":"object","properties":{"cpmRateCents":{"type":"number","minimum":0},"capCents":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["cpmRateCents"]},"milestones":{"type":"object","properties":{"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"views":{"type":"number","minimum":0},"bonusCents":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["views","bonusCents"]}}},"required":["tiers"]},"perPost":{"type":"object","properties":{"amountPerPostCents":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["amountPerPostCents"]},"platformFilter":{"type":"object","properties":{"platforms":{"type":"array","minItems":1,"items":{"type":"string"}}},"required":["platforms"]},"viewWindow":{"type":"object","properties":{"days":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0}},"required":["days"]},"baseSplit":{"type":"object","properties":{"platforms":{"type":"array","minItems":1,"items":{"type":"string"}}},"required":["platforms"]},"healthGate":{"type":"object","properties":{"viewTargets":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number","exclusiveMinimum":0}},"windowDays":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0}},"required":["viewTargets","windowDays"]},"audienceBonus":{"type":"object","properties":{"thresholdPct":{"type":"number","maximum":100,"exclusiveMinimum":0},"minViews":{"type":"number","minimum":0},"tier1Countries":{"type":"array","minItems":1,"items":{"type":"string"}}},"required":["thresholdPct","minViews","tier1Countries"]},"minViews":{"type":"object","properties":{"views":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0}},"required":["views"]}}}},"required":["version","viewsBasis","rules"]},"description":{"anyOf":[{"type":"string"},{"const":""}]},"paymentFrequency":{"enum":["weekly","biweekly","semi_monthly","monthly","custom","apple"],"type":"string"},"paymentScheduleConfig":{"type":"object","properties":{"days":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]},"description":{"type":"string"}}},"paymentStartDate":{"type":"string","format":"date"},"isActive":{"type":"boolean"}},"required":["name","config","paymentFrequency","paymentStartDate"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/payout-structures/{id}":{"get":{"operationId":"payoutStructures.get","summary":"Get payout structure","description":"Get one payout structure with its full rule set and payment schedule. Money is integer cents. Pass an id from list_payout_structures.","tags":["Payout Structures"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^pst_.+[\\s\\S]*$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}},"patch":{"operationId":"payoutStructures.update","summary":"Update payout structure","description":"Update a payout structure (only the fields you pass change). `config` is replaced, not merged — send the full rule set from get_payout_structure. Changes what every campaign and creator on this structure is owed. Set isActive: false to archive it.","tags":["Payout Structures"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^pst_.+[\\s\\S]*$"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"config":{"type":"object","properties":{"version":{"const":2},"viewsBasis":{"enum":["sum","max"],"type":"string"},"rules":{"type":"object","properties":{"basePay":{"type":"object","properties":{"amountCents":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["amountCents"]},"perView":{"type":"object","properties":{"cpmRateCents":{"type":"number","minimum":0},"capCents":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["cpmRateCents"]},"milestones":{"type":"object","properties":{"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"views":{"type":"number","minimum":0},"bonusCents":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["views","bonusCents"]}}},"required":["tiers"]},"perPost":{"type":"object","properties":{"amountPerPostCents":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["amountPerPostCents"]},"platformFilter":{"type":"object","properties":{"platforms":{"type":"array","minItems":1,"items":{"type":"string"}}},"required":["platforms"]},"viewWindow":{"type":"object","properties":{"days":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0}},"required":["days"]},"baseSplit":{"type":"object","properties":{"platforms":{"type":"array","minItems":1,"items":{"type":"string"}}},"required":["platforms"]},"healthGate":{"type":"object","properties":{"viewTargets":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number","exclusiveMinimum":0}},"windowDays":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0}},"required":["viewTargets","windowDays"]},"audienceBonus":{"type":"object","properties":{"thresholdPct":{"type":"number","maximum":100,"exclusiveMinimum":0},"minViews":{"type":"number","minimum":0},"tier1Countries":{"type":"array","minItems":1,"items":{"type":"string"}}},"required":["thresholdPct","minViews","tier1Countries"]},"minViews":{"type":"object","properties":{"views":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0}},"required":["views"]}}}},"required":["version","viewsBasis","rules"]},"description":{"anyOf":[{"type":"string"},{"const":""}]},"paymentFrequency":{"enum":["weekly","biweekly","semi_monthly","monthly","custom","apple"],"type":"string"},"paymentScheduleConfig":{"type":"object","properties":{"days":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]},"description":{"type":"string"}}},"paymentStartDate":{"type":"string","format":"date"},"isActive":{"type":"boolean"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}},"delete":{"operationId":"payoutStructures.delete","summary":"Delete payout structure","description":"Permanently delete a payout structure, clearing it from the campaigns and creator assignments using it. Blocked if any payout references it — archive with isActive: false instead. Returns the deleted structure.","tags":["Payout Structures"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^pst_.+[\\s\\S]*$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/payouts":{"get":{"operationId":"payouts.list","summary":"List payouts","description":"Payouts recorded for your organization, filterable by creator, campaign, and date range. amountPaid/amountOwed are integer cents. Pass ids from list_creators / list_campaigns.","tags":["Payouts"],"parameters":[{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","schema":{"enum":["date","amountOwed","amountPaid"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/payouts/{id}":{"get":{"operationId":"payouts.get","summary":"Get payout","description":"A single payout recorded for your organization, scoped to the org. amountPaid/amountOwed are integer cents. Pass an id from list_payouts.","tags":["Payouts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^pay_.+[\\s\\S]*$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/analytics/stats":{"get":{"operationId":"dashboard.stats","summary":"Get dashboard stats","description":"Aggregate headline totals for your organization over the selected scope: account count, video count, total views, and total earnings (integer cents). Unpaginated. Filter by dateRange, platforms, campaignIds, creatorIds, accountIds.","tags":["Dashboard"],"parameters":[{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/analytics/video-activity":{"get":{"operationId":"dashboard.videoActivity","summary":"Get posting activity","description":"Videos posted per day for your organization over the selected scope, as a daily series. Unpaginated. Filter by dateRange, platforms, campaignIds, creatorIds, accountIds.","tags":["Dashboard"],"parameters":[{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platform","in":"query","schema":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/analytics/posting-activity-by-platform":{"get":{"operationId":"dashboard.postingActivityByPlatform","summary":"Get posting activity by platform","description":"Videos posted per day split by platform for your organization over the selected scope, as a daily series (backs the stacked bar chart). Unpaginated. Filter by dateRange, platforms, campaignIds, creatorIds, accountIds.","tags":["Dashboard"],"parameters":[{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/analytics/platform-breakdown":{"get":{"operationId":"dashboard.platformBreakdown","summary":"Get platform breakdown","description":"Get video count and total views grouped by publish date and platform. Backs the per-platform bar charts and distribution donuts.","tags":["Dashboard"],"parameters":[{"name":"accountScope","in":"query","schema":{"enum":["campaign","tracked"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"metricFilters","in":"query","schema":{"type":"object","properties":{"views":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"likes":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"comments":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"shares":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"bookmarks":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"engagement":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"viralityMultiplier":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","schema":{"enum":["title","platform","accountHandle","viralityMultiplier","views","likes","comments","shares","bookmarks","engagement","publishedAt","updatedAt"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"sortOrder","in":"query","schema":{"enum":["asc","desc"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0},"allowEmptyValue":true,"allowReserved":true},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"allowEmptyValue":true,"allowReserved":true},{"name":"showExcluded","in":"query","schema":{"type":"boolean"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/analytics/view-share-by-age":{"get":{"operationId":"dashboard.viewShareByAge","summary":"Get share-of-views by age bucket per platform","description":"Per-video share of first-30-day views landing in each age bucket (Day 0 / Day 1 / Days 2–3 / Days 4–7 / Days 8–30), averaged per platform. Age-based, so it ignores the date range; scopes by org + platform/campaign/creator/account. Backs the home 'Share of views by age' chart.","tags":["Dashboard"],"parameters":[{"name":"accountScope","in":"query","schema":{"enum":["campaign","tracked"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"metricFilters","in":"query","schema":{"type":"object","properties":{"views":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"likes":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"comments":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"shares":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"bookmarks":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"engagement":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"viralityMultiplier":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","schema":{"enum":["title","platform","accountHandle","viralityMultiplier","views","likes","comments","shares","bookmarks","engagement","publishedAt","updatedAt"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"sortOrder","in":"query","schema":{"enum":["asc","desc"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0},"allowEmptyValue":true,"allowReserved":true},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"allowEmptyValue":true,"allowReserved":true},{"name":"showExcluded","in":"query","schema":{"type":"boolean"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/analytics/campaign-breakdown":{"get":{"operationId":"dashboard.campaignBreakdown","summary":"Get campaign breakdown","description":"Get video count and total views grouped by publish date and campaign. Backs the per-campaign bar chart and distribution donuts.","tags":["Dashboard"],"parameters":[{"name":"accountScope","in":"query","schema":{"enum":["campaign","tracked"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"metricFilters","in":"query","schema":{"type":"object","properties":{"views":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"likes":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"comments":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"shares":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"bookmarks":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"engagement":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"viralityMultiplier":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","schema":{"enum":["title","platform","accountHandle","viralityMultiplier","views","likes","comments","shares","bookmarks","engagement","publishedAt","updatedAt"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"sortOrder","in":"query","schema":{"enum":["asc","desc"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0},"allowEmptyValue":true,"allowReserved":true},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"allowEmptyValue":true,"allowReserved":true},{"name":"showExcluded","in":"query","schema":{"type":"boolean"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/analytics/creator-breakdown":{"get":{"operationId":"dashboard.creatorBreakdown","summary":"Get creator breakdown","description":"Get video count and total views grouped by publish date and creator. Backs the per-creator views and posts bar charts.","tags":["Dashboard"],"parameters":[{"name":"accountScope","in":"query","schema":{"enum":["campaign","tracked"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"metricFilters","in":"query","schema":{"type":"object","properties":{"views":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"likes":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"comments":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"shares":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"bookmarks":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"engagement":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"viralityMultiplier":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","schema":{"enum":["title","platform","accountHandle","viralityMultiplier","views","likes","comments","shares","bookmarks","engagement","publishedAt","updatedAt"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"sortOrder","in":"query","schema":{"enum":["asc","desc"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0},"allowEmptyValue":true,"allowReserved":true},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"allowEmptyValue":true,"allowReserved":true},{"name":"showExcluded","in":"query","schema":{"type":"boolean"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/analytics/views-gained-breakdown":{"get":{"operationId":"dashboard.viewsGainedBreakdown","summary":"Get views gained per day breakdown","description":"Views gained per day (diffed from video snapshots, regardless of publish date) grouped by platform, campaign, or creator. Backs the 'Per day' mode of the Views bar chart.","tags":["Dashboard"],"parameters":[{"name":"accountScope","in":"query","required":false,"schema":{"enum":["campaign","tracked"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","required":false,"schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","required":false,"schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"metricFilters","in":"query","required":false,"schema":{"type":"object","properties":{"views":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"likes":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"comments":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"shares":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"bookmarks":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"engagement":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"viralityMultiplier":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","required":false,"schema":{"enum":["title","platform","accountHandle","viralityMultiplier","views","likes","comments","shares","bookmarks","engagement","publishedAt","updatedAt"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"sortOrder","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0},"allowEmptyValue":true,"allowReserved":true},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"allowEmptyValue":true,"allowReserved":true},{"name":"showExcluded","in":"query","required":false,"schema":{"type":"boolean"},"allowEmptyValue":true,"allowReserved":true},{"name":"dimension","in":"query","required":true,"schema":{"enum":["platform","campaign","creator"],"type":"string"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/analytics/views-histogram":{"get":{"operationId":"dashboard.viewHistogram","summary":"Get views histogram","description":"Get video counts grouped by platform and view-size bucket. Backs the views-distribution histogram charts.","tags":["Dashboard"],"parameters":[{"name":"accountScope","in":"query","schema":{"enum":["campaign","tracked"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"metricFilters","in":"query","schema":{"type":"object","properties":{"views":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"likes":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"comments":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"shares":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"bookmarks":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"engagement":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"viralityMultiplier":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","schema":{"enum":["title","platform","accountHandle","viralityMultiplier","views","likes","comments","shares","bookmarks","engagement","publishedAt","updatedAt"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"sortOrder","in":"query","schema":{"enum":["asc","desc"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0},"allowEmptyValue":true,"allowReserved":true},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"allowEmptyValue":true,"allowReserved":true},{"name":"showExcluded","in":"query","schema":{"type":"boolean"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/analytics/spend-summary":{"get":{"operationId":"dashboard.spendSummary","summary":"Get spend summary","description":"Total creator payouts paid, total views, and blended effective CPM (paid ÷ views × 1000) for the selected scope. Backs the Spend & efficiency header.","tags":["Dashboard"],"parameters":[{"name":"accountScope","in":"query","schema":{"enum":["campaign","tracked"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"metricFilters","in":"query","schema":{"type":"object","properties":{"views":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"likes":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"comments":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"shares":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"bookmarks":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"engagement":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"viralityMultiplier":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","schema":{"enum":["title","platform","accountHandle","viralityMultiplier","views","likes","comments","shares","bookmarks","engagement","publishedAt","updatedAt"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"sortOrder","in":"query","schema":{"enum":["asc","desc"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0},"allowEmptyValue":true,"allowReserved":true},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"allowEmptyValue":true,"allowReserved":true},{"name":"showExcluded","in":"query","schema":{"type":"boolean"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/analytics/daily-spend":{"get":{"operationId":"dashboard.dailySpend","summary":"Get daily spend","description":"Creator payouts paid (cents) grouped by payout date. Backs the spend-over-time bar chart.","tags":["Dashboard"],"parameters":[{"name":"accountScope","in":"query","schema":{"enum":["campaign","tracked"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"metricFilters","in":"query","schema":{"type":"object","properties":{"views":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"likes":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"comments":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"shares":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"bookmarks":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"engagement":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"viralityMultiplier":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","schema":{"enum":["title","platform","accountHandle","viralityMultiplier","views","likes","comments","shares","bookmarks","engagement","publishedAt","updatedAt"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"sortOrder","in":"query","schema":{"enum":["asc","desc"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0},"allowEmptyValue":true,"allowReserved":true},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"allowEmptyValue":true,"allowReserved":true},{"name":"showExcluded","in":"query","schema":{"type":"boolean"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/analytics/daily-campaign-spend":{"get":{"operationId":"dashboard.dailyCampaignSpend","summary":"Get daily spend by campaign","description":"Creator payouts paid (cents) grouped by payout date and campaign. Backs the cumulative-spend stacked area and cumulative-CPM lines by campaign.","tags":["Dashboard"],"parameters":[{"name":"accountScope","in":"query","schema":{"enum":["campaign","tracked"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"metricFilters","in":"query","schema":{"type":"object","properties":{"views":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"likes":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"comments":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"shares":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"bookmarks":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"engagement":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"viralityMultiplier":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","schema":{"enum":["title","platform","accountHandle","viralityMultiplier","views","likes","comments","shares","bookmarks","engagement","publishedAt","updatedAt"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"sortOrder","in":"query","schema":{"enum":["asc","desc"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0},"allowEmptyValue":true,"allowReserved":true},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"allowEmptyValue":true,"allowReserved":true},{"name":"showExcluded","in":"query","schema":{"type":"boolean"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/analytics/daily-creator-spend":{"get":{"operationId":"dashboard.dailyCreatorSpend","summary":"Get daily spend by creator","description":"Creator payouts paid (cents) grouped by payout date and creator. Backs the cumulative-spend stacked area and cumulative-CPM lines by creator.","tags":["Dashboard"],"parameters":[{"name":"accountScope","in":"query","schema":{"enum":["campaign","tracked"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"metricFilters","in":"query","schema":{"type":"object","properties":{"views":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"likes":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"comments":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"shares":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"bookmarks":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"engagement":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"viralityMultiplier":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","schema":{"enum":["title","platform","accountHandle","viralityMultiplier","views","likes","comments","shares","bookmarks","engagement","publishedAt","updatedAt"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"sortOrder","in":"query","schema":{"enum":["asc","desc"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0},"allowEmptyValue":true,"allowReserved":true},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"allowEmptyValue":true,"allowReserved":true},{"name":"showExcluded","in":"query","schema":{"type":"boolean"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/analytics/cpm-by-campaign":{"get":{"operationId":"dashboard.cpmByCampaign","summary":"Get CPM by campaign","description":"Effective cost per 1,000 views (paid ÷ views × 1000) per campaign. Backs the CPM-by-campaign ranked bar chart.","tags":["Dashboard"],"parameters":[{"name":"accountScope","in":"query","schema":{"enum":["campaign","tracked"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"metricFilters","in":"query","schema":{"type":"object","properties":{"views":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"likes":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"comments":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"shares":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"bookmarks":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"engagement":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"viralityMultiplier":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","schema":{"enum":["title","platform","accountHandle","viralityMultiplier","views","likes","comments","shares","bookmarks","engagement","publishedAt","updatedAt"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"sortOrder","in":"query","schema":{"enum":["asc","desc"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0},"allowEmptyValue":true,"allowReserved":true},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"allowEmptyValue":true,"allowReserved":true},{"name":"showExcluded","in":"query","schema":{"type":"boolean"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/analytics/cpm-by-creator":{"get":{"operationId":"dashboard.cpmByCreator","summary":"Get CPM by creator","description":"Effective cost per 1,000 views (paid ÷ views × 1000) per creator. Backs the CPM-by-creator ranked bar chart.","tags":["Dashboard"],"parameters":[{"name":"accountScope","in":"query","schema":{"enum":["campaign","tracked"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"metricFilters","in":"query","schema":{"type":"object","properties":{"views":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"likes":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"comments":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"shares":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"bookmarks":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"engagement":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"viralityMultiplier":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","schema":{"enum":["title","platform","accountHandle","viralityMultiplier","views","likes","comments","shares","bookmarks","engagement","publishedAt","updatedAt"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"sortOrder","in":"query","schema":{"enum":["asc","desc"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0},"allowEmptyValue":true,"allowReserved":true},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"allowEmptyValue":true,"allowReserved":true},{"name":"showExcluded","in":"query","schema":{"type":"boolean"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/analytics/video-timeline":{"get":{"operationId":"dashboard.videoTimeline","summary":"Get video metrics timeline","description":"Get aggregated video engagement metrics over time as a daily series (views, likes, comments, shares, bookmarks, engagement). No spend or cost figures.","tags":["Dashboard"],"parameters":[{"name":"accountScope","in":"query","schema":{"enum":["campaign","tracked"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"metricFilters","in":"query","schema":{"type":"object","properties":{"views":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"likes":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"comments":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"shares":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"bookmarks":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"engagement":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"viralityMultiplier":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","schema":{"enum":["title","platform","accountHandle","viralityMultiplier","views","likes","comments","shares","bookmarks","engagement","publishedAt","updatedAt"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"sortOrder","in":"query","schema":{"enum":["asc","desc"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0},"allowEmptyValue":true,"allowReserved":true},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"allowEmptyValue":true,"allowReserved":true},{"name":"showExcluded","in":"query","schema":{"type":"boolean"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/analytics/video-metric-totals":{"get":{"operationId":"dashboard.videoMetricTotals","summary":"Get video metric totals","description":"Get aggregated totals for video engagement metrics (views, likes, comments, shares, bookmarks) plus videoCount, across the filter context. No spend or cost figures.","tags":["Dashboard"],"parameters":[{"name":"accountScope","in":"query","schema":{"enum":["campaign","tracked"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"metricFilters","in":"query","schema":{"type":"object","properties":{"views":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"likes":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"comments":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"shares":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"bookmarks":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"engagement":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}},"viralityMultiplier":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0}}}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","schema":{"enum":["title","platform","accountHandle","viralityMultiplier","views","likes","comments","shares","bookmarks","engagement","publishedAt","updatedAt"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"sortOrder","in":"query","schema":{"enum":["asc","desc"],"type":"string"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0},"allowEmptyValue":true,"allowReserved":true},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"allowEmptyValue":true,"allowReserved":true},{"name":"showExcluded","in":"query","schema":{"type":"boolean"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/organization":{"get":{"operationId":"organization.get","summary":"Get organization details","description":"Get details for the caller's current organization (name, slug, logo, metadata, members).","tags":["Organization"],"parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}},"patch":{"operationId":"organization.update","summary":"Update organization","description":"Update the caller's organization details (name, slug, logo, metadata) — only the fields you pass change. A metadata object replaces the stored metadata. Requires organization update permission (owner or admin).","tags":["Organization"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"slug":{"type":"string","minLength":1,"maxLength":255},"logo":{"type":"string","format":"uri"},"metadata":{"type":"object","properties":{"isDemoOrg":{"type":"boolean"},"discordBotWelcome":{"type":"object","properties":{"getStartedCardMarkdown":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}]},"welcomeCardMarkdown":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}]}}}}}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/organization/settings/default-campaign":{"patch":{"operationId":"organization.setDefaultCampaign","summary":"Set default campaign","description":"Set (or clear, with null) the organization's default campaign — the one new accounts auto-link to and the dashboard scopes to by default. Pass a campaignId from list_campaigns, or null to clear.","tags":["Organization"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"anyOf":[{"type":"string","pattern":"^prj_.+[\\s\\S]*$"},{"type":"null"}]}},"required":["campaignId"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/organization/settings":{"get":{"operationId":"organization.getSettings","summary":"Get organization settings","description":"Get the caller's organization settings, including the default campaign id (or null if none is set).","tags":["Organization"],"parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/organization/members":{"get":{"operationId":"organization.members.list","summary":"List organization members","description":"List the members of the caller's organization, each with their role (owner/admin/manager/creator).","tags":["Organization"],"parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/organization/invitations":{"get":{"operationId":"organization.invitations.list","summary":"List organization invitations","description":"Get all pending invitations for the organization","tags":["Organization"],"parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}},"post":{"operationId":"organization.invitations.invite","summary":"Invite member","description":"Send invitation to join the organization","tags":["Organization"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"role":{"enum":["owner","admin","manager","viewer"],"type":"string"},"resend":{"type":"boolean"}},"required":["email","role"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/organization/invitations/{invitationId}":{"delete":{"operationId":"organization.invitations.cancel","summary":"Cancel invitation","description":"Cancel a pending invitation","tags":["Organization"],"parameters":[{"name":"invitationId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/organization/api-keys":{"get":{"operationId":"organization.apiKeys.list","summary":"List API keys","description":"Get all API keys for the current organization","tags":["Organization"],"parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}},"post":{"operationId":"organization.apiKeys.create","summary":"Create API key","description":"Create a new API key for the organization","tags":["Organization"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"expiresIn":{"type":"number"},"scope":{"enum":["read_only","read_write"],"type":"string","default":"read_write"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/organization/api-keys/{keyId}":{"get":{"operationId":"organization.apiKeys.get","summary":"Get API key","description":"Get a single API key by ID","tags":["Organization"],"parameters":[{"name":"keyId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}},"patch":{"operationId":"organization.apiKeys.update","summary":"Update API key","description":"Update API key name or enabled status","tags":["Organization"],"parameters":[{"name":"keyId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"enabled":{"type":"boolean"},"scope":{"enum":["read_only","read_write"],"type":"string"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}},"delete":{"operationId":"organization.apiKeys.delete","summary":"Delete API key","description":"Delete/revoke an API key","tags":["Organization"],"parameters":[{"name":"keyId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/organization/api-keys/{keyId}/rotate":{"post":{"operationId":"organization.apiKeys.rotate","summary":"Rotate API key","description":"Reissue a new secret for an API key, keeping its name and scope","tags":["Organization"],"parameters":[{"name":"keyId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/notifications/event-types":{"get":{"operationId":"notifications.eventTypes.list","summary":"List notification event types","description":"List the events that can send a notification, with each event's fields, options, scope and the channels that support it. Use this to get valid eventTypes and eventOptions before you create or update a subscription; only campaign-scope events work with a campaign filter.","tags":["Notifications"],"parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/notifications/subscriptions":{"get":{"operationId":"notifications.subscriptions.list","summary":"List notification subscriptions","description":"List where this organization sends notifications (Discord, Slack, Email, or Custom webhook) and which events each destination gets. Destinations show as a short preview; URLs and secrets are never returned.","tags":["Notifications"],"parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}},"post":{"operationId":"notifications.subscriptions.create","summary":"Create notification subscription","description":"Send chosen events to a destination (Discord, Slack, Email, or Custom webhook), for example new creators or the daily digest. After you create it, call send_test_notification to check that the destination works. Pass idempotencyKey so a retry does not make a duplicate.","tags":["Notifications"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"channel":{"enum":["discord_webhook","slack_webhook","email","custom_webhook"],"type":"string","description":"discord_webhook: a Discord channel webhook URL. slack_webhook: a Slack incoming-webhook URL. email: your own account email; needs personal: true. custom_webhook: any public https endpoint, signed with Standard Webhooks headers when a secret is set."},"destination":{"type":"string","description":"The webhook URL. Write-only: it is never returned. Not needed for a personal email subscription, which always sends to your account email."},"eventTypes":{"type":"array","items":{"enum":["creator.joined_campaign","creator.added_to_campaign","creator.removed_from_campaign","creator.account_added","creator.account_linked_to_campaign","org.tiktok_ads_connected","creator.tiktok_account_ads_linked","org.meta_ads_connected","creator.meta_account_ads_linked","digest.daily"],"type":"string"},"description":"Event type keys from list_notification_event_types. An empty list sends every instant event, or with campaignIds every instant campaign event; a digest is sent only when listed.","default":[]},"eventOptions":{"type":"object","properties":{"digest.daily":{"type":"object","properties":{"topVideos":{"type":"integer","minimum":1,"maximum":9,"default":8,"title":"Top videos","description":"How many videos the digest lists, most viewed first."},"lookbackDays":{"type":"integer","minimum":1,"maximum":30,"default":7,"title":"Ranking window (days)","description":"Top videos are ranked by their views over this many days."}},"additionalProperties":false}},"additionalProperties":false,"default":{},"description":"Options for the event types in eventTypes, keyed by event type. The optionsSchema of each event type in list_notification_event_types gives its options and their defaults; an option you leave out uses its default."},"campaignIds":{"type":"array","items":{"type":"string"},"description":"Only send events about these campaigns (ids from list_campaigns). A campaign filter works only with event types whose scope is campaign in list_notification_event_types. An empty list means no filter.","default":[]},"secret":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}],"description":"custom_webhook only: the signing secret (whsec_ followed by base64 is recommended). Write-only; null removes it."},"customHeaders":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},{"type":"null"}],"description":"custom_webhook only: extra request headers as name to value. Write-only; null removes them."},"label":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"description":"Display name for the destination. The daily digest uses it as a title prefix."},"personal":{"type":"boolean","default":false,"description":"true: an email subscription owned by you, sent to your account email and hidden from other members. Required for the email channel."},"idempotencyKey":{"type":"string","minLength":1,"maxLength":200,"description":"Any unique string for this request. A retry with the same key returns the first result instead of doing it again."}},"required":["channel"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/notifications/subscriptions/{id}":{"get":{"operationId":"notifications.subscriptions.get","summary":"Get notification subscription","description":"Get one notification subscription by id, with its events, filters and last delivery result.","tags":["Notifications"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^nsub_.+[\\s\\S]*$","description":"Subscription id from list_notification_subscriptions."}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}},"patch":{"operationId":"notifications.subscriptions.update","summary":"Update notification subscription","description":"Change a notification subscription: its events, event options, campaign filter, label, destination or enabled state. The destination, secret and headers are write-only; send a new value to replace one.","tags":["Notifications"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^nsub_.+[\\s\\S]*$","description":"Subscription id from list_notification_subscriptions."}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"destination":{"type":"string","description":"The webhook URL. Write-only: it is never returned. Not needed for a personal email subscription, which always sends to your account email."},"eventTypes":{"type":"array","items":{"enum":["creator.joined_campaign","creator.added_to_campaign","creator.removed_from_campaign","creator.account_added","creator.account_linked_to_campaign","org.tiktok_ads_connected","creator.tiktok_account_ads_linked","org.meta_ads_connected","creator.meta_account_ads_linked","digest.daily"],"type":"string"},"description":"Event type keys from list_notification_event_types. An empty list sends every instant event, or with campaignIds every instant campaign event; a digest is sent only when listed."},"eventOptions":{"type":"object","properties":{"digest.daily":{"type":"object","properties":{"topVideos":{"type":"integer","minimum":1,"maximum":9,"default":8,"title":"Top videos","description":"How many videos the digest lists, most viewed first."},"lookbackDays":{"type":"integer","minimum":1,"maximum":30,"default":7,"title":"Ranking window (days)","description":"Top videos are ranked by their views over this many days."}},"additionalProperties":false}},"additionalProperties":false,"description":"Options for the event types in eventTypes, keyed by event type. The optionsSchema of each event type in list_notification_event_types gives its options and their defaults; an option you leave out uses its default. Replaces all stored options. Omit to keep them."},"campaignIds":{"type":"array","items":{"type":"string"},"description":"Only send events about these campaigns (ids from list_campaigns). A campaign filter works only with event types whose scope is campaign in list_notification_event_types. An empty list means no filter."},"secret":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}],"description":"custom_webhook only: the signing secret (whsec_ followed by base64 is recommended). Write-only; null removes it."},"customHeaders":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},{"type":"null"}],"description":"custom_webhook only: extra request headers as name to value. Write-only; null removes them."},"label":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"description":"Display name for the destination. The daily digest uses it as a title prefix."},"enabled":{"type":"boolean","description":"false pauses the subscription without deleting it."}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}},"delete":{"operationId":"notifications.subscriptions.delete","summary":"Delete notification subscription","description":"Delete a notification subscription and its delivery history. To pause notifications, use update_notification_subscription with enabled: false instead.","tags":["Notifications"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^nsub_.+[\\s\\S]*$","description":"Subscription id from list_notification_subscriptions."}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/notifications/subscriptions/{id}/test":{"post":{"operationId":"notifications.subscriptions.sendTest","summary":"Send test notification","description":"Send one test notification to a subscription's destination now and record the result as a delivery. Use it to check that a webhook or email address works, or to see how an event, such as the daily digest, looks. Pass idempotencyKey so a retry does not send twice.","tags":["Notifications"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^nsub_.+[\\s\\S]*$","description":"Subscription id from list_notification_subscriptions."}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"eventType":{"enum":["creator.joined_campaign","creator.added_to_campaign","creator.removed_from_campaign","creator.account_added","creator.account_linked_to_campaign","org.tiktok_ads_connected","creator.tiktok_account_ads_linked","org.meta_ads_connected","creator.meta_account_ads_linked","digest.daily"],"type":"string","description":"The event to send as the sample, from list_notification_event_types. Omit to use the subscription's first event. A digest sends the latest real report."},"idempotencyKey":{"type":"string","minLength":1,"maxLength":200,"description":"Any unique string for this request. A retry with the same key returns the first result instead of doing it again."}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/notifications/deliveries":{"get":{"operationId":"notifications.deliveries.list","summary":"List notification deliveries","description":"List recent notification sends, newest first, with status, attempts and error. Use it to find out if notifications were sent or why they failed. Filter by subscription, status or time.","tags":["Notifications"],"parameters":[{"name":"subscriptionId","in":"query","schema":{"type":"string","pattern":"^nsub_.+[\\s\\S]*$","description":"Only deliveries to this subscription."},"allowEmptyValue":true,"allowReserved":true},{"name":"status","in":"query","schema":{"enum":["pending","sent","failed"],"type":"string","description":"pending: waiting for its first or next attempt. sent: the destination accepted it. failed: no attempts left."},"allowEmptyValue":true,"allowReserved":true},{"name":"since","in":"query","schema":{"type":"string","format":"date-time","description":"Only deliveries created at or after this ISO 8601 time."},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":20,"description":"Maximum number of deliveries to return."},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/notifications/deliveries/{id}":{"get":{"operationId":"notifications.deliveries.get","summary":"Get notification delivery","description":"Get one notification send by id: status (pending, sent, failed), attempts, HTTP status and error. Use it after send_test_notification to confirm the result.","tags":["Notifications"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^ndel_.+[\\s\\S]*$","description":"Delivery id from list_notification_deliveries or send_test_notification."}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/manager/campaigns":{"get":{"operationId":"manager.campaigns","summary":"List campaigns","description":"Returns a cursor-paginated page of campaigns with rolled-up metrics for the active date range — creator/account/video counts plus aggregated views, engagement, payouts (Cost / CPM / CPE).\n\n**Drill chain**: Top-level. Use the returned `id` as a `campaignIds` filter on the Creators / Accounts / Videos endpoints to drill down.\n\n**Pagination**: cursor-based. Use `nextCursor` to fetch the next page. Set `limit: 0` for a count-only request.\n\n**Filtering**: pass a `filter` array of `ManagerFilter` records to narrow on numeric metrics, dates, or enum columns. Combine with `q` for free-text search on name/description, `dateRange` for the metrics window, and `platforms` to scope which videos contribute to the rollup.","tags":["Manager"],"parameters":[{"name":"cursor","in":"query","schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque pagination cursor returned in `nextCursor` from the previous page. Pass `null` (or omit) for the first page. Cursors are tied to the active sort + filters and become invalid if those change."},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":0,"maximum":200,"default":100,"description":"Page size, 0–200. Use `0` to skip row materialization and return only `totalCount` (useful for tab badges / count-only requests). Default 100."},"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"anyOf":[{"type":"string","pattern":"^prj_.+[\\s\\S]*$"},{"const":"unassigned"}]}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sort","in":"query","schema":{"type":"string","maxLength":60,"description":"Single-column sort. Format: `<columnId>` for ascending, `-<columnId>` for descending (e.g. `-engagementRate`, `views`, `-publishedAt`). Allowed columnIds match the entity's sort keys; invalid keys are ignored."},"allowEmptyValue":true,"allowReserved":true},{"name":"q","in":"query","schema":{"type":"string","maxLength":200,"description":"Free-text search. Per-entity semantics: matches name/description for campaigns, name/email for creators, handle/name for accounts, title/handle for videos."},"allowEmptyValue":true,"allowReserved":true},{"name":"includeColumns","in":"query","schema":{"type":"array","maxItems":100,"items":{"type":"string","maxLength":80},"description":"Column ids the caller intends to render. When supplied, columns not listed may be skipped for performance and return as null, unless they're sorted or filtered. Unknown ids are silently ignored."},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"filter","in":"query","schema":{"type":"array","maxItems":40,"items":{"type":"object","properties":{"columnId":{"type":"string","maxLength":60},"variant":{"enum":["text","number","multi-select","boolean","date"],"type":"string"},"operator":{"enum":["is","isNot","isAnyOf","isNoneOf","contains","containsAny","containsAll","gt","gte","lt","lte","between","isTrue","isFalse","isEmpty","isNotEmpty"],"type":"string"},"value":{}},"required":["columnId","variant","operator"]},"description":"Filter constraints. Each entry is `{ columnId, variant, operator, value? }`. Supported operators per variant: number/date accept gt/gte/lt/lte/between + isEmpty/isNotEmpty; multi-select accepts isAnyOf/isNoneOf + isEmpty/isNotEmpty; boolean accepts isTrue/isFalse + isEmpty/isNotEmpty; text accepts is/isNot/contains + isEmpty/isNotEmpty. Invalid pairs are silently dropped."},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/manager/creators":{"get":{"operationId":"manager.creators","summary":"List creators","description":"Returns a cursor-paginated page of creators with rolled-up video metrics plus Cost / CPM / CPE from payouts in the active date range.\n\n**Drill chain**: Children of campaigns. Pass `campaignIds` to scope to creators of those campaigns. The returned `id` can be used as a `creatorIds` filter on the Accounts / Videos endpoints.\n\n**Pagination**: cursor-based. Use `nextCursor` to fetch the next page. Set `limit: 0` for a count-only request.\n\n**Filtering**: pass a `filter` array for structured constraints (status, country, gender, metrics). Use `q` for free-text search on name/email. Use `statusIn` as a shortcut to filter by creator status; it takes precedence over a `status` entry in `filter`.","tags":["Manager"],"parameters":[{"name":"cursor","in":"query","schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque pagination cursor returned in `nextCursor` from the previous page. Pass `null` (or omit) for the first page. Cursors are tied to the active sort + filters and become invalid if those change."},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":0,"maximum":200,"default":100,"description":"Page size, 0–200. Use `0` to skip row materialization and return only `totalCount` (useful for tab badges / count-only requests). Default 100."},"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"anyOf":[{"type":"string","pattern":"^prj_.+[\\s\\S]*$"},{"const":"unassigned"}]}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sort","in":"query","schema":{"type":"string","maxLength":60,"description":"Single-column sort. Format: `<columnId>` for ascending, `-<columnId>` for descending (e.g. `-engagementRate`, `views`, `-publishedAt`). Allowed columnIds match the entity's sort keys; invalid keys are ignored."},"allowEmptyValue":true,"allowReserved":true},{"name":"q","in":"query","schema":{"type":"string","maxLength":200,"description":"Free-text search. Per-entity semantics: matches name/description for campaigns, name/email for creators, handle/name for accounts, title/handle for videos."},"allowEmptyValue":true,"allowReserved":true},{"name":"includeColumns","in":"query","schema":{"type":"array","maxItems":100,"items":{"type":"string","maxLength":80},"description":"Column ids the caller intends to render. When supplied, columns not listed may be skipped for performance and return as null, unless they're sorted or filtered. Unknown ids are silently ignored."},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"statusIn","in":"query","schema":{"type":"array","items":{"enum":["active","inactive"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"filter","in":"query","schema":{"type":"array","maxItems":40,"items":{"type":"object","properties":{"columnId":{"type":"string","maxLength":60},"variant":{"enum":["text","number","multi-select","boolean","date"],"type":"string"},"operator":{"enum":["is","isNot","isAnyOf","isNoneOf","contains","containsAny","containsAll","gt","gte","lt","lte","between","isTrue","isFalse","isEmpty","isNotEmpty"],"type":"string"},"value":{}},"required":["columnId","variant","operator"]},"description":"Filter constraints. Each entry is `{ columnId, variant, operator, value? }`. Supported operators per variant: number/date accept gt/gte/lt/lte/between + isEmpty/isNotEmpty; multi-select accepts isAnyOf/isNoneOf + isEmpty/isNotEmpty; boolean accepts isTrue/isFalse + isEmpty/isNotEmpty; text accepts is/isNot/contains + isEmpty/isNotEmpty. Invalid pairs are silently dropped."},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/manager/accounts":{"get":{"operationId":"manager.accounts","summary":"List accounts","description":"Returns a cursor-paginated page of social accounts (a creator's TikTok / Instagram / etc. handle) with rolled-up video metrics.\n\n**Drill chain**: Children of creators (and grandchildren of campaigns). Pass `campaignIds` and/or `creatorIds` to scope. The returned `id` can be used as an `accountIds` filter on the Videos endpoint.\n\n**Pagination**: cursor-based. Use `nextCursor` to fetch the next page. Set `limit: 0` for a count-only request.\n\n**Filtering**: pass a `filter` array for structured constraints (followers, engagement, account status, scrape health). Use `q` for free-text search on handle/name.\n\n**TikTok Ads readiness**: TikTok rows include last-synced org-scoped Business Center readiness fields: `tiktokAdsLinkStatus`, identity metadata, `tiktokAdsAvailableStatus`, `tiktokAdsCanPullVideo`, `tiktokAdsSyncedAt`, and `tiktokAdsLinkReason`. These fields are not realtime ownership proof.\n\n**Meta partnership ads**: Instagram rows include last-synced org-scoped partnership-permission fields: `metaAdsLinkStatus` (linked/pending/not_linked/revoked/unknown), `metaAdsPermissionId`, `metaAdsCreatorUsername`, `metaAdsSyncedAt`, and `metaAdsLinkReason`. These fields are not realtime ownership proof.","tags":["Manager"],"parameters":[{"name":"cursor","in":"query","schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque pagination cursor returned in `nextCursor` from the previous page. Pass `null` (or omit) for the first page. Cursors are tied to the active sort + filters and become invalid if those change."},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":0,"maximum":200,"default":100,"description":"Page size, 0–200. Use `0` to skip row materialization and return only `totalCount` (useful for tab badges / count-only requests). Default 100."},"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"anyOf":[{"type":"string","pattern":"^prj_.+[\\s\\S]*$"},{"const":"unassigned"}]}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sort","in":"query","schema":{"type":"string","maxLength":60,"description":"Single-column sort. Format: `<columnId>` for ascending, `-<columnId>` for descending (e.g. `-engagementRate`, `views`, `-publishedAt`). Allowed columnIds match the entity's sort keys; invalid keys are ignored."},"allowEmptyValue":true,"allowReserved":true},{"name":"q","in":"query","schema":{"type":"string","maxLength":200,"description":"Free-text search. Per-entity semantics: matches name/description for campaigns, name/email for creators, handle/name for accounts, title/handle for videos."},"allowEmptyValue":true,"allowReserved":true},{"name":"includeColumns","in":"query","schema":{"type":"array","maxItems":100,"items":{"type":"string","maxLength":80},"description":"Column ids the caller intends to render. When supplied, columns not listed may be skipped for performance and return as null, unless they're sorted or filtered. Unknown ids are silently ignored."},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"filter","in":"query","schema":{"type":"array","maxItems":40,"items":{"type":"object","properties":{"columnId":{"type":"string","maxLength":60},"variant":{"enum":["text","number","multi-select","boolean","date"],"type":"string"},"operator":{"enum":["is","isNot","isAnyOf","isNoneOf","contains","containsAny","containsAll","gt","gte","lt","lte","between","isTrue","isFalse","isEmpty","isNotEmpty"],"type":"string"},"value":{}},"required":["columnId","variant","operator"]},"description":"Filter constraints. Each entry is `{ columnId, variant, operator, value? }`. Supported operators per variant: number/date accept gt/gte/lt/lte/between + isEmpty/isNotEmpty; multi-select accepts isAnyOf/isNoneOf + isEmpty/isNotEmpty; boolean accepts isTrue/isFalse + isEmpty/isNotEmpty; text accepts is/isNot/contains + isEmpty/isNotEmpty. Invalid pairs are silently dropped."},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/manager/videos":{"get":{"operationId":"manager.videos","summary":"List videos","description":"Returns a cursor-paginated page of individual videos. Each row carries the video's duration and a `viralityMultiplier` (this video's views ÷ the publishing account's median views — `> 1` means above-average performance).\n\n**Drill chain**: Leaves of the campaign → creator → account → video chain. Pass any combination of `campaignIds`, `creatorIds`, `accountIds` to scope.\n\n**Pagination**: cursor-based. Use `nextCursor` to fetch the next page. Set `limit: 0` for a count-only request.\n\n**Filtering**: pass a `filter` array for structured constraints (views, engagement, duration, availability). Use `q` for free-text search on title/handle.","tags":["Manager"],"parameters":[{"name":"cursor","in":"query","schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque pagination cursor returned in `nextCursor` from the previous page. Pass `null` (or omit) for the first page. Cursors are tied to the active sort + filters and become invalid if those change."},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":0,"maximum":200,"default":100,"description":"Page size, 0–200. Use `0` to skip row materialization and return only `totalCount` (useful for tab badges / count-only requests). Default 100."},"allowEmptyValue":true,"allowReserved":true},{"name":"dateRange","in":"query","schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"platforms","in":"query","schema":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"campaignIds","in":"query","schema":{"type":"array","items":{"anyOf":[{"type":"string","pattern":"^prj_.+[\\s\\S]*$"},{"const":"unassigned"}]}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"creatorIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"accountIds","in":"query","schema":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"showExcluded","in":"query","schema":{"type":"boolean"},"allowEmptyValue":true,"allowReserved":true},{"name":"sort","in":"query","schema":{"type":"string","maxLength":60,"description":"Single-column sort. Format: `<columnId>` for ascending, `-<columnId>` for descending (e.g. `-engagementRate`, `views`, `-publishedAt`). Allowed columnIds match the entity's sort keys; invalid keys are ignored."},"allowEmptyValue":true,"allowReserved":true},{"name":"q","in":"query","schema":{"type":"string","maxLength":200,"description":"Free-text search. Per-entity semantics: matches name/description for campaigns, name/email for creators, handle/name for accounts, title/handle for videos."},"allowEmptyValue":true,"allowReserved":true},{"name":"includeColumns","in":"query","schema":{"type":"array","maxItems":100,"items":{"type":"string","maxLength":80},"description":"Column ids the caller intends to render. When supplied, columns not listed may be skipped for performance and return as null, unless they're sorted or filtered. Unknown ids are silently ignored."},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"filter","in":"query","schema":{"type":"array","maxItems":40,"items":{"type":"object","properties":{"columnId":{"type":"string","maxLength":60},"variant":{"enum":["text","number","multi-select","boolean","date"],"type":"string"},"operator":{"enum":["is","isNot","isAnyOf","isNoneOf","contains","containsAny","containsAll","gt","gte","lt","lte","between","isTrue","isFalse","isEmpty","isNotEmpty"],"type":"string"},"value":{}},"required":["columnId","variant","operator"]},"description":"Filter constraints. Each entry is `{ columnId, variant, operator, value? }`. Supported operators per variant: number/date accept gt/gte/lt/lte/between + isEmpty/isNotEmpty; multi-select accepts isAnyOf/isNoneOf + isEmpty/isNotEmpty; boolean accepts isTrue/isFalse + isEmpty/isNotEmpty; text accepts is/isNot/contains + isEmpty/isNotEmpty. Invalid pairs are silently dropped."},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/manager/views":{"get":{"operationId":"manager.views.list","summary":"List manager views","description":"List personal and organization-shared manager views. Personal defaults override organization defaults.","tags":["Manager"],"parameters":[{"name":"scope","in":"query","schema":{"enum":["user","organization"],"type":"string"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}},"post":{"operationId":"manager.views.create","summary":"Create manager view","description":"Create a personal or organization-shared manager view with full manager layout state.","tags":["Manager"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"scope":{"enum":["user","organization"],"type":"string"},"name":{"type":"string","minLength":1,"maxLength":80},"state":{"type":"object","properties":{"version":{"const":1},"activeTab":{"enum":["campaigns","creators","accounts","videos","comments"],"type":"string"},"global":{"type":"object","properties":{"dateRange":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"}},"required":["from","to"]},"dateRangePreset":{"type":"string"},"campaignIds":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"creatorIds":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"accountIds":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"platforms":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"q":{"type":"string","maxLength":200},"statusIn":{"type":"array","items":{"enum":["active","inactive"],"type":"string"}}}},"tabs":{"type":"object","properties":{"campaigns":{"type":"object","properties":{"filters":{"type":"array","maxItems":40,"items":{"type":"object","properties":{"columnId":{"type":"string","maxLength":60},"variant":{"enum":["text","number","multi-select","boolean","date"],"type":"string"},"operator":{"enum":["is","isNot","isAnyOf","isNoneOf","contains","containsAny","containsAll","gt","gte","lt","lte","between","isTrue","isFalse","isEmpty","isNotEmpty"],"type":"string"},"value":{}},"required":["columnId","variant","operator"]},"default":[]},"sort":{"type":"object","properties":{"id":{"type":"string","maxLength":60},"desc":{"type":"boolean"}},"required":["id","desc"]},"columns":{"type":"object","properties":{"visibility":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"boolean"}},"order":{"type":"array","maxItems":100,"items":{"type":"string","maxLength":60}},"pinning":{"type":"object","properties":{"left":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60}},"right":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60}}},"required":["left"]},"sizing":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"number","minimum":0,"maximum":3000}},"colorRules":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"object","properties":{"bands":{"type":"array","maxItems":20,"items":{"type":"object","properties":{"id":{"type":"string","maxLength":60},"min":{"anyOf":[{"type":"number"},{"type":"null"}]},"max":{"anyOf":[{"type":"number"},{"type":"null"}]},"color":{"type":"string","maxLength":40}},"required":["id","min","max","color"]}}},"required":["bands"]}}},"required":["visibility","order","pinning"]}},"required":["columns"]},"creators":{"type":"object","properties":{"filters":{"type":"array","maxItems":40,"items":{"type":"object","properties":{"columnId":{"type":"string","maxLength":60},"variant":{"enum":["text","number","multi-select","boolean","date"],"type":"string"},"operator":{"enum":["is","isNot","isAnyOf","isNoneOf","contains","containsAny","containsAll","gt","gte","lt","lte","between","isTrue","isFalse","isEmpty","isNotEmpty"],"type":"string"},"value":{}},"required":["columnId","variant","operator"]},"default":[]},"sort":{"type":"object","properties":{"id":{"type":"string","maxLength":60},"desc":{"type":"boolean"}},"required":["id","desc"]},"columns":{"type":"object","properties":{"visibility":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"boolean"}},"order":{"type":"array","maxItems":100,"items":{"type":"string","maxLength":60}},"pinning":{"type":"object","properties":{"left":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60}},"right":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60}}},"required":["left"]},"sizing":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"number","minimum":0,"maximum":3000}},"colorRules":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"object","properties":{"bands":{"type":"array","maxItems":20,"items":{"type":"object","properties":{"id":{"type":"string","maxLength":60},"min":{"anyOf":[{"type":"number"},{"type":"null"}]},"max":{"anyOf":[{"type":"number"},{"type":"null"}]},"color":{"type":"string","maxLength":40}},"required":["id","min","max","color"]}}},"required":["bands"]}}},"required":["visibility","order","pinning"]}},"required":["columns"]},"accounts":{"type":"object","properties":{"filters":{"type":"array","maxItems":40,"items":{"type":"object","properties":{"columnId":{"type":"string","maxLength":60},"variant":{"enum":["text","number","multi-select","boolean","date"],"type":"string"},"operator":{"enum":["is","isNot","isAnyOf","isNoneOf","contains","containsAny","containsAll","gt","gte","lt","lte","between","isTrue","isFalse","isEmpty","isNotEmpty"],"type":"string"},"value":{}},"required":["columnId","variant","operator"]},"default":[]},"sort":{"type":"object","properties":{"id":{"type":"string","maxLength":60},"desc":{"type":"boolean"}},"required":["id","desc"]},"columns":{"type":"object","properties":{"visibility":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"boolean"}},"order":{"type":"array","maxItems":100,"items":{"type":"string","maxLength":60}},"pinning":{"type":"object","properties":{"left":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60}},"right":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60}}},"required":["left"]},"sizing":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"number","minimum":0,"maximum":3000}},"colorRules":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"object","properties":{"bands":{"type":"array","maxItems":20,"items":{"type":"object","properties":{"id":{"type":"string","maxLength":60},"min":{"anyOf":[{"type":"number"},{"type":"null"}]},"max":{"anyOf":[{"type":"number"},{"type":"null"}]},"color":{"type":"string","maxLength":40}},"required":["id","min","max","color"]}}},"required":["bands"]}}},"required":["visibility","order","pinning"]}},"required":["columns"]},"videos":{"type":"object","properties":{"filters":{"type":"array","maxItems":40,"items":{"type":"object","properties":{"columnId":{"type":"string","maxLength":60},"variant":{"enum":["text","number","multi-select","boolean","date"],"type":"string"},"operator":{"enum":["is","isNot","isAnyOf","isNoneOf","contains","containsAny","containsAll","gt","gte","lt","lte","between","isTrue","isFalse","isEmpty","isNotEmpty"],"type":"string"},"value":{}},"required":["columnId","variant","operator"]},"default":[]},"sort":{"type":"object","properties":{"id":{"type":"string","maxLength":60},"desc":{"type":"boolean"}},"required":["id","desc"]},"columns":{"type":"object","properties":{"visibility":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"boolean"}},"order":{"type":"array","maxItems":100,"items":{"type":"string","maxLength":60}},"pinning":{"type":"object","properties":{"left":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60}},"right":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60}}},"required":["left"]},"sizing":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"number","minimum":0,"maximum":3000}},"colorRules":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"object","properties":{"bands":{"type":"array","maxItems":20,"items":{"type":"object","properties":{"id":{"type":"string","maxLength":60},"min":{"anyOf":[{"type":"number"},{"type":"null"}]},"max":{"anyOf":[{"type":"number"},{"type":"null"}]},"color":{"type":"string","maxLength":40}},"required":["id","min","max","color"]}}},"required":["bands"]}}},"required":["visibility","order","pinning"]}},"required":["columns"]},"comments":{"type":"object","properties":{"filters":{"type":"array","maxItems":40,"items":{"type":"object","properties":{"columnId":{"type":"string","maxLength":60},"variant":{"enum":["text","number","multi-select","boolean","date"],"type":"string"},"operator":{"enum":["is","isNot","isAnyOf","isNoneOf","contains","containsAny","containsAll","gt","gte","lt","lte","between","isTrue","isFalse","isEmpty","isNotEmpty"],"type":"string"},"value":{}},"required":["columnId","variant","operator"]},"default":[]},"sort":{"type":"object","properties":{"id":{"type":"string","maxLength":60},"desc":{"type":"boolean"}},"required":["id","desc"]},"columns":{"type":"object","properties":{"visibility":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"boolean"}},"order":{"type":"array","maxItems":100,"items":{"type":"string","maxLength":60}},"pinning":{"type":"object","properties":{"left":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60}},"right":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60}}},"required":["left"]},"sizing":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"number","minimum":0,"maximum":3000}},"colorRules":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"object","properties":{"bands":{"type":"array","maxItems":20,"items":{"type":"object","properties":{"id":{"type":"string","maxLength":60},"min":{"anyOf":[{"type":"number"},{"type":"null"}]},"max":{"anyOf":[{"type":"number"},{"type":"null"}]},"color":{"type":"string","maxLength":40}},"required":["id","min","max","color"]}}},"required":["bands"]}}},"required":["visibility","order","pinning"]}},"required":["columns"],"default":{"filters":[],"columns":{"visibility":{},"order":[],"pinning":{"left":[]}}}}},"required":["campaigns","creators","accounts","videos"]}},"required":["version","activeTab","global","tabs"]},"isDefault":{"type":"boolean"}},"required":["scope","name","state"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/manager/views/{id}":{"patch":{"operationId":"manager.views.update","summary":"Update manager view","description":"Update the name and full manager layout state for a personal or organization-shared manager view.","tags":["Manager"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^mv_.+[\\s\\S]*$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"state":{"type":"object","properties":{"version":{"const":1},"activeTab":{"enum":["campaigns","creators","accounts","videos","comments"],"type":"string"},"global":{"type":"object","properties":{"dateRange":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"}},"required":["from","to"]},"dateRangePreset":{"type":"string"},"campaignIds":{"type":"array","items":{"type":"string","pattern":"^prj_.+[\\s\\S]*$"}},"creatorIds":{"type":"array","items":{"type":"string","pattern":"^cre_.+[\\s\\S]*$"}},"accountIds":{"type":"array","items":{"type":"string","pattern":"^acct_.+[\\s\\S]*$"}},"platforms":{"type":"array","items":{"enum":["youtube","tiktok","instagram","snapchat","facebook","threads","twitter"],"type":"string"}},"q":{"type":"string","maxLength":200},"statusIn":{"type":"array","items":{"enum":["active","inactive"],"type":"string"}}}},"tabs":{"type":"object","properties":{"campaigns":{"type":"object","properties":{"filters":{"type":"array","maxItems":40,"items":{"type":"object","properties":{"columnId":{"type":"string","maxLength":60},"variant":{"enum":["text","number","multi-select","boolean","date"],"type":"string"},"operator":{"enum":["is","isNot","isAnyOf","isNoneOf","contains","containsAny","containsAll","gt","gte","lt","lte","between","isTrue","isFalse","isEmpty","isNotEmpty"],"type":"string"},"value":{}},"required":["columnId","variant","operator"]},"default":[]},"sort":{"type":"object","properties":{"id":{"type":"string","maxLength":60},"desc":{"type":"boolean"}},"required":["id","desc"]},"columns":{"type":"object","properties":{"visibility":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"boolean"}},"order":{"type":"array","maxItems":100,"items":{"type":"string","maxLength":60}},"pinning":{"type":"object","properties":{"left":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60}},"right":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60}}},"required":["left"]},"sizing":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"number","minimum":0,"maximum":3000}},"colorRules":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"object","properties":{"bands":{"type":"array","maxItems":20,"items":{"type":"object","properties":{"id":{"type":"string","maxLength":60},"min":{"anyOf":[{"type":"number"},{"type":"null"}]},"max":{"anyOf":[{"type":"number"},{"type":"null"}]},"color":{"type":"string","maxLength":40}},"required":["id","min","max","color"]}}},"required":["bands"]}}},"required":["visibility","order","pinning"]}},"required":["columns"]},"creators":{"type":"object","properties":{"filters":{"type":"array","maxItems":40,"items":{"type":"object","properties":{"columnId":{"type":"string","maxLength":60},"variant":{"enum":["text","number","multi-select","boolean","date"],"type":"string"},"operator":{"enum":["is","isNot","isAnyOf","isNoneOf","contains","containsAny","containsAll","gt","gte","lt","lte","between","isTrue","isFalse","isEmpty","isNotEmpty"],"type":"string"},"value":{}},"required":["columnId","variant","operator"]},"default":[]},"sort":{"type":"object","properties":{"id":{"type":"string","maxLength":60},"desc":{"type":"boolean"}},"required":["id","desc"]},"columns":{"type":"object","properties":{"visibility":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"boolean"}},"order":{"type":"array","maxItems":100,"items":{"type":"string","maxLength":60}},"pinning":{"type":"object","properties":{"left":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60}},"right":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60}}},"required":["left"]},"sizing":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"number","minimum":0,"maximum":3000}},"colorRules":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"object","properties":{"bands":{"type":"array","maxItems":20,"items":{"type":"object","properties":{"id":{"type":"string","maxLength":60},"min":{"anyOf":[{"type":"number"},{"type":"null"}]},"max":{"anyOf":[{"type":"number"},{"type":"null"}]},"color":{"type":"string","maxLength":40}},"required":["id","min","max","color"]}}},"required":["bands"]}}},"required":["visibility","order","pinning"]}},"required":["columns"]},"accounts":{"type":"object","properties":{"filters":{"type":"array","maxItems":40,"items":{"type":"object","properties":{"columnId":{"type":"string","maxLength":60},"variant":{"enum":["text","number","multi-select","boolean","date"],"type":"string"},"operator":{"enum":["is","isNot","isAnyOf","isNoneOf","contains","containsAny","containsAll","gt","gte","lt","lte","between","isTrue","isFalse","isEmpty","isNotEmpty"],"type":"string"},"value":{}},"required":["columnId","variant","operator"]},"default":[]},"sort":{"type":"object","properties":{"id":{"type":"string","maxLength":60},"desc":{"type":"boolean"}},"required":["id","desc"]},"columns":{"type":"object","properties":{"visibility":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"boolean"}},"order":{"type":"array","maxItems":100,"items":{"type":"string","maxLength":60}},"pinning":{"type":"object","properties":{"left":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60}},"right":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60}}},"required":["left"]},"sizing":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"number","minimum":0,"maximum":3000}},"colorRules":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"object","properties":{"bands":{"type":"array","maxItems":20,"items":{"type":"object","properties":{"id":{"type":"string","maxLength":60},"min":{"anyOf":[{"type":"number"},{"type":"null"}]},"max":{"anyOf":[{"type":"number"},{"type":"null"}]},"color":{"type":"string","maxLength":40}},"required":["id","min","max","color"]}}},"required":["bands"]}}},"required":["visibility","order","pinning"]}},"required":["columns"]},"videos":{"type":"object","properties":{"filters":{"type":"array","maxItems":40,"items":{"type":"object","properties":{"columnId":{"type":"string","maxLength":60},"variant":{"enum":["text","number","multi-select","boolean","date"],"type":"string"},"operator":{"enum":["is","isNot","isAnyOf","isNoneOf","contains","containsAny","containsAll","gt","gte","lt","lte","between","isTrue","isFalse","isEmpty","isNotEmpty"],"type":"string"},"value":{}},"required":["columnId","variant","operator"]},"default":[]},"sort":{"type":"object","properties":{"id":{"type":"string","maxLength":60},"desc":{"type":"boolean"}},"required":["id","desc"]},"columns":{"type":"object","properties":{"visibility":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"boolean"}},"order":{"type":"array","maxItems":100,"items":{"type":"string","maxLength":60}},"pinning":{"type":"object","properties":{"left":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60}},"right":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60}}},"required":["left"]},"sizing":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"number","minimum":0,"maximum":3000}},"colorRules":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"object","properties":{"bands":{"type":"array","maxItems":20,"items":{"type":"object","properties":{"id":{"type":"string","maxLength":60},"min":{"anyOf":[{"type":"number"},{"type":"null"}]},"max":{"anyOf":[{"type":"number"},{"type":"null"}]},"color":{"type":"string","maxLength":40}},"required":["id","min","max","color"]}}},"required":["bands"]}}},"required":["visibility","order","pinning"]}},"required":["columns"]},"comments":{"type":"object","properties":{"filters":{"type":"array","maxItems":40,"items":{"type":"object","properties":{"columnId":{"type":"string","maxLength":60},"variant":{"enum":["text","number","multi-select","boolean","date"],"type":"string"},"operator":{"enum":["is","isNot","isAnyOf","isNoneOf","contains","containsAny","containsAll","gt","gte","lt","lte","between","isTrue","isFalse","isEmpty","isNotEmpty"],"type":"string"},"value":{}},"required":["columnId","variant","operator"]},"default":[]},"sort":{"type":"object","properties":{"id":{"type":"string","maxLength":60},"desc":{"type":"boolean"}},"required":["id","desc"]},"columns":{"type":"object","properties":{"visibility":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"boolean"}},"order":{"type":"array","maxItems":100,"items":{"type":"string","maxLength":60}},"pinning":{"type":"object","properties":{"left":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60}},"right":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60}}},"required":["left"]},"sizing":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"number","minimum":0,"maximum":3000}},"colorRules":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"object","properties":{"bands":{"type":"array","maxItems":20,"items":{"type":"object","properties":{"id":{"type":"string","maxLength":60},"min":{"anyOf":[{"type":"number"},{"type":"null"}]},"max":{"anyOf":[{"type":"number"},{"type":"null"}]},"color":{"type":"string","maxLength":40}},"required":["id","min","max","color"]}}},"required":["bands"]}}},"required":["visibility","order","pinning"]}},"required":["columns"],"default":{"filters":[],"columns":{"visibility":{},"order":[],"pinning":{"left":[]}}}}},"required":["campaigns","creators","accounts","videos"]}},"required":["version","activeTab","global","tabs"]}},"required":["name","state"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}},"delete":{"operationId":"manager.views.delete","summary":"Delete manager view","description":"Delete a personal or organization-shared manager view.","tags":["Manager"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^mv_.+[\\s\\S]*$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}},"/manager/views/{id}/default":{"post":{"operationId":"manager.views.setDefault","summary":"Set manager view default status","description":"Mark a personal or organization-shared manager view as default or remove its default status.","tags":["Manager"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^mv_.+[\\s\\S]*$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"isDefault":{"type":"boolean"}},"required":["isDefault"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{},{"not":{}}]}}}}}}}}}