> For the complete documentation index, see [llms.txt](https://tweet-catcher.gitbook.io/tweet-catcher/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tweet-catcher.gitbook.io/tweet-catcher/tweet-catcher-guide/tweet-catcher-monitor/pro-plan/api/manage-tasks.md).

# Manage Tasks

Operations for managing Tweet Catcher monitoring tasks

## Get User Info

> Returns a snapshot of the authenticated account, including:\
> \
> \- \*\*\`expireAt\`\*\* — subscription expiration timestamp (ms), or \`null\` for lifetime accounts\
> \- \*\*\`tasksLimit\`\*\* — maximum number of concurrently running tasks allowed by the plan\
> \- \*\*\`globalMonitorTasksLimit\`\*\* — cap on running keyword-monitoring tasks specifically\
> \- \*\*\`tasks\`\*\* — full list of all tasks owned by the account (both running and stopped)\
> \
> Use this as a quick health-check or to seed a local task cache

```json
{"openapi":"3.0.3","info":{"title":"Tweet Catcher Monitor API","version":"1.0.0"},"tags":[{"name":"Manage Tasks","description":"Operations for managing Tweet Catcher monitoring tasks"}],"servers":[{"url":"https://monitor-api.tweet-catcher.com/pro","description":"Production server"}],"security":[{"ApiKeyToken":[]}],"components":{"securitySchemes":{"ApiKeyToken":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey","description":"Api key for application authentication"}}},"paths":{"/info":{"get":{"tags":["Manage Tasks"],"summary":"Get User Info","description":"Returns a snapshot of the authenticated account, including:\n\n- **`expireAt`** — subscription expiration timestamp (ms), or `null` for lifetime accounts\n- **`tasksLimit`** — maximum number of concurrently running tasks allowed by the plan\n- **`globalMonitorTasksLimit`** — cap on running keyword-monitoring tasks specifically\n- **`tasks`** — full list of all tasks owned by the account (both running and stopped)\n\nUse this as a quick health-check or to seed a local task cache","operationId":"getUserInfo","responses":{"200":{"description":"Account snapshot returned successfully","content":{"application/json":{"schema":{"type":"object","properties":{"expireAt":{"type":"number","nullable":true,"description":"Account expiration date"},"tasksLimit":{"type":"number","description":"Maximum number of running tasks available"},"globalMonitorTasksLimit":{"type":"number","description":"Maximum number of running keyword monitoring tasks available"},"tasks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Unique task identifier"},"module":{"type":"string","enum":["twitter","truth_social","twitter_keyword"],"default":"twitter","description":"Platform module to monitor"},"userId":{"type":"string","description":"Internal user identifier"},"user":{"type":"string","description":"Username to monitor (not applicable for keyword tasks)"},"keyword":{"type":"string","description":"Keyword to monitor (used by twitter_keyword module)"},"group":{"type":"string","description":"Task group for organization"},"options":{"type":"array","items":{"type":"string","enum":["posts","retweets","replies","deletion","following","unfollow","userUpdates","ocr"],"description":"Monitoring option"},"default":["posts"],"description":"Monitoring options"},"notification":{"type":"string","enum":["discord","telegram","webhook","websocket"],"default":"discord","description":"Notification method"},"differentWebhooks":{"type":"boolean","default":false,"description":"Whether to use different webhooks/chat IDs per monitoring option"},"webhook":{"type":"string","description":"Discord webhook URL or custom webhook URL"},"webhook-posts":{"type":"string","description":"Webhook for posts (if differentWebhooks is true)"},"webhook-following":{"type":"string","description":"Webhook for following updates (if differentWebhooks is true)"},"webhook-unfollow":{"type":"string","description":"Webhook for unfollow updates (if differentWebhooks is true)"},"webhook-userUpdates":{"type":"string","description":"Webhook for user updates (if differentWebhooks is true)"},"webhook-deletion":{"type":"string","description":"Webhook for deletion updates (if differentWebhooks is true)"},"chatId":{"type":"string","description":"Telegram chat ID"},"chatId-posts":{"type":"string","description":"Telegram chat ID for posts (if differentWebhooks is true)"},"chatId-following":{"type":"string","description":"Telegram chat ID for following updates (if differentWebhooks is true)"},"chatId-unfollow":{"type":"string","description":"Telegram chat ID for unfollow updates (if differentWebhooks is true)"},"chatId-userUpdates":{"type":"string","description":"Telegram chat ID for user updates (if differentWebhooks is true)"},"chatId-deletion":{"type":"string","description":"Telegram chat ID for deletion updates (if differentWebhooks is true)"},"pingKeywords":{"type":"object","properties":{"n":{"type":"array","items":{"type":"string"},"default":[],"description":"Negative keywords that suppress pings"},"p":{"type":"array","items":{"type":"string"},"default":[],"description":"Positive keywords that trigger pings"},"regex":{"type":"string","description":"Regex pattern used for ping matching"},"isRegex":{"type":"boolean","default":false,"description":"Whether regex matching is enabled"}},"description":"Keywords or regex configuration used for selective pinging"},"useRegex":{"type":"boolean","default":false,"description":"Whether to use regex for ping keywords"},"ping":{"type":"string","enum":["everyone","here","role","none"],"default":"none","description":"Discord ping option"},"roleId":{"type":"string","description":"Discord role ID to ping (required if ping is role)"},"note":{"type":"string","description":"Task note shown in notifications"},"quickLink":{"type":"string","description":"Custom quick link included in notifications"},"ignoreImages":{"type":"boolean","default":false,"description":"Whether to ignore images in notifications"},"ignoreVideos":{"type":"boolean","default":false,"description":"Whether to ignore videos in notifications"},"followingFilters":{"type":"object","properties":{"followingMinPosts":{"type":"number","nullable":true,"description":"Minimum posts count filter"},"followingMaxPosts":{"type":"number","nullable":true,"description":"Maximum posts count filter"},"followingMinFollowers":{"type":"number","nullable":true,"description":"Minimum followers count filter"},"followingMaxFollowers":{"type":"number","nullable":true,"description":"Maximum followers count filter"},"followingMinFollowing":{"type":"number","nullable":true,"description":"Minimum following count filter"},"followingMaxFollowing":{"type":"number","nullable":true,"description":"Maximum following count filter"}},"description":"Filters for following notifications (typically used with Discord and Telegram notifications)"},"userUpdatesOptions":{"type":"object","properties":{"disableUsernameUpdate":{"type":"boolean","default":false,"description":"Disable username change notifications"},"disableNameUpdate":{"type":"boolean","default":false,"description":"Disable display name change notifications"},"disableAvatarUpdate":{"type":"boolean","default":false,"description":"Disable avatar change notifications"},"disableBannerUpdate":{"type":"boolean","default":false,"description":"Disable banner change notifications"},"disableLocationUpdate":{"type":"boolean","default":false,"description":"Disable location change notifications"},"disableDescriptionUpdate":{"type":"boolean","default":false,"description":"Disable bio/description change notifications"},"disableWebsiteUpdate":{"type":"boolean","default":false,"description":"Disable website change notifications"},"disablePinnedTweetUpdate":{"type":"boolean","default":false,"description":"Disable pinned tweet change notifications"}},"description":"Options for user update notifications (typically used with Discord and Telegram notifications)"},"running":{"type":"boolean","nullable":true,"description":"Whether the task is currently running"}},"required":["id","running"]},"description":"List of current tasks"}},"required":["expireAt","tasksLimit","globalMonitorTasksLimit","tasks"]}}}},"400":{"description":"Request could not be parsed or the auth token is present but malformed","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"},"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"The errors"}},"required":["error","message"]}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"}},"required":["error","message"]}}}},"500":{"description":"Unexpected server error"}}}}}}
```

## Get Tasks List

> Returns all tasks belonging to the authenticated account\
> \
> Pass the optional \*\*\`group\`\*\* query parameter to filter results to a specific group label\
> Omitting it returns every task regardless of group\
> \
> This endpoint is a lighter alternative to \`/info\` when you only need the task array

```json
{"openapi":"3.0.3","info":{"title":"Tweet Catcher Monitor API","version":"1.0.0"},"tags":[{"name":"Manage Tasks","description":"Operations for managing Tweet Catcher monitoring tasks"}],"servers":[{"url":"https://monitor-api.tweet-catcher.com/pro","description":"Production server"}],"security":[{"ApiKeyToken":[]}],"components":{"securitySchemes":{"ApiKeyToken":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey","description":"Api key for application authentication"}}},"paths":{"/tasks-list":{"get":{"tags":["Manage Tasks"],"summary":"Get Tasks List","description":"Returns all tasks belonging to the authenticated account\n\nPass the optional **`group`** query parameter to filter results to a specific group label\nOmitting it returns every task regardless of group\n\nThis endpoint is a lighter alternative to `/info` when you only need the task array","operationId":"getTasksList","parameters":[{"schema":{"type":"string","description":"Filter tasks by group"},"required":false,"description":"Filter tasks by group","name":"group","in":"query"}],"responses":{"200":{"description":"Task list returned successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Unique task identifier"},"module":{"type":"string","enum":["twitter","truth_social","twitter_keyword"],"default":"twitter","description":"Platform module to monitor"},"userId":{"type":"string","description":"Internal user identifier"},"user":{"type":"string","description":"Username to monitor (not applicable for keyword tasks)"},"keyword":{"type":"string","description":"Keyword to monitor (used by twitter_keyword module)"},"group":{"type":"string","description":"Task group for organization"},"options":{"type":"array","items":{"type":"string","enum":["posts","retweets","replies","deletion","following","unfollow","userUpdates","ocr"],"description":"Monitoring option"},"default":["posts"],"description":"Monitoring options"},"notification":{"type":"string","enum":["discord","telegram","webhook","websocket"],"default":"discord","description":"Notification method"},"differentWebhooks":{"type":"boolean","default":false,"description":"Whether to use different webhooks/chat IDs per monitoring option"},"webhook":{"type":"string","description":"Discord webhook URL or custom webhook URL"},"webhook-posts":{"type":"string","description":"Webhook for posts (if differentWebhooks is true)"},"webhook-following":{"type":"string","description":"Webhook for following updates (if differentWebhooks is true)"},"webhook-unfollow":{"type":"string","description":"Webhook for unfollow updates (if differentWebhooks is true)"},"webhook-userUpdates":{"type":"string","description":"Webhook for user updates (if differentWebhooks is true)"},"webhook-deletion":{"type":"string","description":"Webhook for deletion updates (if differentWebhooks is true)"},"chatId":{"type":"string","description":"Telegram chat ID"},"chatId-posts":{"type":"string","description":"Telegram chat ID for posts (if differentWebhooks is true)"},"chatId-following":{"type":"string","description":"Telegram chat ID for following updates (if differentWebhooks is true)"},"chatId-unfollow":{"type":"string","description":"Telegram chat ID for unfollow updates (if differentWebhooks is true)"},"chatId-userUpdates":{"type":"string","description":"Telegram chat ID for user updates (if differentWebhooks is true)"},"chatId-deletion":{"type":"string","description":"Telegram chat ID for deletion updates (if differentWebhooks is true)"},"pingKeywords":{"type":"object","properties":{"n":{"type":"array","items":{"type":"string"},"default":[],"description":"Negative keywords that suppress pings"},"p":{"type":"array","items":{"type":"string"},"default":[],"description":"Positive keywords that trigger pings"},"regex":{"type":"string","description":"Regex pattern used for ping matching"},"isRegex":{"type":"boolean","default":false,"description":"Whether regex matching is enabled"}},"description":"Keywords or regex configuration used for selective pinging"},"useRegex":{"type":"boolean","default":false,"description":"Whether to use regex for ping keywords"},"ping":{"type":"string","enum":["everyone","here","role","none"],"default":"none","description":"Discord ping option"},"roleId":{"type":"string","description":"Discord role ID to ping (required if ping is role)"},"note":{"type":"string","description":"Task note shown in notifications"},"quickLink":{"type":"string","description":"Custom quick link included in notifications"},"ignoreImages":{"type":"boolean","default":false,"description":"Whether to ignore images in notifications"},"ignoreVideos":{"type":"boolean","default":false,"description":"Whether to ignore videos in notifications"},"followingFilters":{"type":"object","properties":{"followingMinPosts":{"type":"number","nullable":true,"description":"Minimum posts count filter"},"followingMaxPosts":{"type":"number","nullable":true,"description":"Maximum posts count filter"},"followingMinFollowers":{"type":"number","nullable":true,"description":"Minimum followers count filter"},"followingMaxFollowers":{"type":"number","nullable":true,"description":"Maximum followers count filter"},"followingMinFollowing":{"type":"number","nullable":true,"description":"Minimum following count filter"},"followingMaxFollowing":{"type":"number","nullable":true,"description":"Maximum following count filter"}},"description":"Filters for following notifications (typically used with Discord and Telegram notifications)"},"userUpdatesOptions":{"type":"object","properties":{"disableUsernameUpdate":{"type":"boolean","default":false,"description":"Disable username change notifications"},"disableNameUpdate":{"type":"boolean","default":false,"description":"Disable display name change notifications"},"disableAvatarUpdate":{"type":"boolean","default":false,"description":"Disable avatar change notifications"},"disableBannerUpdate":{"type":"boolean","default":false,"description":"Disable banner change notifications"},"disableLocationUpdate":{"type":"boolean","default":false,"description":"Disable location change notifications"},"disableDescriptionUpdate":{"type":"boolean","default":false,"description":"Disable bio/description change notifications"},"disableWebsiteUpdate":{"type":"boolean","default":false,"description":"Disable website change notifications"},"disablePinnedTweetUpdate":{"type":"boolean","default":false,"description":"Disable pinned tweet change notifications"}},"description":"Options for user update notifications (typically used with Discord and Telegram notifications)"},"running":{"type":"boolean","nullable":true,"description":"Whether the task is currently running"}},"required":["id","running"]},"description":"List of current tasks"}}}},"400":{"description":"Invalid query parameters (e.g. unrecognised group format)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"},"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"The errors"}},"required":["error","message"]}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"}},"required":["error","message"]}}}},"500":{"description":"Unexpected server error"}}}}}}
```

## Add Task

> Creates a new monitoring task for the authenticated account\
> \
> Set \*\*\`start: true\`\*\* to activate the task immediately after creation\
> Omitting it (or passing \`false\`) leaves the task in a stopped state, you can start it later with \`/start-task\`\
> \
> The \`module\` field defaults to \`twitter\` when omitted\
> For keyword monitoring use \`module: "twitter\_keyword"\` and supply a \`keyword\` instead of a \`user\`

```json
{"openapi":"3.0.3","info":{"title":"Tweet Catcher Monitor API","version":"1.0.0"},"tags":[{"name":"Manage Tasks","description":"Operations for managing Tweet Catcher monitoring tasks"}],"servers":[{"url":"https://monitor-api.tweet-catcher.com/pro","description":"Production server"}],"security":[{"ApiKeyToken":[]}],"components":{"securitySchemes":{"ApiKeyToken":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey","description":"Api key for application authentication"}}},"paths":{"/add-task":{"post":{"tags":["Manage Tasks"],"summary":"Add Task","description":"Creates a new monitoring task for the authenticated account\n\nSet **`start: true`** to activate the task immediately after creation\nOmitting it (or passing `false`) leaves the task in a stopped state, you can start it later with `/start-task`\n\nThe `module` field defaults to `twitter` when omitted\nFor keyword monitoring use `module: \"twitter_keyword\"` and supply a `keyword` instead of a `user`","operationId":"addTask","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"module":{"type":"string","enum":["twitter","truth_social","twitter_keyword"],"default":"twitter","description":"Platform module to monitor"},"user":{"type":"string","description":"Username to monitor (not applicable for keyword tasks)"},"keyword":{"type":"string","description":"Keyword to monitor (used by twitter_keyword module)"},"group":{"type":"string","description":"Task group for organization"},"options":{"type":"array","items":{"type":"string","enum":["posts","retweets","replies","deletion","following","unfollow","userUpdates","ocr"],"description":"Monitoring option"},"default":["posts"],"description":"Monitoring options"},"notification":{"type":"string","enum":["discord","telegram","webhook","websocket"],"default":"discord","description":"Notification method"},"differentWebhooks":{"type":"boolean","default":false,"description":"Whether to use different webhooks/chat IDs per monitoring option"},"webhook":{"type":"string","description":"Discord webhook URL or custom webhook URL"},"webhook-posts":{"type":"string","description":"Webhook for posts (if differentWebhooks is true)"},"webhook-following":{"type":"string","description":"Webhook for following updates (if differentWebhooks is true)"},"webhook-unfollow":{"type":"string","description":"Webhook for unfollow updates (if differentWebhooks is true)"},"webhook-userUpdates":{"type":"string","description":"Webhook for user updates (if differentWebhooks is true)"},"webhook-deletion":{"type":"string","description":"Webhook for deletion updates (if differentWebhooks is true)"},"chatId":{"type":"string","description":"Telegram chat ID"},"chatId-posts":{"type":"string","description":"Telegram chat ID for posts (if differentWebhooks is true)"},"chatId-following":{"type":"string","description":"Telegram chat ID for following updates (if differentWebhooks is true)"},"chatId-unfollow":{"type":"string","description":"Telegram chat ID for unfollow updates (if differentWebhooks is true)"},"chatId-userUpdates":{"type":"string","description":"Telegram chat ID for user updates (if differentWebhooks is true)"},"chatId-deletion":{"type":"string","description":"Telegram chat ID for deletion updates (if differentWebhooks is true)"},"pingKeywords":{"type":"object","properties":{"n":{"type":"array","items":{"type":"string"},"default":[],"description":"Negative keywords that suppress pings"},"p":{"type":"array","items":{"type":"string"},"default":[],"description":"Positive keywords that trigger pings"},"regex":{"type":"string","description":"Regex pattern used for ping matching"},"isRegex":{"type":"boolean","default":false,"description":"Whether regex matching is enabled"}},"description":"Keywords or regex configuration used for selective pinging"},"useRegex":{"type":"boolean","default":false,"description":"Whether to use regex for ping keywords"},"ping":{"type":"string","enum":["everyone","here","role","none"],"default":"none","description":"Discord ping option"},"roleId":{"type":"string","description":"Discord role ID to ping (required if ping is role)"},"note":{"type":"string","description":"Task note shown in notifications"},"quickLink":{"type":"string","description":"Custom quick link included in notifications"},"ignoreImages":{"type":"boolean","default":false,"description":"Whether to ignore images in notifications"},"ignoreVideos":{"type":"boolean","default":false,"description":"Whether to ignore videos in notifications"},"followingFilters":{"type":"object","properties":{"followingMinPosts":{"type":"number","nullable":true,"description":"Minimum posts count filter"},"followingMaxPosts":{"type":"number","nullable":true,"description":"Maximum posts count filter"},"followingMinFollowers":{"type":"number","nullable":true,"description":"Minimum followers count filter"},"followingMaxFollowers":{"type":"number","nullable":true,"description":"Maximum followers count filter"},"followingMinFollowing":{"type":"number","nullable":true,"description":"Minimum following count filter"},"followingMaxFollowing":{"type":"number","nullable":true,"description":"Maximum following count filter"}},"description":"Filters for following notifications (typically used with Discord and Telegram notifications)"},"userUpdatesOptions":{"type":"object","properties":{"disableUsernameUpdate":{"type":"boolean","default":false,"description":"Disable username change notifications"},"disableNameUpdate":{"type":"boolean","default":false,"description":"Disable display name change notifications"},"disableAvatarUpdate":{"type":"boolean","default":false,"description":"Disable avatar change notifications"},"disableBannerUpdate":{"type":"boolean","default":false,"description":"Disable banner change notifications"},"disableLocationUpdate":{"type":"boolean","default":false,"description":"Disable location change notifications"},"disableDescriptionUpdate":{"type":"boolean","default":false,"description":"Disable bio/description change notifications"},"disableWebsiteUpdate":{"type":"boolean","default":false,"description":"Disable website change notifications"},"disablePinnedTweetUpdate":{"type":"boolean","default":false,"description":"Disable pinned tweet change notifications"}},"description":"Options for user update notifications (typically used with Discord and Telegram notifications)"},"start":{"type":"boolean","description":"Whether to automatically start the task after creation"}}}}}},"responses":{"200":{"description":"Task created successfully, the response includes the new task ID","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"id":{"type":"number","description":"Created task ID"}},"required":["error","id"]}}}},"400":{"description":"Invalid or incomplete request body (e.g. missing `user`/`keyword`, unknown module, task limit reached)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"},"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"The errors"}},"required":["error","message"]}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"}},"required":["error","message"]}}}},"500":{"description":"Unexpected server error"}}}}}}
```

## Start Task

> Activates a previously created (or stopped) task by its ID\
> \
> Starting an already-running task is a no-op, it returns success without restarting it

```json
{"openapi":"3.0.3","info":{"title":"Tweet Catcher Monitor API","version":"1.0.0"},"tags":[{"name":"Manage Tasks","description":"Operations for managing Tweet Catcher monitoring tasks"}],"servers":[{"url":"https://monitor-api.tweet-catcher.com/pro","description":"Production server"}],"security":[{"ApiKeyToken":[]}],"components":{"securitySchemes":{"ApiKeyToken":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey","description":"Api key for application authentication"}}},"paths":{"/start-task":{"post":{"tags":["Manage Tasks"],"summary":"Start Task","description":"Activates a previously created (or stopped) task by its ID\n\nStarting an already-running task is a no-op, it returns success without restarting it","operationId":"startTask","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","nullable":true,"description":"Task ID"}},"required":["id"],"description":"Task identifier payload"}}}},"responses":{"200":{"description":"Task started successfully","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"}},"required":["error"]}}}},"400":{"description":"Invalid request body or task not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"},"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"The errors"}},"required":["error","message"]}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"}},"required":["error","message"]}}}},"500":{"description":"Unexpected server error"}}}}}}
```

## Edit Task

> Updates the configuration of an existing task\
> \
> The task \*\*\`id\`\*\* is required, all other fields are optional and replace the current values when provided\
> The task does \*\*not\*\* need to be stopped before editing, changes are applied immediately

```json
{"openapi":"3.0.3","info":{"title":"Tweet Catcher Monitor API","version":"1.0.0"},"tags":[{"name":"Manage Tasks","description":"Operations for managing Tweet Catcher monitoring tasks"}],"servers":[{"url":"https://monitor-api.tweet-catcher.com/pro","description":"Production server"}],"security":[{"ApiKeyToken":[]}],"components":{"securitySchemes":{"ApiKeyToken":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey","description":"Api key for application authentication"}}},"paths":{"/edit-task":{"post":{"tags":["Manage Tasks"],"summary":"Edit Task","description":"Updates the configuration of an existing task\n\nThe task **`id`** is required, all other fields are optional and replace the current values when provided\nThe task does **not** need to be stopped before editing, changes are applied immediately","operationId":"editTask","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Unique task identifier"},"module":{"type":"string","enum":["twitter","truth_social","twitter_keyword"],"default":"twitter","description":"Platform module to monitor"},"user":{"type":"string","description":"Username to monitor (not applicable for keyword tasks)"},"keyword":{"type":"string","description":"Keyword to monitor (used by twitter_keyword module)"},"group":{"type":"string","description":"Task group for organization"},"options":{"type":"array","items":{"type":"string","enum":["posts","retweets","replies","deletion","following","unfollow","userUpdates","ocr"],"description":"Monitoring option"},"default":["posts"],"description":"Monitoring options"},"notification":{"type":"string","enum":["discord","telegram","webhook","websocket"],"default":"discord","description":"Notification method"},"differentWebhooks":{"type":"boolean","default":false,"description":"Whether to use different webhooks/chat IDs per monitoring option"},"webhook":{"type":"string","description":"Discord webhook URL or custom webhook URL"},"webhook-posts":{"type":"string","description":"Webhook for posts (if differentWebhooks is true)"},"webhook-following":{"type":"string","description":"Webhook for following updates (if differentWebhooks is true)"},"webhook-unfollow":{"type":"string","description":"Webhook for unfollow updates (if differentWebhooks is true)"},"webhook-userUpdates":{"type":"string","description":"Webhook for user updates (if differentWebhooks is true)"},"webhook-deletion":{"type":"string","description":"Webhook for deletion updates (if differentWebhooks is true)"},"chatId":{"type":"string","description":"Telegram chat ID"},"chatId-posts":{"type":"string","description":"Telegram chat ID for posts (if differentWebhooks is true)"},"chatId-following":{"type":"string","description":"Telegram chat ID for following updates (if differentWebhooks is true)"},"chatId-unfollow":{"type":"string","description":"Telegram chat ID for unfollow updates (if differentWebhooks is true)"},"chatId-userUpdates":{"type":"string","description":"Telegram chat ID for user updates (if differentWebhooks is true)"},"chatId-deletion":{"type":"string","description":"Telegram chat ID for deletion updates (if differentWebhooks is true)"},"pingKeywords":{"type":"object","properties":{"n":{"type":"array","items":{"type":"string"},"default":[],"description":"Negative keywords that suppress pings"},"p":{"type":"array","items":{"type":"string"},"default":[],"description":"Positive keywords that trigger pings"},"regex":{"type":"string","description":"Regex pattern used for ping matching"},"isRegex":{"type":"boolean","default":false,"description":"Whether regex matching is enabled"}},"description":"Keywords or regex configuration used for selective pinging"},"useRegex":{"type":"boolean","default":false,"description":"Whether to use regex for ping keywords"},"ping":{"type":"string","enum":["everyone","here","role","none"],"default":"none","description":"Discord ping option"},"roleId":{"type":"string","description":"Discord role ID to ping (required if ping is role)"},"note":{"type":"string","description":"Task note shown in notifications"},"quickLink":{"type":"string","description":"Custom quick link included in notifications"},"ignoreImages":{"type":"boolean","default":false,"description":"Whether to ignore images in notifications"},"ignoreVideos":{"type":"boolean","default":false,"description":"Whether to ignore videos in notifications"},"followingFilters":{"type":"object","properties":{"followingMinPosts":{"type":"number","nullable":true,"description":"Minimum posts count filter"},"followingMaxPosts":{"type":"number","nullable":true,"description":"Maximum posts count filter"},"followingMinFollowers":{"type":"number","nullable":true,"description":"Minimum followers count filter"},"followingMaxFollowers":{"type":"number","nullable":true,"description":"Maximum followers count filter"},"followingMinFollowing":{"type":"number","nullable":true,"description":"Minimum following count filter"},"followingMaxFollowing":{"type":"number","nullable":true,"description":"Maximum following count filter"}},"description":"Filters for following notifications (typically used with Discord and Telegram notifications)"},"userUpdatesOptions":{"type":"object","properties":{"disableUsernameUpdate":{"type":"boolean","default":false,"description":"Disable username change notifications"},"disableNameUpdate":{"type":"boolean","default":false,"description":"Disable display name change notifications"},"disableAvatarUpdate":{"type":"boolean","default":false,"description":"Disable avatar change notifications"},"disableBannerUpdate":{"type":"boolean","default":false,"description":"Disable banner change notifications"},"disableLocationUpdate":{"type":"boolean","default":false,"description":"Disable location change notifications"},"disableDescriptionUpdate":{"type":"boolean","default":false,"description":"Disable bio/description change notifications"},"disableWebsiteUpdate":{"type":"boolean","default":false,"description":"Disable website change notifications"},"disablePinnedTweetUpdate":{"type":"boolean","default":false,"description":"Disable pinned tweet change notifications"}},"description":"Options for user update notifications (typically used with Discord and Telegram notifications)"},"_keys":{"type":"array","items":{"type":"string"}}},"required":["id","_keys"]}}}},"responses":{"200":{"description":"Task updated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"}},"required":["error"]}}}},"400":{"description":"Invalid request body or task not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"},"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"The errors"}},"required":["error","message"]}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"}},"required":["error","message"]}}}},"500":{"description":"Unexpected server error"}}}}}}
```

## Stop Task

> Pauses a running task without deleting it\
> \
> The task retains all its configuration and can be restarted with \`/start-task\` at any time\
> Stopping an already-stopped task is a no-op, it returns success without side effects

```json
{"openapi":"3.0.3","info":{"title":"Tweet Catcher Monitor API","version":"1.0.0"},"tags":[{"name":"Manage Tasks","description":"Operations for managing Tweet Catcher monitoring tasks"}],"servers":[{"url":"https://monitor-api.tweet-catcher.com/pro","description":"Production server"}],"security":[{"ApiKeyToken":[]}],"components":{"securitySchemes":{"ApiKeyToken":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey","description":"Api key for application authentication"}}},"paths":{"/stop-task":{"post":{"tags":["Manage Tasks"],"summary":"Stop Task","description":"Pauses a running task without deleting it\n\nThe task retains all its configuration and can be restarted with `/start-task` at any time\nStopping an already-stopped task is a no-op, it returns success without side effects","operationId":"stopTask","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","nullable":true,"description":"Task ID"}},"required":["id"],"description":"Task identifier payload"}}}},"responses":{"200":{"description":"Task stopped successfully","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"}},"required":["error"]}}}},"400":{"description":"Invalid request body or task not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"},"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"The errors"}},"required":["error","message"]}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"}},"required":["error","message"]}}}},"500":{"description":"Unexpected server error"}}}}}}
```

## Delete Task

> Permanently delete a task\
> \
> \> \*\*This action is irreversible\*\* If you only want to pause monitoring, use \`/stop-task\` instead\
> \
> The task is automatically stopped before deletion if it is currently running

```json
{"openapi":"3.0.3","info":{"title":"Tweet Catcher Monitor API","version":"1.0.0"},"tags":[{"name":"Manage Tasks","description":"Operations for managing Tweet Catcher monitoring tasks"}],"servers":[{"url":"https://monitor-api.tweet-catcher.com/pro","description":"Production server"}],"security":[{"ApiKeyToken":[]}],"components":{"securitySchemes":{"ApiKeyToken":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey","description":"Api key for application authentication"}}},"paths":{"/delete-task":{"post":{"tags":["Manage Tasks"],"summary":"Delete Task","description":"Permanently delete a task\n\n> **This action is irreversible** If you only want to pause monitoring, use `/stop-task` instead\n\nThe task is automatically stopped before deletion if it is currently running","operationId":"deleteTask","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","nullable":true,"description":"Task ID"}},"required":["id"],"description":"Task identifier payload"}}}},"responses":{"200":{"description":"Task deleted successfully","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"}},"required":["error"]}}}},"400":{"description":"Invalid request body or task not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"},"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"The errors"}},"required":["error","message"]}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"}},"required":["error","message"]}}}},"500":{"description":"Unexpected server error"}}}}}}
```

## Bulk Add Tasks

> Creates up to 200 tasks in a single request. Progress is streamed back via \*\*Server-Sent Events\*\* — one \`progress\` event per task, followed by \`done\` (or \`error\` on a fatal failure)

````json
{"openapi":"3.0.3","info":{"title":"Tweet Catcher Monitor API","version":"1.0.0"},"tags":[{"name":"Manage Tasks","description":"Operations for managing Tweet Catcher monitoring tasks"}],"servers":[{"url":"https://monitor-api.tweet-catcher.com/pro","description":"Production server"}],"security":[{"ApiKeyToken":[]}],"components":{"securitySchemes":{"ApiKeyToken":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey","description":"Api key for application authentication"}}},"paths":{"/bulk-add-tasks":{"post":{"tags":["Manage Tasks"],"summary":"Bulk Add Tasks","description":"Creates up to 200 tasks in a single request. Progress is streamed back via **Server-Sent Events** — one `progress` event per task, followed by `done` (or `error` on a fatal failure)","operationId":"bulkAddTasks","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"module":{"type":"string","enum":["twitter","truth_social","twitter_keyword"],"default":"twitter","description":"Platform module to monitor"},"user":{"type":"string","description":"Username to monitor (not applicable for keyword tasks)"},"keyword":{"type":"string","description":"Keyword to monitor (used by twitter_keyword module)"},"group":{"type":"string","description":"Task group for organization"},"options":{"type":"array","items":{"type":"string","enum":["posts","retweets","replies","deletion","following","unfollow","userUpdates","ocr"],"description":"Monitoring option"},"default":["posts"],"description":"Monitoring options"},"notification":{"type":"string","enum":["discord","telegram","webhook","websocket"],"default":"discord","description":"Notification method"},"differentWebhooks":{"type":"boolean","default":false,"description":"Whether to use different webhooks/chat IDs per monitoring option"},"webhook":{"type":"string","description":"Discord webhook URL or custom webhook URL"},"webhook-posts":{"type":"string","description":"Webhook for posts (if differentWebhooks is true)"},"webhook-following":{"type":"string","description":"Webhook for following updates (if differentWebhooks is true)"},"webhook-unfollow":{"type":"string","description":"Webhook for unfollow updates (if differentWebhooks is true)"},"webhook-userUpdates":{"type":"string","description":"Webhook for user updates (if differentWebhooks is true)"},"webhook-deletion":{"type":"string","description":"Webhook for deletion updates (if differentWebhooks is true)"},"chatId":{"type":"string","description":"Telegram chat ID"},"chatId-posts":{"type":"string","description":"Telegram chat ID for posts (if differentWebhooks is true)"},"chatId-following":{"type":"string","description":"Telegram chat ID for following updates (if differentWebhooks is true)"},"chatId-unfollow":{"type":"string","description":"Telegram chat ID for unfollow updates (if differentWebhooks is true)"},"chatId-userUpdates":{"type":"string","description":"Telegram chat ID for user updates (if differentWebhooks is true)"},"chatId-deletion":{"type":"string","description":"Telegram chat ID for deletion updates (if differentWebhooks is true)"},"pingKeywords":{"type":"object","properties":{"n":{"type":"array","items":{"type":"string"},"default":[],"description":"Negative keywords that suppress pings"},"p":{"type":"array","items":{"type":"string"},"default":[],"description":"Positive keywords that trigger pings"},"regex":{"type":"string","description":"Regex pattern used for ping matching"},"isRegex":{"type":"boolean","default":false,"description":"Whether regex matching is enabled"}},"description":"Keywords or regex configuration used for selective pinging"},"useRegex":{"type":"boolean","default":false,"description":"Whether to use regex for ping keywords"},"ping":{"type":"string","enum":["everyone","here","role","none"],"default":"none","description":"Discord ping option"},"roleId":{"type":"string","description":"Discord role ID to ping (required if ping is role)"},"note":{"type":"string","description":"Task note shown in notifications"},"quickLink":{"type":"string","description":"Custom quick link included in notifications"},"ignoreImages":{"type":"boolean","default":false,"description":"Whether to ignore images in notifications"},"ignoreVideos":{"type":"boolean","default":false,"description":"Whether to ignore videos in notifications"},"followingFilters":{"type":"object","properties":{"followingMinPosts":{"type":"number","nullable":true,"description":"Minimum posts count filter"},"followingMaxPosts":{"type":"number","nullable":true,"description":"Maximum posts count filter"},"followingMinFollowers":{"type":"number","nullable":true,"description":"Minimum followers count filter"},"followingMaxFollowers":{"type":"number","nullable":true,"description":"Maximum followers count filter"},"followingMinFollowing":{"type":"number","nullable":true,"description":"Minimum following count filter"},"followingMaxFollowing":{"type":"number","nullable":true,"description":"Maximum following count filter"}},"description":"Filters for following notifications (typically used with Discord and Telegram notifications)"},"userUpdatesOptions":{"type":"object","properties":{"disableUsernameUpdate":{"type":"boolean","default":false,"description":"Disable username change notifications"},"disableNameUpdate":{"type":"boolean","default":false,"description":"Disable display name change notifications"},"disableAvatarUpdate":{"type":"boolean","default":false,"description":"Disable avatar change notifications"},"disableBannerUpdate":{"type":"boolean","default":false,"description":"Disable banner change notifications"},"disableLocationUpdate":{"type":"boolean","default":false,"description":"Disable location change notifications"},"disableDescriptionUpdate":{"type":"boolean","default":false,"description":"Disable bio/description change notifications"},"disableWebsiteUpdate":{"type":"boolean","default":false,"description":"Disable website change notifications"},"disablePinnedTweetUpdate":{"type":"boolean","default":false,"description":"Disable pinned tweet change notifications"}},"description":"Options for user update notifications (typically used with Discord and Telegram notifications)"},"start":{"type":"boolean","description":"Whether to automatically start the task after creation"}}},"minItems":1,"maxItems":200}}}},"responses":{"200":{"description":"SSE stream — tasks are processed sequentially; each result is emitted as a `progress` event","content":{"text/event-stream":{"schema":{"type":"string","description":"A **Server-Sent Events (SSE)** stream (`Content-Type: text/event-stream`).\n\nThe connection stays open while tasks are processed. Three named event types are sent:\n\n| Event      | When                             | Data shape                 |\n|------------|----------------------------------|----------------------------|\n| `progress` | After each task is processed     | `{ index, total, result }` |\n| `done`     | All tasks finished successfully  | `{ total }`                |\n| `error`    | Fatal error aborts the operation | `{ error: true, message }` |\n\nExample stream:\n```\nevent: progress\ndata: {\"index\":0,\"total\":3,\"result\":{\"error\":false,\"id\":932}}\n\nevent: progress\ndata: {\"index\":1,\"total\":3,\"result\":{\"error\":true,\"message\":\"Task limit reached\"}}\n\nevent: done\ndata: {\"total\":3}\n```"}}}},"400":{"description":"Invalid request parameters (stream never opened)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"},"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"The errors"}},"required":["error","message"]}}}},"401":{"description":"Authentication failed","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"}},"required":["error","message"]}}}},"500":{"description":"Server error"}}}}}}
````

## Bulk Start Tasks

> Starts up to 200 tasks by ID. Progress is streamed back via \*\*Server-Sent Events\*\* — one \`progress\` event per task, followed by \`done\` (or \`error\` on a fatal failure)

````json
{"openapi":"3.0.3","info":{"title":"Tweet Catcher Monitor API","version":"1.0.0"},"tags":[{"name":"Manage Tasks","description":"Operations for managing Tweet Catcher monitoring tasks"}],"servers":[{"url":"https://monitor-api.tweet-catcher.com/pro","description":"Production server"}],"security":[{"ApiKeyToken":[]}],"components":{"securitySchemes":{"ApiKeyToken":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey","description":"Api key for application authentication"}}},"paths":{"/bulk-start-tasks":{"post":{"tags":["Manage Tasks"],"summary":"Bulk Start Tasks","description":"Starts up to 200 tasks by ID. Progress is streamed back via **Server-Sent Events** — one `progress` event per task, followed by `done` (or `error` on a fatal failure)","operationId":"bulkStartTasks","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"number","nullable":true},"minItems":1,"maxItems":200,"description":"Array of task IDs"}}}},"responses":{"200":{"description":"SSE stream — tasks are started sequentially; each result is emitted as a `progress` event","content":{"text/event-stream":{"schema":{"type":"string","description":"A **Server-Sent Events (SSE)** stream (`Content-Type: text/event-stream`).\n\nThe connection stays open while tasks are processed. Three named event types are sent:\n\n| Event      | When                             | Data shape                 |\n|------------|----------------------------------|----------------------------|\n| `progress` | After each task is processed     | `{ index, total, result }` |\n| `done`     | All tasks finished successfully  | `{ total }`                |\n| `error`    | Fatal error aborts the operation | `{ error: true, message }` |\n\nExample stream:\n```\nevent: progress\ndata: {\"index\":0,\"total\":3,\"result\":{\"error\":false,\"id\":932}}\n\nevent: progress\ndata: {\"index\":1,\"total\":3,\"result\":{\"error\":true,\"message\":\"Task limit reached\"}}\n\nevent: done\ndata: {\"total\":3}\n```"}}}},"400":{"description":"Invalid request parameters (stream never opened)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"},"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"The errors"}},"required":["error","message"]}}}},"401":{"description":"Authentication failed","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"}},"required":["error","message"]}}}},"500":{"description":"Server error"}}}}}}
````

## Bulk Edit Tasks

> Edits up to 200 tasks in a single request. Progress is streamed back via \*\*Server-Sent Events\*\* — one \`progress\` event per task, followed by \`done\` (or \`error\` on a fatal failure)

````json
{"openapi":"3.0.3","info":{"title":"Tweet Catcher Monitor API","version":"1.0.0"},"tags":[{"name":"Manage Tasks","description":"Operations for managing Tweet Catcher monitoring tasks"}],"servers":[{"url":"https://monitor-api.tweet-catcher.com/pro","description":"Production server"}],"security":[{"ApiKeyToken":[]}],"components":{"securitySchemes":{"ApiKeyToken":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey","description":"Api key for application authentication"}}},"paths":{"/bulk-edit-tasks":{"post":{"tags":["Manage Tasks"],"summary":"Bulk Edit Tasks","description":"Edits up to 200 tasks in a single request. Progress is streamed back via **Server-Sent Events** — one `progress` event per task, followed by `done` (or `error` on a fatal failure)","operationId":"bulkEditTasks","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Unique task identifier"},"module":{"type":"string","enum":["twitter","truth_social","twitter_keyword"],"default":"twitter","description":"Platform module to monitor"},"user":{"type":"string","description":"Username to monitor (not applicable for keyword tasks)"},"keyword":{"type":"string","description":"Keyword to monitor (used by twitter_keyword module)"},"group":{"type":"string","description":"Task group for organization"},"options":{"type":"array","items":{"type":"string","enum":["posts","retweets","replies","deletion","following","unfollow","userUpdates","ocr"],"description":"Monitoring option"},"default":["posts"],"description":"Monitoring options"},"notification":{"type":"string","enum":["discord","telegram","webhook","websocket"],"default":"discord","description":"Notification method"},"differentWebhooks":{"type":"boolean","default":false,"description":"Whether to use different webhooks/chat IDs per monitoring option"},"webhook":{"type":"string","description":"Discord webhook URL or custom webhook URL"},"webhook-posts":{"type":"string","description":"Webhook for posts (if differentWebhooks is true)"},"webhook-following":{"type":"string","description":"Webhook for following updates (if differentWebhooks is true)"},"webhook-unfollow":{"type":"string","description":"Webhook for unfollow updates (if differentWebhooks is true)"},"webhook-userUpdates":{"type":"string","description":"Webhook for user updates (if differentWebhooks is true)"},"webhook-deletion":{"type":"string","description":"Webhook for deletion updates (if differentWebhooks is true)"},"chatId":{"type":"string","description":"Telegram chat ID"},"chatId-posts":{"type":"string","description":"Telegram chat ID for posts (if differentWebhooks is true)"},"chatId-following":{"type":"string","description":"Telegram chat ID for following updates (if differentWebhooks is true)"},"chatId-unfollow":{"type":"string","description":"Telegram chat ID for unfollow updates (if differentWebhooks is true)"},"chatId-userUpdates":{"type":"string","description":"Telegram chat ID for user updates (if differentWebhooks is true)"},"chatId-deletion":{"type":"string","description":"Telegram chat ID for deletion updates (if differentWebhooks is true)"},"pingKeywords":{"type":"object","properties":{"n":{"type":"array","items":{"type":"string"},"default":[],"description":"Negative keywords that suppress pings"},"p":{"type":"array","items":{"type":"string"},"default":[],"description":"Positive keywords that trigger pings"},"regex":{"type":"string","description":"Regex pattern used for ping matching"},"isRegex":{"type":"boolean","default":false,"description":"Whether regex matching is enabled"}},"description":"Keywords or regex configuration used for selective pinging"},"useRegex":{"type":"boolean","default":false,"description":"Whether to use regex for ping keywords"},"ping":{"type":"string","enum":["everyone","here","role","none"],"default":"none","description":"Discord ping option"},"roleId":{"type":"string","description":"Discord role ID to ping (required if ping is role)"},"note":{"type":"string","description":"Task note shown in notifications"},"quickLink":{"type":"string","description":"Custom quick link included in notifications"},"ignoreImages":{"type":"boolean","default":false,"description":"Whether to ignore images in notifications"},"ignoreVideos":{"type":"boolean","default":false,"description":"Whether to ignore videos in notifications"},"followingFilters":{"type":"object","properties":{"followingMinPosts":{"type":"number","nullable":true,"description":"Minimum posts count filter"},"followingMaxPosts":{"type":"number","nullable":true,"description":"Maximum posts count filter"},"followingMinFollowers":{"type":"number","nullable":true,"description":"Minimum followers count filter"},"followingMaxFollowers":{"type":"number","nullable":true,"description":"Maximum followers count filter"},"followingMinFollowing":{"type":"number","nullable":true,"description":"Minimum following count filter"},"followingMaxFollowing":{"type":"number","nullable":true,"description":"Maximum following count filter"}},"description":"Filters for following notifications (typically used with Discord and Telegram notifications)"},"userUpdatesOptions":{"type":"object","properties":{"disableUsernameUpdate":{"type":"boolean","default":false,"description":"Disable username change notifications"},"disableNameUpdate":{"type":"boolean","default":false,"description":"Disable display name change notifications"},"disableAvatarUpdate":{"type":"boolean","default":false,"description":"Disable avatar change notifications"},"disableBannerUpdate":{"type":"boolean","default":false,"description":"Disable banner change notifications"},"disableLocationUpdate":{"type":"boolean","default":false,"description":"Disable location change notifications"},"disableDescriptionUpdate":{"type":"boolean","default":false,"description":"Disable bio/description change notifications"},"disableWebsiteUpdate":{"type":"boolean","default":false,"description":"Disable website change notifications"},"disablePinnedTweetUpdate":{"type":"boolean","default":false,"description":"Disable pinned tweet change notifications"}},"description":"Options for user update notifications (typically used with Discord and Telegram notifications)"},"_keys":{"type":"array","items":{"type":"string"}}},"required":["id","_keys"]},"minItems":1,"maxItems":200}}}},"responses":{"200":{"description":"SSE stream — tasks are edited sequentially; each result is emitted as a `progress` event","content":{"text/event-stream":{"schema":{"type":"string","description":"A **Server-Sent Events (SSE)** stream (`Content-Type: text/event-stream`).\n\nThe connection stays open while tasks are processed. Three named event types are sent:\n\n| Event      | When                             | Data shape                 |\n|------------|----------------------------------|----------------------------|\n| `progress` | After each task is processed     | `{ index, total, result }` |\n| `done`     | All tasks finished successfully  | `{ total }`                |\n| `error`    | Fatal error aborts the operation | `{ error: true, message }` |\n\nExample stream:\n```\nevent: progress\ndata: {\"index\":0,\"total\":3,\"result\":{\"error\":false,\"id\":932}}\n\nevent: progress\ndata: {\"index\":1,\"total\":3,\"result\":{\"error\":true,\"message\":\"Task limit reached\"}}\n\nevent: done\ndata: {\"total\":3}\n```"}}}},"400":{"description":"Invalid request parameters (stream never opened)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"},"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"The errors"}},"required":["error","message"]}}}},"401":{"description":"Authentication failed","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"}},"required":["error","message"]}}}},"500":{"description":"Server error"}}}}}}
````

## Bulk Stop Tasks

> Stops up to 200 tasks by ID. Progress is streamed back via \*\*Server-Sent Events\*\* — one \`progress\` event per task, followed by \`done\` (or \`error\` on a fatal failure)

````json
{"openapi":"3.0.3","info":{"title":"Tweet Catcher Monitor API","version":"1.0.0"},"tags":[{"name":"Manage Tasks","description":"Operations for managing Tweet Catcher monitoring tasks"}],"servers":[{"url":"https://monitor-api.tweet-catcher.com/pro","description":"Production server"}],"security":[{"ApiKeyToken":[]}],"components":{"securitySchemes":{"ApiKeyToken":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey","description":"Api key for application authentication"}}},"paths":{"/bulk-stop-tasks":{"post":{"tags":["Manage Tasks"],"summary":"Bulk Stop Tasks","description":"Stops up to 200 tasks by ID. Progress is streamed back via **Server-Sent Events** — one `progress` event per task, followed by `done` (or `error` on a fatal failure)","operationId":"bulkStopTasks","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"number","nullable":true},"minItems":1,"maxItems":200,"description":"Array of task IDs"}}}},"responses":{"200":{"description":"SSE stream — tasks are stopped sequentially; each result is emitted as a `progress` event","content":{"text/event-stream":{"schema":{"type":"string","description":"A **Server-Sent Events (SSE)** stream (`Content-Type: text/event-stream`).\n\nThe connection stays open while tasks are processed. Three named event types are sent:\n\n| Event      | When                             | Data shape                 |\n|------------|----------------------------------|----------------------------|\n| `progress` | After each task is processed     | `{ index, total, result }` |\n| `done`     | All tasks finished successfully  | `{ total }`                |\n| `error`    | Fatal error aborts the operation | `{ error: true, message }` |\n\nExample stream:\n```\nevent: progress\ndata: {\"index\":0,\"total\":3,\"result\":{\"error\":false,\"id\":932}}\n\nevent: progress\ndata: {\"index\":1,\"total\":3,\"result\":{\"error\":true,\"message\":\"Task limit reached\"}}\n\nevent: done\ndata: {\"total\":3}\n```"}}}},"400":{"description":"Invalid request parameters (stream never opened)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"},"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"The errors"}},"required":["error","message"]}}}},"401":{"description":"Authentication failed","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"}},"required":["error","message"]}}}},"500":{"description":"Server error"}}}}}}
````

## Bulk Delete Tasks

> Deletes up to 200 tasks by ID. Progress is streamed back via \*\*Server-Sent Events\*\* — one \`progress\` event per task, followed by \`done\` (or \`error\` on a fatal failure)

````json
{"openapi":"3.0.3","info":{"title":"Tweet Catcher Monitor API","version":"1.0.0"},"tags":[{"name":"Manage Tasks","description":"Operations for managing Tweet Catcher monitoring tasks"}],"servers":[{"url":"https://monitor-api.tweet-catcher.com/pro","description":"Production server"}],"security":[{"ApiKeyToken":[]}],"components":{"securitySchemes":{"ApiKeyToken":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey","description":"Api key for application authentication"}}},"paths":{"/bulk-delete-tasks":{"post":{"tags":["Manage Tasks"],"summary":"Bulk Delete Tasks","description":"Deletes up to 200 tasks by ID. Progress is streamed back via **Server-Sent Events** — one `progress` event per task, followed by `done` (or `error` on a fatal failure)","operationId":"bulkDeleteTasks","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"number","nullable":true},"minItems":1,"maxItems":200,"description":"Array of task IDs"}}}},"responses":{"200":{"description":"SSE stream — tasks are deleted sequentially; each result is emitted as a `progress` event","content":{"text/event-stream":{"schema":{"type":"string","description":"A **Server-Sent Events (SSE)** stream (`Content-Type: text/event-stream`).\n\nThe connection stays open while tasks are processed. Three named event types are sent:\n\n| Event      | When                             | Data shape                 |\n|------------|----------------------------------|----------------------------|\n| `progress` | After each task is processed     | `{ index, total, result }` |\n| `done`     | All tasks finished successfully  | `{ total }`                |\n| `error`    | Fatal error aborts the operation | `{ error: true, message }` |\n\nExample stream:\n```\nevent: progress\ndata: {\"index\":0,\"total\":3,\"result\":{\"error\":false,\"id\":932}}\n\nevent: progress\ndata: {\"index\":1,\"total\":3,\"result\":{\"error\":true,\"message\":\"Task limit reached\"}}\n\nevent: done\ndata: {\"total\":3}\n```"}}}},"400":{"description":"Invalid request parameters (stream never opened)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"},"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"The errors"}},"required":["error","message"]}}}},"401":{"description":"Authentication failed","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"boolean","description":"Whether an error occurred"},"message":{"type":"string","description":"The error message"}},"required":["error","message"]}}}},"500":{"description":"Server error"}}}}}}
````
