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

# List Jobs

> Retrieve a paginated list of jobs for your project.

<Info>
  **Permission Required**: `project:read-runs`
</Info>

Retrieve a paginated list of jobs for your project.

## Query Parameters

<ParamField query="status" type="string" default="all">
  Filter by status: `queued`, `running`, `completed`, or `all`
</ParamField>

<ParamField query="test_plan_execution_id" type="string">
  Filter by test plan execution ID
</ParamField>

<ParamField query="multiplayer_test_id" type="string">
  Filter by test ID
</ParamField>

<ParamField query="tags" type="string">
  Filter by tags (comma-separated). All specified tags must match. Example: `tags=release,candidate`
</ParamField>

<ParamField query="page" type="integer" default="0">
  Page number (0-indexed)
</ParamField>

<ParamField query="page_size" type="integer" default="20">
  Results per page (1-100)
</ParamField>

## Response

<ResponseField name="data" type="Job[]" required>
  Array of job objects
</ResponseField>

<ResponseField name="pagination" type="object" required>
  Pagination information

  <Expandable title="pagination properties">
    <ResponseField name="pagination.page" type="integer" />

    <ResponseField name="pagination.page_size" type="integer" />

    <ResponseField name="pagination.total_count" type="integer" />

    <ResponseField name="pagination.total_pages" type="integer" />
  </Expandable>
</ResponseField>

### Job Object

<ResponseField name="job_id" type="string" required>
  Unique identifier for the job
</ResponseField>

<ResponseField name="project_id" type="string" required>
  Project the job belongs to
</ResponseField>

<ResponseField name="status" type="string" required>
  Job status: `QUEUED`, `STARTING`, `RUNNING`, `STOPPING`, `CLEANING_UP`, or `COMPLETED`
</ResponseField>

<ResponseField name="created_at" type="string" required>
  ISO 8601 timestamp when the job was created
</ResponseField>

<ResponseField name="completed_at" type="string">
  ISO 8601 timestamp when the job completed
</ResponseField>

<ResponseField name="multiplayer_test_id" type="string" required>
  Test ID associated with this job
</ResponseField>

<ResponseField name="test_name" type="string">
  Test name, if available
</ResponseField>

<ResponseField name="platform" type="string">
  Target platform, if available
</ResponseField>

<ResponseField name="build_id" type="string">
  Build ID used for this job
</ResponseField>

<ResponseField name="test_plan_execution_id" type="string">
  Test plan execution ID, if job was started from a test plan
</ResponseField>

<ResponseField name="queue_rejection_reason" type="string">
  Queue rejection reason, if the job was rejected
</ResponseField>

<ResponseField name="templating_enabled" type="boolean" required>
  Whether test templating was enabled
</ResponseField>

<ResponseField name="template_data" type="object">
  Template variables used for this job
</ResponseField>

<ResponseField name="stopped_by" type="object">
  Who stopped this job, if it was stopped
</ResponseField>

<ResponseField name="tags" type="string[]" required>
  Tags associated with this job
</ResponseField>

<ResponseField name="retries" type="object" required>
  Retry counters for this job

  <Expandable title="retries properties">
    <ResponseField name="retries.total" type="integer" />

    <ResponseField name="retries.remaining" type="integer" />
  </Expandable>
</ResponseField>

<ResponseField name="runs" type="RunSummary[]" required>
  Multiplayer runs associated with this job

  <Expandable title="runs[] properties">
    <ResponseField name="runs[].multiplayer_run_id" type="string" required />

    <ResponseField name="runs[].state" type="string" />

    <ResponseField name="runs[].result" type="string" />

    <ResponseField name="runs[].started_at" type="string" />

    <ResponseField name="runs[].completed_at" type="string" />

    <ResponseField name="runs[].players" type="integer" required />
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash cURL theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  curl -X GET "https://nunu.ai/api/v1/project/your-project-id/jobs?status=running&tags=nightly,regression&page=0&page_size=10" \
    -H "X-Api-Key: YOUR_API_TOKEN"
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  {
    "data": [
      {
        "job_id": "f80f6230-3a4f-431a-9d55-d11b867fed4e",
        "project_id": "test",
        "status": "COMPLETED",
        "created_at": "2026-03-03T15:50:19.544603+00:00",
        "completed_at": "2026-03-03T15:54:24.463635+00:00",
        "multiplayer_test_id": "a5060a07-d386-4279-98ce-b33fb884201e",
        "test_name": "ftue",
        "platform": "lt_phone",
        "build_id": null,
        "test_plan_execution_id": null,
        "queue_rejection_reason": null,
        "templating_enabled": true,
        "stopped_by": null,
        "tags": ["ftue"],
        "retries": {
          "total": 0,
          "remaining": 0
        },
        "runs": [
          {
            "multiplayer_run_id": "lkkg6t5612m",
            "state": "COMPLETED",
            "result": "SUCCESS",
            "started_at": "2026-03-03T15:50:23.601048+00:00",
            "completed_at": "2026-03-03T15:54:24.261038+00:00",
            "players": 1
          }
        ]
      }
    ],
    "pagination": {
      "page": 0,
      "page_size": 10,
      "total_count": 1,
      "total_pages": 1
    }
  }
  ```
</ResponseExample>


## OpenAPI

````yaml GET /project/{projectId}/jobs
openapi: 3.1.0
info:
  title: nunu.ai API
  description: >-
    The nunu.ai Public API allows you to programmatically interact with your
    projects, manage test runs, and upload builds.
  version: 1.0.0
servers:
  - url: https://nunu.ai/api/v1
security:
  - apiKeyAuth: []
paths:
  /project/{projectId}/jobs:
    parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
        description: >-
          The project ID. You can copy it from the project settings page or the
          project URL in the dashboard.
    get:
      tags:
        - Runs
      summary: List Jobs
      description: Retrieve a paginated list of jobs for your project.
      operationId: listJobs
      parameters:
        - name: status
          in: query
          description: Filter by job status
          schema:
            type: string
            enum:
              - queued
              - running
              - completed
              - all
            default: all
        - name: test_plan_execution_id
          in: query
          description: Filter by test plan execution ID
          schema:
            type: string
            format: uuid
        - name: multiplayer_test_id
          in: query
          description: Filter by test ID
          schema:
            type: string
            format: uuid
        - name: tags
          in: query
          description: Filter by tags (comma-separated). All specified tags must match.
          schema:
            type: string
        - name: page
          in: query
          description: Page number (0-indexed)
          schema:
            type: integer
            default: 0
        - name: page_size
          in: query
          description: Results per page (1-100)
          schema:
            type: integer
            default: 20
            minimum: 1
            maximum: 100
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListJobsResponse'
        '400':
          description: Bad Request - Invalid query parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized - Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden - API key lacks required permission
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    ListJobsResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Job'
        pagination:
          type: object
          properties:
            page:
              type: integer
            page_size:
              type: integer
            total_count:
              type: integer
            total_pages:
              type: integer
    Error:
      type: object
      properties:
        error:
          type: string
        code:
          type: string
        details:
          type: object
    Job:
      type: object
      properties:
        job_id:
          type: string
          format: uuid
        project_id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - QUEUED
            - STARTING
            - RUNNING
            - STOPPING
            - CLEANING_UP
            - COMPLETED
        created_at:
          type: string
          format: date-time
        completed_at:
          type: string
          format: date-time
          nullable: true
        multiplayer_test_id:
          type: string
          format: uuid
        test_name:
          type: string
          nullable: true
        platform:
          type: string
          nullable: true
        build_id:
          type: string
          format: uuid
          nullable: true
        test_plan_execution_id:
          type: string
          format: uuid
          nullable: true
        queue_rejection_reason:
          type: string
          nullable: true
        templating_enabled:
          type: boolean
        template_data:
          type: object
          nullable: true
        stopped_by:
          type: object
          nullable: true
        tags:
          type: array
          items:
            type: string
        retries:
          $ref: '#/components/schemas/JobRetries'
        runs:
          type: array
          items:
            $ref: '#/components/schemas/JobRunSummary'
    JobRetries:
      type: object
      properties:
        total:
          type: integer
        remaining:
          type: integer
    JobRunSummary:
      type: object
      properties:
        multiplayer_run_id:
          type: string
        state:
          type: string
          nullable: true
        result:
          type: string
          nullable: true
        started_at:
          type: string
          format: date-time
          nullable: true
        completed_at:
          type: string
          format: date-time
          nullable: true
        players:
          type: integer
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: X-Api-Key
      description: API key for authentication

````