{
  "openapi": "3.1.0",
  "info": {
    "title": "Pakka Deal public tools",
    "version": "0.1.0",
    "summary": "Sourced, read-only answers about renting in Mumbai.",
    "description": "Public tools for renting in Mumbai (Juhu, Vile Parle, Andheri, Santacruz, Kalina, Bandra East, BKC): fair-rent check, true move-in cost, rent benchmarks, area rating, commute times, closing checklist, lifestyle cost and fit, household fit.\n\n- Every number carries its source URL and the date it was fetched. Where research found nothing, the tool says so; it never estimates in silence.\n- Results from fictional demo data are flagged `isDemo`. Commute and area figures are labelled estimates.\n- Fees and legal rules are general guidance, not legal advice. Check the official IGR Maharashtra calculator before paying.\n- No tool returns phone numbers, Aadhaar or any personal data.\n- Rate limits: 30 requests per minute and 300 per day per IP per tool.\n- The same tools are available over MCP at /mcp (Streamable HTTP, stateless)."
  },
  "servers": [
    {
      "url": "https://pakkadeal.imaginator.in",
      "description": "Pakka Deal"
    }
  ],
  "security": [],
  "tags": [
    {
      "name": "Public tools",
      "description": "Read-only, rate-limited, no sign-in."
    }
  ],
  "externalDocs": {
    "description": "Machine-readable site index",
    "url": "https://pakkadeal.imaginator.in/llms.txt"
  },
  "paths": {
    "/api/tools/fair_rent_check": {
      "post": {
        "operationId": "fair_rent_check",
        "summary": "Fair rent check",
        "description": "Check whether an asking rent in a Mumbai locality is fair against sourced benchmarks. Returns a flag (far_below … far_above), deviation, the benchmark range with source and date.\n\nRead-only. Returns `{ data, meta }`: `meta.sources` lists every source with its fetched date, `meta.deepLink` opens the matching Pakka Deal page, and results from fictional demo data carry `meta.isDemo: true`. No tool returns phone numbers or personal data.",
        "tags": [
          "Public tools"
        ],
        "x-openai-isConsequential": false,
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "locality": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 80,
                    "description": "Locality slug or name, e.g. \"andheri-west\" or \"Andheri West\""
                  },
                  "bhkType": {
                    "type": "string",
                    "enum": [
                      "1RK",
                      "1BHK",
                      "1.5BHK",
                      "2BHK",
                      "2.5BHK",
                      "3BHK",
                      "4BHK+"
                    ]
                  },
                  "rentInr": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "description": "Asking rent in rupees per month"
                  },
                  "furnishing": {
                    "type": "string",
                    "enum": [
                      "none",
                      "semi",
                      "full",
                      "unknown"
                    ]
                  }
                },
                "required": [
                  "locality",
                  "bhkType",
                  "rentInr"
                ]
              },
              "example": {
                "locality": "andheri-west",
                "bhkType": "2BHK",
                "rentInr": 65000
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "localitySlug": {
                          "type": "string"
                        },
                        "bhkType": {
                          "type": "string",
                          "enum": [
                            "1RK",
                            "1BHK",
                            "1.5BHK",
                            "2BHK",
                            "2.5BHK",
                            "3BHK",
                            "4BHK+"
                          ]
                        },
                        "rentInr": {
                          "type": "integer",
                          "exclusiveMinimum": 0,
                          "maximum": 9007199254740991
                        },
                        "flag": {
                          "type": "string",
                          "enum": [
                            "far_below",
                            "below",
                            "fair",
                            "above",
                            "far_above",
                            "no_benchmark"
                          ]
                        },
                        "deviation": {
                          "description": "(rent − reference) / reference",
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "benchmark": {
                          "anyOf": [
                            {
                              "type": "object",
                              "properties": {
                                "rentMinInr": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "rentMaxInr": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "rentMedianInr": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "figures": {
                                  "description": "single_figures: no source published a range, so min/max are the lowest/highest single figures, not a market range",
                                  "type": "string",
                                  "enum": [
                                    "published_range",
                                    "single_figures"
                                  ]
                                },
                                "furnishing": {
                                  "type": "string",
                                  "enum": [
                                    "none",
                                    "semi",
                                    "full",
                                    "unknown",
                                    "any"
                                  ]
                                },
                                "source": {
                                  "type": "object",
                                  "properties": {
                                    "name": {
                                      "type": "string"
                                    },
                                    "url": {
                                      "type": "string"
                                    },
                                    "fetchedAt": {
                                      "type": "string",
                                      "description": "ISO 8601 date the source was fetched"
                                    }
                                  },
                                  "required": [
                                    "name",
                                    "url",
                                    "fetchedAt"
                                  ],
                                  "additionalProperties": false
                                },
                                "publishedDate": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "rentMinInr",
                                "rentMaxInr",
                                "furnishing",
                                "source"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "inventory": {
                          "description": "Present only when at least 5 inventory listings exist",
                          "type": "object",
                          "properties": {
                            "medianRentInr": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "count": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            "isDemo": {
                              "type": "boolean"
                            }
                          },
                          "required": [
                            "medianRentInr",
                            "count",
                            "isDemo"
                          ],
                          "additionalProperties": false
                        },
                        "explanation": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "localitySlug",
                        "bhkType",
                        "rentInr",
                        "flag",
                        "deviation",
                        "benchmark",
                        "explanation"
                      ],
                      "additionalProperties": false
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "isDemo": {
                          "type": "boolean"
                        },
                        "sources": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "name": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string"
                              },
                              "fetchedAt": {
                                "type": "string",
                                "description": "ISO 8601 date the source was fetched"
                              }
                            },
                            "required": [
                              "name",
                              "url",
                              "fetchedAt"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "deepLink": {
                          "type": "string",
                          "description": "URL in Pakka Deal where a person can see this result"
                        },
                        "units": {
                          "type": "object",
                          "propertyNames": {
                            "type": "string"
                          },
                          "additionalProperties": {
                            "type": "string"
                          }
                        },
                        "estimate": {
                          "type": "boolean",
                          "const": true
                        },
                        "generatedAt": {
                          "type": "string",
                          "description": "ISO 8601 timestamp"
                        },
                        "notes": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      },
                      "required": [
                        "sources",
                        "deepLink",
                        "units",
                        "generatedAt"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "data",
                    "meta"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "The arguments do not match the input schema.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "404": {
            "description": "Unknown tool, or an input that names something Pakka Deal does not cover (for example an unknown locality).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit reached (30 per minute and 300 per day per IP per tool).",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected error. Nothing was changed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          }
        }
      }
    },
    "/api/tools/true_move_in_cost": {
      "post": {
        "operationId": "true_move_in_cost",
        "summary": "True move in cost",
        "description": "True cost of moving into a Mumbai rental under an 11-month leave and licence: deposit, first rent, brokerage, stamp duty, registration fee and handling, each with the rule and source used.\n\nRead-only. Returns `{ data, meta }`: `meta.sources` lists every source with its fetched date, `meta.deepLink` opens the matching Pakka Deal page, and results from fictional demo data carry `meta.isDemo: true`. No tool returns phone numbers or personal data.",
        "tags": [
          "Public tools"
        ],
        "x-openai-isConsequential": false,
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "rentInr": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "depositInr": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "termMonths": {
                    "default": 11,
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 60
                  },
                  "brokerageMonths": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 3
                  },
                  "maintenanceInr": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "oneTime": {
                    "type": "object",
                    "properties": {
                      "setupHomeInr": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "nonRefundableDepositInr": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    }
                  }
                },
                "required": [
                  "rentInr",
                  "depositInr"
                ]
              },
              "example": {
                "rentInr": 65000,
                "depositInr": 195000,
                "termMonths": 11
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "oneTime": {
                          "type": "object",
                          "properties": {
                            "depositInr": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "firstMonthRentInr": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "brokerageInr": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "stampDutyInr": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "registrationFeeInr": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "handlingChargesInr": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "setupHomeInr": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "depositInr",
                            "firstMonthRentInr",
                            "brokerageInr",
                            "stampDutyInr",
                            "registrationFeeInr",
                            "handlingChargesInr"
                          ],
                          "additionalProperties": false
                        },
                        "oneTimeTotalInr": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "monthly": {
                          "type": "object",
                          "properties": {
                            "rentInr": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "maintenanceInr": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "utilitiesEstimateInr": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "rentInr",
                            "maintenanceInr"
                          ],
                          "additionalProperties": false
                        },
                        "monthlyTotalInr": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "rules": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "key": {
                                "type": "string"
                              },
                              "value": {
                                "type": [
                                  "number",
                                  "string"
                                ]
                              },
                              "sourceUrl": {
                                "type": "string"
                              },
                              "fetchedAt": {
                                "type": "string"
                              },
                              "verified": {
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "key",
                              "value",
                              "sourceUrl",
                              "fetchedAt"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "notes": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "lines": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "label": {
                                "type": "string"
                              },
                              "amountInr": {
                                "type": "number"
                              },
                              "kind": {
                                "type": "string",
                                "enum": [
                                  "refundable",
                                  "one_time",
                                  "monthly"
                                ]
                              },
                              "basis": {
                                "type": "string",
                                "enum": [
                                  "official",
                                  "market_norm",
                                  "your_input",
                                  "estimate"
                                ]
                              },
                              "sourceUrl": {
                                "type": "string"
                              },
                              "sourceName": {
                                "type": "string"
                              },
                              "fetchedAt": {
                                "type": "string"
                              },
                              "note": {
                                "type": "string"
                              },
                              "verified": {
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "id",
                              "label",
                              "amountInr",
                              "kind",
                              "basis"
                            ],
                            "additionalProperties": false
                          }
                        }
                      },
                      "required": [
                        "oneTime",
                        "oneTimeTotalInr",
                        "monthly",
                        "monthlyTotalInr",
                        "rules",
                        "notes"
                      ],
                      "additionalProperties": false
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "isDemo": {
                          "type": "boolean"
                        },
                        "sources": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "name": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string"
                              },
                              "fetchedAt": {
                                "type": "string",
                                "description": "ISO 8601 date the source was fetched"
                              }
                            },
                            "required": [
                              "name",
                              "url",
                              "fetchedAt"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "deepLink": {
                          "type": "string",
                          "description": "URL in Pakka Deal where a person can see this result"
                        },
                        "units": {
                          "type": "object",
                          "propertyNames": {
                            "type": "string"
                          },
                          "additionalProperties": {
                            "type": "string"
                          }
                        },
                        "estimate": {
                          "type": "boolean",
                          "const": true
                        },
                        "generatedAt": {
                          "type": "string",
                          "description": "ISO 8601 timestamp"
                        },
                        "notes": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      },
                      "required": [
                        "sources",
                        "deepLink",
                        "units",
                        "generatedAt"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "data",
                    "meta"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "The arguments do not match the input schema.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "404": {
            "description": "Unknown tool, or an input that names something Pakka Deal does not cover (for example an unknown locality).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit reached (30 per minute and 300 per day per IP per tool).",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected error. Nothing was changed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          }
        }
      }
    },
    "/api/tools/area_rating": {
      "post": {
        "operationId": "area_rating",
        "summary": "Area rating",
        "description": "Area rating for a locality or point: transit, healthcare, everyday needs, schools, safety access, environment and value sub-scores with inputs and coverage. Says 'not enough data' instead of guessing.\n\nRead-only. Returns `{ data, meta }`: `meta.sources` lists every source with its fetched date, `meta.deepLink` opens the matching Pakka Deal page, and results from fictional demo data carry `meta.isDemo: true`. No tool returns phone numbers or personal data.",
        "tags": [
          "Public tools"
        ],
        "x-openai-isConsequential": false,
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "locality": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 80,
                    "description": "Locality slug or name, e.g. \"andheri-west\" or \"Andheri West\""
                  },
                  "lat": {
                    "type": "number",
                    "minimum": -90,
                    "maximum": 90
                  },
                  "lng": {
                    "type": "number",
                    "minimum": -180,
                    "maximum": 180
                  },
                  "weights": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string",
                      "enum": [
                        "transit",
                        "healthcare",
                        "everydayNeeds",
                        "schools",
                        "safetyAccess",
                        "environment",
                        "value"
                      ]
                    },
                    "additionalProperties": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 5
                    }
                  }
                }
              },
              "example": {
                "locality": "andheri-west"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "scope": {
                          "type": "string",
                          "enum": [
                            "locality",
                            "h3"
                          ]
                        },
                        "key": {
                          "type": "string"
                        },
                        "subScores": {
                          "type": "object",
                          "propertyNames": {
                            "type": "string",
                            "enum": [
                              "transit",
                              "healthcare",
                              "everydayNeeds",
                              "schools",
                              "safetyAccess",
                              "environment",
                              "value"
                            ]
                          },
                          "additionalProperties": {
                            "type": "object",
                            "properties": {
                              "score": {
                                "anyOf": [
                                  {
                                    "type": "number",
                                    "minimum": 0,
                                    "maximum": 100
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "inputs": {
                                "type": "object",
                                "propertyNames": {
                                  "type": "string"
                                },
                                "additionalProperties": {
                                  "type": "number"
                                }
                              },
                              "coverage": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 1
                              },
                              "note": {
                                "type": "string"
                              },
                              "fetchedAt": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "score",
                              "inputs",
                              "coverage"
                            ],
                            "additionalProperties": false
                          },
                          "required": [
                            "transit",
                            "healthcare",
                            "everydayNeeds",
                            "schools",
                            "safetyAccess",
                            "environment",
                            "value"
                          ],
                          "properties": {
                            "transit": {
                              "type": "object",
                              "properties": {
                                "score": {
                                  "anyOf": [
                                    {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 100
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "inputs": {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "type": "number"
                                  }
                                },
                                "coverage": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 1
                                },
                                "note": {
                                  "type": "string"
                                },
                                "fetchedAt": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "score",
                                "inputs",
                                "coverage"
                              ],
                              "additionalProperties": false
                            },
                            "healthcare": {
                              "type": "object",
                              "properties": {
                                "score": {
                                  "anyOf": [
                                    {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 100
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "inputs": {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "type": "number"
                                  }
                                },
                                "coverage": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 1
                                },
                                "note": {
                                  "type": "string"
                                },
                                "fetchedAt": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "score",
                                "inputs",
                                "coverage"
                              ],
                              "additionalProperties": false
                            },
                            "everydayNeeds": {
                              "type": "object",
                              "properties": {
                                "score": {
                                  "anyOf": [
                                    {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 100
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "inputs": {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "type": "number"
                                  }
                                },
                                "coverage": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 1
                                },
                                "note": {
                                  "type": "string"
                                },
                                "fetchedAt": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "score",
                                "inputs",
                                "coverage"
                              ],
                              "additionalProperties": false
                            },
                            "schools": {
                              "type": "object",
                              "properties": {
                                "score": {
                                  "anyOf": [
                                    {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 100
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "inputs": {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "type": "number"
                                  }
                                },
                                "coverage": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 1
                                },
                                "note": {
                                  "type": "string"
                                },
                                "fetchedAt": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "score",
                                "inputs",
                                "coverage"
                              ],
                              "additionalProperties": false
                            },
                            "safetyAccess": {
                              "type": "object",
                              "properties": {
                                "score": {
                                  "anyOf": [
                                    {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 100
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "inputs": {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "type": "number"
                                  }
                                },
                                "coverage": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 1
                                },
                                "note": {
                                  "type": "string"
                                },
                                "fetchedAt": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "score",
                                "inputs",
                                "coverage"
                              ],
                              "additionalProperties": false
                            },
                            "environment": {
                              "type": "object",
                              "properties": {
                                "score": {
                                  "anyOf": [
                                    {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 100
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "inputs": {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "type": "number"
                                  }
                                },
                                "coverage": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 1
                                },
                                "note": {
                                  "type": "string"
                                },
                                "fetchedAt": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "score",
                                "inputs",
                                "coverage"
                              ],
                              "additionalProperties": false
                            },
                            "value": {
                              "type": "object",
                              "properties": {
                                "score": {
                                  "anyOf": [
                                    {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 100
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "inputs": {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "type": "number"
                                  }
                                },
                                "coverage": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 1
                                },
                                "note": {
                                  "type": "string"
                                },
                                "fetchedAt": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "score",
                                "inputs",
                                "coverage"
                              ],
                              "additionalProperties": false
                            }
                          }
                        },
                        "overall": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "coveragePct": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 1
                        },
                        "limitedData": {
                          "type": "boolean",
                          "description": "True when fewer than half the sub-scores have data"
                        }
                      },
                      "required": [
                        "scope",
                        "key",
                        "subScores",
                        "overall",
                        "coveragePct",
                        "limitedData"
                      ],
                      "additionalProperties": false
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "isDemo": {
                          "type": "boolean"
                        },
                        "sources": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "name": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string"
                              },
                              "fetchedAt": {
                                "type": "string",
                                "description": "ISO 8601 date the source was fetched"
                              }
                            },
                            "required": [
                              "name",
                              "url",
                              "fetchedAt"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "deepLink": {
                          "type": "string",
                          "description": "URL in Pakka Deal where a person can see this result"
                        },
                        "units": {
                          "type": "object",
                          "propertyNames": {
                            "type": "string"
                          },
                          "additionalProperties": {
                            "type": "string"
                          }
                        },
                        "estimate": {
                          "type": "boolean",
                          "const": true
                        },
                        "generatedAt": {
                          "type": "string",
                          "description": "ISO 8601 timestamp"
                        },
                        "notes": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      },
                      "required": [
                        "sources",
                        "deepLink",
                        "units",
                        "generatedAt"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "data",
                    "meta"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "The arguments do not match the input schema.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "404": {
            "description": "Unknown tool, or an input that names something Pakka Deal does not cover (for example an unknown locality).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit reached (30 per minute and 300 per day per IP per tool).",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected error. Nothing was changed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          }
        }
      }
    },
    "/api/tools/commute_times": {
      "post": {
        "operationId": "commute_times",
        "summary": "Commute times",
        "description": "Estimated commute minutes by walk, auto, cab, bus, train and metro between two Mumbai places. Straight-line estimates with a road factor, labelled as such.\n\nRead-only. Returns `{ data, meta }`: `meta.sources` lists every source with its fetched date, `meta.deepLink` opens the matching Pakka Deal page, and results from fictional demo data carry `meta.isDemo: true`. No tool returns phone numbers or personal data.",
        "tags": [
          "Public tools"
        ],
        "x-openai-isConsequential": false,
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "from": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "lat": {
                            "type": "number",
                            "minimum": -90,
                            "maximum": 90
                          },
                          "lng": {
                            "type": "number",
                            "minimum": -180,
                            "maximum": 180
                          }
                        },
                        "required": [
                          "lat",
                          "lng"
                        ]
                      },
                      {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 160
                      }
                    ],
                    "description": "{lat,lng} or a locality/place name"
                  },
                  "to": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "lat": {
                            "type": "number",
                            "minimum": -90,
                            "maximum": 90
                          },
                          "lng": {
                            "type": "number",
                            "minimum": -180,
                            "maximum": 180
                          }
                        },
                        "required": [
                          "lat",
                          "lng"
                        ]
                      },
                      {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 160
                      }
                    ],
                    "description": "{lat,lng} or a locality/place name"
                  }
                },
                "required": [
                  "from",
                  "to"
                ]
              },
              "example": {
                "from": "Andheri West",
                "to": "BKC"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "from": {
                          "type": "object",
                          "properties": {
                            "label": {
                              "type": "string"
                            },
                            "lat": {
                              "type": "number"
                            },
                            "lng": {
                              "type": "number"
                            }
                          },
                          "required": [
                            "label",
                            "lat",
                            "lng"
                          ],
                          "additionalProperties": false
                        },
                        "to": {
                          "type": "object",
                          "properties": {
                            "label": {
                              "type": "string"
                            },
                            "lat": {
                              "type": "number"
                            },
                            "lng": {
                              "type": "number"
                            }
                          },
                          "required": [
                            "label",
                            "lat",
                            "lng"
                          ],
                          "additionalProperties": false
                        },
                        "modes": {
                          "type": "object",
                          "propertyNames": {
                            "type": "string",
                            "enum": [
                              "walk",
                              "auto",
                              "train",
                              "metro",
                              "bus",
                              "cab",
                              "own"
                            ]
                          },
                          "additionalProperties": {
                            "type": "object",
                            "properties": {
                              "minutes": {
                                "type": "number"
                              },
                              "km": {
                                "type": "number"
                              },
                              "method": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "minutes",
                              "km",
                              "method"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "precision": {
                          "type": "string",
                          "enum": [
                            "point",
                            "locality"
                          ]
                        }
                      },
                      "required": [
                        "from",
                        "to",
                        "modes",
                        "precision"
                      ],
                      "additionalProperties": false
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "isDemo": {
                          "type": "boolean"
                        },
                        "sources": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "name": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string"
                              },
                              "fetchedAt": {
                                "type": "string",
                                "description": "ISO 8601 date the source was fetched"
                              }
                            },
                            "required": [
                              "name",
                              "url",
                              "fetchedAt"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "deepLink": {
                          "type": "string",
                          "description": "URL in Pakka Deal where a person can see this result"
                        },
                        "units": {
                          "type": "object",
                          "propertyNames": {
                            "type": "string"
                          },
                          "additionalProperties": {
                            "type": "string"
                          }
                        },
                        "estimate": {
                          "type": "boolean",
                          "const": true
                        },
                        "generatedAt": {
                          "type": "string",
                          "description": "ISO 8601 timestamp"
                        },
                        "notes": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      },
                      "required": [
                        "sources",
                        "deepLink",
                        "units",
                        "generatedAt"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "data",
                    "meta"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "The arguments do not match the input schema.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "404": {
            "description": "Unknown tool, or an input that names something Pakka Deal does not cover (for example an unknown locality).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit reached (30 per minute and 300 per day per IP per tool).",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected error. Nothing was changed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          }
        }
      }
    },
    "/api/tools/rent_benchmarks": {
      "post": {
        "operationId": "rent_benchmarks",
        "summary": "Rent benchmarks",
        "description": "Published rent ranges by locality and BHK for the Mumbai western suburbs, each row with its source URL and fetched date.\n\nRead-only. Returns `{ data, meta }`: `meta.sources` lists every source with its fetched date, `meta.deepLink` opens the matching Pakka Deal page, and results from fictional demo data carry `meta.isDemo: true`. No tool returns phone numbers or personal data.",
        "tags": [
          "Public tools"
        ],
        "x-openai-isConsequential": false,
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "locality": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 80,
                    "description": "Locality slug or name, e.g. \"andheri-west\" or \"Andheri West\""
                  },
                  "bhkType": {
                    "type": "string",
                    "enum": [
                      "1RK",
                      "1BHK",
                      "1.5BHK",
                      "2BHK",
                      "2.5BHK",
                      "3BHK",
                      "4BHK+"
                    ]
                  }
                }
              },
              "example": {
                "locality": "andheri-west",
                "bhkType": "2BHK"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "rows": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "localitySlug": {
                                "type": "string"
                              },
                              "bhkType": {
                                "type": "string",
                                "enum": [
                                  "1RK",
                                  "1BHK",
                                  "1.5BHK",
                                  "2BHK",
                                  "2.5BHK",
                                  "3BHK",
                                  "4BHK+"
                                ]
                              },
                              "furnishing": {
                                "type": "string",
                                "enum": [
                                  "none",
                                  "semi",
                                  "full",
                                  "unknown",
                                  "any"
                                ]
                              },
                              "rentMinInr": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "rentMaxInr": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "rentMedianInr": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "unit": {
                                "type": "string",
                                "const": "INR/month"
                              },
                              "source": {
                                "type": "object",
                                "properties": {
                                  "name": {
                                    "type": "string"
                                  },
                                  "url": {
                                    "type": "string"
                                  },
                                  "fetchedAt": {
                                    "type": "string",
                                    "description": "ISO 8601 date the source was fetched"
                                  }
                                },
                                "required": [
                                  "name",
                                  "url",
                                  "fetchedAt"
                                ],
                                "additionalProperties": false
                              },
                              "publishedDate": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "localitySlug",
                              "bhkType",
                              "furnishing",
                              "rentMinInr",
                              "rentMaxInr",
                              "unit",
                              "source"
                            ],
                            "additionalProperties": false
                          }
                        }
                      },
                      "required": [
                        "rows"
                      ],
                      "additionalProperties": false
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "isDemo": {
                          "type": "boolean"
                        },
                        "sources": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "name": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string"
                              },
                              "fetchedAt": {
                                "type": "string",
                                "description": "ISO 8601 date the source was fetched"
                              }
                            },
                            "required": [
                              "name",
                              "url",
                              "fetchedAt"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "deepLink": {
                          "type": "string",
                          "description": "URL in Pakka Deal where a person can see this result"
                        },
                        "units": {
                          "type": "object",
                          "propertyNames": {
                            "type": "string"
                          },
                          "additionalProperties": {
                            "type": "string"
                          }
                        },
                        "estimate": {
                          "type": "boolean",
                          "const": true
                        },
                        "generatedAt": {
                          "type": "string",
                          "description": "ISO 8601 timestamp"
                        },
                        "notes": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      },
                      "required": [
                        "sources",
                        "deepLink",
                        "units",
                        "generatedAt"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "data",
                    "meta"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "The arguments do not match the input schema.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "404": {
            "description": "Unknown tool, or an input that names something Pakka Deal does not cover (for example an unknown locality).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit reached (30 per minute and 300 per day per IP per tool).",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected error. Nothing was changed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          }
        }
      }
    },
    "/api/tools/closing_checklist": {
      "post": {
        "operationId": "closing_checklist",
        "summary": "Closing checklist",
        "description": "Steps to close a Mumbai rental: e-registration of the leave and licence agreement, police tenant verification, deposit and move-in, with official links.\n\nRead-only. Returns `{ data, meta }`: `meta.sources` lists every source with its fetched date, `meta.deepLink` opens the matching Pakka Deal page, and results from fictional demo data carry `meta.isDemo: true`. No tool returns phone numbers or personal data.",
        "tags": [
          "Public tools"
        ],
        "x-openai-isConsequential": false,
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "termMonths": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 60
                  },
                  "city": {
                    "default": "mumbai",
                    "type": "string",
                    "const": "mumbai"
                  }
                }
              },
              "example": {
                "termMonths": 11
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "steps": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "title": {
                                "type": "string"
                              },
                              "kind": {
                                "type": "string",
                                "enum": [
                                  "eregistration",
                                  "police",
                                  "deposit",
                                  "movein",
                                  "setup_home"
                                ]
                              },
                              "description": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string"
                              },
                              "ruleKeys": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              }
                            },
                            "required": [
                              "id",
                              "title",
                              "kind",
                              "description"
                            ],
                            "additionalProperties": false
                          }
                        }
                      },
                      "required": [
                        "steps"
                      ],
                      "additionalProperties": false
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "isDemo": {
                          "type": "boolean"
                        },
                        "sources": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "name": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string"
                              },
                              "fetchedAt": {
                                "type": "string",
                                "description": "ISO 8601 date the source was fetched"
                              }
                            },
                            "required": [
                              "name",
                              "url",
                              "fetchedAt"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "deepLink": {
                          "type": "string",
                          "description": "URL in Pakka Deal where a person can see this result"
                        },
                        "units": {
                          "type": "object",
                          "propertyNames": {
                            "type": "string"
                          },
                          "additionalProperties": {
                            "type": "string"
                          }
                        },
                        "estimate": {
                          "type": "boolean",
                          "const": true
                        },
                        "generatedAt": {
                          "type": "string",
                          "description": "ISO 8601 timestamp"
                        },
                        "notes": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      },
                      "required": [
                        "sources",
                        "deepLink",
                        "units",
                        "generatedAt"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "data",
                    "meta"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "The arguments do not match the input schema.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "404": {
            "description": "Unknown tool, or an input that names something Pakka Deal does not cover (for example an unknown locality).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit reached (30 per minute and 300 per day per IP per tool).",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected error. Nothing was changed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          }
        }
      }
    },
    "/api/tools/lifestyle_cost": {
      "post": {
        "operationId": "lifestyle_cost",
        "summary": "Lifestyle cost",
        "description": "Monthly all-in cost of living in a locality for a given household lifestyle (food, commute, utilities, help), with a range and the sources behind each line.\n\nRead-only. Returns `{ data, meta }`: `meta.sources` lists every source with its fetched date, `meta.deepLink` opens the matching Pakka Deal page, and results from fictional demo data carry `meta.isDemo: true`. No tool returns phone numbers or personal data.",
        "tags": [
          "Public tools"
        ],
        "x-openai-isConsequential": false,
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "locality": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 80,
                    "description": "Locality slug or name, e.g. \"andheri-west\" or \"Andheri West\""
                  },
                  "rentInr": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "maintenanceInr": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "lifestyle": {
                    "type": "object",
                    "properties": {
                      "adults": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 12
                      },
                      "children": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 12
                      },
                      "help": {
                        "type": "string",
                        "enum": [
                          "none",
                          "cook",
                          "maid",
                          "both"
                        ]
                      },
                      "food": {
                        "type": "object",
                        "properties": {
                          "mode": {
                            "type": "string",
                            "enum": [
                              "cook",
                              "tiffin",
                              "out",
                              "mix"
                            ]
                          },
                          "shares": {
                            "type": "object",
                            "properties": {
                              "cook": {
                                "type": "number"
                              },
                              "tiffin": {
                                "type": "number"
                              },
                              "out": {
                                "type": "number"
                              }
                            },
                            "required": [
                              "cook",
                              "tiffin",
                              "out"
                            ]
                          },
                          "mealsOutPerWeek": {
                            "type": "number",
                            "minimum": 0,
                            "maximum": 42
                          },
                          "costPerMeal": {
                            "type": "number",
                            "minimum": 0
                          },
                          "diet": {
                            "type": "string"
                          },
                          "cuisines": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "mode",
                          "mealsOutPerWeek"
                        ]
                      },
                      "commute": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "mode": {
                              "type": "string",
                              "enum": [
                                "walk",
                                "auto",
                                "train",
                                "metro",
                                "bus",
                                "cab",
                                "own"
                              ]
                            },
                            "tripsPerWeek": {
                              "type": "number",
                              "minimum": 0,
                              "maximum": 30
                            },
                            "destinationIndex": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "mode",
                            "tripsPerWeek",
                            "destinationIndex"
                          ]
                        }
                      },
                      "living": {
                        "type": "object",
                        "properties": {
                          "maintenanceTenantPays": {
                            "type": "boolean"
                          },
                          "acUnits": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 10
                          },
                          "acHoursPerDay": {
                            "type": "number",
                            "minimum": 0,
                            "maximum": 24
                          },
                          "broadband": {
                            "type": [
                              "boolean",
                              "number"
                            ]
                          },
                          "phones": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 12
                          },
                          "domesticHelpInr": {
                            "type": "number",
                            "minimum": 0
                          },
                          "weekendBudgetInr": {
                            "type": "number",
                            "minimum": 0
                          }
                        },
                        "required": [
                          "maintenanceTenantPays",
                          "acUnits",
                          "acHoursPerDay",
                          "broadband",
                          "phones"
                        ]
                      },
                      "overrides": {
                        "default": {},
                        "type": "object",
                        "propertyNames": {
                          "type": "string"
                        },
                        "additionalProperties": {
                          "type": "number"
                        }
                      }
                    },
                    "required": [
                      "adults",
                      "children",
                      "help",
                      "food",
                      "commute",
                      "living"
                    ]
                  }
                },
                "required": [
                  "locality",
                  "rentInr",
                  "lifestyle"
                ]
              },
              "example": {
                "locality": "andheri-west",
                "rentInr": 65000,
                "lifestyle": {
                  "adults": 2,
                  "children": 1,
                  "help": "maid",
                  "food": {
                    "mode": "cook",
                    "mealsOutPerWeek": 3,
                    "diet": "veg"
                  },
                  "commute": [],
                  "living": {
                    "maintenanceTenantPays": true,
                    "acUnits": 1,
                    "acHoursPerDay": 6,
                    "broadband": true,
                    "phones": 2
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "localitySlug": {
                          "type": "string"
                        },
                        "monthlyAllInInr": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "rangeInr": {
                          "type": "object",
                          "properties": {
                            "lowInr": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "highInr": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "lowInr",
                            "highInr"
                          ],
                          "additionalProperties": false
                        },
                        "lines": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "category": {
                                "type": "string"
                              },
                              "label": {
                                "type": "string"
                              },
                              "valueInr": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "lowInr": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "highInr": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "basedOn": {
                                "type": "string",
                                "description": "Source name, \"city average\" or \"your input\""
                              }
                            },
                            "required": [
                              "category",
                              "label",
                              "valueInr",
                              "lowInr",
                              "highInr",
                              "basedOn"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "firstMonthCashInr": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "localitySlug",
                        "monthlyAllInInr",
                        "rangeInr",
                        "lines"
                      ],
                      "additionalProperties": false
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "isDemo": {
                          "type": "boolean"
                        },
                        "sources": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "name": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string"
                              },
                              "fetchedAt": {
                                "type": "string",
                                "description": "ISO 8601 date the source was fetched"
                              }
                            },
                            "required": [
                              "name",
                              "url",
                              "fetchedAt"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "deepLink": {
                          "type": "string",
                          "description": "URL in Pakka Deal where a person can see this result"
                        },
                        "units": {
                          "type": "object",
                          "propertyNames": {
                            "type": "string"
                          },
                          "additionalProperties": {
                            "type": "string"
                          }
                        },
                        "estimate": {
                          "type": "boolean",
                          "const": true
                        },
                        "generatedAt": {
                          "type": "string",
                          "description": "ISO 8601 timestamp"
                        },
                        "notes": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      },
                      "required": [
                        "sources",
                        "deepLink",
                        "units",
                        "generatedAt"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "data",
                    "meta"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "The arguments do not match the input schema.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "404": {
            "description": "Unknown tool, or an input that names something Pakka Deal does not cover (for example an unknown locality).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit reached (30 per minute and 300 per day per IP per tool).",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected error. Nothing was changed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          }
        }
      }
    },
    "/api/tools/lifestyle_fit": {
      "post": {
        "operationId": "lifestyle_fit",
        "summary": "Lifestyle fit",
        "description": "How well a flat's house rules fit a household's lifestyle (cooking, help, deliveries), with reasons, warnings and nearby options where data exists.\n\nRead-only. Returns `{ data, meta }`: `meta.sources` lists every source with its fetched date, `meta.deepLink` opens the matching Pakka Deal page, and results from fictional demo data carry `meta.isDemo: true`. No tool returns phone numbers or personal data.",
        "tags": [
          "Public tools"
        ],
        "x-openai-isConsequential": false,
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "listingId": {
                    "type": "string"
                  },
                  "listingHouseRules": {
                    "type": "object",
                    "properties": {
                      "nonVegCookingAllowed": {
                        "type": "boolean"
                      },
                      "cookAvailable": {
                        "type": "boolean"
                      },
                      "tiffinAllowed": {
                        "type": "boolean"
                      },
                      "pipedGas": {
                        "type": "boolean"
                      },
                      "kitchen": {
                        "type": "string",
                        "enum": [
                          "own",
                          "shared",
                          "none",
                          "unknown"
                        ]
                      },
                      "deliveryAllowed": {
                        "type": "boolean"
                      },
                      "entryCurfew": {
                        "type": "string"
                      },
                      "lift": {
                        "type": "boolean"
                      },
                      "floorAccess": {
                        "type": "string"
                      }
                    }
                  },
                  "locality": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 80,
                    "description": "Locality slug or name, e.g. \"andheri-west\" or \"Andheri West\""
                  },
                  "lifestyle": {
                    "type": "object",
                    "properties": {
                      "adults": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 12
                      },
                      "children": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 12
                      },
                      "help": {
                        "type": "string",
                        "enum": [
                          "none",
                          "cook",
                          "maid",
                          "both"
                        ]
                      },
                      "food": {
                        "type": "object",
                        "properties": {
                          "mode": {
                            "type": "string",
                            "enum": [
                              "cook",
                              "tiffin",
                              "out",
                              "mix"
                            ]
                          },
                          "shares": {
                            "type": "object",
                            "properties": {
                              "cook": {
                                "type": "number"
                              },
                              "tiffin": {
                                "type": "number"
                              },
                              "out": {
                                "type": "number"
                              }
                            },
                            "required": [
                              "cook",
                              "tiffin",
                              "out"
                            ]
                          },
                          "mealsOutPerWeek": {
                            "type": "number",
                            "minimum": 0,
                            "maximum": 42
                          },
                          "costPerMeal": {
                            "type": "number",
                            "minimum": 0
                          },
                          "diet": {
                            "type": "string"
                          },
                          "cuisines": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "mode",
                          "mealsOutPerWeek"
                        ]
                      },
                      "commute": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "mode": {
                              "type": "string",
                              "enum": [
                                "walk",
                                "auto",
                                "train",
                                "metro",
                                "bus",
                                "cab",
                                "own"
                              ]
                            },
                            "tripsPerWeek": {
                              "type": "number",
                              "minimum": 0,
                              "maximum": 30
                            },
                            "destinationIndex": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "mode",
                            "tripsPerWeek",
                            "destinationIndex"
                          ]
                        }
                      },
                      "living": {
                        "type": "object",
                        "properties": {
                          "maintenanceTenantPays": {
                            "type": "boolean"
                          },
                          "acUnits": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 10
                          },
                          "acHoursPerDay": {
                            "type": "number",
                            "minimum": 0,
                            "maximum": 24
                          },
                          "broadband": {
                            "type": [
                              "boolean",
                              "number"
                            ]
                          },
                          "phones": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 12
                          },
                          "domesticHelpInr": {
                            "type": "number",
                            "minimum": 0
                          },
                          "weekendBudgetInr": {
                            "type": "number",
                            "minimum": 0
                          }
                        },
                        "required": [
                          "maintenanceTenantPays",
                          "acUnits",
                          "acHoursPerDay",
                          "broadband",
                          "phones"
                        ]
                      },
                      "overrides": {
                        "default": {},
                        "type": "object",
                        "propertyNames": {
                          "type": "string"
                        },
                        "additionalProperties": {
                          "type": "number"
                        }
                      }
                    },
                    "required": [
                      "adults",
                      "children",
                      "help",
                      "food",
                      "commute",
                      "living"
                    ]
                  }
                },
                "required": [
                  "lifestyle"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "score": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 1
                        },
                        "reasons": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "warnings": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "nearby": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string"
                              },
                              "count": {
                                "type": "integer",
                                "minimum": -9007199254740991,
                                "maximum": 9007199254740991
                              },
                              "withinMinutes": {
                                "type": "number"
                              },
                              "note": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "count",
                              "withinMinutes"
                            ],
                            "additionalProperties": false
                          }
                        }
                      },
                      "required": [
                        "score",
                        "reasons",
                        "warnings",
                        "nearby"
                      ],
                      "additionalProperties": false
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "isDemo": {
                          "type": "boolean"
                        },
                        "sources": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "name": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string"
                              },
                              "fetchedAt": {
                                "type": "string",
                                "description": "ISO 8601 date the source was fetched"
                              }
                            },
                            "required": [
                              "name",
                              "url",
                              "fetchedAt"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "deepLink": {
                          "type": "string",
                          "description": "URL in Pakka Deal where a person can see this result"
                        },
                        "units": {
                          "type": "object",
                          "propertyNames": {
                            "type": "string"
                          },
                          "additionalProperties": {
                            "type": "string"
                          }
                        },
                        "estimate": {
                          "type": "boolean",
                          "const": true
                        },
                        "generatedAt": {
                          "type": "string",
                          "description": "ISO 8601 timestamp"
                        },
                        "notes": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      },
                      "required": [
                        "sources",
                        "deepLink",
                        "units",
                        "generatedAt"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "data",
                    "meta"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "The arguments do not match the input schema.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "404": {
            "description": "Unknown tool, or an input that names something Pakka Deal does not cover (for example an unknown locality).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit reached (30 per minute and 300 per day per IP per tool).",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected error. Nothing was changed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          }
        }
      }
    },
    "/api/tools/household_fit": {
      "post": {
        "operationId": "household_fit",
        "summary": "Household fit",
        "description": "Per-member checks for a household in a locality: schools by board, daycare, emergency hospital minutes and commutes, each sourced or marked 'not enough data'.\n\nRead-only. Returns `{ data, meta }`: `meta.sources` lists every source with its fetched date, `meta.deepLink` opens the matching Pakka Deal page, and results from fictional demo data carry `meta.isDemo: true`. No tool returns phone numbers or personal data.",
        "tags": [
          "Public tools"
        ],
        "x-openai-isConsequential": false,
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "locality": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 80,
                    "description": "Locality slug or name, e.g. \"andheri-west\" or \"Andheri West\""
                  },
                  "lat": {
                    "type": "number"
                  },
                  "lng": {
                    "type": "number"
                  },
                  "household": {
                    "type": "object",
                    "properties": {
                      "members": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "stage": {
                              "type": "string",
                              "enum": [
                                "child_u5",
                                "school_child",
                                "student",
                                "working_adult",
                                "senior_65"
                              ]
                            },
                            "board": {
                              "type": "string",
                              "enum": [
                                "SSC",
                                "CBSE",
                                "ICSE",
                                "IB",
                                "IGCSE"
                              ]
                            }
                          },
                          "required": [
                            "stage"
                          ]
                        }
                      },
                      "preset": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "members"
                    ]
                  },
                  "destinations": {
                    "default": [],
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "label": {
                          "type": "string"
                        },
                        "kind": {
                          "type": "string",
                          "enum": [
                            "office",
                            "school",
                            "college",
                            "parent_home",
                            "hospital",
                            "other"
                          ]
                        },
                        "lat": {
                          "type": "number"
                        },
                        "lng": {
                          "type": "number"
                        },
                        "memberIndex": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "label",
                        "kind",
                        "lat",
                        "lng"
                      ]
                    }
                  }
                },
                "required": [
                  "household"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The tool result.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "members": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "index": {
                                "type": "integer",
                                "minimum": -9007199254740991,
                                "maximum": 9007199254740991
                              },
                              "stage": {
                                "type": "string",
                                "enum": [
                                  "child_u5",
                                  "school_child",
                                  "student",
                                  "working_adult",
                                  "senior_65"
                                ]
                              },
                              "checks": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "code": {
                                      "type": "string"
                                    },
                                    "label": {
                                      "type": "string"
                                    },
                                    "ok": {
                                      "description": "null = not enough data",
                                      "type": [
                                        "boolean",
                                        "null"
                                      ]
                                    },
                                    "value": {
                                      "type": "number"
                                    },
                                    "unit": {
                                      "type": "string"
                                    },
                                    "note": {
                                      "type": "string"
                                    },
                                    "source": {
                                      "type": "object",
                                      "properties": {
                                        "name": {
                                          "type": "string"
                                        },
                                        "url": {
                                          "type": "string"
                                        },
                                        "fetchedAt": {
                                          "type": "string",
                                          "description": "ISO 8601 date the source was fetched"
                                        }
                                      },
                                      "required": [
                                        "name",
                                        "url",
                                        "fetchedAt"
                                      ],
                                      "additionalProperties": false
                                    }
                                  },
                                  "required": [
                                    "code",
                                    "label",
                                    "ok"
                                  ],
                                  "additionalProperties": false
                                }
                              }
                            },
                            "required": [
                              "index",
                              "stage",
                              "checks"
                            ],
                            "additionalProperties": false
                          }
                        }
                      },
                      "required": [
                        "members"
                      ],
                      "additionalProperties": false
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "isDemo": {
                          "type": "boolean"
                        },
                        "sources": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "name": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string"
                              },
                              "fetchedAt": {
                                "type": "string",
                                "description": "ISO 8601 date the source was fetched"
                              }
                            },
                            "required": [
                              "name",
                              "url",
                              "fetchedAt"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "deepLink": {
                          "type": "string",
                          "description": "URL in Pakka Deal where a person can see this result"
                        },
                        "units": {
                          "type": "object",
                          "propertyNames": {
                            "type": "string"
                          },
                          "additionalProperties": {
                            "type": "string"
                          }
                        },
                        "estimate": {
                          "type": "boolean",
                          "const": true
                        },
                        "generatedAt": {
                          "type": "string",
                          "description": "ISO 8601 timestamp"
                        },
                        "notes": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      },
                      "required": [
                        "sources",
                        "deepLink",
                        "units",
                        "generatedAt"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "data",
                    "meta"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "The arguments do not match the input schema.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "404": {
            "description": "Unknown tool, or an input that names something Pakka Deal does not cover (for example an unknown locality).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit reached (30 per minute and 300 per day per IP per tool).",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected error. Nothing was changed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolError"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ToolError": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "message"
            ],
            "properties": {
              "code": {
                "type": "string",
                "enum": [
                  "UNKNOWN_TOOL",
                  "UNAVAILABLE",
                  "INVALID_INPUT",
                  "NOT_FOUND",
                  "RATE_LIMITED",
                  "UPSTREAM",
                  "INTERNAL"
                ]
              },
              "message": {
                "type": "string"
              },
              "issues": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "path": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}