{
  "info": {
    "_postman_id": "a1b2c3d4-e5f6-7890-abcd-mkizughuno0001",
    "name": "Mkizughuno API",
    "description": "CodeIgniter 4 JWT API for Mkizughuno.\n\n1. Run **Auth > Login** first (saves tokens automatically).\n2. Other requests use Bearer `{{access_token}}`.\n\nDefault admin: `admin@mkizughuno.local` / `Admin@123`\n\n**Company logo**\n- `POST /company/logo` — multipart field `logo` (JPEG/PNG/WebP/GIF, max 2MB)\n- `DELETE /company/logo` — remove logo\n- `GET /company` returns `logoUrl` (relative) and `logo` (absolute URL)\n\n**Services**\n- `requiresControlNumber` — `true` = control-number billing, `false` = direct billing",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "http://localhost/mkizughuno/public/api"
    },
    {
      "key": "access_token",
      "value": ""
    },
    {
      "key": "refresh_token",
      "value": ""
    },
    {
      "key": "clientId",
      "value": "1"
    },
    {
      "key": "tenderId",
      "value": "1"
    },
    {
      "key": "invoiceId",
      "value": "1"
    },
    {
      "key": "serviceId",
      "value": "1"
    },
    {
      "key": "agentId",
      "value": "1"
    },
    {
      "key": "userId",
      "value": "1"
    },
    {
      "key": "certificateId",
      "value": "1"
    },
    {
      "key": "serviceJobId",
      "value": "1"
    }
  ],
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{access_token}}",
        "type": "string"
      }
    ]
  },
  "item": [
    {
      "name": "Auth",
      "item": [
        {
          "name": "Login",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const json = pm.response.json();",
                  "pm.test('Login succeeded', function () {",
                  "  pm.response.to.have.status(200);",
                  "  pm.expect(json.status).to.eql(true);",
                  "  pm.expect(json.data.access_token).to.be.a('string').and.not.empty;",
                  "});",
                  "if (json.data && json.data.access_token) {",
                  "  const access = String(json.data.access_token).trim();",
                  "  const refresh = String(json.data.refresh_token || '').trim();",
                  "  pm.collectionVariables.set('access_token', access);",
                  "  pm.collectionVariables.set('refresh_token', refresh);",
                  "  if (pm.environment) {",
                  "    pm.environment.set('access_token', access);",
                  "    pm.environment.set('refresh_token', refresh);",
                  "  }",
                  "  console.log('Saved access_token length:', access.length);",
                  "}"
                ]
              }
            }
          ],
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"admin@mkizughuno.local\",\n  \"password\": \"Admin@123\"\n}"
            },
            "url": "{{baseUrl}}/auth/login",
            "description": "Public. Saves access_token and refresh_token to collection variables."
          }
        },
        {
          "name": "Refresh Token",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const json = pm.response.json();",
                  "pm.test('Login succeeded', function () {",
                  "  pm.response.to.have.status(200);",
                  "  pm.expect(json.status).to.eql(true);",
                  "  pm.expect(json.data.access_token).to.be.a('string').and.not.empty;",
                  "});",
                  "if (json.data && json.data.access_token) {",
                  "  const access = String(json.data.access_token).trim();",
                  "  const refresh = String(json.data.refresh_token || '').trim();",
                  "  pm.collectionVariables.set('access_token', access);",
                  "  pm.collectionVariables.set('refresh_token', refresh);",
                  "  if (pm.environment) {",
                  "    pm.environment.set('access_token', access);",
                  "    pm.environment.set('refresh_token', refresh);",
                  "  }",
                  "  console.log('Saved access_token length:', access.length);",
                  "}"
                ]
              }
            }
          ],
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"refresh_token\": \"{{refresh_token}}\"\n}"
            },
            "url": "{{baseUrl}}/auth/refresh"
          }
        },
        {
          "name": "Me",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": "{{baseUrl}}/auth/me"
          }
        },
        {
          "name": "Logout",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"refresh_token\": \"{{refresh_token}}\"\n}"
            },
            "url": "{{baseUrl}}/auth/logout"
          }
        }
      ]
    },
    {
      "name": "Company",
      "item": [
        {
          "name": "Get Company",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": "{{baseUrl}}/company",
            "description": "Returns company settings including bankDetails.\n- `logoUrl`: stored relative path (e.g. uploads/company/logo_....png)\n- `logo`: absolute URL for display in the frontend"
          },
          "response": []
        },
        {
          "name": "Update Company (JSON)",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Mkizughuno Company Ltd\",\n  \"boxAddress\": \"S.L.P 15452\",\n  \"physicalAddress\": \"Arusha, Tanzania\",\n  \"phone\": \"+255700000000\",\n  \"email\": \"info@mkizughuno.local\",\n  \"tinNumber\": \"000-000-000\",\n  \"vrn\": null,\n  \"bankDetails\": \"CRDB Bank\\nAccount: 0150123456789\\nName: Mkizughuno Company Ltd\"\n}"
            },
            "url": "{{baseUrl}}/company",
            "description": "Update company settings as JSON. For logo file upload use **Upload Logo** or **Update Company (multipart)**."
          },
          "response": []
        },
        {
          "name": "Update Company (multipart + logo)",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "formdata",
              "formdata": [
                { "key": "name", "value": "Mkizughuno Company Ltd", "type": "text" },
                { "key": "boxAddress", "value": "S.L.P 15452", "type": "text" },
                { "key": "physicalAddress", "value": "Arusha, Tanzania", "type": "text" },
                { "key": "phone", "value": "+255700000000", "type": "text" },
                { "key": "email", "value": "info@mkizughuno.local", "type": "text" },
                { "key": "tinNumber", "value": "000-000-000", "type": "text" },
                { "key": "bankDetails", "value": "CRDB Bank\nAccount: 0150123456789\nName: Mkizughuno Company Ltd", "type": "text" },
                {
                  "key": "logo",
                  "description": "Optional. JPEG/PNG/WebP/GIF, max 2MB. Select a file in Postman.",
                  "type": "file",
                  "src": []
                }
              ]
            },
            "url": "{{baseUrl}}/company",
            "description": "Update company fields and optionally upload a logo in one request. Form field name for file: `logo`."
          },
          "response": []
        },
        {
          "name": "Upload Logo",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "logo",
                  "description": "Required. JPEG/PNG/WebP/GIF, max 2MB. Click Select Files in Postman.",
                  "type": "file",
                  "src": []
                }
              ]
            },
            "url": "{{baseUrl}}/company/logo",
            "description": "POST multipart upload only.\n1. Select a file for the `logo` field\n2. Send (Bearer token from Login)\n3. Response includes `logoUrl` + absolute `logo` URL"
          },
          "response": []
        },
        {
          "name": "Delete Logo",
          "request": {
            "method": "DELETE",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": "{{baseUrl}}/company/logo",
            "description": "Removes the stored logo file and sets logoUrl to null."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Clients",
      "item": [
        {
          "name": "List Clients",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": {
              "raw": "{{baseUrl}}/clients?page=1&limit=20&q=",
              "host": ["{{baseUrl}}"],
              "path": ["clients"],
              "query": [
                { "key": "page", "value": "1" },
                { "key": "limit", "value": "20" },
                { "key": "q", "value": "", "description": "Search name/phone/email" }
              ]
            }
          }
        },
        {
          "name": "Get Client",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/clients/{{clientId}}"
          }
        },
        {
          "name": "Create Client",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"New Client Ltd\",\n  \"location\": \"Arusha\",\n  \"address\": \"Njiro\",\n  \"contactPerson\": \"John Doe\",\n  \"phone\": \"759000111\",\n  \"email\": \"client@example.com\"\n}"
            },
            "url": "{{baseUrl}}/clients"
          }
        },
        {
          "name": "Update Client",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Yusuph Mdoe\",\n  \"location\": \"Morombo madukani\",\n  \"address\": \"Olasiti\",\n  \"contactPerson\": \"Johny\",\n  \"phone\": \"759880969\",\n  \"email\": \"yusuphmdoe1@gmail.com\"\n}"
            },
            "url": "{{baseUrl}}/clients/{{clientId}}"
          }
        },
        {
          "name": "Delete Client",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/clients/{{clientId}}"
          }
        }
      ]
    },
    {
      "name": "Agents",
      "item": [
        {
          "name": "List Agents",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/agents?page=1&limit=20"
          }
        },
        {
          "name": "Get Agent",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/agents/{{agentId}}"
          }
        },
        {
          "name": "Create Agent",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Agent Name\",\n  \"phone\": \"755000222\",\n  \"email\": \"agent@example.com\",\n  \"feePerClient\": 10000,\n  \"isActive\": 1\n}"
            },
            "url": "{{baseUrl}}/agents"
          }
        },
        {
          "name": "Update Agent",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Yusuph Mdoe\",\n  \"phone\": \"759880969\",\n  \"email\": \"yusuphmdoe1@gmail.com\",\n  \"feePerClient\": 10000,\n  \"isActive\": 1\n}"
            },
            "url": "{{baseUrl}}/agents/{{agentId}}"
          }
        },
        {
          "name": "Delete Agent",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/agents/{{agentId}}"
          }
        }
      ]
    },
    {
      "name": "Services",
      "item": [
        {
          "name": "List Services",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/services"
          }
        },
        {
          "name": "Get Service",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/services/{{serviceId}}"
          }
        },
        {
          "name": "Create Service",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"New Service\",\n  \"description\": \"Service description\",\n  \"basePrice\": 200000,\n  \"requiresControlNumber\": true,\n  \"isActive\": true\n}"
            },
            "url": "{{baseUrl}}/services",
            "description": "requiresControlNumber: true = needs control number billing; false = direct billing."
          }
        },
        {
          "name": "Update Service",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Fumigation\",\n  \"description\": \"Pest control fumigation\",\n  \"basePrice\": 250000,\n  \"requiresControlNumber\": false,\n  \"isActive\": true\n}"
            },
            "url": "{{baseUrl}}/services/{{serviceId}}",
            "description": "requiresControlNumber: true = needs control number billing; false = direct billing."
          }
        },
        {
          "name": "Delete Service",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/services/{{serviceId}}"
          }
        }
      ]
    },
    {
      "name": "Tenders",
      "item": [
        {
          "name": "List Tenders",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/tenders?page=1&limit=20"
          }
        },
        {
          "name": "Get Tender",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/tenders/{{tenderId}}"
          }
        },
        {
          "name": "Create Tender",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"clientId\": 1,\n  \"serviceId\": 1,\n  \"agentId\": 1,\n  \"status\": \"PENDING\"\n}"
            },
            "url": "{{baseUrl}}/tenders",
            "description": "tenderNumber is auto-generated if omitted."
          }
        },
        {
          "name": "Update Tender",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"clientId\": 1,\n  \"serviceId\": 2,\n  \"agentId\": null\n}"
            },
            "url": "{{baseUrl}}/tenders/{{tenderId}}"
          }
        },
        {
          "name": "Tender Workflow",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"CONTROL_NUMBER_REQUESTED\"\n}"
            },
            "url": "{{baseUrl}}/tenders/{{tenderId}}/workflow",
            "description": "Statuses: PENDING, CONTROL_NUMBER_REQUESTED, INVOICED, PAID, CONFIRMED, COMPLETED, CANCELLED"
          }
        },
        {
          "name": "Delete Tender",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/tenders/{{tenderId}}"
          }
        }
      ]
    },
    {
      "name": "Control Numbers",
      "item": [
        {
          "name": "List Control Numbers",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/control-numbers"
          }
        },
        {
          "name": "Get Control Number",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/control-numbers/1"
          }
        },
        {
          "name": "Create Control Number",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"tenderId\": 1,\n  \"controlNumber\": \"9998887000000001\",\n  \"amount\": 150000,\n  \"status\": \"ACTIVE\"\n}"
            },
            "url": "{{baseUrl}}/control-numbers"
          }
        },
        {
          "name": "Update Control Number",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"USED\"\n}"
            },
            "url": "{{baseUrl}}/control-numbers/1"
          }
        },
        {
          "name": "Delete Control Number",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/control-numbers/1"
          }
        }
      ]
    },
    {
      "name": "Invoices",
      "item": [
        {
          "name": "List Invoices",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/invoices"
          }
        },
        {
          "name": "Get Invoice",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/invoices/{{invoiceId}}"
          }
        },
        {
          "name": "Create Invoice",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"tenderId\": 1,\n  \"controlNumberId\": 1,\n  \"amount\": 150000,\n  \"dueDate\": \"2026-09-30 00:00:00.000\",\n  \"status\": \"UNPAID\"\n}"
            },
            "url": "{{baseUrl}}/invoices",
            "description": "invoiceNumber is auto-generated if omitted."
          }
        },
        {
          "name": "Update Invoice",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"PAID\",\n  \"amount\": 150000\n}"
            },
            "url": "{{baseUrl}}/invoices/{{invoiceId}}"
          }
        },
        {
          "name": "Delete Invoice",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/invoices/{{invoiceId}}"
          }
        }
      ]
    },
    {
      "name": "Payments",
      "item": [
        {
          "name": "List Payments",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/payments"
          }
        },
        {
          "name": "Get Payment",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/payments/1"
          }
        },
        {
          "name": "Create Payment",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"invoiceId\": 1,\n  \"paymentModeId\": 4,\n  \"amount\": 150000,\n  \"referenceNumber\": \"CASH-001\"\n}"
            },
            "url": "{{baseUrl}}/payments"
          }
        },
        {
          "name": "Update Payment",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": 150000,\n  \"referenceNumber\": \"CASH-001-UPD\"\n}"
            },
            "url": "{{baseUrl}}/payments/1"
          }
        },
        {
          "name": "Delete Payment",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/payments/1"
          }
        }
      ]
    },
    {
      "name": "Payment Modes",
      "item": [
        {
          "name": "List Payment Modes",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/payment-modes"
          }
        },
        {
          "name": "Get Payment Mode",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/payment-modes/1"
          }
        },
        {
          "name": "Create Payment Mode",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Cheque\",\n  \"description\": \"Bank cheque\",\n  \"isActive\": 1\n}"
            },
            "url": "{{baseUrl}}/payment-modes"
          }
        },
        {
          "name": "Update Payment Mode",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Cash\",\n  \"description\": \"Cash payment\",\n  \"isActive\": 1\n}"
            },
            "url": "{{baseUrl}}/payment-modes/4"
          }
        },
        {
          "name": "Delete Payment Mode",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/payment-modes/5"
          }
        }
      ]
    },
    {
      "name": "Service Jobs",
      "item": [
        {
          "name": "List Service Jobs",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/service-jobs"
          }
        },
        {
          "name": "Get Service Job",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/service-jobs/{{serviceJobId}}"
          }
        },
        {
          "name": "Create Service Job",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"tenderId\": 1,\n  \"scheduledDate\": \"2026-09-15 09:00:00.000\",\n  \"status\": \"SCHEDULED\",\n  \"technicianNotes\": null\n}"
            },
            "url": "{{baseUrl}}/service-jobs"
          }
        },
        {
          "name": "Update Service Job",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"COMPLETED\",\n  \"completedDate\": \"2026-09-15 14:00:00.000\",\n  \"technicianNotes\": \"Job done\"\n}"
            },
            "url": "{{baseUrl}}/service-jobs/{{serviceJobId}}"
          }
        },
        {
          "name": "Delete Service Job",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/service-jobs/{{serviceJobId}}"
          }
        }
      ]
    },
    {
      "name": "Certificates",
      "item": [
        {
          "name": "List Certificates",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/certificates"
          }
        },
        {
          "name": "Get Certificate",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/certificates/{{certificateId}}"
          }
        },
        {
          "name": "Create Certificate",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"certificateNumber\": \"MKZ-2026-000002\",\n  \"serviceJobId\": 2,\n  \"clientId\": 1,\n  \"expiryDate\": \"2027-09-11 00:00:00.000\",\n  \"status\": \"VALID\"\n}"
            },
            "url": "{{baseUrl}}/certificates",
            "description": "qrToken is auto-generated if omitted."
          }
        },
        {
          "name": "Update Certificate",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"REVOKED\",\n  \"revokedReason\": \"Issued in error\"\n}"
            },
            "url": "{{baseUrl}}/certificates/{{certificateId}}"
          }
        },
        {
          "name": "Delete Certificate",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/certificates/{{certificateId}}"
          }
        }
      ]
    },
    {
      "name": "Reminders",
      "item": [
        {
          "name": "List Reminders",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/reminders"
          }
        },
        {
          "name": "Get Reminder",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/reminders/1"
          }
        },
        {
          "name": "Create Reminder",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"certificateId\": 1,\n  \"audience\": \"CLIENT\",\n  \"channel\": \"SMS\",\n  \"scheduledFor\": \"2026-09-20 09:00:00.000\",\n  \"status\": \"SCHEDULED\"\n}"
            },
            "url": "{{baseUrl}}/reminders"
          }
        },
        {
          "name": "Update Reminder",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"SENT\",\n  \"sentAt\": \"2026-09-20 09:05:00.000\"\n}"
            },
            "url": "{{baseUrl}}/reminders/1"
          }
        },
        {
          "name": "Delete Reminder",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/reminders/1"
          }
        }
      ]
    },
    {
      "name": "Commissions",
      "item": [
        {
          "name": "List Commissions",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/commissions"
          }
        },
        {
          "name": "Get Commission",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/commissions/1"
          }
        },
        {
          "name": "Create Commission",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"agentId\": 1,\n  \"tenderId\": 2,\n  \"amount\": 10000,\n  \"status\": \"PENDING\"\n}"
            },
            "url": "{{baseUrl}}/commissions"
          }
        },
        {
          "name": "Update Commission",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"PAID\",\n  \"paidAt\": \"2026-09-20 10:00:00.000\"\n}"
            },
            "url": "{{baseUrl}}/commissions/1"
          }
        },
        {
          "name": "Delete Commission",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/commissions/1"
          }
        }
      ]
    },
    {
      "name": "Users",
      "item": [
        {
          "name": "List Users",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/users"
          }
        },
        {
          "name": "Get User",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/users/{{userId}}"
          }
        },
        {
          "name": "Create User",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"New User\",\n  \"email\": \"user@mkizughuno.local\",\n  \"phone\": \"+255700000002\",\n  \"password\": \"Password@123\",\n  \"roleId\": 2,\n  \"isActive\": 1\n}"
            },
            "url": "{{baseUrl}}/users"
          }
        },
        {
          "name": "Update User",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"System Admin\",\n  \"phone\": \"+255700000001\",\n  \"roleId\": 1,\n  \"isActive\": 1\n}"
            },
            "url": "{{baseUrl}}/users/{{userId}}"
          }
        },
        {
          "name": "Delete User",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/users/{{userId}}"
          }
        }
      ]
    },
    {
      "name": "Roles & Permissions",
      "item": [
        {
          "name": "List Roles",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/roles"
          }
        },
        {
          "name": "Get Role",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/roles/1"
          }
        },
        {
          "name": "Create Role",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Viewer\",\n  \"description\": \"Read-only access\"\n}"
            },
            "url": "{{baseUrl}}/roles"
          }
        },
        {
          "name": "Update Role",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "Accept", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Admin\",\n  \"description\": \"Full system access\"\n}"
            },
            "url": "{{baseUrl}}/roles/1"
          }
        },
        {
          "name": "Delete Role",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/roles/4"
          }
        },
        {
          "name": "List Permissions",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/permissions"
          }
        },
        {
          "name": "Get Permission",
          "request": {
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/permissions/1"
          }
        }
      ]
    }
  ]
}
