{"openapi":"3.1.0","info":{"title":"24hrFixItPros public directory API","version":"1.0.0","summary":"Read-only lookup of 24/7 emergency pros in Denver, CO.","description":"Find emergency locksmiths, tow trucks, glass & board-up, water damage, plumbers and HVAC pros in the Denver metro by trade and ZIP, or with a plain-English query (GET /search?q=), with phone numbers, hours and open-now status. Read-only and anonymous. To help a customer, give them the pro's `phone` to call or the listing `url`. Requesting a callback and texting a pro are NOT available through this API; they need a person in the web app. Rate limit: 120 requests per minute per IP. Responses are cacheable (Cache-Control). Times are America/Denver.","contact":{"name":"24hrFixItPros","url":"https://24hrfixitpros.com"},"termsOfService":"https://24hrfixitpros.com/llms.txt"},"servers":[{"url":"https://24hrfixitpros.com/api/v1"}],"externalDocs":{"description":"llms.txt","url":"https://24hrfixitpros.com/llms.txt"},"paths":{"/search":{"get":{"operationId":"searchInEnglish","summary":"Search pros with a plain-English request","description":"Parse a sentence such as \"I have a broken glass window near 80303\" into a trade, ZIP and urgency, then return matching pros. Keyword rules run first; TypeSafe JEV is used only when the trade is unclear and a key is configured. If no pro serves the ZIP exactly, results fall back to the surrounding area and then the Denver metro, with a `coverage.message` explaining that.","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","maxLength":400},"description":"Plain-English request.","example":"I have a broken glass window near 80303"},{"name":"open_now","in":"query","required":false,"schema":{"type":"boolean"},"description":"Override open-now filter. If omitted, inferred from words like now / tonight / emergency."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Parsed query and matching pros","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResult"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"searchInEnglishPost","summary":"Search pros with a plain-English request (POST)","description":"Same as GET /search, with `q` in the JSON body.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","maxLength":400,"example":"I have a broken glass window near 80303"},"open_now":{"type":"boolean"},"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string"}}}}}},"responses":{"200":{"description":"Parsed query and matching pros","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResult"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/pros":{"get":{"operationId":"listPros","summary":"List pros, filtered by trade, ZIP and open-now","description":"Sorted: open now first, then pros headquartered in the ZIP, then 24/7, then name. When both category and zip are given, live paid placements are returned separately in `sponsored` (always labeled).","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","enum":["locksmith","tow","glass","water","plumbing","hvac"]},"description":"Trade id. See /categories."},{"name":"zip","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d{5}$"},"description":"Customer ZIP. Matches pros headquartered in or serving the ZIP."},{"name":"open_now","in":"query","required":false,"schema":{"type":"boolean"},"description":"Only pros open right now (America/Denver)."},{"name":"ownership","in":"query","required":false,"schema":{"type":"string","enum":["independent"]},"description":"Pass independent to only return listings with a published Locally owned badge."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":500,"default":500}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Opaque cursor: the `next` value from the previous page."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0},"description":"Alternative to cursor."}],"responses":{"200":{"description":"Matching pros","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProList"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/pros/{id}":{"get":{"operationId":"getPro","summary":"Get one pro by id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"example":"lst_water_servpro_of_downtown_denver_team_jeffries_0082"}],"responses":{"200":{"description":"The pro","content":{"application/json":{"schema":{"type":"object","required":["pro"],"properties":{"pro":{"$ref":"#/components/schemas/Pro"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/categories":{"get":{"operationId":"listCategories","summary":"List trades with listing counts","responses":{"200":{"description":"Trades","content":{"application/json":{"schema":{"type":"object","required":["categories","total"],"properties":{"city":{"type":"string"},"total":{"type":"integer"},"categories":{"type":"array","items":{"$ref":"#/components/schemas/Category"}}}}}}}}}},"/zips":{"get":{"operationId":"listZips","summary":"List covered ZIP codes with pro counts per trade","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","enum":["locksmith","tow","glass","water","plumbing","hvac"]}}],"responses":{"200":{"description":"ZIPs","content":{"application/json":{"schema":{"type":"object","required":["zips","count"],"properties":{"city":{"type":"string"},"count":{"type":"integer"},"note":{"type":"string"},"zips":{"type":"array","items":{"type":"object","required":["zip","counts"],"properties":{"zip":{"type":"string"},"area":{"type":["string","null"]},"counts":{"type":"object","additionalProperties":{"type":"integer"}},"pages":{"type":"object","additionalProperties":{"type":"string","format":"uri"}}}}}}}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"code":{"type":"string"}}},"SearchResult":{"type":"object","required":["q","parse","chip","coverage","filters","total","pros"],"properties":{"q":{"type":"string"},"chip":{"type":"string","example":"Showing glass & board-up near 80303"},"parse":{"type":"object","required":["category","categories","zip","urgency","source"],"properties":{"category":{"type":["string","null"],"description":"Winning trade id, or null if none/ambiguous"},"categories":{"type":"array","items":{"type":"string","enum":["locksmith","tow","glass","water","plumbing","hvac"]}},"zip":{"type":["string","null"]},"place":{"type":["object","null"],"properties":{"name":{"type":"string"},"zip":{"type":"string"}}},"urgency":{"type":"boolean"},"keywords":{"type":"array","items":{"type":"string"}},"source":{"type":"string","enum":["rules","jev","rules+jev","rules-only"]},"ambiguous":{"type":"boolean"}}},"coverage":{"type":"object","properties":{"mode":{"type":"string","enum":["exact","cluster","metro","all"]},"zip_in_metro":{"type":"boolean"},"area":{"type":["string","null"]},"exact_count":{"type":"integer"},"message":{"type":["string","null"],"description":"Set when results are not exact ZIP matches"}}},"filters":{"type":"object"},"total":{"type":"integer"},"count":{"type":"integer"},"next":{"type":["string","null"]},"next_url":{"type":["string","null"]},"pros":{"type":"array","items":{"$ref":"#/components/schemas/Pro"}},"sponsored":{"type":"array"},"page_url":{"type":"string"},"attribution":{"type":"string"}}},"Category":{"type":"object","required":["id","label","count"],"properties":{"id":{"type":"string","enum":["locksmith","tow","glass","water","plumbing","hvac"]},"label":{"type":"string"},"short_label":{"type":"string"},"description":{"type":"string"},"schema_type":{"type":"string","description":"schema.org LocalBusiness subtype"},"count":{"type":"integer"},"url":{"type":"string","format":"uri"},"api_url":{"type":"string","format":"uri"}}},"Pro":{"type":"object","required":["id","name","category","phone","is_open_now","hours","url"],"properties":{"id":{"type":"string","description":"Stable listing id"},"name":{"type":"string"},"category":{"type":"string","enum":["locksmith","tow","glass","water","plumbing","hvac"]},"category_label":{"type":"string"},"phone":{"type":"string","description":"E.164 number the customer should call (tracking number when assigned)"},"phone_display":{"type":"string"},"is_open_now":{"type":"boolean"},"hours":{"type":"object","properties":{"always_open":{"type":"boolean","description":"Open 24/7"},"summary":{"type":"string"},"lines":{"type":"array","items":{"type":"string"}},"windows":{"type":"array","items":{"type":"object","properties":{"days":{"type":"array","items":{"type":"string","enum":["sun","mon","tue","wed","thu","fri","sat"]}},"open":{"type":"string","example":"18:00"},"close":{"type":"string","example":"06:00"},"overnight":{"type":"boolean"}}}},"timezone":{"type":"string","const":"America/Denver"}}},"area":{"type":"string"},"city":{"type":"string"},"region":{"type":"string"},"hq_zip":{"type":"string"},"distance_miles":{"type":"number","description":"Search results only: straight-line miles from the centre of the searched ZIP (present when the query has a ZIP or place). Approximate when location.precision is zip."},"distance_from_zip":{"type":"string"},"service_zips":{"type":"array","items":{"type":"string"}},"address":{"type":["string","null"]},"location":{"type":["object","null"],"properties":{"lat":{"type":"number"},"lng":{"type":"number"},"precision":{"type":"string","enum":["exact","zip"]},"note":{"type":"string"}}},"sponsored":{"type":"boolean"},"url":{"type":"string","format":"uri","description":"Public listing page"},"app_url":{"type":"string","format":"uri","description":"Open this pro in the interactive web app"},"source_url":{"type":"string","format":"uri","description":"Canonical page for this record (cite this)"},"sources":{"type":"array","items":{"type":"string","format":"uri"},"description":"Public pages the listing was verified against"},"updated_at":{"type":"string","description":"Date the listing was last checked (YYYY-MM-DD)"},"ownership":{"type":["object","null"],"description":"Published ownership badge (independent / franchise / owned-by parent), or null when unknown. Based on public records, checked on checked_at. Not a legal conclusion.","properties":{"status":{"type":"string","enum":["independent","franchise","pe_or_corporate"]},"badge":{"type":"string","enum":["locally_owned","franchise","owned_by"]},"label":{"type":"string"},"parent_company":{"type":["string","null"]},"how_we_know":{"type":"string"},"checked_at":{"type":"string"},"evidence":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"type":{"type":"string"},"snippet":{"type":"string"},"checked_at":{"type":"string"}}}}}}}},"Sponsored":{"type":"object","required":["id","sponsored","label","name","phone"],"properties":{"id":{"type":"string"},"sponsored":{"type":"boolean","const":true},"label":{"type":"string","const":"Sponsored"},"name":{"type":"string"},"category":{"type":"string"},"category_label":{"type":"string"},"phone":{"type":"string"},"phone_display":{"type":"string"},"headline":{"type":"string"},"website":{"type":"string"},"zips":{"type":"array","items":{"type":"string"}},"listing_id":{"type":"string"}}},"ProList":{"type":"object","required":["total","count","pros"],"properties":{"city":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"filters":{"type":"object"},"total":{"type":"integer"},"count":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"},"next":{"type":["string","null"],"description":"Cursor for the next page, null on the last page"},"next_url":{"type":["string","null"],"format":"uri"},"pros":{"type":"array","items":{"$ref":"#/components/schemas/Pro"}},"sponsored":{"type":"array","items":{"$ref":"#/components/schemas/Sponsored"}},"page_url":{"type":"string","format":"uri"},"attribution":{"type":"string"}}}}}}