{
  "info": {
    "_postman_id": "a7c2e9b1-4d3f-4c1a-9e2d-driver-apis-SPARESHUB",
    "name": "spaerhub full driver apis",
    "description": "All driver-facing API routes under /api/driver (excluding reports: /driver/ledger and /driver/transactions).\n\nVariables:\n- baseUrl — e.g. http://127.0.0.1:8000/api\n- driver_token — Bearer from POST /auth/login (user_type: driver)\n- orderId — order id for respond/complete/show\n\nAuth: Sanctum Bearer + actor:driver for all /driver/* requests.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    { "key": "baseUrl", "value": "http://127.0.0.1:8000/api" },
    { "key": "driver_token", "value": "" },
    { "key": "driver_username", "value": "your_driver_username" },
    { "key": "driver_password", "value": "your_password" },
    { "key": "orderId", "value": "1" },
    { "key": "order_status_filter", "value": "" }
  ],
  "auth": { "type": "noauth" },
  "item": [
    {
      "name": "00 Auth",
      "item": [
        {
          "name": "POST Login (driver)",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Accept", "value": "application/json" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"username\": \"{{driver_username}}\",\n  \"password\": \"{{driver_password}}\",\n  \"user_type\": \"driver\",\n  \"guest_token\": null\n}"
            },
            "url": "{{baseUrl}}/auth/login",
            "description": "Body (JSON):\n- username (string, required)\n- password (string, required for driver)\n- user_type (required): driver\n- guest_token (optional, for customer flows only)\n\nResponse data.token → set collection variable driver_token."
          }
        },
        {
          "name": "POST Logout",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [{ "key": "token", "value": "{{driver_token}}", "type": "string" }]
            },
            "method": "POST",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/auth/logout",
            "description": "Revokes current Sanctum token."
          }
        }
      ]
    },
    {
      "name": "01 Driver",
      "description": "Requires: Authorization Bearer {{driver_token}}, user must be actor driver with linked drivers row.",
      "item": [
        {
          "name": "GET Driver Home",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [{ "key": "token", "value": "{{driver_token}}", "type": "string" }]
            },
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/driver/home",
            "description": "No query params. Returns ledger_balance, currency, assigned_orders, assigned_orders_count."
          }
        },
        {
          "name": "GET Driver Profile",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [{ "key": "token", "value": "{{driver_token}}", "type": "string" }]
            },
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/driver/profile",
            "description": "No body. Returns user, driver, is_active, ledger_balance, ledger_currency."
          }
        },
        {
          "name": "PUT Driver Profile (update)",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [{ "key": "token", "value": "{{driver_token}}", "type": "string" }]
            },
            "method": "PUT",
            "header": [
              { "key": "Accept", "value": "application/json" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"username\": \"optional_unique_username\",\n  \"full_name\": \"Optional user full name\",\n  \"name\": \"Alias for full_name if full_name omitted\",\n  \"email\": \"optional@example.com\",\n  \"phone\": \"optional_user_phone\",\n  \"birthday\": \"1990-01-15\",\n  \"gender\": \"male\",\n  \"avatar\": \"https://example.com/avatar.png\",\n  \"driver_name\": \"Driver display name\",\n  \"driver_phone\": \"optional_driver_phone\",\n  \"driver_email\": \"driver@example.com\",\n  \"latitude\": 24.7136,\n  \"longitude\": 46.6753\n}"
            },
            "url": "{{baseUrl}}/driver/profile",
            "description": "All keys optional (send only what you change).\n\nUser fields: username, full_name, name (maps to full_name if full_name empty), email, phone, birthday, gender, avatar.\nDriver fields: driver_name → drivers.name, driver_phone, driver_email, latitude+longitude (must send both together or neither).\n\nIf only latitude or only longitude is sent → 422 latitude_and_longitude_together."
          }
        },
        {
          "name": "PUT Driver Profile Active",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [{ "key": "token", "value": "{{driver_token}}", "type": "string" }]
            },
            "method": "PUT",
            "header": [
              { "key": "Accept", "value": "application/json" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"is_active\": true\n}"
            },
            "url": "{{baseUrl}}/driver/profile/active",
            "description": "Body (JSON):\n- is_active (boolean, required)"
          }
        },
        {
          "name": "GET Driver Orders List",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [{ "key": "token", "value": "{{driver_token}}", "type": "string" }]
            },
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": {
              "raw": "{{baseUrl}}/driver/orders?status={{order_status_filter}}",
              "host": ["{{baseUrl}}"],
              "path": ["driver", "orders"],
              "query": [
                {
                  "key": "status",
                  "value": "{{order_status_filter}}",
                  "description": "optional — filter by orders.status (e.g. pending, driver_accept, out_for_delivery, completed)"
                }
              ]
            },
            "description": "Lists orders assigned to this driver. Omit status query for all assigned."
          }
        },
        {
          "name": "GET Driver Order Detail",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [{ "key": "token", "value": "{{driver_token}}", "type": "string" }]
            },
            "method": "GET",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/driver/orders/{{orderId}}",
            "description": "Path: order id. Order must be assigned to this driver (403 otherwise). No body."
          }
        },
        {
          "name": "POST Driver Order Respond (accept or reject)",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [{ "key": "token", "value": "{{driver_token}}", "type": "string" }]
            },
            "method": "POST",
            "header": [
              { "key": "Accept", "value": "application/json" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"decision\": \"accept\"\n}"
            },
            "url": "{{baseUrl}}/driver/orders/{{orderId}}/respond",
            "description": "Body (JSON):\n- decision (required): accept | reject\n\naccept: from pending or store_accept → driver_accept (idempotent if already driver_accept).\nreject: clears assignment; if status was driver_accept → pending."
          }
        },
        {
          "name": "POST Driver Order Respond Reject",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [{ "key": "token", "value": "{{driver_token}}", "type": "string" }]
            },
            "method": "POST",
            "header": [
              { "key": "Accept", "value": "application/json" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"decision\": \"reject\"\n}"
            },
            "url": "{{baseUrl}}/driver/orders/{{orderId}}/respond",
            "description": "Same endpoint as accept; use decision reject."
          }
        },
        {
          "name": "POST Driver Order Complete",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [{ "key": "token", "value": "{{driver_token}}", "type": "string" }]
            },
            "method": "POST",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "url": "{{baseUrl}}/driver/orders/{{orderId}}/complete",
            "description": "No body. Allowed from status packing or out_for_delivery only. Sets order to completed."
          }
        }
      ]
    }
  ]
}
