## List wake windows

`GET /v1/infra/servers/:id/wake-schedules`

Returns all wake windows of a server, including disabled ones. Unlike creating and updating, this works regardless of whether scheduled wake is enabled for the Bitrix24 account — so the server owner can see already-declared windows even when the feature is currently unavailable for their account.

## Parameters

| Parameter | In | Type | Required | Description |
|-----------|----|------|:--------:|--------------|
| `id` | path | string (UUID) | yes | ID of the BLACKHOLE server |

There are no query parameters — filtering and pagination over one server's windows aren't offered; the 50-windows-per-server cap makes them unnecessary.

## Examples

### curl — personal key

```bash
curl -H "X-Api-Key: YOUR_API_KEY" \
  https://vibecode.bitrix24.com/v1/infra/servers/SERVER_ID/wake-schedules
```

### curl — OAuth app

```bash
curl -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  https://vibecode.bitrix24.com/v1/infra/servers/SERVER_ID/wake-schedules
```

### JavaScript — personal key

```javascript
const res = await fetch(
  `https://vibecode.bitrix24.com/v1/infra/servers/${serverId}/wake-schedules`,
  { headers: { 'X-Api-Key': 'YOUR_API_KEY' } }
)
const { data } = await res.json()
console.log(`Windows: ${data.length}, enabled: ${data.filter(w => w.enabled).length}`)
```

### JavaScript — OAuth app

```javascript
const res = await fetch(
  `https://vibecode.bitrix24.com/v1/infra/servers/${serverId}/wake-schedules`,
  {
    headers: {
      'X-Api-Key': 'YOUR_APP_KEY',
      'Authorization': 'Bearer USER_SESSION_TOKEN',
    },
  }
)
```

## Response fields

| Field | Type | Description |
|-------|------|--------------|
| `success` | boolean | Always `true` on success |
| `data` | array | The server's windows, including disabled ones |
| `data[].id` | string | Window ID |
| `data[].serverId` | string (UUID) | ID of the owning server |
| `data[].cronExpr` | string | The window's cron expression |
| `data[].timezone` | string | The window's IANA timezone |
| `data[].label` | string \| null | Window label |
| `data[].lead` | number \| null | Margin in seconds before the `cronExpr` moment. `null` means the server's or platform's margin is used |
| `data[].enabled` | boolean | Whether the window is active |
| `data[].source` | string | How the window was created. Always `"MANUAL"` for windows created through this CRUD |
| `data[].lastFiredAt` | string (ISO 8601) \| null | Timestamp of the last confirmed firing |
| `data[].wakeAttemptStartedAt` | string (ISO 8601) \| null | Internal scheduler claim marker, normally `null` |
| `data[].lastWakeLateAt` | string (ISO 8601) \| null | Timestamp of the last late wake. `null` if there have been no late wakes |
| `data[].createdAt` | string (ISO 8601) | Record creation date |
| `data[].updatedAt` | string (ISO 8601) | Date of the last update to the record |

## Response example

```json
{
  "success": true,
  "data": [
    {
      "id": "cm38x02qp0001ml08g7k3h2a",
      "serverId": "e765edfc-ba0a-43de-b8ea-838dd872c522",
      "cronExpr": "0 9 * * 1-5",
      "timezone": "America/New_York",
      "label": "daily report",
      "lead": null,
      "enabled": true,
      "source": "MANUAL",
      "lastFiredAt": "2026-07-10T06:00:04.000Z",
      "wakeAttemptStartedAt": null,
      "lastWakeLateAt": null,
      "createdAt": "2026-07-03T08:12:00.000Z",
      "updatedAt": "2026-07-03T08:12:00.000Z"
    },
    {
      "id": "cm38x19rt0002ml08a1z9k7b",
      "serverId": "e765edfc-ba0a-43de-b8ea-838dd872c522",
      "cronExpr": "0 22 * * *",
      "timezone": "America/New_York",
      "label": "nightly cleanup",
      "lead": 300,
      "enabled": false,
      "source": "MANUAL",
      "lastFiredAt": null,
      "wakeAttemptStartedAt": null,
      "lastWakeLateAt": null,
      "createdAt": "2026-07-05T11:40:00.000Z",
      "updatedAt": "2026-07-08T09:02:00.000Z"
    }
  ]
}
```

## Error response example

404 — server not found:

```json
{
  "success": false,
  "error": {
    "code": "NOT_FOUND",
    "message": "Server not found"
  }
}
```

## Errors

| HTTP | Code | Description |
|------|------|--------------|
| 401 | `MISSING_API_KEY` | The `X-Api-Key` header is missing |
| 401 | `INVALID_API_KEY` | The API key is invalid or expired |
| 404 | `NOT_FOUND` | The server was not found, was deleted, or belongs to a different API key |
| 429 | `RATE_LIMITED` | The platform's overall request rate limit was exceeded |

Full list of shared error codes — [Errors](/docs/errors).

## Known behavior

- **Not gated by the feature's per-account status.** Unlike creating, updating, and deleting, listing works even while scheduled wake is not enabled for the Bitrix24 account (`WAKE_SCHEDULE_DISABLED` is never returned here) — so the server owner sees already-declared windows regardless of whether the feature is currently available to their account.
- **Item order.** The array is sorted by window creation date (`createdAt`, ascending) — newer windows appear last.

## See also

- [Create a window](./create.md)
- [Update a window](./update.md)
- [Delete a window](./delete.md)
