# Sync · Queues

Part of AppEngine API Documentation. Full index: https://appengine.appmint.io/documentation.md
## GET /queue-manager/list-queues

**List queues**

`operationId: QueueManagerController_listQueues`

Every Bull queue the platform runs. Infrastructure route — acts on a queue shared by every tenant, not just the calling org.

#### Signature

```http
GET /queue-manager/list-queues () -> Queues
```

#### Access

Requires a bearer JWT (`Authorization: Bearer <token>`). Required role(s): `RootAdmin`, `ConfigAdmin`.

#### Notes

- Infrastructure route — acts on a queue shared by every tenant, not just the calling org.

#### Errors

Plus the standard platform errors: `401`, `403`, `429`, `500`.

#### See also

- `GET /queue-manager/list-stats`

### Responses

| Status | Meaning |
| --- | --- |
| `200` | Queues |
| `401` | Authentication failed: Invalid or expired token — The `Authorization` header is missing, malformed, or the JWT has expired. |
| `403` | You do not have permission to perform this action — The caller is authenticated but lacks the role required by the endpoint, or is acting on another org. |
| `429` | Too Many Requests — More than 100,000 requests from one IP within 5 minutes (configurable per deployment). CORS preflights and requests from inside the platform cluster are not counted. The limiter answers before the error filter, so the body is `{ statusCode, error, message }` with no `path`, `method` or `timeStamp`; the `RateLimit-*` response headers say when the window resets. |
| `500` | An unexpected error occurred. Our team has been notified. — An unhandled server-side failure. |

## GET /queue-manager/list-stats

**Get queue statistics**

`operationId: QueueManagerController_getQueueStats`

Job counts by state across all queues — waiting, active, completed, failed. The first place to look when work is not being processed.

#### Signature

```http
GET /queue-manager/list-stats () -> Per-queue statistics
```

#### Access

Requires a bearer JWT (`Authorization: Bearer <token>`). Required role(s): `RootAdmin`, `ConfigAdmin`.

#### Notes

- Infrastructure route — acts on a queue shared by every tenant, not just the calling org.

#### Errors

Plus the standard platform errors: `401`, `403`, `429`, `500`.

#### See also

- `GET /queue-manager/details/{queueName}`

### Responses

| Status | Meaning |
| --- | --- |
| `200` | Per-queue statistics |
| `401` | Authentication failed: Invalid or expired token — The `Authorization` header is missing, malformed, or the JWT has expired. |
| `403` | You do not have permission to perform this action — The caller is authenticated but lacks the role required by the endpoint, or is acting on another org. |
| `429` | Too Many Requests — More than 100,000 requests from one IP within 5 minutes (configurable per deployment). CORS preflights and requests from inside the platform cluster are not counted. The limiter answers before the error filter, so the body is `{ statusCode, error, message }` with no `path`, `method` or `timeStamp`; the `RateLimit-*` response headers say when the window resets. |
| `500` | An unexpected error occurred. Our team has been notified. — An unhandled server-side failure. |

## GET /queue-manager/details/{queueName}

**Get queue details**

`operationId: QueueManagerController_getQueueDetails`

One queue with its jobs and state.

#### Signature

```http
GET /queue-manager/details/{queueName} (queueName: string) -> The queue
```

#### Access

Requires a bearer JWT (`Authorization: Bearer <token>`).

#### Notes

- Infrastructure route — acts on a queue shared by every tenant, not just the calling org.

#### Errors

Plus the standard platform errors: `401`, `403`, `429`, `500`.

#### See also

- `POST /queue-manager/action/{queueName}`

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `queueName` | path | string | yes | Queue name. |

### Responses

| Status | Meaning |
| --- | --- |
| `200` | The queue |
| `401` | Authentication failed: Invalid or expired token — The `Authorization` header is missing, malformed, or the JWT has expired. |
| `403` | You do not have permission to perform this action — The caller is authenticated but lacks the role required by the endpoint, or is acting on another org. |
| `429` | Too Many Requests — More than 100,000 requests from one IP within 5 minutes (configurable per deployment). CORS preflights and requests from inside the platform cluster are not counted. The limiter answers before the error filter, so the body is `{ statusCode, error, message }` with no `path`, `method` or `timeStamp`; the `RateLimit-*` response headers say when the window resets. |
| `500` | An unexpected error occurred. Our team has been notified. — An unhandled server-side failure. |

## POST /queue-manager/action/{queueName}

**Perform a queue action**

`operationId: QueueManagerController_performQueueAction`

Runs an administrative action on a queue — pause, resume, drain, clean, retry failed jobs.

Several of these are destructive: draining or cleaning a queue **discards queued work permanently**, and the queue is shared across tenants, so the jobs discarded may belong to other orgs. Read the queue's stats first.

#### Signature

```http
POST /queue-manager/action/{queueName} (queueName: string, body) -> The result
```

#### Access

Requires a bearer JWT (`Authorization: Bearer <token>`). Required role(s): `RootAdmin`, `ConfigAdmin`.

#### Notes

- Infrastructure route — acts on a queue shared by every tenant, not just the calling org.
- Drain and clean discard queued jobs permanently.

#### Errors

Plus the standard platform errors: `401`, `403`, `429`, `500`.

#### See also

- `GET /queue-manager/list-stats`

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `queueName` | path | string | yes | Queue name. |

### Request body

The action.

```json
{
  "action": "pause"
}
```

### Responses

| Status | Meaning |
| --- | --- |
| `201` | The result |
| `401` | Authentication failed: Invalid or expired token — The `Authorization` header is missing, malformed, or the JWT has expired. |
| `403` | You do not have permission to perform this action — The caller is authenticated but lacks the role required by the endpoint, or is acting on another org. |
| `429` | Too Many Requests — More than 100,000 requests from one IP within 5 minutes (configurable per deployment). CORS preflights and requests from inside the platform cluster are not counted. The limiter answers before the error filter, so the body is `{ statusCode, error, message }` with no `path`, `method` or `timeStamp`; the `RateLimit-*` response headers say when the window resets. |
| `500` | An unexpected error occurred. Our team has been notified. — An unhandled server-side failure. |

## POST /queue-manager/queue/{queueName}

**Queue a job**

`operationId: QueueManagerController_queueJob`

Puts a job directly onto a named queue, bypassing whatever normally produces it. Useful for replaying work; the payload is not validated against what the consumer expects, so a malformed job fails at processing time rather than here.

#### Signature

```http
POST /queue-manager/queue/{queueName} (queueName: string, body) -> The queued job
```

#### Access

Requires a bearer JWT (`Authorization: Bearer <token>`). Required role(s): `RootAdmin`, `ConfigAdmin`.

#### Notes

- Infrastructure route — acts on a queue shared by every tenant, not just the calling org.
- Payload is not validated against the consumer.

#### Errors

Plus the standard platform errors: `401`, `403`, `429`, `500`.

#### See also

- `GET /queue-manager/details/{queueName}`

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `queueName` | path | string | yes | Queue name. |

### Request body

The job payload.

```json
{
  "name": "sync-products",
  "data": {
    "orgId": "org_4821",
    "platform": "shopify"
  }
}
```

### Responses

| Status | Meaning |
| --- | --- |
| `201` | The queued job |
| `401` | Authentication failed: Invalid or expired token — The `Authorization` header is missing, malformed, or the JWT has expired. |
| `403` | You do not have permission to perform this action — The caller is authenticated but lacks the role required by the endpoint, or is acting on another org. |
| `429` | Too Many Requests — More than 100,000 requests from one IP within 5 minutes (configurable per deployment). CORS preflights and requests from inside the platform cluster are not counted. The limiter answers before the error filter, so the body is `{ statusCode, error, message }` with no `path`, `method` or `timeStamp`; the `RateLimit-*` response headers say when the window resets. |
| `500` | An unexpected error occurred. Our team has been notified. — An unhandled server-side failure. |

## POST /queue-manager/sync-ticks/remove

**Remove sync ticks**

`operationId: QueueManagerController_removeSyncTicks`

Removes sync tick entries. **This stops scheduled syncs from firing** — across tenants, since the ticks are shared infrastructure. Removing them silently leaves orgs with stale data rather than producing an error anyone will see.

#### Signature

```http
POST /queue-manager/sync-ticks/remove () -> The result
```

#### Access

Requires a bearer JWT (`Authorization: Bearer <token>`).

#### Notes

- Infrastructure route — acts on a queue shared by every tenant, not just the calling org.
- Silently stops scheduled syncs.

#### Errors

Plus the standard platform errors: `401`, `403`, `429`, `500`.

#### See also

- `GET /queue-manager/sync-ticks`

### Responses

| Status | Meaning |
| --- | --- |
| `201` | The result |
| `401` | Authentication failed: Invalid or expired token — The `Authorization` header is missing, malformed, or the JWT has expired. |
| `403` | You do not have permission to perform this action — The caller is authenticated but lacks the role required by the endpoint, or is acting on another org. |
| `429` | Too Many Requests — More than 100,000 requests from one IP within 5 minutes (configurable per deployment). CORS preflights and requests from inside the platform cluster are not counted. The limiter answers before the error filter, so the body is `{ statusCode, error, message }` with no `path`, `method` or `timeStamp`; the `RateLimit-*` response headers say when the window resets. |
| `500` | An unexpected error occurred. Our team has been notified. — An unhandled server-side failure. |

## GET /queue-manager/sync-ticks

**List sync ticks**

`operationId: QueueManagerController_listSyncTicks`

The recurring sync tick entries that drive scheduled syncs.

#### Signature

```http
GET /queue-manager/sync-ticks () -> Sync ticks
```

#### Access

Requires a bearer JWT (`Authorization: Bearer <token>`).

#### Notes

- Infrastructure route — acts on a queue shared by every tenant, not just the calling org.

#### Errors

Plus the standard platform errors: `401`, `403`, `429`, `500`.

#### See also

- `POST /queue-manager/sync-ticks/remove`

### Responses

| Status | Meaning |
| --- | --- |
| `200` | Sync ticks |
| `401` | Authentication failed: Invalid or expired token — The `Authorization` header is missing, malformed, or the JWT has expired. |
| `403` | You do not have permission to perform this action — The caller is authenticated but lacks the role required by the endpoint, or is acting on another org. |
| `429` | Too Many Requests — More than 100,000 requests from one IP within 5 minutes (configurable per deployment). CORS preflights and requests from inside the platform cluster are not counted. The limiter answers before the error filter, so the body is `{ statusCode, error, message }` with no `path`, `method` or `timeStamp`; the `RateLimit-*` response headers say when the window resets. |
| `500` | An unexpected error occurred. Our team has been notified. — An unhandled server-side failure. |

## GET /queue-manager/schedules/{queueName}

**List a queue's schedules**

`operationId: QueueManagerController_listSchedules`

The repeatable schedules attached to a queue.

#### Signature

```http
GET /queue-manager/schedules/{queueName} (queueName: string) -> Schedules
```

#### Access

Requires a bearer JWT (`Authorization: Bearer <token>`).

#### Notes

- Infrastructure route — acts on a queue shared by every tenant, not just the calling org.

#### Errors

Plus the standard platform errors: `401`, `403`, `429`, `500`.

#### See also

- `POST /queue-manager/schedule/{queueName}`

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `orgid` | header | string | yes |  |
| `queueName` | path | string | yes | Queue name. |

### Responses

| Status | Meaning |
| --- | --- |
| `200` | Schedules |
| `401` | Authentication failed: Invalid or expired token — The `Authorization` header is missing, malformed, or the JWT has expired. |
| `403` | You do not have permission to perform this action — The caller is authenticated but lacks the role required by the endpoint, or is acting on another org. |
| `429` | Too Many Requests — More than 100,000 requests from one IP within 5 minutes (configurable per deployment). CORS preflights and requests from inside the platform cluster are not counted. The limiter answers before the error filter, so the body is `{ statusCode, error, message }` with no `path`, `method` or `timeStamp`; the `RateLimit-*` response headers say when the window resets. |
| `500` | An unexpected error occurred. Our team has been notified. — An unhandled server-side failure. |

## POST /queue-manager/schedule/oneoff/{queueName}

**Create a one-off schedule**

`operationId: QueueManagerController_scheduleOneOffJob`

Schedules a single future run rather than a recurring one — for a deferred job that should happen once.

#### Signature

```http
POST /queue-manager/schedule/oneoff/{queueName} (queueName: string, body) -> The schedule
```

#### Access

Requires a bearer JWT (`Authorization: Bearer <token>`). Required role(s): `RootAdmin`, `ConfigAdmin`.

#### Notes

- Infrastructure route — acts on a queue shared by every tenant, not just the calling org.

#### Errors

Plus the standard platform errors: `401`, `403`, `429`, `500`.

#### See also

- `POST /queue-manager/schedule/{queueName}`

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `queueName` | path | string | yes | Queue name. |

### Request body

The one-off schedule.

```json
{
  "runAt": "2026-09-01T02:00:00.000Z",
  "data": {}
}
```

### Responses

| Status | Meaning |
| --- | --- |
| `201` | The schedule |
| `401` | Authentication failed: Invalid or expired token — The `Authorization` header is missing, malformed, or the JWT has expired. |
| `403` | You do not have permission to perform this action — The caller is authenticated but lacks the role required by the endpoint, or is acting on another org. |
| `429` | Too Many Requests — More than 100,000 requests from one IP within 5 minutes (configurable per deployment). CORS preflights and requests from inside the platform cluster are not counted. The limiter answers before the error filter, so the body is `{ statusCode, error, message }` with no `path`, `method` or `timeStamp`; the `RateLimit-*` response headers say when the window resets. |
| `500` | An unexpected error occurred. Our team has been notified. — An unhandled server-side failure. |

## POST /queue-manager/schedule/{queueName}

**Create a schedule**

`operationId: QueueManagerController_createSchedule`

Adds a recurring schedule to a queue. A too-frequent cron here multiplies work across every org on the queue, so check the expression before creating it.

#### Signature

```http
POST /queue-manager/schedule/{queueName} (queueName: string, body) -> The schedule
```

#### Access

Requires a bearer JWT (`Authorization: Bearer <token>`). Required role(s): `RootAdmin`, `ConfigAdmin`.

#### Notes

- Infrastructure route — acts on a queue shared by every tenant, not just the calling org.

#### Errors

Plus the standard platform errors: `401`, `403`, `429`, `500`.

#### See also

- `POST /queue-manager/schedule/pause/{queueName}`

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `queueName` | path | string | yes | Queue name. |

### Request body

The schedule.

```json
{
  "name": "nightly-sync",
  "cron": "0 2 * * *",
  "data": {}
}
```

### Responses

| Status | Meaning |
| --- | --- |
| `201` | The schedule |
| `401` | Authentication failed: Invalid or expired token — The `Authorization` header is missing, malformed, or the JWT has expired. |
| `403` | You do not have permission to perform this action — The caller is authenticated but lacks the role required by the endpoint, or is acting on another org. |
| `429` | Too Many Requests — More than 100,000 requests from one IP within 5 minutes (configurable per deployment). CORS preflights and requests from inside the platform cluster are not counted. The limiter answers before the error filter, so the body is `{ statusCode, error, message }` with no `path`, `method` or `timeStamp`; the `RateLimit-*` response headers say when the window resets. |
| `500` | An unexpected error occurred. Our team has been notified. — An unhandled server-side failure. |

## POST /queue-manager/schedule/pause/{queueName}

**Pause a schedule**

`operationId: QueueManagerController_pauseSchedule`

Stops a schedule firing. Runs missed while paused are not made up when it resumes — the schedule simply resumes from the next occurrence.

#### Signature

```http
POST /queue-manager/schedule/pause/{queueName} (queueName: string, body) -> The result
```

#### Access

Requires a bearer JWT (`Authorization: Bearer <token>`). Required role(s): `RootAdmin`, `ConfigAdmin`.

#### Notes

- Infrastructure route — acts on a queue shared by every tenant, not just the calling org.
- Missed runs are not backfilled on resume.

#### Errors

Plus the standard platform errors: `401`, `403`, `429`, `500`.

#### See also

- `POST /queue-manager/schedule/resume/{queueName}`

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `queueName` | path | string | yes | Queue name. |

### Request body

Which schedule.

```json
{
  "name": "nightly-sync"
}
```

### Responses

| Status | Meaning |
| --- | --- |
| `201` | The result |
| `401` | Authentication failed: Invalid or expired token — The `Authorization` header is missing, malformed, or the JWT has expired. |
| `403` | You do not have permission to perform this action — The caller is authenticated but lacks the role required by the endpoint, or is acting on another org. |
| `429` | Too Many Requests — More than 100,000 requests from one IP within 5 minutes (configurable per deployment). CORS preflights and requests from inside the platform cluster are not counted. The limiter answers before the error filter, so the body is `{ statusCode, error, message }` with no `path`, `method` or `timeStamp`; the `RateLimit-*` response headers say when the window resets. |
| `500` | An unexpected error occurred. Our team has been notified. — An unhandled server-side failure. |

## POST /queue-manager/schedule/resume/{queueName}

**Resume a schedule**

`operationId: QueueManagerController_resumeSchedule`

Restarts a paused schedule from its next occurrence.

#### Signature

```http
POST /queue-manager/schedule/resume/{queueName} (queueName: string, body) -> The result
```

#### Access

Requires a bearer JWT (`Authorization: Bearer <token>`). Required role(s): `RootAdmin`, `ConfigAdmin`.

#### Notes

- Infrastructure route — acts on a queue shared by every tenant, not just the calling org.

#### Errors

Plus the standard platform errors: `401`, `403`, `429`, `500`.

#### See also

- `POST /queue-manager/schedule/pause/{queueName}`

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `queueName` | path | string | yes | Queue name. |

### Request body

Which schedule.

```json
{
  "name": "nightly-sync"
}
```

### Responses

| Status | Meaning |
| --- | --- |
| `201` | The result |
| `401` | Authentication failed: Invalid or expired token — The `Authorization` header is missing, malformed, or the JWT has expired. |
| `403` | You do not have permission to perform this action — The caller is authenticated but lacks the role required by the endpoint, or is acting on another org. |
| `429` | Too Many Requests — More than 100,000 requests from one IP within 5 minutes (configurable per deployment). CORS preflights and requests from inside the platform cluster are not counted. The limiter answers before the error filter, so the body is `{ statusCode, error, message }` with no `path`, `method` or `timeStamp`; the `RateLimit-*` response headers say when the window resets. |
| `500` | An unexpected error occurred. Our team has been notified. — An unhandled server-side failure. |

## GET /queue-manager/org-schedules/{queueName}

**List the org's schedules on a queue**

`operationId: QueueManagerController_getOrgSchedules`

The calling org's schedules on one queue.

#### Signature

```http
GET /queue-manager/org-schedules/{queueName} (queueName: string) -> Schedules
```

#### Access

Requires a bearer JWT (`Authorization: Bearer <token>`).

#### Errors

Plus the standard platform errors: `401`, `403`, `429`, `500`.

#### See also

- `GET /queue-manager/org-schedules`

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `orgid` | header | string | yes | Organization (tenant) identifier. Every request is scoped to this org; data from other orgs is never visible. Issued with your API credentials. |
| `queueName` | path | string | yes | Queue name. |

### Responses

| Status | Meaning |
| --- | --- |
| `200` | Schedules |
| `401` | Authentication failed: Invalid or expired token — The `Authorization` header is missing, malformed, or the JWT has expired. |
| `403` | You do not have permission to perform this action — The caller is authenticated but lacks the role required by the endpoint, or is acting on another org. |
| `429` | Too Many Requests — More than 100,000 requests from one IP within 5 minutes (configurable per deployment). CORS preflights and requests from inside the platform cluster are not counted. The limiter answers before the error filter, so the body is `{ statusCode, error, message }` with no `path`, `method` or `timeStamp`; the `RateLimit-*` response headers say when the window resets. |
| `500` | An unexpected error occurred. Our team has been notified. — An unhandled server-side failure. |

## GET /queue-manager/org-schedules

**List the org's schedules**

`operationId: QueueManagerController_getAllOrgSchedules`

Schedules belonging to the calling org — unlike most of this controller, scoped to one tenant.

#### Signature

```http
GET /queue-manager/org-schedules () -> Schedules
```

#### Access

Requires a bearer JWT (`Authorization: Bearer <token>`).

#### Errors

Plus the standard platform errors: `401`, `403`, `429`, `500`.

#### See also

- `GET /queue-manager/org-schedules/{queueName}`

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `orgid` | header | string | yes | Organization (tenant) identifier. Every request is scoped to this org; data from other orgs is never visible. Issued with your API credentials. |

### Responses

| Status | Meaning |
| --- | --- |
| `200` | Schedules |
| `401` | Authentication failed: Invalid or expired token — The `Authorization` header is missing, malformed, or the JWT has expired. |
| `403` | You do not have permission to perform this action — The caller is authenticated but lacks the role required by the endpoint, or is acting on another org. |
| `429` | Too Many Requests — More than 100,000 requests from one IP within 5 minutes (configurable per deployment). CORS preflights and requests from inside the platform cluster are not counted. The limiter answers before the error filter, so the body is `{ statusCode, error, message }` with no `path`, `method` or `timeStamp`; the `RateLimit-*` response headers say when the window resets. |
| `500` | An unexpected error occurred. Our team has been notified. — An unhandled server-side failure. |

## GET /queue-manager/schedule-runs/{scheduleId}

**List schedule runs**

`operationId: QueueManagerController_getScheduleRuns`

Execution history for schedules. `scheduleId` is optional — omit it for runs across all schedules. `grouped=true` collapses the runs by schedule instead of listing them flat.

#### Signature

```http
GET /queue-manager/schedule-runs/{scheduleId} (scheduleId: string, limit?: integer, status?: string, type?: string, scheduleName?: string, grouped?: boolean) -> Schedule runs
```

#### Access

Requires a bearer JWT (`Authorization: Bearer <token>`).

#### Errors

Plus the standard platform errors: `401`, `403`, `429`, `500`.

#### See also

- `GET /queue-manager/schedule-stats/{scheduleId}`

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `orgid` | header | string | yes |  |
| `scheduleId` | path | string | yes | Schedule id. Optional. |
| `limit` | query | integer | — |  |
| `status` | query | string | — |  |
| `type` | query | string | — |  |
| `scheduleName` | query | string | — |  |
| `grouped` | query | boolean | — | Group runs by schedule. |

### Responses

| Status | Meaning |
| --- | --- |
| `200` | Schedule runs |
| `401` | Authentication failed: Invalid or expired token — The `Authorization` header is missing, malformed, or the JWT has expired. |
| `403` | You do not have permission to perform this action — The caller is authenticated but lacks the role required by the endpoint, or is acting on another org. |
| `429` | Too Many Requests — More than 100,000 requests from one IP within 5 minutes (configurable per deployment). CORS preflights and requests from inside the platform cluster are not counted. The limiter answers before the error filter, so the body is `{ statusCode, error, message }` with no `path`, `method` or `timeStamp`; the `RateLimit-*` response headers say when the window resets. |
| `500` | An unexpected error occurred. Our team has been notified. — An unhandled server-side failure. |

## GET /queue-manager/schedule-stats/{scheduleId}

**Get schedule statistics**

`operationId: QueueManagerController_getScheduleStats`

Success rate, duration and failure counts for one schedule.

#### Signature

```http
GET /queue-manager/schedule-stats/{scheduleId} (scheduleId: string) -> Statistics
```

#### Access

Requires a bearer JWT (`Authorization: Bearer <token>`).

#### Errors

Plus the standard platform errors: `401`, `403`, `429`, `500`.

#### See also

- `GET /queue-manager/schedule-runs/{scheduleId}`

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `orgid` | header | string | yes |  |
| `scheduleId` | path | string | yes | Schedule id. |

### Responses

| Status | Meaning |
| --- | --- |
| `200` | Statistics |
| `401` | Authentication failed: Invalid or expired token — The `Authorization` header is missing, malformed, or the JWT has expired. |
| `403` | You do not have permission to perform this action — The caller is authenticated but lacks the role required by the endpoint, or is acting on another org. |
| `429` | Too Many Requests — More than 100,000 requests from one IP within 5 minutes (configurable per deployment). CORS preflights and requests from inside the platform cluster are not counted. The limiter answers before the error filter, so the body is `{ statusCode, error, message }` with no `path`, `method` or `timeStamp`; the `RateLimit-*` response headers say when the window resets. |
| `500` | An unexpected error occurred. Our team has been notified. — An unhandled server-side failure. |

## GET /queue-manager/debug/delayed-jobs

**List delayed jobs (debug)**

`operationId: QueueManagerController_getDelayedJobs`

Jobs sitting in the delayed state across queues — the diagnostic for work that was scheduled but never became active.

#### Signature

```http
GET /queue-manager/debug/delayed-jobs () -> Delayed jobs
```

#### Access

Requires a bearer JWT (`Authorization: Bearer <token>`). Required role(s): `RootAdmin`, `RootSystem`.

#### Notes

- Infrastructure route — acts on a queue shared by every tenant, not just the calling org.
- Diagnostic endpoint.

#### Errors

Plus the standard platform errors: `401`, `403`, `429`, `500`.

#### See also

- `GET /queue-manager/list-stats`

### Responses

| Status | Meaning |
| --- | --- |
| `200` | Delayed jobs |
| `401` | Authentication failed: Invalid or expired token — The `Authorization` header is missing, malformed, or the JWT has expired. |
| `403` | You do not have permission to perform this action — The caller is authenticated but lacks the role required by the endpoint, or is acting on another org. |
| `429` | Too Many Requests — More than 100,000 requests from one IP within 5 minutes (configurable per deployment). CORS preflights and requests from inside the platform cluster are not counted. The limiter answers before the error filter, so the body is `{ statusCode, error, message }` with no `path`, `method` or `timeStamp`; the `RateLimit-*` response headers say when the window resets. |
| `500` | An unexpected error occurred. Our team has been notified. — An unhandled server-side failure. |

