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

# List workflows

> Every workflow on your account, with whether it is on and ready to run, its last run and when it runs next.

Returns your workflows. Use it to find a workflow’s `id`, and to see at a glance which ones can run.

> [!NOTE]
>
> Workflows are in preview. Where they aren’t open to your account, this endpoint answers a bare `404` with no body.

## Response

**workflows** `array`

Every workflow.

**Workflow**

**id** `string`

The workflow’s id: lowercase letters, digits and `-`, at most 60. Made from its name.

**name** `string | null`

Its name.

**on** `boolean`

`true` when its start runs it. A workflow is on only while it can run.

**ready** `boolean`

`true` when it can run now.

**to\_fix** `string[]`

What still has to be done before it can run, in plain words. Empty when it is ready.

**last\_run** `object | null`

Its newest run: `run_id`, `state` and `at` (ISO 8601). `null` when it never ran.

**next\_run\_at** `string | null`

When a timed start runs it next, ISO 8601. `null` when it runs at no set time.

**scheduled** `boolean | null`

`false` when it is on, with a time to come, and nothing set to start it then. `null` when that can’t be said now.

## Example

```bash cURL theme={null}
curl https://www.orgo.ai/api/workflows \
  -H "Authorization: Bearer $ORGO_API_KEY"
```

```python Python theme={null}
import os, requests

r = requests.get(
    "https://www.orgo.ai/api/workflows",
    headers={"Authorization": f"Bearer {os.environ['ORGO_API_KEY']}"},
)
for w in r.json()["workflows"]:
    print(w["id"], "on" if w["on"] else "off", w["to_fix"])
```

```javascript JavaScript theme={null}
const r = await fetch("https://www.orgo.ai/api/workflows", {
  headers: { Authorization: `Bearer ${process.env.ORGO_API_KEY}` },
});
const { workflows } = await r.json();
```

### Response

```json theme={null}
{
  "workflows": [
    {
      "id": "morning-report",
      "name": "Morning report",
      "on": true,
      "ready": true,
      "to_fix": [],
      "last_run": { "run_id": "0d9c6c1e-5b8e-4a59-9d3b-7a1f2c3d4e5f", "state": "done", "at": "2026-11-05T14:00:04.000Z" },
      "next_run_at": "2026-11-06T14:00:00.000Z",
      "scheduled": true
    }
  ]
}
```

## Errors

| Status | Body | When |
| - | - | - |
| `401` | `{ "error": "…" }` | No `Authorization` header, or a key Orgo doesn’t know. Carries `WWW-Authenticate`. |
| `403` | `{ "error": "…", "code": "key_permission" }` | A restricted key without Workflows read. |
| `404` | (no body) | Workflows aren’t open to your account. |
| `429` | `{ "error": "…", "code": "rate_limited", "limit": "api_other_per_minute", "retry_after": 30 }` | Your plan’s rate limit for other API calls. Carries `Retry-After`. See [Plan rate limits](https://docs.orgo.ai/guides/account-limits.md#plan-rate-limits). |
| `503` | `{ "error": "Service temporarily unavailable. …" }` | Orgo couldn’t verify the key because of a server-side fault. Retry. Carries `Retry-After: 5`. |


## OpenAPI

````yaml GET /workflows
openapi: 3.1.0
info:
  title: Orgo API
  description: >-
    Launch cloud computers that AI agents can control and interact with. Create
    workspaces, provision computers, and control them programmatically.
  version: 2.0.0
  contact:
    name: Orgo Support
    email: contact@orgo.ai
    url: https://orgo.ai
servers:
  - url: https://www.orgo.ai/api
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Support
    description: >-
      Orgo’s support agent, for programs: ask how to do something in Orgo and
      get an answer with full URLs and copyable commands.
  - name: Account
    description: >-
      Account capacity: how many computers an account may run, and adding or
      giving back more.
  - name: Agent accounts
    description: >-
      Accounts an AI agent makes for itself, and the claim link a person uses to
      take one over.
  - name: Clients
    description: >-
      Run Orgo for your clients from your own app: a workspace and scoped key
      each, billed to you or to them.
  - name: Workspaces
    description: Organize computers into named workspaces
  - name: Computers
    description: Provision and manage virtual computers
  - name: Computer Lifecycle
    description: Start, stop, and restart computers
  - name: Computer Actions
    description: Control mouse, keyboard, and execute commands
  - name: Screens
    description: >-
      More than one desktop on a single computer. Each screen is its own X
      server with its own cursor and window manager, so an agent working on one
      cannot disturb another.
  - name: Files
    description: Upload and download files
  - name: Templates
    description: Author, build, and launch reproducible computers from templates
  - name: Chat
    description: Run an agent on a computer through OpenAI-compatible chat completions.
  - name: Workflows
    description: >-
      Routines that run the same way every time: a start, then steps. Make them
      from plain words or lines, check them, run them and follow their runs (in
      preview).
paths:
  /workflows:
    get:
      tags:
        - Workflows
      summary: List workflows
      description: >-
        A workflow is a routine that runs the same way every time: a start, then
        steps wired in order, written as lines of JSON
        (https://www.orgo.ai/workflows.md). Workflows are in preview: where they
        are not open to the account every call answers a bare 404. A key needs
        Workflows access (read to read, write to change and run). Each one says
        whether it is on, whether it is ready to run (ready, and to_fix when
        not), its last run, and when a time start runs it next (next_run_at;
        scheduled is false when it is on but no time will start it).
      responses:
        '200':
          description: '{ workflows }'
          content:
            application/json:
              schema:
                type: object
                required:
                  - workflows
                properties:
                  workflows:
                    type: array
                    items:
                      $ref: '#/components/schemas/WorkflowSummary'
              example:
                workflows:
                  - id: morning-report
                    name: Morning report
                    'on': true
                    ready: true
                    to_fix: []
                    last_run:
                      run_id: 0d9c6c1e-5b8e-4a59-9d3b-7a1f2c3d4e5f
                      state: done
                      at: '2026-11-05T14:00:04.000Z'
                    next_run_at: '2026-11-06T14:00:00.000Z'
                    scheduled: true
        '401':
          description: Unauthenticated (with WWW-Authenticate and docs).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowError'
        '403':
          description: >-
            A key without Workflows access at this level (key_permission); a key
            that may not act on the workflow’s computer (key_permission: Control
            write and AI write, or computer_key_held).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowError'
        '404':
          description: Workflows are not open to this account (a bare 404, no body).
        '429':
          $ref: '#/components/responses/RateLimited'
        '503':
          $ref: '#/components/responses/AuthUnavailable'
components:
  schemas:
    WorkflowSummary:
      type: object
      required:
        - id
        - name
        - 'on'
        - ready
        - to_fix
        - last_run
        - next_run_at
        - scheduled
      properties:
        id:
          type: string
        name:
          type:
            - string
            - 'null'
        'on':
          type: boolean
        ready:
          type: boolean
        to_fix:
          type: array
          items:
            type: string
        last_run:
          type:
            - object
            - 'null'
          properties:
            run_id:
              type: string
            state:
              type: string
            at:
              type: string
              format: date-time
        next_run_at:
          type:
            - string
            - 'null'
          format: date-time
        scheduled:
          type:
            - boolean
            - 'null'
          description: >-
            False: on, with a time to come, and nothing set to start it then.
            Null: not known now.
    WorkflowError:
      type: object
      required:
        - error
        - code
      properties:
        error:
          type: string
        code:
          type: string
        say:
          type: string
          description: The same, short, for a person.
        next:
          type: string
          description: The call that fixes it.
        to_fix:
          type: array
          items:
            type: string
        problems:
          type: array
          items:
            type: object
        version:
          type:
            - integer
            - 'null'
          description: 'version_conflict: the newest version.'
        lines:
          type:
            - string
            - 'null'
          description: 'version_conflict: the newest lines, to merge into.'
    RateLimited:
      type: object
      required:
        - error
        - code
        - limit
        - retry_after
      properties:
        error:
          type: string
          description: Which limit, in plain words, and when to try again.
        code:
          type: string
          const: rate_limited
        limit:
          type: string
          enum:
            - computer_create_per_minute
            - computer_create_per_hour
            - computer_create_per_day
            - computer_lifecycle_per_minute
            - computer_lifecycle_per_computer_per_minute
            - computer_control_per_minute
            - computer_control_per_computer_per_minute
            - chat_runs_per_minute
            - chat_runs_concurrent
            - workspace_create_per_hour
            - api_other_per_minute
        retry_after:
          type: integer
          minimum: 1
          description: Seconds to wait.
      example:
        error: >-
          Too many API requests this minute (120 a minute on your plan). Try
          again in 12 seconds.
        code: rate_limited
        limit: api_other_per_minute
        retry_after: 12
    Error:
      type: object
      description: >-
        The base error body. Every failure carries `error`; individual endpoints
        add the fields named in the schemas below.
      required:
        - error
      properties:
        error:
          type: string
          description: Human-readable message.
          example: Access denied
        code:
          type: string
          description: >-
            Machine-readable reason. Present on the failures that define one,
            absent otherwise.
  responses:
    RateLimited:
      description: >-
        Over one of the account's plan rate limits (`rate_limited`): `limit`
        names it, and `retry_after` and `Retry-After` say how many seconds to
        wait. Limits are per account, the workspace owner's when the request
        acts on a computer or a workspace, and set by its plan. See [Account
        limits and rate limits](/guides/account-limits#plan-rate-limits).
      headers:
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimitLimit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimitRemaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimitReset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RateLimited'
    AuthUnavailable:
      description: >-
        Orgo could not verify the credential because of a server-side fault,
        such as a database outage. Retry after `Retry-After`. Do not rotate the
        key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: >-
              Service temporarily unavailable. The database is not accepting
              requests. Retry shortly.
      headers:
        Retry-After:
          description: Seconds to wait before retrying. Always `5`.
          schema:
            type: string
            example: '5'
  headers:
    RetryAfter:
      description: Seconds to wait before asking again.
      schema:
        type: integer
        minimum: 1
    RateLimitLimit:
      description: The tightest limit this request counts against.
      schema:
        type: integer
    RateLimitRemaining:
      description: How many are left of it in this window.
      schema:
        type: integer
    RateLimitReset:
      description: Seconds until its window starts again.
      schema:
        type: integer
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key authentication. Get your key at orgo.ai/workspaces

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.