type: collection.insomnia.rest/5.0
schema_version: '5.1'
name: EngineeringServices
meta:
  id: wrk_a6324e7ec3794922bbf5f9038194eeb6
  created: 1782301776488
  modified: 1782301776488
  description: Engineering Services API — Platform Admin, Admin, Employee, Client,
    Contractor portals
collection:
- name: Auth
  meta:
    id: fld_8ad5ccc47902484ca7b3f44f7af5d936
    created: 1782301776488
    modified: 1782301776488
    sortKey: -9991000
    description: ''
  children:
  - url: '{{ _.base_url }}/api/login'
    name: Login
    meta:
      id: req_f91ba5cc17a84a30b7668d6745f947ab
      created: 1782301776488
      modified: 1782411417374
      isPrivate: false
      description: Returns access_token (Sanctum). Store as access_token env variable.
      sortKey: -10000000
    method: POST
    headers:
    - name: Content-Type
      value: application/json
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    scripts:
      afterResponse: |-
        const res = await insomnia.response.json();

        if (res.data && res.data.token) {
            insomnia.environment.set("access_token", res.data.token);
        }
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
    body:
      mimeType: application/json
      text: "{\n  \"username\": \"admin\",\n  \"password\": \"password\"\n}"
  - url: '{{ _.base_url }}/api/register'
    name: Register
    meta:
      id: req_58b81515dd584aafbfb349a5f30879c4
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      description: ''
      sortKey: -9999000
    method: POST
    headers:
    - name: Content-Type
      value: application/json
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
    body:
      mimeType: application/json
      text: "{\n  \"first_name\": \"string\",\n  \"surname\": \"string\",\n  \"email\"\
        : \"user@example.com\",\n  \"username\": \"string\",\n  \"password\": \"string\"\
        ,\n  \"password_confirmation\": \"string\",\n  \"contact_no\": \"string\"\
        ,\n  \"post_code\": \"string\"\n}"
  - url: '{{ _.base_url }}/api/user'
    name: Get Authenticated User
    meta:
      id: req_860c37f439924c2093268af2ec9cf1e0
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      description: Returns logged-in user profile + role + permissions.
      sortKey: -9998000
    method: GET
    headers:
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
  - url: '{{ _.base_url }}/api/profile'
    name: Get Profile
    meta:
      id: req_6c21cd4668d748d699c384ec02716882
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      description: ''
      sortKey: -9997000
    method: GET
    headers:
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
  - url: '{{ _.base_url }}/api/profile'
    name: Update Profile
    meta:
      id: req_2f0cf4a5dc6943899b6e3c8b10c63b64
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      description: ''
      sortKey: -9996000
    method: POST
    headers:
    - name: Content-Type
      value: application/json
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
    body:
      mimeType: application/json
      text: "{\n  \"first_name\": \"string\",\n  \"surname\": \"string\",\n  \"contact_no\"\
        : \"string\",\n  \"post_code\": \"string\"\n}"
  - url: '{{ _.base_url }}/api/send-password-reset-code'
    name: Send Password Reset Code
    meta:
      id: req_69bbe6e55c324512b85f28840b4d1478
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      description: ''
      sortKey: -9995000
    method: POST
    headers:
    - name: Content-Type
      value: application/json
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
    body:
      mimeType: application/json
      text: "{\n  \"email\": \"user@example.com\"\n}"
  - url: '{{ _.base_url }}/api/verify-password-reset-code'
    name: Verify Password Reset Code
    meta:
      id: req_1cd2a2c705f1436f9a013de7726457a2
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      description: ''
      sortKey: -9994000
    method: POST
    headers:
    - name: Content-Type
      value: application/json
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
    body:
      mimeType: application/json
      text: "{\n  \"email\": \"user@example.com\",\n  \"code\": \"string\"\n}"
  - url: '{{ _.base_url }}/api/submit-reset-password'
    name: Submit Reset Password
    meta:
      id: req_f009a9821e9241a39ca2d8f7a46fa332
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      description: ''
      sortKey: -9993000
    method: POST
    headers:
    - name: Content-Type
      value: application/json
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
    body:
      mimeType: application/json
      text: "{\n  \"email\": \"user@example.com\",\n  \"code\": \"string\",\n  \"\
        password\": \"string\",\n  \"password_confirmation\": \"string\"\n}"
  - url: '{{ _.base_url }}/api/logout'
    name: Logout
    meta:
      id: req_2eaadb603c22438fb299244eae977e5f
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      description: ''
      sortKey: -9992000
    method: POST
    headers:
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
- name: Platform Admin
  meta:
    id: fld_4d65d80441f844fc9ddcd5f494eaa87b
    created: 1782301776488
    modified: 1782301776488
    sortKey: -9969000
    description: ''
  children:
  - name: Dashboard
    meta:
      id: fld_68396a2d667148e4bd2a8fc66e4384a8
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9989000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/platform/dashboard'
      name: Get Dashboard
      meta:
        id: req_7b474fc79cf24860a73a695a692b16f6
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Tenant counts, active/suspended counts and plan breakdown summary.
        sortKey: -9990000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Tenants Directory
    meta:
      id: fld_d1fd668b6a384a12916ddae78f071df2
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9983000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/platform/tenants'
      name: List Tenants
      meta:
        id: req_8aaeacbc5b194de6a56e8d2abb4eb79f
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Filters: subscription_plan_id (int), is_active (true|false),
          subscription_status (active|trial|suspended|cancelled).'
        sortKey: -9988000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
      - name: subscription_plan_id
        value: ''
        description: int — filter by plan ID
        disabled: false
      - name: is_active
        value: ''
        description: true|false
        disabled: false
      - name: subscription_status
        value: ''
        description: active|trial|suspended|cancelled
        disabled: false
    - url: '{{ _.base_url }}/api/platform/tenants/1'
      name: Get Tenant
      meta:
        id: req_32ee8d3c58004ffb871a92721409fdc6
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Returns single tenant with subscriptionPlan relation.
        sortKey: -9987000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/platform/tenants'
      name: Create Tenant
      meta:
        id: req_030f60f6407847a980a28a4aef9364af
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: create_admin_user=true auto-generates admin credentials.
        sortKey: -9986000
      method: POST
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"business_name\": \"string\",\n  \"owner_name\": \"string\",\n\
          \  \"contact_email\": \"user@example.com\",\n  \"contact_phone\": \"string\"\
          ,\n  \"subscription_plan_id\": 1,\n  \"create_admin_user\": true\n}"
    - url: '{{ _.base_url }}/api/platform/tenants/1'
      name: Update Tenant
      meta:
        id: req_b82dad670e8541008c78eba506456fa6
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9985000
      method: PUT
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"business_name\": \"string\",\n  \"owner_name\": \"string\",\n\
          \  \"contact_email\": \"user@example.com\",\n  \"contact_phone\": \"string\"\
          ,\n  \"subscription_plan_id\": 1,\n  \"is_active\": true\n}"
    - url: '{{ _.base_url }}/api/platform/tenants/1'
      name: Delete Tenant
      meta:
        id: req_7f28146865444377bda179df149ae22c
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9984000
      method: DELETE
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Pricing Tiers
    meta:
      id: fld_b74f7f41a1ba44cb839f5d537bf298d1
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9977000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/platform/subscription-plans'
      name: List Subscription Plans
      meta:
        id: req_49b05b6b6ad3464889fe769e775a499e
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Filter: is_active (true|false).'
        sortKey: -9982000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
      - name: is_active
        value: ''
        description: true|false
        disabled: false
    - url: '{{ _.base_url }}/api/platform/subscription-plans/1'
      name: Get Subscription Plan
      meta:
        id: req_89d11ef39c9d472bbe7a069168a337b1
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9981000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/platform/subscription-plans'
      name: Create Subscription Plan
      meta:
        id: req_b3171de215bb47468f99a7aa767ba48f
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'max_projects/max_locations/max_employees: -1 = unlimited.'
        sortKey: -9980000
      method: POST
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"name\": \"string\",\n  \"slug\": \"string\",\n  \"monthly_price\"\
          : 0,\n  \"max_projects\": -1,\n  \"max_locations\": -1,\n  \"max_employees\"\
          : -1,\n  \"has_client_portal\": true,\n  \"is_active\": true\n}"
    - url: '{{ _.base_url }}/api/platform/subscription-plans/1'
      name: Update Subscription Plan
      meta:
        id: req_d820f98eebd74caab3557d713c52e066
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9979000
      method: PUT
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"name\": \"string\",\n  \"slug\": \"string\",\n  \"monthly_price\"\
          : 0,\n  \"max_projects\": -1,\n  \"max_locations\": -1,\n  \"max_employees\"\
          : -1,\n  \"has_client_portal\": true,\n  \"is_active\": true\n}"
    - url: '{{ _.base_url }}/api/platform/subscription-plans/1'
      name: Delete Subscription Plan
      meta:
        id: req_b459ca8fb54e4227b0c74c3f54144c4f
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Cannot delete a plan that has active tenants assigned.
        sortKey: -9978000
      method: DELETE
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Notifications
    meta:
      id: fld_8eac8d592fd84f218d5a3cc0cd6f9265
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9971000
      description: Bell dropdown — recent unread only (max 20, no pagination)
    children:
    - url: '{{ _.base_url }}/api/platform/notifications'
      name: Get Notifications
      meta:
        id: req_70f27c17280e4644940289449fc6bae9
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Returns up to 20 most recent unread platform audit events. No pagination. Used for the bell dropdown.'
        sortKey: -9976000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/platform/notifications/read-all'
      name: Mark All Read
      meta:
        id: req_44baa822243e4579b209dec57c1fae93
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Marks all platform audit events as read.'
        sortKey: -9975000
      method: PATCH
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Audit Logs
    meta:
      id: fld_664585951b2e4e26a7b776db6d6cc4e7
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9970000
      description: Full CRUD for platform audit event logs with filters
    children:
    - url: '{{ _.base_url }}/api/platform/audit-logs'
      name: List Audit Logs
      meta:
        id: req_audit_list
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Paginated list of platform audit events. Supports filters: category, severity, entity_type, is_read, search.'
        sortKey: -9970500
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: 'Search title, body, event_code, category'
        disabled: false
      - name: category
        value: ''
        description: 'e.g. tenant_created, plan_updated'
        disabled: false
      - name: severity
        value: ''
        description: 'e.g. info, warning, action_taken'
        disabled: false
      - name: entity_type
        value: ''
        description: 'e.g. business, subscription_plan'
        disabled: false
      - name: is_read
        value: ''
        description: 'true|false'
        disabled: false
    - url: '{{ _.base_url }}/api/platform/audit-logs/1'
      name: Get Audit Log
      meta:
        id: req_audit_show
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Returns a single audit event by id.'
        sortKey: -9970400
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/platform/audit-logs/1/read'
      name: Mark Read
      meta:
        id: req_audit_mark_read
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Marks a single audit event as read by id.'
        sortKey: -9970300
      method: PATCH
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/platform/audit-logs/read-all'
      name: Mark All Read
      meta:
        id: req_audit_mark_all_read
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Marks all unread audit events as read.'
        sortKey: -9970200
      method: PATCH
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/platform/audit-logs/1'
      name: Delete Audit Log
      meta:
        id: req_audit_delete
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Deletes an audit event by id.'
        sortKey: -9970100
      method: DELETE
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Filters
    meta:
      id: fld_platform_filters
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9968000
      description: Platform lookups
    children:
    - url: '{{ _.base_url }}/api/common/plan-tiers'
      name: Plan Tiers [PLATFORM]
      meta:
        id: req_ea4a994cc6c94eeab074394b66d0aa5a
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Get active plan tiers lookup list.'
        sortKey: -9809810
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/common/subscription-plans'
      name: Subscription Plans [PLATFORM]
      meta:
        id: req_fc3ecef257b64164b6006bb5362b3b32
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Get active subscription plans lookup list.'
        sortKey: -9809800
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
- name: Admin
  meta:
    id: fld_45665c8d26014de480d0d4357efc4193
    created: 1782301776488
    modified: 1782301776488
    sortKey: -9872000
    description: ''
  children:
  - name: Dashboard
    meta:
      id: fld_18a78eae440449e78fa252f7cf1413d5
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9967000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/admin/dashboard'
      name: Get Dashboard
      meta:
        id: req_d5776f651d744c898a6461770df9c05f
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Admin portal summary — project counts, staff, recent activity.
        sortKey: -9968000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Projects
    meta:
      id: fld_eb39e5f440a342b0b4c18e0efabfe919
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9953000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/admin/projects'
      name: List Projects
      meta:
        id: req_131f9155fd3b45e783179cbae0881c6f
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Filters: status (active|completed|on_hold|cancelled), location_id
          (int), client_user_id (int).'
        sortKey: -9966000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
      - name: status
        value: ''
        description: active|completed|on_hold|cancelled
        disabled: false
      - name: location_id
        value: ''
        description: int
        disabled: false
      - name: client_user_id
        value: ''
        description: int
        disabled: false
    - url: '{{ _.base_url }}/api/admin/projects/1'
      name: Get Project
      meta:
        id: req_847f4695b1944c3c8b2cd15f617de949
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9965000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/admin/projects'
      name: Create Project
      meta:
        id: req_efc38fe3dd454d3b985ca462b6768c9a
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9964000
      method: POST
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"name\": \"string\",\n  \"description\": \"string\",\n  \"location_id\"\
          : 1,\n  \"client_user_id\": 1,\n  \"status\": \"active\",\n  \"contract_value\"\
          : 0,\n  \"start_date\": \"2025-01-01\",\n  \"expected_end_date\": \"2025-12-31\"\
          ,\n  \"current_phase_key\": \"string\",\n  \"address\": \"string\"\n}"
    - url: '{{ _.base_url }}/api/admin/projects/1'
      name: Update Project
      meta:
        id: req_3af191f21ae54aae99878122e043a2ad
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9963000
      method: PUT
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"name\": \"string\",\n  \"description\": \"string\",\n  \"location_id\"\
          : 1,\n  \"client_user_id\": 1,\n  \"status\": \"active\",\n  \"contract_value\"\
          : 0,\n  \"start_date\": \"2025-01-01\",\n  \"expected_end_date\": \"2025-12-31\"\
          ,\n  \"actual_end_date\": \"2025-12-31\",\n  \"current_phase_key\": \"string\"\
          ,\n  \"address\": \"string\"\n}"
    - url: '{{ _.base_url }}/api/admin/projects/1'
      name: Delete Project
      meta:
        id: req_9ed79260daec4655925a97f412cb0d19
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9962000
      method: DELETE
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - name: Project Detail
      meta:
        id: fld_9579c82540374048a1f81307b97836da
        created: 1782301776488
        modified: 1782301776488
        sortKey: -9954000
        description: ''
      children:
      - url: '{{ _.base_url }}/api/admin/projects/1/phases'
        name: Get Project Phases
        meta:
          id: req_a2d15a04d65943c98ca579ee3dafd4dc
          created: 1782301776488
          modified: 1782301776488
          isPrivate: false
          description: ''
          sortKey: -9961000
        method: GET
        headers:
        - name: User-Agent
          value: insomnia/10.3.1
        authentication:
          type: bearer
          token: '{{ _.access_token }}'
        settings:
          renderRequestBody: true
          encodeUrl: true
          followRedirects: global
          cookies:
            send: true
            store: true
          rebuildPath: true
        parameters:
        - name: per_page
          value: '10'
          description: ''
          disabled: false
        - name: page
          value: '1'
          description: ''
          disabled: false
        - name: search
          value: ''
          description: ''
          disabled: false
      - url: '{{ _.base_url }}/api/admin/projects/1/proposals'
        name: Get Project Proposals
        meta:
          id: req_f40a64174bc24ef693f7ac99782f98ce
          created: 1782301776488
          modified: 1782301776488
          isPrivate: false
          description: ''
          sortKey: -9960000
        method: GET
        headers:
        - name: User-Agent
          value: insomnia/10.3.1
        authentication:
          type: bearer
          token: '{{ _.access_token }}'
        settings:
          renderRequestBody: true
          encodeUrl: true
          followRedirects: global
          cookies:
            send: true
            store: true
          rebuildPath: true
        parameters:
        - name: per_page
          value: '10'
          description: ''
          disabled: false
        - name: page
          value: '1'
          description: ''
          disabled: false
        - name: search
          value: ''
          description: ''
          disabled: false
      - url: '{{ _.base_url }}/api/admin/projects/1/vouchers'
        name: Get Project Vouchers
        meta:
          id: req_fd88beabb0344ef9a30ff486735db402
          created: 1782301776488
          modified: 1782301776488
          isPrivate: false
          description: ''
          sortKey: -9959000
        method: GET
        headers:
        - name: User-Agent
          value: insomnia/10.3.1
        authentication:
          type: bearer
          token: '{{ _.access_token }}'
        settings:
          renderRequestBody: true
          encodeUrl: true
          followRedirects: global
          cookies:
            send: true
            store: true
          rebuildPath: true
        parameters:
        - name: per_page
          value: '10'
          description: ''
          disabled: false
        - name: page
          value: '1'
          description: ''
          disabled: false
        - name: search
          value: ''
          description: ''
          disabled: false
      - url: '{{ _.base_url }}/api/admin/projects/1/ledgers'
        name: Get Project Ledgers
        meta:
          id: req_fd3c1aeeee9047ff8cd12073ceb69c6a
          created: 1782301776488
          modified: 1782301776488
          isPrivate: false
          description: ''
          sortKey: -9958000
        method: GET
        headers:
        - name: User-Agent
          value: insomnia/10.3.1
        authentication:
          type: bearer
          token: '{{ _.access_token }}'
        settings:
          renderRequestBody: true
          encodeUrl: true
          followRedirects: global
          cookies:
            send: true
            store: true
          rebuildPath: true
        parameters:
        - name: per_page
          value: '10'
          description: ''
          disabled: false
        - name: page
          value: '1'
          description: ''
          disabled: false
        - name: search
          value: ''
          description: ''
          disabled: false
      - url: '{{ _.base_url }}/api/admin/projects/1/revisions'
        name: Get Project Revisions
        meta:
          id: req_1dd778ab4f4045e1a31f3e81514a8323
          created: 1782301776488
          modified: 1782301776488
          isPrivate: false
          description: ''
          sortKey: -9957000
        method: GET
        headers:
        - name: User-Agent
          value: insomnia/10.3.1
        authentication:
          type: bearer
          token: '{{ _.access_token }}'
        settings:
          renderRequestBody: true
          encodeUrl: true
          followRedirects: global
          cookies:
            send: true
            store: true
          rebuildPath: true
        parameters:
        - name: per_page
          value: '10'
          description: ''
          disabled: false
        - name: page
          value: '1'
          description: ''
          disabled: false
        - name: search
          value: ''
          description: ''
          disabled: false
      - url: '{{ _.base_url }}/api/admin/projects/1/materials'
        name: Get Project Materials
        meta:
          id: req_f69ba703e32d459fa759111791dc22c6
          created: 1782301776488
          modified: 1782301776488
          isPrivate: false
          description: ''
          sortKey: -9956000
        method: GET
        headers:
        - name: User-Agent
          value: insomnia/10.3.1
        authentication:
          type: bearer
          token: '{{ _.access_token }}'
        settings:
          renderRequestBody: true
          encodeUrl: true
          followRedirects: global
          cookies:
            send: true
            store: true
          rebuildPath: true
        parameters:
        - name: per_page
          value: '10'
          description: ''
          disabled: false
        - name: page
          value: '1'
          description: ''
          disabled: false
        - name: search
          value: ''
          description: ''
          disabled: false
      - url: '{{ _.base_url }}/api/admin/projects/1/logs'
        name: Get Project Logs
        meta:
          id: req_7ff9527b8058456d96cd8331b3ceda96
          created: 1782301776488
          modified: 1782301776488
          isPrivate: false
          description: ''
          sortKey: -9955000
        method: GET
        headers:
        - name: User-Agent
          value: insomnia/10.3.1
        authentication:
          type: bearer
          token: '{{ _.access_token }}'
        settings:
          renderRequestBody: true
          encodeUrl: true
          followRedirects: global
          cookies:
            send: true
            store: true
          rebuildPath: true
        parameters:
        - name: per_page
          value: '10'
          description: ''
          disabled: false
        - name: page
          value: '1'
          description: ''
          disabled: false
        - name: search
          value: ''
          description: ''
          disabled: false
  - name: Proposals
    meta:
      id: fld_a3b1c8e2f5d64a1c9e7b0d2f6a4c8e1b
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9952500
      description: ''
    children:
    - url: '{{ _.base_url }}/api/admin/proposals'
      name: List Proposals
      meta:
        id: req_b4c2d9f3a6e75b2d0f8c1e3a7b5d9f2c
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Paginated list, business-scoped. project_name is resolved via
          the project relation (never just project_id). Invalid status/project_id
          filter returns success with empty data, not an error.'
        sortKey: -9966500
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: Optional. Default 20. Pass -1 for unpaginated.
        disabled: false
      - name: page
        value: '1'
        description: Optional. Default 1.
        disabled: false
      - name: search
        value: ''
        description: Optional. Matches title OR the linked project's name (case-insensitive
          substring).
        disabled: false
      - name: status
        value: ''
        description: 'Optional. Exact match on one of: draft, scheduled, in_review,
          revision_requested, accepted, deposit_paid, converted (see GET /api/common/proposal-stages).'
        disabled: false
      - name: project_id
        value: ''
        description: Optional. Restrict to proposals on one project. Must belong
          to the authenticated business.
        disabled: false
    - url: '{{ _.base_url }}/api/admin/proposals/1'
      name: Get Proposal
      meta:
        id: req_c5d3e0a4b7f86c3e1a9d2f4b8c6e0a3d
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Path param id (required) — proposal ID, must belong to the
          authenticated business or 404.
        sortKey: -9966400
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/admin/proposals'
      name: Create Proposal
      meta:
        id: req_d6e4f1b5c8097d4f2b0e3a5c9d7f1b4e
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Body fields — project_id (required, int, must belong to business);
          title (required, string max 255); status (optional, one of draft|scheduled|in_review|revision_requested|accepted|deposit_paid|converted,
          see GET /api/common/proposal-stages, defaults to draft); quoted_amount
          (optional, numeric >=0); current_round (optional, int >=0, bump manually
          on each new negotiation round).'
        sortKey: -9966300
      method: POST
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"project_id\": 1,\n  \"title\": \"string\",\n  \"status\": \"\
          draft\",\n  \"quoted_amount\": 0,\n  \"current_round\": 1\n}"
    - url: '{{ _.base_url }}/api/admin/proposals/1'
      name: Update Proposal
      meta:
        id: req_e7f5a2c6d9108e5a3c1f4b6d0e8a2c5f
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Path param id (required). Body fields all optional — project_id
          (int, must belong to business); title (string max 255); status (one of
          the 7 canonical proposal_stages values); quoted_amount (numeric >=0);
          current_round (int >=0).'
        sortKey: -9966200
      method: PUT
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"status\": \"accepted\",\n  \"quoted_amount\": 0,\n  \"current_round\"\
          : 1\n}"
    - url: '{{ _.base_url }}/api/admin/proposals/1'
      name: Delete Proposal
      meta:
        id: req_f8a6b3d70219f6b4d2a5c7e1f9b3d6a0
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Path param id (required) — proposal ID. Does not cascade-delete
          ProposalRound history.
        sortKey: -9966100
      method: DELETE
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Proposal Rounds
    meta:
      id: fld_a9b7c4e1f3d82a9b7c5e0f4d8b2a6c9e
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9952400
      description: ''
    children:
    - url: '{{ _.base_url }}/api/admin/proposal-rounds'
      name: List Proposal Rounds
      meta:
        id: req_b0c8d5f20431b0c8e6f1a3d9c7e2f5b1
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Paginated list, business-scoped. proposal_title is resolved
          via the proposal relation (never just proposal_id). Filter by proposal_id
          to build a single proposal''s round-history view.'
        sortKey: -9966050
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: Optional. Default 20. Pass -1 for unpaginated.
        disabled: false
      - name: page
        value: '1'
        description: Optional. Default 1.
        disabled: false
      - name: search
        value: ''
        description: Optional. Matches notes OR the parent proposal's title (case-insensitive
          substring).
        disabled: false
      - name: proposal_id
        value: ''
        description: Optional. Restrict to rounds on one proposal — this is how
          the round-history table on Proposal Detail is built. No existence check;
          a non-matching id yields zero rows.
        disabled: false
      - name: status
        value: ''
        description: 'Optional. Exact match on one of: pending, accepted, superseded.'
        disabled: false
    - url: '{{ _.base_url }}/api/admin/proposal-rounds/1'
      name: Get Proposal Round
      meta:
        id: req_c1d9e6a30542c1d9f7a2b4e0d8f3a6c2
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Path param id (required) — proposal round ID, must belong to
          the authenticated business or 404.
        sortKey: -9966040
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/admin/proposal-rounds'
      name: Create Proposal Round
      meta:
        id: req_d2e0f7b41653d2e0a8b3c5f1e9a4b7d3
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Body fields — proposal_id (required, int, no existence check
          — same light-validation convention as Voucher.subcontractor_id); round_number
          (required, int >=1, should match the parent proposal''s current_round
          once live); amount (optional, numeric >=0); status (optional, one of pending|accepted|superseded,
          defaults to pending); notes (optional, free text); submitted_at (optional,
          date).'
        sortKey: -9966030
      method: POST
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"proposal_id\": 1,\n  \"round_number\": 1,\n  \"amount\": 0,\n\
          \  \"status\": \"pending\",\n  \"notes\": \"string\"\n}"
    - url: '{{ _.base_url }}/api/admin/proposal-rounds/1'
      name: Update Proposal Round
      meta:
        id: req_e3f1a8c52764e3f1b9c4d6a2f0b5c8e4
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Path param id (required). Body fields all optional — proposal_id
          (int); round_number (int >=1); amount (numeric >=0); status (one of pending|accepted|superseded
          — typical use is flipping to accepted or superseded); notes (free text);
          submitted_at (date).'
        sortKey: -9966020
      method: PUT
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"status\": \"accepted\",\n  \"amount\": 0,\n  \"notes\": \"\
          string\"\n}"
    - url: '{{ _.base_url }}/api/admin/proposal-rounds/1'
      name: Delete Proposal Round
      meta:
        id: req_f4a2b9d63875f4a2c0d5e7b3a1c6d9f5
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Path param id (required) — proposal round ID.
        sortKey: -9966010
      method: DELETE
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Locations
    meta:
      id: fld_0e3855148ff1465aa06f3a3e407b7255
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9947000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/admin/locations'
      name: List Locations
      meta:
        id: req_c5cdff63818d4662953f7e2d2164a610
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Filters: is_active (true|false).'
        sortKey: -9952000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
    - url: '{{ _.base_url }}/api/admin/locations/1'
      name: Get Location
      meta:
        id: req_451639079d2448519b2ba9ce1f7de5fb
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9951000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/admin/locations'
      name: Create Location
      meta:
        id: req_86991b6326e84d6baade060181d9e6fc
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9950000
      method: POST
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"name\": \"string\",\n  \"address\": \"string\",\n  \"contact_person\"\
          : \"string\",\n  \"contact_phone\": \"string\",\n  \"is_active\": true\n\
          }"
    - url: '{{ _.base_url }}/api/admin/locations/1'
      name: Update Location
      meta:
        id: req_33a4edda8e2546cbab5fadcc75185078
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9949000
      method: PUT
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"name\": \"string\",\n  \"address\": \"string\",\n  \"contact_person\"\
          : \"string\",\n  \"contact_phone\": \"string\",\n  \"is_active\": true\n\
          }"
    - url: '{{ _.base_url }}/api/admin/locations/1'
      name: Delete Location
      meta:
        id: req_4ff2cb219ce74ed49474f37db556c675
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9948000
      method: DELETE
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Calendar
    meta:
      id: fld_77358425864747438d555085fae4d79d
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9941000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/admin/calendar'
      name: List Calendar
      meta:
        id: req_bf2ab7bdac5b4c91b51cac7253f5ef5d
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9946000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
    - url: '{{ _.base_url }}/api/admin/calendar/1'
      name: Get Calendar Entry
      meta:
        id: req_afeb98726257497ea3daae299ba09ad1
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9945000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/admin/calendar'
      name: Create Calendar Entry
      meta:
        id: req_3094c9cddc894fd590cf5557cfc02adf
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9944000
      method: POST
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"title\": \"string\",\n  \"description\": \"string\",\n  \"start_date\"\
          : \"2025-01-01\",\n  \"end_date\": \"2025-01-01\",\n  \"project_id\": 1,\n\
          \  \"type\": \"string\"\n}"
    - url: '{{ _.base_url }}/api/admin/calendar/1'
      name: Update Calendar Entry
      meta:
        id: req_8ecfe98b8f5d4f45a62b0daf7f6edab6
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9943000
      method: PUT
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"title\": \"string\",\n  \"description\": \"string\",\n  \"start_date\"\
          : \"2025-01-01\",\n  \"end_date\": \"2025-01-01\",\n  \"project_id\": 1,\n\
          \  \"type\": \"string\"\n}"
    - url: '{{ _.base_url }}/api/admin/calendar/1'
      name: Delete Calendar Entry
      meta:
        id: req_bc7bea29ea284fd78a0a2567b49156ad
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9942000
      method: DELETE
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Staff & Roles
    meta:
      id: fld_64059e4a038448f0949178a9c7bd8986
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9929000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/admin/staff'
      name: List Staff
      meta:
        id: req_ab4c18dcb3ea4dbeab704dbd1e3672ba
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Filters: location_id (int), status (active|inactive).'
        sortKey: -9940000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
      - name: location_id
        value: ''
        description: int
        disabled: false
      - name: status
        value: ''
        description: active|inactive
        disabled: false
    - url: '{{ _.base_url }}/api/admin/staff/1'
      name: Get Staff Member
      meta:
        id: req_37a506967f0044159f149e92e4f72ba8
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9939000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/admin/staff'
      name: Create Staff Member
      meta:
        id: req_5001f7e89eae44af8f502377dcc8e114
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9938000
      method: POST
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"user_id\": 1,\n  \"location_id\": 1,\n  \"trade_type_id\": 1,\n  \"display_name\": \"John Doe\",\n  \"role_id\": 1,\n  \"specialties\": [\"Excavator\", \"Masonry\"],\n  \"job_title\": \"string\"\
          ,\n  \"department\": \"string\",\n  \"status\": \"active\"\n}"
    - url: '{{ _.base_url }}/api/admin/staff/1'
      name: Update Staff Member
      meta:
        id: req_c36fd0e5fd34403891c46a7563c30128
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9937000
      method: PUT
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"user_id\": 1,\n  \"location_id\": 1,\n  \"trade_type_id\": 1,\n  \"display_name\": \"John Doe\",\n  \"role_id\": 1,\n  \"specialties\": [\"Excavator\", \"Masonry\"],\n  \"job_title\": \"string\"\
          ,\n  \"department\": \"string\",\n  \"status\": \"active\"\n}"
    - url: '{{ _.base_url }}/api/admin/staff/1'
      name: Delete Staff Member
      meta:
        id: req_7d251a6227934defb7d13738395b48bb
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9936000
      method: DELETE
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - name: Roles
      meta:
        id: fld_11c2659ab1614f3787f03a90c4daf7c5
        created: 1782301776488
        modified: 1782301776488
        sortKey: -9930000
        description: ''
      children:
      - url: '{{ _.base_url }}/api/admin/roles'
        name: List Roles
        meta:
          id: req_d55307787f504d8391badb4a3a3504a9
          created: 1782301776488
          modified: 1782301776488
          isPrivate: false
          description: ''
          sortKey: -9935000
        method: GET
        headers:
        - name: User-Agent
          value: insomnia/10.3.1
        authentication:
          type: bearer
          token: '{{ _.access_token }}'
        settings:
          renderRequestBody: true
          encodeUrl: true
          followRedirects: global
          cookies:
            send: true
            store: true
          rebuildPath: true
        parameters:
        - name: per_page
          value: '10'
          description: ''
          disabled: false
        - name: page
          value: '1'
          description: ''
          disabled: false
        - name: search
          value: ''
          description: ''
          disabled: false
      - url: '{{ _.base_url }}/api/admin/permissions'
        name: Get Permissions
        meta:
          id: req_94ea5f362c1041fc97752e062fd47633
          created: 1782301776488
          modified: 1782301776488
          isPrivate: false
          description: Returns all available permission keys.
          sortKey: -9934000
        method: GET
        headers:
        - name: User-Agent
          value: insomnia/10.3.1
        authentication:
          type: bearer
          token: '{{ _.access_token }}'
        settings:
          renderRequestBody: true
          encodeUrl: true
          followRedirects: global
          cookies:
            send: true
            store: true
          rebuildPath: true
      - url: '{{ _.base_url }}/api/admin/roles'
        name: Create Role
        meta:
          id: req_ab09667c8c9c438ebf00055991cb5600
          created: 1782301776488
          modified: 1782301776488
          isPrivate: false
          description: ''
          sortKey: -9933000
        method: POST
        headers:
        - name: Content-Type
          value: application/json
        - name: User-Agent
          value: insomnia/10.3.1
        authentication:
          type: bearer
          token: '{{ _.access_token }}'
        settings:
          renderRequestBody: true
          encodeUrl: true
          followRedirects: global
          cookies:
            send: true
            store: true
          rebuildPath: true
        body:
          mimeType: application/json
          text: "{\n  \"name\": \"string\"\n}"
      - url: '{{ _.base_url }}/api/admin/roles/1/permissions'
        name: Sync Role Permissions
        meta:
          id: req_92806c9e9c294a6d9026cd84aec00155
          created: 1782301776488
          modified: 1782301776488
          isPrivate: false
          description: ''
          sortKey: -9932000
        method: PUT
        headers:
        - name: Content-Type
          value: application/json
        - name: User-Agent
          value: insomnia/10.3.1
        authentication:
          type: bearer
          token: '{{ _.access_token }}'
        settings:
          renderRequestBody: true
          encodeUrl: true
          followRedirects: global
          cookies:
            send: true
            store: true
          rebuildPath: true
        body:
          mimeType: application/json
          text: "{\n  \"permissions\": [\n    \"projects.view\",\n    \"projects.manage\"\
            \n  ]\n}"
      - url: '{{ _.base_url }}/api/admin/roles/1'
        name: Delete Role
        meta:
          id: req_141c185cc46343529248e5ed1bea39ea
          created: 1782301776488
          modified: 1782301776488
          isPrivate: false
          description: ''
          sortKey: -9931000
        method: DELETE
        headers:
        - name: User-Agent
          value: insomnia/10.3.1
        authentication:
          type: bearer
          token: '{{ _.access_token }}'
        settings:
          renderRequestBody: true
          encodeUrl: true
          followRedirects: global
          cookies:
            send: true
            store: true
          rebuildPath: true
  - name: Subcontractors
    meta:
      id: fld_76b09338e6dd44e38193c2352a98722c
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9923000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/admin/subcontractors'
      name: List Subcontractors
      meta:
        id: req_df0e2496548e4171b12b6f08fa38cb49
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Filters: trade_type (string), status (active|inactive).'
        sortKey: -9928000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
      - name: trade_type
        value: ''
        description: string
        disabled: false
      - name: status
        value: ''
        description: active|inactive
        disabled: false
    - url: '{{ _.base_url }}/api/admin/subcontractors/1'
      name: Get Subcontractor
      meta:
        id: req_5889f812e63449599a6268fcbc63115c
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9927000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/admin/subcontractors'
      name: Create Subcontractor
      meta:
        id: req_cb15c9e70cc74ddd941d5812249f85ba
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9926000
      method: POST
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"user_id\": 1,\n  \"subcontractor_category_id\": 1,\n  \"trade_type_id\": 1,\n  \"company_name\": \"string\",\n  \"trade_type\"\
          : \"string\",\n  \"contact_email\": \"contact@example.com\",\n  \"contact_phone\"\
          : \"string\",\n  \"status\": \"active\"\n}"
    - url: '{{ _.base_url }}/api/admin/subcontractors/1'
      name: Update Subcontractor
      meta:
        id: req_7637ef9aa955422aa162efc56c5e4606
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9925000
      method: PUT
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"subcontractor_category_id\": 1,\n  \"trade_type_id\": 1,\n  \"company_name\": \"string\",\n  \"trade_type\": \"string\",\n\
          \  \"contact_email\": \"contact@example.com\",\n  \"contact_phone\": \"\
          string\",\n  \"status\": \"active\"\n}"
    - url: '{{ _.base_url }}/api/admin/subcontractors/1'
      name: Delete Subcontractor
      meta:
        id: req_51c1500f739e499a89f49e3d2707ec97
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9924000
      method: DELETE
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Website Builder
    meta:
      id: fld_6cc017d56c8f478ba50fffaa3a5d9453
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9921000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/admin/landing'
      name: Get Landing Page
      meta:
        id: req_e967ca34d50c4428a2fa8bf6f39f9708
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Returns current landing page content for the website builder.
        sortKey: -9922000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Signature Setup
    meta:
      id: fld_7ed57d54ba864f6bbf5ec239715c4dd8
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9918000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/admin/signature-settings'
      name: Get Signature Settings
      meta:
        id: req_9dc0c4a02f384b1b9ff831b1895f31c1
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9920000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/admin/signature-settings'
      name: Update Signature Settings
      meta:
        id: req_1b80bf81fff34058bbc6d47cdee9ac77
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9919000
      method: PUT
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"signature_image_path\": \"string\",\n  \"signer_name\": \"string\"\
          ,\n  \"signer_title\": \"string\"\n}"
  - name: Notifications
    meta:
      id: fld_0703e5d12d73454db8a6230743a0b4c4
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9912000
      description: Bell dropdown — recent unread only (admin + staff)
    children:
    - url: '{{ _.base_url }}/api/admin/notifications'
      name: Get Notifications
      meta:
        id: req_048aaa2dea1e47b8b94d5a32d9141550
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Returns up to 20 most recent unread notifications for the authenticated admin/staff user. No pagination.
        sortKey: -9917000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/admin/notifications/read-all'
      name: Mark All Read
      meta:
        id: req_f31656d68fd64bc2a08ac46197c4525f
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Marks all unread notifications as read for the authenticated user.
        sortKey: -9916000
      method: PATCH
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Audit Logs
    meta:
      id: fld_admin_audit_logs
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9911000
      description: Full audit log history with filters — admin only (staff blocked)
    children:
    - url: '{{ _.base_url }}/api/admin/audit-logs'
      name: List Audit Logs
      meta:
        id: req_admin_audit_list
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Paginated list of all notifications for the admin user. Supports filter by type, is_read, and search.
        sortKey: -9911500
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '15'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: 'Search title, body, type'
        disabled: true
      - name: type
        value: ''
        description: 'e.g. project_created, phase_updated'
        disabled: true
      - name: is_read
        value: 'false'
        description: '0 or 1 / true or false'
        disabled: true
    - url: '{{ _.base_url }}/api/admin/audit-logs/1'
      name: Get Audit Log
      meta:
        id: req_admin_audit_show
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Returns a single notification/audit entry by id.
        sortKey: -9911400
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/admin/audit-logs/read-all'
      name: Mark All Read
      meta:
        id: req_admin_audit_mark_all_read
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Marks all audit log entries as read.
        sortKey: -9911300
      method: PATCH
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/admin/audit-logs/1/read'
      name: Mark Read
      meta:
        id: req_admin_audit_mark_read
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Marks a single audit log entry as read by id.
        sortKey: -9911200
      method: PATCH
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/admin/audit-logs/1'
      name: Delete Audit Log
      meta:
        id: req_admin_audit_delete
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Hard-deletes an audit log entry by id.
        sortKey: -9911100
      method: DELETE
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Phase Library
    meta:
      id: fld_41d67bd7e1b34e5cb695bdf9dedb19e5
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9906000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/admin/phase-library'
      name: List Phase Library
      meta:
        id: req_f8b59c82d0b14a2c87217a6aa0c6f2ea
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9911000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
    - url: '{{ _.base_url }}/api/admin/phase-library/1'
      name: Get Phase Librar
      meta:
        id: req_61cc7c3d2ff44c1487d3fff94130cc09
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9910000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/admin/phase-library'
      name: Create Phase Librar
      meta:
        id: req_edc385d414164307ad3b5d28ff59dbb8
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9909000
      method: POST
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"phase_key\": \"string\",\n  \"name\": \"string\",\n  \"description\"\
          : \"string\",\n  \"default_duration_days\": 7,\n  \"sort_order\": 0,\n \
          \ \"is_active\": true\n}"
    - url: '{{ _.base_url }}/api/admin/phase-library/1'
      name: Update Phase Librar
      meta:
        id: req_926252046a8648a39d4dc5da3c031945
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9908000
      method: PUT
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"phase_key\": \"string\",\n  \"name\": \"string\",\n  \"description\"\
          : \"string\",\n  \"default_duration_days\": 7,\n  \"sort_order\": 0,\n \
          \ \"is_active\": true\n}"
    - url: '{{ _.base_url }}/api/admin/phase-library/1'
      name: Delete Phase Librar
      meta:
        id: req_50c2724a9c3b4ff795143966b5a01aa9
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9907000
      method: DELETE
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Project Templates
    meta:
      id: fld_f4d6d326329b4fafba6f9c330cb5c698
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9900000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/admin/project-templates'
      name: List Project Templates
      meta:
        id: req_abe8f55971c84e3dba5b990517409d9d
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9905000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
    - url: '{{ _.base_url }}/api/admin/project-templates/1'
      name: Get Project Template
      meta:
        id: req_27f608854dad46ff8345ad210509cb76
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9904000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/admin/project-templates'
      name: Create Project Template
      meta:
        id: req_3643c315d5b84ed8957984062cc0ad55
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9903000
      method: POST
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"name\": \"string\",\n  \"description\": \"string\",\n  \"phase_keys\"\
          : [\n    \"foundation\",\n    \"structure\"\n  ],\n  \"is_active\": true\n\
          }"
    - url: '{{ _.base_url }}/api/admin/project-templates/1'
      name: Update Project Template
      meta:
        id: req_f4a19d2a78c74c9aa114ba59b22496c3
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9902000
      method: PUT
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"name\": \"string\",\n  \"description\": \"string\",\n  \"phase_keys\"\
          : [\n    \"foundation\",\n    \"structure\"\n  ],\n  \"is_active\": true\n\
          }"
    - url: '{{ _.base_url }}/api/admin/project-templates/1'
      name: Delete Project Template
      meta:
        id: req_e2d34a5ff5cd445ab9478fab94ed01f0
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9901000
      method: DELETE
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Trade Types
    meta:
      id: fld_4a4452d3a9bd4a6ca34f73637d6fb0f5
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9894000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/admin/trade-types'
      name: List Trade Types
      meta:
        id: req_ea646ab360964208a808c5c6811b89ee
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9899000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
    - url: '{{ _.base_url }}/api/admin/trade-types/1'
      name: Get Trade Type
      meta:
        id: req_dd451255b6174b42bd52be62d34e6a71
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9898000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/admin/trade-types'
      name: Create Trade Type
      meta:
        id: req_fb37ec9d9a544a30be8a3ad8d65042fd
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9897000
      method: POST
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"name\": \"string\",\n  \"code\": \"string\",\n  \"is_active\"\
          : true\n}"
    - url: '{{ _.base_url }}/api/admin/trade-types/1'
      name: Update Trade Type
      meta:
        id: req_81a0f04b39f8475babba0c564cdda8bd
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9896000
      method: PUT
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"name\": \"string\",\n  \"code\": \"string\",\n  \"is_active\"\
          : true\n}"
    - url: '{{ _.base_url }}/api/admin/trade-types/1'
      name: Delete Trade Type
      meta:
        id: req_2291ac9c0b3247be89fdddb5c9ad2b60
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9895000
      method: DELETE
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Subcontractor Categories
    meta:
      id: fld_36ec00d158e0438cb6d36436786c44c8
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9888000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/admin/subcontractor-categories'
      name: List Subcontractor Categories
      meta:
        id: req_12ed38e512b74eb69c214e6f52a84c84
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9893000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
    - url: '{{ _.base_url }}/api/admin/subcontractor-categories/1'
      name: Get Subcontractor Categorie
      meta:
        id: req_d2ca8b2a3f9b49d990b8743917b9bc94
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9892000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/admin/subcontractor-categories'
      name: Create Subcontractor Categorie
      meta:
        id: req_728f8491fba14904afe1763f01365fd7
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9891000
      method: POST
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"name\": \"string\",\n  \"code\": \"string\",\n  \"is_active\"\
          : true\n}"
    - url: '{{ _.base_url }}/api/admin/subcontractor-categories/1'
      name: Update Subcontractor Categorie
      meta:
        id: req_73f1001d693c482ba49fb2e446849a45
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9890000
      method: PUT
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"name\": \"string\",\n  \"code\": \"string\",\n  \"is_active\"\
          : true\n}"
    - url: '{{ _.base_url }}/api/admin/subcontractor-categories/1'
      name: Delete Subcontractor Categorie
      meta:
        id: req_5c97151d211d47618b8b6800e8483264
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9889000
      method: DELETE
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Document Types
    meta:
      id: fld_70e32e39e1e447528a54ae0d4cb3ab2e
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9882000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/admin/document-types'
      name: List Document Types
      meta:
        id: req_5950412ae9474316899c5cddbb436ab7
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9887000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
    - url: '{{ _.base_url }}/api/admin/document-types/1'
      name: Get Document Type
      meta:
        id: req_e0b8694c33494b06bddd140314d99aa1
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9886000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/admin/document-types'
      name: Create Document Type
      meta:
        id: req_20b57eed579d432ea5550b69ad1c739c
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9885000
      method: POST
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"name\": \"string\",\n  \"category\": \"string\",\n  \"requires_approval\"\
          : false,\n  \"is_active\": true\n}"
    - url: '{{ _.base_url }}/api/admin/document-types/1'
      name: Update Document Type
      meta:
        id: req_c460dbb2c7fd4917afcbac7363552ad9
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9884000
      method: PUT
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"name\": \"string\",\n  \"category\": \"string\",\n  \"requires_approval\"\
          : false,\n  \"is_active\": true\n}"
    - url: '{{ _.base_url }}/api/admin/document-types/1'
      name: Delete Document Type
      meta:
        id: req_b43d8103bf064b5f85256b9d6351a007
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9883000
      method: DELETE
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: My Profile
    meta:
      id: fld_9fe0b77a6fe04bcdaad8cf99788ba6b5
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9879000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/profile'
      name: Get Profile
      meta:
        id: req_8539e68e2cb44e209dc78bf4f1a627b0
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9881000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/profile'
      name: Update Profile
      meta:
        id: req_8a892653702848da9af56c2b711d0ab3
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9880000
      method: POST
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"first_name\": \"string\",\n  \"surname\": \"string\",\n  \"\
          contact_no\": \"string\",\n  \"post_code\": \"string\"\n}"
  - name: Support Chat
    meta:
      id: fld_649751730d904d64a2b1727a1363b0dd
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9873000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/admin/conversations'
      name: List Conversations
      meta:
        id: req_51913e1c72304a54870d52b704d1d8db
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9878000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
    - url: '{{ _.base_url }}/api/admin/conversations/1/messages'
      name: Get Conversation Messages
      meta:
        id: req_c0afd90daeb54c58a8af0b1b2703c828
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9877000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
    - url: '{{ _.base_url }}/api/admin/conversations/1/messages'
      name: Send Message
      meta:
        id: req_2ec8f7a0065c4cc4afe00c71c3f5e1a0
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9876000
      method: POST
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"body\": \"string\"\n}"
    - url: '{{ _.base_url }}/api/admin/conversations/1/read'
      name: Mark Conversation Read
      meta:
        id: req_70f06c2b449f4fdaa51084eb2c8ef72e
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9875000
      method: PUT
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/admin/conversations/1/close'
      name: Close Conversation
      meta:
        id: req_497c2210aae548d2942afaeaf6cf52fa
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9874000
      method: PUT
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Filters
    meta:
      id: fld_admin_filters
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9873000
      description: Business-scoped lookups
    children:
    - url: '{{ _.base_url }}/api/common/trade-types'
      name: Trade Types
      meta:
        id: req_c20eda2595cf4c75b7374a413da85aa5
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Dropdown list of trade types for subcontractor filters.
        sortKey: -9813000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/common/document-types'
      name: Document Types
      meta:
        id: req_4030db13b72b46588705b0cfbd361245
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Dropdown list of document types.
        sortKey: -9812000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/common/phase-categories'
      name: Phase Categories
      meta:
        id: req_6678ace008e743208b7bde7f008bb418
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Dropdown list of phase categories.
        sortKey: -9811000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/common/company-info'
      name: Company Info
      meta:
        id: req_40bdef7eacb243ed8bce0c5324dc8eff
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Returns business tenant company info for the authenticated user.
        sortKey: -9810000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/common/projects'
      name: Projects [BIZ]
      meta:
        id: req_19dc7bcad7dd49b1b7c98ac8fd68c946
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Get business-scoped projects lookup list.'
        sortKey: -9809900
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/common/locations'
      name: Locations [BIZ]
      meta:
        id: req_7ee96b88a1994d8286d56cb4795e6922
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Get business-scoped locations lookup list.'
        sortKey: -9809890
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/common/staff'
      name: Staff [BIZ]
      meta:
        id: req_7190a305a8fe4bc294e5ce2111398aa4
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Get business-scoped staff lookup list.'
        sortKey: -9809880
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/common/subcontractors'
      name: Subcontractors [BIZ]
      meta:
        id: req_e21082e135ba40fa9847bec6172da21e
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Get business-scoped subcontractors lookup list.'
        sortKey: -9809870
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/common/subcontractor-categories'
      name: Subcontractor Categories [BIZ]
      meta:
        id: req_1cee441c4e02456486c876914a1f578a
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Get business-scoped subcontractor categories lookup list.'
        sortKey: -9809860
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/common/project-templates'
      name: Project Templates [BIZ]
      meta:
        id: req_d6c9e332a2d943a599c5622269fc01c1
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Get business-scoped project templates lookup list.'
        sortKey: -9809850
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/common/phases'
      name: Project Phases [BIZ]
      meta:
        id: req_f7c76da2862e44eaa7a4c0e9bad980cb
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Get business-scoped project phases lookup list (requires project_id).'
        sortKey: -9809840
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
        - name: project_id
          value: '1'
          description: 'Required Project ID'
          disabled: false
    - url: '{{ _.base_url }}/api/common/materials'
      name: Material Stocks [BIZ]
      meta:
        id: req_464c24f901be43a5bda6fc5aa75b931e
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Get business-scoped materials lookup list (requires project_id).'
        sortKey: -9809830
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
        - name: project_id
          value: '1'
          description: 'Required Project ID'
          disabled: false
    - url: '{{ _.base_url }}/api/common/roles'
      name: Roles [BIZ]
      meta:
        id: req_a0695a537f9a457c81bec527094fea8e
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: 'Get business-scoped roles lookup list.'
        sortKey: -9809820
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
- name: Employee
  meta:
    id: fld_734ed4a2d2c24f369c8aaa7ddf455354
    created: 1782301776488
    modified: 1782301776488
    sortKey: -9854000
    description: ''
  children:
  - name: Dashboard
    meta:
      id: fld_a6e6033cd0554dcfa7404c6609a04445
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9870000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/employee/dashboard'
      name: Get Dashboard
      meta:
        id: req_e671a115d9ae47ecaf16026e8b6aed2b
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Employee summary — tasks, clock status, upcoming calendar.
        sortKey: -9871000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Calendar
    meta:
      id: fld_58c40aff659d4fb5a5f70fb74ef16ca8
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9868000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/employee/calendar'
      name: Get Calendar
      meta:
        id: req_a04ce2e6379f44e185e8778b98b56b54
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9869000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
  - name: Tasks & Phases
    meta:
      id: fld_40b0958fd2b947ac871f83f2987604bf
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9866000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/employee/tasks'
      name: List Tasks
      meta:
        id: req_a5ab8171a21d4525a171b2163163f1a9
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9867000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
  - name: Punch Clock
    meta:
      id: fld_5aa3230412354e9299acde6f8126bffc
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9862000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/employee/clock'
      name: List Clock Entries
      meta:
        id: req_3144dfbacdcc45cfb3da2c3bea50d233
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9865000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
    - url: '{{ _.base_url }}/api/employee/clock/in'
      name: Clock In
      meta:
        id: req_11124290aad04896ac0a06a4a1803ed5
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Opens a new time clock entry. Returns error if already clocked
          in.
        sortKey: -9864000
      method: POST
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/employee/clock/out'
      name: Clock Out
      meta:
        id: req_7286956bfec146f8abd41c0f2d6f62aa
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Closes the open clock entry. Returns error if not clocked in.
        sortKey: -9863000
      method: POST
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Site Visits
    meta:
      id: fld_515a35702a324f29809b3a4b23bb29d2
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9859000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/employee/site-visits'
      name: List Site Visits
      meta:
        id: req_6b329a062b1144ddb1039a3cea07a0ae
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9861000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
    - url: '{{ _.base_url }}/api/employee/site-visits'
      name: Log Site Visit
      meta:
        id: req_aedbcf962cc142ad868d8a64ce51b3bb
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9860000
      method: POST
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"title\": \"string\",\n  \"notes\": \"string\",\n  \"project_id\"\
          : 1,\n  \"visited_at\": \"2025-01-01\"\n}"
  - name: Project Gallery
    meta:
      id: fld_6a6e19efcf6345b6ab107dffb151f4a2
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9857000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/employee/gallery'
      name: Get Gallery
      meta:
        id: req_ce9684f505824a72b5ada769a5e89626
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9858000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
  - name: Settings
    meta:
      id: fld_21bc3998ba594545afe7a842da2de59b
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9855000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/employee/notifications'
      name: Get Notifications
      meta:
        id: req_9e5d06d5a7fb46b8963b9b1e165cdbaf
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Returns up to 20 most recent unread notifications for the authenticated employee. No pagination.
        sortKey: -9856000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/employee/notifications/read-all'
      name: Mark All Read
      meta:
        id: req_employee_notif_mark_all_read
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Marks all unread notifications as read for the authenticated employee.
        sortKey: -9855500
      method: PATCH
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
- name: Client
  meta:
    id: fld_75b12210bf1d4a5ab5315cb00dcef901
    created: 1782301776488
    modified: 1782301776488
    sortKey: -9837000
    description: ''
  children:
  - name: Dashboard
    meta:
      id: fld_96c5953a48cc4965aaa14ff113128be0
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9851000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/client/dashboard'
      name: Get Dashboard
      meta:
        id: req_023a24867f4d4c1e8c116290fbad64f6
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9853000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/client/projects'
      name: List Projects
      meta:
        id: req_a5fbbcfba9b744df8c2dec1728df8c62
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9852000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
  - name: Progress Chart
    meta:
      id: fld_46c6e08ae1284e8186d0d7e071d9780c
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9849000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/client/progress'
      name: Get Progress
      meta:
        id: req_53fbb9d0f8da4c27bb188a9b8f19112c
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9850000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Document Center
    meta:
      id: fld_2fdfbb8c0e1847f5b31068c9ff631e14
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9847000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/client/documents'
      name: List Documents
      meta:
        id: req_88cf8a496c2e419ebda1b1d68089e4f2
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9848000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
  - name: Project Gallery
    meta:
      id: fld_5edb599cbfa7467b8a1917cbca3ac6ad
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9845000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/client/gallery'
      name: Get Gallery
      meta:
        id: req_7581e6de210f40f0a56468285fefec92
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9846000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
  - name: My Account & Payments
    meta:
      id: fld_d4ad6a2715aa44b6879a75e8f4b7c366
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9843000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/client/ledger'
      name: Get Ledger
      meta:
        id: req_f14f91a8fd134c09b7412bac40f95dd0
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9844000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
  - name: Support Chat
    meta:
      id: fld_db6b595915fd42849ad0b82cc6eab3e6
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9840000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/client/support'
      name: List Support Tickets
      meta:
        id: req_5a05fb6c33db40f5a4f3a72e8832b01c
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9842000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
    - url: '{{ _.base_url }}/api/client/support'
      name: Create Support Ticket
      meta:
        id: req_995fba543910473695a031f9c67c3933
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9841000
      method: POST
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"subject\": \"string\",\n  \"message\": \"string\",\n  \"project_id\"\
          : 1\n}"
  - name: Settings
    meta:
      id: fld_1232c38d02dd4f4692f88bb7a0322bb3
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9838000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/client/notifications'
      name: Get Notifications
      meta:
        id: req_965f583c45994299a5429643d183b52e
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Returns up to 20 most recent unread notifications for the authenticated client. No pagination.
        sortKey: -9839000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/client/notifications/read-all'
      name: Mark All Read
      meta:
        id: req_client_notif_mark_all_read
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Marks all unread notifications as read for the authenticated client.
        sortKey: -9838500
      method: PATCH
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
- name: Contractor
  meta:
    id: fld_3e0d8fadf8284145a62b03786431af45
    created: 1782301776488
    modified: 1782301776488
    sortKey: -9814000
    description: ''
  children:
  - name: Workspace Switcher
    meta:
      id: fld_3cd2629bf2354dc1b202d923833d4411
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9835000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/contractor/workspaces'
      name: List Workspaces
      meta:
        id: req_94c1947f5b124fbdbdf9108778477985
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Lists all business tenants this contractor is associated with.
        sortKey: -9836000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Dashboard
    meta:
      id: fld_fd7e4256ef2d49ff89bf61b08490822c
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9833000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/contractor/dashboard'
      name: Get Dashboard
      meta:
        id: req_3eef93affca84e43ac5a96d66123e09f
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9834000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Daily Site Logs
    meta:
      id: fld_1c326f8f5c0f4c15a52a215d858e6221
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9830000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/contractor/daily-logs'
      name: List Daily Logs
      meta:
        id: req_b84bfc30a37b4039b982ab807d1e2883
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9832000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
    - url: '{{ _.base_url }}/api/contractor/daily-logs'
      name: Create Daily Log
      meta:
        id: req_acbeb60f269f4da9817b52535b25f000
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9831000
      method: POST
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"log_date\": \"2025-01-01\",\n  \"work_summary\": \"string\"\
          ,\n  \"project_id\": 1,\n  \"workers_count\": 5\n}"
  - name: Expense Claims
    meta:
      id: fld_8aa5eb09d3d041b6879974d6bbd20c3b
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9827000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/contractor/expenses'
      name: List Expenses
      meta:
        id: req_27f1b27054a84f0184927d197640177c
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9829000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
    - url: '{{ _.base_url }}/api/contractor/expenses'
      name: Create Expense
      meta:
        id: req_feb919f819fe49ffbfa9ee26bdbaf4e0
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9828000
      method: POST
      headers:
      - name: Content-Type
        value: application/json
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      body:
        mimeType: application/json
        text: "{\n  \"category\": \"string\",\n  \"amount\": 0,\n  \"description\"\
          : \"string\",\n  \"expense_date\": \"2025-01-01\",\n  \"project_id\": 1\n\
          }"
  - name: Materials Log
    meta:
      id: fld_42928958b7af40fca58daf505afca0c7
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9825000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/contractor/materials'
      name: List Materials
      meta:
        id: req_5d15e1b51ee24181a029c8cbcbd5a1de
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9826000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
  - name: Project Gallery
    meta:
      id: fld_cc3e9ddb3bb94a8a9a0934e624c1453b
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9823000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/contractor/gallery'
      name: Get Gallery
      meta:
        id: req_dd1247cd32534f9b8bda48a5451148be
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9824000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
  - name: Ledger Statement
    meta:
      id: fld_84973a425e224bbd9da7b92814ad4fcf
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9821000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/contractor/ledger'
      name: Get Ledger
      meta:
        id: req_bb0040b0aac84a25bd802e1f9c297e56
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9822000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
  - name: Wage Vouchers
    meta:
      id: fld_16fa0cb36c8645939266126d544dbba2
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9819000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/contractor/vouchers'
      name: List Vouchers
      meta:
        id: req_28798c070a2143c5890d2a9a8d459351
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: ''
        sortKey: -9820000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
      parameters:
      - name: per_page
        value: '10'
        description: ''
        disabled: false
      - name: page
        value: '1'
        description: ''
        disabled: false
      - name: search
        value: ''
        description: ''
        disabled: false
  - name: My E-Signature
    meta:
      id: fld_0668f265124e450ca2983eeef2907cf4
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9817000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/admin/signature-settings'
      name: Get Signature Settings
      meta:
        id: req_36403a9a3d4a4b7b8c63174b59c17b8e
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Shared with admin — returns e-signature config.
        sortKey: -9818000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
  - name: Settings
    meta:
      id: fld_883c281bc57d4b86a0bbe987db3669ab
      created: 1782301776488
      modified: 1782301776488
      sortKey: -9815000
      description: ''
    children:
    - url: '{{ _.base_url }}/api/contractor/notifications'
      name: Get Notifications
      meta:
        id: req_1bb8bad22a7d44ffa773368378908b4b
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Returns up to 20 most recent unread notifications for the authenticated contractor. No pagination.
        sortKey: -9816000
      method: GET
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
    - url: '{{ _.base_url }}/api/contractor/notifications/read-all'
      name: Mark All Read
      meta:
        id: req_contractor_notif_mark_all_read
        created: 1782301776488
        modified: 1782301776488
        isPrivate: false
        description: Marks all unread notifications as read for the authenticated contractor.
        sortKey: -9815500
      method: PATCH
      headers:
      - name: User-Agent
        value: insomnia/10.3.1
      authentication:
        type: bearer
        token: '{{ _.access_token }}'
      settings:
        renderRequestBody: true
        encodeUrl: true
        followRedirects: global
        cookies:
          send: true
          store: true
        rebuildPath: true
- name: Filter
  meta:
    id: fld_e2259e31e6094aad9b1bf5853043fbbc
    created: 1782301776488
    modified: 1782301776488
    sortKey: -9809000
    description: Common dropdowns and lookup endpoints used across screens.
  children:
  - url: '{{ _.base_url }}/api/common/project-types'
    name: Project Types [GLOBAL]
    meta:
      id: req_8834c6a61d964f37a52661fcedd72213
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      description: 'Get global project types lookup list.'
      sortKey: -9809790
    method: GET
    headers:
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
  - url: '{{ _.base_url }}/api/common/expense-categories'
    name: Expense Categories [GLOBAL]
    meta:
      id: req_86f21cd05d6044728035150d78ee4a2d
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      description: 'Get global expense categories lookup list.'
      sortKey: -9809780
    method: GET
    headers:
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
  - url: '{{ _.base_url }}/api/common/advance-sources'
    name: Advance Sources [GLOBAL]
    meta:
      id: req_bef1614b2b664ef7b1a8a4c08781a9e2
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      description: 'Get global advance sources lookup list.'
      sortKey: -9809770
    method: GET
    headers:
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
  - url: '{{ _.base_url }}/api/common/daywork-expense-policies'
    name: Daywork Expense Policies [GLOBAL]
    meta:
      id: req_a823a995691147ff94c36ba96d0d92fa
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      description: 'Get global daywork expense policies lookup list.'
      sortKey: -9809760
    method: GET
    headers:
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
  - url: '{{ _.base_url }}/api/common/proposal-packages'
    name: Proposal Packages [GLOBAL]
    meta:
      id: req_e397fc48abf345c98bb22dc6e3fd39cc
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      description: 'Get global proposal packages lookup list.'
      sortKey: -9809750
    method: GET
    headers:
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
  - url: '{{ _.base_url }}/api/common/proposal-stages'
    name: Proposal Stages [GLOBAL]
    meta:
      id: req_dffc7e4bb09b4661b8fb0dbce2e47fc5
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      description: 'Get global proposal stages lookup list.'
      sortKey: -9809740
    method: GET
    headers:
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
  - url: '{{ _.base_url }}/api/common/voucher-statuses'
    name: Voucher Statuses [GLOBAL]
    meta:
      id: req_7de15ba765ad48449b7b637782aba7a2
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      description: 'Get global voucher statuses lookup list.'
      sortKey: -9809730
    method: GET
    headers:
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
  - url: '{{ _.base_url }}/api/common/phase-statuses'
    name: Phase Statuses [GLOBAL]
    meta:
      id: req_a02ddd288baa4ef881091c2c4e240727
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      description: 'Get global phase statuses lookup list.'
      sortKey: -9809720
    method: GET
    headers:
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
  - url: '{{ _.base_url }}/api/common/task-statuses'
    name: Task Statuses [GLOBAL]
    meta:
      id: req_9a576a558fdc4b3b8224b1b72d947e5f
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      description: 'Get global task statuses lookup list.'
      sortKey: -9809710
    method: GET
    headers:
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
  - url: '{{ _.base_url }}/api/common/theme-colors'
    name: Theme Colors [GLOBAL]
    meta:
      id: req_4f37e6fd46674f938dd1f6f137869522
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      description: 'Get global theme colors lookup list.'
      sortKey: -9809700
    method: GET
    headers:
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
  - url: '{{ _.base_url }}/api/common/theme-modes'
    name: Theme Modes [GLOBAL]
    meta:
      id: req_f66a32d52920428a8d3e79120437974f
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      description: 'Get global theme modes lookup list.'
      sortKey: -9809690
    method: GET
    headers:
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
  - url: '{{ _.base_url }}/api/common/languages'
    name: Languages [GLOBAL]
    meta:
      id: req_abcc2c4c8fc64e0f9ee6e54e964f6820
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      description: 'Get global languages lookup list.'
      sortKey: -9809680
    method: GET
    headers:
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
  - url: '{{ _.base_url }}/api/common/landing-content-modes'
    name: Landing Content Modes [GLOBAL]
    meta:
      id: req_af5c78f7999e4cc7a854a2e7e3f40b78
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      description: 'Get global landing content modes lookup list.'
      sortKey: -9809670
    method: GET
    headers:
    - name: User-Agent
      value: insomnia/10.3.1
    authentication:
      type: bearer
      token: '{{ _.access_token }}'
    settings:
      renderRequestBody: true
      encodeUrl: true
      followRedirects: global
      cookies:
        send: true
        store: true
      rebuildPath: true
- name: Uploads
  meta:
    id: fld_4fcf854e940d418b957503ed9d4163de
    created: 1782301776488
    modified: 1782301776488
    sortKey: -9808000
    description: File upload endpoints.
  children: []
- name: Config
  meta:
    id: fld_a2dd006d6af944d38cc1b2d56d398962
    created: 1782301776488
    modified: 1782301776488
    sortKey: -9807000
    description: App-wide configuration endpoints.
  children: []
environments:
  name: Base Environment
  meta:
    id: env_e6a01c05d43f4bf59b3897227969bd8c
    created: 1782301776488
    modified: 1782301776488
    isPrivate: false
  subEnvironments:
  - name: localhost
    meta:
      id: env_5bd8222fba07400c9ff090f20358189c
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      sortKey: -10000000
    data:
      base_url: http://127.0.0.1:8003
      access_token: ''
  - name: live
    meta:
      id: env_3bdc514b1ae24cb79fc65e629fa705a7
      created: 1782301776488
      modified: 1782301776488
      isPrivate: false
      sortKey: -9000000
    data:
      base_url: https://dev.engineeringservices.pk
      access_token: ''
cookieJar:
  name: Default Jar
  meta:
    id: jar_56cf6dd60a2a4576bc54bb4c4d813167
    created: 1782301776488
    modified: 1782301776488
  cookies: []
