{
  "info": {
    "name": "BNI",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    {
      "key": "base_url",
      "value": "http://bni.local",
      "type": "string"
    },
    {
      "key": "token",
      "value": "",
      "type": "string"
    },
    {
      "key": "reset_token",
      "value": "",
      "type": "string"
    },
    {
      "key": "chapter_id",
      "value": "1",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "Auth",
      "item": [
        {
          "name": "Register",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/auth/register",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "auth",
                "register"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n\t\"name\": \"Rohan Tandon\",\n\t\"email\": \"rohan@example.com\",\n\t\"phone\": \"+919800000001\",\n\t\"business_name\": \"Quorum Consultancy\",\n\t\"chapter_name\": \"Mumbai Central\",\n\t\"member_id\": \"QRM-MUM-0142\",\n\t\"role\": \"treasurer\",\n\t\"password\": \"Password@123\",\n\t\"password_confirmation\": \"Password@123\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Register a new user. Roles: `admin` or `treasurer`. Returns a Sanctum token on success."
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "if (pm.response.code === 201) { pm.collectionVariables.set('token', pm.response.json().token); }"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "Login",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/auth/login",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "auth",
                "login"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n\t\"email\": \"treasurer@gmail.com\",\n\t\"password\": \"Dev@123456\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Login with email and password. Returns a Sanctum bearer token."
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "if (pm.response.code === 200) { pm.collectionVariables.set('token', pm.response.json().token); }"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "Logout",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/auth/logout",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "auth",
                "logout"
              ]
            },
            "description": "Revokes the current bearer token."
          }
        },
        {
          "name": "Forgot Password \u2014 Send OTP",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/auth/forgot-password",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "auth",
                "forgot-password"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n\t\"email\": \"treasurer@gmail.com\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Step 1 of password reset. Sends a 6-digit OTP to the given email. OTP expires in 10 minutes."
          }
        },
        {
          "name": "Forgot Password \u2014 Verify OTP",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/auth/verify-otp",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "auth",
                "verify-otp"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n\t\"email\": \"treasurer@gmail.com\",\n\t\"otp\": \"123456\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Step 2 of password reset. Returns a `reset_token`."
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "if (pm.response.code === 200) { pm.collectionVariables.set('reset_token', pm.response.json().reset_token); }"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "Forgot Password \u2014 Reset Password",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/auth/reset-password",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "auth",
                "reset-password"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n\t\"reset_token\": \"{{reset_token}}\",\n\t\"password\": \"NewPassword@123\",\n\t\"password_confirmation\": \"NewPassword@123\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Step 3 of password reset. Use the reset_token from Step 2 to set a new password."
          }
        },
        {
          "name": "Change Password",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/auth/change-password",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "auth",
                "change-password"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n\t\"old_password\": \"Dev@123456\",\n\t\"password\": \"NewPassword@456\",\n\t\"password_confirmation\": \"NewPassword@456\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Change password while logged in. Requires authentication."
          }
        }
      ]
    },
    {
      "name": "Dashboard",
      "item": [
        {
          "name": "Get Chapter Dashboard",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/dashboard/{{chapter_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "dashboard",
                "{{chapter_id}}"
              ]
            },
            "description": "Returns full dashboard for a specific chapter. Set chapter_id from List My Chapters. Returns 403 if user does not belong to chapter."
          }
        }
      ]
    },
    {
      "name": "Profile",
      "item": [
        {
          "name": "Get Profile",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/profile",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "profile"
              ]
            },
            "description": "Returns the authenticated user's profile including profile_image_url."
          }
        },
        {
          "name": "Update Profile",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/profile",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "profile"
              ]
            },
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "name",
                  "value": "Rohan Tandon Updated",
                  "type": "text"
                },
                {
                  "key": "phone",
                  "value": "+919800000002",
                  "type": "text"
                },
                {
                  "key": "business_name",
                  "value": "Quorum Consultancy Ltd",
                  "type": "text"
                },
                {
                  "key": "chapter_name",
                  "value": "Mumbai Central",
                  "type": "text"
                },
                {
                  "key": "member_id",
                  "value": "QRM-MUM-0142",
                  "type": "text"
                },
                {
                  "key": "profile_image",
                  "type": "file",
                  "src": "",
                  "description": "Optional. JPG, JPEG, PNG, or WEBP. Max 2MB."
                }
              ]
            },
            "description": "Update profile fields. All fields optional. Send as multipart/form-data when uploading a profile image."
          }
        }
      ]
    },
    {
      "name": "Chapter Setup",
      "item": [
        {
          "name": "Resume Setup",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/chapter/setup",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "chapter",
                "setup"
              ]
            },
            "description": "Returns the current chapter setup state (chapter + setting + categories). Returns null for chapter if setup not started."
          }
        },
        {
          "name": "Step 2 \u2014 Chapter Details",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/chapter/setup/details",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "chapter",
                "setup",
                "details"
              ]
            },
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "chapter_name",
                  "value": "Mumbai Central",
                  "type": "text"
                },
                {
                  "key": "city",
                  "value": "Mumbai",
                  "type": "text"
                },
                {
                  "key": "state",
                  "value": "Maharashtra",
                  "type": "text"
                },
                {
                  "key": "chapter_code",
                  "value": "QRM-MUM-CTR",
                  "type": "text"
                },
                {
                  "key": "meeting_venue",
                  "value": "Marriott Powai \u00b7 Ballroom 3",
                  "type": "text"
                },
                {
                  "key": "contact_email",
                  "value": "treasury@mumbaicentral.org",
                  "type": "text"
                },
                {
                  "key": "treasurer_user_id",
                  "value": "",
                  "type": "text",
                  "description": "Optional. User ID of treasurer."
                },
                {
                  "key": "logo",
                  "type": "file",
                  "src": "",
                  "description": "Optional. JPG, JPEG, PNG, or WEBP. Max 2MB."
                }
              ]
            },
            "description": "Step 2: Creates or updates the chapter linked to the authenticated user.\n\nRequired: chapter_name, city, state, chapter_code, meeting_venue, contact_email\nOptional: treasurer_user_id, logo (file)"
          }
        },
        {
          "name": "Step 3 \u2014 Meeting Schedule",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/chapter/setup/meeting",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "chapter",
                "setup",
                "meeting"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n\t\"meeting_day\": \"thu\",\n\t\"meeting_start_time\": \"07:00\",\n\t\"venue\": \"Marriott Powai \u00b7 Ballroom 3\",\n\t\"reminder_timings\": [\"day_before\", \"morning_of\"],\n\t\"visitor_limit\": 8\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Step 3: Saves the weekly meeting schedule.\n\nmeeting_day: mon, tue, wed, thu, fri, sat\nmeeting_start_time: HH:MM (24-hour)\nreminder_timings: [day_before, morning_of]\nvisitor_limit: 1\u2013100 (default 8)"
          }
        },
        {
          "name": "Step 4 \u2014 Financial Setup",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/chapter/setup/finance",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "chapter",
                "setup",
                "finance"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n\t\"weekly_dues\": 2500,\n\t\"visitor_fee\": 2000,\n\t\"currency\": \"INR\",\n\t\"fy_starts\": \"Apr\",\n\t\"gst_rate\": 18\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Step 4: Saves financial defaults.\n\ncurrency: INR, USD, EUR, GBP\nfy_starts: Jan, Apr, Jul, Oct\ngst_rate: 0\u2013100 (default 18)\n\nResponse includes weekly_expected = weekly_dues \u00d7 member count."
          }
        },
        {
          "name": "Step 5 \u2014 Categories",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/chapter/setup/categories",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "chapter",
                "setup",
                "categories"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n\t\"categories\": [\n\t\t{\"name\": \"Venue\", \"type\": \"expense\", \"color\": \"#e53935\"},\n\t\t{\"name\": \"Refreshments\", \"type\": \"expense\", \"color\": \"#fdd835\"},\n\t\t{\"name\": \"Printing\", \"type\": \"expense\", \"color\": \"#3949ab\"},\n\t\t{\"name\": \"Weekly dues\", \"type\": \"payment\", \"color\": \"#43a047\"},\n\t\t{\"name\": \"Visitor fee\", \"type\": \"payment\", \"color\": \"#fb8c00\"}\n\t]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Step 5: Replaces all categories for the chapter (delete + re-insert).\n\ntype: expense or payment\ncolor: optional hex string"
          }
        },
        {
          "name": "List Categories",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/chapter/categories",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "chapter",
                "categories"
              ]
            },
            "description": "Lists all categories for the authenticated user's chapter."
          }
        },
        {
          "name": "Add Category",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/chapter/categories",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "chapter",
                "categories"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n\t\"name\": \"Speaker Fees\",\n\t\"type\": \"expense\",\n\t\"color\": \"#8e24aa\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Adds a single category. Returns 201 with the created category."
          }
        },
        {
          "name": "Delete Category",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/chapter/categories/1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "chapter",
                "categories",
                "1"
              ]
            },
            "description": "Deletes a category by ID. Returns 404 for categories not belonging to the user's chapter."
          }
        },
        {
          "name": "Step 6 — Members",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Accept", "value": "application/json" },
              { "key": "Authorization", "value": "Bearer {{token}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/chapter/setup/members",
              "host": ["{{base_url}}"],
              "path": ["api", "chapter", "setup", "members"]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n\t\"members\": [\n\t\t{\n\t\t\t\"type\": \"team\",\n\t\t\t\"user_id\": 3,\n\t\t\t\"role\": \"President\"\n\t\t},\n\t\t{\n\t\t\t\"type\": \"team\",\n\t\t\t\"user_id\": 4,\n\t\t\t\"role\": \"Vice President\"\n\t\t},\n\t\t{\n\t\t\t\"type\": \"guest\",\n\t\t\t\"full_name\": \"Arjun Mehta\",\n\t\t\t\"email\": \"arjun@example.com\",\n\t\t\t\"phone\": \"+919800001111\",\n\t\t\t\"role\": \"Secretary\"\n\t\t},\n\t\t{\n\t\t\t\"type\": \"guest\",\n\t\t\t\"full_name\": \"Sunita Doshi\",\n\t\t\t\"email\": \"sunita@example.com\",\n\t\t\t\"phone\": \"+919800001112\",\n\t\t\t\"role\": \"Member\"\n\t\t}\n\t]\n}",
              "options": { "raw": { "language": "json" } }
            },
            "description": "Step 6: Replaces all chapter members (delete + re-insert).\n\ntype: team (registered user — provide user_id) or guest (unregistered — provide full_name, email, phone).\nstart_date and end_date are inherited from the chapter.\n\nReturns the saved members with id, type, user_id, full_name, email, phone, role, start_date, end_date."
          }
        },
        {
          "name": "Search Users",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" },
              { "key": "Authorization", "value": "Bearer {{token}}" }
            ],
            "url": {
              "raw": "{{base_url}}/api/users/search?q=Aarav",
              "host": ["{{base_url}}"],
              "path": ["api", "users", "search"],
              "query": [
                { "key": "q", "value": "Aarav", "description": "Search term (min 2 chars). Matches name, email, or phone." }
              ]
            },
            "description": "Search registered users by name, email, or phone. Use to find team members for Step 6.\n\nMin 2 characters. Returns up to 20 results excluding the current user.\n\nFields: id, name, email, phone, profile_image_url, chapter_name, business_name."
          }
        }
      ]
    },
    {
      "name": "Notifications",
      "item": [
        {
          "name": "List Notifications",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/notifications",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "notifications"
              ],
              "query": [
                {
                  "key": "type",
                  "value": "",
                  "description": "Optional: payment, meeting, expense, visitor, report, system",
                  "disabled": true
                }
              ]
            },
            "description": "Returns summary counts + date-grouped notifications (today / yesterday / earlier).\n\nSummary: unread_total, payment_alerts, meetings, system\nFilters (tab counts): all, payment, meeting, expense, visitor, report, system\nEach notification: id, type, priority, title, body, amount, is_read, time_ago, created_at, related_id, related_type\n\nOptional: ?type=payment to filter the list (summary always shows totals across all types)."
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status 200', () => pm.response.to.have.status(200));",
                  "pm.test('Has summary', () => pm.expect(pm.response.json().summary).to.have.property('unread_total'));",
                  "pm.test('Has notifications grouped', () => pm.expect(pm.response.json().notifications).to.have.property('today'));"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "Mark Single as Read",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/notifications/1/read",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "notifications",
                "1",
                "read"
              ]
            },
            "description": "Marks a single notification as read. Replace `1` with the notification ID. Returns the updated notification with is_read: true."
          }
        },
        {
          "name": "Mark All as Read",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/notifications/mark-all-read",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "notifications",
                "mark-all-read"
              ]
            },
            "description": "Marks all unread notifications as read. Returns count of updated notifications."
          }
        },
        {
          "name": "Delete Single Notification",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/notifications/1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "notifications",
                "1"
              ]
            },
            "description": "Deletes a single notification by ID. Returns 404 for other users' notifications."
          }
        },
        {
          "name": "Clear All Notifications",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/notifications",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "notifications"
              ]
            },
            "description": "Deletes all notifications for the authenticated user. Returns count of deleted records."
          }
        }
      ]
    },
    {
      "name": "CMS",
      "item": [
        {
          "name": "Get About Us",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/cms/about",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "cms",
                "about"
              ]
            },
            "description": "Returns About Us HTML content. No authentication required."
          }
        },
        {
          "name": "Get Privacy Policy",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/cms/privacy-policy",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "cms",
                "privacy-policy"
              ]
            },
            "description": "Returns Privacy Policy HTML content. No authentication required."
          }
        },
        {
          "name": "Get Terms & Conditions",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/cms/terms",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "cms",
                "terms"
              ]
            },
            "description": "Returns Terms & Conditions HTML content. No authentication required."
          }
        },
        {
          "name": "Get FAQs",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/cms/faqs",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "cms",
                "faqs"
              ]
            },
            "description": "Returns all FAQs. Each item: tag, question, answer. No authentication required."
          }
        },
        {
          "name": "Get Contact Support",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/contact-support",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "contact-support"
              ]
            },
            "description": "Returns support contact details: email, phone, days, hours, whatsapp. No authentication required."
          }
        }
      ]
    },
    {
      "name": "Chapters",
      "item": [
        {
          "name": "List My Chapters",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/chapters",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "chapters"
              ]
            },
            "description": "Lists all chapters the authenticated user belongs to with role and term dates."
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "if (pm.response.code === 200 && pm.response.json().chapters.length > 0) {",
                  "    pm.collectionVariables.set(\"chapter_id\", pm.response.json().chapters[0].id);",
                  "}"
                ]
              }
            }
          ]
        },
        {
          "name": "Get Chapter",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/chapters/{{chapter_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "chapters",
                "{{chapter_id}}"
              ]
            },
            "description": "Get a single chapter. Returns 403 if user does not belong to it."
          }
        },
        {
          "name": "Update Chapter",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/chapters/{{chapter_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "chapters",
                "{{chapter_id}}"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n\t\"name\": \"Mumbai Central\",\n\t\"region\": \"Maharashtra\",\n\t\"start_date\": \"2026-01-01\",\n\t\"end_date\": null,\n\t\"status\": \"active\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Update chapter fields. All optional. Fields: name, region, start_date, end_date, status (active|inactive). Returns 403 if user does not belong to chapter."
          }
        },
        {
          "name": "Leave Chapter",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/chapters/{{chapter_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "chapters",
                "{{chapter_id}}"
              ]
            },
            "description": "Detaches user from chapter (does not delete the chapter). Returns 403 if user does not belong to it."
          }
        }
      ]
    }
  ]
}