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

# List executions (deprecated)

> Deprecated: use `GET /v2/executions` for cursor-based traversal.
V1 remains available for shallow compatibility.

Retrieve execution history for the authenticated API key's organization
with optional filters.
Model prediction terminal statuses include `success`, `error`, and `cancelled`;
workflow executions can surface `running`, `completed`, `failed`, or `cancelled`
depending on the originating backend. The `status` filter accepts the
four tokens listed on the parameter; unrecognized tokens return 400.

Results cover every API key in the organization that owns the
authenticated key.

Pagination: `offset` is retained for shallow compatibility but is
deprecated for history traversal. Use `GET /v2/executions` and its
opaque cursor to traverse matching history without an implicit total.
Computing an exact total over a large execution history is expensive,
so `total_count` can be capped and is then only a lower bound.
When `from` is omitted, the window defaults to the 90 days ending at
`to` (or now).




## OpenAPI

````yaml /openapi_specs/models.json get /v1/executions
openapi: 3.0.3
info:
  title: each::labs Official API v1
  description: >
    Official each::labs API V1.

    This API provides access to our comprehensive AI model catalog and other
    resources.


    ## Public contract notes


    - Public API routes handled by request logging include `X-Request-Id` for
      support and log correlation. Clients may send `X-Request-Id`; otherwise
      api-service generates one. Root, health, and metrics endpoints are excluded.
    - REST error bodies keep the backward-compatible JSON shape used by existing
      clients. Most errors include at least `error`; some shared error paths also
      include `status` and `details`. Use the HTTP status code as the primary
      programmatic signal unless an endpoint documents a richer envelope.
    - Rate-limit and retry headers are endpoint-dependent. If a response
    includes
      `Retry-After`, honor it before retrying; otherwise use bounded exponential
      backoff for retryable 429/5xx responses.
  version: 1.0.0
  contact:
    name: API Support
    email: support@eachlabs.ai
  x-logo:
    url: ./logo-white.svg
    altText: each::labs
servers:
  - url: https://api.eachlabs.ai
    description: Production server
security: []
tags:
  - name: AI Models
    description: Endpoints for listing and retrieving AI models and other resources.
  - name: AI Models Prediction
    description: Endpoints for managing model predictions
  - name: Uploads
    description: Endpoints for uploading files that can be used as model inputs.
  - name: Executions
    description: Endpoints for listing execution history.
  - name: Workflows
    description: >-
      Endpoints for creating workflows and triggering workflow executions
      through api-service.
  - name: OpenAI Compatibility
    description: OpenAI-compatible endpoints for LLM Router requests.
  - name: Webhooks
    description: >
      Endpoints for retrieving webhook information and delivery history.


      **Note:** Currently, webhooks are only supported for Workflows V2. We are
      actively expanding webhook support to other services and will update this
      documentation as new integrations become available.
paths:
  /v1/executions:
    get:
      tags:
        - Executions
      summary: List executions (deprecated)
      description: >
        Deprecated: use `GET /v2/executions` for cursor-based traversal.

        V1 remains available for shallow compatibility.


        Retrieve execution history for the authenticated API key's organization

        with optional filters.

        Model prediction terminal statuses include `success`, `error`, and
        `cancelled`;

        workflow executions can surface `running`, `completed`, `failed`, or
        `cancelled`

        depending on the originating backend. The `status` filter accepts the

        four tokens listed on the parameter; unrecognized tokens return 400.


        Results cover every API key in the organization that owns the

        authenticated key.


        Pagination: `offset` is retained for shallow compatibility but is

        deprecated for history traversal. Use `GET /v2/executions` and its

        opaque cursor to traverse matching history without an implicit total.

        Computing an exact total over a large execution history is expensive,

        so `total_count` can be capped and is then only a lower bound.

        When `from` is omitted, the window defaults to the 90 days ending at

        `to` (or now).
      operationId: listExecutions
      parameters:
        - name: limit
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 20
          description: Maximum number of executions to return
          example: 20
        - name: offset
          in: query
          deprecated: true
          schema:
            type: integer
            default: 0
            minimum: 0
          description: >-
            Deprecated shallow-page offset; use GET /v2/executions for
            traversal. The maximum requested prefix is 1,000 rows, evaluated
            after limit normalization as offset <= 1000 - appliedLimit. Requests
            beyond that boundary return {"error":"V1 execution pagination is
            limited to 1000 rows; use GET /v2/executions with cursor
            pagination"}.
          example: 0
        - name: model
          in: query
          schema:
            type: string
          description: Filter executions by model slug
          example: flux-1-1-pro
        - name: status
          in: query
          schema:
            type: string
          description: |
            Comma-separated status filter. Each token must be one of `created`,
            `starting`, `success`, or `error` (lowercase); any other token
            returns 400 naming the allowed set. An empty or absent parameter
            applies no status filter.
          example: success,error
        - name: workflow_id
          in: query
          schema:
            type: string
          description: Filter by workflow ID
          example: wf_abc123
        - name: workflow_execution_id
          in: query
          schema:
            type: string
          description: Filter by workflow execution ID
          example: wf_exec_abc123
        - name: error_classification
          in: query
          schema:
            type: string
            enum:
              - content_moderation
              - execution_timeout
              - invalid_user_input
              - invalid_model_config
              - provider_auth
              - provider_error
              - provider_rate_limit
              - provider_unavailable
              - internal_error
              - unknown
          description: |
            Comma-separated canonical error classification filter. Restricts
            results to terminal error executions whose classification is in the
            set; an unrecognized value returns 400. Each value must be one of
            the listed enum members.
          example: provider_rate_limit,provider_unavailable
        - name: from
          in: query
          schema:
            type: string
            format: date-time
          description: >-
            Start of creation time window, as RFC 3339. When omitted, defaults
            to 90 days before `to` (or before now when `to` is also omitted).
          example: '2026-01-01T00:00:00Z'
        - name: to
          in: query
          schema:
            type: string
            format: date-time
          description: End of creation time window, as RFC 3339
          example: '2026-01-31T23:59:59Z'
      responses:
        '200':
          description: List of executions
          headers:
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            Link:
              $ref: '#/components/headers/DeprecationLink'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListExecutionsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '408':
          $ref: '#/components/responses/RequestTimeout'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '502':
          $ref: '#/components/responses/BadGateway'
      deprecated: true
      security:
        - BearerAuth: []
components:
  headers:
    Deprecation:
      description: RFC 9745 date indicating that GET /v1/executions is deprecated.
      schema:
        type: string
      example: '@1788480000'
    DeprecationLink:
      description: Link to execution-list migration guidance.
      schema:
        type: string
      example: >-
        <https://docs.eachlabs.ai/changelog>; rel="deprecation";
        type="text/html"
    RequestId:
      description: >-
        Request correlation ID. Echoes the incoming `X-Request-Id` header or a
        generated ID.
      schema:
        type: string
      example: 123e4567-e89b-12d3-a456-426614174000
  schemas:
    ListExecutionsResponse:
      type: object
      properties:
        executions:
          type: array
          items:
            $ref: '#/components/schemas/ExecutionSummary'
        total_count:
          type: integer
          description: >-
            Number of matching executions. When `total_capped` is `true` this is
            a lower bound, not the exact total. Use `GET /v2/executions` and its
            opaque cursor for history traversal rather than relying on this
            count as a pagination stop condition.
          example: 123
        total_capped:
          type: boolean
          description: >-
            `true` when the server did not compute the exact count (the count is
            capped, or its time budget elapsed) and `total_count` is a lower
            bound — more matching executions may exist beyond it.
          example: false
        offset:
          type: integer
          description: Applied offset
          example: 0
        limit:
          type: integer
          description: Applied limit
          example: 20
      required:
        - executions
        - total_count
        - total_capped
        - offset
        - limit
    ExecutionSummary:
      type: object
      properties:
        id:
          type: string
          description: Execution identifier
          example: exec_abc123
        model:
          type: string
          description: Model slug
          example: flux-1-1-pro
        requested_model:
          type: string
          nullable: true
          description: >-
            The field is always present in the JSON response. Its value is the
            original LLM model requested through `eachlabs-llm-router`, or null
            for other executions
          example: openai/gpt-4.1-mini
        status:
          type: string
          description: >
            Execution status. Model prediction terminal statuses include
            `success`,

            `error`, and `cancelled`; workflow executions can surface `running`,

            `completed`, `failed`, or `cancelled` depending on the originating
            backend.
          example: success
        workflow_id:
          type: string
          nullable: true
          description: Workflow ID, when execution was triggered by a workflow
          example: wf_abc123
        workflow_execution_id:
          type: string
          nullable: true
          description: Workflow execution ID, when execution was triggered by a workflow
          example: wf_exec_abc123
        execution_cost:
          type: number
          description: Execution cost in USD
          example: 0.05
        run_time:
          type: number
          description: Runtime in seconds
          example: 12.5
        created_at:
          type: string
          format: date-time
          description: Creation timestamp
          example: '2026-01-01T00:00:00Z'
        started_at:
          type: string
          format: date-time
          nullable: true
          description: Start timestamp
          example: '2026-01-01T00:00:02Z'
        completed_at:
          type: string
          format: date-time
          nullable: true
          description: Completion timestamp
          example: '2026-01-01T00:00:15Z'
        output:
          type: string
          nullable: true
          description: Primary execution output, when available
          example: https://storage.example.com/predictions/abc123/image.jpg
    Error:
      type: object
      description: >
        Backward-compatible REST error body. Endpoint-specific handlers may
        return only

        `error`; shared error paths may also include `status` and `details`.
      properties:
        status:
          type: integer
          description: HTTP status code, when returned by the shared error handler.
          example: 400
        error:
          type: string
          description: Safe user-facing error message.
          example: error message
        details:
          nullable: true
          description: Optional validation or request details for client errors.
      required:
        - error
  responses:
    BadRequest:
      description: Bad request
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: slug parameter is required
    Unauthorized:
      description: Authentication required or invalid credentials
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Invalid or missing API key
    Forbidden:
      description: Forbidden
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: forbidden
    RequestTimeout:
      description: Upstream request timed out
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Request timeout
    InternalServerError:
      description: Internal server error
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: 'Failed to fetch models: internal error'
    BadGateway:
      description: Upstream service unavailable
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: workflows-engine unavailable
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: 'API key passed as `Authorization: Bearer <api_key>`'

````