Add Queue Management API endpoints and SDK documentation (#3087)

Closes #<issue>

##  Checklist

- [ ] I have followed every step in the [contributing
guide](https://github.com/triggerdotdev/trigger.dev/blob/main/CONTRIBUTING.md)
- [ ] The PR title follows the convention.
- [ ] I ran and tested the code works

---

## Testing

N/A - Documentation and OpenAPI schema updates only.

---

## Changelog

Added comprehensive Queue Management API support:

**OpenAPI Endpoints:**
- `GET /api/v1/queues` - List all queues with pagination support
- `GET /api/v1/queues/{queueParam}` - Retrieve a specific queue by ID,
task ID, or custom queue name
- `POST /api/v1/queues/{queueParam}/pause` - Pause or resume a queue
- `POST /api/v1/queues/{queueParam}/concurrency/override` - Override
queue concurrency limits
- `POST /api/v1/queues/{queueParam}/concurrency/reset` - Reset
concurrency limits to base values

**Schema Definitions:**
- `QueueObject` - Complete queue representation with concurrency details
- `ListQueuesResult` - Paginated queue listing response

**Documentation:**
- Updated `queue-concurrency.mdx` with SDK usage examples for queue
management
- Added 5 new management API documentation pages for each endpoint
- Updated `docs.json` navigation structure with new "Queues API" section

All endpoints support flexible queue identification (by ID, task ID, or
custom queue name) and include TypeScript code samples.

---

## Screenshots

N/A

💯

https://claude.ai/code/session_01LyrXwxHCbejvi34fykifPP

Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
Matt Aitken
2026-02-18 22:35:39 +00:00
committed by GitHub
parent 2825a200e6
commit 1ec7722690
8 changed files with 542 additions and 0 deletions
+10
View File
@@ -255,6 +255,16 @@
"management/runs/update-metadata"
]
},
{
"group": "Queues API",
"pages": [
"management/queues/list",
"management/queues/retrieve",
"management/queues/pause",
"management/queues/concurrency-override",
"management/queues/concurrency-reset"
]
},
{
"group": "Schedules API",
"pages": [
@@ -0,0 +1,4 @@
---
title: "Override Concurrency Limit"
openapi: "v3-openapi POST /api/v1/queues/{queueParam}/concurrency/override"
---
@@ -0,0 +1,4 @@
---
title: "Reset Concurrency Limit"
openapi: "v3-openapi POST /api/v1/queues/{queueParam}/concurrency/reset"
---
+4
View File
@@ -0,0 +1,4 @@
---
title: "List Queues"
openapi: "v3-openapi GET /api/v1/queues"
---
+4
View File
@@ -0,0 +1,4 @@
---
title: "Pause or Resume Queue"
openapi: "v3-openapi POST /api/v1/queues/{queueParam}/pause"
---
+4
View File
@@ -0,0 +1,4 @@
---
title: "Retrieve Queue"
openapi: "v3-openapi GET /api/v1/queues/{queueParam}"
---
+126
View File
@@ -226,3 +226,129 @@ export const subtask = task({
```
When the parent task reaches the `triggerAndWait` call, it checkpoints and transitions to the `WAITING` state, releasing its concurrency slot back to both its queue and the environment. Once the subtask completes, the parent task will resume and re-acquire a concurrency slot.
## Managing queues with the SDK
The SDK provides a `queues` namespace that allows you to manage queues programmatically. You can list, retrieve, pause, resume, and modify concurrency limits for queues.
<Note>
Import from `@trigger.dev/sdk`:
```ts
import { queues } from "@trigger.dev/sdk";
```
</Note>
### Listing queues
You can list all queues in your environment with pagination support:
```ts
import { queues } from "@trigger.dev/sdk";
// List all queues (returns paginated results)
const allQueues = await queues.list();
// With pagination options
const pagedQueues = await queues.list({
page: 1,
perPage: 20,
});
```
### Retrieving a queue
You can retrieve a specific queue by its ID, or by its type and name:
```ts
import { queues } from "@trigger.dev/sdk";
// Using queue ID (starts with "queue_")
const queueById = await queues.retrieve("queue_1234");
// Using type and name for a task's default queue
const taskQueue = await queues.retrieve({
type: "task",
name: "my-task-id",
});
// Using type and name for a custom queue
const customQueue = await queues.retrieve({
type: "custom",
name: "my-custom-queue",
});
```
The queue object contains useful information about the queue state:
```ts
{
id: "queue_1234", // Queue ID
name: "my-task-id", // Queue name
type: "task", // "task" or "custom"
running: 5, // Currently executing runs
queued: 10, // Runs waiting to execute
paused: false, // Whether the queue is paused
concurrencyLimit: 10, // Current concurrency limit
concurrency: {
current: 10, // Effective limit
base: 10, // Default limit from code
override: null, // Override value (if set)
overriddenAt: null, // When override was applied
overriddenBy: null, // Who applied the override
}
}
```
### Pausing and resuming queues
You can pause a queue to prevent new runs from starting. Runs that are currently executing will continue to completion.
```ts
import { queues } from "@trigger.dev/sdk";
// Pause a queue using its ID
await queues.pause("queue_1234");
// Or using type and name
await queues.pause({ type: "task", name: "my-task-id" });
await queues.pause({ type: "custom", name: "my-custom-queue" });
```
To resume a paused queue and allow new runs to start:
```ts
import { queues } from "@trigger.dev/sdk";
// Resume a queue using its ID
await queues.resume("queue_1234");
// Or using type and name
await queues.resume({ type: "task", name: "my-task-id" });
await queues.resume({ type: "custom", name: "my-custom-queue" });
```
### Overriding concurrency limits
You can temporarily override a queue's concurrency limit. This is useful for scaling up or down based on demand:
```ts
import { queues } from "@trigger.dev/sdk";
// Set concurrency limit to 5
await queues.overrideConcurrencyLimit("queue_1234", 5);
// Or using type and name
await queues.overrideConcurrencyLimit({ type: "task", name: "my-task-id" }, 20);
```
To reset the concurrency limit back to the base value defined in your code:
```ts
import { queues } from "@trigger.dev/sdk";
// Reset concurrency limit to the base value
await queues.resetConcurrencyLimit("queue_1234");
// Or using type and name
await queues.resetConcurrencyLimit({ type: "task", name: "my-task-id" });
```
+386
View File
@@ -1618,6 +1618,301 @@ paths:
]
}'
"/api/v1/queues":
get:
operationId: list_queues_v1
summary: List all queues
description: List all queues in your environment with pagination support.
parameters:
- in: query
name: page
schema:
type: integer
required: false
description: Page number of the queue listing (1-based)
- in: query
name: perPage
schema:
type: integer
required: false
description: Number of queues per page
responses:
"200":
description: Successful request
content:
application/json:
schema:
"$ref": "#/components/schemas/ListQueuesResult"
"401":
description: Unauthorized request
tags:
- queues
security:
- secretKey: []
x-codeSamples:
- lang: typescript
source: |-
import { queues } from "@trigger.dev/sdk";
// List all queues
const allQueues = await queues.list();
// With pagination
const pagedQueues = await queues.list({
page: 1,
perPage: 20,
});
"/api/v1/queues/{queueParam}":
get:
operationId: retrieve_queue_v1
summary: Retrieve a queue
description: Get a queue by its ID, or by type and name.
parameters:
- in: path
name: queueParam
required: true
schema:
type: string
description: The queue ID (e.g., `queue_1234`), or the name of the queue when using the `type` query parameter.
example: queue_1234
- in: query
name: type
schema:
type: string
enum: [id, task, custom]
default: id
required: false
description: |
How to interpret the `queueParam` path parameter:
- `id`: Treat as a queue ID (default)
- `task`: Treat as a task ID to get the task's default queue
- `custom`: Treat as a custom queue name
responses:
"200":
description: Successful request
content:
application/json:
schema:
"$ref": "#/components/schemas/QueueObject"
"401":
description: Unauthorized request
"404":
description: Queue not found
tags:
- queues
security:
- secretKey: []
x-codeSamples:
- lang: typescript
source: |-
import { queues } from "@trigger.dev/sdk";
// Using queue ID
const queue = await queues.retrieve("queue_1234");
// Using type and name for a task queue
const taskQueue = await queues.retrieve({
type: "task",
name: "my-task-id",
});
// Using type and name for a custom queue
const customQueue = await queues.retrieve({
type: "custom",
name: "my-custom-queue",
});
"/api/v1/queues/{queueParam}/pause":
post:
operationId: pause_queue_v1
summary: Pause or resume a queue
description: Pause a queue to prevent new runs from starting, or resume a paused queue. Runs that are currently executing will continue to completion.
parameters:
- in: path
name: queueParam
required: true
schema:
type: string
description: The queue ID (e.g., `queue_1234`), or the name of the queue when using the `type` body parameter.
example: queue_1234
requestBody:
required: true
content:
application/json:
schema:
type: object
required: ["action"]
properties:
type:
type: string
enum: [id, task, custom]
default: id
description: |
How to interpret the `queueParam` path parameter:
- `id`: Treat as a queue ID (default)
- `task`: Treat as a task ID to get the task's default queue
- `custom`: Treat as a custom queue name
action:
type: string
enum: [pause, resume]
description: Whether to pause or resume the queue
responses:
"200":
description: Queue paused or resumed successfully
content:
application/json:
schema:
"$ref": "#/components/schemas/QueueObject"
"400":
description: Invalid request parameters
"401":
description: Unauthorized request
"404":
description: Queue not found
tags:
- queues
security:
- secretKey: []
x-codeSamples:
- lang: typescript
source: |-
import { queues } from "@trigger.dev/sdk";
// Pause a queue
await queues.pause("queue_1234");
await queues.pause({ type: "task", name: "my-task-id" });
// Resume a queue
await queues.resume("queue_1234");
await queues.resume({ type: "task", name: "my-task-id" });
"/api/v1/queues/{queueParam}/concurrency/override":
post:
operationId: override_queue_concurrency_v1
summary: Override queue concurrency limit
description: Override the concurrency limit of a queue. This is useful for temporarily scaling up or down based on demand.
parameters:
- in: path
name: queueParam
required: true
schema:
type: string
description: The queue ID (e.g., `queue_1234`), or the name of the queue when using the `type` body parameter.
example: queue_1234
requestBody:
required: true
content:
application/json:
schema:
type: object
required: ["concurrencyLimit"]
properties:
type:
type: string
enum: [id, task, custom]
default: id
description: |
How to interpret the `queueParam` path parameter:
- `id`: Treat as a queue ID (default)
- `task`: Treat as a task ID to get the task's default queue
- `custom`: Treat as a custom queue name
concurrencyLimit:
type: integer
minimum: 0
maximum: 100000
description: The new concurrency limit to set for the queue
responses:
"200":
description: Concurrency limit overridden successfully
content:
application/json:
schema:
"$ref": "#/components/schemas/QueueObject"
"400":
description: Invalid request parameters
"401":
description: Unauthorized request
"404":
description: Queue not found
tags:
- queues
security:
- secretKey: []
x-codeSamples:
- lang: typescript
source: |-
import { queues } from "@trigger.dev/sdk";
// Override concurrency limit to 5
await queues.overrideConcurrencyLimit("queue_1234", 5);
// Using type and name
await queues.overrideConcurrencyLimit(
{ type: "task", name: "my-task-id" },
20
);
"/api/v1/queues/{queueParam}/concurrency/reset":
post:
operationId: reset_queue_concurrency_v1
summary: Reset queue concurrency limit
description: Reset the concurrency limit of a queue back to its base value defined in code.
parameters:
- in: path
name: queueParam
required: true
schema:
type: string
description: The queue ID (e.g., `queue_1234`), or the name of the queue when using the `type` body parameter.
example: queue_1234
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
type:
type: string
enum: [id, task, custom]
default: id
description: |
How to interpret the `queueParam` path parameter:
- `id`: Treat as a queue ID (default)
- `task`: Treat as a task ID to get the task's default queue
- `custom`: Treat as a custom queue name
responses:
"200":
description: Concurrency limit reset successfully
content:
application/json:
schema:
"$ref": "#/components/schemas/QueueObject"
"400":
description: Queue is not overridden or invalid request parameters
"401":
description: Unauthorized request
"404":
description: Queue not found
tags:
- queues
security:
- secretKey: []
x-codeSamples:
- lang: typescript
source: |-
import { queues } from "@trigger.dev/sdk";
// Reset concurrency limit to the base value
await queues.resetConcurrencyLimit("queue_1234");
// Using type and name
await queues.resetConcurrencyLimit({
type: "task",
name: "my-task-id",
});
components:
parameters:
taskIdentifier:
@@ -1763,6 +2058,97 @@ components:
minimum: 0
maximum: 1000
description: An optional property that specifies the maximum number of concurrent run executions. If this property is omitted, the task can potentially use up the full concurrency of an environment.
QueueObject:
type: object
required: ["id", "name", "type", "running", "queued", "paused"]
properties:
id:
type: string
description: The queue ID, e.g., `queue_1234`
example: queue_1234
name:
type: string
description: The queue name. For task queues, this is the task ID. For custom queues, this is the name you specified.
example: my-task-id
type:
type: string
enum: [task, custom]
description: |
The type of queue:
- `task`: Created automatically for each task
- `custom`: Created explicitly in your code using `queue()`
example: task
running:
type: integer
description: The number of runs currently executing
example: 5
queued:
type: integer
description: The number of runs currently queued
example: 10
paused:
type: boolean
description: Whether the queue is paused. When paused, no new runs will start.
example: false
concurrencyLimit:
type: integer
nullable: true
description: The current concurrency limit of the queue
example: 10
concurrency:
type: object
description: Detailed concurrency information
properties:
current:
type: integer
nullable: true
description: The effective/current concurrency limit
example: 10
base:
type: integer
nullable: true
description: The base concurrency limit defined in code
example: 10
override:
type: integer
nullable: true
description: The override concurrency limit (if set)
example: null
overriddenAt:
type: string
format: date-time
nullable: true
description: When the concurrency limit was overridden
example: null
overriddenBy:
type: string
nullable: true
description: Who overrode the concurrency limit (null if via API)
example: null
ListQueuesResult:
type: object
required: ["data", "pagination"]
properties:
data:
type: array
items:
"$ref": "#/components/schemas/QueueObject"
description: An array of queue objects
pagination:
type: object
properties:
currentPage:
type: integer
description: The current page number
example: 1
totalPages:
type: integer
description: The total number of pages
example: 5
count:
type: integer
description: The total number of queues
example: 50
BatchTriggerRequestBody:
type: object
properties: