{ "openapi": "3.1.0", "info": { "title": "FastAPI", "version": "unknown" }, "paths": { "/api/v1/auth/complete": { "get": { "tags": ["auth"], "summary": "Complete Auth", "operationId": "complete_auth_api_v1_auth_complete_get", "parameters": [ { "name": "token", "in": "query", "required": true, "schema": { "type": "string", "title": "Token" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidateLoginTokenOutput" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/auth/me": { "get": { "tags": ["auth"], "summary": "Get Me", "operationId": "get_me_api_v1_auth_me_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserOutput" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/v1/target_channels": { "get": { "tags": ["target_channels"], "summary": "Get User Target Chans", "operationId": "get_user_target_chans_api_v1_target_channels_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetUserTargetChansOutput" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/v1/target_channels/{channel_id}": { "delete": { "tags": ["target_channels"], "summary": "Disconnect Target Chan", "operationId": "disconnect_target_chan_api_v1_target_channels__channel_id__delete", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "channel_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", "title": "Channel Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/external_channels/target/{target_channel_id}": { "get": { "tags": ["external_channels"], "summary": "Get External Channels", "description": "Get all external channels for a specific target channel.", "operationId": "get_external_channels_api_v1_external_channels_target__target_channel_id__get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "target_channel_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", "title": "Target Channel Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetExternalChannelsOutput" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/external_channels": { "post": { "tags": ["external_channels"], "summary": "Create External Channel", "description": "Create a new external channel and link it to target channels.", "operationId": "create_external_channel_api_v1_external_channels_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateExternalChannelInput" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ExternalChannelOutput" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/v1/external_channels/{channel_id}": { "patch": { "tags": ["external_channels"], "summary": "Update External Channel", "description": "Update external channel fields (title, username, description, subscribers_count).", "operationId": "update_external_channel_api_v1_external_channels__channel_id__patch", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "channel_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", "title": "Channel Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateExternalChannelInput" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ExternalChannelOutput" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "delete": { "tags": ["external_channels"], "summary": "Delete External Channel", "description": "Delete an external channel.", "operationId": "delete_external_channel_api_v1_external_channels__channel_id__delete", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "channel_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", "title": "Channel Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/external_channels/{channel_id}/links": { "patch": { "tags": ["external_channels"], "summary": "Update External Channel Links", "description": "Update target channel links for an existing external channel.\n\nYou can add new target channels, remove existing ones, or both in a single request.", "operationId": "update_external_channel_links_api_v1_external_channels__channel_id__links_patch", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "channel_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", "title": "Channel Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateExternalChannelLinksInput" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ExternalChannelOutput" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/creatives": { "get": { "tags": ["creatives"], "summary": "List Creatives", "operationId": "list_creatives_api_v1_creatives_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "target_channel_id", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "string", "format": "uuid" }, { "type": "null" } ], "title": "Target Channel Id" } }, { "name": "include_archived", "in": "query", "required": false, "schema": { "type": "boolean", "default": false, "title": "Include Archived" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetCreativesOutput" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "post": { "tags": ["creatives"], "summary": "Create Creative", "operationId": "create_creative_api_v1_creatives_post", "security": [ { "HTTPBearer": [] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateCreativeInput" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreativeOutput" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/creatives/{creative_id}": { "get": { "tags": ["creatives"], "summary": "Get Creative", "operationId": "get_creative_api_v1_creatives__creative_id__get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "creative_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", "title": "Creative Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreativeOutput" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "patch": { "tags": ["creatives"], "summary": "Update Creative", "operationId": "update_creative_api_v1_creatives__creative_id__patch", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "creative_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", "title": "Creative Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateCreativeInput" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreativeOutput" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "delete": { "tags": ["creatives"], "summary": "Delete Creative", "operationId": "delete_creative_api_v1_creatives__creative_id__delete", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "creative_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", "title": "Creative Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/placements": { "get": { "tags": ["placements"], "summary": "List Placements", "operationId": "list_placements_api_v1_placements_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "target_channel_id", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "string", "format": "uuid" }, { "type": "null" } ], "title": "Target Channel Id" } }, { "name": "external_channel_id", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "string", "format": "uuid" }, { "type": "null" } ], "title": "External Channel Id" } }, { "name": "creative_id", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "string", "format": "uuid" }, { "type": "null" } ], "title": "Creative Id" } }, { "name": "include_archived", "in": "query", "required": false, "schema": { "type": "boolean", "default": false, "title": "Include Archived" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetPlacementsOutput" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "post": { "tags": ["placements"], "summary": "Create Placement", "operationId": "create_placement_api_v1_placements_post", "security": [ { "HTTPBearer": [] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreatePlacementInput" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PlacementOutput" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/placements/{placement_id}": { "get": { "tags": ["placements"], "summary": "Get Placement", "operationId": "get_placement_api_v1_placements__placement_id__get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "placement_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", "title": "Placement Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PlacementOutput" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "patch": { "tags": ["placements"], "summary": "Update Placement", "operationId": "update_placement_api_v1_placements__placement_id__patch", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "placement_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", "title": "Placement Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdatePlacementInput" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PlacementOutput" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "delete": { "tags": ["placements"], "summary": "Delete Placement", "operationId": "delete_placement_api_v1_placements__placement_id__delete", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "placement_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", "title": "Placement Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/placements/{placement_id}/views/history": { "get": { "tags": ["views"], "summary": "Get Views History", "description": "Получить историю просмотров для закупа.", "operationId": "get_views_history_api_v1_placements__placement_id__views_history_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "placement_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", "title": "Placement Id" } }, { "name": "from_date", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ], "title": "From Date" } }, { "name": "to_date", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ], "title": "To Date" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetViewsHistoryOutput" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/placements/{placement_id}/views/fetch": { "post": { "tags": ["views"], "summary": "Fetch Views", "description": "Получить актуальные просмотры через Telegram API.", "operationId": "fetch_views_api_v1_placements__placement_id__views_fetch_post", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "placement_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", "title": "Placement Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FetchViewsManuallyOutput" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/placements/{placement_id}/views/manual": { "post": { "tags": ["views"], "summary": "Update Views Manually", "description": "Обновить просмотры вручную.", "operationId": "update_views_manually_api_v1_placements__placement_id__views_manual_post", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "placement_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", "title": "Placement Id" } }, { "name": "views_count", "in": "query", "required": true, "schema": { "type": "integer", "title": "Views Count" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PlacementOutput" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/analytics/placements": { "get": { "tags": ["analytics"], "summary": "Get Placements Analytics", "operationId": "get_placements_analytics_api_v1_analytics_placements_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "target_channel_id", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "string", "format": "uuid" }, { "type": "null" } ], "title": "Target Channel Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetPlacementsAnalyticsOutput" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/analytics/creatives": { "get": { "tags": ["analytics"], "summary": "Get Creatives Analytics", "operationId": "get_creatives_analytics_api_v1_analytics_creatives_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "target_channel_id", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "string", "format": "uuid" }, { "type": "null" } ], "title": "Target Channel Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetCreativesAnalyticsOutput" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/analytics/external-channels": { "get": { "tags": ["analytics"], "summary": "Get External Channels Analytics", "operationId": "get_external_channels_analytics_api_v1_analytics_external_channels_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "target_channel_id", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "string", "format": "uuid" }, { "type": "null" } ], "title": "Target Channel Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetExternalChannelsAnalyticsOutput" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/analytics/spending": { "get": { "tags": ["analytics"], "summary": "Get Spending Analytics", "operationId": "get_spending_analytics_api_v1_analytics_spending_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "target_channel_id", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "string", "format": "uuid" }, { "type": "null" } ], "title": "Target Channel Id" } }, { "name": "date_from", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ], "title": "Date From" } }, { "name": "date_to", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ], "title": "Date To" } }, { "name": "grouping", "in": "query", "required": false, "schema": { "$ref": "#/components/schemas/DateGrouping", "default": "day" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetSpendingAnalyticsOutput" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } } }, "components": { "schemas": { "ConnectTargetChanOutput": { "properties": { "id": { "type": "string", "format": "uuid", "title": "Id" }, "telegram_id": { "type": "integer", "title": "Telegram Id" }, "title": { "type": "string", "title": "Title" }, "username": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Username" }, "is_active": { "type": "boolean", "title": "Is Active" } }, "type": "object", "required": ["id", "telegram_id", "title", "username", "is_active"], "title": "ConnectTargetChanOutput" }, "CreateCreativeInput": { "properties": { "name": { "type": "string", "title": "Name" }, "text": { "type": "string", "title": "Text" }, "target_channel_id": { "type": "string", "format": "uuid", "title": "Target Channel Id" } }, "type": "object", "required": ["name", "text", "target_channel_id"], "title": "CreateCreativeInput" }, "CreateExternalChannelInput": { "properties": { "telegram_id": { "type": "integer", "title": "Telegram Id" }, "title": { "type": "string", "title": "Title" }, "username": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Username" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "subscribers_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Subscribers Count" }, "target_channel_ids": { "items": { "type": "string", "format": "uuid" }, "type": "array", "title": "Target Channel Ids" } }, "type": "object", "required": ["telegram_id", "title", "target_channel_ids"], "title": "CreateExternalChannelInput" }, "CreatePlacementInput": { "properties": { "target_channel_id": { "type": "string", "format": "uuid", "title": "Target Channel Id" }, "external_channel_id": { "type": "string", "format": "uuid", "title": "External Channel Id" }, "creative_id": { "type": "string", "format": "uuid", "title": "Creative Id" }, "placement_date": { "type": "string", "format": "date-time", "title": "Placement Date" }, "cost": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Cost" }, "comment": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Comment" }, "ad_post_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Ad Post Url" }, "invite_link_type": { "$ref": "#/components/schemas/InviteLinkType", "default": "public" } }, "type": "object", "required": [ "target_channel_id", "external_channel_id", "creative_id", "placement_date" ], "title": "CreatePlacementInput" }, "CreativeAnalyticsOutput": { "properties": { "id": { "type": "string", "format": "uuid", "title": "Id" }, "name": { "type": "string", "title": "Name" }, "placements_count": { "type": "integer", "title": "Placements Count" }, "total_cost": { "type": "number", "title": "Total Cost" }, "total_subscriptions": { "type": "integer", "title": "Total Subscriptions" }, "total_views": { "type": "integer", "title": "Total Views" }, "avg_cpf": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Avg Cpf" }, "avg_cpm": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Avg Cpm" } }, "type": "object", "required": [ "id", "name", "placements_count", "total_cost", "total_subscriptions", "total_views", "avg_cpf", "avg_cpm" ], "title": "CreativeAnalyticsOutput" }, "CreativeOutput": { "properties": { "id": { "type": "string", "format": "uuid", "title": "Id" }, "name": { "type": "string", "title": "Name" }, "text": { "type": "string", "title": "Text" }, "target_channel_id": { "type": "string", "format": "uuid", "title": "Target Channel Id" }, "target_channel_title": { "type": "string", "title": "Target Channel Title" }, "created_at": { "type": "string", "format": "date-time", "title": "Created At" }, "status": { "$ref": "#/components/schemas/CreativeStatus" }, "placements_count": { "type": "integer", "title": "Placements Count" } }, "type": "object", "required": [ "id", "name", "text", "target_channel_id", "target_channel_title", "created_at", "status", "placements_count" ], "title": "CreativeOutput" }, "CreativeStatus": { "type": "string", "enum": ["active", "archived"], "title": "CreativeStatus" }, "DateGrouping": { "type": "string", "enum": ["day", "week", "month", "quarter", "year"], "title": "DateGrouping" }, "ExternalChannelAnalyticsOutput": { "properties": { "id": { "type": "string", "format": "uuid", "title": "Id" }, "title": { "type": "string", "title": "Title" }, "username": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Username" }, "placements_count": { "type": "integer", "title": "Placements Count" }, "total_cost": { "type": "number", "title": "Total Cost" }, "total_subscriptions": { "type": "integer", "title": "Total Subscriptions" }, "total_views": { "type": "integer", "title": "Total Views" }, "avg_cpf": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Avg Cpf" }, "avg_cpm": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Avg Cpm" } }, "type": "object", "required": [ "id", "title", "username", "placements_count", "total_cost", "total_subscriptions", "total_views", "avg_cpf", "avg_cpm" ], "title": "ExternalChannelAnalyticsOutput" }, "ExternalChannelOutput": { "properties": { "id": { "type": "string", "format": "uuid", "title": "Id" }, "telegram_id": { "type": "integer", "title": "Telegram Id" }, "title": { "type": "string", "title": "Title" }, "username": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Username" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "subscribers_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Subscribers Count" } }, "type": "object", "required": [ "id", "telegram_id", "title", "username", "description", "subscribers_count" ], "title": "ExternalChannelOutput" }, "FetchViewsManuallyOutput": { "properties": { "placement_id": { "type": "string", "format": "uuid", "title": "Placement Id" }, "views_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Views Count" }, "views_availability": { "$ref": "#/components/schemas/PostViewsAvailability" }, "fetched_at": { "type": "string", "format": "date-time", "title": "Fetched At" }, "error_message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Error Message" } }, "type": "object", "required": [ "placement_id", "views_count", "views_availability", "fetched_at" ], "title": "FetchViewsManuallyOutput" }, "GetCreativesAnalyticsOutput": { "properties": { "creatives": { "items": { "$ref": "#/components/schemas/CreativeAnalyticsOutput" }, "type": "array", "title": "Creatives" } }, "type": "object", "required": ["creatives"], "title": "GetCreativesAnalyticsOutput" }, "GetCreativesOutput": { "properties": { "creatives": { "items": { "$ref": "#/components/schemas/CreativeOutput" }, "type": "array", "title": "Creatives" } }, "type": "object", "required": ["creatives"], "title": "GetCreativesOutput" }, "GetExternalChannelsAnalyticsOutput": { "properties": { "external_channels": { "items": { "$ref": "#/components/schemas/ExternalChannelAnalyticsOutput" }, "type": "array", "title": "External Channels" } }, "type": "object", "required": ["external_channels"], "title": "GetExternalChannelsAnalyticsOutput" }, "GetExternalChannelsOutput": { "properties": { "external_channels": { "items": { "$ref": "#/components/schemas/ExternalChannelOutput" }, "type": "array", "title": "External Channels" } }, "type": "object", "required": ["external_channels"], "title": "GetExternalChannelsOutput" }, "GetPlacementsAnalyticsOutput": { "properties": { "placements": { "items": { "$ref": "#/components/schemas/PlacementAnalyticsOutput" }, "type": "array", "title": "Placements" } }, "type": "object", "required": ["placements"], "title": "GetPlacementsAnalyticsOutput" }, "GetPlacementsOutput": { "properties": { "placements": { "items": { "$ref": "#/components/schemas/PlacementOutput" }, "type": "array", "title": "Placements" } }, "type": "object", "required": ["placements"], "title": "GetPlacementsOutput" }, "GetSpendingAnalyticsOutput": { "properties": { "total_cost": { "type": "number", "title": "Total Cost" }, "total_subscriptions": { "type": "integer", "title": "Total Subscriptions" }, "total_views": { "type": "integer", "title": "Total Views" }, "avg_cpf": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Avg Cpf" }, "avg_cpm": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Avg Cpm" }, "chart_data": { "items": { "$ref": "#/components/schemas/SpendingDataPoint" }, "type": "array", "title": "Chart Data" } }, "type": "object", "required": [ "total_cost", "total_subscriptions", "total_views", "avg_cpf", "avg_cpm", "chart_data" ], "title": "GetSpendingAnalyticsOutput" }, "GetUserTargetChansOutput": { "properties": { "target_channels": { "items": { "$ref": "#/components/schemas/ConnectTargetChanOutput" }, "type": "array", "title": "Target Channels" } }, "type": "object", "required": ["target_channels"], "title": "GetUserTargetChansOutput" }, "GetViewsHistoryOutput": { "properties": { "histories": { "items": { "$ref": "#/components/schemas/PlacementViewsHistoryOutput" }, "type": "array", "title": "Histories" } }, "type": "object", "required": ["histories"], "title": "GetViewsHistoryOutput", "description": "История просмотров." }, "HTTPValidationError": { "properties": { "detail": { "items": { "$ref": "#/components/schemas/ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" }, "InviteLinkType": { "type": "string", "enum": ["public", "approval"], "title": "InviteLinkType" }, "PlacementAnalyticsOutput": { "properties": { "id": { "type": "string", "format": "uuid", "title": "Id" }, "target_channel_id": { "type": "string", "format": "uuid", "title": "Target Channel Id" }, "target_channel_title": { "type": "string", "title": "Target Channel Title" }, "external_channel_id": { "type": "string", "format": "uuid", "title": "External Channel Id" }, "external_channel_title": { "type": "string", "title": "External Channel Title" }, "creative_id": { "type": "string", "format": "uuid", "title": "Creative Id" }, "creative_name": { "type": "string", "title": "Creative Name" }, "placement_date": { "type": "string", "format": "date-time", "title": "Placement Date" }, "cost": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Cost" }, "subscriptions_count": { "type": "integer", "title": "Subscriptions Count" }, "views_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Views Count" }, "cpf": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Cpf" }, "cpm": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Cpm" } }, "type": "object", "required": [ "id", "target_channel_id", "target_channel_title", "external_channel_id", "external_channel_title", "creative_id", "creative_name", "placement_date", "cost", "subscriptions_count", "views_count", "cpf", "cpm" ], "title": "PlacementAnalyticsOutput" }, "PlacementOutput": { "properties": { "id": { "type": "string", "format": "uuid", "title": "Id" }, "target_channel_id": { "type": "string", "format": "uuid", "title": "Target Channel Id" }, "target_channel_title": { "type": "string", "title": "Target Channel Title" }, "external_channel_id": { "type": "string", "format": "uuid", "title": "External Channel Id" }, "external_channel_title": { "type": "string", "title": "External Channel Title" }, "creative_id": { "type": "string", "format": "uuid", "title": "Creative Id" }, "creative_name": { "type": "string", "title": "Creative Name" }, "placement_date": { "type": "string", "format": "date-time", "title": "Placement Date" }, "cost": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Cost" }, "comment": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Comment" }, "ad_post_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Ad Post Url" }, "invite_link_type": { "$ref": "#/components/schemas/InviteLinkType" }, "invite_link": { "type": "string", "title": "Invite Link" }, "status": { "$ref": "#/components/schemas/PlacementStatus" }, "subscriptions_count": { "type": "integer", "title": "Subscriptions Count" }, "views_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Views Count" }, "views_availability": { "$ref": "#/components/schemas/PostViewsAvailability" }, "last_views_fetch_at": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ], "title": "Last Views Fetch At" }, "created_at": { "type": "string", "format": "date-time", "title": "Created At" } }, "type": "object", "required": [ "id", "target_channel_id", "target_channel_title", "external_channel_id", "external_channel_title", "creative_id", "creative_name", "placement_date", "cost", "comment", "ad_post_url", "invite_link_type", "invite_link", "status", "subscriptions_count", "views_count", "views_availability", "last_views_fetch_at", "created_at" ], "title": "PlacementOutput" }, "PlacementStatus": { "type": "string", "enum": ["active", "archived"], "title": "PlacementStatus" }, "PlacementViewsHistoryOutput": { "properties": { "id": { "type": "string", "format": "uuid", "title": "Id" }, "placement_id": { "type": "string", "format": "uuid", "title": "Placement Id" }, "views_count": { "type": "integer", "title": "Views Count" }, "fetched_at": { "type": "string", "format": "date-time", "title": "Fetched At" }, "created_at": { "type": "string", "format": "date-time", "title": "Created At" } }, "type": "object", "required": [ "id", "placement_id", "views_count", "fetched_at", "created_at" ], "title": "PlacementViewsHistoryOutput", "description": "История просмотров placement." }, "PostViewsAvailability": { "type": "string", "enum": ["unknown", "available", "unavailable", "manual"], "title": "PostViewsAvailability", "description": "Статус доступности получения просмотров поста." }, "SpendingDataPoint": { "properties": { "period": { "type": "string", "title": "Period" }, "cost": { "type": "number", "title": "Cost" }, "subscriptions": { "type": "integer", "title": "Subscriptions" }, "views": { "type": "integer", "title": "Views" }, "cpf": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Cpf" }, "cpm": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Cpm" } }, "type": "object", "required": ["period", "cost", "subscriptions", "views", "cpf", "cpm"], "title": "SpendingDataPoint" }, "UpdateCreativeInput": { "properties": { "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name" }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Text" }, "status": { "anyOf": [ { "$ref": "#/components/schemas/CreativeStatus" }, { "type": "null" } ] } }, "type": "object", "title": "UpdateCreativeInput" }, "UpdateExternalChannelInput": { "properties": { "title": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Title" }, "username": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Username" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "subscribers_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Subscribers Count" } }, "type": "object", "title": "UpdateExternalChannelInput" }, "UpdateExternalChannelLinksInput": { "properties": { "add_target_channel_ids": { "items": { "type": "string", "format": "uuid" }, "type": "array", "title": "Add Target Channel Ids", "default": [] }, "remove_target_channel_ids": { "items": { "type": "string", "format": "uuid" }, "type": "array", "title": "Remove Target Channel Ids", "default": [] } }, "type": "object", "title": "UpdateExternalChannelLinksInput" }, "UpdatePlacementInput": { "properties": { "placement_date": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ], "title": "Placement Date" }, "cost": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Cost" }, "comment": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Comment" }, "status": { "anyOf": [ { "$ref": "#/components/schemas/PlacementStatus" }, { "type": "null" } ] } }, "type": "object", "title": "UpdatePlacementInput" }, "UserOutput": { "properties": { "id": { "type": "string", "format": "uuid", "title": "Id" }, "telegram_id": { "type": "integer", "title": "Telegram Id" }, "username": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Username" } }, "type": "object", "required": ["id", "telegram_id", "username"], "title": "UserOutput" }, "ValidateLoginTokenOutput": { "properties": { "access_token": { "type": "string", "title": "Access Token" } }, "type": "object", "required": ["access_token"], "title": "ValidateLoginTokenOutput" }, "ValidationError": { "properties": { "loc": { "items": { "anyOf": [ { "type": "string" }, { "type": "integer" } ] }, "type": "array", "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": ["loc", "msg", "type"], "title": "ValidationError" } }, "securitySchemes": { "HTTPBearer": { "type": "http", "scheme": "bearer" } } } }