> ## Documentation Index
> Fetch the complete documentation index at: https://docs.blobhub.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Schedule

Retrieve details of a specific schedule.

## **POST** `/revisions/:id/data/query` (Command: `get_schedule`)

### Request Body

| Parameter     | Type   | Required | Description                  |
| :------------ | :----- | :------- | :--------------------------- |
| `engine`      | string | Yes      | Must be `scheduler_blobhub`. |
| `command`     | string | Yes      | Must be `get_schedule`.      |
| `schedule_id` | string | Yes      | Id or alias of the schedule. |

### Response

| Parameter  | Type   | Description          |
| :--------- | :----- | :------------------- |
| `schedule` | object | The schedule object. |

See [Alias Grammar](/blob-types/scheduler/overview#alias-grammar) to tell the schedule's own
`alias` apart from `invocation_target.workflow_alias`, and to see which commands accept a name in
place of an id.

### Errors

| Status | Error       | Cause                                                                   |
| :----- | :---------- | :---------------------------------------------------------------------- |
| 403    | `forbidden` | The schedule does not exist, or it is not reachable from this revision. |

A caller cannot tell these two 403 cases apart — a schedule that does not exist and one that is not
reachable both answer `forbidden`. Sessions already work this way; see
[Close Session](/blob-types/workflow/operations/close-session).

### Example

<CodeGroup>
  ```json Request theme={null}
  {
    "engine": "scheduler_blobhub",
    "command": "get_schedule",
    "schedule_id": "sched-001"
  }
  ```

  ```json Response theme={null}
  {
    "schedule": {
      "id": "sched-001",
      "alias": "morning-digest",
      "revision_id": "rev-scheduler-001",
      "created_at": "2026-04-07T12:00:00Z",
      "modified_at": "2026-04-07T12:00:00Z",
      "auth_target": "user",
      "auth_target_id": "user-001",
      "enabled": true,
      "repeat": "recurring_cron",
      "cron_expression": "0 9 * * ? *",
      "invocation_time": null,
      "timezone": "America/New_York",
      "start_date": null,
      "end_date": null,
      "state": "active",
      "invocation_target_type": "workflow",
      "invocation_target": {
        "org_id": "org-123",
        "blob_id": "blob-456",
        "revision_id": "rev-789",
        "session_id": "sess-abc",
        "workflow_alias": "daily-report",
        "input_data": []
      }
    }
  }
  ```
</CodeGroup>

Alias resolution reads a secondary index that is eventually consistent, so an alias assigned moments
earlier may not resolve yet. Hold the `id` returned by `create_schedule` rather than re-resolving the
schedule by alias on every call.
