GET/api/search?q=<query>&state=<KA|MH|TN|KL|AP>&limit=<1–50>
{
"query": "tata power solar bangalore",
"total": 12,
"results": [
{
"type": "solar_installer",
"title": "Tata Power Solar",
"url": "/installers/tata-power-solar",
"description": "India's largest rooftop solar EPC, Tata Group trust",
"score": 8,
"state_codes": ["KA","MH","TN","KL","AP"]
},
{ "type": "mandate", "title": "Karnataka RWH mandate", "...": "..." }
]
}- Public. No API key. Rate-limited at 30 req/min per IP.
- Scoring: case-insensitive substring match across name, tagline, and description. Higher score = better match.
- result.type is one of: solar_installer, solar_financer, water_installer, water_financer, mandate, calculator.
- result.url is a relative path on rainbowhome.space. Prepend the host to fetch the full page.
GET/api/installers?state=<KA|...>&sort=<price|installations|rating>&limit=<1–100>
{
"results": [
{
"id": "uuid",
"slug": "tata-power-solar",
"name": "Tata Power Solar",
"price_per_kw_min_inr": 52000,
"price_per_kw_max_inr": 62000,
"states_served": ["KA","MH","TN","KL","AP"],
"certifications": ["MNRE","BIS","UL"],
"...": "..."
}
],
"total": 15
}- Filterable list of solar installers. See full param list in /api/installers handler.
- Identical pattern for /api/water/installers, /api/financers, /api/water/financers.
POST/api/estimates
Request:
{
"state_code": "KA",
"monthly_bill": 2000,
"monthly_kwh": ...,
"system_kw": ...,
"total_cost": ...,
"...": "client-computed numbers that the server re-validates"
}
Response (201):
{ "id": "<uuid>" }- Persistent solar estimate, server-side recalc, rejects on >1% mismatch.
- Companion: /api/water/estimates for the water vertical.