> Source: https://wexa.ai/docs/automation/list-schedules

# list-schedules

List the schedules in this project, the same set the console's Schedules panel shows. Needs the `fabric:orchestrate.read` grant.

**List schedules**

**Wexa MCP server**

```bash
curl -sS -X POST https://fabric.wexa.ai/mcp/$FABRIC_PROJECT_ID \
  -H "authorization: Bearer $FABRIC_API_KEY" \
  -H "Mcp-Session-Id: $MCP_SESSION_ID" \
  -H "content-type: application/json" -H "accept: application/json" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"list-schedules","arguments":{"agentflow_id":"6ab1945e7566f41b5c28e303","limit":5}}}'
```

```json
{
  "content": [
    {
      "type": "text",
      "text": "{\"lifecycle_id\":\"qlc_000187\",\"result\":{\"limit\":5,\"page\":1,\"schedules\":[{\"schedule_id\":\"6ab194677566f41b5c28e30f\",\"agentflow_id\":\"6ab1945e7566f41b5c28e303\",\"goal\":\"Summarise yesterday's orders.\",\"frequency\":\"0 9 * * 1\",\"type\":\"recurring\",\"status\":\"active\",\"run_count\":0}],\"total_count\":1}}"
    }
  ],
  "isError": false
}
```

**REST API**

```bash
curl -sS https://fabric.wexa.ai/v1/list-schedules \
  -H "authorization: Bearer $FABRIC_API_KEY" \
  -H "content-type: application/json" \
  -d '{"agentflow_id":"6ab1945e7566f41b5c28e303","limit":5}'
```

```json
{
  "lifecycle_id": "qlc_000187",
  "result": {
    "limit": 5,
    "page": 1,
    "schedules": [
      {
        "schedule_id": "6ab194677566f41b5c28e30f",
        "agentflow_id": "6ab1945e7566f41b5c28e303",
        "goal": "Summarise yesterday's orders.",
        "frequency": "0 9 * * 1",
        "type": "recurring",
        "status": "active",
        "run_count": 0
      }
    ],
    "total_count": 1
  }
}
```

**TypeScript SDK**

```ts
import { Fabric } from '@wexa-fabric/sdk'

const fabric = new Fabric()
const result = await fabric.listSchedules({
  agentflow_id: '6ab1945e7566f41b5c28e303',
  limit: 5
})
```

```ts
// result is the payload itself, with no `.result` to read
{
  limit: 5,
  page: 1,
  schedules: [
    {
      schedule_id: '6ab194677566f41b5c28e30f',
      agentflow_id: '6ab1945e7566f41b5c28e303',
      goal: 'Summarise yesterday\'s orders.',
      frequency: '0 9 * * 1',
      type: 'recurring',
      status: 'active',
      run_count: 0
    }
  ],
  total_count: 1
}
```

**Python SDK**

```python
from wexa import Fabric

fabric = Fabric()
out = fabric.list_schedules(
    agentflow_id="6ab1945e7566f41b5c28e303",
    limit=5,
)
```

```python
# out is the result, already unwrapped
{
    "limit": 5,
    "page": 1,
    "schedules": [
        {
            "schedule_id": "6ab194677566f41b5c28e30f",
            "agentflow_id": "6ab1945e7566f41b5c28e303",
            "goal": "Summarise yesterday's orders.",
            "frequency": "0 9 * * 1",
            "type": "recurring",
            "status": "active",
            "run_count": 0
        }
    ],
    "total_count": 1
}
```

## Parameters

| Parameter | Type | Required | Notes |
| --- | --- | --- | --- |
| `agentflow_id` | string | Optional | Only schedules for this agent or process flow. A malformed id is refused: it must be a 24-character hex id. |
| `limit` | integer | Optional | Rows per page. Default 20. |
| `page` | integer | Optional | 1-based page number. Default 1. A value below 1 is refused. |
| `search` | string | Optional | Narrow by name. |
| `status` | string | Optional | One of: `active`, `inactive`, `paused`. Any other value is refused. |
| `type` | string | Optional | One of: `once`, `recurring`. Any other value is refused. |

**Show full response**

A real response, captured from a live call to `list-schedules`:

**Result of list-schedules**

**REST API**

```json
{
  "lifecycle_id": "qlc_000187",
  "result": {
    "limit": 5,
    "page": 1,
    "schedules": [
      {
        "agentflow_id": "6ab1945e7566f41b5c28e303",
        "conclusion": null,
        "created_at": 1790022759.401271,
        "created_by": null,
        "end_at": null,
        "frequency": "0 9 * * 1",
        "goal": "Summarise yesterday's orders.",
        "last_execution_id": null,
        "limit": null,
        "run_at": null,
        "run_count": 0,
        "schedule_id": "6ab194677566f41b5c28e30f",
        "status": "active",
        "time_zone": null,
        "type": "recurring",
        "updated_at": null
      }
    ],
    "total_count": 1
  }
}
```

**TypeScript SDK**

```ts
// the object you get back IS the result — there is no `.result` to read
{
  limit: 5,
  page: 1,
  schedules: [
    {
      agentflow_id: '6ab1945e7566f41b5c28e303',
      conclusion: null,
      created_at: 1790022759.401271,
      created_by: null,
      end_at: null,
      frequency: '0 9 * * 1',
      goal: 'Summarise yesterday\'s orders.',
      last_execution_id: null,
      limit: null,
      run_at: null,
      run_count: 0,
      schedule_id: '6ab194677566f41b5c28e30f',
      status: 'active',
      time_zone: null,
      type: 'recurring',
      updated_at: null
    }
  ],
  total_count: 1
}

// The TS SDK names these camelCase — lifecycleId, traceId — where Python uses
// lifecycle_id and trace_id. Both are non-enumerable: readable, but omitted by
// Object.keys() and JSON.stringify(). `result.lifecycleId` here is undefined.
result.lifecycleId // 'qlc_000187'
```

**Python SDK**

```python
# a dict subclass; `result` is already unwrapped
{
 "limit": 5,
 "page": 1,
 "schedules": [
  {
   "agentflow_id": "6ab1945e7566f41b5c28e303",
   "conclusion": None,
   "created_at": 1790022759.401271,
   "created_by": None,
   "end_at": None,
   "frequency": "0 9 * * 1",
   "goal": "Summarise yesterday's orders.",
   "last_execution_id": None,
   "limit": None,
   "run_at": None,
   "run_count": 0,
   "schedule_id": "6ab194677566f41b5c28e30f",
   "status": "active",
   "time_zone": None,
   "type": "recurring",
   "updated_at": None
  }
 ],
 "total_count": 1
}

out.lifecycle_id  # 'qlc_000187' — an attribute, not a key
```

**More details**

Every parameter is optional: `list-schedules` answers a bare call. Each row's `schedule_id` is accepted unchanged by `get-schedule`, `update-schedule` and `delete-schedule`.

A schedule runs one agent or process flow on a cron expression or at a single instant, with a goal set once.

Not marked consequential: it is audited lightly and the project's write gate never holds it.

Every tool call works the same way: [How every tool call works](/docs/sdks-and-apis/how-every-tool-call-works).
