---
title: "List routines"
method: GET
path: "/routines"
tags: ["Routines"]
---

# List routines

`GET /routines`

## Request

- Base URL: `https://elicit.com/api/v2`
- URL: `https://elicit.com/api/v2/routines`
- Auth: HTTP bearer

Returns routines in Research Agent sessions you can access. Without `sessionId`, the list includes routines reached through session ownership, a direct share, or a project grant; public-link access alone is excluded. With `sessionId`, the same filters, ordering, cursor, and response shape apply, and an unknown or inaccessible session returns 404.

By default the endpoint returns every unarchived routine. Use `filter` for active, paused, or archived routines; `q` searches names and instructions. The default order is newest first by `createdAt`. Sorting by `removedAt` requires `filter=archived`.

## Query parameters

- `sessionId` string, uuid: Restrict results to one accessible Research Agent session.
- `filter` 'active' | 'paused' | 'archived': Restrict results by lifecycle state. Omit to return all unarchived routines.
- `q` string: Case-insensitive search over routine names and instructions.
- `limit` integer: Page size.
- `cursor` string: Opaque nextCursor from the previous page.
- `sortBy` 'createdAt' | 'removedAt': Sort field. removedAt requires filter=archived.
- `sortDirection` 'asc' | 'desc'

## Response `200`

One page of accessible routines.

- RoutineList
  - `routines` Routine[], required
    - `id` string, uuid, required
    - `createdAt` string, required
    - `updatedAt` string, required
    - `name` string, required
    - `status` 'active' | 'paused', required
    - `pauseReason` union, required
      - 'scheduler_projection_failed' | 'task_owner_lost_access' | 'session_unavailable' | 'session_owner_ineligible' | 'owner_plan_ineligible' | 'invalid_configuration'
      - string
    - `removedAt` string, nullable, required
    - `removedReason` 'user' | 'session_removed' | 'session_deleted' | 'null', nullable, required
    - `sessionId` string, required
    - `instruction` string, required
    - `schedule` object, required
      - `cadence` 'daily' | 'weekly', required
      - `dayOfWeek` integer, nullable, required
      - `runAtLocalTime` string, required
      - `timeZone` string, required
    - `ownerNotificationLevel` 'all_runs' | 'output_or_attention' | 'attention_only', required
  - `nextCursor` string, nullable, required: Cursor for the next page, or null at the end.

## Other responses

- `400`: A path ID, query parameter, body field, schedule, cursor, or filter/sort combination is invalid.
- `401`: Authentication failed. The API key is missing, invalid, revoked, or expired.
- `403`: API access or routines are unavailable for your account. Check the error code.
- `404`: The routine or requested session does not exist or is not accessible to you.
- `429`: Rate limit exceeded. More than 100 requests per minute were received from your IP address; further requests are blocked for 5 minutes.
- `500`: An unexpected error occurred. Retry reads with backoff; before retrying a write, check whether it took effect. See Error Handling for retry guidance.

## Changes

- **2026-10-16** `22847bf7e65d`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/elicitlabs/apis/elicit-labs-api/changes/routines/get.md)

---

[API](https://skmtc.dev/elicitlabs/apis/elicit-labs-api.md) - [All operations](https://skmtc.dev/elicitlabs/apis/elicit-labs-api/llms.txt) - [OpenAPI document](https://skmtc.dev/elicitlabs/apis/elicit-labs-api/revisions/cbbe29509d04?raw)
