{"openapi":"3.1.0","info":{"title":"Local Roofing Finder agent API","version":"1.0.0","description":"The same three tools as the MCP server at https://localroofingfinder.com/mcp. No authentication; rate-limited per IP. Local Roofing Finder takes no bookings or payments: request_quote reaches only owner-verified businesses, otherwise it returns how_to_book.","contact":{"email":"hello@localroofingfinder.com"}},"servers":[{"url":"https://localroofingfinder.com"}],"paths":{"/api/agent/find_pros":{"get":{"operationId":"find_pros","summary":"Search Local Roofing Finder's residential roofing contractors in Tampa Bay, Florida. Every fact comes from the business's own website, with source links and check dates. Results are not ratings. Each result has a stable id, its profile URL and how_to_book (the business's own booking page, website and phone, best first).","parameters":[{"name":"service","in":"query","required":false,"schema":{"type":"string","description":"Service wanted. One of: Roof repair; Roof replacement; Roof inspection; Storm & hurricane damage; Leak repair; Shingle roofs; Metal roofs; Tile roofs; Flat roofs; Gutters; Commercial roofing. Plain words like \"roof leak\" or \"new roof\" are matched."}},{"name":"area","in":"query","required":false,"schema":{"type":"string","description":"Area in Tampa Bay, Florida. One of: Tampa; St. Petersburg; Clearwater; Brandon; Riverview; Wesley Chapel; Largo; Palm Harbor; Lutz; Land O' Lakes; Apollo Beach; Seminole; Dunedin; Valrico; Plant City; New Port Richey; Oldsmar; Temple Terrace; Pinellas Park; Tarpon Springs; Zephyrhills; Hudson; Spring Hill; Brooksville; Bradenton; Lakeland; Winter Haven."}},{"name":"zip","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d{5}$","description":"5-digit ZIP code of the job. Ignored when area is given."}},{"name":"open_now","in":"query","required":false,"schema":{"type":"boolean","description":"Only businesses whose published office hours say they are open now (America/New_York)."}},{"name":"pulls_permits","in":"query","required":false,"schema":{"type":"boolean","description":"Only businesses that say they pull the building permit for the job."}},{"name":"has_published_prices","in":"query","required":false,"schema":{"type":"boolean","description":"Only businesses that publish prices on their own site."}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":25,"default":10}}],"responses":{"200":{"description":"Matching pros.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input, with a plain-language error.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"429":{"description":"Rate limited (per IP, per hour)."}}},"post":{"operationId":"find_pros_post","summary":"find_pros with a JSON body.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"service":{"type":"string","description":"Service wanted. One of: Roof repair; Roof replacement; Roof inspection; Storm & hurricane damage; Leak repair; Shingle roofs; Metal roofs; Tile roofs; Flat roofs; Gutters; Commercial roofing. Plain words like \"roof leak\" or \"new roof\" are matched."},"area":{"type":"string","description":"Area in Tampa Bay, Florida. One of: Tampa; St. Petersburg; Clearwater; Brandon; Riverview; Wesley Chapel; Largo; Palm Harbor; Lutz; Land O' Lakes; Apollo Beach; Seminole; Dunedin; Valrico; Plant City; New Port Richey; Oldsmar; Temple Terrace; Pinellas Park; Tarpon Springs; Zephyrhills; Hudson; Spring Hill; Brooksville; Bradenton; Lakeland; Winter Haven."},"zip":{"type":"string","pattern":"^\\d{5}$","description":"5-digit ZIP code of the job. Ignored when area is given."},"open_now":{"type":"boolean","description":"Only businesses whose published office hours say they are open now (America/New_York)."},"pulls_permits":{"type":"boolean","description":"Only businesses that say they pull the building permit for the job."},"has_published_prices":{"type":"boolean","description":"Only businesses that publish prices on their own site."},"limit":{"type":"integer","minimum":1,"maximum":25,"default":10}}}}}},"responses":{"200":{"description":"Matching pros.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input, with a plain-language error.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"429":{"description":"Rate limited (per IP, per hour)."}}}},"/api/agent/get_pro":{"get":{"operationId":"get_pro","summary":"Full profile for one business by id: services, service area, published Florida licence number, stated insurance, manufacturer certification, permits and workmanship warranty, published prices, office hours, trust check, sources, how_to_book, and what request_quote will do for this business.","parameters":[{"name":"id","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One pro.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input, with a plain-language error.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"404":{"description":"Invalid input, with a plain-language error.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"429":{"description":"Rate limited (per IP, per hour)."}}}},"/api/agent/request_quote":{"post":{"operationId":"request_quote","summary":"Ask a business for a quote on the customer's behalf. If the business is owner-verified on Local Roofing Finder, the request is saved and queued to the owner's verified email (outcome \"queued_for_owner\", or \"sent_to_owner\" once delivered). If it is not claimed, Local Roofing Finder does NOT contact the business: the request is recorded privately as demand and the reply's how_to_book tells you where to finish (outcome \"not_sent_business_unclaimed\"). Local Roofing Finder never schedules, prices or takes payment. Customer details stay private and are deleted after 90 days. Only call with the customer's consent.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["pro_id","service","zip","preferred_window","details","customer_name","customer_email","consent"],"properties":{"pro_id":{"type":"string","description":"Pro id from find_pros."},"service":{"type":"string","description":"Service wanted; must be one the business lists."},"zip":{"type":"string","pattern":"^\\d{5}$","description":"ZIP code of the property."},"preferred_window":{"type":"string","maxLength":120,"description":"When the customer would like the work or a call back, e.g. \"weekday mornings next week\"."},"details":{"type":"string","maxLength":1500,"description":"What the job is: repair, replacement or inspection; roof type and age if known, leaks or storm damage, stories, access."},"customer_name":{"type":"string","maxLength":120},"customer_email":{"type":"string","format":"email","maxLength":254},"customer_phone":{"type":"string","maxLength":30,"description":"Optional US phone number."},"consent":{"type":"boolean","const":true,"description":"Must be true: the customer agreed that Local Roofing Finder stores this request for up to 90 days and, only if the business is owner-verified, sends it to the owner. See https://localroofingfinder.com/privacy#agent-requests."}}}}}},"responses":{"201":{"description":"Request recorded; outcome says whether the business was contacted.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input, with a plain-language error.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"429":{"description":"Rate limited (per IP, per hour)."}}}}}}