{"swagger":"2.0","info":{"title":"Inside Ad API Documentation V2 (AI-Optimized)","description":"AI-ready OpenAPI specifications for V2 endpoints.\n\nAI agents (recommended): authenticate via OAuth 2.0 (Authorization Code + PKCE, dynamic client registration — no manual key). Send `Authorization: Bearer <access_token>`; the userId is derived from the token, so the `userId` query param is not required. See /auth.md for the full flow, or use the MCP server at /api/mcp.\n\nHumans/scripts: supply a manual apiKey in the authorization header. Format: `token <apiKey>`.","version":"2.0.0"},"definitions":{},"paths":{"/v2/campaign/update":{"post":{"description":"Update fields for one or more ads, targeted by campaignId.","tags":["v2"],"parameters":[{"type":"number","description":"userId owner of the campaigns","required":true,"in":"query","name":"userId"},{"type":"number","description":"campaignId","required":true,"in":"query","name":"campaignId"},{"name":"body","in":"body","description":"Container for updatable ad parameters","schema":{"type":"object","description":"Container for updatable ad parameters","properties":{"category":{"type":"string","description":"Ad category slug (e.g. \"humor\", \"education\") — a canonical slug, not a numeric index."},"targetCountries":{"type":"string","description":"JSON array of target countries"},"targetSubdivisions":{"type":"string","description":"JSON array of target regions/subdivisions"},"targetLanguages":{"type":"string","description":"JSON array of target languages"},"targetCategories":{"type":"string","description":"JSON array of target channels categories"},"targetKeywords":{"type":"string","description":"JSON array of target inclusion keywords"},"excludedKeywords":{"type":"string","description":"JSON array of excluded keywords"},"statusUser":{"type":"string","description":"User-facing operational status (a string, not a number), e.g. 'onModeration' to submit/launch, 'onHold' to pause. Only transitions valid for the ad's current state are applied; others are silently ignored."},"title":{"type":"string","description":"Ad inner system layout title"},"languageCode":{"type":"string","description":"General language locale code"},"mWeeklyBudget":{"type":"number","description":"Weekly budget limit threshold"},"body":{"type":"string","description":"Main content raw message body text"},"link":{"type":"string","description":"Target click URL redirect link"},"bidCPF":{"type":"number","description":"Cost Per Follower target bid limit value"},"bidCPC":{"type":"number","description":"Cost Per Click target bid limit value"},"bidCPA":{"type":"number","description":"Cost Per Action target bid limit value"},"bidCPC_t2":{"type":"number","description":"Tier-2 (mid GEO) cost-per-click override, milli-USD. 0/omit = use avgBidCPC_t2 (see that ad field for the current value)."},"bidCPC_t3":{"type":"number","description":"Tier-3 (budget GEO, e.g. India) cost-per-click override, milli-USD. 0/omit = use avgBidCPC_t3 (see that ad field for the current value)."},"bidCPF_t2":{"type":"number","description":"Tier-2 cost-per-follower override, milli-USD. 0/omit = use avgBidCPF_t2 (see that ad field for the current value)."},"bidCPF_t3":{"type":"number","description":"Tier-3 cost-per-follower override, milli-USD. 0/omit = use avgBidCPF_t3 (see that ad field for the current value)."},"bidCPA_t2":{"type":"number","description":"Tier-2 cost-per-action override, milli-USD. 0/omit = use avgBidCPA_t2 (see that ad field for the current value)."},"bidCPA_t3":{"type":"number","description":"Tier-3 cost-per-action override, milli-USD. 0/omit = use avgBidCPA_t3 (see that ad field for the current value)."},"bidType":{"type":"string","description":"Type of bidding configuration structure"},"filename":{"type":"string","description":"Attached media assets disk location path filename"},"auto":{"type":"number","description":"Automation control engine flag"}}}}],"security":[{"OAuth2":["ads:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"updatedFields":{"type":"array","items":{"type":"string"}},"ads":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"channelId":{"type":"number"},"createdAt":{"type":"number","description":"Timestamp"},"sendToModerationDate":{"type":"number","description":"Timestamp"},"userId":{"type":"number"},"title":{"type":"string"},"campaignTitle":{"type":"string"},"statusUser":{"type":"string"},"statusUserOriginal":{"type":"string","description":"Raw statusUser column before virtual status calculation."},"possibleStatusString":{"type":"string"},"category":{"type":"string"},"languageCode":{"type":"string"},"targetCountries":{"type":"string"},"targetSubdivisions":{"type":"string"},"targetKeywords":{"type":"string"},"excludedKeywords":{"type":"string"},"targetCategories":{"type":"string"},"targetLanguages":{"type":"string"},"needTranslate":{"type":"number","nullable":true,"description":"Разрешён ли автоперевод креатива под язык канала. null — рекламодатель галочку не трогал, 0 — снял, 1 — поставил."},"moderated":{"type":"number"},"moderatedReason":{"type":"number","description":"Причина отклонения, описание находится в словаре"},"rejectComment":{"type":"string","nullable":true,"description":"Free-text moderator comment left when rejecting the ad, max 100 chars"},"moderatedDate":{"type":"number","description":"Timestamp в миллисекундах"},"mWeeklyBudget":{"type":"number","description":"Weekly spend cap, in milli-USD ($20 = 1000) — divide by 1000 for USD; 0 = no cap"},"mDailyBudget":{"type":"number","description":"Daily spend cap, in milli-USD ($20 = 1000) — divide by 1000 for USD; 0 = no cap"},"statsViews":{"type":"number"},"statsMembers":{"type":"number"},"statsPosts":{"type":"number"},"statsClicks":{"type":"number"},"statsCost":{"type":"number","description":"Total spend to date, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"statsActions":{"type":"number"},"readOnly":{"type":"number"},"unsub3D":{"type":"number"},"adType":{"type":"string"},"adMode":{"type":"string","aiVisible":false},"costType":{"type":"string","aiVisible":false},"sourceType":{"type":"string","aiVisible":false},"clickGateAdIds":{"type":"string","aiVisible":false},"clickGateCampaignIds":{"type":"string","aiVisible":false},"body":{"type":"string"},"link":{"type":"string"},"filename":{"type":"string"},"text":{"type":"string","aiVisible":false},"entities":{"type":"string","aiVisible":false},"caption":{"type":"string","aiVisible":false},"captionEntities":{"type":"string","aiVisible":false},"removed":{"type":"number","aiVisible":false},"bidCPC":{"type":"number","description":"Bid per click, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"bidCPF":{"type":"number","description":"Bid per 1000 views (CPM-like), in milli-USD ($1 = 1000) — divide by 1000 for USD"},"bidCPA":{"type":"number","description":"Bid per conversion/action, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"bidCPC_t2":{"type":"number","description":"Tier 2 CPC override, milli-USD. 0/unset = use avgBidCPC_t2 (this tier's own average), NOT base bidCPC."},"bidCPC_t3":{"type":"number","description":"Tier 3 CPC override, milli-USD. 0/unset = use avgBidCPC_t3 (this tier's own average), NOT base bidCPC."},"bidCPF_t2":{"type":"number","description":"Tier 2 CPF override, milli-USD. 0/unset = use avgBidCPF_t2 (this tier's own average), NOT base bidCPF."},"bidCPF_t3":{"type":"number","description":"Tier 3 CPF override, milli-USD. 0/unset = use avgBidCPF_t3 (this tier's own average), NOT base bidCPF."},"bidCPA_t2":{"type":"number","description":"Tier 2 CPA override, milli-USD. 0/unset = use avgBidCPA_t2 (this tier's own average), NOT base bidCPA."},"bidCPA_t3":{"type":"number","description":"Tier 3 CPA override, milli-USD. 0/unset = use avgBidCPA_t3 (this tier's own average), NOT base bidCPA."},"onlyCross":{"type":"number","aiVisible":false},"auto":{"type":"number"},"autoMode":{"type":"string","aiVisible":false},"isVPN":{"type":"number","aiVisible":false},"isTrade":{"type":"number","aiVisible":false},"bidType":{"type":"string"},"teaserAdId":{"type":"number","aiVisible":false},"campaignId":{"type":"number"},"bidStrategy":{"type":"string","aiVisible":false},"minBidCPC":{"type":"number","description":"Tier 1 / base CPC floor, milli-USD."},"avgBidCPC":{"type":"number","description":"Tier 1 / base CPC current market average, milli-USD."},"maxBidCPC":{"type":"number","description":"Tier 1 / base CPC ceiling, milli-USD."},"minBidCPF":{"type":"number","description":"Tier 1 / base CPF floor, milli-USD."},"avgBidCPF":{"type":"number","description":"Tier 1 / base CPF current market average, milli-USD."},"maxBidCPF":{"type":"number","description":"Tier 1 / base CPF ceiling, milli-USD."},"minBidCPA":{"type":"number","description":"Tier 1 / base CPA floor, milli-USD."},"avgBidCPA":{"type":"number","description":"Tier 1 / base CPA current market average, milli-USD."},"maxBidCPA":{"type":"number","description":"Tier 1 / base CPA ceiling, milli-USD."},"minBidCPC_t2":{"type":"number","description":"Tier 2 CPC floor, milli-USD."},"avgBidCPC_t2":{"type":"number","description":"Tier 2 CPC current market average, milli-USD — what bidCPC_t2=0/unset actually charges."},"maxBidCPC_t2":{"type":"number","description":"Tier 2 CPC ceiling, milli-USD."},"minBidCPC_t3":{"type":"number","description":"Tier 3 (budget GEO, e.g. India) CPC floor, milli-USD."},"avgBidCPC_t3":{"type":"number","description":"Tier 3 CPC current market average, milli-USD — what bidCPC_t3=0/unset actually charges."},"maxBidCPC_t3":{"type":"number","description":"Tier 3 CPC ceiling, milli-USD."},"minBidCPF_t2":{"type":"number","description":"Tier 2 CPF floor, milli-USD."},"avgBidCPF_t2":{"type":"number","description":"Tier 2 CPF current market average, milli-USD — what bidCPF_t2=0/unset actually charges."},"maxBidCPF_t2":{"type":"number","description":"Tier 2 CPF ceiling, milli-USD."},"minBidCPF_t3":{"type":"number","description":"Tier 3 CPF floor, milli-USD."},"avgBidCPF_t3":{"type":"number","description":"Tier 3 CPF current market average, milli-USD — what bidCPF_t3=0/unset actually charges."},"maxBidCPF_t3":{"type":"number","description":"Tier 3 CPF ceiling, milli-USD."},"minBidCPA_t2":{"type":"number","description":"Tier 2 CPA floor, milli-USD."},"avgBidCPA_t2":{"type":"number","description":"Tier 2 CPA current market average, milli-USD — what bidCPA_t2=0/unset actually charges."},"maxBidCPA_t2":{"type":"number","description":"Tier 2 CPA ceiling, milli-USD."},"minBidCPA_t3":{"type":"number","description":"Tier 3 CPA floor, milli-USD."},"avgBidCPA_t3":{"type":"number","description":"Tier 3 CPA current market average, milli-USD — what bidCPA_t3=0/unset actually charges."},"maxBidCPA_t3":{"type":"number","description":"Tier 3 CPA ceiling, milli-USD."},"sourceTitle":{"type":"string","aiVisible":false},"sourceAvatarSmall":{"type":"string","aiVisible":false},"newId":{"type":"number","aiVisible":false},"oldId":{"type":"number","aiVisible":false},"koefOfferConversion":{"type":"number","aiVisible":false},"edited":{"type":"number","aiVisible":false}},"required":["id","channelId","title","statusUser","possibleStatusString","category","languageCode","targetCountries","targetSubdivisions","targetKeywords","excludedKeywords","targetCategories","targetLanguages","moderated","statsViews","statsMembers","removed"]}}}}}}}},"/v2/campaign/list":{"get":{"description":"List the authenticated user's advertising campaigns (ads). For AI agents returns a COMPACT index (adId, campaignId, title, status, budget) — call get_campaign for full details. REST returns full objects.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"}],"security":[{"OAuth2":["ads:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"ads":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"channelId":{"type":"number"},"createdAt":{"type":"number","description":"Timestamp"},"sendToModerationDate":{"type":"number","description":"Timestamp"},"userId":{"type":"number"},"title":{"type":"string"},"campaignTitle":{"type":"string"},"statusUser":{"type":"string"},"statusUserOriginal":{"type":"string","description":"Raw statusUser column before virtual status calculation."},"possibleStatusString":{"type":"string"},"category":{"type":"string"},"languageCode":{"type":"string"},"targetCountries":{"type":"string"},"targetSubdivisions":{"type":"string"},"targetKeywords":{"type":"string"},"excludedKeywords":{"type":"string"},"targetCategories":{"type":"string"},"targetLanguages":{"type":"string"},"needTranslate":{"type":"number","nullable":true,"description":"Разрешён ли автоперевод креатива под язык канала. null — рекламодатель галочку не трогал, 0 — снял, 1 — поставил."},"moderated":{"type":"number"},"moderatedReason":{"type":"number","description":"Причина отклонения, описание находится в словаре"},"rejectComment":{"type":"string","nullable":true,"description":"Free-text moderator comment left when rejecting the ad, max 100 chars"},"moderatedDate":{"type":"number","description":"Timestamp в миллисекундах"},"mWeeklyBudget":{"type":"number","description":"Weekly spend cap, in milli-USD ($20 = 1000) — divide by 1000 for USD; 0 = no cap"},"mDailyBudget":{"type":"number","description":"Daily spend cap, in milli-USD ($20 = 1000) — divide by 1000 for USD; 0 = no cap"},"statsViews":{"type":"number"},"statsMembers":{"type":"number"},"statsPosts":{"type":"number"},"statsClicks":{"type":"number"},"statsCost":{"type":"number","description":"Total spend to date, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"statsActions":{"type":"number"},"readOnly":{"type":"number"},"unsub3D":{"type":"number"},"adType":{"type":"string"},"adMode":{"type":"string","aiVisible":false},"costType":{"type":"string","aiVisible":false},"sourceType":{"type":"string","aiVisible":false},"clickGateAdIds":{"type":"string","aiVisible":false},"clickGateCampaignIds":{"type":"string","aiVisible":false},"body":{"type":"string"},"link":{"type":"string"},"filename":{"type":"string"},"text":{"type":"string","aiVisible":false},"entities":{"type":"string","aiVisible":false},"caption":{"type":"string","aiVisible":false},"captionEntities":{"type":"string","aiVisible":false},"removed":{"type":"number","aiVisible":false},"bidCPC":{"type":"number","description":"Bid per click, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"bidCPF":{"type":"number","description":"Bid per 1000 views (CPM-like), in milli-USD ($1 = 1000) — divide by 1000 for USD"},"bidCPA":{"type":"number","description":"Bid per conversion/action, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"bidCPC_t2":{"type":"number","description":"Tier 2 CPC override, milli-USD. 0/unset = use avgBidCPC_t2 (this tier's own average), NOT base bidCPC."},"bidCPC_t3":{"type":"number","description":"Tier 3 CPC override, milli-USD. 0/unset = use avgBidCPC_t3 (this tier's own average), NOT base bidCPC."},"bidCPF_t2":{"type":"number","description":"Tier 2 CPF override, milli-USD. 0/unset = use avgBidCPF_t2 (this tier's own average), NOT base bidCPF."},"bidCPF_t3":{"type":"number","description":"Tier 3 CPF override, milli-USD. 0/unset = use avgBidCPF_t3 (this tier's own average), NOT base bidCPF."},"bidCPA_t2":{"type":"number","description":"Tier 2 CPA override, milli-USD. 0/unset = use avgBidCPA_t2 (this tier's own average), NOT base bidCPA."},"bidCPA_t3":{"type":"number","description":"Tier 3 CPA override, milli-USD. 0/unset = use avgBidCPA_t3 (this tier's own average), NOT base bidCPA."},"onlyCross":{"type":"number","aiVisible":false},"auto":{"type":"number"},"autoMode":{"type":"string","aiVisible":false},"isVPN":{"type":"number","aiVisible":false},"isTrade":{"type":"number","aiVisible":false},"bidType":{"type":"string"},"teaserAdId":{"type":"number","aiVisible":false},"campaignId":{"type":"number"},"bidStrategy":{"type":"string","aiVisible":false},"minBidCPC":{"type":"number","description":"Tier 1 / base CPC floor, milli-USD."},"avgBidCPC":{"type":"number","description":"Tier 1 / base CPC current market average, milli-USD."},"maxBidCPC":{"type":"number","description":"Tier 1 / base CPC ceiling, milli-USD."},"minBidCPF":{"type":"number","description":"Tier 1 / base CPF floor, milli-USD."},"avgBidCPF":{"type":"number","description":"Tier 1 / base CPF current market average, milli-USD."},"maxBidCPF":{"type":"number","description":"Tier 1 / base CPF ceiling, milli-USD."},"minBidCPA":{"type":"number","description":"Tier 1 / base CPA floor, milli-USD."},"avgBidCPA":{"type":"number","description":"Tier 1 / base CPA current market average, milli-USD."},"maxBidCPA":{"type":"number","description":"Tier 1 / base CPA ceiling, milli-USD."},"minBidCPC_t2":{"type":"number","description":"Tier 2 CPC floor, milli-USD."},"avgBidCPC_t2":{"type":"number","description":"Tier 2 CPC current market average, milli-USD — what bidCPC_t2=0/unset actually charges."},"maxBidCPC_t2":{"type":"number","description":"Tier 2 CPC ceiling, milli-USD."},"minBidCPC_t3":{"type":"number","description":"Tier 3 (budget GEO, e.g. India) CPC floor, milli-USD."},"avgBidCPC_t3":{"type":"number","description":"Tier 3 CPC current market average, milli-USD — what bidCPC_t3=0/unset actually charges."},"maxBidCPC_t3":{"type":"number","description":"Tier 3 CPC ceiling, milli-USD."},"minBidCPF_t2":{"type":"number","description":"Tier 2 CPF floor, milli-USD."},"avgBidCPF_t2":{"type":"number","description":"Tier 2 CPF current market average, milli-USD — what bidCPF_t2=0/unset actually charges."},"maxBidCPF_t2":{"type":"number","description":"Tier 2 CPF ceiling, milli-USD."},"minBidCPF_t3":{"type":"number","description":"Tier 3 CPF floor, milli-USD."},"avgBidCPF_t3":{"type":"number","description":"Tier 3 CPF current market average, milli-USD — what bidCPF_t3=0/unset actually charges."},"maxBidCPF_t3":{"type":"number","description":"Tier 3 CPF ceiling, milli-USD."},"minBidCPA_t2":{"type":"number","description":"Tier 2 CPA floor, milli-USD."},"avgBidCPA_t2":{"type":"number","description":"Tier 2 CPA current market average, milli-USD — what bidCPA_t2=0/unset actually charges."},"maxBidCPA_t2":{"type":"number","description":"Tier 2 CPA ceiling, milli-USD."},"minBidCPA_t3":{"type":"number","description":"Tier 3 CPA floor, milli-USD."},"avgBidCPA_t3":{"type":"number","description":"Tier 3 CPA current market average, milli-USD — what bidCPA_t3=0/unset actually charges."},"maxBidCPA_t3":{"type":"number","description":"Tier 3 CPA ceiling, milli-USD."},"sourceTitle":{"type":"string","aiVisible":false},"sourceAvatarSmall":{"type":"string","aiVisible":false},"newId":{"type":"number","aiVisible":false},"oldId":{"type":"number","aiVisible":false},"koefOfferConversion":{"type":"number","aiVisible":false},"edited":{"type":"number","aiVisible":false}},"required":["id","channelId","title","statusUser","possibleStatusString","category","languageCode","targetCountries","targetSubdivisions","targetKeywords","excludedKeywords","targetCategories","targetLanguages","moderated","statsViews","statsMembers","removed"]}}}}}}}},"/v2/campaign/get":{"get":{"description":"Get ONE of the authenticated user's campaigns by campaignId — its ads as FULL ad objects (many more fields than the compact list_campaigns index).","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"},{"type":"number","description":"Target campaign ID","required":true,"in":"query","name":"campaignId"}],"security":[{"OAuth2":["ads:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"ads":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"channelId":{"type":"number"},"createdAt":{"type":"number","description":"Timestamp"},"sendToModerationDate":{"type":"number","description":"Timestamp"},"userId":{"type":"number"},"title":{"type":"string"},"campaignTitle":{"type":"string"},"statusUser":{"type":"string"},"statusUserOriginal":{"type":"string","description":"Raw statusUser column before virtual status calculation."},"possibleStatusString":{"type":"string"},"category":{"type":"string"},"languageCode":{"type":"string"},"targetCountries":{"type":"string"},"targetSubdivisions":{"type":"string"},"targetKeywords":{"type":"string"},"excludedKeywords":{"type":"string"},"targetCategories":{"type":"string"},"targetLanguages":{"type":"string"},"needTranslate":{"type":"number","nullable":true,"description":"Разрешён ли автоперевод креатива под язык канала. null — рекламодатель галочку не трогал, 0 — снял, 1 — поставил."},"moderated":{"type":"number"},"moderatedReason":{"type":"number","description":"Причина отклонения, описание находится в словаре"},"rejectComment":{"type":"string","nullable":true,"description":"Free-text moderator comment left when rejecting the ad, max 100 chars"},"moderatedDate":{"type":"number","description":"Timestamp в миллисекундах"},"mWeeklyBudget":{"type":"number","description":"Weekly spend cap, in milli-USD ($20 = 1000) — divide by 1000 for USD; 0 = no cap"},"mDailyBudget":{"type":"number","description":"Daily spend cap, in milli-USD ($20 = 1000) — divide by 1000 for USD; 0 = no cap"},"statsViews":{"type":"number"},"statsMembers":{"type":"number"},"statsPosts":{"type":"number"},"statsClicks":{"type":"number"},"statsCost":{"type":"number","description":"Total spend to date, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"statsActions":{"type":"number"},"readOnly":{"type":"number"},"unsub3D":{"type":"number"},"adType":{"type":"string"},"adMode":{"type":"string","aiVisible":false},"costType":{"type":"string","aiVisible":false},"sourceType":{"type":"string","aiVisible":false},"clickGateAdIds":{"type":"string","aiVisible":false},"clickGateCampaignIds":{"type":"string","aiVisible":false},"body":{"type":"string"},"link":{"type":"string"},"filename":{"type":"string"},"text":{"type":"string","aiVisible":false},"entities":{"type":"string","aiVisible":false},"caption":{"type":"string","aiVisible":false},"captionEntities":{"type":"string","aiVisible":false},"removed":{"type":"number","aiVisible":false},"bidCPC":{"type":"number","description":"Bid per click, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"bidCPF":{"type":"number","description":"Bid per 1000 views (CPM-like), in milli-USD ($1 = 1000) — divide by 1000 for USD"},"bidCPA":{"type":"number","description":"Bid per conversion/action, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"bidCPC_t2":{"type":"number","description":"Tier 2 CPC override, milli-USD. 0/unset = use avgBidCPC_t2 (this tier's own average), NOT base bidCPC."},"bidCPC_t3":{"type":"number","description":"Tier 3 CPC override, milli-USD. 0/unset = use avgBidCPC_t3 (this tier's own average), NOT base bidCPC."},"bidCPF_t2":{"type":"number","description":"Tier 2 CPF override, milli-USD. 0/unset = use avgBidCPF_t2 (this tier's own average), NOT base bidCPF."},"bidCPF_t3":{"type":"number","description":"Tier 3 CPF override, milli-USD. 0/unset = use avgBidCPF_t3 (this tier's own average), NOT base bidCPF."},"bidCPA_t2":{"type":"number","description":"Tier 2 CPA override, milli-USD. 0/unset = use avgBidCPA_t2 (this tier's own average), NOT base bidCPA."},"bidCPA_t3":{"type":"number","description":"Tier 3 CPA override, milli-USD. 0/unset = use avgBidCPA_t3 (this tier's own average), NOT base bidCPA."},"onlyCross":{"type":"number","aiVisible":false},"auto":{"type":"number"},"autoMode":{"type":"string","aiVisible":false},"isVPN":{"type":"number","aiVisible":false},"isTrade":{"type":"number","aiVisible":false},"bidType":{"type":"string"},"teaserAdId":{"type":"number","aiVisible":false},"campaignId":{"type":"number"},"bidStrategy":{"type":"string","aiVisible":false},"minBidCPC":{"type":"number","description":"Tier 1 / base CPC floor, milli-USD."},"avgBidCPC":{"type":"number","description":"Tier 1 / base CPC current market average, milli-USD."},"maxBidCPC":{"type":"number","description":"Tier 1 / base CPC ceiling, milli-USD."},"minBidCPF":{"type":"number","description":"Tier 1 / base CPF floor, milli-USD."},"avgBidCPF":{"type":"number","description":"Tier 1 / base CPF current market average, milli-USD."},"maxBidCPF":{"type":"number","description":"Tier 1 / base CPF ceiling, milli-USD."},"minBidCPA":{"type":"number","description":"Tier 1 / base CPA floor, milli-USD."},"avgBidCPA":{"type":"number","description":"Tier 1 / base CPA current market average, milli-USD."},"maxBidCPA":{"type":"number","description":"Tier 1 / base CPA ceiling, milli-USD."},"minBidCPC_t2":{"type":"number","description":"Tier 2 CPC floor, milli-USD."},"avgBidCPC_t2":{"type":"number","description":"Tier 2 CPC current market average, milli-USD — what bidCPC_t2=0/unset actually charges."},"maxBidCPC_t2":{"type":"number","description":"Tier 2 CPC ceiling, milli-USD."},"minBidCPC_t3":{"type":"number","description":"Tier 3 (budget GEO, e.g. India) CPC floor, milli-USD."},"avgBidCPC_t3":{"type":"number","description":"Tier 3 CPC current market average, milli-USD — what bidCPC_t3=0/unset actually charges."},"maxBidCPC_t3":{"type":"number","description":"Tier 3 CPC ceiling, milli-USD."},"minBidCPF_t2":{"type":"number","description":"Tier 2 CPF floor, milli-USD."},"avgBidCPF_t2":{"type":"number","description":"Tier 2 CPF current market average, milli-USD — what bidCPF_t2=0/unset actually charges."},"maxBidCPF_t2":{"type":"number","description":"Tier 2 CPF ceiling, milli-USD."},"minBidCPF_t3":{"type":"number","description":"Tier 3 CPF floor, milli-USD."},"avgBidCPF_t3":{"type":"number","description":"Tier 3 CPF current market average, milli-USD — what bidCPF_t3=0/unset actually charges."},"maxBidCPF_t3":{"type":"number","description":"Tier 3 CPF ceiling, milli-USD."},"minBidCPA_t2":{"type":"number","description":"Tier 2 CPA floor, milli-USD."},"avgBidCPA_t2":{"type":"number","description":"Tier 2 CPA current market average, milli-USD — what bidCPA_t2=0/unset actually charges."},"maxBidCPA_t2":{"type":"number","description":"Tier 2 CPA ceiling, milli-USD."},"minBidCPA_t3":{"type":"number","description":"Tier 3 CPA floor, milli-USD."},"avgBidCPA_t3":{"type":"number","description":"Tier 3 CPA current market average, milli-USD — what bidCPA_t3=0/unset actually charges."},"maxBidCPA_t3":{"type":"number","description":"Tier 3 CPA ceiling, milli-USD."},"sourceTitle":{"type":"string","aiVisible":false},"sourceAvatarSmall":{"type":"string","aiVisible":false},"newId":{"type":"number","aiVisible":false},"oldId":{"type":"number","aiVisible":false},"koefOfferConversion":{"type":"number","aiVisible":false},"edited":{"type":"number","aiVisible":false}},"required":["id","channelId","title","statusUser","possibleStatusString","category","languageCode","targetCountries","targetSubdivisions","targetKeywords","excludedKeywords","targetCategories","targetLanguages","moderated","statsViews","statsMembers","removed"]}}}}}}}},"/v2/campaign/create":{"post":{"description":"Create a campaign and generate ad assets from a landing-page URL on behalf of the user. Returns the new campaignId and generated ads.","tags":["v2"],"parameters":[{"type":"number","description":"userId owner executing the operation","required":true,"in":"query","name":"userId"},{"type":"number","description":"campaignId","required":false,"in":"query","name":"campaignId"},{"name":"body","in":"body","schema":{"type":"object","properties":{"channelId":{"type":"number","default":0},"url":{"type":"string"},"languageCode":{"type":"string"},"statusUser":{"type":"string","default":"hidden"},"count":{"type":"number","default":3},"auto":{"type":"number","default":1},"genTeaser":{"type":"number","default":1},"disableGenerate":{"type":"number","default":0},"isTrade":{"type":"number","default":0},"manualTrigger":{"type":"number","default":0},"isAi":{"type":"number","default":1}}}}],"security":[{"OAuth2":["ads:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"adGenCampaignId":{"type":"number"},"adGenPosts":{"type":"array","items":{"type":"object","additionalProperties":true}},"adGenTeasers":{"type":"array","items":{"type":"object","additionalProperties":true}},"urlParseSuccess":{"type":"boolean"},"joinRequestNeeded":{"type":"boolean"},"allowGenerate":{"type":"boolean"},"disableGenerate":{"type":"boolean"},"ads":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"channelId":{"type":"number"},"createdAt":{"type":"number","description":"Timestamp"},"sendToModerationDate":{"type":"number","description":"Timestamp"},"userId":{"type":"number"},"title":{"type":"string"},"campaignTitle":{"type":"string"},"statusUser":{"type":"string"},"statusUserOriginal":{"type":"string","description":"Raw statusUser column before virtual status calculation."},"possibleStatusString":{"type":"string"},"category":{"type":"string"},"languageCode":{"type":"string"},"targetCountries":{"type":"string"},"targetSubdivisions":{"type":"string"},"targetKeywords":{"type":"string"},"excludedKeywords":{"type":"string"},"targetCategories":{"type":"string"},"targetLanguages":{"type":"string"},"needTranslate":{"type":"number","nullable":true,"description":"Разрешён ли автоперевод креатива под язык канала. null — рекламодатель галочку не трогал, 0 — снял, 1 — поставил."},"moderated":{"type":"number"},"moderatedReason":{"type":"number","description":"Причина отклонения, описание находится в словаре"},"rejectComment":{"type":"string","nullable":true,"description":"Free-text moderator comment left when rejecting the ad, max 100 chars"},"moderatedDate":{"type":"number","description":"Timestamp в миллисекундах"},"mWeeklyBudget":{"type":"number","description":"Weekly spend cap, in milli-USD ($20 = 1000) — divide by 1000 for USD; 0 = no cap"},"mDailyBudget":{"type":"number","description":"Daily spend cap, in milli-USD ($20 = 1000) — divide by 1000 for USD; 0 = no cap"},"statsViews":{"type":"number"},"statsMembers":{"type":"number"},"statsPosts":{"type":"number"},"statsClicks":{"type":"number"},"statsCost":{"type":"number","description":"Total spend to date, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"statsActions":{"type":"number"},"readOnly":{"type":"number"},"unsub3D":{"type":"number"},"adType":{"type":"string"},"adMode":{"type":"string","aiVisible":false},"costType":{"type":"string","aiVisible":false},"sourceType":{"type":"string","aiVisible":false},"clickGateAdIds":{"type":"string","aiVisible":false},"clickGateCampaignIds":{"type":"string","aiVisible":false},"body":{"type":"string"},"link":{"type":"string"},"filename":{"type":"string"},"text":{"type":"string","aiVisible":false},"entities":{"type":"string","aiVisible":false},"caption":{"type":"string","aiVisible":false},"captionEntities":{"type":"string","aiVisible":false},"removed":{"type":"number","aiVisible":false},"bidCPC":{"type":"number","description":"Bid per click, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"bidCPF":{"type":"number","description":"Bid per 1000 views (CPM-like), in milli-USD ($1 = 1000) — divide by 1000 for USD"},"bidCPA":{"type":"number","description":"Bid per conversion/action, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"bidCPC_t2":{"type":"number","description":"Tier 2 CPC override, milli-USD. 0/unset = use avgBidCPC_t2 (this tier's own average), NOT base bidCPC."},"bidCPC_t3":{"type":"number","description":"Tier 3 CPC override, milli-USD. 0/unset = use avgBidCPC_t3 (this tier's own average), NOT base bidCPC."},"bidCPF_t2":{"type":"number","description":"Tier 2 CPF override, milli-USD. 0/unset = use avgBidCPF_t2 (this tier's own average), NOT base bidCPF."},"bidCPF_t3":{"type":"number","description":"Tier 3 CPF override, milli-USD. 0/unset = use avgBidCPF_t3 (this tier's own average), NOT base bidCPF."},"bidCPA_t2":{"type":"number","description":"Tier 2 CPA override, milli-USD. 0/unset = use avgBidCPA_t2 (this tier's own average), NOT base bidCPA."},"bidCPA_t3":{"type":"number","description":"Tier 3 CPA override, milli-USD. 0/unset = use avgBidCPA_t3 (this tier's own average), NOT base bidCPA."},"onlyCross":{"type":"number","aiVisible":false},"auto":{"type":"number"},"autoMode":{"type":"string","aiVisible":false},"isVPN":{"type":"number","aiVisible":false},"isTrade":{"type":"number","aiVisible":false},"bidType":{"type":"string"},"teaserAdId":{"type":"number","aiVisible":false},"campaignId":{"type":"number"},"bidStrategy":{"type":"string","aiVisible":false},"minBidCPC":{"type":"number","description":"Tier 1 / base CPC floor, milli-USD."},"avgBidCPC":{"type":"number","description":"Tier 1 / base CPC current market average, milli-USD."},"maxBidCPC":{"type":"number","description":"Tier 1 / base CPC ceiling, milli-USD."},"minBidCPF":{"type":"number","description":"Tier 1 / base CPF floor, milli-USD."},"avgBidCPF":{"type":"number","description":"Tier 1 / base CPF current market average, milli-USD."},"maxBidCPF":{"type":"number","description":"Tier 1 / base CPF ceiling, milli-USD."},"minBidCPA":{"type":"number","description":"Tier 1 / base CPA floor, milli-USD."},"avgBidCPA":{"type":"number","description":"Tier 1 / base CPA current market average, milli-USD."},"maxBidCPA":{"type":"number","description":"Tier 1 / base CPA ceiling, milli-USD."},"minBidCPC_t2":{"type":"number","description":"Tier 2 CPC floor, milli-USD."},"avgBidCPC_t2":{"type":"number","description":"Tier 2 CPC current market average, milli-USD — what bidCPC_t2=0/unset actually charges."},"maxBidCPC_t2":{"type":"number","description":"Tier 2 CPC ceiling, milli-USD."},"minBidCPC_t3":{"type":"number","description":"Tier 3 (budget GEO, e.g. India) CPC floor, milli-USD."},"avgBidCPC_t3":{"type":"number","description":"Tier 3 CPC current market average, milli-USD — what bidCPC_t3=0/unset actually charges."},"maxBidCPC_t3":{"type":"number","description":"Tier 3 CPC ceiling, milli-USD."},"minBidCPF_t2":{"type":"number","description":"Tier 2 CPF floor, milli-USD."},"avgBidCPF_t2":{"type":"number","description":"Tier 2 CPF current market average, milli-USD — what bidCPF_t2=0/unset actually charges."},"maxBidCPF_t2":{"type":"number","description":"Tier 2 CPF ceiling, milli-USD."},"minBidCPF_t3":{"type":"number","description":"Tier 3 CPF floor, milli-USD."},"avgBidCPF_t3":{"type":"number","description":"Tier 3 CPF current market average, milli-USD — what bidCPF_t3=0/unset actually charges."},"maxBidCPF_t3":{"type":"number","description":"Tier 3 CPF ceiling, milli-USD."},"minBidCPA_t2":{"type":"number","description":"Tier 2 CPA floor, milli-USD."},"avgBidCPA_t2":{"type":"number","description":"Tier 2 CPA current market average, milli-USD — what bidCPA_t2=0/unset actually charges."},"maxBidCPA_t2":{"type":"number","description":"Tier 2 CPA ceiling, milli-USD."},"minBidCPA_t3":{"type":"number","description":"Tier 3 CPA floor, milli-USD."},"avgBidCPA_t3":{"type":"number","description":"Tier 3 CPA current market average, milli-USD — what bidCPA_t3=0/unset actually charges."},"maxBidCPA_t3":{"type":"number","description":"Tier 3 CPA ceiling, milli-USD."},"sourceTitle":{"type":"string","aiVisible":false},"sourceAvatarSmall":{"type":"string","aiVisible":false},"newId":{"type":"number","aiVisible":false},"oldId":{"type":"number","aiVisible":false},"koefOfferConversion":{"type":"number","aiVisible":false},"edited":{"type":"number","aiVisible":false}},"required":["id","channelId","title","statusUser","possibleStatusString","category","languageCode","targetCountries","targetSubdivisions","targetKeywords","excludedKeywords","targetCategories","targetLanguages","moderated","statsViews","statsMembers","removed"]}},"usage":{"type":"object","properties":{"userId":{"type":"integer"},"usageDate":{"type":"string","format":"date"},"currentAdsGen":{"type":"integer"},"currentAdsGenPremium":{"type":"integer"},"currentAdsGenExpensive":{"type":"integer"},"currentAdsGenVideo":{"type":"integer"},"currentAutoposts":{"type":"integer"},"currentPostsGen":{"type":"integer"},"currentPostsGenPremium":{"type":"integer"},"currentPostsGenVideo":{"type":"integer"},"currentPostsGenExpensive":{"type":"integer"},"currentAiMessages":{"type":"integer"},"planName":{"type":"string"},"maxChannels":{"type":"integer"},"maxAdsGen":{"type":"integer"},"maxAdsGenPremium":{"type":"integer"},"maxAdsGenExpensive":{"type":"integer"},"maxAdsGenVideo":{"type":"integer"},"maxAutoposts":{"type":"integer"},"maxPostsGen":{"type":"integer"},"maxPostsGenPremium":{"type":"integer"},"maxPostsGenVideo":{"type":"integer"},"maxPostsGenExpensive":{"type":"integer"},"maxAiMessages":{"type":"integer"}}},"isLimited":{"type":"boolean"}}}}}}},"/v2/stats/traffic":{"get":{"description":"Public platform-wide traffic inventory stats. Optionally filter by languageCode.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (data itself is public/platform-wide)","required":true,"in":"query","name":"userId"},{"type":"string","description":"ISO language code, e.g. 'en' or 'ru'","required":false,"in":"query","name":"languageCode"}],"security":[{"OAuth2":["stats:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"stats":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}},"/v2/stats/advertiser":{"get":{"description":"Advertiser summary stats (spend, impressions, clicks, new members, CPx) for a date range. Optionally filter by campaignId/isTrade.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"},{"type":"string","description":"Start date, format 2017-08-26","required":true,"in":"query","name":"startDate"},{"type":"string","description":"End date, format 2022-07-21","required":true,"in":"query","name":"finishDate"},{"type":"number","description":"Optional campaign filter","required":false,"in":"query","name":"campaignId"},{"type":"number","description":"0 = commercial ads, 1 = barter/trade only","required":false,"in":"query","name":"isTrade"}],"security":[{"OAuth2":["stats:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"nonce":{"type":"number"},"statsAdv":{"type":"array"}}}}}}},"/v2/stats/advertiser-ads":{"get":{"description":"Per-ad advertiser stats for a date range.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"},{"type":"string","description":"Start date, format 2017-08-26","required":true,"in":"query","name":"startDate"},{"type":"string","description":"End date, format 2022-07-21","required":true,"in":"query","name":"finishDate"},{"type":"number","description":"0 = commercial ads, 1 = barter/trade only","required":false,"in":"query","name":"isTrade"}],"security":[{"OAuth2":["stats:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"nonce":{"type":"number"},"statsAdvertiserAds":{"type":"array"}}}}}}},"/v2/stats/advertiser-channels":{"get":{"description":"Advertiser stats grouped by the publisher channels where the user's ads ran, for a date range.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"},{"type":"string","description":"Start date, format 2017-08-26","required":true,"in":"query","name":"startDate"},{"type":"string","description":"End date, format 2022-07-21","required":true,"in":"query","name":"finishDate"},{"type":"number","description":"0 = commercial ads, 1 = barter/trade only","required":false,"in":"query","name":"isTrade"}],"security":[{"OAuth2":["stats:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"nonce":{"type":"number"},"statsAdvertiserChannels":{"type":"array"}}}}}}},"/v2/stats/advertiser-history":{"get":{"description":"Advertiser daily history (time series) for a date range.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"},{"type":"string","description":"Start date, format 2017-08-26","required":true,"in":"query","name":"startDate"},{"type":"string","description":"End date, format 2022-07-21","required":true,"in":"query","name":"finishDate"},{"type":"number","description":"0 = commercial ads, 1 = barter/trade only","required":false,"in":"query","name":"isTrade"}],"security":[{"OAuth2":["stats:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"nonce":{"type":"number"},"statsAdvertiserHistory":{"type":"array"}}}}}}},"/v2/stats/channel-metrics":{"get":{"description":"The user's channel metrics (daily channel performance) with totals.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"}],"security":[{"OAuth2":["stats:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"nonce":{"type":"number"},"channelMetrics":{"type":"array","items":{"type":"object","properties":{"channelId":{"type":"string"},"platform":{"type":"string"},"members":{"type":"number"},"avgViews30D":{"type":"number"},"diffMembers":{"type":"number"},"diffAvgViews30D":{"type":"number"},"check":{"type":"object","properties":{"minPosts":{"type":"object","additionalProperties":true},"lastPostDays":{"type":"object","additionalProperties":true},"minMembers":{"type":"object","additionalProperties":true}}}},"required":["channelId"]}},"sumMetrics":{"type":"object","properties":{"members":{"type":"number"},"avgViews30D":{"type":"number"},"diffMembers":{"type":"number"},"diffAvgViews30D":{"type":"number"}},"required":["members","avgViews30D","diffMembers","diffAvgViews30D"]}}}}}}},"/v2/stats/detailed-report":{"get":{"description":"Detailed per-placement advertiser report (rows of campaign x channel with views/clicks/members).","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"},{"type":"number","description":"Max rows to return (default 100)","required":false,"in":"query","name":"limit"}],"security":[{"OAuth2":["stats:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"nonce":{"type":"number"},"report":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"date":{"type":"string"},"campaignTitle":{"type":"string"},"campaignId":{"type":"number"},"channelTitle":{"type":"string"},"views":{"type":"number"},"clicks":{"type":"number"},"members":{"type":"number"},"advertiserCps":{"type":"number"},"bid":{"type":"number"},"adType":{"type":"string"},"unqualifiedClicks":{"type":"number"},"unqualifiedMembers":{"type":"number"},"unsub3d":{"type":"number"},"reportStatus":{"type":["null","string"]}}}}}}}}}},"/v2/stats/publisher-channels":{"get":{"description":"Publisher stats grouped by the user's channels for a date range.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"},{"type":"string","description":"Start date, format 2017-08-26","required":true,"in":"query","name":"startDate"},{"type":"string","description":"End date, format 2022-07-21","required":true,"in":"query","name":"finishDate"},{"type":"number","description":"0 = commercial ads, 1 = barter/trade only","required":false,"in":"query","name":"isTrade"}],"security":[{"OAuth2":["stats:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"nonce":{"type":"number"},"statsPublisherChannels":{"type":"array"}}}}}}},"/v2/stats/publisher-history":{"get":{"description":"Publisher daily history (time series of earnings/impressions) for a date range.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"},{"type":"string","description":"Start date, format 2017-08-26","required":true,"in":"query","name":"startDate"},{"type":"string","description":"End date, format 2022-07-21","required":true,"in":"query","name":"finishDate"},{"type":"number","description":"0 = commercial ads, 1 = barter/trade only","required":false,"in":"query","name":"isTrade"}],"security":[{"OAuth2":["stats:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"nonce":{"type":"number"},"statsPublisherHistory":{"type":"array"}}}}}}},"/v2/stats/publisher-stats":{"get":{"description":"Publisher stats for a date range. Optionally filter by channelId/isTrade.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"},{"type":"string","description":"Start date, format 2017-08-26","required":true,"in":"query","name":"startDate"},{"type":"string","description":"End date, format 2022-07-21","required":true,"in":"query","name":"finishDate"},{"type":"number","description":"Optional channel filter","required":false,"in":"query","name":"channelId"},{"type":"number","description":"0 = commercial ads, 1 = barter/trade only","required":false,"in":"query","name":"isTrade"}],"security":[{"OAuth2":["stats:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"nonce":{"type":"number"},"statsPublisher":{"type":"array"}}}}}}},"/v2/stats/totals":{"get":{"description":"Platform-wide totals (public, non-personal).","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"}],"security":[{"OAuth2":["stats:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"nonce":{"type":"number"},"statsTotal":{"type":"object","properties":{"channels":{"type":"number"},"daily_active_channels":{"type":"number"},"followers":{"type":"number"},"daily_active_subscribes":{"type":"number"},"channels_isTrade":{"type":"number"},"advertisers":{"type":"number"},"publishers":{"type":"number"}},"required":["channels"]}}}}}}},"/v2/stats/trade-history":{"get":{"description":"Trade (barter) stats history by date for a date range.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"},{"type":"string","description":"Start date, format 2017-08-26","required":true,"in":"query","name":"startDate"},{"type":"string","description":"End date, format 2022-07-21","required":true,"in":"query","name":"finishDate"}],"security":[{"OAuth2":["stats:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"nonce":{"type":"number"},"statsTradeHistory":{"type":"array"}}}}}}},"/v2/profile/get":{"get":{"description":"Get the authenticated user's profile: balances, account statuses and settings.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"}],"security":[{"OAuth2":["profile:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"profile":{"type":"object","properties":{"userId":{"type":"number"},"firstName":{"type":"string"},"lastName":{"type":"string"},"mBalance":{"type":"number","description":"Spendable advertiser balance, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"mBalanceCredit":{"type":"number","description":"Credit-line balance, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"mBalanceBooked":{"type":"number","description":"Balance reserved/held by active campaigns, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"mPartnerBalance":{"type":"number","description":"Referral/partner earnings balance, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"banned":{"type":"number"},"apiKey":{"type":"string"},"country":{"type":"string"},"createdAt":{"type":"number","description":"Timestamp в миллисекундах"},"topUpBonus_StartPeriod":{"type":"number","description":"Время начала действия бонуса на пополнение"},"topUpBonus_Type":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_content":{"type":"string"},"utm_term":{"type":"string"},"yclid":{"type":"string"},"languageCode":{"type":"string"},"isFirstSession":{"type":"number","description":"1 - первый сеанс, 0 - не первый"},"fromRussia":{"type":"number","description":"1 - из России, 0 - не из России"},"enableMentions":{"type":"number","description":"1 - включены упоминания, 0 - выключены"},"startAfterModeration":{"type":"number"},"authCode":{"type":"string"},"disableAdWithoutERID":{"type":"number"},"publisherEarnings":{"type":"number","description":"Lifetime publisher earnings, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"statsClicks":{"type":"number"},"statsMembers":{"type":"number"},"statsViews":{"type":"number"},"statsClicksTrade":{"type":"number"},"statsMembersTrade":{"type":"number"},"statsViewsTrade":{"type":"number"},"allowsWriteToPm":{"type":"number"},"popupTrade":{"type":"number"},"autoApprove":{"type":"number"},"email":{"type":"string"},"emailVerified":{"type":"number"},"statsOnWelcomeScreen":{"type":"number"},"isAmbassador":{"type":"number"},"isKeyPartner":{"type":"number"},"photoUrl":{"type":"string"},"lastMessengerMessageAt":{"type":"string","format":"date-time"},"hasMessengerResponse":{"type":"number"},"is_password_set":{"type":"boolean"},"telegramId":{"type":"number","nullable":true},"actualPlanId":{"type":"number"},"actualSubscriptionId":{"type":"number"},"mode":{"type":"string"},"chatId":{"type":"number"},"mainGoal":{"type":"string"},"audienceSize":{"type":"string"},"audienceSize_members":{"type":"number"},"lastTopUpDate":{"type":"string","format":"date-time","nullable":true,"description":"Дата последнего пополнения (для попапа), null после показа"},"lastTopUpAmount":{"type":"number","nullable":true,"description":"Сумма последнего пополнения в mili-USD, null после показа"},"countReferrals":{"type":"number","description":"Сколько у пользователя рефералов (profiles.refId = userId)"},"countReferrals_30day":{"type":"number","description":"Сколько рефералов появилось за последние 30 дней"}},"required":["userId","firstName","lastName","mBalance","mPartnerBalance"],"nullable":true}}}}}}},"/v2/profile/finance":{"get":{"description":"Get the authenticated user's 30-day financial summary (earned/spent/topped-up/withdrawn, per-day + totals, today/yesterday). Amounts are already in USD.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"}],"security":[{"OAuth2":["profile:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"finance":{"type":"object","additionalProperties":true}}}}}}},"/v2/profile/transactions-trade":{"get":{"description":"The authenticated user's TRADE (barter) transactions history.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"}],"security":[{"OAuth2":["profile:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"nonce":{"type":"number"},"profile":{"type":"object","properties":{"userId":{"type":"number"},"firstName":{"type":"string"},"lastName":{"type":"string"},"mBalance":{"type":"number","description":"Spendable advertiser balance, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"mBalanceCredit":{"type":"number","description":"Credit-line balance, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"mBalanceBooked":{"type":"number","description":"Balance reserved/held by active campaigns, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"mPartnerBalance":{"type":"number","description":"Referral/partner earnings balance, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"banned":{"type":"number"},"apiKey":{"type":"string"},"country":{"type":"string"},"createdAt":{"type":"number","description":"Timestamp в миллисекундах"},"topUpBonus_StartPeriod":{"type":"number","description":"Время начала действия бонуса на пополнение"},"topUpBonus_Type":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_content":{"type":"string"},"utm_term":{"type":"string"},"yclid":{"type":"string"},"languageCode":{"type":"string"},"isFirstSession":{"type":"number","description":"1 - первый сеанс, 0 - не первый"},"fromRussia":{"type":"number","description":"1 - из России, 0 - не из России"},"enableMentions":{"type":"number","description":"1 - включены упоминания, 0 - выключены"},"startAfterModeration":{"type":"number"},"authCode":{"type":"string"},"disableAdWithoutERID":{"type":"number"},"publisherEarnings":{"type":"number","description":"Lifetime publisher earnings, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"statsClicks":{"type":"number"},"statsMembers":{"type":"number"},"statsViews":{"type":"number"},"statsClicksTrade":{"type":"number"},"statsMembersTrade":{"type":"number"},"statsViewsTrade":{"type":"number"},"allowsWriteToPm":{"type":"number"},"popupTrade":{"type":"number"},"autoApprove":{"type":"number"},"email":{"type":"string"},"emailVerified":{"type":"number"},"statsOnWelcomeScreen":{"type":"number"},"isAmbassador":{"type":"number"},"isKeyPartner":{"type":"number"},"photoUrl":{"type":"string"},"lastMessengerMessageAt":{"type":"string","format":"date-time"},"hasMessengerResponse":{"type":"number"},"is_password_set":{"type":"boolean"},"telegramId":{"type":"number","nullable":true},"actualPlanId":{"type":"number"},"actualSubscriptionId":{"type":"number"},"mode":{"type":"string"},"chatId":{"type":"number"},"mainGoal":{"type":"string"},"audienceSize":{"type":"string"},"audienceSize_members":{"type":"number"},"lastTopUpDate":{"type":"string","format":"date-time","nullable":true,"description":"Дата последнего пополнения (для попапа), null после показа"},"lastTopUpAmount":{"type":"number","nullable":true,"description":"Сумма последнего пополнения в mili-USD, null после показа"},"countReferrals":{"type":"number","description":"Сколько у пользователя рефералов (profiles.refId = userId)"},"countReferrals_30day":{"type":"number","description":"Сколько рефералов появилось за последние 30 дней"}},"required":["userId","firstName","lastName","mBalance","mPartnerBalance"]},"plan":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"task":{"type":"string"},"enabled":{"type":"boolean"},"position":{"type":"number"},"done":{"type":"boolean"},"recommended":{"type":"boolean"}}}}},"friend":{"type":"object","properties":{"userId":{"type":"number"},"firstName":{"type":"string"},"lastName":{"type":"string"}},"required":["userId","firstName","lastName"]},"readyToWithdraw":{"type":"number"},"remainingBonus":{"type":"number"},"readyToWithdrawPartners":{"type":"number"},"profitPartners":{"type":"number"},"referrals":{"type":"array"},"timezones":{"type":"array"},"amountByDate":{"type":"array"},"transactions":{"type":"array"},"transactionsTrade":{"type":"array"},"withdrawalRequests":{"type":"array"},"status":{"type":"string"},"rates":{"type":"object","properties":{"TON":{"type":"number"},"USDT":{"type":"number"},"RUB":{"type":"number"},"INR":{"type":"number"},"BDT":{"type":"number"}},"additionalProperties":{"type":"number"}},"countries":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"region":{"type":"string"}},"required":["name"]}},"languages":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},"categories":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"CPM":{"type":"number"},"CPF":{"type":"number"}},"required":["name"]}},"costRates":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"object","properties":{"CPM_adPost":{"type":"number"},"CPM_teaser":{"type":"number"},"CPF":{"type":"number"},"CPC":{"type":"number"}},"required":[]}}},"callToActions":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},"moderatedReasons":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},"buttonTypes":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},"blackListOfPublishers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"channelId":{"type":"number"},"createdAt":{"type":"number","description":"Timestamp в миллисекундах"},"title":{"type":"string"}},"required":["id","channelId"]}},"blackListOfAdvertisers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"advertiserUserId":{"type":"number"},"createdAt":{"type":"number","description":"Timestamp в миллисекундах"},"title":{"type":"string"}},"required":["id","advertiserUserId"]}},"placements":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"adId":{"type":"number"},"channelId":{"type":"number"},"messageId":{"type":"number","description":"ID сообщения в канале"},"createdAt":{"type":"number","description":"Timestamp в миллисекундах"},"removedAt":{"type":"number","description":"Timestamp в миллисекундах"},"views":{"type":"number"},"clicks":{"type":"number"},"members":{"type":"number"},"channelTitle":{"type":"string"},"channelLink":{"type":"string"},"adTitle":{"type":"string"},"adLink":{"type":"string"},"adType":{"type":"string","description":"Тип рекламы, например, adPost, teaser"},"canBlacklistPub":{"type":"boolean","description":"Можно ли добавить в черный список паблишера"},"canBlacklistAdv":{"type":"boolean","description":"Можно ли добавить в черный список рекламодателя"}},"required":["id","adId","channelId"]}},"plans":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"maxChannels":{"type":"integer"},"maxAdsGen":{"type":"integer"},"maxAdsGenExpensive":{"type":"integer"},"maxAdsGenPremium":{"type":"integer"},"maxAdsGenVideo":{"type":"integer"},"maxAutoposts":{"type":"integer"},"maxPostsGen":{"type":"integer"},"maxAiMessages":{"type":"integer"},"maxPostsGenExpensive":{"type":"integer"},"maxPostsGenPremium":{"type":"integer"},"maxPostsGenVideo":{"type":"integer"},"analyticsType":{"type":"integer"},"moderationType":{"type":"integer"},"supportType":{"type":"integer"},"autoRefillType":{"type":"integer"},"price":{"type":"integer"},"priceYearly":{"type":"integer"}}}}}}}}}},"/v2/profile/transactions":{"get":{"description":"The authenticated user's transactions + ready-to-withdraw and remaining bonus.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"}],"security":[{"OAuth2":["profile:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"nonce":{"type":"number"},"profile":{"type":"object","properties":{"userId":{"type":"number"},"firstName":{"type":"string"},"lastName":{"type":"string"},"mBalance":{"type":"number","description":"Spendable advertiser balance, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"mBalanceCredit":{"type":"number","description":"Credit-line balance, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"mBalanceBooked":{"type":"number","description":"Balance reserved/held by active campaigns, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"mPartnerBalance":{"type":"number","description":"Referral/partner earnings balance, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"banned":{"type":"number"},"apiKey":{"type":"string"},"country":{"type":"string"},"createdAt":{"type":"number","description":"Timestamp в миллисекундах"},"topUpBonus_StartPeriod":{"type":"number","description":"Время начала действия бонуса на пополнение"},"topUpBonus_Type":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_content":{"type":"string"},"utm_term":{"type":"string"},"yclid":{"type":"string"},"languageCode":{"type":"string"},"isFirstSession":{"type":"number","description":"1 - первый сеанс, 0 - не первый"},"fromRussia":{"type":"number","description":"1 - из России, 0 - не из России"},"enableMentions":{"type":"number","description":"1 - включены упоминания, 0 - выключены"},"startAfterModeration":{"type":"number"},"authCode":{"type":"string"},"disableAdWithoutERID":{"type":"number"},"publisherEarnings":{"type":"number","description":"Lifetime publisher earnings, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"statsClicks":{"type":"number"},"statsMembers":{"type":"number"},"statsViews":{"type":"number"},"statsClicksTrade":{"type":"number"},"statsMembersTrade":{"type":"number"},"statsViewsTrade":{"type":"number"},"allowsWriteToPm":{"type":"number"},"popupTrade":{"type":"number"},"autoApprove":{"type":"number"},"email":{"type":"string"},"emailVerified":{"type":"number"},"statsOnWelcomeScreen":{"type":"number"},"isAmbassador":{"type":"number"},"isKeyPartner":{"type":"number"},"photoUrl":{"type":"string"},"lastMessengerMessageAt":{"type":"string","format":"date-time"},"hasMessengerResponse":{"type":"number"},"is_password_set":{"type":"boolean"},"telegramId":{"type":"number","nullable":true},"actualPlanId":{"type":"number"},"actualSubscriptionId":{"type":"number"},"mode":{"type":"string"},"chatId":{"type":"number"},"mainGoal":{"type":"string"},"audienceSize":{"type":"string"},"audienceSize_members":{"type":"number"},"lastTopUpDate":{"type":"string","format":"date-time","nullable":true,"description":"Дата последнего пополнения (для попапа), null после показа"},"lastTopUpAmount":{"type":"number","nullable":true,"description":"Сумма последнего пополнения в mili-USD, null после показа"},"countReferrals":{"type":"number","description":"Сколько у пользователя рефералов (profiles.refId = userId)"},"countReferrals_30day":{"type":"number","description":"Сколько рефералов появилось за последние 30 дней"}},"required":["userId","firstName","lastName","mBalance","mPartnerBalance"]},"plan":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"task":{"type":"string"},"enabled":{"type":"boolean"},"position":{"type":"number"},"done":{"type":"boolean"},"recommended":{"type":"boolean"}}}}},"friend":{"type":"object","properties":{"userId":{"type":"number"},"firstName":{"type":"string"},"lastName":{"type":"string"}},"required":["userId","firstName","lastName"]},"readyToWithdraw":{"type":"number"},"remainingBonus":{"type":"number"},"readyToWithdrawPartners":{"type":"number"},"profitPartners":{"type":"number"},"referrals":{"type":"array"},"timezones":{"type":"array"},"amountByDate":{"type":"array"},"transactions":{"type":"array"},"transactionsTrade":{"type":"array"},"withdrawalRequests":{"type":"array"},"status":{"type":"string"},"rates":{"type":"object","properties":{"TON":{"type":"number"},"USDT":{"type":"number"},"RUB":{"type":"number"},"INR":{"type":"number"},"BDT":{"type":"number"}},"additionalProperties":{"type":"number"}},"countries":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"region":{"type":"string"}},"required":["name"]}},"languages":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},"categories":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"CPM":{"type":"number"},"CPF":{"type":"number"}},"required":["name"]}},"costRates":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"object","properties":{"CPM_adPost":{"type":"number"},"CPM_teaser":{"type":"number"},"CPF":{"type":"number"},"CPC":{"type":"number"}},"required":[]}}},"callToActions":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},"moderatedReasons":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},"buttonTypes":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},"blackListOfPublishers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"channelId":{"type":"number"},"createdAt":{"type":"number","description":"Timestamp в миллисекундах"},"title":{"type":"string"}},"required":["id","channelId"]}},"blackListOfAdvertisers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"advertiserUserId":{"type":"number"},"createdAt":{"type":"number","description":"Timestamp в миллисекундах"},"title":{"type":"string"}},"required":["id","advertiserUserId"]}},"placements":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"adId":{"type":"number"},"channelId":{"type":"number"},"messageId":{"type":"number","description":"ID сообщения в канале"},"createdAt":{"type":"number","description":"Timestamp в миллисекундах"},"removedAt":{"type":"number","description":"Timestamp в миллисекундах"},"views":{"type":"number"},"clicks":{"type":"number"},"members":{"type":"number"},"channelTitle":{"type":"string"},"channelLink":{"type":"string"},"adTitle":{"type":"string"},"adLink":{"type":"string"},"adType":{"type":"string","description":"Тип рекламы, например, adPost, teaser"},"canBlacklistPub":{"type":"boolean","description":"Можно ли добавить в черный список паблишера"},"canBlacklistAdv":{"type":"boolean","description":"Можно ли добавить в черный список рекламодателя"}},"required":["id","adId","channelId"]}},"plans":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"maxChannels":{"type":"integer"},"maxAdsGen":{"type":"integer"},"maxAdsGenExpensive":{"type":"integer"},"maxAdsGenPremium":{"type":"integer"},"maxAdsGenVideo":{"type":"integer"},"maxAutoposts":{"type":"integer"},"maxPostsGen":{"type":"integer"},"maxAiMessages":{"type":"integer"},"maxPostsGenExpensive":{"type":"integer"},"maxPostsGenPremium":{"type":"integer"},"maxPostsGenVideo":{"type":"integer"},"analyticsType":{"type":"integer"},"moderationType":{"type":"integer"},"supportType":{"type":"integer"},"autoRefillType":{"type":"integer"},"price":{"type":"integer"},"priceYearly":{"type":"integer"}}}}}}}}}},"/v2/profile/top-partners":{"get":{"description":"The authenticated user's top referral partners.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"}],"security":[{"OAuth2":["profile:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"nonce":{"type":"number"},"partners":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}},"/v2/profile/referrals":{"get":{"description":"The authenticated user's referrals, per-date amounts and partner earnings.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"}],"security":[{"OAuth2":["profile:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"nonce":{"type":"number"},"profile":{"type":"object","properties":{"userId":{"type":"number"},"firstName":{"type":"string"},"lastName":{"type":"string"},"mBalance":{"type":"number","description":"Spendable advertiser balance, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"mBalanceCredit":{"type":"number","description":"Credit-line balance, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"mBalanceBooked":{"type":"number","description":"Balance reserved/held by active campaigns, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"mPartnerBalance":{"type":"number","description":"Referral/partner earnings balance, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"banned":{"type":"number"},"apiKey":{"type":"string"},"country":{"type":"string"},"createdAt":{"type":"number","description":"Timestamp в миллисекундах"},"topUpBonus_StartPeriod":{"type":"number","description":"Время начала действия бонуса на пополнение"},"topUpBonus_Type":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_content":{"type":"string"},"utm_term":{"type":"string"},"yclid":{"type":"string"},"languageCode":{"type":"string"},"isFirstSession":{"type":"number","description":"1 - первый сеанс, 0 - не первый"},"fromRussia":{"type":"number","description":"1 - из России, 0 - не из России"},"enableMentions":{"type":"number","description":"1 - включены упоминания, 0 - выключены"},"startAfterModeration":{"type":"number"},"authCode":{"type":"string"},"disableAdWithoutERID":{"type":"number"},"publisherEarnings":{"type":"number","description":"Lifetime publisher earnings, in milli-USD ($1 = 1000) — divide by 1000 for USD"},"statsClicks":{"type":"number"},"statsMembers":{"type":"number"},"statsViews":{"type":"number"},"statsClicksTrade":{"type":"number"},"statsMembersTrade":{"type":"number"},"statsViewsTrade":{"type":"number"},"allowsWriteToPm":{"type":"number"},"popupTrade":{"type":"number"},"autoApprove":{"type":"number"},"email":{"type":"string"},"emailVerified":{"type":"number"},"statsOnWelcomeScreen":{"type":"number"},"isAmbassador":{"type":"number"},"isKeyPartner":{"type":"number"},"photoUrl":{"type":"string"},"lastMessengerMessageAt":{"type":"string","format":"date-time"},"hasMessengerResponse":{"type":"number"},"is_password_set":{"type":"boolean"},"telegramId":{"type":"number","nullable":true},"actualPlanId":{"type":"number"},"actualSubscriptionId":{"type":"number"},"mode":{"type":"string"},"chatId":{"type":"number"},"mainGoal":{"type":"string"},"audienceSize":{"type":"string"},"audienceSize_members":{"type":"number"},"lastTopUpDate":{"type":"string","format":"date-time","nullable":true,"description":"Дата последнего пополнения (для попапа), null после показа"},"lastTopUpAmount":{"type":"number","nullable":true,"description":"Сумма последнего пополнения в mili-USD, null после показа"},"countReferrals":{"type":"number","description":"Сколько у пользователя рефералов (profiles.refId = userId)"},"countReferrals_30day":{"type":"number","description":"Сколько рефералов появилось за последние 30 дней"}},"required":["userId","firstName","lastName","mBalance","mPartnerBalance"]},"plan":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"task":{"type":"string"},"enabled":{"type":"boolean"},"position":{"type":"number"},"done":{"type":"boolean"},"recommended":{"type":"boolean"}}}}},"friend":{"type":"object","properties":{"userId":{"type":"number"},"firstName":{"type":"string"},"lastName":{"type":"string"}},"required":["userId","firstName","lastName"]},"readyToWithdraw":{"type":"number"},"remainingBonus":{"type":"number"},"readyToWithdrawPartners":{"type":"number"},"profitPartners":{"type":"number"},"referrals":{"type":"array"},"timezones":{"type":"array"},"amountByDate":{"type":"array"},"transactions":{"type":"array"},"transactionsTrade":{"type":"array"},"withdrawalRequests":{"type":"array"},"status":{"type":"string"},"rates":{"type":"object","properties":{"TON":{"type":"number"},"USDT":{"type":"number"},"RUB":{"type":"number"},"INR":{"type":"number"},"BDT":{"type":"number"}},"additionalProperties":{"type":"number"}},"countries":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"region":{"type":"string"}},"required":["name"]}},"languages":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},"categories":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"CPM":{"type":"number"},"CPF":{"type":"number"}},"required":["name"]}},"costRates":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"object","properties":{"CPM_adPost":{"type":"number"},"CPM_teaser":{"type":"number"},"CPF":{"type":"number"},"CPC":{"type":"number"}},"required":[]}}},"callToActions":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},"moderatedReasons":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},"buttonTypes":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},"blackListOfPublishers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"channelId":{"type":"number"},"createdAt":{"type":"number","description":"Timestamp в миллисекундах"},"title":{"type":"string"}},"required":["id","channelId"]}},"blackListOfAdvertisers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"advertiserUserId":{"type":"number"},"createdAt":{"type":"number","description":"Timestamp в миллисекундах"},"title":{"type":"string"}},"required":["id","advertiserUserId"]}},"placements":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"adId":{"type":"number"},"channelId":{"type":"number"},"messageId":{"type":"number","description":"ID сообщения в канале"},"createdAt":{"type":"number","description":"Timestamp в миллисекундах"},"removedAt":{"type":"number","description":"Timestamp в миллисекундах"},"views":{"type":"number"},"clicks":{"type":"number"},"members":{"type":"number"},"channelTitle":{"type":"string"},"channelLink":{"type":"string"},"adTitle":{"type":"string"},"adLink":{"type":"string"},"adType":{"type":"string","description":"Тип рекламы, например, adPost, teaser"},"canBlacklistPub":{"type":"boolean","description":"Можно ли добавить в черный список паблишера"},"canBlacklistAdv":{"type":"boolean","description":"Можно ли добавить в черный список рекламодателя"}},"required":["id","adId","channelId"]}},"plans":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"maxChannels":{"type":"integer"},"maxAdsGen":{"type":"integer"},"maxAdsGenExpensive":{"type":"integer"},"maxAdsGenPremium":{"type":"integer"},"maxAdsGenVideo":{"type":"integer"},"maxAutoposts":{"type":"integer"},"maxPostsGen":{"type":"integer"},"maxAiMessages":{"type":"integer"},"maxPostsGenExpensive":{"type":"integer"},"maxPostsGenPremium":{"type":"integer"},"maxPostsGenVideo":{"type":"integer"},"analyticsType":{"type":"integer"},"moderationType":{"type":"integer"},"supportType":{"type":"integer"},"autoRefillType":{"type":"integer"},"price":{"type":"integer"},"priceYearly":{"type":"integer"}}}}}}}}}},"/v2/profile/placements":{"get":{"description":"The authenticated user's ad placements.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"}],"security":[{"OAuth2":["profile:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"result":{"type":"boolean"},"nonce":{"type":"number"},"placements":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"adId":{"type":"number"},"channelId":{"type":"number"},"messageId":{"type":"number","description":"ID сообщения в канале"},"createdAt":{"type":"number","description":"Timestamp в миллисекундах"},"removedAt":{"type":"number","description":"Timestamp в миллисекундах"},"views":{"type":"number"},"clicks":{"type":"number"},"members":{"type":"number"},"channelTitle":{"type":"string"},"channelLink":{"type":"string"},"adTitle":{"type":"string"},"adLink":{"type":"string"},"adType":{"type":"string","description":"Тип рекламы, например, adPost, teaser"},"canBlacklistPub":{"type":"boolean","description":"Можно ли добавить в черный список паблишера"},"canBlacklistAdv":{"type":"boolean","description":"Можно ли добавить в черный список рекламодателя"}},"required":["id","adId","channelId"]}}}}}}}},"/v2/profile/blacklist-publishers":{"get":{"description":"Channels the authenticated user (as advertiser) has blacklisted.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"}],"security":[{"OAuth2":["profile:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"result":{"type":"boolean"},"nonce":{"type":"number"},"blackListOfPublishers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"channelId":{"type":"number"},"createdAt":{"type":"number","description":"Timestamp в миллисекундах"},"title":{"type":"string"}},"required":["id","channelId"]}}}}}}}},"/v2/profile/blacklist-advertisers":{"get":{"description":"Advertisers the authenticated user (as publisher) has blacklisted.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"}],"security":[{"OAuth2":["profile:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"result":{"type":"boolean"},"nonce":{"type":"number"},"blackListOfAdvertisers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"advertiserUserId":{"type":"number"},"createdAt":{"type":"number","description":"Timestamp в миллисекундах"},"title":{"type":"string"}},"required":["id","advertiserUserId"]}}}}}}}},"/v2/profile/blacklist-publisher":{"get":{"description":"Add a channel (publisher) to the authenticated user's blacklist.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"},{"type":"number","description":"Channel to blacklist","required":true,"in":"query","name":"channelId"},{"type":"string","description":"Optional label","required":false,"in":"query","name":"title"}],"security":[{"OAuth2":["profile:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"result":{"type":"boolean"},"nonce":{"type":"number"}}}}}}},"/v2/profile/blacklist-advertiser":{"get":{"description":"Add an advertiser (by adId) to the authenticated user's blacklist.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"},{"type":"number","description":"Ad whose advertiser to blacklist","required":true,"in":"query","name":"adId"},{"type":"string","description":"Optional label","required":false,"in":"query","name":"title"}],"security":[{"OAuth2":["profile:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"result":{"type":"boolean"},"nonce":{"type":"number"}}}}}}},"/v2/channel/list":{"get":{"description":"Get the full list of the authenticated user's channels (same data/format as /channels/getChannels).","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"}],"security":[{"OAuth2":["channels:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"channels":{"type":"array","items":{"type":"object","properties":{"channelId":{"type":"number","description":"Unique channel ID"},"userId":{"type":"number","description":"Owning user (publisher)"},"members":{"type":"number","description":"Current subscriber count"},"title":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","description":"Telegram chat type, e.g. 'channel'"},"username":{"type":"string","description":"Telegram @username, empty for private channels"},"inviteLink":{"type":"string"},"languageCode":{"type":"string"},"statusUser":{"type":"string","description":"Moderation/lifecycle status: e.g. 'active', 'hidden', 'banned'"},"status":{"type":"string","description":"Bot's own membership status in the chat, e.g. 'administrator'"},"possibleStatusString":{"type":"string","description":"Human-readable reason/explanation for the current statusUser"},"category":{"type":"string","description":"Primary content category (topic) of the channel"},"keywords":{"type":"string","description":"Comma-separated audience/content keywords used for ad targeting"},"allowedCategories":{"type":"string","description":"Ad categories this channel accepts, comma-separated"},"disallowedCategories":{"type":"string","description":"Ad categories this channel refuses, comma-separated"},"adPostSlotsWeek":{"type":"string","description":"Weekly schedule of ad-post slots (encoded string)"},"teaserSlotsWeek":{"type":"string","description":"Weekly schedule of teaser slots (encoded string)"},"autoGenerateContent":{"type":["null","number"]},"generateContentSettings":{"type":"string"},"enableDirectPosts":{"type":"number","description":"1 = channel accepts direct (non-auction) posts"},"maxPosts":{"type":"number","description":"Max ad-posts allowed per day"},"maxTeasers":{"type":"number","description":"Max teasers allowed per day"},"cpmStrategy":{"type":"string"},"country":{"type":"string","description":"ISO-2 country code of the channel audience"},"tier":{"type":"number","description":"GEO price tier derived from country, 0 = unverified"},"tierVerified":{"type":"number"},"countryLocked":{"type":"number","description":"1 = country was determined from real audience data, read-only"},"subdivisions":{"type":"string"},"can_edit_messages":{"type":"number","description":"Bot permission flag (1/0), not a content setting"},"can_post_messages":{"type":"number","description":"Bot permission flag (1/0), not a content setting"},"can_invite_users":{"type":"number","description":"Bot permission flag (1/0), not a content setting"},"can_change_info":{"type":"number","description":"Bot permission flag (1/0), not a content setting"},"moderated":{"type":"number","description":"1 = passed moderation, 0 = pending/not yet"},"preModerated":{"type":"number"},"moderatedDate":{"type":"number","description":"Timestamp in milliseconds"},"moderatedReason":{"type":"number","description":"Rejection reason code; human text lives in a separate dictionary"},"rejectComment":{"type":"string","nullable":true,"description":"Free-text moderator comment left when rejecting the channel, max 100 chars"},"statsViews":{"type":"number"},"statsMembers":{"type":"number"},"can_send_messages":{"type":"number","description":"Bot permission flag (1/0), not a content setting"},"updatedAt":{"type":"string"},"createdAt":{"type":"string"},"brandSafe":{"type":["null","number"]},"top":{"type":["null","number"],"description":"1 = top channel, 0 = not top, null = not set"},"timezone":{"type":"string"},"avgViews30D":{"type":"number","description":"Average post views over the last 30 days"},"avatarBig":{"type":"string"},"avatarSmall":{"type":"string"},"suspicious":{"type":"number","description":"1 = flagged by anti-fraud heuristics"},"bid_1_24":{"type":"number"},"bid_2_48":{"type":"number"},"landingDescription":{"type":"string"},"enableNotification":{"type":"number"},"mCpmBidTeaser":{"type":"number","description":"Teaser CPM bid, in milli-USD ($1 = 1000)"},"mCpmBidAdPost":{"type":"number","description":"Ad-post CPM bid, in milli-USD ($1 = 1000)"},"mCpmBidTeaserCurrent":{"type":"number","description":"Effective teaser CPM bid after discounts, milli-USD"},"mCpmBidAdPostCurrent":{"type":"number","description":"Effective ad-post CPM bid after discounts, milli-USD"},"allowPaidAds":{"type":"number"},"lowQualityContent":{"type":"number"},"isKidsChannel":{"type":"number","description":"1 = channel targets a children audience, ads are blocked"},"minCPM":{"type":"number","description":"Minimum CPM the channel accepts, milli-USD"},"allowPromoPost":{"type":"number"},"sendToModerationDate":{"type":"number","description":"Timestamp in milliseconds"},"repack_topic":{"type":"string"},"enableCross":{"type":"number"},"comment":{"type":["null","string"]}},"required":["channelId","userId","title","type","languageCode","statusUser","possibleStatusString","category","keywords","allowedCategories","disallowedCategories","country","subdivisions","can_edit_messages","can_invite_users","moderated","statsViews","statsMembers","can_send_messages"]}}}}}}}},"/v2/channel/get":{"get":{"description":"Get ONE of the authenticated user's channels by ID (same object shape as /v2/channel/list).","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"},{"type":"number","description":"Target channel ID (must belong to the user)","required":true,"in":"query","name":"channelId"}],"security":[{"OAuth2":["channels:read"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"channel":{"type":"object","properties":{"channelId":{"type":"number","description":"Unique channel ID"},"userId":{"type":"number","description":"Owning user (publisher)"},"members":{"type":"number","description":"Current subscriber count"},"title":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","description":"Telegram chat type, e.g. 'channel'"},"username":{"type":"string","description":"Telegram @username, empty for private channels"},"inviteLink":{"type":"string"},"languageCode":{"type":"string"},"statusUser":{"type":"string","description":"Moderation/lifecycle status: e.g. 'active', 'hidden', 'banned'"},"status":{"type":"string","description":"Bot's own membership status in the chat, e.g. 'administrator'"},"possibleStatusString":{"type":"string","description":"Human-readable reason/explanation for the current statusUser"},"category":{"type":"string","description":"Primary content category (topic) of the channel"},"keywords":{"type":"string","description":"Comma-separated audience/content keywords used for ad targeting"},"allowedCategories":{"type":"string","description":"Ad categories this channel accepts, comma-separated"},"disallowedCategories":{"type":"string","description":"Ad categories this channel refuses, comma-separated"},"adPostSlotsWeek":{"type":"string","description":"Weekly schedule of ad-post slots (encoded string)"},"teaserSlotsWeek":{"type":"string","description":"Weekly schedule of teaser slots (encoded string)"},"autoGenerateContent":{"type":["null","number"]},"generateContentSettings":{"type":"string"},"enableDirectPosts":{"type":"number","description":"1 = channel accepts direct (non-auction) posts"},"maxPosts":{"type":"number","description":"Max ad-posts allowed per day"},"maxTeasers":{"type":"number","description":"Max teasers allowed per day"},"cpmStrategy":{"type":"string"},"country":{"type":"string","description":"ISO-2 country code of the channel audience"},"tier":{"type":"number","description":"GEO price tier derived from country, 0 = unverified"},"tierVerified":{"type":"number"},"countryLocked":{"type":"number","description":"1 = country was determined from real audience data, read-only"},"subdivisions":{"type":"string"},"can_edit_messages":{"type":"number","description":"Bot permission flag (1/0), not a content setting"},"can_post_messages":{"type":"number","description":"Bot permission flag (1/0), not a content setting"},"can_invite_users":{"type":"number","description":"Bot permission flag (1/0), not a content setting"},"can_change_info":{"type":"number","description":"Bot permission flag (1/0), not a content setting"},"moderated":{"type":"number","description":"1 = passed moderation, 0 = pending/not yet"},"preModerated":{"type":"number"},"moderatedDate":{"type":"number","description":"Timestamp in milliseconds"},"moderatedReason":{"type":"number","description":"Rejection reason code; human text lives in a separate dictionary"},"rejectComment":{"type":"string","nullable":true,"description":"Free-text moderator comment left when rejecting the channel, max 100 chars"},"statsViews":{"type":"number"},"statsMembers":{"type":"number"},"can_send_messages":{"type":"number","description":"Bot permission flag (1/0), not a content setting"},"updatedAt":{"type":"string"},"createdAt":{"type":"string"},"brandSafe":{"type":["null","number"]},"top":{"type":["null","number"],"description":"1 = top channel, 0 = not top, null = not set"},"timezone":{"type":"string"},"avgViews30D":{"type":"number","description":"Average post views over the last 30 days"},"avatarBig":{"type":"string"},"avatarSmall":{"type":"string"},"suspicious":{"type":"number","description":"1 = flagged by anti-fraud heuristics"},"bid_1_24":{"type":"number"},"bid_2_48":{"type":"number"},"landingDescription":{"type":"string"},"enableNotification":{"type":"number"},"mCpmBidTeaser":{"type":"number","description":"Teaser CPM bid, in milli-USD ($1 = 1000)"},"mCpmBidAdPost":{"type":"number","description":"Ad-post CPM bid, in milli-USD ($1 = 1000)"},"mCpmBidTeaserCurrent":{"type":"number","description":"Effective teaser CPM bid after discounts, milli-USD"},"mCpmBidAdPostCurrent":{"type":"number","description":"Effective ad-post CPM bid after discounts, milli-USD"},"allowPaidAds":{"type":"number"},"lowQualityContent":{"type":"number"},"isKidsChannel":{"type":"number","description":"1 = channel targets a children audience, ads are blocked"},"minCPM":{"type":"number","description":"Minimum CPM the channel accepts, milli-USD"},"allowPromoPost":{"type":"number"},"sendToModerationDate":{"type":"number","description":"Timestamp in milliseconds"},"repack_topic":{"type":"string"},"enableCross":{"type":"number"},"comment":{"type":["null","string"]}},"required":["channelId","userId","title","type","languageCode","statusUser","possibleStatusString","category","keywords","allowedCategories","disallowedCategories","country","subdivisions","can_edit_messages","can_invite_users","moderated","statsViews","statsMembers","can_send_messages"],"nullable":true}}}}}}},"/v2/channel/create":{"post":{"description":"Add a new advertising channel for the authenticated user by URL/link. Parses the link and initializes AI insights.","tags":["v2"],"parameters":[{"type":"number","description":"Authenticated userId (self only)","required":true,"in":"query","name":"userId"},{"name":"body","in":"body","schema":{"type":"object","properties":{"url":{"type":"string","description":"The link or invite URL of the channel to add"},"languageCode":{"type":"string","description":"ISO language code for the target segment, e.g. 'ru' or 'en'"}},"required":["url"]}}],"security":[{"OAuth2":["channels:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","additionalProperties":true,"properties":{"success":{"type":"boolean"},"channelId":{"type":"number"}}}}}}},"/v2/content/create":{"post":{"description":"Creates AND (optionally) publishes a post to one of the user's own connected posting platforms, in a single call. This is the ONLY operation needed for posting — legacy /collab/content/* endpoints are not exposed here. BEFORE calling this, find the user's available channel(s) (e.g. via \"list_channels\") and, if there is more than one, ask the user which to use. For platform, use \"telegram\" unless the user explicitly asks about Instagram or Threads. Gather from the user: the caption/text they want (or an idea/topic if they want you to write it), whether they want an AI-generated image attached (\"generateImage\": true) or no image at all, and when it should go out — \"immediate\" to publish it right now (this call will trigger the actual publish before returning), \"manual\" with an \"eventAt\" ISO datetime to schedule it for a specific time, \"next_slot\" to drop it into the account's next free auto-posting slot, or \"draft\" to just save it without publishing so it can be edited/sent later. If \"generateImage\" is true, this call will synchronously generate the image before returning (can take up to ~30s) and attach it to the post. The response tells you exactly what happened: \"content\" is the saved post, \"imageGenerated\"/\"imageError\" report the image step, and \"published\"/\"publishError\" report whether it was actually sent out immediately. If publishing fails (e.g. platform not ready), tell the user and suggest they check their channel connection.","tags":["v2"],"parameters":[{"type":"number","description":"userId owner of the content","required":true,"in":"query","name":"userId"},{"name":"body","in":"body","schema":{"type":"object","properties":{"platform":{"type":"string","enum":["instagram","threads","telegram"],"description":"Which platform to post to — use \"telegram\" unless the user explicitly means Instagram or Threads"},"channelId":{"type":"string","description":"The channelId to post to, from the \"list_channels\" tool"},"caption":{"type":"string","nullable":true,"description":"Post text/caption. Provide the exact text the user wants to post."},"idea":{"type":"string","nullable":true,"description":"Short idea/topic — used as the prompt hint if \"generateImage\" is true and no caption is given yet"},"generateImage":{"type":"boolean","nullable":true,"description":"Set true to have InsideAds AI-generate an image for this post right now (based on \"caption\"/\"idea\"). Set false/omit if the user does not want an image, or already has their own media (raw file uploads are not supported through this API)."},"imageModel":{"type":"string","nullable":true,"description":"Optional specific image model name; omit to use the account default"},"aspectRatio":{"type":"string","nullable":true,"description":"e.g. \"1:1\", \"4:5\", \"9:16\" — only used when generateImage is true"},"scheduleType":{"type":"string","enum":["draft","next_slot","manual","immediate"],"description":"\"immediate\" to publish right now (this call will publish before returning). \"manual\" + \"eventAt\" to schedule a specific time. \"next_slot\" to auto-schedule into the next free posting slot. \"draft\" to just save without publishing/scheduling."},"eventAt":{"type":"string","format":"date-time","nullable":true,"description":"Explicit publish date/time in ISO 8601 — required when scheduleType is \"manual\""},"buttons":{"type":"string","nullable":true,"description":"Optional JSON string: [[{text, url}]] for inline link buttons under the post"},"disable_notification":{"type":"boolean","nullable":true,"description":"Default: false"},"disable_link_preview":{"type":"boolean","nullable":true,"description":"Default: true"}},"required":["platform","channelId","scheduleType"],"additionalProperties":false}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"createdId":{"type":"number"},"content":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"number"},"caption":{"type":"string","nullable":true},"image_path":{"type":"string","nullable":true},"eventAt":{"type":"string","nullable":true},"status":{"type":"string"},"channelId":{"type":"string"},"platform":{"type":"string"}}},"imageGenerated":{"type":"boolean"},"imageError":{"type":"string","nullable":true},"published":{"type":"boolean"},"publishError":{"type":"string","nullable":true}}}}}}},"/v2/content/create-raw":{"post":{"description":"Creates a new draft content item (a post) for a platform channel — the low-level building block behind posting. Prefer \"create_post\" for the common case (it also handles image generation + immediate publish in one call). Use this instead when you need \"outgoing\" content (cross-posting/swap to another user's channel) or are composing a custom pipeline. Does not accept raw file uploads — attach media afterwards via update_post/update_post_image using a URL.","tags":["v2"],"parameters":[{"type":"number","description":"Telegram userId owner of the content","required":true,"in":"query","name":"userId"},{"name":"body","in":"body","schema":{"type":"object","properties":{"platform":{"type":"string","enum":["instagram","threads","telegram"],"description":"Target platform"},"channelId":{"type":"string","description":"The channelId to post to"},"type":{"type":"string","enum":["account","outgoing"],"description":"\"account\" = the user's own channel. \"outgoing\" = cross-post/swap content to another user's channel."},"caption":{"type":"string","nullable":true},"idea":{"type":"string","nullable":true,"description":"Short idea/topic, used as an image-generation prompt hint"},"scheduleType":{"type":"string","enum":["draft","next_slot","manual","immediate"],"nullable":true,"description":"How to schedule it; omit/\"draft\" to just save it unscheduled"},"eventAt":{"type":"string","format":"date-time","nullable":true,"description":"Required when scheduleType is \"manual\""},"status":{"type":"string","nullable":true,"description":"Only relevant for \"outgoing\" content (\"draft\" or \"ready\")"},"buttons":{"type":"string","nullable":true,"description":"JSON string: [[{text, url}]]"},"disable_notification":{"type":"boolean","nullable":true},"disable_link_preview":{"type":"boolean","nullable":true}},"required":["platform","channelId","type"],"additionalProperties":false}}],"security":[{"OAuth2":["content:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","additionalProperties":true,"properties":{"success":{"type":"boolean"},"createdId":{"type":"number"}}}}}}},"/v2/content/update-caption":{"post":{"description":"Updates ONLY the text/caption (and idea) of an existing, not-yet-published post. Use \"update_post\" instead if you also need to change schedule, status, buttons, or media.","tags":["v2"],"parameters":[{"type":"number","description":"Telegram userId owner of the content","required":true,"in":"query","name":"userId"},{"name":"body","in":"body","schema":{"type":"object","properties":{"platform":{"type":"string","enum":["instagram","threads","telegram"]},"id":{"type":"number","description":"The content id to update (from create_post/create_content, or list_channels-adjacent content listing)"},"caption":{"type":"string","nullable":true},"idea":{"type":"string","nullable":true}},"required":["platform","id"],"additionalProperties":false}}],"security":[{"OAuth2":["content:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","additionalProperties":true,"properties":{"success":{"type":"boolean"}}}}}}},"/v2/content/update-image":{"post":{"description":"Attaches media to an existing post, or removes it (\"fileDeleted\": true). Use \"fileUrl\" after generate_image/generate_video finishes (AI-generated result). Use \"fileBase64\" + \"mimeType\" instead when the user gave you their OWN photo/video to use (e.g. sent in this chat) — pass its raw bytes directly, it will be saved and attached as-is.","tags":["v2"],"parameters":[{"type":"number","description":"Telegram userId owner of the content","required":true,"in":"query","name":"userId"},{"name":"body","in":"body","schema":{"type":"object","properties":{"platform":{"type":"string","enum":["instagram","threads","telegram"]},"id":{"type":"number","description":"The content id to update"},"fileUrl":{"type":"string","nullable":true,"description":"URL of an already-hosted image/video to attach — typically the result of generate_image/generate_video (AI-generated), or any other URL you already have."},"fileBase64":{"type":"string","nullable":true,"description":"Base64-encoded raw image/video bytes to upload directly. Use this when the user sent you their OWN photo/video (e.g. in the Telegram support chat, resolved via the same file-download path used for vision attachments) and it should become the post's media — NOT an AI-generated one. Requires \"mimeType\"."},"mimeType":{"type":"string","nullable":true,"description":"MIME type of \"fileBase64\" (e.g. \"image/jpeg\", \"video/mp4\"). Required when fileBase64 is set."},"fileDeleted":{"type":"boolean","nullable":true,"description":"Set true to remove the existing media instead of attaching a new one. Mutually exclusive with fileUrl/fileBase64."}},"required":["platform","id"],"additionalProperties":false}}],"security":[{"OAuth2":["content:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","additionalProperties":true,"properties":{"success":{"type":"boolean"}}}}}}},"/v2/content/update":{"post":{"description":"Updates an existing, not-yet-published post: caption, schedule, status, buttons, notification/preview flags, and/or its media. For media, use \"fileUrl\" (AI-generated result from generate_image/generate_video) or \"fileBase64\"+\"mimeType\" (the user's own photo/video you already have the bytes of) — or \"fileDeleted\": true to remove it. Does NOT publish — call \"publish_post\" afterwards when ready. Fails if the post is currently being published.","tags":["v2"],"parameters":[{"type":"number","description":"Telegram userId owner of the content","required":true,"in":"query","name":"userId"},{"name":"body","in":"body","schema":{"type":"object","properties":{"platform":{"type":"string","enum":["instagram","threads","telegram"]},"id":{"type":"number","description":"The content id to update"},"channelId":{"type":"string","nullable":true,"description":"Only needed if moving the post to a different channel"},"caption":{"type":"string","nullable":true},"idea":{"type":"string","nullable":true},"scheduleType":{"type":"string","enum":["draft","next_slot","manual","immediate"],"nullable":true},"eventAt":{"type":"string","format":"date-time","nullable":true,"description":"Required when scheduleType is \"manual\""},"status":{"type":"string","nullable":true},"buttons":{"type":"string","nullable":true,"description":"JSON string: [[{text, url}]]"},"disable_notification":{"type":"boolean","nullable":true},"disable_link_preview":{"type":"boolean","nullable":true},"fileUrl":{"type":"string","nullable":true,"description":"URL of an already-hosted image/video to attach — typically the result of generate_image/generate_video (AI-generated), or any other URL you already have."},"fileBase64":{"type":"string","nullable":true,"description":"Base64-encoded raw image/video bytes to upload directly. Use this when the user sent you their OWN photo/video (e.g. in the Telegram support chat, resolved via the same file-download path used for vision attachments) and it should become the post's media — NOT an AI-generated one. Requires \"mimeType\"."},"mimeType":{"type":"string","nullable":true,"description":"MIME type of \"fileBase64\" (e.g. \"image/jpeg\", \"video/mp4\"). Required when fileBase64 is set."},"fileDeleted":{"type":"boolean","nullable":true,"description":"Set true to remove the existing media instead of attaching a new one. Mutually exclusive with fileUrl/fileBase64."}},"required":["platform","id"],"additionalProperties":false}}],"security":[{"OAuth2":["content:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","additionalProperties":true,"properties":{"success":{"type":"boolean"}}}}}}},"/v2/content/publish":{"post":{"description":"Publishes an existing \"account\" post (created via create_post/create_content) right now, regardless of its scheduled time. Only works for type \"account\" posts.","tags":["v2"],"parameters":[{"type":"number","description":"Telegram userId owner of the content","required":true,"in":"query","name":"userId"},{"name":"body","in":"body","schema":{"type":"object","properties":{"id":{"type":"number","description":"The content id to publish"}},"required":["id"],"additionalProperties":false}}],"security":[{"OAuth2":["content:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"}}}}}}},"/v2/content/reschedule":{"post":{"description":"Reschedules an existing post to a new date/time or auto-slot. Pass either \"eventAt\" (explicit ISO datetime) or \"scheduleType\" (\"next_slot\"/\"manual\"/\"draft\"/\"immediate\").","tags":["v2"],"parameters":[{"type":"number","description":"Telegram userId owner of the content","required":true,"in":"query","name":"userId"},{"name":"body","in":"body","schema":{"type":"object","properties":{"platform":{"type":"string","enum":["instagram","threads","telegram"]},"id":{"type":"number","description":"The content id to reschedule"},"eventAt":{"type":"string","format":"date-time","nullable":true,"description":"Explicit new publish datetime (used directly if scheduleType is omitted)"},"scheduleType":{"type":"string","enum":["draft","next_slot","manual","immediate"],"nullable":true}},"required":["platform","id"],"additionalProperties":false}}],"security":[{"OAuth2":["content:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"eventAt":{"type":"string","format":"date-time","nullable":true}}}}}}},"/v2/content/delete":{"post":{"description":"Deletes (soft-removes) an existing, not-yet-published post.","tags":["v2"],"parameters":[{"type":"number","description":"Telegram userId owner of the content","required":true,"in":"query","name":"userId"},{"name":"body","in":"body","schema":{"type":"object","properties":{"platform":{"type":"string","enum":["instagram","threads","telegram"]},"id":{"type":"number","description":"The content id to delete"},"channelId":{"type":"string","description":"The channelId the post belongs to"}},"required":["platform","id","channelId"],"additionalProperties":false}}],"security":[{"OAuth2":["content:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string","nullable":true}}}}}}},"/v2/content/set-ready":{"post":{"description":"Bulk-marks a list of draft posts (by id) as \"scheduled\"/ready. Use this after generating a batch of drafts the user approved.","tags":["v2"],"parameters":[{"type":"number","description":"Telegram userId owner of the content","required":true,"in":"query","name":"userId"},{"name":"body","in":"body","schema":{"type":"object","properties":{"platform":{"type":"string","enum":["instagram","threads","telegram"]},"ids":{"type":"array","minItems":1,"items":{"type":"number"},"description":"Content ids to mark ready"},"channelId":{"type":"string","nullable":true}},"required":["platform","ids"],"additionalProperties":false}}],"security":[{"OAuth2":["content:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"requestedCount":{"type":"number"},"updatedCount":{"type":"number"}}}}}}},"/v2/content/switch-channel-id":{"post":{"description":"Telegram-only maintenance operation: migrates content rows from a positive channelId to the corresponding negative (-100...) channelId, once ownership is verified. Not part of normal posting — only use if explicitly asked to fix a channelId mismatch.","tags":["v2"],"parameters":[{"type":"number","description":"Telegram userId owner of the content","required":true,"in":"query","name":"userId"},{"name":"body","in":"body","schema":{"type":"object","properties":{"channelId":{"type":"string","description":"The (positive or negative) Telegram channelId to normalize"}},"required":["channelId"],"additionalProperties":false}}],"security":[{"OAuth2":["content:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"sourceChannelId":{"type":"string"},"targetChannelId":{"type":"string"},"updatedContent":{"type":"number"}}}}}}},"/v2/content/generate-schedule":{"post":{"description":"Bulk-generates and schedules a batch of AI-written \"account\" posts (captions + images) for a channel, filling its posting slots. Subject to the user's subscription usage limits (returns LIMIT_EXCEEDED if out of quota). This is synchronous and can take a while for larger counts.","tags":["v2"],"parameters":[{"type":"number","description":"Telegram userId owner of the content","required":true,"in":"query","name":"userId"},{"name":"body","in":"body","schema":{"type":"object","properties":{"platform":{"type":"string","enum":["instagram","threads","telegram"]},"channelId":{"type":"string"},"count":{"type":"integer","nullable":true,"description":"How many posts to generate"}},"required":["platform","channelId"],"additionalProperties":false}}],"security":[{"OAuth2":["content:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"accountResult":{"type":"object","additionalProperties":true}}}}}}},"/v2/content/generate":{"post":{"description":"Synchronously generates a draft caption + image for a channel (nothing is saved). Use this to preview AI-written content before calling create_content/create_post to actually save it.","tags":["v2"],"parameters":[{"type":"number","description":"Telegram userId owner of the content","required":true,"in":"query","name":"userId"},{"name":"body","in":"body","schema":{"type":"object","properties":{"platform":{"type":"string","enum":["instagram","threads","telegram"]},"channelId":{"type":"string"},"contentType":{"type":"string","enum":["outgoing","account"]}},"required":["platform","channelId","contentType"],"additionalProperties":false}}],"security":[{"OAuth2":["content:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"post":{"type":"string"},"imageUrl":{"type":"string","nullable":true}}}}}}},"/v2/content/generate-caption/start":{"post":{"description":"Starts asynchronous AI caption generation for a post. Returns a jobId immediately — poll \"check_generate_caption\" with it until status is \"done\" (result.post has the generated text), then pass that text as \"caption\" to create_content/update_post_caption.","tags":["v2"],"parameters":[{"type":"number","description":"Telegram userId owner of the content","required":true,"in":"query","name":"userId"},{"name":"body","in":"body","schema":{"type":"object","properties":{"platform":{"type":"string","enum":["instagram","threads","telegram"]},"contentType":{"type":"string","enum":["outgoing","account"]},"contentId":{"type":"number","nullable":true,"description":"Existing content id, if regenerating for an already-created post"},"channelId":{"type":"string"},"textModel":{"type":"string","nullable":true},"styleOverrides":{"type":"object","nullable":true,"additionalProperties":false,"properties":{"postTov":{"type":"string","nullable":true},"postStyle":{"type":"string","nullable":true},"teaserTov":{"type":"string","nullable":true},"teaserStyle":{"type":"string","nullable":true},"customPrompt":{"type":"string","nullable":true},"useChannelInfo":{"type":"number","nullable":true}}}},"required":["contentType","channelId"],"additionalProperties":false}}],"security":[{"OAuth2":["content:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"jobId":{"type":"string"},"status":{"type":"string"}},"required":["jobId","status"]}}}}},"/v2/content/generate-caption/check":{"get":{"description":"Polls the status of a job started by \"generate_caption\". Call repeatedly until status is \"done\" (result.post) or \"failed\".","tags":["v2"],"parameters":[{"type":"number","description":"Telegram userId owner of the job","required":true,"in":"query","name":"userId"},{"type":"string","required":true,"in":"query","name":"jobId"}],"security":[{"OAuth2":["content:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","additionalProperties":true,"properties":{"jobId":{"type":"string"},"status":{"type":"string"}},"required":["jobId","status"]}}}}},"/v2/content/generate-image/start":{"post":{"description":"Starts asynchronous AI image generation for a post. Returns a jobId immediately — poll \"check_generate_image\" with it until status is \"done\" (result.imageUrl), then attach it via update_post/update_post_image (\"fileUrl\"). Prefer \"create_post\" instead if you just want to write and publish one post — it handles image generation inline.","tags":["v2"],"parameters":[{"type":"number","description":"Telegram userId owner of the content","required":true,"in":"query","name":"userId"},{"name":"body","in":"body","schema":{"type":"object","properties":{"platform":{"type":"string","enum":["instagram","threads","telegram"]},"post":{"type":"string","description":"The post caption/idea text to base the generated image on"},"contentType":{"type":"string","enum":["outgoing","account"]},"contentId":{"type":"number","nullable":true},"channelId":{"type":"string"},"model":{"type":"string","nullable":true},"aspectRatio":{"type":"string","nullable":true,"description":"e.g. \"1:1\", \"4:5\", \"9:16\""},"styleOverrides":{"type":"object","nullable":true,"additionalProperties":false,"properties":{"imageConcept":{"type":"string","nullable":true},"visualStyle":{"type":"string","nullable":true},"imageStyle":{"type":"string","nullable":true},"textMode":{"type":"number","nullable":true},"customPrompt":{"type":"string","nullable":true},"useChannelInfo":{"type":"number","nullable":true}}}},"required":["post","contentType","channelId"],"additionalProperties":false}}],"security":[{"OAuth2":["content:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"jobId":{"type":"string"},"status":{"type":"string"}},"required":["jobId","status"]}}}}},"/v2/content/generate-image/check":{"get":{"description":"Polls the status of a job started by \"generate_image\". Call repeatedly until status is \"done\" (result.imageUrl) or \"failed\".","tags":["v2"],"parameters":[{"type":"number","description":"Telegram userId owner of the job","required":true,"in":"query","name":"userId"},{"type":"string","required":true,"in":"query","name":"jobId"}],"security":[{"OAuth2":["content:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","additionalProperties":true,"properties":{"jobId":{"type":"string"},"status":{"type":"string"}},"required":["jobId","status"]}}}}},"/v2/content/generate-video/start":{"post":{"description":"Starts asynchronous AI video generation for a post (image-to-video; generates the image first if none is given). Returns a jobId — poll \"check_generate_video\" until status is \"done\" (result.imageUrl + result.videoUrl), then attach result.videoUrl via update_post/update_post_image (\"fileUrl\").","tags":["v2"],"parameters":[{"type":"number","description":"Telegram userId owner of the content","required":true,"in":"query","name":"userId"},{"name":"body","in":"body","schema":{"type":"object","properties":{"platform":{"type":"string","enum":["instagram","threads","telegram"]},"post":{"type":"string"},"imageUrl":{"type":"string","nullable":true,"description":"Existing image to animate; if omitted, one is generated first"},"videoModel":{"type":"string","nullable":true},"imageModel":{"type":"string","nullable":true},"aspectRatio":{"type":"string","nullable":true},"styleOverrides":{"type":"object","nullable":true,"additionalProperties":false,"properties":{"imageConcept":{"type":"string","nullable":true},"visualStyle":{"type":"string","nullable":true},"imageStyle":{"type":"string","nullable":true},"textMode":{"type":"number","nullable":true},"customPrompt":{"type":"string","nullable":true},"useChannelInfo":{"type":"number","nullable":true}}},"contentType":{"type":"string","enum":["outgoing","account"]},"contentId":{"type":"number","nullable":true},"channelId":{"type":"string"},"customImageUrls":{"type":"array","items":{"type":"string","maxLength":1024},"maxItems":2,"nullable":true}},"required":["post","contentType","channelId"],"additionalProperties":false}}],"security":[{"OAuth2":["content:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"jobId":{"type":"string"},"status":{"type":"string"}},"required":["jobId","status"]}}}}},"/v2/content/generate-video/check":{"get":{"description":"Polls the status of a job started by \"generate_video\". Call repeatedly until status is \"done\" (result.imageUrl/result.videoUrl) or \"failed\".","tags":["v2"],"parameters":[{"type":"number","description":"Telegram userId owner of the job","required":true,"in":"query","name":"userId"},{"type":"string","required":true,"in":"query","name":"jobId"}],"security":[{"OAuth2":["content:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","additionalProperties":true,"properties":{"jobId":{"type":"string"},"status":{"type":"string"}},"required":["jobId","status"]}}}}},"/v2/content/initial/start":{"post":{"description":"Starts asynchronous generation of the first (\"welcome\") post for a newly connected channel, scheduled for right now. Returns a jobId — poll \"check_initial_post\" until status is \"done\" (result.contentId/result.post).","tags":["v2"],"parameters":[{"type":"number","description":"Telegram userId owner of the content","required":true,"in":"query","name":"userId"},{"name":"body","in":"body","schema":{"type":"object","properties":{"platform":{"type":"string","enum":["instagram","threads","telegram"]},"channelId":{"type":"string"},"language":{"type":"string","nullable":true}},"required":["channelId"],"additionalProperties":false}}],"security":[{"OAuth2":["content:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"jobId":{"type":"string"},"status":{"type":"string"}},"required":["jobId","status"]}}}}},"/v2/content/initial/check":{"get":{"description":"Polls the status of a job started by \"start_initial_post\". Call repeatedly until status is \"done\" (result.contentId/result.post) or \"failed\".","tags":["v2"],"parameters":[{"type":"number","description":"Telegram userId owner of the job","required":true,"in":"query","name":"userId"},{"type":"string","required":true,"in":"query","name":"jobId"}],"security":[{"OAuth2":["content:write"]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","additionalProperties":true,"properties":{"jobId":{"type":"string"},"status":{"type":"string"}},"required":["jobId","status"]}}}}}},"host":"api.insideads.net","schemes":["https"],"consumes":["application/json"],"produces":["application/json"],"securityDefinitions":{"OAuth2":{"type":"oauth2","flow":"accessCode","authorizationUrl":"https://api.insideads.net/api/oauth/authorize","tokenUrl":"https://api.insideads.net/api/oauth/token","scopes":{"ads:read":"Read campaigns/ads and their stats","ads:write":"Create and update campaigns/ads","stats:read":"Read platform traffic stats","profile:read":"Read the authenticated user's own profile","profile:write":"Modify the authenticated user's own profile settings (e.g. blacklists)","content:write":"Create and update posts","channels:read":"Read the authenticated user's channels","channels:write":"Add/manage the authenticated user's channels"},"description":"OAuth 2.0 access token (Bearer). Recommended for AI agents: dynamic client registration + PKCE, no manual key; userId is taken from the token. See /auth.md."},"ApiKeyAuth":{"type":"apiKey","name":"authorization","in":"header","description":"Manual key for humans/scripts. Format: token <apiKey> (also requires userId query param)"}},"basePath":"/api"}