{"openapi":"3.1.0","info":{"title":"Upstash QStash US (BYOK) API","version":"0.1.0","description":"Upstash QStash US (BYOK) lets an AI assistant read your own Upstash QStash US data through the Upstash QStash US API with a key you supply (QStash token for the us-east-1 region). Read-only: 12 tools (list_queues, get_queue, list_schedules, get_schedule, list_url_groups, get_url_group, get_message, list_logs, list_dead_letter_messages, list_flow_control_keys, get_global_parallelism,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-upstash-qstash-us.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-upstash-qstash-us/docs"},"termsOfService":"https://connectorbay.com/byok-upstash-qstash-us/terms"},"servers":[{"url":"https://byok-upstash-qstash-us.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-upstash-qstash-us/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_queues":{"post":{"operationId":"list_queues","summary":"List QStash queues with parallelism, paused flag and lag (number of unprocessed messages). Use for \"Which QStash queues ","description":"List QStash queues with parallelism, paused flag and lag (number of unprocessed messages). Use for \"Which QStash queues do I have and how many messages are waiting\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_queuesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_queue":{"post":{"operationId":"get_queue","summary":"Get one QStash queue by name with parallelism, paused flag and lag. Use for \"How many messages are waiting in this QStas","description":"Get one QStash queue by name with parallelism, paused flag and lag. Use for \"How many messages are waiting in this QStash queue\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"queue_name":{"description":"Queue name, as returned by list_queues.","maxLength":200,"title":"Queue Name","type":"string"}},"required":["queue_name"],"title":"get_queueArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_schedules":{"post":{"operationId":"list_schedules","summary":"List QStash schedules (cron-based recurring messages) with destination, cron expression, paused flag and last and next r","description":"List QStash schedules (cron-based recurring messages) with destination, cron expression, paused flag and last and next run times. Headers and bodies are not returned. Use for \"Which QStash schedules are active and when do they run next\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_schedulesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_schedule":{"post":{"operationId":"get_schedule","summary":"Get one QStash schedule by ID with cron, destination, retry settings and run times. Headers and body are not returned. U","description":"Get one QStash schedule by ID with cron, destination, retry settings and run times. Headers and body are not returned. Use for \"Show the details of one QStash schedule\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"schedule_id":{"description":"Schedule ID, as returned by list_schedules.","maxLength":200,"title":"Schedule Id","type":"string"}},"required":["schedule_id"],"title":"get_scheduleArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_url_groups":{"post":{"operationId":"list_url_groups","summary":"List QStash URL groups (topics that fan a message out to several endpoints) with their endpoints. Use for \"Which QStash ","description":"List QStash URL groups (topics that fan a message out to several endpoints) with their endpoints. Use for \"Which QStash URL groups exist and what endpoints are in them\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_url_groupsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_url_group":{"post":{"operationId":"get_url_group","summary":"Get one QStash URL group by name with its endpoints. Use for \"Which endpoints does this QStash URL group deliver to\".","description":"Get one QStash URL group by name with its endpoints. Use for \"Which endpoints does this QStash URL group deliver to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"url_group_name":{"description":"URL group name, as returned by list_url_groups.","maxLength":200,"title":"Url Group Name","type":"string"}},"required":["url_group_name"],"title":"get_url_groupArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_message":{"post":{"operationId":"get_message","summary":"Get one published QStash message by ID: destination, method, retries, schedule, queue and label (headers and body are no","description":"Get one published QStash message by ID: destination, method, retries, schedule, queue and label (headers and body are not returned). Use for \"What is the status of this QStash message\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"message_id":{"description":"Message ID, as returned when publishing or by list_logs.","maxLength":200,"title":"Message Id","type":"string"}},"required":["message_id"],"title":"get_messageArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_logs":{"post":{"operationId":"list_logs","summary":"List QStash delivery logs, newest first, with message state (created, retry, error, delivered), destination, response st","description":"List QStash delivery logs, newest first, with message state (created, retry, error, delivered), destination, response status and error. Filter by state, URL, queue, schedule or time. Use for \"Which QStash deliveries failed recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cursor":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor for the next page: the cursor value of the previous answer.","title":"Cursor"},"count":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items to return (1 to 100, default 100).","title":"Count"},"message_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only logs of this message ID.","title":"Message Id"},"state":{"anyOf":[{"enum":["CREATED","ACTIVE","RETRY","ERROR","IN_PROGRESS","DELIVERED","CANCEL_REQUESTED","CANCELLED"],"type":"string"},{"type":"null"}],"default":null,"description":"Only logs in this state: CREATED, ACTIVE, RETRY, ERROR, IN_PROGRESS, DELIVERED, CANCEL_REQUESTED or CANCELLED.","title":"State"},"url":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Only logs for this destination URL.","title":"Url"},"queue_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only logs of this queue.","title":"Queue Name"},"schedule_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only logs of this schedule.","title":"Schedule Id"},"from_date":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only items created after this time, in Unix milliseconds.","title":"From Date"},"to_date":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only items created before this time, in Unix milliseconds.","title":"To Date"}},"title":"list_logsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_dead_letter_messages":{"post":{"operationId":"list_dead_letter_messages","summary":"List messages in the QStash dead letter queue (deliveries that exhausted their retries) with destination, last response ","description":"List messages in the QStash dead letter queue (deliveries that exhausted their retries) with destination, last response status and times. Headers and bodies are not returned. Use for \"Which QStash messages ended up in the dead letter queue\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cursor":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor for the next page: the cursor value of the previous answer.","title":"Cursor"},"count":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items to return (1 to 100, default 100).","title":"Count"},"message_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only this message ID.","title":"Message Id"},"queue_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only messages of this queue.","title":"Queue Name"},"schedule_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only messages of this schedule.","title":"Schedule Id"},"from_date":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only items created after this time, in Unix milliseconds.","title":"From Date"},"to_date":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only items created before this time, in Unix milliseconds.","title":"To Date"}},"title":"list_dead_letter_messagesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_flow_control_keys":{"post":{"operationId":"list_flow_control_keys","summary":"List QStash flow control keys with their wait list size, parallelism and rate usage, and whether they are pinned or paus","description":"List QStash flow control keys with their wait list size, parallelism and rate usage, and whether they are pinned or paused. Use for \"Are any QStash flow control keys backed up\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_flow_control_keysArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_global_parallelism":{"post":{"operationId":"get_global_parallelism","summary":"Show how much of the account's global parallelism QStash is using across all flow control keys. Use for \"How much global","description":"Show how much of the account's global parallelism QStash is using across all flow control keys. Use for \"How much global parallelism is QStash using\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_global_parallelismArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_bulk_actions":{"post":{"operationId":"list_bulk_actions","summary":"List bulk actions (filter-based message cancellations) with state, total and processed counts and times. Use for \"Are an","description":"List bulk actions (filter-based message cancellations) with state, total and processed counts and times. Use for \"Are any QStash bulk cancellations still running\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cursor":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor for the next page: the cursor value of the previous answer.","title":"Cursor"},"count":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items to return (1 to 1000, default 100).","title":"Count"},"state":{"anyOf":[{"enum":["IN_PROGRESS","FINISHED"],"type":"string"},{"type":"null"}],"default":null,"description":"Only bulk actions in this state: IN_PROGRESS or FINISHED.","title":"State"}},"title":"list_bulk_actionsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}