{"openapi":"3.1.0","info":{"title":"Telegram service API.","version":"1.0.0"},"servers":[{"url":"https://3seller.com","description":"Generated server url"}],"paths":{"/api/v1/funnels/{id}/steps/{stepId}":{"put":{"tags":["Funnel API Resource"],"summary":"Update a funnel step.","description":"Updates message text, delivery delay (delaySeconds — offset from the previous step) and/or inline buttons JSON of a specific step. Media is updated via a separate endpoint.","operationId":"updateStep","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"stepId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateStepRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}},"delete":{"tags":["Funnel API Resource"],"summary":"Delete a funnel step.","description":"Deletes a step together with its attached media. Ordering of the remaining steps is recomputed automatically.","operationId":"deleteStep","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"stepId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/funnels/{id}/status":{"put":{"tags":["Funnel API Resource"],"summary":"Change funnel status.","description":"Switches funnel status (ACTIVE / PAUSED / STOPPED). When PAUSED, new subscribers stop at the current step and message delivery freezes; ACTIVE resumes it.","operationId":"updateStatus","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateStatusRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/funnels/{id}/landings/{lpId}/enabled":{"put":{"tags":["Funnel API Resource"],"summary":"Enable or disable a landing page.","description":"Toggles landing visibility: ACTIVE (publicly accessible) ↔ DISABLED (returns 404 to visitors). Body: { \"enabled\": true|false }.","operationId":"toggleLanding","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"lpId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToggleLandingRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/autoposting/configs/{id}/stop":{"put":{"tags":["Autoposting"],"summary":"Stop autoposting for a config.","description":"Sets the config status to STOPPED. No more posts will be generated until started again.","operationId":"stopConfig","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Config stopped.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Config not found or does not belong to user.","content":{"application/json":{"schema":{"type":"string"}}}},"401":{"description":"Wrong authorization.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}},"/api/v1/autoposting/configs/{id}/start":{"put":{"tags":["Autoposting"],"summary":"Start autoposting for a config.","description":"Sets the config status to RUNNING. Posts will be generated and published according to the schedule.","operationId":"startConfig","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Config started.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Config not found or does not belong to user.","content":{"application/json":{"schema":{"type":"string"}}}},"401":{"description":"Wrong authorization.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}},"/api/v1/additional-accounts/{id}/status":{"put":{"tags":["Additional Accounts"],"summary":"Toggle additional account status between WAITING and PASSIVE.","description":"Toggles the status of an additional account: WAITING becomes PASSIVE and vice versa. Accounts with ACTIVE status cannot be toggled (they are currently used in a distribution).","operationId":"toggleAdditionalAccountStatus","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Status toggled.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Account not found, does not belong to user, or is ACTIVE.","content":{"application/json":{"schema":{"type":"string"}}}},"401":{"description":"Wrong authorization.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}},"/api/v1/additional-accounts/{id}/proxy":{"put":{"tags":["Additional Accounts"],"summary":"Change proxy for an additional account.","description":"Associates a proxy with an additional account. Pass proxyId as null or -1 to remove proxy.","operationId":"changeAdditionalAccountProxy","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeProxyRequest"}}},"required":true},"responses":{"200":{"description":"Proxy changed.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Account or proxy not found, or does not belong to user.","content":{"application/json":{"schema":{"type":"string"}}}},"401":{"description":"Wrong authorization.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}},"/api/v1/additional-accounts/substitution":{"put":{"tags":["Additional Accounts"],"summary":"Toggle account substitution during distribution.","description":"Toggles the global setting that controls whether additional accounts can be used as substitutes during distributions.","operationId":"toggleSubstitutionEnabled","responses":{"200":{"description":"Substitution setting toggled.","content":{"application/json":{"schema":{"type":"string"}}}},"401":{"description":"Wrong authorization.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}},"/api/v1/funnels":{"get":{"tags":["Funnel API Resource"],"summary":"List all funnels of the authenticated user.","description":"Returns every funnel owned by the caller with aggregated subscriber counts for the last 24 hours, 7 and 30 days. Funnel steps are not included — use the dedicated endpoint.","operationId":"getFunnels","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FunnelResponse"}}}}}}},"post":{"tags":["Funnel API Resource"],"summary":"Create a new funnel.","description":"Creates a funnel with the given name and Telegram bot token. The token is validated against Telegram API; on failure returns 400.","operationId":"createFunnel","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFunnelRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/funnels/{id}/steps/{stepId}/media":{"post":{"tags":["Funnel API Resource"],"summary":"Upload media to a step.","description":"Attaches a file (photo / video / document) to a step. Limits: 10 MB per file and 10 MB total across the whole funnel. Media type is derived from Content-Type automatically.","operationId":"uploadMedia","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"stepId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]}}}},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}},"delete":{"tags":["Funnel API Resource"],"summary":"Remove media from a step.","description":"Detaches and deletes the legacy (single-slot) media of a step. Multi-media album files are managed via /media-files endpoints. The step itself remains and will be sent as a plain text message.","operationId":"removeMedia","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"stepId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/funnels/{id}/steps/{stepId}/media-files":{"post":{"tags":["Funnel API Resource"],"summary":"Add a media file to a step album.","description":"Appends a file (photo / document) to the step media album. UI-parity endpoint: a step may hold up to 10 media files (Telegram album cap). Per-file limit 10 MB, per-funnel total 10 MB. On success returns the updated step with the full mediaFiles list.","operationId":"addStepMediaFile","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"stepId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]}}}},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/funnels/{id}/settings/notify":{"post":{"tags":["Funnel API Resource"],"summary":"Configure owner notifications about new subscribers.","description":"Enables per-subscriber alerts to the funnel owner. Set regenerateLink=true to rotate the notify deep-link (invalidates the previous one). Returns the current deep-link URL and whether an owner TG chat is linked.","operationId":"updateNotifySettings","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotifySettingsRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/funnels/{id}/settings/loop":{"post":{"tags":["Funnel API Resource"],"summary":"Configure funnel loop after last step.","description":"Enables cyclic re-delivery of steps starting from loopFromStep (1-based) after a subscriber reaches the end. loopMaxCount=0 means infinite loops. Passing enabled=false disables the loop; loopFromStep is ignored in that case.","operationId":"updateLoopSettings","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoopSettingsRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/funnels/{id}/settings/default-reply":{"post":{"tags":["Funnel API Resource"],"summary":"Configure default reply for unrecognized messages.","description":"Sets the bot's fallback behavior when a subscriber sends a message the funnel does not expect. Either a static replyText or an aiPrompt (for AI-generated response) must be provided when enabled=true.","operationId":"updateDefaultReplySettings","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DefaultReplySettingsRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/funnels/{id}/settings/contact-capture":{"post":{"tags":["Funnel API Resource"],"summary":"Configure contact-capture form.","description":"Enables a capture form that asks the subscriber for a phone/email after step afterStepOrder (1-based) using the given prompt. Disable by sending enabled=false.","operationId":"updateContactCaptureSettings","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactCaptureSettingsRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/funnels/{id}/settings/consent":{"post":{"tags":["Funnel API Resource"],"summary":"Configure subscriber consent (opt-in) settings.","description":"Toggles the consent prompt shown before the funnel starts, with an optional policy URL. When disabling with convertPending=true, existing PENDING_CONSENT subscribers are auto-converted to ACTIVE (their count is returned in the response body).","operationId":"updateConsentSettings","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsentSettingsRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/funnels/{id}/landings":{"get":{"tags":["Funnel API Resource"],"summary":"List landing pages of a funnel.","description":"Returns every landing page (ACTIVE and DISABLED, excluding DELETED) belonging to the funnel, most recent first.","operationId":"listLandings","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LandingResponse"}}}}}}},"post":{"tags":["Funnel API Resource"],"summary":"Generate an AI landing page for the funnel.","description":"Generates a single-file HTML landing page via AI (paid, non-refundable on success). Body: title, prompt (required), ctaUrl and ctaText (optional). On 429 (rate-limited) the Retry-After header is set. Success returns the created landing summary including its public URL.","operationId":"generateLanding","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateLandingRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/funnels/{id}/chat":{"post":{"tags":["Funnel API Resource"],"summary":"Send a message to the AI funnel editor.","description":"Sends a user message to the AI assistant that builds/edits funnel steps. Rate-limited per user (default 20/hour) and charged from the balance per call. On AI failure the charge is refunded. Returns the AI reply and the current step list.","operationId":"sendChatMessage","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatMessageRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/funnels/{id}/broadcast":{"post":{"tags":["Funnel API Resource"],"summary":"Broadcast a message to all funnel subscribers.","description":"Sends a one-shot message (text + optional inline buttons JSON) to every active subscriber of the funnel. Each delivered message is billed separately.","operationId":"broadcast","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BroadcastRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/distribution/stop":{"post":{"tags":["Distribution"],"summary":"Stops launched distribution for given phone number.","description":"Call this method to stop running distribution for your account's authenticated phone number.","operationId":"stopDistribution","responses":{"200":{"description":"Response with result of distribution stop.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributionResponse"}}}},"401":{"description":"Wrong authorization or too many unsuccessful auth requests (more than 20 in a row from one IP).","content":{"application/json":{"schema":{"type":"string"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}},"/api/v1/distribution/start":{"post":{"tags":["Distribution"],"summary":"Launches new distribution of certain type for given authenticated in Telegram phone number as multipart/form-data request.","description":"Call this method to create and start new distribution of one of allowed types. Pass a JSON object with parameters to construct new distribution. And an optional file as an attachment if needed. If distribution is already running for that phone number (or number is occupied), a corresponding status will be returned. You can use CURL similar to below to test this endpoint as OpenAPI generator has a bug in setting form request part type for Swagger: \\\ncurl --request POST \"https://3seller.com/api/v1/distribution/start\" --header \"Accept: application/json\" --header \"Authorization: Basic YOUR_BASE64_CREDENTIALS\" --form \"request={\\\"phone\\\": \\\"123456789\\\", \\\"message\\\": \\\"hello\\\", \\\"type\\\": \\\"CHATS\\\", \\\"chatsLinks\\\": [\\\"https://t.me/test\\\"], \\\"repeatDelay\\\": 0.0};type=application/json;charset=utf-8\"","operationId":"startDistribution","parameters":[{"name":"request","in":"query","description":"JSON with distribution params. Use descendants of BaseRequest."},{"name":"attachments","in":"query","description":"Attachment files for distribution, 10MB max size, 10 files max.","schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"request":{"description":"JSON with distribution params. Use descendants of BaseRequest.","oneOf":[{"$ref":"#/components/schemas/BotRepostDistributionRequest"},{"$ref":"#/components/schemas/ChatUsersDistributionRequest"},{"$ref":"#/components/schemas/ChatUsersParsingDistributionRequest"},{"$ref":"#/components/schemas/ChatsDistributionRequest"},{"$ref":"#/components/schemas/ChatsInvitesDistributionRequest"},{"$ref":"#/components/schemas/ChatsListeningDistributionRequest"},{"$ref":"#/components/schemas/CommentsDistributionRequest"},{"$ref":"#/components/schemas/JoiningDistributionRequest"},{"$ref":"#/components/schemas/LocationDistributionRequest"},{"$ref":"#/components/schemas/PrivateChatsDistributionRequest"},{"$ref":"#/components/schemas/ReactionsDistributionRequest"},{"$ref":"#/components/schemas/UsernamesDistributionRequest"},{"$ref":"#/components/schemas/WatchStoriesDistributionRequest"}]},"attachments":{"type":"string","description":"Attachment files for distribution, 10MB max size, 10 files max."}},"required":["request"]}}}},"responses":{"200":{"description":"Response with status of distribution creation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributionResponse"}}}},"400":{"description":"Wrong distribution parameters or distribution is already running or provided phone already occupied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributionResponse"}}}},"401":{"description":"Wrong authorization or too many unsuccessful auth requests (more than 20 in a row from one IP).","content":{"application/json":{"schema":{"type":"string"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}},"/api/v1/distribution/start-json":{"post":{"tags":["Distribution"],"summary":"Launches new distribution of certain type for given authenticated in Telegram phone number as application/json request.","description":"This is another version of start distribution endpoint. If you're experiencing issues with multipart/form-data request use this application/json method. Call it to create and start new distribution of one of allowed types. Pass a JSON object with parameters to construct new distribution. If distribution is already running for that phone number (or number is occupied), a corresponding status will be returned.","operationId":"startDistribution_1","parameters":[{"name":"request","in":"query","description":"JSON with distribution params. Use descendants of BaseRequest."}],"requestBody":{"content":{"application/json":{"schema":{"description":"JSON with distribution params. Use descendants of BaseRequest.","oneOf":[{"$ref":"#/components/schemas/BotRepostDistributionRequest"},{"$ref":"#/components/schemas/ChatUsersDistributionRequest"},{"$ref":"#/components/schemas/ChatUsersParsingDistributionRequest"},{"$ref":"#/components/schemas/ChatsDistributionRequest"},{"$ref":"#/components/schemas/ChatsInvitesDistributionRequest"},{"$ref":"#/components/schemas/ChatsListeningDistributionRequest"},{"$ref":"#/components/schemas/CommentsDistributionRequest"},{"$ref":"#/components/schemas/JoiningDistributionRequest"},{"$ref":"#/components/schemas/LocationDistributionRequest"},{"$ref":"#/components/schemas/PrivateChatsDistributionRequest"},{"$ref":"#/components/schemas/ReactionsDistributionRequest"},{"$ref":"#/components/schemas/UsernamesDistributionRequest"},{"$ref":"#/components/schemas/WatchStoriesDistributionRequest"}]}}},"required":true},"responses":{"200":{"description":"Response with status of distribution creation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributionResponse"}}}},"400":{"description":"Wrong distribution parameters or distribution is already running or provided phone already occupied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributionResponse"}}}},"401":{"description":"Wrong authorization or too many unsuccessful auth requests (more than 20 in a row from one IP).","content":{"application/json":{"schema":{"type":"string"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}},"/api/v1/autoposting/configs":{"get":{"tags":["Autoposting"],"summary":"Get all autoposting configs with statistics.","description":"Returns all autoposting configurations for the authenticated user with post counts and cost statistics.","operationId":"getConfigs","responses":{"200":{"description":"List of autoposting configs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutopostingConfigListResponse"}}}},"401":{"description":"Wrong authorization.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]},"post":{"tags":["Autoposting"],"summary":"Create or update an autoposting config.","description":"Creates a new autoposting config or updates an existing one. Pass configId=null to create a new config. The target channel name accepts various formats: 'my_channel', '@my_channel', 'https://t.me/my_channel'. The bot must be added as an administrator to the target channel.","operationId":"saveConfig","parameters":[{"name":"request","in":"query","description":"JSON with autoposting config params.","schema":{"$ref":"#/components/schemas/SaveAutopostingConfigRequest"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveAutopostingConfigRequest"}}},"required":true},"responses":{"200":{"description":"Saved config.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutopostingConfigResponse"}}}},"400":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutopostingConfigResponse"}}}},"401":{"description":"Wrong authorization.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}},"/api/v1/auto-answer/save":{"post":{"tags":["Auto Answer"],"summary":"Sets app user's auto answer config.","description":"Call this method to configure auto answer setup for your authenticated app user.","operationId":"setAutoAnswer","parameters":[{"name":"request","in":"query","description":"JSON with auto answer params to save.","schema":{"$ref":"#/components/schemas/SetAutoAnswerConfigRequest"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetAutoAnswerConfigRequest"}}},"required":true},"responses":{"200":{"description":"Response with information about auto answer setup.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoAnswerConfigResponse"}}}},"401":{"description":"Wrong authorization or too many unsuccessful auth requests (more than 20 in a row from one IP).","content":{"application/json":{"schema":{"type":"string"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}},"/api/v1/auth":{"post":{"tags":["Authentication"],"summary":"Tries to authenticate (to be able to run distribution further) and return auth states of Telegram client for given phone number.","description":"This method MUST be called before any of methods that start any distribution! Send JSON auth-request with phone number (in 'phone' field) you wish to authenticate in Telegram. API will try to auth it and most likely respond with one the following statuses: CODE_NEEDED/PASSWORD_NEEDED/AUTHENTICATED. In case CODE_NEEDED is returned - acquire code from any Telegram app and send it again in 'code' field. In case PASSWORD_NEEDED is returned - send your password in 'password' field in next request. In case INITIATING is returned - wait few seconds and repeat auth request for that phone. In case UNKNOWN is returned - logout this phone and repeat auth process from beginning. Pay attention: field 'phone' is required in every request and must be always present!","operationId":"authenticateClient","parameters":[{"name":"request","in":"query","description":"JSON with auth params.","schema":{"$ref":"#/components/schemas/AuthRequest"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthRequest"}}},"required":true},"responses":{"200":{"description":"Response with phone and its auth state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"}}}},"400":{"description":"Wrong request. Most likely will be returned when phone is already occupied for Telegram client within application for given username ('status' : 'ANOTHER_OCCUPIED'). In this case try to repeat request in a minute","content":{"application/json":{"schema":{"type":"string"}}}},"401":{"description":"Wrong authorization or too many unsuccessful auth requests (more than 20 in a row from one IP).","content":{"application/json":{"schema":{"type":"string"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}},"/api/v1/auth/logout":{"post":{"tags":["Authentication"],"summary":"Tries to logout Telegram client of authenticated user.","description":"Searches for any logged-in Telegram client of authenticated user. Returns OK status in case if logout attempt was made, NOK - if Telegram client not found for this user or distribution is running for it.","operationId":"logoutClient","responses":{"200":{"description":"Response with auth logout result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthLogoutResponse"}}}},"401":{"description":"Wrong authorization or too many unsuccessful auth requests (more than 20 in a row from one IP).","content":{"application/json":{"schema":{"type":"string"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}},"/api/v1/additional-accounts/{id}/main":{"post":{"tags":["Additional Accounts"],"summary":"Set an additional account as the main account.","description":"Substitutes the current main Telegram account with the specified additional account. The old main account becomes an additional account.","operationId":"setAdditionalAccountAsMain","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Main account substituted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Account not found, does not belong to user, or substitution failed.","content":{"application/json":{"schema":{"type":"string"}}}},"401":{"description":"Wrong authorization.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}},"/api/v1/funnels/{id}":{"get":{"tags":["Funnel API Resource"],"summary":"Get funnel details by ID.","description":"Returns funnel data together with its steps (ordered by stepOrder). Returns 404 if the funnel does not exist or is not owned by the caller.","operationId":"getFunnel","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}},"delete":{"tags":["Funnel API Resource"],"summary":"Delete a funnel.","description":"Deletes the funnel together with all its steps, media, subscribers and AI conversation history. Irreversible.","operationId":"deleteFunnel","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/funnels/{id}/subscribers":{"get":{"tags":["Funnel API Resource"],"summary":"List funnel subscribers (paginated).","description":"Returns a paginated list of subscribers of the given funnel. Query params: page (default 0), size (default 50). Each entry contains TG chat id, username, first name, status and current step order.","operationId":"getSubscribers","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":0}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":50}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/funnels/{id}/steps":{"get":{"tags":["Funnel API Resource"],"summary":"Get funnel steps.","description":"Returns all steps of the funnel ordered by stepOrder. For each step: message text, delivery delay, inline buttons JSON and a flag indicating whether media is attached.","operationId":"getSteps","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FunnelStepResponse"}}}}}}}},"/api/v1/funnels/{id}/steps/{stepId}/media-files/{mediaId}":{"get":{"tags":["Funnel API Resource"],"summary":"Download a media file from a step album.","description":"Streams the raw bytes of a single media file. Response Content-Type is inferred from the stored media type (image/jpeg for photos, application/octet-stream otherwise).","operationId":"getStepMediaFile","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"stepId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"mediaId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}},"delete":{"tags":["Funnel API Resource"],"summary":"Delete one media file from a step album.","description":"Removes a specific media file from the step by its ID. Other files in the album are preserved.","operationId":"removeStepMediaFile","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"stepId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"mediaId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/funnels/{id}/landings/status":{"get":{"tags":["Funnel API Resource"],"summary":"Check if a landing generation is currently in progress.","description":"Returns { inProgress: boolean }. Useful for polling during a long-running AI generation.","operationId":"landingStatus","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/funnels/{id}/chat/history":{"get":{"tags":["Funnel API Resource"],"summary":"Get AI conversation history for a funnel.","description":"Returns the whole conversation with the AI funnel editor (role, content, createdAt) in chronological order.","operationId":"getChatHistory","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/funnels/costs":{"get":{"tags":["Funnel API Resource"],"summary":"Get current funnel pricing and rate limits.","description":"Returns per-call cost of the AI editor message, per-broadcast delivery cost and the max number of AI messages per hour. Values come from server configuration.","operationId":"getCosts","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/FunnelCostInfoResponse"}}}}}}},"/api/v1/distribution/status":{"get":{"tags":["Distribution"],"summary":"Requests distribution information and status for your authenticated in Telegram phone number.","description":"Call this method to get info about running distribution for your authenticated phone number. In case distribution was not started a corresponding status will be returned.","operationId":"getDistribution","responses":{"200":{"description":"Response with information about distribution data and status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributionResponse"}}}},"401":{"description":"Wrong authorization or too many unsuccessful auth requests (more than 20 in a row from one IP).","content":{"application/json":{"schema":{"type":"string"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}},"/api/v1/distribution/result":{"get":{"tags":["Distribution"],"summary":"Gets distribution result for given phone number.","description":"Call this method to get latest distribution result for your account's authenticated phone number.","operationId":"getDistributionResult","responses":{"200":{"description":"Response with result of latest distribution.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributionResultResponse"}}}},"401":{"description":"Wrong authorization or too many unsuccessful auth requests (more than 20 in a row from one IP).","content":{"application/json":{"schema":{"type":"string"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}},"/api/v1/balance":{"get":{"tags":["Balance"],"summary":"Requests balance value for your authenticated app user.","description":"Call this method to get info about current money balance for your authenticated app user.","operationId":"getBalance","responses":{"200":{"description":"Response with information about current balance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalanceResponse"}}}},"401":{"description":"Wrong authorization or too many unsuccessful auth requests (more than 20 in a row from one IP).","content":{"application/json":{"schema":{"type":"string"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}},"/api/v1/autoposting/bot-link":{"get":{"tags":["Autoposting"],"summary":"Get moderation bot deep link.","description":"Returns a personalized deep link to the moderation Telegram bot. The user should open this link in Telegram to link their account for post moderation.","operationId":"getBotLink","responses":{"200":{"description":"Bot link response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutopostingBotLinkResponse"}}}},"401":{"description":"Wrong authorization.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}},"/api/v1/auto-answer/get-setup":{"get":{"tags":["Auto Answer"],"summary":"Requests app user's auto answer setup.","description":"Call this method to get info about auto answer setup for your authenticated app user.","operationId":"getAutoAnswerStatus","responses":{"200":{"description":"Response with information about auto answer setup.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoAnswerConfigResponse"}}}},"401":{"description":"Wrong authorization or too many unsuccessful auth requests (more than 20 in a row from one IP).","content":{"application/json":{"schema":{"type":"string"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}},"/api/v1/auth/status":{"get":{"tags":["Authentication"],"summary":"Gets authentication status of Telegram client for application user.","description":"Call this method to get actual auth status of Telegram client for application user.","operationId":"getClientStatus","responses":{"200":{"description":"Response with telegram client status for app user's authenticated phone.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"}}}},"401":{"description":"Wrong authorization or too many unsuccessful auth requests (more than 20 in a row from one IP).","content":{"application/json":{"schema":{"type":"string"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}},"/api/v1/additional-accounts":{"get":{"tags":["Additional Accounts"],"summary":"Get list of additional accounts with substitution setting.","description":"Returns all additional accounts for the authenticated user along with the account substitution enabled flag.","operationId":"getAdditionalAccounts","responses":{"200":{"description":"List of additional accounts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdditionalAccountsListResponse"}}}},"401":{"description":"Wrong authorization.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]},"delete":{"tags":["Additional Accounts"],"summary":"Delete all additional accounts.","description":"Deletes all additional accounts for the authenticated user.","operationId":"deleteAllAdditionalAccounts","responses":{"200":{"description":"All accounts deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"401":{"description":"Wrong authorization.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}},"/api/v1/funnels/{id}/landings/{lpId}":{"delete":{"tags":["Funnel API Resource"],"summary":"Delete a landing page.","description":"Marks the landing page as DELETED and removes its file from disk. Irreversible.","operationId":"deleteLanding","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"lpId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/autoposting/configs/{id}":{"delete":{"tags":["Autoposting"],"summary":"Delete an autoposting config.","description":"Permanently deletes an autoposting config and all its source channel associations.","operationId":"deleteConfig","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Config deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Config not found or does not belong to user.","content":{"application/json":{"schema":{"type":"string"}}}},"401":{"description":"Wrong authorization.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}},"/api/v1/additional-accounts/{id}":{"delete":{"tags":["Additional Accounts"],"summary":"Delete a single additional account.","description":"Logs out and deletes a single additional account by its ID. The account must belong to the authenticated user.","operationId":"deleteAdditionalAccount","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Account deleted successfully.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Account not found or does not belong to user.","content":{"application/json":{"schema":{"type":"string"}}}},"401":{"description":"Wrong authorization.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"BasicAuth":[]}]}}},"components":{"schemas":{"UpdateStepRequest":{"type":"object","properties":{"messageText":{"type":"string"},"delaySeconds":{"type":"integer","format":"int64"},"buttonsJson":{"type":"string"}}},"UpdateStatusRequest":{"type":"object","properties":{"status":{"type":"string"}}},"ToggleLandingRequest":{"type":"object","properties":{"enabled":{"type":"boolean"}}},"ChangeProxyRequest":{"type":"object","description":"Change proxy request for additional account","properties":{"proxyId":{"type":"integer","format":"int64","description":"Proxy ID to assign, pass null or -1 to remove proxy"}}},"CreateFunnelRequest":{"type":"object","properties":{"name":{"type":"string"},"botToken":{"type":"string"}}},"NotifySettingsRequest":{"type":"object","properties":{"enabled":{"type":"boolean"},"regenerateLink":{"type":"boolean"}}},"LoopSettingsRequest":{"type":"object","properties":{"enabled":{"type":"boolean"},"loopFromStep":{"type":"integer","format":"int32"},"loopMaxCount":{"type":"integer","format":"int32"}}},"DefaultReplySettingsRequest":{"type":"object","properties":{"enabled":{"type":"boolean"},"replyText":{"type":"string"},"aiPrompt":{"type":"string"}}},"ContactCaptureSettingsRequest":{"type":"object","properties":{"enabled":{"type":"boolean"},"afterStepOrder":{"type":"integer","format":"int32"},"prompt":{"type":"string"}}},"ConsentSettingsRequest":{"type":"object","properties":{"enabled":{"type":"boolean"},"consentText":{"type":"string"},"policyUrl":{"type":"string"},"convertPending":{"type":"boolean"}}},"GenerateLandingRequest":{"type":"object","properties":{"title":{"type":"string"},"prompt":{"type":"string"},"ctaUrl":{"type":"string"},"ctaText":{"type":"string"}}},"ChatMessageRequest":{"type":"object","properties":{"message":{"type":"string"}}},"BroadcastRequest":{"type":"object","properties":{"text":{"type":"string"},"buttonsJson":{"type":"string"}}},"DistributionResponse":{"type":"object","properties":{"description":{"type":"string","description":"Response description"},"status":{"type":"string","description":"Status for distribution","enum":["APP_INITIALIZING","LAUNCH_ATTEMPT","STOP_ATTEMPT","WRONG_OR_OCCUPIED","WRONG_FILE_SIZE","RUNNING","NOT_LAUNCHED","UNKNOWN"]}}},"BaseRequest":{"type":"object","description":"Abstracts any distribution JSON request. Distinguish distribution by type parameter.","discriminator":{"propertyName":"type"},"properties":{"phone":{"type":"string","description":"Authenticated in Telegram phone to start distribution"},"type":{"type":"string","description":"Distribution type. Possible values: CHATS - to send message to chats, CHAT_USERS - to send message to users of particular chat, PRIVATE_CHATS - to send message to user's account private chats or groups, USERNAMES_PHONES - to send message by list of usernames/phones/Telegram user IDs, COMMENTS - to send message as comment by list of channels, LISTENING - to send message to new events of account group chats that application listens to, REACTIONS - to send reactions for messages by list of chats, CHATS_INVITES - to send users' invitations to chat, STORIES - to watch users' stories from particular chat and optionally like them, BOT_REPOST - to repost bot message to other chats, LOCATION - to process nearby chats (API is deprecated and won't work!), JOINING - to join (leave) chats, USERS_PARSING - to parse users by given criteria in the particular chat.","enum":["PRIVATE_CHATS","CHATS_INVITES","CHATS","CHAT_USERS","USERNAMES_PHONES","COMMENTS","LISTENING","REACTIONS","JOINING","USERS_PARSING","STORIES","BOT_REPOST","LOCATION"]}},"required":["phone","type"]},"BotRepostDistributionRequest":{"allOf":[{"$ref":"#/components/schemas/BaseRequest"},{"type":"object","properties":{"message":{"type":"string","description":"Message to send. Variate messages supported. Find formatting rules in application account"},"delayedDistribution":{"type":"string","description":"Time when to start distribution (relative to Moscow time)"},"fileLinks":{"type":"array","description":"Use this parameter to link files (http links) if you're not fine with multipart/form-data file uploading. Max links number: 10.","items":{"type":"string"}},"botToken":{"type":"string","description":"Telegram bot token to send message through"},"chatLink":{"type":"string","description":"Telegram chat link where bot will leave message (example: @my_chat)"},"repostToChats":{"type":"array","description":"Array of chats' links where to repost bot message","items":{"type":"string"}},"repeatDelay":{"type":"number","format":"double","description":"Repeat delay between distributions (minutes, max 1500)"},"messageDelay":{"type":"number","format":"double","description":"Messages delay in distribution (minutes, max 180)"}}}],"description":"Create BOT_REPOST distribution JSON request wrapper","required":["botToken","chatLink","message","messageDelay","phone","repeatDelay","repostToChats","type"]},"ChatUsersDistributionRequest":{"allOf":[{"$ref":"#/components/schemas/BaseRequest"},{"type":"object","properties":{"message":{"type":"string","description":"Message to send. Variate messages supported. Find formatting rules in application account"},"delayedDistribution":{"type":"string","description":"Time when to start distribution (relative to Moscow time)"},"fileLinks":{"type":"array","description":"Use this parameter to link files (http links) if you're not fine with multipart/form-data file uploading. Max links number: 10.","items":{"type":"string"}},"chatLink":{"type":"string","description":"Telegram chat link to extract users from to send direct messages"},"skipAdmins":{"type":"boolean","description":"Flag indicating skipping message sending to chat admins"},"onlyAdmins":{"type":"boolean","description":"Flag indicating message should be sent only to chat admins"},"storeUsersAfterDistribution":{"type":"boolean","description":"Flag indicating that processed users' ids must be stored after distribution was completely finished, so on the next distribution message won't be delivered to them"},"appealNeeded":{"type":"boolean","description":"Flag indicating that appeal is needed in message"},"parseFromMessages":{"type":"boolean","description":"Flag indicates whether parse users from last chat messages instead of chat users list (for closed chats)"},"sendWhenOnline":{"type":"boolean","description":"Flag indicates that message will be delivered only when the user will be online (if his online status is available)"},"sendGift":{"type":"boolean","description":"Flag indicating that star gift with message will be send instead of regular message"},"limit":{"type":"integer","format":"int64","description":"Limit of successfully sent messages after what distribution will be stopped automatically"},"randomDelayValues":{"type":"array","description":"2 doubles describing interval for generating random delay for messages' sending in minutes, e.g. [1, 10]","items":{"type":"number","format":"double"}},"stickerSetTitle":{"type":"string","description":"Name of sticker set to use if sending of stickers needed."},"stickerEmojis":{"type":"string","description":"Particular emojis to choose from when sending stickers (comma-separated)."},"aiCtx":{"type":"string","description":"Context for neural network. 5000 tokens maximum. If set will be used instead of static message."}}}],"description":"Create CHAT_USERS distribution JSON request wrapper","required":["chatLink","message","phone","type"]},"ChatUsersParsingDistributionRequest":{"allOf":[{"$ref":"#/components/schemas/BaseRequest"},{"type":"object","properties":{"chatLink":{"type":"string","description":"Chat link where users' parsing is expected"},"parseFromMessages":{"type":"boolean","description":"Flag indicates whether parse users from last chat messages instead of chat users list (for closed chats)"},"parseFirstName":{"type":"boolean","description":"Flag indicates whether parse and include user's first name (if exists) into the resulting report"},"parseLastName":{"type":"boolean","description":"Flag indicates whether parse and include user's last name (if exists) into the resulting report"},"parseUsername":{"type":"boolean","description":"Flag indicates whether parse and include user's username (if exists) into the resulting report"},"parsePhone":{"type":"boolean","description":"Flag indicates whether parse and include user's phone number (if exists) into the resulting report"},"parseType":{"type":"boolean","description":"Flag indicates whether parse and include user's type (if exists) into the resulting report"},"parseTgId":{"type":"boolean","description":"Flag indicates whether parse and include user's Telegram ID into the resulting report"},"exclusions":{"type":"array","description":"List of exclusions data to skip parsing (nickname and/or telephone (if both - comma separated), each record goes on new line)","items":{"type":"string"}},"delayValues":{"type":"array","description":"Optional [from, to] delay interval between per-user parsing in minutes (fractional).","items":{"type":"number","format":"double"}}}}],"description":"Create USERS_PARSING distribution JSON request wrapper","required":["chatLink","phone","type"]},"ChatsDistributionRequest":{"allOf":[{"$ref":"#/components/schemas/BaseRequest"},{"type":"object","properties":{"message":{"type":"string","description":"Message to send. Variate messages supported. Find formatting rules in application account"},"delayedDistribution":{"type":"string","description":"Time when to start distribution (relative to Moscow time)"},"fileLinks":{"type":"array","description":"Use this parameter to link files (http links) if you're not fine with multipart/form-data file uploading. Max links number: 10.","items":{"type":"string"}},"chatsLinks":{"type":"array","description":"Array of chats' links to do distribution for","items":{"type":"string"}},"repeatDelay":{"type":"number","format":"double","description":"Value in minutes to wait to repeat distribution after it finishes"},"joinOnly":{"type":"boolean","description":"Flag marking distribution for join chats only without sending message there"},"tagUsers":{"type":"integer","format":"int32","description":"Number of random chat users to tag with message while distribution. Default is 0."},"stickerSetTitle":{"type":"string","description":"Name of sticker set to use if sending of stickers needed."},"stickerEmojis":{"type":"string","description":"Particular emojis to choose from when sending stickers (comma-separated)."},"delayValues":{"type":"array","description":"2 doubles describing interval for delay of sending message in minutes, e.g. [0.08, 1], min - 0.08, max - 180","items":{"type":"number","format":"double"}},"aiCtx":{"type":"string","description":"Context for neural network. 5000 tokens maximum. If set will be used instead of static message."}}}],"description":"Create CHATS distribution JSON request wrapper","required":["chatsLinks","message","phone","type"]},"ChatsInvitesDistributionRequest":{"allOf":[{"$ref":"#/components/schemas/BaseRequest"},{"type":"object","properties":{"chatLink":{"type":"string","description":"Chat link where invitations distribution is expected"},"usernames":{"type":"array","description":"Usernames list to invite to chat. Skipped when `inviteContacts` is passed as true","items":{"type":"string"}},"inviteContacts":{"type":"boolean","description":"Indicates whether invitations are only for private chats of authenticated Telegram account"},"delayValues":{"type":"array","description":"Optional [from, to] delay interval between invites in minutes (fractional). Applies only to the by-usernames mode; ignored when `inviteContacts=true`.","items":{"type":"number","format":"double"}},"delayedDistribution":{"type":"string","description":"Time when to start distribution (relative to Moscow time)"}}}],"description":"Create CHATS_INVITES distribution JSON request wrapper","required":["chatLink","phone","type","usernames"]},"ChatsListeningDistributionRequest":{"allOf":[{"$ref":"#/components/schemas/BaseRequest"},{"type":"object","properties":{"message":{"type":"string","description":"Message to send. Variate messages supported. Find formatting rules in application account"},"delayedDistribution":{"type":"string","description":"Time when to start distribution (relative to Moscow time)"},"fileLinks":{"type":"array","description":"Use this parameter to link files (http links) if you're not fine with multipart/form-data file uploading. Max links number: 10.","items":{"type":"string"}},"newMemberListening":{"type":"boolean","description":"Indicates whether new group chat member event must be processed to send message with his tag in the chat"},"wordsListening":{"type":"array","description":"Array with words to react on when user writes message containing them in a chat","items":{"type":"string"}},"storeUsers":{"type":"boolean","description":"Indicates whether processed user ids (users for which the message on certain event was sent) must be stored, if yes - the message won't be sent again to them"},"aiSupport":{"type":"boolean","description":"If this option is set to true, then neural network will try to write comments for related channel posts"},"sendPM":{"type":"boolean","description":"If this option is set to true, then instead of sending answer to the chat where event has occurred, it will be sent directly to the user"},"randomDelay":{"type":"boolean","description":"If this option is set to true, then instead of sending answer to the chat where event has occurred immediately, it will wait for random time (1-1.5 minute)"},"aiCtx":{"type":"string","description":"Additional context for neural network. 5000 tokens maximum"},"forwardChat":{"type":"string","description":"Instead of answering the listened message forward it to specific chat"},"skipNMessage":{"type":"integer","format":"int32","description":"Skip answering on each N message in chats"},"sendLimit":{"type":"integer","format":"int64","description":"Optional cap of successfully delivered actions - distribution will be force-stopped once reached"}}}],"description":"Create LISTENING distribution JSON request wrapper","required":["message","phone","type"]},"CommentsDistributionRequest":{"allOf":[{"$ref":"#/components/schemas/BaseRequest"},{"type":"object","properties":{"message":{"type":"string","description":"Message to send. Variate messages supported. Find formatting rules in application account"},"delayedDistribution":{"type":"string","description":"Time when to start distribution (relative to Moscow time)"},"fileLinks":{"type":"array","description":"Use this parameter to link files (http links) if you're not fine with multipart/form-data file uploading. Max links number: 10.","items":{"type":"string"}},"channelsLinks":{"type":"array","description":"Channels links' list to send comment to","items":{"type":"string"}},"postDepth":{"type":"integer","format":"int32","description":"A number indicating how many latest messages will be extracted from channel to send there a comment. Interval: [1..20]"},"aiSupport":{"type":"boolean","description":"If this option is set to true, then neural network will try to write comments for related channel posts"},"aiCtx":{"type":"string","description":"Additional context for neural network. 5000 tokens maximum"},"delayValues":{"type":"array","description":"Optional [from, to] delay interval between comments in minutes (fractional).","items":{"type":"number","format":"double"}}}}],"description":"Create COMMENTS distribution JSON request wrapper","required":["channelsLinks","message","phone","type"]},"JoiningDistributionRequest":{"allOf":[{"$ref":"#/components/schemas/BaseRequest"},{"type":"object","properties":{"leaveChats":{"type":"boolean","description":"Flag indicating that instead of joining chats' leaving is expected"},"repeat":{"type":"boolean","description":"Flag indicating that join/leave process will be repeated in a loop"},"chatsLinks":{"type":"array","description":"List of Telegram chats to join (leave)","items":{"type":"string"}},"delayValues":{"type":"array","description":"2 doubles describing interval for delay of joining (leaving) in minutes, e.g. [1, 10]","items":{"type":"number","format":"double"}},"delayedDistribution":{"type":"string","description":"Time when to start distribution (relative to Moscow time)"}}}],"description":"Create JOINING distribution JSON request wrapper","required":["chatsLinks","phone","type"]},"LocationDistributionRequest":{"allOf":[{"$ref":"#/components/schemas/BaseRequest"},{"type":"object","properties":{"message":{"type":"string","description":"Message to send. Variate messages supported. Find formatting rules in application account"},"delayedDistribution":{"type":"string","description":"Time when to start distribution (relative to Moscow time)"},"fileLinks":{"type":"array","description":"Use this parameter to link files (http links) if you're not fine with multipart/form-data file uploading. Max links number: 10.","items":{"type":"string"}},"latitude":{"type":"number","format":"double","description":"Location latitude"},"longitude":{"type":"number","format":"double","description":"Location longitude"},"usePrivateChats":{"type":"boolean","description":"Process nearby private chats only"},"usePublicChats":{"type":"boolean","description":"Process nearby public chats only"},"saveChats":{"type":"boolean","description":"Save processed chats after distribution was finished"},"onlyJoinPublicChats":{"type":"boolean","description":"Join nearby public chats instead of sending messages there"},"sendLimit":{"type":"integer","format":"int64","description":"Limit of successfully sent messages when distribution will be finished automatically"}}}],"description":"Create LOCATION distribution JSON request wrapper. API is deprecated and won't work!","required":["latitude","longitude","message","onlyJoinPublicChats","phone","saveChats","sendLimit","type","usePrivateChats","usePublicChats"]},"PrivateChatsDistributionRequest":{"allOf":[{"$ref":"#/components/schemas/BaseRequest"},{"type":"object","properties":{"message":{"type":"string","description":"Message to send. Variate messages supported. Find formatting rules in application account"},"delayedDistribution":{"type":"string","description":"Time when to start distribution (relative to Moscow time)"},"fileLinks":{"type":"array","description":"Use this parameter to link files (http links) if you're not fine with multipart/form-data file uploading. Max links number: 10.","items":{"type":"string"}},"useAccountSuperChats":{"type":"boolean","description":"Flag marking that Telegram's account internal supergroup chats will be used. Excludes useAccountChats flag"},"useAccountChats":{"type":"boolean","description":"Flag marking that Telegram's account internal private chats will be used. Excludes useAccountSuperChats flag"},"storeUsersAfterDistribution":{"type":"boolean","description":"Flag indicating that processed users' ids must be stored after distribution was completely finished, so on the next distribution message won't be delivered to them"},"appealNeeded":{"type":"boolean","description":"Flag indicating that appeal is needed in message (works for useAccountChats=true)"},"sendWhenOnline":{"type":"boolean","description":"Flag indicates that message will be delivered only when the user will be online (if his online status is available)"},"sendGift":{"type":"boolean","description":"Flag indicating that star gift with message will be send instead of regular message"},"repeatDelay":{"type":"number","format":"double","description":"Value in minutes to wait to repeat distribution after it finishes"},"tagUsers":{"type":"integer","format":"int32","description":"Number of random chat users to tag with message while distribution. Default is 0."},"stickerSetTitle":{"type":"string","description":"Name of sticker set to use if sending of stickers needed."},"stickerEmojis":{"type":"string","description":"Particular emojis to choose from when sending stickers (comma-separated)."},"randomDelayValues":{"type":"array","description":"2 doubles describing interval for generating random delay for messages' sending in minutes, e.g. [1, 10]","items":{"type":"number","format":"double"}},"aiCtx":{"type":"string","description":"Context for neural network. 5000 tokens maximum. If set will be used instead of static message."}}}],"description":"Create PRIVATE_CHATS distribution JSON request wrapper","required":["message","phone","type"]},"ReactionsDistributionRequest":{"allOf":[{"$ref":"#/components/schemas/BaseRequest"},{"type":"object","properties":{"message":{"type":"string","description":"Message to send. Variate messages supported. Find formatting rules in application account"},"delayedDistribution":{"type":"string","description":"Time when to start distribution (relative to Moscow time)"},"fileLinks":{"type":"array","description":"Use this parameter to link files (http links) if you're not fine with multipart/form-data file uploading. Max links number: 10.","items":{"type":"string"}},"chatsLinks":{"type":"array","description":"Chats links' list to send reaction to","items":{"type":"string"}},"postDepth":{"type":"integer","format":"int32","description":"A number indicating how many latest messages will be extracted from chat to send there a reaction. Interval: [1..50]"},"repeatDelay":{"type":"number","format":"double","description":"Value in minutes to wait to repeat distribution after it finishes"},"likeChannelComments":{"type":"boolean","description":"If true and chat is a channel with open comments - additionally react to first 3 comments of each post"},"delayValues":{"type":"array","description":"Optional [from, to] delay interval between reactions in minutes (fractional).","items":{"type":"number","format":"double"}}}}],"description":"Create REACTIONS distribution JSON request wrapper","required":["chatsLinks","message","phone","type"]},"UsernamesDistributionRequest":{"allOf":[{"$ref":"#/components/schemas/BaseRequest"},{"type":"object","properties":{"message":{"type":"string","description":"Message to send. Variate messages supported. Find formatting rules in application account"},"delayedDistribution":{"type":"string","description":"Time when to start distribution (relative to Moscow time)"},"fileLinks":{"type":"array","description":"Use this parameter to link files (http links) if you're not fine with multipart/form-data file uploading. Max links number: 10.","items":{"type":"string"}},"usernames":{"type":"array","description":"List of Telegram @usernames, phones (with + prefix) or numeric Telegram user IDs to send direct message to","items":{"type":"string"}},"storeUsersAfterDistribution":{"type":"boolean","description":"Flag indicating that processed users' ids must be stored after distribution was completely finished, so on the next distribution message won't be delivered to them"},"appealNeeded":{"type":"boolean","description":"Flag indicating that appeal is needed in message"},"sendWhenOnline":{"type":"boolean","description":"Flag indicates that message will be delivered only when the user will be online (if his online status is available)"},"sendGift":{"type":"boolean","description":"Flag indicating that star gift with message will be send instead of regular message"},"limit":{"type":"integer","format":"int64","description":"Limit of successfully sent messages after what distribution will be stopped automatically"},"randomDelayValues":{"type":"array","description":"2 doubles describing interval for generating random delay for messages' sending in minutes, e.g. [1, 10]","items":{"type":"number","format":"double"}},"stickerSetTitle":{"type":"string","description":"Name of sticker set to use if sending of stickers needed."},"stickerEmojis":{"type":"string","description":"Particular emojis to choose from when sending stickers (comma-separated)."},"aiCtx":{"type":"string","description":"Context for neural network. 5000 tokens maximum. If set will be used instead of static message."}}}],"description":"Create USERNAMES_PHONES distribution JSON request wrapper","required":["message","phone","type","usernames"]},"WatchStoriesDistributionRequest":{"allOf":[{"$ref":"#/components/schemas/BaseRequest"},{"type":"object","properties":{"message":{"type":"string","description":"Message to send. Variate messages supported. Find formatting rules in application account"},"delayedDistribution":{"type":"string","description":"Time when to start distribution (relative to Moscow time)"},"fileLinks":{"type":"array","description":"Use this parameter to link files (http links) if you're not fine with multipart/form-data file uploading. Max links number: 10.","items":{"type":"string"}},"chatLinks":{"type":"array","description":"Chat links to extract users for stories' watching","items":{"type":"string"}},"sendLikes":{"type":"boolean","description":"Indicates whether besides watching story should be also liked"},"repeatDelay":{"type":"number","format":"double","description":"Value in minutes to wait to repeat distribution after it finishes"},"storiesLimitPerUser":{"type":"integer","format":"int32","description":"Amount of stories to watch per user"},"delayValues":{"type":"array","description":"Optional [from, to] delay interval between users in minutes (fractional)","items":{"type":"number","format":"double"}}}}],"description":"Create STORIES distribution JSON request wrapper","required":["chatLinks","message","phone","type"]},"SaveAutopostingConfigRequest":{"type":"object","description":"Create or update autoposting config request","properties":{"configId":{"type":"integer","format":"int64","description":"Config ID. Pass null to create a new config, or an existing ID to update."},"targetChatName":{"type":"string","description":"Target Telegram channel name or link (e.g. 'my_channel', '@my_channel', 'https://t.me/my_channel')."},"sourceType":{"type":"string","description":"Content source type: TAVILY (web search) or TG_CHANNELS (Telegram channels)."},"tavilyKeywords":{"type":"string","description":"Keywords for Tavily web search (required when sourceType=TAVILY)."},"sourceChannels":{"type":"string","description":"Source Telegram channel links, comma or newline separated (required when sourceType=TG_CHANNELS)."},"systemDraftPrompt":{"type":"string","description":"System prompt for AI draft generation."},"editorEnabled":{"type":"boolean","description":"Enable AI editor for post refinement."},"imageGenerationEnabled":{"type":"boolean","description":"Enable AI image generation for posts."},"sourceImageRepostEnabled":{"type":"boolean","description":"Enable reposting source images (TG_CHANNELS only, mutually exclusive with imageGenerationEnabled)."},"moderationEnabled":{"type":"boolean","description":"Enable moderation via Telegram bot before publishing."},"editorPrompt":{"type":"string","description":"Prompt for AI editor (used when editorEnabled=true)."},"imagePrompt":{"type":"string","description":"Prompt for AI image generation (used when imageGenerationEnabled=true)."},"maxForwardEnabled":{"type":"boolean","description":"Enable forwarding of the generated post to a MAX channel via maxseller.top API."},"maxApiToken":{"type":"string","description":"MAX (maxseller.top) API token for forwarding (required when maxForwardEnabled=true)."},"maxChannelLink":{"type":"string","description":"MAX channel join-link for forwarding (required when maxForwardEnabled=true)."},"scheduleType":{"type":"string","description":"Schedule type: 'interval' (minutes) or 'cron' (cron expression)."},"scheduleValue":{"type":"string","description":"Schedule value: number of minutes for 'interval' type, or cron expression for 'cron' type."}},"required":["scheduleType","scheduleValue","sourceType","systemDraftPrompt","targetChatName"]},"AutopostingConfigResponse":{"type":"object","description":"Autoposting config with statistics","properties":{"id":{"type":"integer","format":"int64","description":"Config ID"},"targetChatName":{"type":"string","description":"Target Telegram channel name"},"sourceType":{"type":"string","description":"Content source type: TAVILY or TG_CHANNELS"},"status":{"type":"string","description":"Config status: RUNNING, STOPPED, or PAUSED"},"tavilyKeywords":{"type":"string","description":"Keywords for Tavily web search"},"sourceChannels":{"type":"array","description":"Source Telegram channel links","items":{"type":"string"}},"systemDraftPrompt":{"type":"string","description":"System prompt for AI draft generation"},"editorEnabled":{"type":"boolean","description":"AI editor enabled"},"imageGenerationEnabled":{"type":"boolean","description":"AI image generation enabled"},"sourceImageRepostEnabled":{"type":"boolean","description":"Source image repost enabled"},"moderationEnabled":{"type":"boolean","description":"Moderation via bot enabled"},"editorPrompt":{"type":"string","description":"Prompt for AI editor"},"imagePrompt":{"type":"string","description":"Prompt for AI image generation"},"maxForwardEnabled":{"type":"boolean","description":"MAX forwarding enabled"},"maxApiToken":{"type":"string","description":"MAX (maxseller.top) API token"},"maxChannelLink":{"type":"string","description":"MAX channel join-link"},"scheduleType":{"type":"string","description":"Schedule type: 'interval' or 'cron'"},"scheduleValue":{"type":"string","description":"Schedule value"},"successCount":{"type":"integer","format":"int64","description":"Number of successfully published posts"},"failedCount":{"type":"integer","format":"int64","description":"Number of failed post attempts"},"totalCost":{"type":"number","format":"double","description":"Total cost spent on this config"},"lastPostedAt":{"type":"string","format":"date-time","description":"Date of last published post"},"createdAt":{"type":"string","format":"date-time","description":"Config creation date"},"error":{"type":"string","description":"Validation error message, present only on errors"}}},"SetAutoAnswerConfigRequest":{"type":"object","description":"Set auto answer request wrapper","properties":{"staticAutoAnswerEnabled":{"type":"boolean","description":"Flag indicating static message ('autoAnswerMessage' param value) should be sent as an auto answer. Works independently of 'aiAutoAnswer' param! If it is true two messages (both AI and static) could be sent as an auto answer!"},"aiAutoAnswerEnabled":{"type":"boolean","description":"Flag indicating AI-constructed message (based on 'aiAutoAnswerContext' param value) should be sent as an auto answer. Works independently of 'staticAutoAnswer' param! If it is true two messages (both AI and static) could be sent as an auto answer!"},"singleAnswer":{"type":"boolean","description":"Flag indicating that only one answer is needed per user. If false multiple answers could be sent for users. Works for staticAutoAnswer=true only!"},"appealNeeded":{"type":"boolean","description":"Flag indicating that appeal via user's name is needed for the auto answer. Works for staticAutoAnswer=true only!"},"resetQty":{"type":"boolean","description":"If true then auto answers counters will be reset"},"autoAnswerDelay":{"type":"integer","format":"int32","description":"Delay time in seconds to wait until auto answer. Works for staticAutoAnswer=true only! Max value = 60 seconds."},"autoAnswerMessage":{"type":"string","description":"Static auto answer message value. Max length = 6000 symbols."},"aiAutoAnswerContext":{"type":"string","description":"AI context for auto answer messages. Max length = 100000, max tokens = 13000."},"autoAnswerForwardChat":{"type":"string","description":"Chat link (username / t.me/... / joinchat-link) to forward incoming messages to instead of sending an auto answer. If set, incoming messages are forwarded to this chat and no auto answer is sent. Max length = 512."}}},"AutoAnswerConfigResponse":{"type":"object","description":"Auto answer response wrapper","properties":{"staticAutoAnswerEnabled":{"type":"boolean","description":"Flag indicating static message ('autoAnswerMessage' param value) should be sent as an auto answer. Works independently of 'aiAutoAnswer' param! If it is true two messages (both AI and static) could be sent as an auto answer!"},"aiAutoAnswerEnabled":{"type":"boolean","description":"Flag indicating AI-constructed message (based on 'aiAutoAnswerContext' param value) should be sent as an auto answer. Works independently of 'staticAutoAnswer' param! If it is true two messages (both AI and static) could be sent as an auto answer!"},"singleAnswer":{"type":"boolean","description":"Flag indicating that only one answer is needed per user. If false multiple answers could be sent for users. Works for staticAutoAnswer=true only!"},"appealNeeded":{"type":"boolean","description":"Flag indicating that appeal via user's name is needed for the auto answer. Works for staticAutoAnswer=true only!"},"autoAnswerDelay":{"type":"integer","format":"int32","description":"Delay time to wait until auto answer. Works for staticAutoAnswer=true only!"},"answeredQty":{"type":"integer","format":"int32","description":"Answered static messages quantity. Works for staticAutoAnswer=true only!"},"aiAnsweredQty":{"type":"integer","format":"int32","description":"Answered AI messages quantity. Works for aiAutoAnswer=true only!"},"autoAnswerMessage":{"type":"string","description":"Static auto answer message"},"aiAutoAnswerContext":{"type":"string","description":"AI context for auto answer messages"},"autoAnswerForwardChat":{"type":"string","description":"Chat link (username / t.me/... / joinchat-link) to forward incoming messages to instead of sending an auto answer. If set, incoming messages are forwarded to this chat and no auto answer is sent."},"error":{"type":"string","description":"Validation error while saving. If not exists the value is not present."}}},"AuthRequest":{"type":"object","description":"Authentication request wrapper","properties":{"phone":{"type":"string","description":"Phone number to request authentication for"},"email":{"type":"string","description":"Telegram can request email for phone number and later send authentication code there"},"code":{"type":"string","description":"Authentication code"},"password":{"type":"string","description":"Authentication password"},"proxyData":{"$ref":"#/components/schemas/ProxyData","description":"Optional proxy data"},"qrCodeLogin":{"type":"boolean","description":"Pass true if login via QR code is expected for this account"},"additional":{"type":"boolean"}},"required":["phone"]},"ProxyData":{"type":"object","description":"Proxy data when authentication, will be saved to account's proxies if same existing is not found for user","properties":{"name":{"type":"string","description":"Optional proxy name"},"type":{"type":"string","description":"Proxy type [HTTP, SOCKS5, MTPROTO]"},"address":{"type":"string","description":"Proxy address"},"port":{"type":"integer","format":"int32","description":"Proxy port"},"username":{"type":"string","description":"Proxy username"},"password":{"type":"string","description":"Proxy password"},"options":{"type":"string","description":"Proxy options (e.g. HTTP_ONLY for HTTP proxy type)"}},"required":["address","options","password","port","type","username"]},"AuthResponse":{"type":"object","description":"Authentication response wrapper","properties":{"phone":{"type":"string","description":"Phone number for authentication response"},"status":{"type":"string","description":"Authentication status","enum":["APP_INITIALIZING","CODE_NEEDED","EMAIL_NEEDED","PASSWORD_NEEDED","QR_SCAN_NEEDED","INITIATING","AUTHENTICATED","LOGOUT_PREV_TO_AUTHENTICATE_NEW","WAIT_PHONE_PREV_UN_LOGIN","FAILED_EMPTY_CODE","FAILED_EMPTY_PASS","FAILED_EMPTY_EMAIL","FAILED","ANOTHER_OCCUPIED","NONE","UNKNOWN","FLOOD","ADDITIONAL_AUTHENTICATED","ADDITIONAL_LIMIT_REACHED","ADDITIONAL_DUPLICATE"]},"qrCodeImageBase64":{"type":"string","description":"In case QR-login this field will contain base64 encoded qr code image"}}},"AuthLogoutResponse":{"type":"object","description":"Auth logout response wrapper","properties":{"logoutStatus":{"type":"string","description":"Status of Telegram client logout"},"description":{"type":"string","description":"More information about logout result"}}},"FunnelResponse":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"botUsername":{"type":"string"},"status":{"type":"string"},"totalSubscribers":{"type":"integer","format":"int64"},"new24h":{"type":"integer","format":"int64"},"new7d":{"type":"integer","format":"int64"},"new30d":{"type":"integer","format":"int64"},"createdAt":{"type":"string"},"steps":{"type":"array","items":{"$ref":"#/components/schemas/FunnelStepResponse"}}}},"FunnelStepMediaResponse":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"type":{"type":"string"},"filename":{"type":"string"},"sizeBytes":{"type":"integer","format":"int64"}}},"FunnelStepResponse":{"type":"object","properties":{"stepId":{"type":"integer","format":"int64"},"stepOrder":{"type":"integer","format":"int32"},"delaySeconds":{"type":"integer","format":"int64"},"delayFormatted":{"type":"string"},"messageText":{"type":"string"},"buttonsJson":{"type":"string"},"hasMedia":{"type":"boolean"},"mediaType":{"type":"string"},"mediaFilename":{"type":"string"},"mediaFiles":{"type":"array","items":{"$ref":"#/components/schemas/FunnelStepMediaResponse"}}}},"LandingResponse":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"slug":{"type":"string"},"title":{"type":"string"},"url":{"type":"string"},"status":{"type":"string"},"sizeBytes":{"type":"integer","format":"int64"},"createdAt":{"type":"string"},"pixelFbId":{"type":"string"},"pixelVkId":{"type":"string"},"pixelYmId":{"type":"string"},"pixelGa4Id":{"type":"string"}}},"FunnelCostInfoResponse":{"type":"object","properties":{"aiMessageCost":{"type":"number","format":"double"},"deliveryMessageCost":{"type":"number","format":"double"},"maxMessagesPerHour":{"type":"integer","format":"int32"},"messagesUsedThisHour":{"type":"integer","format":"int64"}}},"DistributionResultResponse":{"type":"object","properties":{"resultFileLinks":{"type":"array","description":"Links to files with latest distribution results","items":{"type":"string"}}}},"BalanceResponse":{"type":"object","description":"Balance response wrapper","properties":{"value":{"type":"string","description":"Current balance value"}}},"AutopostingConfigListResponse":{"type":"object","description":"List of autoposting configs with bot deep link","properties":{"configs":{"type":"array","description":"List of autoposting configs with statistics","items":{"$ref":"#/components/schemas/AutopostingConfigResponse"}},"botDeepLink":{"type":"string","description":"Deep link to the moderation bot for the authenticated user"}}},"AutopostingBotLinkResponse":{"type":"object","description":"Moderation bot link response","properties":{"botDeepLink":{"type":"string","description":"Deep link to the moderation bot for the authenticated user"},"botUsername":{"type":"string","description":"Bot username (without @)"}}},"AdditionalAccountResponse":{"type":"object","description":"Additional account data","properties":{"id":{"type":"integer","format":"int64","description":"Account ID"},"phone":{"type":"string","description":"Phone number"},"name":{"type":"string","description":"Telegram name"},"status":{"type":"string","description":"Account status: WAITING, PASSIVE, ACTIVE, AUTO_ANSWER"},"lastActivity":{"type":"string","description":"Last activity description with timestamp"},"proxyId":{"type":"integer","format":"int64","description":"Proxy ID assigned to this account, null if none"},"proxyName":{"type":"string","description":"Proxy name assigned to this account, null if none"}}},"AdditionalAccountsListResponse":{"type":"object","description":"Additional accounts list with substitution setting","properties":{"accounts":{"type":"array","description":"List of additional accounts","items":{"$ref":"#/components/schemas/AdditionalAccountResponse"}},"accountSubstitutionEnabled":{"type":"boolean","description":"Whether account substitution during distribution is enabled"}}}},"securitySchemes":{"BasicAuth":{"type":"http","description":"Use your base64 encoded 'username:password' string in 'Authorization: Basic ' header","scheme":"basic"}}}}