{
  "version": 1,
  "operations": [
    {
      "id": "contacts.list",
      "method": "GET",
      "path": "lead-contacts",
      "permission": "view_contacts",
      "parameters": [],
      "write": false,
      "schema": "contacts.list"
    },
    {
      "id": "contacts.get",
      "method": "GET",
      "path": "lead-contacts/{id}",
      "permission": "view_contacts",
      "parameters": [
        "id"
      ],
      "write": false,
      "schema": null
    },
    {
      "id": "contacts.create",
      "method": "POST",
      "path": "lead-contacts",
      "permission": "add_contacts",
      "parameters": [],
      "write": true,
      "schema": "contacts.create"
    },
    {
      "id": "contacts.update",
      "method": "PUT",
      "path": "lead-contacts/{id}",
      "permission": "edit_contacts",
      "parameters": [
        "id"
      ],
      "write": true,
      "schema": "contacts.update"
    },
    {
      "id": "contacts.delete",
      "method": "DELETE",
      "path": "lead-contacts/{id}",
      "permission": "delete_contacts",
      "parameters": [
        "id"
      ],
      "write": true,
      "schema": null
    },
    {
      "id": "inquiries.list",
      "method": "GET",
      "path": "deals",
      "permission": "view_contacts",
      "parameters": [],
      "write": false,
      "schema": "inquiries.list"
    },
    {
      "id": "inquiries.get",
      "method": "GET",
      "path": "deals/{id}",
      "permission": "view_contacts",
      "parameters": [
        "id"
      ],
      "write": false,
      "schema": null
    },
    {
      "id": "inquiries.create",
      "method": "POST",
      "path": "deals",
      "permission": "add_contacts",
      "parameters": [],
      "write": true,
      "schema": "inquiries.create"
    },
    {
      "id": "inquiries.update",
      "method": "PUT",
      "path": "deals/{id}",
      "permission": "edit_contacts",
      "parameters": [
        "id"
      ],
      "write": true,
      "schema": "inquiries.update"
    },
    {
      "id": "inquiries.delete",
      "method": "DELETE",
      "path": "deals/{id}",
      "permission": "delete_contacts",
      "parameters": [
        "id"
      ],
      "write": true,
      "schema": null
    },
    {
      "id": "listings.list",
      "method": "GET",
      "path": "listing",
      "permission": "view_listing",
      "parameters": [],
      "write": false,
      "schema": "listings.list"
    },
    {
      "id": "listings.get",
      "method": "GET",
      "path": "listing/{id}",
      "permission": "view_listing",
      "parameters": [
        "id"
      ],
      "write": false,
      "schema": null
    },
    {
      "id": "listings.create",
      "method": "POST",
      "path": "listing",
      "permission": "add_listing",
      "parameters": [],
      "write": true,
      "schema": "listings.create"
    },
    {
      "id": "listings.update",
      "method": "PUT",
      "path": "listing/{id}",
      "permission": "edit_listing",
      "parameters": [
        "id"
      ],
      "write": true,
      "schema": "listings.update"
    },
    {
      "id": "listings.delete",
      "method": "DELETE",
      "path": "listing/{id}",
      "permission": "delete_listing",
      "parameters": [
        "id"
      ],
      "write": true,
      "schema": null
    },
    {
      "id": "transactions.list",
      "method": "GET",
      "path": "transactions",
      "permission": "view_transaction",
      "parameters": [],
      "write": false,
      "schema": "transactions.list"
    },
    {
      "id": "transactions.get",
      "method": "GET",
      "path": "transactions/{id}",
      "permission": "view_transaction",
      "parameters": [
        "id"
      ],
      "write": false,
      "schema": null
    },
    {
      "id": "transactions.create",
      "method": "POST",
      "path": "transactions",
      "permission": "add_transaction",
      "parameters": [],
      "write": true,
      "schema": "transactions.create"
    },
    {
      "id": "transactions.update",
      "method": "PUT",
      "path": "transactions/{id}",
      "permission": "edit_transaction",
      "parameters": [
        "id"
      ],
      "write": true,
      "schema": "transactions.update"
    },
    {
      "id": "transactions.delete",
      "method": "DELETE",
      "path": "transactions/{id}",
      "permission": "delete_transaction",
      "parameters": [
        "id"
      ],
      "write": true,
      "schema": null
    },
    {
      "id": "contacts.notes.list",
      "method": "GET",
      "path": "lead-contact/{entity_id}/notes",
      "permission": "view_contact_followups",
      "parameters": [
        "entity_id"
      ],
      "write": false,
      "schema": "notes.list"
    },
    {
      "id": "contacts.notes.get",
      "method": "GET",
      "path": "lead-contact/{entity_id}/notes/{id}",
      "permission": "view_contact_followups",
      "parameters": [
        "entity_id",
        "id"
      ],
      "write": false,
      "schema": null
    },
    {
      "id": "contacts.notes.create",
      "method": "POST",
      "path": "lead-contact/{entity_id}/notes",
      "permission": "add_contact_followups",
      "parameters": [
        "entity_id"
      ],
      "write": true,
      "schema": "notes.create"
    },
    {
      "id": "contacts.notes.update",
      "method": "PUT",
      "path": "lead-contact/{entity_id}/notes/{id}",
      "permission": "edit_contact_followups",
      "parameters": [
        "entity_id",
        "id"
      ],
      "write": true,
      "schema": "notes.update"
    },
    {
      "id": "contacts.notes.delete",
      "method": "DELETE",
      "path": "lead-contact/{entity_id}/notes/{id}",
      "permission": "delete_contact_followups",
      "parameters": [
        "entity_id",
        "id"
      ],
      "write": true,
      "schema": null
    },
    {
      "id": "contacts.follow_ups.list",
      "method": "GET",
      "path": "lead-contact/{entity_id}/follow-ups",
      "permission": "view_contact_followups",
      "parameters": [
        "entity_id"
      ],
      "write": false,
      "schema": "follow_ups.list"
    },
    {
      "id": "contacts.follow_ups.get",
      "method": "GET",
      "path": "lead-contact/{entity_id}/follow-ups/{id}",
      "permission": "view_contact_followups",
      "parameters": [
        "entity_id",
        "id"
      ],
      "write": false,
      "schema": null
    },
    {
      "id": "contacts.follow_ups.create",
      "method": "POST",
      "path": "lead-contact/{entity_id}/follow-ups",
      "permission": "add_contact_followups",
      "parameters": [
        "entity_id"
      ],
      "write": true,
      "schema": "follow_ups.create"
    },
    {
      "id": "contacts.follow_ups.update",
      "method": "PUT",
      "path": "lead-contact/{entity_id}/follow-ups/{id}",
      "permission": "edit_contact_followups",
      "parameters": [
        "entity_id",
        "id"
      ],
      "write": true,
      "schema": "follow_ups.update"
    },
    {
      "id": "contacts.follow_ups.delete",
      "method": "DELETE",
      "path": "lead-contact/{entity_id}/follow-ups/{id}",
      "permission": "delete_contact_followups",
      "parameters": [
        "entity_id",
        "id"
      ],
      "write": true,
      "schema": null
    },
    {
      "id": "contacts.follow_ups.status",
      "method": "PATCH",
      "path": "lead-contact/{entity_id}/follow-ups/{id}/status",
      "permission": "edit_contact_followups",
      "parameters": [
        "entity_id",
        "id"
      ],
      "write": true,
      "schema": "follow_ups.status"
    },
    {
      "id": "listings.notes.list",
      "method": "GET",
      "path": "listing/{entity_id}/notes",
      "permission": "view_listing_note",
      "parameters": [
        "entity_id"
      ],
      "write": false,
      "schema": "notes.list"
    },
    {
      "id": "listings.notes.get",
      "method": "GET",
      "path": "listing/{entity_id}/notes/{id}",
      "permission": "view_listing_note",
      "parameters": [
        "entity_id",
        "id"
      ],
      "write": false,
      "schema": null
    },
    {
      "id": "listings.notes.create",
      "method": "POST",
      "path": "listing/{entity_id}/notes",
      "permission": "add_listing_note",
      "parameters": [
        "entity_id"
      ],
      "write": true,
      "schema": "notes.create"
    },
    {
      "id": "listings.notes.update",
      "method": "PUT",
      "path": "listing/{entity_id}/notes/{id}",
      "permission": "edit_listing_note",
      "parameters": [
        "entity_id",
        "id"
      ],
      "write": true,
      "schema": "notes.update"
    },
    {
      "id": "listings.notes.delete",
      "method": "DELETE",
      "path": "listing/{entity_id}/notes/{id}",
      "permission": "delete_listing_note",
      "parameters": [
        "entity_id",
        "id"
      ],
      "write": true,
      "schema": null
    },
    {
      "id": "listings.follow_ups.list",
      "method": "GET",
      "path": "listing/{entity_id}/follow-ups",
      "permission": "view_listing_follow_up",
      "parameters": [
        "entity_id"
      ],
      "write": false,
      "schema": "follow_ups.list"
    },
    {
      "id": "listings.follow_ups.get",
      "method": "GET",
      "path": "listing/{entity_id}/follow-ups/{id}",
      "permission": "view_listing_follow_up",
      "parameters": [
        "entity_id",
        "id"
      ],
      "write": false,
      "schema": null
    },
    {
      "id": "listings.follow_ups.create",
      "method": "POST",
      "path": "listing/{entity_id}/follow-ups",
      "permission": "add_listing_follow_up",
      "parameters": [
        "entity_id"
      ],
      "write": true,
      "schema": "follow_ups.create"
    },
    {
      "id": "listings.follow_ups.update",
      "method": "PUT",
      "path": "listing/{entity_id}/follow-ups/{id}",
      "permission": "edit_listing_follow_up",
      "parameters": [
        "entity_id",
        "id"
      ],
      "write": true,
      "schema": "follow_ups.update"
    },
    {
      "id": "listings.follow_ups.delete",
      "method": "DELETE",
      "path": "listing/{entity_id}/follow-ups/{id}",
      "permission": "delete_listing_follow_up",
      "parameters": [
        "entity_id",
        "id"
      ],
      "write": true,
      "schema": null
    },
    {
      "id": "listings.follow_ups.status",
      "method": "PATCH",
      "path": "listing/{entity_id}/follow-ups/{id}/status",
      "permission": "edit_listing_follow_up",
      "parameters": [
        "entity_id",
        "id"
      ],
      "write": true,
      "schema": "follow_ups.status"
    },
    {
      "id": "contacts.stage",
      "method": "PATCH",
      "path": "lead-contacts/{id}/stage",
      "permission": "edit_contacts",
      "parameters": [
        "id"
      ],
      "write": true,
      "schema": "contacts.stage"
    },
    {
      "id": "inquiries.stage",
      "method": "PATCH",
      "path": "deals/{id}/stage",
      "permission": "edit_contacts",
      "parameters": [
        "id"
      ],
      "write": true,
      "schema": "inquiries.stage"
    },
    {
      "id": "reports.agents",
      "method": "GET",
      "path": "reports/workspace/agents",
      "permission": "view_agent_activity_report",
      "parameters": [],
      "write": false,
      "schema": "reports"
    },
    {
      "id": "reports.pipeline",
      "method": "GET",
      "path": "reports/workspace/pipeline",
      "permission": "view_pipeline_report",
      "parameters": [],
      "write": false,
      "schema": "reports"
    },
    {
      "id": "reports.listings",
      "method": "GET",
      "path": "reports/workspace/listings",
      "permission": "view_listing_performance_report",
      "parameters": [],
      "write": false,
      "schema": "reports"
    },
    {
      "id": "reports.transactions",
      "method": "GET",
      "path": "reports/workspace/transactions",
      "permission": "view_transaction_report",
      "parameters": [],
      "write": false,
      "schema": "reports"
    },
    {
      "id": "reports.outreach",
      "method": "GET",
      "path": "reports/workspace/outreach",
      "permission": "view_outreach_report",
      "parameters": [],
      "write": false,
      "schema": "reports"
    },
    {
      "id": "lookups.lead_sources",
      "method": "GET",
      "path": "lookup/lead-sources",
      "permission": "view_contacts",
      "parameters": [],
      "write": false,
      "schema": "lookups.lead_sources"
    },
    {
      "id": "lookups.contact_stages",
      "method": "GET",
      "path": "lookup/contact-stages",
      "permission": "view_contacts",
      "parameters": [],
      "write": false,
      "schema": "lookups.contact_stages"
    },
    {
      "id": "lookups.pipeline_stages",
      "method": "GET",
      "path": "lookup/pipeline-stages",
      "permission": "view_contacts",
      "parameters": [],
      "write": false,
      "schema": "lookups.pipeline_stages"
    },
    {
      "id": "lookups.communication_preferences",
      "method": "GET",
      "path": "lookup/communication-preferences",
      "permission": "view_contacts",
      "parameters": [],
      "write": false,
      "schema": "lookups.communication_preferences"
    },
    {
      "id": "lookups.lead_priority",
      "method": "GET",
      "path": "lookup/lead-priority",
      "permission": "view_contacts",
      "parameters": [],
      "write": false,
      "schema": "lookups.lead_priority"
    },
    {
      "id": "lookups.listing_sources",
      "method": "GET",
      "path": "lookup/listing-sources",
      "permission": "view_listing",
      "parameters": [],
      "write": false,
      "schema": "lookups.listing_sources"
    },
    {
      "id": "lookups.listing_types",
      "method": "GET",
      "path": "lookup/listing-types",
      "permission": "view_listing",
      "parameters": [],
      "write": false,
      "schema": "lookups.listing_types"
    },
    {
      "id": "lookups.amenities",
      "method": "GET",
      "path": "lookup/amenities",
      "permission": "view_listing",
      "parameters": [],
      "write": false,
      "schema": "lookups.amenities"
    },
    {
      "id": "lookups.developers",
      "method": "GET",
      "path": "lookup/developers",
      "permission": "view_listing",
      "parameters": [],
      "write": false,
      "schema": "lookups.developers"
    },
    {
      "id": "lookups.employees",
      "method": "GET",
      "path": "lookup/employees",
      "permission": "view_employees",
      "parameters": [],
      "write": false,
      "schema": "lookups.employees"
    }
  ],
  "schemas": {
    "contacts.create": [
      {
        "name": "first_name",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "string",
          "min:1",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "last_name",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "string",
          "min:1",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "email",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "email"
        ],
        "description": "Must be available and unique within your company; normalized before validation."
      },
      {
        "name": "primary_phone",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "secondary_phone",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "country_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists:countries,id"
        ],
        "description": ""
      },
      {
        "name": "preferred_languages",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "preferred_languages.*",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists:language_settings,id"
        ],
        "description": ""
      },
      {
        "name": "communication_preferences",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "communication_preferences.*",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "in:email,whatsapp,phone,text,sms"
        ],
        "description": ""
      },
      {
        "name": "date_of_birth",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "date"
        ],
        "description": ""
      },
      {
        "name": "gender",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "in:male,female"
        ],
        "description": ""
      },
      {
        "name": "marital_status",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "in:single,married,engaged,divorced,widowed,separated,other"
        ],
        "description": ""
      },
      {
        "name": "occupation",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "company_name",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "address",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "internal_notes",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "assigned_to",
        "type": "integer",
        "required": "Required",
        "rules": [
          "required",
          "integer",
          "exists_in_company:users"
        ],
        "description": ""
      },
      {
        "name": "source_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists_in_company:lead_sources"
        ],
        "description": ""
      },
      {
        "name": "contact_stage_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists_in_company:contact_stages"
        ],
        "description": ""
      },
      {
        "name": "priority",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "in:high,medium,low"
        ],
        "description": ""
      },
      {
        "name": "database_record_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists_in_company:cold_calling_leads"
        ],
        "description": ""
      },
      {
        "name": "inquiry",
        "type": "object",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": "Optional initial inquiry. If supplied, all inquiry creation rules apply except lead_contact_id."
      },
      {
        "name": "custom_fields_data",
        "type": "object",
        "required": "Optional",
        "rules": [
          "array"
        ],
        "description": "Object keyed by field_<id>. Required fields depend on your installation. URL fields require a URL; percentages are 0–100. File custom fields cannot be uploaded through this JSON API."
      },
      {
        "name": "inquiry.name",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "max:255"
        ],
        "description": "Applies only when inquiry is supplied. "
      },
      {
        "name": "inquiry.intent",
        "type": "string",
        "required": "Required when inquiry is supplied",
        "rules": [
          "required",
          "string",
          "in:buy,rent,sell,investor,other"
        ],
        "description": "Applies only when inquiry is supplied. "
      },
      {
        "name": "inquiry.listing_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists:listings,id"
        ],
        "description": "Applies only when inquiry is supplied. "
      },
      {
        "name": "inquiry.budget_min",
        "type": "number",
        "required": "Optional",
        "rules": [
          "nullable",
          "numeric",
          "min:0"
        ],
        "description": "Applies only when inquiry is supplied. "
      },
      {
        "name": "inquiry.budget_max",
        "type": "number",
        "required": "Optional",
        "rules": [
          "nullable",
          "numeric",
          "min:0"
        ],
        "description": "Applies only when inquiry is supplied. "
      },
      {
        "name": "inquiry.bedrooms",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "min:0"
        ],
        "description": "Applies only when inquiry is supplied. "
      },
      {
        "name": "inquiry.bathrooms",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "min:0"
        ],
        "description": "Applies only when inquiry is supplied. "
      },
      {
        "name": "inquiry.preferred_locations",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": "Applies only when inquiry is supplied. "
      },
      {
        "name": "inquiry.preferred_locations.*.place_id",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": "Applies only when inquiry is supplied. "
      },
      {
        "name": "inquiry.preferred_locations.*.address",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": "Applies only when inquiry is supplied. "
      },
      {
        "name": "inquiry.preferred_locations.*.lat",
        "type": "number",
        "required": "Optional",
        "rules": [
          "nullable",
          "numeric"
        ],
        "description": "Applies only when inquiry is supplied. "
      },
      {
        "name": "inquiry.preferred_locations.*.long",
        "type": "number",
        "required": "Optional",
        "rules": [
          "nullable",
          "numeric"
        ],
        "description": "Applies only when inquiry is supplied. "
      },
      {
        "name": "inquiry.property_types",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": "Applies only when inquiry is supplied. "
      },
      {
        "name": "inquiry.property_types.*",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "integer",
          "exists:listing_types,id"
        ],
        "description": "Applies only when inquiry is supplied. "
      },
      {
        "name": "inquiry.preferred_developers",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": "Applies only when inquiry is supplied. "
      },
      {
        "name": "inquiry.preferred_developers.*",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "integer",
          "exists:developers,id"
        ],
        "description": "Applies only when inquiry is supplied. "
      },
      {
        "name": "inquiry.source_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists:lead_sources,id"
        ],
        "description": "Applies only when inquiry is supplied. "
      },
      {
        "name": "inquiry.assigned_to",
        "type": "integer",
        "required": "Required when inquiry is supplied",
        "rules": [
          "required",
          "integer",
          "integer",
          "exists_in_company:users"
        ],
        "description": "Applies only when inquiry is supplied. "
      },
      {
        "name": "inquiry.pipeline_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists:lead_pipelines,id"
        ],
        "description": "Applies only when inquiry is supplied. "
      },
      {
        "name": "inquiry.pipeline_stage_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists:pipeline_stages,id"
        ],
        "description": "Applies only when inquiry is supplied. "
      },
      {
        "name": "inquiry.note",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": "Applies only when inquiry is supplied. "
      },
      {
        "name": "inquiry.custom_fields_data",
        "type": "object",
        "required": "Optional",
        "rules": [
          "array"
        ],
        "description": "Applies only when inquiry is supplied. Object keyed by field_<id>. Required fields depend on your installation. URL fields require a URL; percentages are 0–100. File custom fields cannot be uploaded through this JSON API."
      }
    ],
    "contacts.update": [
      {
        "name": "first_name",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "string",
          "min:1",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "last_name",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "string",
          "min:1",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "email",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "email"
        ],
        "description": "Must be available and unique within your company if changed."
      },
      {
        "name": "primary_phone",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "secondary_phone",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "country_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists:countries,id"
        ],
        "description": ""
      },
      {
        "name": "preferred_languages",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "preferred_languages.*",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists:language_settings,id"
        ],
        "description": ""
      },
      {
        "name": "communication_preferences",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "communication_preferences.*",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "in:email,whatsapp,phone,text,sms"
        ],
        "description": ""
      },
      {
        "name": "date_of_birth",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "date"
        ],
        "description": ""
      },
      {
        "name": "gender",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "in:male,female"
        ],
        "description": ""
      },
      {
        "name": "marital_status",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "in:single,married,engaged,divorced,widowed,separated,other"
        ],
        "description": ""
      },
      {
        "name": "occupation",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "company_name",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "address",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "internal_notes",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "assigned_to",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "integer",
          "integer",
          "exists_in_company:users"
        ],
        "description": ""
      },
      {
        "name": "source_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists_in_company:lead_sources"
        ],
        "description": ""
      },
      {
        "name": "contact_stage_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists_in_company:contact_stages"
        ],
        "description": ""
      },
      {
        "name": "priority",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "in:high,medium,low"
        ],
        "description": ""
      },
      {
        "name": "custom_fields_data",
        "type": "object",
        "required": "Optional",
        "rules": [
          "array"
        ],
        "description": "Object keyed by field_<id>. Required fields depend on your installation. URL fields require a URL; percentages are 0–100. File custom fields cannot be uploaded through this JSON API."
      }
    ],
    "listings.create": [
      {
        "name": "title",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "string"
        ],
        "description": ""
      },
      {
        "name": "description",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "string"
        ],
        "description": ""
      },
      {
        "name": "bathrooms",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer"
        ],
        "description": ""
      },
      {
        "name": "is_exclusive",
        "type": "boolean",
        "required": "Optional",
        "rules": [
          "nullable",
          "boolean"
        ],
        "description": ""
      },
      {
        "name": "bedrooms",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer"
        ],
        "description": ""
      },
      {
        "name": "parkings",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer"
        ],
        "description": ""
      },
      {
        "name": "price",
        "type": "number",
        "required": "Optional",
        "rules": [
          "nullable",
          "numeric"
        ],
        "description": ""
      },
      {
        "name": "size",
        "type": "number",
        "required": "Conditional",
        "rules": [
          "numeric",
          "dynamic"
        ],
        "description": "Required unless the listing type is land/agricultural when those types are configured; otherwise nullable."
      },
      {
        "name": "plot_size",
        "type": "number",
        "required": "Optional",
        "rules": [
          "nullable",
          "numeric"
        ],
        "description": ""
      },
      {
        "name": "total_floors",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "min:1"
        ],
        "description": ""
      },
      {
        "name": "status",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "string",
          "in:draft,active,under_negotiation,reserved,finalizing,closed,archived"
        ],
        "description": ""
      },
      {
        "name": "furnished",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "in:furnished,semi-furnished,unfurnished"
        ],
        "description": ""
      },
      {
        "name": "developer_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists_in_company:developers"
        ],
        "description": ""
      },
      {
        "name": "build_year",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "date_format:Y"
        ],
        "description": ""
      },
      {
        "name": "images",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "images.*",
        "type": "string|object",
        "required": "Optional",
        "rules": [
          "nullable",
          "dynamic"
        ],
        "description": "Existing media reference: string or object with id, url, or key. New uploads are not supported by the automation gateway. Use the CRM to upload media."
      },
      {
        "name": "apply_watermark",
        "type": "boolean",
        "required": "Optional",
        "rules": [
          "nullable",
          "boolean"
        ],
        "description": ""
      },
      {
        "name": "documents",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "documents.*",
        "type": "file",
        "required": "Optional",
        "rules": [
          "nullable",
          "file",
          "mimes:ppt,pptx,doc,docx,pdf,xls,xlsx",
          "max:10240"
        ],
        "description": " Binary upload is not supported by the JSON automation gateway; use the CRM upload interface."
      },
      {
        "name": "default_image",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "listing_purpose",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "string",
          "in:sell,rent"
        ],
        "description": ""
      },
      {
        "name": "floor_number",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer"
        ],
        "description": ""
      },
      {
        "name": "unit_number",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "source_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "integer",
          "exists_in_company:listing_sources"
        ],
        "description": ""
      },
      {
        "name": "default_period",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "rent_frequency",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "in:daily,weekly,monthly,yearly,quarterly,half_yearly"
        ],
        "description": ""
      },
      {
        "name": "video_link",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "url"
        ],
        "description": ""
      },
      {
        "name": "vr_link",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "url"
        ],
        "description": ""
      },
      {
        "name": "listing_type_id",
        "type": "integer",
        "required": "Required",
        "rules": [
          "required",
          "integer",
          "exists:listing_types,id"
        ],
        "description": ""
      },
      {
        "name": "location",
        "type": "object",
        "required": "Required",
        "rules": [
          "required",
          "array"
        ],
        "description": ""
      },
      {
        "name": "location.address",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "string"
        ],
        "description": ""
      },
      {
        "name": "location.long",
        "type": "number",
        "required": "Required",
        "rules": [
          "required",
          "numeric"
        ],
        "description": ""
      },
      {
        "name": "location.lat",
        "type": "number",
        "required": "Required",
        "rules": [
          "required",
          "numeric"
        ],
        "description": ""
      },
      {
        "name": "location.place_id",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "string"
        ],
        "description": ""
      },
      {
        "name": "owner_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists_in_company:leads"
        ],
        "description": ""
      },
      {
        "name": "assigned_to_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists_in_company:users"
        ],
        "description": ""
      },
      {
        "name": "amenities",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "amenities.*",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "integer",
          "exists_in_company:amenities"
        ],
        "description": ""
      },
      {
        "name": "floor_plans",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "floor_plans.*.title",
        "type": "string",
        "required": "Conditional",
        "rules": [
          "required_with:floor_plans",
          "string"
        ],
        "description": ""
      },
      {
        "name": "floor_plans.*.bedrooms",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer"
        ],
        "description": ""
      },
      {
        "name": "floor_plans.*.price",
        "type": "number",
        "required": "Optional",
        "rules": [
          "nullable",
          "numeric"
        ],
        "description": ""
      },
      {
        "name": "floor_plans.*.size",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "floor_plans.*.images",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "floor_plans.*.images.*",
        "type": "image",
        "required": "Optional",
        "rules": [
          "nullable",
          "image",
          "mimes:jpeg,jpg,png,webp,gif,svg",
          "max:10240"
        ],
        "description": " Binary upload is not supported by the JSON automation gateway; use the CRM upload interface."
      },
      {
        "name": "database_record_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists:cold_calling_leads,id"
        ],
        "description": ""
      },
      {
        "name": "custom_fields_data",
        "type": "object",
        "required": "Optional",
        "rules": [
          "array"
        ],
        "description": "Object keyed by field_<id>. Required fields depend on your installation. URL fields require a URL; percentages are 0–100. File custom fields cannot be uploaded through this JSON API."
      }
    ],
    "listings.update": [
      {
        "name": "title",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "string"
        ],
        "description": ""
      },
      {
        "name": "description",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "string"
        ],
        "description": ""
      },
      {
        "name": "bathrooms",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer"
        ],
        "description": ""
      },
      {
        "name": "is_exclusive",
        "type": "boolean",
        "required": "Optional",
        "rules": [
          "nullable",
          "boolean"
        ],
        "description": ""
      },
      {
        "name": "bedrooms",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer"
        ],
        "description": ""
      },
      {
        "name": "parkings",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer"
        ],
        "description": ""
      },
      {
        "name": "price",
        "type": "number",
        "required": "Optional",
        "rules": [
          "nullable",
          "numeric"
        ],
        "description": ""
      },
      {
        "name": "size",
        "type": "number",
        "required": "Conditional",
        "rules": [
          "numeric",
          "dynamic"
        ],
        "description": "Required for non-land listings when size or listing_type_id is supplied; otherwise nullable."
      },
      {
        "name": "plot_size",
        "type": "number",
        "required": "Optional",
        "rules": [
          "nullable",
          "numeric"
        ],
        "description": ""
      },
      {
        "name": "total_floors",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "min:1"
        ],
        "description": ""
      },
      {
        "name": "status",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "string",
          "in:draft,active,under_negotiation,reserved,finalizing,closed,archived"
        ],
        "description": ""
      },
      {
        "name": "furnished",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "in:furnished,semi-furnished,unfurnished"
        ],
        "description": ""
      },
      {
        "name": "developer_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists_in_company:developers"
        ],
        "description": ""
      },
      {
        "name": "build_year",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "date_format:Y"
        ],
        "description": ""
      },
      {
        "name": "documents",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "documents.*",
        "type": "file",
        "required": "Optional",
        "rules": [
          "nullable",
          "file",
          "mimes:ppt,pptx,doc,docx,pdf,xls,xlsx",
          "max:10240"
        ],
        "description": " Binary upload is not supported by the JSON automation gateway; use the CRM upload interface."
      },
      {
        "name": "images",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "images.*",
        "type": "string|object",
        "required": "Optional",
        "rules": [
          "nullable",
          "dynamic"
        ],
        "description": "Existing media reference: string or object with id, url, or key. New uploads are not supported by the automation gateway. Use the CRM to upload media."
      },
      {
        "name": "apply_watermark",
        "type": "boolean",
        "required": "Optional",
        "rules": [
          "nullable",
          "boolean"
        ],
        "description": ""
      },
      {
        "name": "default_image",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "listing_purpose",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "string",
          "in:sell,rent"
        ],
        "description": ""
      },
      {
        "name": "floor_number",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer"
        ],
        "description": ""
      },
      {
        "name": "unit_number",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "source_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "integer",
          "exists_in_company:listing_sources"
        ],
        "description": ""
      },
      {
        "name": "default_period",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "rent_frequency",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "in:daily,weekly,monthly,yearly,quarterly,half_yearly"
        ],
        "description": ""
      },
      {
        "name": "video_link",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "url"
        ],
        "description": ""
      },
      {
        "name": "vr_link",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "url"
        ],
        "description": ""
      },
      {
        "name": "listing_type_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "integer",
          "exists:listing_types,id"
        ],
        "description": ""
      },
      {
        "name": "location",
        "type": "object",
        "required": "Required",
        "rules": [
          "required",
          "array"
        ],
        "description": ""
      },
      {
        "name": "location.address",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "string"
        ],
        "description": ""
      },
      {
        "name": "location.long",
        "type": "number",
        "required": "Required",
        "rules": [
          "required",
          "numeric"
        ],
        "description": ""
      },
      {
        "name": "location.lat",
        "type": "number",
        "required": "Required",
        "rules": [
          "required",
          "numeric"
        ],
        "description": ""
      },
      {
        "name": "location.place_id",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "string"
        ],
        "description": ""
      },
      {
        "name": "owner_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists_in_company:leads"
        ],
        "description": ""
      },
      {
        "name": "assigned_to",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists_in_company:users"
        ],
        "description": ""
      },
      {
        "name": "amenities",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "amenities.*",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "integer",
          "exists_in_company:amenities"
        ],
        "description": ""
      },
      {
        "name": "floor_plans",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "floor_plans.*.id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists:floor_plans,id"
        ],
        "description": ""
      },
      {
        "name": "floor_plans.*.title",
        "type": "string",
        "required": "Conditional",
        "rules": [
          "required_with:floor_plans",
          "string"
        ],
        "description": ""
      },
      {
        "name": "floor_plans.*.bedrooms",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer"
        ],
        "description": ""
      },
      {
        "name": "floor_plans.*.price",
        "type": "number",
        "required": "Optional",
        "rules": [
          "nullable",
          "numeric"
        ],
        "description": ""
      },
      {
        "name": "floor_plans.*.size",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "floor_plans.*.images",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "floor_plans.*.images.*",
        "type": "string|object",
        "required": "Optional",
        "rules": [
          "nullable",
          "dynamic"
        ],
        "description": "Existing media reference: string or object with id, url, or key; no binary uploads."
      }
    ],
    "transactions.create": [
      {
        "name": "transaction_source",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "in:internal,external_listing,external_client"
        ],
        "description": ""
      },
      {
        "name": "company_role",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "in:listing_agent,buyers_agent,tenants_agent,dual_agent,referral_only,broker"
        ],
        "description": ""
      },
      {
        "name": "transaction_type",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "in:sale,rental"
        ],
        "description": ""
      },
      {
        "name": "payment_method",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "in:cash,cheque"
        ],
        "description": ""
      },
      {
        "name": "status",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "in:draft,pending,in_progress,completed,closed,cancelled"
        ],
        "description": ""
      },
      {
        "name": "currency",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "size:3"
        ],
        "description": ""
      },
      {
        "name": "transaction_amount",
        "type": "number",
        "required": "Required",
        "rules": [
          "required",
          "numeric",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "commission_rate",
        "type": "number",
        "required": "Required",
        "rules": [
          "required",
          "numeric",
          "min:0",
          "max:100"
        ],
        "description": ""
      },
      {
        "name": "commission_amount",
        "type": "number",
        "required": "Required",
        "rules": [
          "required",
          "numeric",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "transaction_date",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "date"
        ],
        "description": ""
      },
      {
        "name": "external_listing",
        "type": "object",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "external_listing.address",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:500"
        ],
        "description": ""
      },
      {
        "name": "external_listing.city",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:100"
        ],
        "description": ""
      },
      {
        "name": "external_listing.bedrooms",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "integer",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "external_listing.bathrooms",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "integer",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "external_listing.size",
        "type": "number",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "numeric",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "external_listing.listing_type",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "integer",
          "exists:listing_types,id"
        ],
        "description": ""
      },
      {
        "name": "external_listing.company",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "external_listing.agent",
        "type": "object",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "external_listing.agent.name",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "external_listing.agent.phone",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:20"
        ],
        "description": ""
      },
      {
        "name": "external_listing.agent.email",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "email",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "external_listing.agent.mls",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:100"
        ],
        "description": ""
      },
      {
        "name": "external_client",
        "type": "object",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "external_client.name",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "external_client.company",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "external_client.email",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "email",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "external_client.phone",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:20"
        ],
        "description": ""
      },
      {
        "name": "external_client.client_type",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:100"
        ],
        "description": ""
      },
      {
        "name": "external_client.agent",
        "type": "object",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "external_client.agent.name",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "external_client.agent.phone",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:20"
        ],
        "description": ""
      },
      {
        "name": "external_client.agent.email",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "email",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "rental_information",
        "type": "object",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "rental_information.rental_start_date",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "date"
        ],
        "description": ""
      },
      {
        "name": "rental_information.rental_end_date",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "date",
          "after_or_equal:rental_information.rental_start_date"
        ],
        "description": ""
      },
      {
        "name": "rental_information.lease_term_months",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "integer",
          "min:1",
          "max:120"
        ],
        "description": ""
      },
      {
        "name": "rental_information.monthly_rent",
        "type": "number",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "numeric",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "rental_information.security_deposit",
        "type": "number",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "numeric",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "internal_listing_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "exists:listings,id"
        ],
        "description": ""
      },
      {
        "name": "lead_contact_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "exists:leads,id"
        ],
        "description": ""
      },
      {
        "name": "deal_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "exists:deals,id"
        ],
        "description": ""
      },
      {
        "name": "cheques",
        "type": "array",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "array",
          "min:1"
        ],
        "description": ""
      },
      {
        "name": "cheques.*.cheque_number",
        "type": "string",
        "required": "Conditional",
        "rules": [
          "required_with:cheques",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "cheques.*.amount",
        "type": "number",
        "required": "Conditional",
        "rules": [
          "required_with:cheques",
          "numeric",
          "min:0.01"
        ],
        "description": ""
      },
      {
        "name": "cheques.*.due_date",
        "type": "string",
        "required": "Conditional",
        "rules": [
          "required_with:cheques",
          "date"
        ],
        "description": ""
      },
      {
        "name": "cheques.*.status",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "in:scheduled,deposited,paid,cleared,bounced,replaced,cancelled"
        ],
        "description": ""
      },
      {
        "name": "cheques.*.tenant_email",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "email",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "cheques.*.notes",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "cheques.*.replaced_by_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "integer",
          "exists:transaction_cheques,id"
        ],
        "description": ""
      },
      {
        "name": "commission_splits",
        "type": "array",
        "required": "Required",
        "rules": [
          "required",
          "array",
          "min:1"
        ],
        "description": ""
      },
      {
        "name": "commission_splits.*.id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "integer"
        ],
        "description": ""
      },
      {
        "name": "commission_splits.*.recipient_role",
        "type": "string",
        "required": "Required for each item",
        "rules": [
          "required",
          "in:listing_agent,buyers_agent,tenants_agent,transaction_coordinator,referral_agent,broker_fee,administrative_fee,external_cooperation,custom"
        ],
        "description": ""
      },
      {
        "name": "commission_splits.*.internal_agent_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "exists:users,id"
        ],
        "description": ""
      },
      {
        "name": "commission_splits.*.recipient_name",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "commission_splits.*.recipient_company",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "commission_splits.*.split_percentage",
        "type": "number",
        "required": "Required for each item",
        "rules": [
          "required",
          "numeric",
          "min:0",
          "max:100"
        ],
        "description": ""
      },
      {
        "name": "commission_splits.*.split_amount",
        "type": "number",
        "required": "Required for each item",
        "rules": [
          "required",
          "numeric",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "commission_splits.*.is_external_payment",
        "type": "boolean",
        "required": "Optional",
        "rules": [
          "sometimes",
          "boolean"
        ],
        "description": ""
      }
    ],
    "transactions.update": [
      {
        "name": "transaction_source",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "in:internal,external_listing,external_client"
        ],
        "description": ""
      },
      {
        "name": "company_role",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "in:listing_agent,buyers_agent,tenants_agent,dual_agent,referral_only,broker"
        ],
        "description": ""
      },
      {
        "name": "transaction_type",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "in:sale,rental"
        ],
        "description": ""
      },
      {
        "name": "payment_method",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "in:cash,cheque"
        ],
        "description": ""
      },
      {
        "name": "status",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "in:draft,pending,in_progress,completed,closed,cancelled"
        ],
        "description": ""
      },
      {
        "name": "currency",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "size:3"
        ],
        "description": ""
      },
      {
        "name": "transaction_amount",
        "type": "number",
        "required": "Optional",
        "rules": [
          "sometimes",
          "numeric",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "commission_rate",
        "type": "number",
        "required": "Optional",
        "rules": [
          "sometimes",
          "numeric",
          "min:0",
          "max:100"
        ],
        "description": ""
      },
      {
        "name": "commission_amount",
        "type": "number",
        "required": "Optional",
        "rules": [
          "sometimes",
          "numeric",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "transaction_date",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "date"
        ],
        "description": ""
      },
      {
        "name": "cancellation_reason",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:5000"
        ],
        "description": ""
      },
      {
        "name": "external_listing",
        "type": "object",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "external_listing.address",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:100"
        ],
        "description": ""
      },
      {
        "name": "external_listing.city",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:100"
        ],
        "description": ""
      },
      {
        "name": "external_listing.bedrooms",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "integer",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "external_listing.bathrooms",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "integer",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "external_listing.size",
        "type": "number",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "numeric",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "external_listing.listing_type",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "integer",
          "exists:listing_types,id"
        ],
        "description": ""
      },
      {
        "name": "external_listing.company",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "external_listing.agent",
        "type": "object",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "external_listing.agent.name",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "external_listing.agent.phone",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:20"
        ],
        "description": ""
      },
      {
        "name": "external_listing.agent.email",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "email",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "external_listing.agent.mls",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:100"
        ],
        "description": ""
      },
      {
        "name": "external_client",
        "type": "object",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "external_client.name",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "external_client.company",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "external_client.email",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "email",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "external_client.phone",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:20"
        ],
        "description": ""
      },
      {
        "name": "external_client.client_type",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:100"
        ],
        "description": ""
      },
      {
        "name": "external_client.agent",
        "type": "object",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "external_client.agent.name",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "external_client.agent.phone",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:20"
        ],
        "description": ""
      },
      {
        "name": "external_client.agent.email",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "email",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "rental_information",
        "type": "object",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "rental_information.rental_start_date",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "date"
        ],
        "description": ""
      },
      {
        "name": "rental_information.rental_end_date",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "date",
          "after_or_equal:rental_information.rental_start_date"
        ],
        "description": ""
      },
      {
        "name": "rental_information.lease_term_months",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "integer",
          "min:1",
          "max:120"
        ],
        "description": ""
      },
      {
        "name": "rental_information.monthly_rent",
        "type": "number",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "numeric",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "rental_information.security_deposit",
        "type": "number",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "numeric",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "internal_listing_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "exists:listings,id"
        ],
        "description": ""
      },
      {
        "name": "lead_contact_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "exists:leads,id"
        ],
        "description": ""
      },
      {
        "name": "deal_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "exists:deals,id"
        ],
        "description": ""
      },
      {
        "name": "cheques",
        "type": "array",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "array",
          "min:1"
        ],
        "description": ""
      },
      {
        "name": "cheques.*.id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "integer",
          "exists:transaction_cheques,id"
        ],
        "description": ""
      },
      {
        "name": "cheques.*.cheque_number",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "cheques.*.amount",
        "type": "number",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "numeric",
          "min:0.01"
        ],
        "description": ""
      },
      {
        "name": "cheques.*.due_date",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "date"
        ],
        "description": ""
      },
      {
        "name": "cheques.*.status",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "in:scheduled,deposited,paid,cleared,bounced,replaced,cancelled"
        ],
        "description": ""
      },
      {
        "name": "cheques.*.tenant_email",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "email",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "cheques.*.notes",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "cheques.*.replaced_by_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "integer",
          "exists:transaction_cheques,id"
        ],
        "description": ""
      },
      {
        "name": "commission_splits",
        "type": "array",
        "required": "Optional",
        "rules": [
          "sometimes",
          "array",
          "min:1"
        ],
        "description": ""
      },
      {
        "name": "commission_splits.*.id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "integer",
          "exists:commission_splits,id"
        ],
        "description": ""
      },
      {
        "name": "commission_splits.*.recipient_role",
        "type": "string",
        "required": "Conditional",
        "rules": [
          "required_with:commission_splits",
          "in:listing_agent,buyers_agent,tenants_agent,transaction_coordinator,referral_agent,broker_fee,administrative_fee,external_cooperation,custom"
        ],
        "description": ""
      },
      {
        "name": "commission_splits.*.internal_agent_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "exists:users,id"
        ],
        "description": ""
      },
      {
        "name": "commission_splits.*.recipient_name",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "commission_splits.*.recipient_company",
        "type": "string",
        "required": "Optional",
        "rules": [
          "sometimes",
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "commission_splits.*.split_percentage",
        "type": "number",
        "required": "Conditional",
        "rules": [
          "required_with:commission_splits",
          "numeric",
          "min:0",
          "max:100"
        ],
        "description": ""
      },
      {
        "name": "commission_splits.*.split_amount",
        "type": "number",
        "required": "Conditional",
        "rules": [
          "required_with:commission_splits",
          "numeric",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "commission_splits.*.is_external_payment",
        "type": "boolean",
        "required": "Optional",
        "rules": [
          "sometimes",
          "boolean"
        ],
        "description": ""
      }
    ],
    "notes.create": [
      {
        "name": "title",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "details",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "string"
        ],
        "description": ""
      }
    ],
    "notes.update": [
      {
        "name": "title",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "details",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "string"
        ],
        "description": ""
      }
    ],
    "follow_ups.create": [
      {
        "name": "follow_up_date",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "date"
        ],
        "description": ""
      },
      {
        "name": "follow_up_end_date",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "date",
          "after_or_equal:follow_up_date"
        ],
        "description": ""
      },
      {
        "name": "remark",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "send_reminder",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "in:yes,no"
        ],
        "description": ""
      },
      {
        "name": "remind_time",
        "type": "number",
        "required": "Conditional",
        "rules": [
          "nullable",
          "required_if:send_reminder,yes",
          "numeric"
        ],
        "description": ""
      },
      {
        "name": "remind_type",
        "type": "string",
        "required": "Conditional",
        "rules": [
          "nullable",
          "required_if:send_reminder,yes",
          "string",
          "in:minute,hour,day"
        ],
        "description": ""
      },
      {
        "name": "type",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "in:call,meeting,viewing,task,email,whatsapp"
        ],
        "description": ""
      },
      {
        "name": "status",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "in:pending,completed,rescheduled,cancelled,no_show,needs_review"
        ],
        "description": ""
      },
      {
        "name": "result",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "listing_ids",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "listing_ids.*",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "integer",
          "exists:listings,id"
        ],
        "description": ""
      },
      {
        "name": "was_backfilled",
        "type": "boolean",
        "required": "Optional",
        "rules": [
          "nullable",
          "boolean"
        ],
        "description": ""
      }
    ],
    "follow_ups.update": [
      {
        "name": "follow_up_date",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "date"
        ],
        "description": ""
      },
      {
        "name": "follow_up_end_date",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "date"
        ],
        "description": ""
      },
      {
        "name": "remark",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "send_reminder",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "in:yes,no"
        ],
        "description": ""
      },
      {
        "name": "remind_time",
        "type": "number",
        "required": "Conditional",
        "rules": [
          "nullable",
          "required_if:send_reminder,yes",
          "numeric"
        ],
        "description": ""
      },
      {
        "name": "remind_type",
        "type": "string",
        "required": "Conditional",
        "rules": [
          "nullable",
          "required_if:send_reminder,yes",
          "string",
          "in:minute,hour,day"
        ],
        "description": ""
      },
      {
        "name": "status",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "in:pending,completed,rescheduled,cancelled,no_show,needs_review"
        ],
        "description": ""
      },
      {
        "name": "type",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "in:call,meeting,viewing,task,email,whatsapp"
        ],
        "description": ""
      },
      {
        "name": "result",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "listing_ids",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "listing_ids.*",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "integer",
          "exists:listings,id"
        ],
        "description": ""
      },
      {
        "name": "was_backfilled",
        "type": "boolean",
        "required": "Optional",
        "rules": [
          "nullable",
          "boolean"
        ],
        "description": ""
      }
    ],
    "inquiries.create": [
      {
        "name": "lead_contact_id",
        "type": "integer",
        "required": "Required",
        "rules": [
          "required",
          "integer",
          "exists:leads,id"
        ],
        "description": ""
      },
      {
        "name": "name",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "intent",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "string",
          "in:buy,rent,sell,investor,other"
        ],
        "description": ""
      },
      {
        "name": "listing_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists:listings,id"
        ],
        "description": ""
      },
      {
        "name": "budget_min",
        "type": "number",
        "required": "Optional",
        "rules": [
          "nullable",
          "numeric",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "budget_max",
        "type": "number",
        "required": "Optional",
        "rules": [
          "nullable",
          "numeric",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "bedrooms",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "bathrooms",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "preferred_locations",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "preferred_locations.*.place_id",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "preferred_locations.*.address",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "preferred_locations.*.lat",
        "type": "number",
        "required": "Optional",
        "rules": [
          "nullable",
          "numeric"
        ],
        "description": ""
      },
      {
        "name": "preferred_locations.*.long",
        "type": "number",
        "required": "Optional",
        "rules": [
          "nullable",
          "numeric"
        ],
        "description": ""
      },
      {
        "name": "property_types",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "property_types.*",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "integer",
          "exists:listing_types,id"
        ],
        "description": ""
      },
      {
        "name": "preferred_developers",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "preferred_developers.*",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "integer",
          "exists:developers,id"
        ],
        "description": ""
      },
      {
        "name": "source_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists:lead_sources,id"
        ],
        "description": ""
      },
      {
        "name": "assigned_to",
        "type": "integer",
        "required": "Required",
        "rules": [
          "required",
          "integer",
          "integer",
          "exists_in_company:users"
        ],
        "description": ""
      },
      {
        "name": "pipeline_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists:lead_pipelines,id"
        ],
        "description": ""
      },
      {
        "name": "pipeline_stage_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists:pipeline_stages,id"
        ],
        "description": ""
      },
      {
        "name": "note",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "custom_fields_data",
        "type": "object",
        "required": "Optional",
        "rules": [
          "array"
        ],
        "description": "Object keyed by field_<id>. Required fields depend on your installation. URL fields require a URL; percentages are 0–100. File custom fields cannot be uploaded through this JSON API."
      }
    ],
    "inquiries.update": [
      {
        "name": "name",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "max:255"
        ],
        "description": ""
      },
      {
        "name": "intent",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "string",
          "in:buy,rent,sell,investor,other"
        ],
        "description": ""
      },
      {
        "name": "listing_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists:listings,id"
        ],
        "description": ""
      },
      {
        "name": "budget_min",
        "type": "number",
        "required": "Optional",
        "rules": [
          "nullable",
          "numeric",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "budget_max",
        "type": "number",
        "required": "Optional",
        "rules": [
          "nullable",
          "numeric",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "bedrooms",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "bathrooms",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "min:0"
        ],
        "description": ""
      },
      {
        "name": "preferred_locations",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "preferred_locations.*.place_id",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "preferred_locations.*.address",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "preferred_locations.*.lat",
        "type": "number",
        "required": "Optional",
        "rules": [
          "nullable",
          "numeric"
        ],
        "description": ""
      },
      {
        "name": "preferred_locations.*.long",
        "type": "number",
        "required": "Optional",
        "rules": [
          "nullable",
          "numeric"
        ],
        "description": ""
      },
      {
        "name": "property_types",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "property_types.*",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "integer",
          "exists:listing_types,id"
        ],
        "description": ""
      },
      {
        "name": "preferred_developers",
        "type": "array",
        "required": "Optional",
        "rules": [
          "nullable",
          "array"
        ],
        "description": ""
      },
      {
        "name": "preferred_developers.*",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "integer",
          "exists:developers,id"
        ],
        "description": ""
      },
      {
        "name": "source_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists:lead_sources,id"
        ],
        "description": ""
      },
      {
        "name": "assigned_to",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "integer",
          "exists_in_company:users"
        ],
        "description": ""
      },
      {
        "name": "pipeline_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists:lead_pipelines,id"
        ],
        "description": ""
      },
      {
        "name": "pipeline_stage_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "exists:pipeline_stages,id"
        ],
        "description": ""
      },
      {
        "name": "note",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string"
        ],
        "description": ""
      },
      {
        "name": "custom_fields_data",
        "type": "object",
        "required": "Optional",
        "rules": [
          "array"
        ],
        "description": "Object keyed by field_<id>. Required fields depend on your installation. URL fields require a URL; percentages are 0–100. File custom fields cannot be uploaded through this JSON API."
      }
    ],
    "contacts.stage": [
      {
        "name": "stageId",
        "type": "integer",
        "required": "Required",
        "rules": [
          "required",
          "integer",
          "exists_in_company:pipeline_stages"
        ],
        "description": ""
      }
    ],
    "inquiries.stage": [
      {
        "name": "pipeline_stage_id",
        "type": "integer",
        "required": "Required",
        "rules": [
          "required",
          "integer",
          "integer",
          "exists_in_company:pipeline_stages"
        ],
        "description": ""
      }
    ],
    "follow_ups.status": [
      {
        "name": "status",
        "type": "string",
        "required": "Required",
        "rules": [
          "required",
          "in:pending,completed,rescheduled,cancelled,no_show,needs_review"
        ],
        "description": ""
      }
    ],
    "reports": [
      {
        "name": "from_date",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "date_format:Y-m-d"
        ],
        "description": ""
      },
      {
        "name": "to_date",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "date_format:Y-m-d",
          "after_or_equal:from_date"
        ],
        "description": ""
      },
      {
        "name": "closing_agent_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "min:1"
        ],
        "description": ""
      },
      {
        "name": "timezone",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "timezone"
        ],
        "description": ""
      },
      {
        "name": "agent_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "min:1"
        ],
        "description": ""
      },
      {
        "name": "team_id",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "min:1"
        ],
        "description": ""
      },
      {
        "name": "ownership",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "in:mine,my_team,permitted"
        ],
        "description": ""
      },
      {
        "name": "detail_level",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "in:summary,full"
        ],
        "description": ""
      },
      {
        "name": "currency",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "size:3"
        ],
        "description": ""
      },
      {
        "name": "table",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "max:60"
        ],
        "description": ""
      },
      {
        "name": "search",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "max:100"
        ],
        "description": ""
      },
      {
        "name": "metric",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "in:calls,viewings,won,lost,sales,rentals,closed_transactions,offers,unpaid_transactions,closed_sales,closed_rentals,quality_unscored,portal_sync_issues,unassigned_open_inquiries,open_inquiries_without_stage"
        ],
        "description": "Must apply to the selected table."
      },
      {
        "name": "page",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "min:1"
        ],
        "description": ""
      },
      {
        "name": "format",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "in:csv,xlsx"
        ],
        "description": ""
      },
      {
        "name": "per_page",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "nullable",
          "integer",
          "min:1",
          "max:250"
        ],
        "description": ""
      },
      {
        "name": "period",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "in:today,yesterday,this_week,last_week,this_month,last_month,this_quarter,last_quarter,this_year,last_year,last_30_days"
        ],
        "description": ""
      },
      {
        "name": "comparison",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "in:previous_period,previous_year,none"
        ],
        "description": ""
      },
      {
        "name": "columns",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "max:1000"
        ],
        "description": ""
      },
      {
        "name": "group_by",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "max:200"
        ],
        "description": ""
      },
      {
        "name": "sort_by",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "max:60"
        ],
        "description": ""
      },
      {
        "name": "sort_direction",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "in:asc,desc"
        ],
        "description": ""
      }
    ],
    "contacts.list": [
      {
        "name": "searchText",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Search term for filtering contacts by first name, last name, email, primary phone, or secondary phone. Example: john@example.com"
      },
      {
        "name": "created_by",
        "type": "integer",
        "required": "Optional",
        "rules": [],
        "description": "Filter by user ID who added the contact. Example: 1"
      },
      {
        "name": "source_id",
        "type": "integer",
        "required": "Optional",
        "rules": [],
        "description": "Filter by lead source ID. Example: 1"
      },
      {
        "name": "priority",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter by contact priority (high, medium, low). Example: high"
      },
      {
        "name": "start_date",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter contacts created from this date (Y-m-d format). Example: 2025-01-01"
      },
      {
        "name": "end_date",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter contacts created until this date (Y-m-d format). Example: 2025-12-31"
      },
      {
        "name": "contact_created_date_preset",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Optional rolling preset for created-at range (today|yesterday|tomorrow|last_month). Expands to start_date/end_date in company TZ. Used by smart filters."
      },
      {
        "name": "follow_up_date_preset",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Optional rolling preset for follow-up date range (today|yesterday|tomorrow|last_month). Expands to follow_up_start_date/follow_up_end_date."
      },
      {
        "name": "assigned_to",
        "type": "integer|string|array",
        "required": "Optional",
        "rules": [],
        "description": "Filter by assigned user ID(s). Use single ID, array of IDs, or \"null\" for unassigned. Example: [1,2,3] or 1"
      },
      {
        "name": "preferred_languages",
        "type": "array",
        "required": "Optional",
        "rules": [],
        "description": "Filter by preferred languages. Example: [\"en\",\"ar\"]"
      },
      {
        "name": "communication_preferences",
        "type": "array",
        "required": "Optional",
        "rules": [],
        "description": "Filter by communication preferences (email, phone, whatsapp, sms). Example: [\"email\",\"whatsapp\"]"
      },
      {
        "name": "interactions",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter by interaction status (untouched, pending, overdue, stale). Example: untouched"
      },
      {
        "name": "relationship_tier",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter by contact relationship segment (all, owners, buyers, tenants, owner_and_counterparty, standard). Legacy aliases supported: owner, client, clients, client_owner. Example: owners"
      },
      {
        "name": "sort_type",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Field to sort by (default: created_at). Options: created_at, updated_at, first_name, last_name, email, primary_phone, secondary_phone, priority, assigned_to, added_by. Example: first_name"
      },
      {
        "name": "sort",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Direction of sort (ASC, DESC) — default: DESC. Example: DESC"
      },
      {
        "name": "per_page",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "integer",
          "min:1",
          "max:100"
        ],
        "description": "Gateway default 25; clamped to 1–100."
      },
      {
        "name": "page",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "integer",
          "min:1"
        ],
        "description": "Default 1."
      }
    ],
    "inquiries.list": [
      {
        "name": "lead_id",
        "type": "integer",
        "required": "Optional",
        "rules": [],
        "description": "Filter deals by lead contact ID. Example: 1"
      },
      {
        "name": "deal_status",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter by status (open, won, lost, abandoned). Example: open"
      },
      {
        "name": "intent",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter by inquiry intent (buy, rent, sell, investor, other). Example: rent"
      },
      {
        "name": "assigned_to",
        "type": "integer",
        "required": "Optional",
        "rules": [],
        "description": "Filter by assigned user ID. Example: 1"
      },
      {
        "name": "pipeline_stage_id",
        "type": "integer",
        "required": "Optional",
        "rules": [],
        "description": "Filter by pipeline stage ID. Example: 1"
      },
      {
        "name": "min_budget",
        "type": "numeric",
        "required": "Optional",
        "rules": [],
        "description": "Filter deals with maximum budget >= this value. Example: 1000000"
      },
      {
        "name": "max_budget",
        "type": "numeric",
        "required": "Optional",
        "rules": [],
        "description": "Filter deals with minimum budget <= this value. Example: 5000000"
      },
      {
        "name": "bedrooms",
        "type": "integer",
        "required": "Optional",
        "rules": [],
        "description": "Filter by number of bedrooms. Example: 3"
      },
      {
        "name": "bathrooms",
        "type": "integer",
        "required": "Optional",
        "rules": [],
        "description": "Filter by number of bathrooms. Example: 2"
      },
      {
        "name": "property_types",
        "type": "array",
        "required": "Optional",
        "rules": [],
        "description": "Filter by property type IDs (from listing_types table). Example: [1,2,3]"
      },
      {
        "name": "preferred_developers",
        "type": "array",
        "required": "Optional",
        "rules": [],
        "description": "Filter by preferred developer IDs. Example: [1,2,3]"
      },
      {
        "name": "interactions",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter by interaction status (untouched, pending, overdue, stale). Example: pending"
      },
      {
        "name": "per_page",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "integer",
          "min:1",
          "max:100"
        ],
        "description": "Gateway default 25; clamped to 1–100."
      },
      {
        "name": "page",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "integer",
          "min:1"
        ],
        "description": "Default 1."
      },
      {
        "name": "searchText",
        "type": "string",
        "required": "Optional",
        "rules": [
          "string"
        ],
        "description": "Search inquiry name, contact name, email or phone."
      }
    ],
    "listings.list": [
      {
        "name": "search",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Search by listing title, location address, or listing reference. Example: luxury villa or BRX-1001"
      },
      {
        "name": "listing_purpose",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter by listing purpose (rent, sell). Example: rent"
      },
      {
        "name": "listing_type",
        "type": "array",
        "required": "Optional",
        "rules": [],
        "description": "Filter by listing type IDs (apartment, villa, etc.). Example: [1, 2, 3]"
      },
      {
        "name": "status",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter by listing status. Example: available"
      },
      {
        "name": "price_start",
        "type": "numeric",
        "required": "Optional",
        "rules": [],
        "description": "Filter by minimum price. Example: 100000"
      },
      {
        "name": "price_end",
        "type": "numeric",
        "required": "Optional",
        "rules": [],
        "description": "Filter by maximum price. Example: 500000"
      },
      {
        "name": "source_id",
        "type": "array",
        "required": "Optional",
        "rules": [],
        "description": "Filter by listing source id(s). Example: [1, 2]"
      },
      {
        "name": "location",
        "type": "array",
        "required": "Optional",
        "rules": [],
        "description": "Filter by location IDs. Example: [1, 2, 3]"
      },
      {
        "name": "bedrooms",
        "type": "integer",
        "required": "Optional",
        "rules": [],
        "description": "Filter by number of bedrooms. Example: 2"
      },
      {
        "name": "bathrooms",
        "type": "integer",
        "required": "Optional",
        "rules": [],
        "description": "Filter by number of bathrooms. Example: 2"
      },
      {
        "name": "developer",
        "type": "array",
        "required": "Optional",
        "rules": [],
        "description": "Filter by developer IDs. Example: [1, 2, 3]"
      },
      {
        "name": "created_by",
        "type": "array",
        "required": "Optional",
        "rules": [],
        "description": "Filter by creator IDs. Example: [1, 2, 3]"
      },
      {
        "name": "assigned_to",
        "type": "array",
        "required": "Optional",
        "rules": [],
        "description": "Filter by assigned user IDs. Example: [1, 2, 3]"
      },
      {
        "name": "start_date",
        "type": "date",
        "required": "Optional",
        "rules": [],
        "description": "Filter by creation start date. Example: 2024-01-01"
      },
      {
        "name": "end_date",
        "type": "date",
        "required": "Optional",
        "rules": [],
        "description": "Filter by creation end date. Example: 2024-12-31"
      },
      {
        "name": "sort_type",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Field to sort by (default: created_at). Example: price"
      },
      {
        "name": "sort",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Direction of sort (ASC, DESC) — default: DESC. Example: DESC"
      },
      {
        "name": "page",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "integer",
          "min:1"
        ],
        "description": "Default 1."
      },
      {
        "name": "per_page",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "integer",
          "min:1",
          "max:100"
        ],
        "description": "Gateway default 25; clamped to 1–100."
      },
      {
        "name": "aggregate",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Aggregation operation. Supported: sum, avg, min, max, count. When provided, returns aggregated result instead of paginated listings. Example: sum"
      },
      {
        "name": "field",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Field to aggregate on. Required for sum/avg/min/max, optional for count. Allowed fields: price, size, plot_size, bedrooms, bathrooms, parkings, build_year, floor_number, total_floors, viewings. Example: price"
      }
    ],
    "transactions.list": [
      {
        "name": "status",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter by transaction status (e.g., 'pending', 'completed', 'cancelled'). Example: pending"
      },
      {
        "name": "transaction_type",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter by transaction type (`sale` or `rental`). Example: rental"
      },
      {
        "name": "type",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Alias for `transaction_type` (used by the Brixit OS transactions list). Example: rental"
      },
      {
        "name": "transaction_source",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter by transaction source (e.g., 'internal', 'external_listing'). Example: internal"
      },
      {
        "name": "property_type",
        "type": "integer|array",
        "required": "Optional",
        "rules": [],
        "description": "One or more listing type IDs (same as listings `listing_type_id`)."
      },
      {
        "name": "propertyType",
        "type": "integer|array",
        "required": "Optional",
        "rules": [],
        "description": "Alias for `property_type` (Brixit OS transactions filters send `propertyType[]` for multi-select)."
      },
      {
        "name": "property_types",
        "type": "array",
        "required": "Optional",
        "rules": [],
        "description": "Same as `property_type` (optional alternate shape)."
      },
      {
        "name": "start_date",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter by start date (e.g., '2023-01-01'). Example: 2023-01-01"
      },
      {
        "name": "end_date",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter by end date (e.g., '2023-12-31'). Example: 2023-12-31"
      },
      {
        "name": "user_ids",
        "type": "array",
        "required": "Optional",
        "rules": [],
        "description": "Filter by transaction creators or internal commission agents."
      },
      {
        "name": "search",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Search for transactions by transaction number, listing title, or client name. Example: 12345"
      },
      {
        "name": "per_page",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "integer",
          "min:1",
          "max:100"
        ],
        "description": "Gateway default 25; clamped to 1–100."
      },
      {
        "name": "page",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "integer",
          "min:1"
        ],
        "description": "Default 1."
      }
    ],
    "notes.list": [
      {
        "name": "per_page",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "integer",
          "min:1",
          "max:100"
        ],
        "description": "Gateway default 25; clamped to 1–100."
      },
      {
        "name": "page",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "integer",
          "min:1"
        ],
        "description": "Default 1."
      }
    ],
    "follow_ups.list": [
      {
        "name": "type",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter by follow-up type (call, meeting, viewing, task, email, whatsapp). Example: call"
      },
      {
        "name": "status",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter by follow-up status (pending, completed, rescheduled, cancelled, no_show, needs_review). Pseudo-filters: overdue, scheduled (upcoming pending). Example: pending"
      },
      {
        "name": "result",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter by result/outcome (e.g. no_answer, interested, not_interested, call_back_later). Example: no_answer"
      },
      {
        "name": "start_date",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter by follow-up date from (Y-m-d). Example: 2025-03-01"
      },
      {
        "name": "end_date",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter by follow-up date to (Y-m-d). Example: 2025-03-18"
      },
      {
        "name": "per_page",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "integer",
          "min:1",
          "max:100"
        ],
        "description": "Gateway default 25; clamped to 1–100."
      },
      {
        "name": "page",
        "type": "integer",
        "required": "Optional",
        "rules": [
          "integer",
          "min:1"
        ],
        "description": "Default 1."
      },
      {
        "name": "follow_up_scope",
        "type": "string",
        "required": "Optional",
        "rules": [
          "nullable",
          "string",
          "in:inquiry,lead_contact,all"
        ],
        "description": "For contacts; defaults to all."
      }
    ],
    "lookups.lead_sources": [],
    "lookups.contact_stages": [],
    "lookups.pipeline_stages": [],
    "lookups.communication_preferences": [],
    "lookups.lead_priority": [],
    "lookups.listing_sources": [
      {
        "name": "ids",
        "type": "string|array",
        "required": "Optional",
        "rules": [],
        "description": "Optional Listing source IDs (comma-separated or array) for selected-value hydration. Example: 1,2"
      }
    ],
    "lookups.listing_types": [
      {
        "name": "ids",
        "type": "string|array",
        "required": "Optional",
        "rules": [],
        "description": "Optional Listing type IDs (comma-separated or array) for selected-value hydration. Example: 1,2,3"
      },
      {
        "name": "per_page",
        "type": "integer",
        "required": "Optional",
        "rules": [],
        "description": "Number of items per page. Example: 10"
      },
      {
        "name": "page",
        "type": "integer",
        "required": "Optional",
        "rules": [],
        "description": "Page number for pagination. Example: 1"
      },
      {
        "name": "search",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Search by listing type name. Example: house"
      }
    ],
    "lookups.amenities": [
      {
        "name": "search",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Search by amenity name. Example: kitchen"
      },
      {
        "name": "page",
        "type": "integer",
        "required": "Optional",
        "rules": [],
        "description": "Page number. Example: 1"
      },
      {
        "name": "per_page",
        "type": "integer",
        "required": "Optional",
        "rules": [],
        "description": "Number of items per page. Example: 10"
      }
    ],
    "lookups.developers": [
      {
        "name": "search",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Search by developer name. Example: john"
      },
      {
        "name": "page",
        "type": "integer",
        "required": "Optional",
        "rules": [],
        "description": "Page number. Example: 1"
      },
      {
        "name": "per_page",
        "type": "integer",
        "required": "Optional",
        "rules": [],
        "description": "Number of items per page. Example: 10"
      }
    ],
    "lookups.employees": [
      {
        "name": "search",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Search term for filtering employees by name or email. Example: john@example.com"
      },
      {
        "name": "status",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter by employee status (active/deactive/all). Example: active, deactive, all, ''"
      },
      {
        "name": "gender",
        "type": "string",
        "required": "Optional",
        "rules": [],
        "description": "Filter by employee gender (all/male/female/others). Example: all, male, female, others"
      },
      {
        "name": "department",
        "type": "integer",
        "required": "Optional",
        "rules": [],
        "description": "Filter by department ID. Example: 1"
      },
      {
        "name": "designation",
        "type": "integer",
        "required": "Optional",
        "rules": [],
        "description": "Filter by designation ID. Example: 1"
      },
      {
        "name": "role",
        "type": "integer",
        "required": "Optional",
        "rules": [],
        "description": "Filter by role ID. Example: 2"
      },
      {
        "name": "per_page",
        "type": "integer",
        "required": "Optional",
        "rules": [],
        "description": "Number of items per page. Default: 10"
      },
      {
        "name": "page",
        "type": "integer",
        "required": "Optional",
        "rules": [],
        "description": "Page number for pagination. Example: 1"
      },
      {
        "name": "employmentType",
        "type": "string",
        "required": "Optional",
        "rules": [
          "string",
          "in:all,probation,internship,notice_period,new_hires,long_standing"
        ],
        "description": "Optional employment category filter."
      }
    ]
  }
}
