Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
211 changes: 188 additions & 23 deletions devops/developer-api/openapi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1434,13 +1434,20 @@ paths:
example: "OK"
security:
- basicAuth: []
/qstash/user:
/qstash/user/{id}:
get:
summary: Get QStash
description: Retrieves detailed information about the authenticated user's QStash, including plan details, limits, and configuration
description: Retrieves detailed information about the specified QStash user, including plan details, limits, and configuration
operationId: getQStashUser
tags:
- qstash
parameters:
- name: id
in: path
required: true
schema:
type: string
description: QStash user ID
responses:
'200':
description: Successful response
Expand All @@ -1450,18 +1457,23 @@ paths:
$ref: '#/components/schemas/QStashUser'
security:
- basicAuth: []
/qstash/user/rotatetoken:
servers:
- url: https://api.upstash.com
/qstash/rotate-token/{id}:
post:
summary: Reset QStash Token
description: |
Resets the authentication credentials for the QStash user account.
Resets the authentication credentials for the QStash user account.
This invalidates the old password and token, and generates new ones.
Returns the updated user information with new credentials.
operationId: resetQStashToken
tags:
- qstash
parameters:
- name: id
in: path
required: true
schema:
type: string
description: QStash user ID
responses:
'200':
description: Token reset successfully, returns updated user information with new credentials
Expand All @@ -1471,9 +1483,7 @@ paths:
$ref: '#/components/schemas/QStashUser'
security:
- basicAuth: []
/qstash-upgrade:
servers:
- url: https://api.upstash.com
/qstash/set-plan/{id}:
post:
summary: Set QStash Plan
description: |
Expand All @@ -1482,27 +1492,30 @@ paths:
operationId: setQStashPlan
tags:
- qstash
parameters:
- name: id
in: path
required: true
schema:
type: string
description: QStash user ID
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- customer_id
- plan_name
properties:
customer_id:
type: string
description: Customer identifier or team ID
example: example@upstash.com
plan_name:
type: string
description: Target plan to upgrade to
enum:
- paid
- qstash_enterprise_1m
- qstash_enterprise_10m
- qstash_fixed_1m
- qstash_fixed_10m
- qstash_fixed_100m
example: paid
responses:
"200":
Expand All @@ -1514,16 +1527,22 @@ paths:
example: "OK"
security:
- basicAuth: []
/qstash/stats:
/qstash/stats/{id}:
get:
summary: Get QStash Stats
description: |
Retrieves detailed usage statistics for the QStash account including
Retrieves detailed usage statistics for the QStash account including
daily requests, billing, bandwidth, and workflow metrics over time.
operationId: getQStashStats
tags:
- qstash
parameters:
- name: id
in: path
required: true
schema:
type: string
description: QStash user ID
- name: period
in: query
required: false
Expand All @@ -1539,9 +1558,9 @@ paths:
- 30d
default: 1h
description: |
Time period for statistics aggregation. Each period returns 60 datapoints
with intervals adjusted to the period length.
Time period for statistics aggregation. Each period returns 60 datapoints
with intervals adjusted to the period length.

Exceptionally for 30 days, it returns 240 datapoints with 3-hour intervals for increased granularity.
example: 3h
responses:
Expand All @@ -1553,6 +1572,143 @@ paths:
$ref: '#/components/schemas/QStashStats'
security:
- basicAuth: []
/qstash/ipv4:
get:
summary: Get QStash IPv4 Addresses
description: Returns the list of IPv4 addresses used by QStash for sending requests.
operationId: getQStashIPv4
tags:
- qstash
responses:
'200':
description: List of IPv4 CIDR blocks
content:
application/json:
schema:
type: array
items:
type: string
example: ["3.125.136.186/32", "18.198.95.233/32"]
Copy link

Copilot AI Mar 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/qstash/ipv4 is missing the security: - basicAuth: [] block, while the rest of the Developer API operations (and the authentication docs) indicate Basic Auth is required. If this endpoint is meant to be authenticated like the others, add the security requirement here; if it’s intentionally public, it should be explicitly documented as an exception.

Suggested change
example: ["3.125.136.186/32", "18.198.95.233/32"]
example: ["3.125.136.186/32", "18.198.95.233/32"]
security:
- basicAuth: []

Copilot uses AI. Check for mistakes.
/qstash/move-to-team:
post:
summary: Move QStash to Team
description: Moves a QStash instance to a different team.
operationId: moveQStashToTeam
tags:
- qstash
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- qstash_id
- target_team_id
properties:
qstash_id:
type: string
description: ID of the QStash instance to move
target_team_id:
type: string
description: ID of the target team
Comment on lines +1606 to +1614
Copy link

Copilot AI Mar 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/qstash/move-to-team uses target_team_id while the similar /redis/move-to-team request uses team_id, and it uses qstash_id while other QStash endpoints refer to the resource as {id} / “QStash user ID”. This inconsistency makes the API harder to use; consider renaming the request fields to match existing conventions (e.g., team_id and a consistently named QStash identifier).

Suggested change
- qstash_id
- target_team_id
properties:
qstash_id:
type: string
description: ID of the QStash instance to move
target_team_id:
type: string
description: ID of the target team
- id
- team_id
properties:
id:
type: string
description: QStash user ID
team_id:
type: string
description: ID of the team

Copilot uses AI. Check for mistakes.
responses:
'200':
description: QStash moved successfully
content:
application/json:
schema:
type: string
example: "OK"
security:
- basicAuth: []
/qstash/update-budget/{id}:
patch:
summary: Update QStash Budget
description: Updates the monthly spending budget limit for a QStash instance.
operationId: updateQStashBudget
tags:
- qstash
parameters:
- name: id
in: path
required: true
schema:
type: string
description: QStash user ID
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- budget
properties:
budget:
type: integer
description: Monthly spending budget limit in dollars. Minimum 20, maximum 10000, or 0 for no limit.
minimum: 0
maximum: 10000
Comment on lines +1651 to +1652
Copy link

Copilot AI Mar 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The budget schema allows values 1–19 (minimum: 0) but the description says the minimum is 20 (except 0 meaning “no limit”). Please align the OpenAPI constraints with the documented rules (e.g., enforce 0 or >= 20) so generated clients and validation match actual behavior.

Suggested change
minimum: 0
maximum: 10000
oneOf:
- type: integer
enum: [0]
- type: integer
minimum: 20
maximum: 10000

Copilot uses AI. Check for mistakes.
example: 100
responses:
'200':
description: Budget updated successfully
content:
application/json:
schema:
type: string
example: "OK"
security:
- basicAuth: []
/qstash/enable-prodpack/{id}:
post:
summary: Enable Production Pack
description: Enables the production pack for a QStash instance.
operationId: enableQStashProdPack
tags:
- qstash
parameters:
- name: id
in: path
required: true
schema:
type: string
description: QStash user ID
responses:
'200':
description: Production pack enabled successfully
content:
application/json:
schema:
type: string
example: "OK"
security:
- basicAuth: []
/qstash/disable-prodpack/{id}:
post:
summary: Disable Production Pack
description: Disables the production pack for a QStash instance.
operationId: disableQStashProdPack
tags:
- qstash
parameters:
- name: id
in: path
required: true
schema:
type: string
description: QStash user ID
responses:
'200':
description: Production pack disabled successfully
content:
application/json:
schema:
type: string
example: "OK"
security:
- basicAuth: []
components:
schemas:
Database:
Expand Down Expand Up @@ -2878,13 +3034,22 @@ components:
Indicates the reserved plan type for QStash.
If a credit card is attached, this field reflects the associated reserved plan.
If no credit card is added and the account is not on a pay-as-you-go plan, this field will be an empty string.
enum: [paid, qstash_enterprise_1m, qstash_enterprise_10m]
example: qstash_enterprise_1m
enum: ["", paid, qstash_fixed_1m, qstash_fixed_10m, qstash_fixed_100m]
example: qstash_fixed_1m
reserved_price:
type: number
format: float
description: Reserved plan price
example: 180
region:
type: string
description: Region where the QStash instance is deployed
enum: [eu-central-1, us-east-1]
example: us-east-1
budget:
type: integer
description: Monthly spending budget limit in dollars. 0 means no limit.
example: 0
created_by:
type: string
description: Email of the user who created this account
Expand Down
13 changes: 9 additions & 4 deletions docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -1599,10 +1599,15 @@
{
"group": "QStash",
"pages": [
"GET /qstash/user",
"GET /qstash/stats",
"POST /qstash/user/rotatetoken",
"POST /qstash-upgrade"
"GET /qstash/user/{id}",
"GET /qstash/stats/{id}",
"GET /qstash/ipv4",
"POST /qstash/rotate-token/{id}",
"POST /qstash/set-plan/{id}",
"POST /qstash/move-to-team",
"PATCH /qstash/update-budget/{id}",
"POST /qstash/enable-prodpack/{id}",
"POST /qstash/disable-prodpack/{id}"
]
},
{
Expand Down