{
  "info": {
    "name": "Agentrixo API",
    "description": "Complete REST API collection for the Agentrixo platform — Real Estate Agency Intelligence.\n\nBase URL: https://api.agentrixo.com\n\nAuthentication: Use a JWT token from /auth/login or an API key (arx_live_...) generated from your dashboard Settings.\n\nInclude in all authenticated requests:\nAuthorization: Bearer <token-or-api-key>",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{token}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.agentrixo.com"
    },
    {
      "key": "token",
      "value": ""
    }
  ],
  "item": [
    {
      "name": "Authentication",
      "description": "Register your agency, log in to get a JWT token, and manage email verification and password resets. No authentication required for these endpoints. After login, include the token in all subsequent requests as: Authorization: Bearer <token>. Alternatively, generate an API key from your dashboard Settings page.",
      "auth": { "type": "noauth" },
      "item": [
        {
          "name": "Login",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"you@agency.com\",\n  \"password\": \"your-password\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/auth/login",
              "host": ["{{baseUrl}}"],
              "path": ["auth", "login"]
            },
            "description": "Log in with your email and password to receive a JWT token. Your email must be verified first (check your inbox after registration). The response includes your agency details and user info. Use the returned token in the Authorization header for all authenticated API calls."
          }
        },
        {
          "name": "Register",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"My Real Estate Agency\",\n  \"email\": \"admin@myagency.com\",\n  \"password\": \"securePass123\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/auth/register",
              "host": ["{{baseUrl}}"],
              "path": ["auth", "register"]
            },
            "description": "Create a new agency account. Provide the agency name, your email, and a password (min 8 characters). A verification email is automatically sent to the provided email address. You must verify your email before you can log in."
          }
        },
        {
          "name": "Verify Email",
          "request": {
            "auth": { "type": "noauth" },
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/auth/verify-email?token=your-verification-token",
              "host": ["{{baseUrl}}"],
              "path": ["auth", "verify-email"],
              "query": [
                { "key": "token", "value": "your-verification-token" }
              ]
            },
            "description": "Verify your email address. The verification token is sent to your email after registration. Click the link in the email or pass the token as a query parameter. Once verified, you can log in."
          }
        },
        {
          "name": "Resend Verification Email",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"admin@myagency.com\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/auth/resend-verification",
              "host": ["{{baseUrl}}"],
              "path": ["auth", "resend-verification"]
            },
            "description": "Resend the verification email if you didn't receive it or if it expired. Pass the email address you registered with. Only works for accounts that haven't been verified yet."
          }
        },
        {
          "name": "Forgot Password",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"admin@myagency.com\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/auth/forgot-password",
              "host": ["{{baseUrl}}"],
              "path": ["auth", "forgot-password"]
            },
            "description": "Request a password reset link. An email with a reset token will be sent to the provided address. The token expires after 1 hour. For security, the response is always the same whether the email exists or not."
          }
        },
        {
          "name": "Reset Password",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"token\": \"reset-token-from-email\",\n  \"password\": \"newSecurePass456\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/auth/reset-password",
              "host": ["{{baseUrl}}"],
              "path": ["auth", "reset-password"]
            },
            "description": "Set a new password using the reset token received via email from the forgot-password endpoint. The token is a one-time-use value from the reset link. Password must be at least 8 characters."
          }
        }
      ]
    },
    {
      "name": "Agency",
      "description": "Manage your agency details, company profile, branding settings, and agent roster. All endpoints require authentication.",
      "item": [
        {
          "name": "Get Agency Details",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/agency",
              "host": ["{{baseUrl}}"],
              "path": ["api", "agency"]
            },
            "description": "Retrieve your agency's core details including the current subscription plan, plan status, enabled modules, and branding configuration. Use this to check your agency ID, slug, and what features are available on your plan."
          }
        },
        {
          "name": "Update Agency Name",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Premier Real Estate Group\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/agency",
              "host": ["{{baseUrl}}"],
              "path": ["api", "agency"]
            },
            "description": "Update your agency's display name. This name appears across the platform and in public-facing pages like tenant applications and property listings."
          }
        },
        {
          "name": "Get Company Profile",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/agency/profile",
              "host": ["{{baseUrl}}"],
              "path": ["api", "agency", "profile"]
            },
            "description": "Get your company profile including business details, contact info, and address. The returned id is your agency's unique identifier (Company ID) which you can find in the dashboard Company Profile page."
          }
        },
        {
          "name": "Update Company Profile",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phone\": \"+61 2 9876 5432\",\n  \"website\": \"https://myagency.com.au\",\n  \"abn\": \"12 345 678 901\",\n  \"address\": \"100 George Street\",\n  \"city\": \"Sydney\",\n  \"state\": \"NSW\",\n  \"postcode\": \"2000\",\n  \"country\": \"Australia\",\n  \"timezone\": \"Australia/Sydney\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/agency/profile",
              "host": ["{{baseUrl}}"],
              "path": ["api", "agency", "profile"]
            },
            "description": "Update your company profile. All fields are optional — only include the fields you want to change. The timezone field accepts IANA timezone strings like \"Australia/Sydney\"."
          }
        },
        {
          "name": "Get Branding",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/agency/branding",
              "host": ["{{baseUrl}}"],
              "path": ["api", "agency", "branding"]
            },
            "description": "Get your agency's branding settings. Returns your uploaded logo URL, brand colors (hex values), custom domain, and whether the domain's SSL certificate has been provisioned."
          }
        },
        {
          "name": "Update Brand Colors",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"brandColor\": \"#0F172A\",\n  \"brandAccent\": \"#14B8A6\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/agency/branding",
              "host": ["{{baseUrl}}"],
              "path": ["api", "agency", "branding"]
            },
            "description": "Update your brand colors. Pass hex color values (e.g., \"#0F172A\"). These colors are used in public-facing pages like tenant applications, offer forms, and property listings. Requires Pro plan."
          }
        },
        {
          "name": "Upload Logo",
          "request": {
            "method": "POST",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "logo",
                  "type": "file",
                  "src": "/path/to/logo.png"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/api/agency/branding/logo",
              "host": ["{{baseUrl}}"],
              "path": ["api", "agency", "branding", "logo"]
            },
            "description": "Upload your agency logo as an image file. Send as multipart/form-data with the field name \"logo\". Supported formats: PNG, JPG, SVG, WebP. The logo appears on public-facing pages. Requires Pro plan."
          }
        },
        {
          "name": "Delete Logo",
          "request": {
            "method": "DELETE",
            "url": {
              "raw": "{{baseUrl}}/api/agency/branding/logo",
              "host": ["{{baseUrl}}"],
              "path": ["api", "agency", "branding", "logo"]
            },
            "description": "Remove your agency's uploaded logo. Public-facing pages will show the default Agentrixo branding instead. Requires Pro plan."
          }
        },
        {
          "name": "Set Custom Domain",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"customDomain\": \"apply.myagency.com\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/agency/domain",
              "host": ["{{baseUrl}}"],
              "path": ["api", "agency", "domain"]
            },
            "description": "Set a custom domain for your public-facing pages (e.g., \"apply.myagency.com\"). An SSL certificate is automatically provisioned via Let's Encrypt. You must configure a CNAME DNS record pointing to agentrixo.com before calling this endpoint. Requires Pro plan."
          }
        },
        {
          "name": "List Agents",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/agency/agents",
              "host": ["{{baseUrl}}"],
              "path": ["api", "agency", "agents"]
            },
            "description": "List all agents in your agency. Each agent has a unique ID you can use when creating sellers, buyers, properties, or assigning leads. The hasLogin field indicates if the agent has dashboard login credentials."
          }
        },
        {
          "name": "Create Agent",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Sarah Johnson\",\n  \"email\": \"sarah@myagency.com\",\n  \"phone\": \"+61 400 111 222\",\n  \"password\": \"agentPass123\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/agency/agents",
              "host": ["{{baseUrl}}"],
              "path": ["api", "agency", "agents"]
            },
            "description": "Create a new agent in your agency. Name is required. If you provide a password, the agent will be able to log in to the dashboard with the agent role. The returned agent ID can be used in other endpoints like creating properties or assigning leads."
          }
        },
        {
          "name": "Update Agent",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Sarah J. Thompson\",\n  \"phone\": \"+61 400 333 444\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/agency/agents/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "agency", "agents", ":id"],
              "variable": [
                { "key": "id", "value": "agent-uuid-here" }
              ]
            },
            "description": "Update an existing agent's details. The :id is the agent's UUID returned from GET /api/agency/agents or when creating the agent. All fields are optional — only include what you want to change. Setting a password enables dashboard login for the agent."
          }
        },
        {
          "name": "Delete Agent",
          "request": {
            "method": "DELETE",
            "url": {
              "raw": "{{baseUrl}}/api/agency/agents/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "agency", "agents", ":id"],
              "variable": [
                { "key": "id", "value": "agent-uuid-here" }
              ]
            },
            "description": "Permanently delete an agent and unlink them from all assigned records (properties, leads, sellers, etc.). The :id is the agent UUID from GET /api/agency/agents. This action cannot be undone."
          }
        },
        {
          "name": "Get Channels",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/agency/channels",
              "host": ["{{baseUrl}}"],
              "path": ["api", "agency", "channels"]
            },
            "description": "Check which messaging channels your agency has configured. Returns true/false for each channel. Email requires a configured email provider (Resend), SMS requires an SMS provider (Twilio). Chat is always available."
          }
        }
      ]
    },
    {
      "name": "Contacts",
      "description": "Unified CRM view combining all your sellers, buyers, and tenants into a single list. Contacts are created through their respective endpoints (POST /api/sellers, POST /api/buyers, or POST /api/screening). Use this section for cross-type search, messaging, documents, and activity logs.",
      "item": [
        {
          "name": "List All Contacts",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/contacts?search=john&type=seller",
              "host": ["{{baseUrl}}"],
              "path": ["api", "contacts"],
              "query": [
                { "key": "search", "value": "john" },
                { "key": "type", "value": "seller", "description": "Filter by type: seller, buyer, or tenant" },
                { "key": "status", "value": "active", "disabled": true }
              ]
            },
            "description": "List all contacts across sellers, buyers, and tenants in a single unified list. Results include last message preview, unread message count, and are sorted with unread messages first. Use the type filter to show only one contact type. The search parameter matches against name, email, and phone."
          }
        },
        {
          "name": "Get Contact Details",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/contacts/:type/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "contacts", ":type", ":id"],
              "variable": [
                { "key": "type", "value": "seller", "description": "seller, buyer, or tenant" },
                { "key": "id", "value": "contact-uuid-here" }
              ]
            },
            "description": "Get detailed info for a single contact. The :type must be \"seller\", \"buyer\", or \"tenant\". The :id is the contact's UUID from the list endpoint. For sellers, includes linked properties. For buyers, includes linked offers. For tenants, includes screening application data."
          }
        },
        {
          "name": "Update Contact",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"John Smith Updated\",\n  \"phone\": \"+61 400 555 666\",\n  \"tags\": [\"vip\", \"referral\"]\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/contacts/:type/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "contacts", ":type", ":id"],
              "variable": [
                { "key": "type", "value": "seller", "description": "seller, buyer, or tenant" },
                { "key": "id", "value": "contact-uuid-here" }
              ]
            },
            "description": "Update a contact's fields. The :type is \"seller\", \"buyer\", or \"tenant\". The :id is the contact UUID. Updatable fields depend on type: sellers support name, email, phone, address, status, agentId, notes, tags. Buyers support budgetMin, budgetMax, financeType, preferences. Tenants support applicantName, applicantEmail, status."
          }
        },
        {
          "name": "Get Contact Messages",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/contacts/:type/:id/messages",
              "host": ["{{baseUrl}}"],
              "path": ["api", "contacts", ":type", ":id", "messages"],
              "variable": [
                { "key": "type", "value": "seller", "description": "seller, buyer, or tenant" },
                { "key": "id", "value": "contact-uuid-here" }
              ]
            },
            "description": "Get the full message thread for a contact. Returns all messages (both sent by your agency and received from the contact) sorted chronologically. Unread messages from the contact are automatically marked as read when you call this endpoint. The :type and :id come from the contacts list."
          }
        },
        {
          "name": "Send Message to Contact",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"message\": \"Hi John, just following up on our meeting. Let me know if you have any questions.\",\n  \"channel\": \"chat\",\n  \"subject\": \"Follow-up\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/contacts/:type/:id/messages",
              "host": ["{{baseUrl}}"],
              "path": ["api", "contacts", ":type", ":id", "messages"],
              "variable": [
                { "key": "type", "value": "seller", "description": "seller, buyer, or tenant" },
                { "key": "id", "value": "contact-uuid-here" }
              ]
            },
            "description": "Send a message to a contact via chat, email, or SMS. For chat: the message is stored and visible in the contact portal. For email: requires the contact to have an email address and your agency to have email configured. For SMS: requires a phone number and SMS provider. Use the html field for rich email content."
          }
        },
        {
          "name": "List Contact Documents",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/contacts/:type/:id/documents",
              "host": ["{{baseUrl}}"],
              "path": ["api", "contacts", ":type", ":id", "documents"],
              "variable": [
                { "key": "type", "value": "seller", "description": "seller, buyer, or tenant" },
                { "key": "id", "value": "contact-uuid-here" }
              ]
            },
            "description": "List all documents attached to a contact. Returns file metadata including name, size, type, URL, and upload date. The :type and :id come from the contacts list."
          }
        },
        {
          "name": "Upload Contact Document",
          "request": {
            "method": "POST",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "type": "file",
                  "src": "/path/to/document.pdf"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/api/contacts/:type/:id/documents",
              "host": ["{{baseUrl}}"],
              "path": ["api", "contacts", ":type", ":id", "documents"],
              "variable": [
                { "key": "type", "value": "seller", "description": "seller, buyer, or tenant" },
                { "key": "id", "value": "contact-uuid-here" }
              ]
            },
            "description": "Upload a document to a contact's file. Send as multipart/form-data with the field name \"file\". Maximum file size is 25MB. Supported types include PDF, DOC, XLS, images, and more. The document is linked to the specific contact."
          }
        },
        {
          "name": "Delete Contact Document",
          "request": {
            "method": "DELETE",
            "url": {
              "raw": "{{baseUrl}}/api/contacts/:type/:id/documents/:docId",
              "host": ["{{baseUrl}}"],
              "path": ["api", "contacts", ":type", ":id", "documents", ":docId"],
              "variable": [
                { "key": "type", "value": "seller", "description": "seller, buyer, or tenant" },
                { "key": "id", "value": "contact-uuid-here" },
                { "key": "docId", "value": "document-uuid-here" }
              ]
            },
            "description": "Delete a document from a contact. The :docId is the document UUID returned from the list documents endpoint. This permanently removes the file."
          }
        }
      ]
    },
    {
      "name": "Sellers",
      "description": "Create and manage seller contacts. Sellers can be linked to properties and have their own activity log for tracking interactions.",
      "item": [
        {
          "name": "List Sellers",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/sellers?search=jane&status=active",
              "host": ["{{baseUrl}}"],
              "path": ["api", "sellers"],
              "query": [
                { "key": "search", "value": "jane" },
                { "key": "status", "value": "active", "description": "active or inactive" }
              ]
            },
            "description": "List all sellers in your agency. Use the search parameter to filter by name, email, or phone. Use the status parameter to filter by active or inactive sellers. Results are sorted by most recently created."
          }
        },
        {
          "name": "Get Seller",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/sellers/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "sellers", ":id"],
              "variable": [
                { "key": "id", "value": "seller-uuid-here" }
              ]
            },
            "description": "Get a seller's full details including all their linked properties. The :id is the seller UUID from the sellers list. The response includes the seller's contact info, status, assigned agent, and an array of properties they own."
          }
        },
        {
          "name": "Create Seller",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Jane Williams\",\n  \"email\": \"jane@example.com\",\n  \"phone\": \"+61 400 222 333\",\n  \"address\": \"45 Collins Street\",\n  \"suburb\": \"Melbourne\",\n  \"city\": \"Melbourne\",\n  \"state\": \"VIC\",\n  \"postcode\": \"3000\",\n  \"contactMethod\": \"email\",\n  \"timeline\": \"3 months\",\n  \"notes\": \"Motivated seller, looking for quick sale\",\n  \"tags\": [\"premium\", \"urgent\"]\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/sellers",
              "host": ["{{baseUrl}}"],
              "path": ["api", "sellers"]
            },
            "description": "Create a new seller contact. Only name is required. You can optionally assign an agentId (get agent IDs from GET /api/agency/agents). Tags is a JSON array of strings for categorization. The seller's ID is returned in the response for use in other endpoints."
          }
        },
        {
          "name": "Update Seller",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"active\",\n  \"notes\": \"Updated contact preferences\",\n  \"tags\": [\"premium\", \"referral\"]\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/sellers/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "sellers", ":id"],
              "variable": [
                { "key": "id", "value": "seller-uuid-here" }
              ]
            },
            "description": "Update a seller's details. The :id is the seller UUID. All fields are optional — only include what you want to change. Changing the status automatically creates an activity log entry. The agentId must be a valid agent UUID from GET /api/agency/agents."
          }
        },
        {
          "name": "Delete Seller",
          "request": {
            "method": "DELETE",
            "url": {
              "raw": "{{baseUrl}}/api/sellers/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "sellers", ":id"],
              "variable": [
                { "key": "id", "value": "seller-uuid-here" }
              ]
            },
            "description": "Permanently delete a seller and all their activity history. The :id is the seller UUID. This does not delete properties linked to the seller, but unlinks them. This action cannot be undone."
          }
        },
        {
          "name": "Get Seller Activities",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/sellers/:id/activities",
              "host": ["{{baseUrl}}"],
              "path": ["api", "sellers", ":id", "activities"],
              "variable": [
                { "key": "id", "value": "seller-uuid-here" }
              ]
            },
            "description": "Get the activity log for a seller. Returns all activities (notes, status changes, calls, emails) sorted by most recent first. The :id is the seller UUID."
          }
        },
        {
          "name": "Add Seller Activity",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"title\": \"Phone call with seller\",\n  \"description\": \"Discussed listing price expectations. Seller wants $1.2M minimum.\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/sellers/:id/activities",
              "host": ["{{baseUrl}}"],
              "path": ["api", "sellers", ":id", "activities"],
              "variable": [
                { "key": "id", "value": "seller-uuid-here" }
              ]
            },
            "description": "Add a manual note or activity to a seller's log. The :id is the seller UUID. Use title for a short summary and description for longer details. Activities are timestamped automatically."
          }
        }
      ]
    },
    {
      "name": "Buyers",
      "description": "Create and manage buyer contacts. Buyers can be linked to property offers and track their budget and finance details.",
      "item": [
        {
          "name": "List Buyers",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/buyers?search=bob&status=active",
              "host": ["{{baseUrl}}"],
              "path": ["api", "buyers"],
              "query": [
                { "key": "search", "value": "bob" },
                { "key": "status", "value": "active", "description": "active or inactive" }
              ]
            },
            "description": "List all buyers in your agency. Use search to filter by name, email, or phone. Use status to filter active/inactive. Results include budget range, finance status, and assigned agent."
          }
        },
        {
          "name": "Get Buyer",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/buyers/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "buyers", ":id"],
              "variable": [
                { "key": "id", "value": "buyer-uuid-here" }
              ]
            },
            "description": "Get a buyer's full details including all their linked offers. The :id is the buyer UUID from the buyers list. The response includes contact info, budget range, finance details, preferences, and an array of offers they've made on properties."
          }
        },
        {
          "name": "Create Buyer",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Bob Chen\",\n  \"email\": \"bob@example.com\",\n  \"phone\": \"+61 400 444 555\",\n  \"budgetMin\": 500000,\n  \"budgetMax\": 750000,\n  \"financeType\": \"pre_approved\",\n  \"preferredLocations\": \"Inner West, Eastern Suburbs\",\n  \"propertyPreferences\": \"3 bed house with garden\",\n  \"notes\": \"Pre-approved with ANZ\",\n  \"tags\": [\"hot-lead\", \"first-home-buyer\"]\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/buyers",
              "host": ["{{baseUrl}}"],
              "path": ["api", "buyers"]
            },
            "description": "Create a new buyer contact. Only name is required. Budget fields accept numbers (e.g., 500000). Finance status options: \"pre_approved\", \"pending\", \"not_started\". You can assign an agentId from GET /api/agency/agents. The buyer ID is returned for use in creating offers."
          }
        },
        {
          "name": "Update Buyer",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"budgetMax\": 800000,\n  \"financeType\": \"pre_approved\",\n  \"notes\": \"Increased budget after bank reassessment\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/buyers/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "buyers", ":id"],
              "variable": [
                { "key": "id", "value": "buyer-uuid-here" }
              ]
            },
            "description": "Update a buyer's details. The :id is the buyer UUID. All fields are optional — only include what you want to change. You can update their budget, finance status, preferences, assigned agent, and tags."
          }
        },
        {
          "name": "Delete Buyer",
          "request": {
            "method": "DELETE",
            "url": {
              "raw": "{{baseUrl}}/api/buyers/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "buyers", ":id"],
              "variable": [
                { "key": "id", "value": "buyer-uuid-here" }
              ]
            },
            "description": "Permanently delete a buyer. The :id is the buyer UUID. This also removes all offers the buyer has made on properties. This action cannot be undone."
          }
        }
      ]
    },
    {
      "name": "Tenants",
      "description": "Create and manage tenant contacts directly. Tenants can also be created automatically through the Screening module when applications are submitted via the public apply form.",
      "item": [
        {
          "name": "List Tenants",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/tenants?search=alice&status=pending",
              "host": ["{{baseUrl}}"],
              "path": ["api", "tenants"],
              "query": [
                { "key": "search", "value": "alice" },
                { "key": "status", "value": "pending", "description": "pending, in_review, approved, or rejected" }
              ]
            },
            "description": "List all tenants in your agency. Use search to filter by name, email, phone, or property address. Use status to filter by pending, in_review, approved, or rejected. Results include AI risk scores and employment details."
          }
        },
        {
          "name": "Get Tenant",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/tenants/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "tenants", ":id"],
              "variable": [
                { "key": "id", "value": "tenant-uuid-here" }
              ]
            },
            "description": "Get a tenant's full application details. The :id is the tenant UUID from the tenants list. Includes all submitted application data, AI risk score breakdown, employment info, references, and screening history."
          }
        },
        {
          "name": "Create Tenant",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"applicantName\": \"Alice Taylor\",\n  \"applicantEmail\": \"alice@example.com\",\n  \"applicantPhone\": \"+61 400 666 777\",\n  \"propertyAddress\": \"12 King Street, Sydney NSW 2000\",\n  \"employmentStatus\": \"employed\",\n  \"incomeMonthly\": 6500,\n  \"rentMonthly\": 2200,\n  \"notes\": \"Referred by existing tenant\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/tenants",
              "host": ["{{baseUrl}}"],
              "path": ["api", "tenants"]
            },
            "description": "Create a tenant application manually. Only applicantName is required. You can include employment and income details for AI scoring. The application is automatically scored by the AI risk engine after creation. Alternatively, tenants can submit applications through the public apply form."
          }
        },
        {
          "name": "Update Tenant",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"applicantPhone\": \"+61 400 777 888\",\n  \"incomeMonthly\": 7000,\n  \"notes\": \"Salary increase confirmed\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/tenants/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "tenants", ":id"],
              "variable": [
                { "key": "id", "value": "tenant-uuid-here" }
              ]
            },
            "description": "Update a tenant's application details. The :id is the tenant UUID. You can update personal info, employment details, income, and notes. Use the Screening module endpoints (PUT /api/screening/:id/decision) to approve or reject applications."
          }
        },
        {
          "name": "Delete Tenant",
          "request": {
            "method": "DELETE",
            "url": {
              "raw": "{{baseUrl}}/api/tenants/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "tenants", ":id"],
              "variable": [
                { "key": "id", "value": "tenant-uuid-here" }
              ]
            },
            "description": "Permanently delete a tenant application. The :id is the tenant UUID. This removes all application data and screening history. This action cannot be undone."
          }
        }
      ]
    },
    {
      "name": "Properties & Offers",
      "description": "Create and manage property listings, upload images, and handle buyer offers. Properties can be linked to sellers and agents. Each property gets an auto-generated share token for the seller comparison page.",
      "item": [
        {
          "name": "List Properties",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/properties",
              "host": ["{{baseUrl}}"],
              "path": ["api", "properties"]
            },
            "description": "List all properties in your agency. Owners and admins see all properties. Agents only see properties assigned to them. Results include address, type, price, status, assigned agent, and linked seller info."
          }
        },
        {
          "name": "Create Property",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"address\": \"88 Pitt Street\",\n  \"suburb\": \"Sydney\",\n  \"state\": \"NSW\",\n  \"postcode\": \"2000\",\n  \"propertyType\": \"apartment\",\n  \"bedrooms\": 2,\n  \"bathrooms\": 1,\n  \"parking\": 1,\n  \"landSize\": \"85sqm\",\n  \"price\": 950000,\n  \"status\": \"active\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/properties",
              "host": ["{{baseUrl}}"],
              "path": ["api", "properties"]
            },
            "description": "Create a new property listing. Only address is required. Set agentId to assign an agent (from GET /api/agency/agents) and sellerId to link a seller (from GET /api/sellers). Status defaults to \"active\". A unique shareToken is auto-generated for the seller comparison page. The propertyType field accepts: \"house\", \"apartment\", \"townhouse\", \"land\", \"commercial\", \"other\"."
          }
        },
        {
          "name": "Update Property",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"price\": 980000,\n  \"status\": \"under_offer\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/properties/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "properties", ":id"],
              "variable": [
                { "key": "id", "value": "property-uuid-here" }
              ]
            },
            "description": "Update a property's details. The :id is the property UUID from the properties list. All fields are optional — only include what you want to change. You can reassign the agent, update price, change status, etc."
          }
        },
        {
          "name": "Delete Property",
          "request": {
            "method": "DELETE",
            "url": {
              "raw": "{{baseUrl}}/api/properties/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "properties", ":id"],
              "variable": [
                { "key": "id", "value": "property-uuid-here" }
              ]
            },
            "description": "Permanently delete a property and all its offers and images. The :id is the property UUID. Any leases linked to this property are also deleted. This action cannot be undone."
          }
        },
        {
          "name": "List Property Offers",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/properties/:id/offers",
              "host": ["{{baseUrl}}"],
              "path": ["api", "properties", ":id", "offers"],
              "variable": [
                { "key": "id", "value": "property-uuid-here" }
              ]
            },
            "description": "List all buyer offers for a property, sorted by highest price first. The :id is the property UUID. Each offer includes buyer details, offer price, conditions, status, and timestamps."
          }
        },
        {
          "name": "Create Offer",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"buyerName\": \"Michael Park\",\n  \"buyerEmail\": \"michael@example.com\",\n  \"buyerPhone\": \"+61 400 888 999\",\n  \"offerPrice\": 920000,\n  \"conditions\": \"Subject to finance and building inspection\",\n  \"expiresAt\": \"2026-04-15T00:00:00Z\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/properties/:id/offers",
              "host": ["{{baseUrl}}"],
              "path": ["api", "properties", ":id", "offers"],
              "variable": [
                { "key": "id", "value": "property-uuid-here" }
              ]
            },
            "description": "Create a new offer on a property. The :id is the property UUID. You can optionally link to an existing buyer by passing their buyerId (from GET /api/buyers). If not linked, provide the buyer's name directly. The offer status starts as \"pending\"."
          }
        },
        {
          "name": "Update Offer Status",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"accepted\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/properties/offers/:id/status",
              "host": ["{{baseUrl}}"],
              "path": ["api", "properties", "offers", ":id", "status"],
              "variable": [
                { "key": "id", "value": "offer-uuid-here" }
              ]
            },
            "description": "Accept or reject a buyer offer. The :id is the offer UUID from the list offers endpoint. Accepting an offer does not automatically reject other offers — you must handle that separately."
          }
        },
        {
          "name": "Delete Offer",
          "request": {
            "method": "DELETE",
            "url": {
              "raw": "{{baseUrl}}/api/properties/offers/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "properties", "offers", ":id"],
              "variable": [
                { "key": "id", "value": "offer-uuid-here" }
              ]
            },
            "description": "Delete a buyer offer. The :id is the offer UUID from the list offers endpoint. This permanently removes the offer record."
          }
        },
        {
          "name": "List Property Images",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/properties/:id/images",
              "host": ["{{baseUrl}}"],
              "path": ["api", "properties", ":id", "images"],
              "variable": [
                { "key": "id", "value": "property-uuid-here" }
              ]
            },
            "description": "List all images for a property in display order. The :id is the property UUID. Returns image URLs, dimensions, and sort order. Maximum 20 images per property."
          }
        },
        {
          "name": "Upload Property Images",
          "request": {
            "method": "POST",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "images",
                  "type": "file",
                  "src": "/path/to/property-photo.jpg"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/api/properties/:id/images",
              "host": ["{{baseUrl}}"],
              "path": ["api", "properties", ":id", "images"],
              "variable": [
                { "key": "id", "value": "property-uuid-here" }
              ]
            },
            "description": "Upload one or more images to a property. The :id is the property UUID. Send as multipart/form-data with the field name \"images\". Maximum 20 images per property, 10MB per image. Supported formats: JPG, PNG, WebP."
          }
        },
        {
          "name": "Reorder Property Images",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"order\": [\"image-uuid-1\", \"image-uuid-2\", \"image-uuid-3\"]\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/properties/:id/images/reorder",
              "host": ["{{baseUrl}}"],
              "path": ["api", "properties", ":id", "images", "reorder"],
              "variable": [
                { "key": "id", "value": "property-uuid-here" }
              ]
            },
            "description": "Reorder property images. The :id is the property UUID. Pass an array of image IDs (from the list images endpoint) in the desired display order."
          }
        },
        {
          "name": "Delete Property Image",
          "request": {
            "method": "DELETE",
            "url": {
              "raw": "{{baseUrl}}/api/properties/:id/images/:imageId",
              "host": ["{{baseUrl}}"],
              "path": ["api", "properties", ":id", "images", ":imageId"],
              "variable": [
                { "key": "id", "value": "property-uuid-here" },
                { "key": "imageId", "value": "image-uuid-here" }
              ]
            },
            "description": "Delete a specific image from a property. The :id is the property UUID and :imageId is the image UUID from the list images endpoint. The image file is permanently removed."
          }
        }
      ]
    },
    {
      "name": "Lead Response Tracker",
      "description": "Track how fast your agents respond to new leads. Measure response times, monitor SLA compliance, and improve conversion rates. Leads are created automatically from inquiry form submissions or can be added manually.",
      "item": [
        {
          "name": "Get Response Stats",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/modules/response-tracker/stats?days=30",
              "host": ["{{baseUrl}}"],
              "path": ["api", "modules", "response-tracker", "stats"],
              "query": [
                { "key": "days", "value": "30" }
              ]
            },
            "description": "Get response time statistics per agent including average response time, total leads, responded count, and conversion rate. Use the days parameter to set the time window (default 30 days)."
          }
        },
        {
          "name": "List Leads",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/modules/response-tracker/leads?page=1&limit=50",
              "host": ["{{baseUrl}}"],
              "path": ["api", "modules", "response-tracker", "leads"],
              "query": [
                { "key": "page", "value": "1" },
                { "key": "limit", "value": "50" }
              ]
            },
            "description": "List all leads with pagination. Returns lead details including contact info, assigned agent, response status, and source. Sorted by most recent first. Max 200 per page."
          }
        },
        {
          "name": "Get Lead",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/modules/response-tracker/leads/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "modules", "response-tracker", "leads", ":id"],
              "variable": [
                { "key": "id", "value": "lead-uuid-here" }
              ]
            },
            "description": "Get a single lead's full details. The :id is the lead UUID from the leads list. Includes contact info, assigned agent, message content, response timestamp, and source."
          }
        },
        {
          "name": "Create Lead",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"contactName\": \"David Wong\",\n  \"contactEmail\": \"david@example.com\",\n  \"contactPhone\": \"+61 400 111 000\",\n  \"source\": \"website\",\n  \"message\": \"Interested in the 3-bedroom apartment on Pitt Street.\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/modules/response-tracker/leads",
              "host": ["{{baseUrl}}"],
              "path": ["api", "modules", "response-tracker", "leads"]
            },
            "description": "Create a lead manually. Leads are also created automatically when someone submits an inquiry form. The contactName is required. Set agentId to assign to a specific agent (from GET /api/agency/agents) — if not set, round-robin or manual assignment applies. Source helps track where the lead came from (e.g., \"website\", \"referral\", \"walk-in\")."
          }
        },
        {
          "name": "Update Lead",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"agentId\": \"agent-uuid-here\",\n  \"message\": \"Updated inquiry details\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/modules/response-tracker/leads/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "modules", "response-tracker", "leads", ":id"],
              "variable": [
                { "key": "id", "value": "lead-uuid-here" }
              ]
            },
            "description": "Update a lead's fields. The :id is the lead UUID. You can reassign to a different agent, update contact info, or add a message. Use the respond endpoint below to mark a lead as responded (which records the response time)."
          }
        },
        {
          "name": "Mark Lead as Responded",
          "request": {
            "method": "PUT",
            "url": {
              "raw": "{{baseUrl}}/api/modules/response-tracker/leads/:id/respond",
              "host": ["{{baseUrl}}"],
              "path": ["api", "modules", "response-tracker", "leads", ":id", "respond"],
              "variable": [
                { "key": "id", "value": "lead-uuid-here" }
              ]
            },
            "description": "Mark a lead as responded. The :id is the lead UUID. This records the response timestamp and calculates the response time from when the lead was created. Can only be called once per lead — subsequent calls have no effect."
          }
        },
        {
          "name": "Delete Lead",
          "request": {
            "method": "DELETE",
            "url": {
              "raw": "{{baseUrl}}/api/modules/response-tracker/leads/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "modules", "response-tracker", "leads", ":id"],
              "variable": [
                { "key": "id", "value": "lead-uuid-here" }
              ]
            },
            "description": "Delete a lead permanently. The :id is the lead UUID. This removes the lead from all statistics and reports. This action cannot be undone."
          }
        }
      ]
    },
    {
      "name": "Commission Calculator",
      "description": "Configure commission split rules and track deal payouts. Supports three rule types: flat (fixed amount), percentage (of deal value), and tiered (graduated rates based on deal value brackets). Each deal can be linked to a specific agent and rule.",
      "item": [
        {
          "name": "List Commission Rules",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/modules/commission/rules",
              "host": ["{{baseUrl}}"],
              "path": ["api", "modules", "commission", "rules"]
            },
            "description": "List all commission rules configured for your agency. Each rule defines how commissions are split between the agent and broker. One rule can be marked as default and is automatically applied to new deals."
          }
        },
        {
          "name": "Create Commission Rule",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Standard Split\",\n  \"ruleType\": \"percentage\",\n  \"agentSplitPct\": 60,\n  \"brokerSplitPct\": 40,\n  \"referralFeePct\": 0,\n  \"isDefault\": true\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/modules/commission/rules",
              "host": ["{{baseUrl}}"],
              "path": ["api", "modules", "commission", "rules"]
            },
            "description": "Create a new commission rule. The ruleType determines the calculation: \"flat\" uses a fixed dollar amount, \"percentage\" applies a percentage of deal value, \"tiered\" uses graduated brackets. Split percentages should add up to 100. Set isDefault to true to auto-apply to new deals. You can optionally tie a rule to a specific agent by agentId (from GET /api/agency/agents)."
          }
        },
        {
          "name": "Update Commission Rule",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"agentSplitPct\": 65,\n  \"brokerSplitPct\": 35\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/modules/commission/rules/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "modules", "commission", "rules", ":id"],
              "variable": [
                { "key": "id", "value": "rule-uuid-here" }
              ]
            },
            "description": "Update an existing commission rule. The :id is the rule UUID from the rules list. All fields are optional. Changing a rule does not retroactively update existing commission records — only new deals are affected."
          }
        },
        {
          "name": "Delete Commission Rule",
          "request": {
            "method": "DELETE",
            "url": {
              "raw": "{{baseUrl}}/api/modules/commission/rules/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "modules", "commission", "rules", ":id"],
              "variable": [
                { "key": "id", "value": "rule-uuid-here" }
              ]
            },
            "description": "Delete a commission rule. The :id is the rule UUID. Existing commission records that used this rule are not deleted, but new deals can no longer use it. This action cannot be undone."
          }
        },
        {
          "name": "List Commission Records",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/modules/commission/records?page=1&limit=200",
              "host": ["{{baseUrl}}"],
              "path": ["api", "modules", "commission", "records"],
              "query": [
                { "key": "page", "value": "1" },
                { "key": "limit", "value": "200" }
              ]
            },
            "description": "List all commission records (completed deals) for your agency. Each record shows the deal value, applied rule, agent/broker split amounts, and close date. Sorted by most recent. Use pagination to handle large datasets."
          }
        },
        {
          "name": "Get Commission Stats",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/modules/commission/stats?days=90",
              "host": ["{{baseUrl}}"],
              "path": ["api", "modules", "commission", "stats"],
              "query": [
                { "key": "days", "value": "90" }
              ]
            },
            "description": "Get per-agent commission summary for a time period. Shows each agent's total deal value, total commission earned, number of deals, and average deal size. Use the days parameter to set the window (default 90 days)."
          }
        },
        {
          "name": "Create Manual Commission",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"dealName\": \"88 Pitt Street Sale\",\n  \"dealValue\": 950000,\n  \"agentId\": \"agent-uuid-here\",\n  \"closedAt\": \"2026-03-10T00:00:00Z\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/modules/commission/manual",
              "host": ["{{baseUrl}}"],
              "path": ["api", "modules", "commission", "manual"]
            },
            "description": "Create a manual commission entry for a closed deal. Provide the dealValue (total sale price) and optionally a ruleId to apply a specific commission rule (from GET /api/modules/commission/rules). If no ruleId is given, the default rule is used. Set agentId to credit a specific agent."
          }
        }
      ]
    },
    {
      "name": "Dashboard & Leaderboard",
      "description": "Get agent performance rankings and dashboard overview statistics. The leaderboard ranks agents by a composite score based on response time, conversion rate, and commission earned.",
      "item": [
        {
          "name": "Get Leaderboard",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/modules/leaderboard?days=30",
              "host": ["{{baseUrl}}"],
              "path": ["api", "modules", "leaderboard"],
              "query": [
                { "key": "days", "value": "30" }
              ]
            },
            "description": "Get the agent leaderboard with composite performance scores. Each agent is ranked by a weighted score combining response time (30%), conversion rate (30%), and commission earned (40%). Use the days parameter to set the evaluation period. Requires Growth plan or higher."
          }
        },
        {
          "name": "Get Dashboard Summary",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/modules/dashboard-summary",
              "host": ["{{baseUrl}}"],
              "path": ["api", "modules", "dashboard-summary"]
            },
            "description": "Get a high-level dashboard overview with key metrics: total leads this month, average response time, total commissions earned, active properties count, pending screening applications, and more. Useful for building a quick dashboard view."
          }
        }
      ]
    },
    {
      "name": "Tenant Screening",
      "description": "AI-powered tenant screening with automated risk scoring from 0 to 100. Applications can be submitted via the public apply form or created manually. The AI analyzes employment, income, rental history, and references to generate a risk score. Requires Pro plan.",
      "item": [
        {
          "name": "Get Screening Stats",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/screening/stats",
              "host": ["{{baseUrl}}"],
              "path": ["api", "screening", "stats"]
            },
            "description": "Get screening statistics: total applications, counts by status (pending, in_review, approved, rejected), and average AI risk score. Useful for KPI dashboards and monitoring application volume."
          }
        },
        {
          "name": "List Screening Applications",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/screening",
              "host": ["{{baseUrl}}"],
              "path": ["api", "screening"]
            },
            "description": "List all screening applications for your agency. Returns applicant info, property, employment status, income, AI risk score, and current status. Sorted by most recent first."
          }
        },
        {
          "name": "Get Screening Application",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/screening/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "screening", ":id"],
              "variable": [
                { "key": "id", "value": "application-uuid-here" }
              ]
            },
            "description": "Get full details of a screening application including all submitted data, AI risk score breakdown, employment verification, references, income details, and screening history. The :id is the application UUID from the list."
          }
        },
        {
          "name": "Create Screening Application",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"applicantName\": \"Tom Richards\",\n  \"applicantEmail\": \"tom@example.com\",\n  \"applicantPhone\": \"+61 400 999 000\",\n  \"propertyAddress\": \"22 Market Street, Sydney NSW 2000\",\n  \"employmentStatus\": \"employed\",\n  \"incomeMonthly\": 7500\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/screening",
              "host": ["{{baseUrl}}"],
              "path": ["api", "screening"]
            },
            "description": "Create a screening application manually. The AI risk engine automatically scores the application based on employment status, income, rental history, and references. Alternatively, applicants can submit through the public apply form (GET /apply/:applyToken) which creates the application automatically."
          }
        },
        {
          "name": "Update Screening Application",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"incomeMonthly\": 8000,\n  \"employmentStatus\": \"employed\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/screening/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "screening", ":id"],
              "variable": [
                { "key": "id", "value": "application-uuid-here" }
              ]
            },
            "description": "Update fields on a screening application. The :id is the application UUID. You can update applicant details, employment info, and notes. To change the application status (approve/reject), use the decision endpoint below instead."
          }
        },
        {
          "name": "Set Application Decision",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"approved\",\n  \"notes\": \"Strong employment history, good references\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/screening/:id/decision",
              "host": ["{{baseUrl}}"],
              "path": ["api", "screening", ":id", "decision"],
              "variable": [
                { "key": "id", "value": "application-uuid-here" }
              ]
            },
            "description": "Set the decision on an application — approve, reject, or mark for review. The :id is the application UUID. Add optional notes explaining the decision. After approving, you can assign the tenant to a property using the assign endpoint below to create a lease."
          }
        },
        {
          "name": "Rescore Application",
          "request": {
            "method": "PUT",
            "url": {
              "raw": "{{baseUrl}}/api/screening/:id/rescore",
              "host": ["{{baseUrl}}"],
              "path": ["api", "screening", ":id", "rescore"],
              "variable": [
                { "key": "id", "value": "application-uuid-here" }
              ]
            },
            "description": "Re-run the AI risk scoring engine on an application. The :id is the application UUID. Useful after updating applicant data (income, employment, references) to get a fresh score. The new score replaces the previous one."
          }
        },
        {
          "name": "Assign Tenant to Property",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"propertyId\": \"property-uuid-here\",\n  \"leaseStart\": \"2026-04-01\",\n  \"leaseEnd\": \"2027-03-31\",\n  \"weeklyRent\": 650,\n  \"bondAmount\": 2600\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/screening/:id/assign",
              "host": ["{{baseUrl}}"],
              "path": ["api", "screening", ":id", "assign"],
              "variable": [
                { "key": "id", "value": "application-uuid-here" }
              ]
            },
            "description": "Assign an approved tenant to a property and automatically create a lease. The :id is the application UUID (must have status \"approved\"). Get the propertyId from GET /api/properties. Lease start/end are dates (e.g., \"2026-04-01\"). Weekly rent and bond are numbers. The created lease appears in the Leases section."
          }
        },
        {
          "name": "Delete Screening Application",
          "request": {
            "method": "DELETE",
            "url": {
              "raw": "{{baseUrl}}/api/screening/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "screening", ":id"],
              "variable": [
                { "key": "id", "value": "application-uuid-here" }
              ]
            },
            "description": "Permanently delete a screening application and all its data. The :id is the application UUID. This removes the application from statistics. This action cannot be undone."
          }
        }
      ]
    },
    {
      "name": "Referral Nurture",
      "description": "Automated follow-up campaigns that trigger after deals close. Keep in touch with past clients to generate referrals through scheduled email touchpoints. Requires Pro plan.",
      "item": [
        {
          "name": "Get Referral Stats",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/referral/stats",
              "host": ["{{baseUrl}}"],
              "path": ["api", "referral", "stats"]
            },
            "description": "Get referral campaign statistics: total campaigns, active count, completed count, and conversion metrics. Useful for measuring the effectiveness of your post-deal follow-up strategy."
          }
        },
        {
          "name": "List Referral Campaigns",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/referral",
              "host": ["{{baseUrl}}"],
              "path": ["api", "referral"]
            },
            "description": "List all referral campaigns for your agency. Each campaign represents a past client you're nurturing for referrals. Returns contact info, deal value, campaign status, and next scheduled touch."
          }
        },
        {
          "name": "Get Referral Campaign",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/referral/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "referral", ":id"],
              "variable": [
                { "key": "id", "value": "campaign-uuid-here" }
              ]
            },
            "description": "Get a single campaign with all its scheduled and completed touches (email follow-ups). The :id is the campaign UUID from the list. Includes full contact details, deal info, and the timeline of automated touchpoints."
          }
        },
        {
          "name": "Create Referral Campaign",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"contactName\": \"Emily Robertson\",\n  \"contactEmail\": \"emily@example.com\",\n  \"contactPhone\": \"+61 400 123 456\",\n  \"dealValue\": 1200000\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/referral",
              "host": ["{{baseUrl}}"],
              "path": ["api", "referral"]
            },
            "description": "Create a new referral nurture campaign for a past client. Provide the client's contact details and the deal value. The system automatically schedules email follow-ups at configured intervals (e.g., 30 days, 90 days, 6 months, 12 months after deal close)."
          }
        },
        {
          "name": "Update Referral Campaign",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"contactEmail\": \"emily.new@example.com\",\n  \"dealValue\": 1250000\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/referral/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "referral", ":id"],
              "variable": [
                { "key": "id", "value": "campaign-uuid-here" }
              ]
            },
            "description": "Update a campaign's details. The :id is the campaign UUID. You can update contact info and deal value. Changing contact email updates where future follow-up emails are sent."
          }
        },
        {
          "name": "Delete Referral Campaign",
          "request": {
            "method": "DELETE",
            "url": {
              "raw": "{{baseUrl}}/api/referral/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "referral", ":id"],
              "variable": [
                { "key": "id", "value": "campaign-uuid-here" }
              ]
            },
            "description": "Delete a referral campaign and cancel all scheduled follow-ups. The :id is the campaign UUID. Past touches that have already been sent are not affected. This action cannot be undone."
          }
        }
      ]
    },
    {
      "name": "Leases",
      "description": "Manage property leases. Leases are created when you assign an approved tenant to a property via the Screening module (POST /api/screening/:id/assign). You can then update lease terms, track bond status, and manage lease lifecycle.",
      "item": [
        {
          "name": "List All Leases",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/leases",
              "host": ["{{baseUrl}}"],
              "path": ["api", "leases"]
            },
            "description": "List all leases in your agency. Returns tenant details, property info, weekly rent, bond amount, bond status, lease dates, and current status. Sorted by most recently created. Status can be: active, ending_soon, ended, or terminated."
          }
        },
        {
          "name": "List Leases by Property",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/leases/property/:propertyId",
              "host": ["{{baseUrl}}"],
              "path": ["api", "leases", "property", ":propertyId"],
              "variable": [
                { "key": "propertyId", "value": "property-uuid-here" }
              ]
            },
            "description": "List all leases for a specific property. The :propertyId is the property UUID from GET /api/properties. Returns the same lease data as the main list, filtered to one property. Useful for viewing lease history of a property."
          }
        },
        {
          "name": "Get Lease",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/leases/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "leases", ":id"],
              "variable": [
                { "key": "id", "value": "lease-uuid-here" }
              ]
            },
            "description": "Get full details of a single lease. The :id is the lease UUID from the leases list. Returns all lease terms, tenant info, bond tracking, and notes."
          }
        },
        {
          "name": "Update Lease",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"weeklyRent\": 700,\n  \"leaseEnd\": \"2027-06-30\",\n  \"bondStatus\": \"held\",\n  \"status\": \"active\",\n  \"notes\": \"Rent increase effective from renewal date\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/leases/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "leases", ":id"],
              "variable": [
                { "key": "id", "value": "lease-uuid-here" }
              ]
            },
            "description": "Update lease terms and status. The :id is the lease UUID. You can change rent, bond amount, bond status (held/partially_returned/returned), lease end date, status, and notes. When status is changed to \"ended\" or \"terminated\", the linked property is automatically set back to active."
          }
        },
        {
          "name": "Delete Lease",
          "request": {
            "method": "DELETE",
            "url": {
              "raw": "{{baseUrl}}/api/leases/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "leases", ":id"],
              "variable": [
                { "key": "id", "value": "lease-uuid-here" }
              ]
            },
            "description": "Delete a lease permanently. The :id is the lease UUID. The linked property is automatically set back to active status. This action cannot be undone."
          }
        }
      ]
    },
    {
      "name": "Inquiry Forms",
      "description": "Create embeddable inquiry forms for lead capture on your website. Each form has a unique token URL that can be shared or embedded. Submissions automatically create leads in the Response Tracker module.",
      "item": [
        {
          "name": "List Forms",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/forms",
              "host": ["{{baseUrl}}"],
              "path": ["api", "forms"]
            },
            "description": "List all inquiry forms configured for your agency. Each form has a unique token for its public URL, assignment rules, and customizable settings. The form token is used to construct the public inquiry URL."
          }
        },
        {
          "name": "Create Form",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Website Contact Form\",\n  \"assignmentMode\": \"round_robin\",\n  \"roundRobinAgentIds\": [\"agent-uuid-1\", \"agent-uuid-2\"],\n  \"sourceLabel\": \"website-footer\",\n  \"redirectUrl\": \"https://myagency.com/thank-you\",\n  \"notificationEmail\": \"leads@myagency.com\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/forms",
              "host": ["{{baseUrl}}"],
              "path": ["api", "forms"]
            },
            "description": "Create a new inquiry form. The assignmentMode determines how submitted leads are assigned: \"specific\" assigns all leads to one agent (set assignedAgentId from GET /api/agency/agents), \"round_robin\" distributes evenly among selected agents (set roundRobinAgentIds array), \"manual\" leaves leads unassigned. The sourceLabel helps identify where inquiries came from. The redirectUrl is where users go after submitting."
          }
        },
        {
          "name": "Update Form",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Updated Contact Form\",\n  \"assignmentMode\": \"specific\",\n  \"assignedAgentId\": \"agent-uuid-here\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/api/forms/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "forms", ":id"],
              "variable": [
                { "key": "id", "value": "form-uuid-here" }
              ]
            },
            "description": "Update form settings. The :id is the form UUID from the forms list. You can change the name, assignment mode, assigned agents, redirect URL, and notification settings."
          }
        },
        {
          "name": "Delete Form",
          "request": {
            "method": "DELETE",
            "url": {
              "raw": "{{baseUrl}}/api/forms/:id",
              "host": ["{{baseUrl}}"],
              "path": ["api", "forms", ":id"],
              "variable": [
                { "key": "id", "value": "form-uuid-here" }
              ]
            },
            "description": "Delete an inquiry form. The :id is the form UUID. The public form URL will stop working immediately. Existing leads created from this form are not deleted. This action cannot be undone."
          }
        }
      ]
    },
    {
      "name": "Public Endpoints",
      "description": "No authentication required. These endpoints power the public-facing forms and pages — tenant applications, buyer offer forms, inquiry forms, property listings, and seller offer comparison. Use these to embed functionality into your own website.",
      "auth": { "type": "noauth" },
      "item": [
        {
          "name": "Load Tenant Apply Form",
          "request": {
            "auth": { "type": "noauth" },
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/apply/:applyToken",
              "host": ["{{baseUrl}}"],
              "path": ["apply", ":applyToken"],
              "variable": [
                { "key": "applyToken", "value": "your-apply-token" }
              ]
            },
            "description": "Load the tenant application form for an agency. The :applyToken is your agency's apply token, found in the dashboard Screening page (copy the apply link). Returns agency branding (logo, colors) and a list of properties the applicant can select from."
          }
        },
        {
          "name": "Submit Tenant Application",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"fullName\": \"Sarah Mitchell\",\n  \"email\": \"sarah.m@example.com\",\n  \"phone\": \"+61 400 321 654\",\n  \"propertyId\": \"property-uuid-here\",\n  \"employmentStatus\": \"employed\",\n  \"incomeMonthly\": 5800\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/apply/:applyToken",
              "host": ["{{baseUrl}}"],
              "path": ["apply", ":applyToken"],
              "variable": [
                { "key": "applyToken", "value": "your-apply-token" }
              ]
            },
            "description": "Submit a tenant application through the public apply form. The :applyToken is the same token from the GET endpoint above. The application is automatically scored by the AI risk engine and appears in your dashboard Screening page."
          }
        },
        {
          "name": "Load Buyer Offer Form",
          "request": {
            "auth": { "type": "noauth" },
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/offer/:buyerToken",
              "host": ["{{baseUrl}}"],
              "path": ["offer", ":buyerToken"],
              "variable": [
                { "key": "buyerToken", "value": "your-buyer-token" }
              ]
            },
            "description": "Load the buyer offer form for a property. The :buyerToken is auto-generated per property and can be found in the property details on the dashboard. Returns property details and agency branding for the form."
          }
        },
        {
          "name": "Submit Buyer Offer",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"buyerName\": \"James Wilson\",\n  \"buyerEmail\": \"james.w@example.com\",\n  \"buyerPhone\": \"+61 400 789 012\",\n  \"offerPrice\": 875000,\n  \"conditions\": \"Subject to building and pest inspection\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/offer/:buyerToken",
              "host": ["{{baseUrl}}"],
              "path": ["offer", ":buyerToken"],
              "variable": [
                { "key": "buyerToken", "value": "your-buyer-token" }
              ]
            },
            "description": "Submit a buyer offer through the public offer form. The :buyerToken is the same token from the GET endpoint above. The offer appears in your dashboard under the property's offers tab."
          }
        },
        {
          "name": "Load Inquiry Form",
          "request": {
            "auth": { "type": "noauth" },
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/inquiry/:token",
              "host": ["{{baseUrl}}"],
              "path": ["inquiry", ":token"],
              "variable": [
                { "key": "token", "value": "form-token-here" }
              ]
            },
            "description": "Load an inquiry form by its token. The :token is the form token from GET /api/forms. Returns the form name, agency branding, and any custom fields configured for the form."
          }
        },
        {
          "name": "Submit Inquiry",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Chris Anderson\",\n  \"email\": \"chris@example.com\",\n  \"phone\": \"+61 400 456 789\",\n  \"message\": \"I'm interested in properties in the Eastern Suburbs. Please contact me.\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/inquiry/:token",
              "host": ["{{baseUrl}}"],
              "path": ["inquiry", ":token"],
              "variable": [
                { "key": "token", "value": "form-token-here" }
              ]
            },
            "description": "Submit an inquiry through a public form. The :token is the form token. The submission creates a lead in the Response Tracker and assigns it based on the form's assignment rules. An email notification is sent to the configured notification address."
          }
        },
        {
          "name": "Get Public Listings",
          "request": {
            "auth": { "type": "noauth" },
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/listings/:slug",
              "host": ["{{baseUrl}}"],
              "path": ["listings", ":slug"],
              "variable": [
                { "key": "slug", "value": "my-agency-slug" }
              ]
            },
            "description": "Get all public property listings for an agency. The :slug is your agency's URL slug (found in GET /api/agency response). Returns active properties with images, pricing, and basic details. Used to power your public listings page."
          }
        },
        {
          "name": "Get Public Property Detail",
          "request": {
            "auth": { "type": "noauth" },
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/listings/:slug/:propertyId",
              "host": ["{{baseUrl}}"],
              "path": ["listings", ":slug", ":propertyId"],
              "variable": [
                { "key": "slug", "value": "my-agency-slug" },
                { "key": "propertyId", "value": "property-uuid-here" }
              ]
            },
            "description": "Get a single property with full details and all images for public display. The :slug is your agency slug and :propertyId is the property UUID. Used for individual property detail pages on your website."
          }
        },
        {
          "name": "Submit Listing Inquiry",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Lisa Brown\",\n  \"email\": \"lisa@example.com\",\n  \"phone\": \"+61 400 654 321\",\n  \"message\": \"I'd like to schedule an inspection for this property.\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/listings/:slug/:propertyId/inquire",
              "host": ["{{baseUrl}}"],
              "path": ["listings", ":slug", ":propertyId", "inquire"],
              "variable": [
                { "key": "slug", "value": "my-agency-slug" },
                { "key": "propertyId", "value": "property-uuid-here" }
              ]
            },
            "description": "Submit an inquiry from a public property listing page. The :slug is your agency slug and :propertyId is the property UUID. Creates a lead in the Response Tracker linked to the specific property and assigned agent."
          }
        },
        {
          "name": "Load Seller Offer Comparison",
          "request": {
            "auth": { "type": "noauth" },
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/share/:shareToken",
              "host": ["{{baseUrl}}"],
              "path": ["share", ":shareToken"],
              "variable": [
                { "key": "shareToken", "value": "property-share-token" }
              ]
            },
            "description": "Load the seller offer comparison page. The :shareToken is auto-generated per property and included in the property data (from GET /api/properties). Share this URL with sellers so they can view all offers on their property side-by-side and compare prices, conditions, and buyer details."
          }
        },
        {
          "name": "Seller Accept Offer",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"offerId\": \"offer-uuid-here\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/share/:shareToken/accept",
              "host": ["{{baseUrl}}"],
              "path": ["share", ":shareToken", "accept"],
              "variable": [
                { "key": "shareToken", "value": "property-share-token" }
              ]
            },
            "description": "Seller accepts a specific offer from the comparison page. The :shareToken is the same as above. The :offerId is the UUID of the offer the seller wants to accept, visible on the comparison page. This updates the offer status to \"accepted\"."
          }
        }
      ]
    }
  ]
}