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

# List or retrieve jobs

> Retrieve a paginated list of jobs or fetch a single job by UUID.
Use `action=list` for paginated results or `action=get` with a `uuid` parameter
for a specific job.

**Required permission:** `api.jobs.manage.list` (list) or `api.jobs.manage.get` (get)




## OpenAPI

````yaml /openapi.yaml get /api/jobs/manage
openapi: 3.0.3
info:
  title: PropOps Platform API
  description: >
    ## PropOps Platform API


    This is the official REST API documentation for the **PropOps Platform** — a
    comprehensive property

    maintenance and job management solution developed and maintained exclusively
    by **PropOps Technologies Ltd**.


    ### Overview


    The PropOps API enables full CRUD access to all platform resources,
    including job management,

    user administration, contractor assignments, tenant records, financial
    tracking, analytics, and more.


    The backend is built on **PHP 8+** with a custom modular architecture,
    backed by a MySQL/MariaDB

    database accessed via PDO.


    ### Authentication


    All endpoints (unless stated otherwise) require authentication via a
    **Bearer Token** (JWT-compatible).

    Include the token in the `Authorization` header:


    ```

    Authorization: Bearer <your_token>

    ```


    Tokens are issued upon successful login and are session-scoped SHA-256
    hashes (64 characters).

    Mobile and API clients must supply the token on every request. Web session
    cookies are used for

    browser clients.


    ### CSRF Protection


    State-mutating operations (POST, PUT, DELETE) require a valid CSRF token
    passed in the request body

    or header as `csrf_token`. Obtain a fresh token from `GET
    /api/security/csrf-token`.


    ### Permissions


    Access to each endpoint is controlled by a granular permission key
    (dot-notation, e.g.

    `api.jobs.manage.manage`). Your account must be granted the relevant
    permission by an administrator.


    ### Rate Limiting


    Requests are subject to per-IP and per-account rate limits. Exceeding limits
    returns `429 Too Many Requests`.


    ### Pagination


    List endpoints support `limit` (default: 50, max: 200) and `offset` query
    parameters.


    ### Response Format


    All responses are JSON with the following envelope:


    ```json

    {
      "success": true,
      "data": { ... },
      "count": 0,
      "message": "Operation completed successfully"
    }

    ```


    Errors follow:


    ```json

    {
      "success": false,
      "error": "Human-readable error message"
    }

    ```


    ---

    **© 2024 PropOps Technologies Ltd. All rights reserved. Proprietary and
    confidential.**
  version: 2.0.0
  contact:
    name: PropOps Technologies Ltd — API Support
    url: https://propops.co.uk/support
    email: support@propops.co.uk
  license:
    name: Proprietary — No Unauthorized Distribution
    url: https://propops.co.uk/legal/api-license
  x-logo:
    url: https://propops.co.uk/assets/logo.png
  x-owner: PropOps Technologies Ltd
  x-copyright: © 2024 PropOps Technologies Ltd. All rights reserved.
servers:
  - url: https://my.propops.app
    description: API Playground
security:
  - BearerAuth: []
tags:
  - name: Jobs
    description: >-
      Create, retrieve, update, and delete jobs; manage associated documents,
      photos, case notes, and more.
  - name: Dashboard
    description: Aggregated metrics and chiplet data powering the main dashboard view.
  - name: Admin
    description: >-
      Administrative operations — branch management, roles, permissions, API
      discovery, and audit logs.
  - name: Users
    description: >-
      Full lifecycle user management — creation, updates, session control, and
      password security.
  - name: Contractors
    description: Contractor records, trade categories, certification, and coverage lookups.
  - name: Agents
    description: Property agent management and branch-level job assignment data.
  - name: Analytics
    description: Branch performance, job health checks, and activity reporting.
  - name: Email
    description: >-
      Transactional email delivery, template management, and address
      verification.
  - name: Financial
    description: Invoice tracking and payment status management.
  - name: Security
    description: >-
      CSRF tokens, session management, blacklisting, and file-integrity
      monitoring.
  - name: System
    description: >-
      Platform health checks, system status, push notifications, and device
      token registration.
  - name: Tenants
    description: Tenant record management, address assignment, and GDPR reporting.
  - name: Reports
    description: Financial and user activity report generation.
  - name: Services
    description: Service pricing configuration.
  - name: Search
    description: Global cross-module search.
  - name: Calendar
    description: Calendar-view job data.
  - name: Notices
    description: System notices displayed on the dashboard and login page.
  - name: Weather
    description: Weather forecast data via Open-Meteo integration.
  - name: SLA
    description: SLA breach detection and response-time tracking.
  - name: WhatsApp
    description: WhatsApp message sending via template system.
  - name: Webhooks
    description: n8n workflow management and triggering.
  - name: GDPR
    description: GDPR consent logging and data-subject rights.
  - name: Authentication
    description: API authentication and token management. SysOps accounts only.
paths:
  /api/jobs/manage:
    get:
      tags:
        - Jobs
      summary: List or retrieve jobs
      description: >
        Retrieve a paginated list of jobs or fetch a single job by UUID.

        Use `action=list` for paginated results or `action=get` with a `uuid`
        parameter

        for a specific job.


        **Required permission:** `api.jobs.manage.list` (list) or
        `api.jobs.manage.get` (get)
      operationId: jobs_manage_get
      parameters:
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum:
              - list
              - get
              - get_file_types
              - get_creators
              - get_job_agents
              - get_job_contractors
              - get_job_clients
              - list_commits
              - get_assignment_notification_state
              - preview_delete
        - name: uuid
          in: query
          description: Job UUID (required for action=get)
          schema:
            type: string
            format: uuid
            example: 550e8400-e29b-41d4-a716-446655440001
        - name: search
          in: query
          schema:
            type: string
            example: boiler service
        - name: status_id
          in: query
          schema:
            type: integer
            example: 1
        - name: priority_id
          in: query
          schema:
            type: integer
            example: 2
        - name: agent_id
          in: query
          schema:
            type: integer
            example: 10
        - name: contractor_id
          in: query
          schema:
            type: integer
            example: 20
        - $ref: '#/components/parameters/PageLimit'
        - $ref: '#/components/parameters/PageOffset'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
                  - type: object
                    properties:
                      data:
                        oneOf:
                          - $ref: '#/components/schemas/Job'
                          - type: array
                            items:
                              $ref: '#/components/schemas/Job'
                      count:
                        type: integer
                        example: 42
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  parameters:
    PageLimit:
      name: limit
      in: query
      description: Maximum number of records to return (default 50, max 200).
      schema:
        type: integer
        default: 50
        minimum: 1
        maximum: 200
    PageOffset:
      name: offset
      in: query
      description: Number of records to skip for pagination.
      schema:
        type: integer
        default: 0
        minimum: 0
  schemas:
    SuccessResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
        message:
          type: string
          example: Operation completed successfully
    Job:
      type: object
      properties:
        ID:
          type: integer
          example: 1001
        uuid:
          type: string
          format: uuid
          example: 550e8400-e29b-41d4-a716-446655440001
        job_ref:
          type: string
          example: JOB-001
        job_title:
          type: string
          example: Boiler Service - Unit 001
        job_description:
          type: string
          example: Annual boiler service required for property unit 001.
        status_id:
          type: integer
          example: 1
        status_name:
          type: string
          example: Open
        priority_id:
          type: integer
          example: 2
        priority_name:
          type: string
          example: Medium
        job_type_id:
          type: integer
          example: 3
        job_type_name:
          type: string
          example: Gas & Heating
        agent_id:
          type: integer
          nullable: true
          example: 10
        agent_name:
          type: string
          nullable: true
          example: Agent_001
        contractor_id:
          type: integer
          nullable: true
          example: 20
        contractor_name:
          type: string
          nullable: true
          example: Contractor_001
        address_id:
          type: integer
          example: 5
        full_address:
          type: string
          example: 1 Example Street, Sample Town, EX1 1AA
        job_total_budget:
          type: number
          format: float
          nullable: true
          example: 250
        contractor_budget:
          type: number
          format: float
          nullable: true
          example: 180
        vat_percentage:
          type: number
          format: float
          nullable: true
          example: 20
        total_amount:
          type: number
          format: float
          nullable: true
          example: 216
        date_works_start_date:
          type: string
          format: date
          nullable: true
          example: '2024-06-01'
        date_works_end_date:
          type: string
          format: date
          nullable: true
          example: '2024-06-02'
        invoice_no:
          type: string
          nullable: true
          example: INV-001
        quote_no:
          type: string
          nullable: true
          example: QT-001
        works_order_ref:
          type: string
          nullable: true
          example: WO-001
        access_details:
          type: string
          nullable: true
          example: Key safe code 1234.
        is_pinned:
          type: boolean
          example: false
        photos_count:
          type: integer
          example: 3
        documents_count:
          type: integer
          example: 1
        created_at:
          type: string
          format: date-time
          example: '2024-01-15T09:30:00Z'
        updated_at:
          type: string
          format: date-time
          example: '2024-06-01T14:00:00Z'
    ErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: string
          example: An error occurred. Please try again.
  responses:
    Unauthorized:
      description: Authentication required or token invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            error: Unauthorized. Valid Bearer token required.
    Forbidden:
      description: Insufficient permissions to perform this action.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            error: You do not have permission to perform this action.
    NotFound:
      description: The requested resource was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            error: Resource not found.
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: SHA-256 session hash
      description: >
        All API requests must include a valid Bearer token in the
        `Authorization` header.

        Tokens are 64-character SHA-256 session hashes issued by the PropOps
        authentication system.


        **Example:**

        ```

        Authorization: Bearer a1b2c3d4e5f6...

        ```

````