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

# List workflows

> GET /v1/workflows

The workflows this key can see. Sharing is per workflow, so this is not necessarily everything in the workspace.


## OpenAPI

````yaml openapi.json GET /v1/workflows
openapi: 3.0.0
info:
  title: Infery Gateway
  description: >-
    Infery Inference Gateway — OpenAI-compatible API for LLMs, embeddings,
    images, audio, and video
  version: '1.0'
  contact: {}
servers:
  - url: https://api.infery.ai
    description: Production
  - url: http://localhost:3001
    description: Local
security: []
tags: []
paths:
  /v1/workflows:
    get:
      tags:
        - Workflows
      summary: List workflows
      description: >-
        One page of the workflows in this API key's workspace THAT THIS CALLER
        MAY SEE — its own, the `workspace`-scoped ones, and the ones shared with
        it individually; workspace owners and admins see all of them.
        Soft-deleted workflows are excluded. `total` is counted through the same
        filter, so it never reveals that a workflow the caller cannot see
        exists. Newest first by `createdAt`; the rows carry no definition —
        fetch one to get that.
      operationId: PipelinesController_list[0]
      parameters:
        - name: limit
          required: false
          in: query
          description: >-
            Page size. Integer; defaults to 20, and anything above 100 is
            clamped to 100.
          schema:
            example: 20
            type: string
        - name: offset
          required: false
          in: query
          description: Rows to skip. Integer; defaults to 0.
          schema:
            example: 0
            type: string
      responses:
        '200':
          description: One page of visible workflows.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PipelineListResponseDto'
        '401':
          description: Unauthorized — invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
      security:
        - ApiKey: []
components:
  schemas:
    PipelineListResponseDto:
      type: object
      properties:
        items:
          description: >-
            One page of workflows this caller may see, newest first by
            `createdAt`.
          type: array
          items:
            $ref: '#/components/schemas/PipelineSummaryDto'
        total:
          type: number
          description: >-
            Total workflows matching the SAME visibility filter as `items` — not
            the workspace total. A workflow the caller cannot see is counted
            nowhere.
          example: 42
        limit:
          type: number
          description: Page size actually applied, after the server clamp to 100.
          example: 20
        offset:
          type: number
          description: Offset actually applied.
          example: 0
      required:
        - items
        - total
        - limit
        - offset
    ErrorResponseDto:
      type: object
      properties:
        error:
          description: >-
            The error envelope. Every non-2xx response from this API has this
            shape, so a client can parse failures without branching on the
            endpoint.
          allOf:
            - $ref: '#/components/schemas/ErrorDetailDto'
      required:
        - error
    PipelineSummaryDto:
      type: object
      properties:
        id:
          type: string
          description: Workflow UUID.
          example: b0e9f2a4-2b1a-4c7d-9a3e-1f5c8d2e4b60
        workspaceId:
          type: string
          description: Owning workspace UUID — always the workspace the API key belongs to.
          example: 7d1c0a55-9f2b-4a13-8c6e-30b4e9a1c7f2
        name:
          type: string
          description: Author-supplied name. Max 120 characters.
          example: Weekly report
        description:
          type: string
          nullable: true
          description: >-
            Author-supplied description. Max 2000 characters. Null when never
            set.
          example: Summarise the week and render a PDF
        latestVersion:
          type: number
          description: >-
            Highest version number that exists for this workflow. `PUT`
            increments it only when the request carried a `definition`; a
            name/description-only update leaves it unchanged.
          example: 3
        isActive:
          type: boolean
          description: >-
            Column default. No code path in this repo ever writes it, so it is
            `true` on every row; do not read it as an enable/disable switch.
          example: true
        createdAt:
          type: string
          description: ISO-8601 creation timestamp.
          example: '2026-05-04T09:15:22.113Z'
        updatedAt:
          type: string
          description: >-
            ISO-8601 timestamp of the last `PUT` (name, description or
            definition).
          example: '2026-05-06T11:02:47.900Z'
        deletedAt:
          type: string
          nullable: true
          description: >-
            Soft-delete timestamp. Always null on these responses: both reads
            filter on `deletedAt: null`, so a deleted workflow is a 404 rather
            than a row with a value here.
          example: null
        createdByUserId:
          type: string
          nullable: true
          description: >-
            User the workflow was created by, when the creating API key could be
            attributed to a workspace member. Null for a key whose creator was
            deleted or has left the workspace — such a key creates
            `workspace`-scoped workflows instead.
          example: 4e5a1b8c-77d3-4c21-a0fe-9b6d2c3a5e11
        sharingScope:
          type: string
          enum:
            - private
            - workspace
            - users
          description: >-
            Who may see this workflow, before per-user grants. `private` = its
            creator (plus workspace owners/admins); `workspace` = every member;
            `users` = the members it was explicitly shared with. New workflows
            land on `private` unless the API key had no attributable creator.
          example: private
        sharePermission:
          type: string
          enum:
            - read
            - write
          description: >-
            What the sharing grant permits. Consulted only for the `workspace`
            and `users` scopes. `read` allows running the workflow — it means
            "you cannot change it", not "you cannot use it".
          example: read
      required:
        - id
        - workspaceId
        - name
        - description
        - latestVersion
        - isActive
        - createdAt
        - updatedAt
        - deletedAt
        - createdByUserId
        - sharingScope
        - sharePermission
    ErrorDetailDto:
      type: object
      properties:
        message:
          type: string
          example: Model not found
          description: Human-readable error message
        type:
          type: string
          example: invalid_request_error
          description: Error category
          enum:
            - invalid_request_error
            - authentication_error
            - permission_error
            - quota_exceeded
            - rate_limit_error
            - server_error
        code:
          type: string
          example: model_not_found
          nullable: true
          description: >-
            Stable machine-readable error code. Branch on this rather than on
            `message`, which is prose and may be reworded.
        param:
          type: string
          example: model
          nullable: true
          description: >-
            Name of the request parameter that triggered the error. `null` when
            the error is not attributable to one field.
        job_id:
          type: string
          example: job_1hR9xTPZqK4mVLc2nJ7fY5wB
          description: >-
            Handle to work that is ALREADY RUNNING AND ALREADY BILLED, present
            on the few errors that carry one. When it is here, this is not a
            failure to retry — retrying pays twice. Collect the result from `GET
            /v1/images/jobs/{job_id}`, which serves every durable media job
            regardless of modality.


            Two situations produce it. A media generation that outruns the
            gateway's wait answers `504` with `code: "job_timeout"` and keeps
            working. And `POST /v1/audio/speech` answers **500** with `code:
            "artifact_unreadable"` when the speech was generated and settled but
            could not be read back from storage — the audio exists and is paid
            for; only this response failed.


            Declared here rather than per-endpoint because the rule is about the
            FIELD, not the status: if this is present, there is a paid-for
            result to collect. It was undeclared until now, so a client
            generated from this document could not see the one field that
            recovers money already spent.
      required:
        - message
        - type
        - code
        - param
  securitySchemes:
    ApiKey:
      type: apiKey
      in: header
      name: Authorization
      description: 'API key in format: Bearer inf_***'

````