{"openapi":"3.1.0","info":{"title":"Go-To Local API","version":"1.0.0","summary":"Free, read-only JSON API from Go-To Local.","description":"Free to use, including commercially, with attribution: credit \"Go-To Local (gotolocalai.com)\" with a link to the source_url in each result. No sign-up, key or cookies. Limits: about 60 requests a minute per IP; results are cached for up to 10 minutes. Docs: https://gotolocalai.com/developers. Every result carries an attribution field: \"Go-To Local (gotolocalai.com). Free to use with a link back to the source_url.\"","contact":{"name":"Go-To Local","email":"ryan@sarvixo.co","url":"https://gotolocalai.com/developers"}},"servers":[{"url":"https://gotolocalai.com"}],"paths":{"/api/v1/missed-call-cost":{"get":{"operationId":"getMissedCallCost","summary":"Estimate what missed calls may cost each month","description":"Same formula as the free calculator at /missed-call-calculator: missed calls a week x 4.33 weeks a month x (share that become jobs / 100) x average job value. A rough estimate from your own numbers, not a forecast. Mirrors the missed_call_cost MCP tool.","parameters":[{"name":"missed_calls_per_week","in":"query","required":true,"description":"Calls the business misses in a typical week, voicemails and unanswered rings included. A number from 0 to 10000.","schema":{"type":"number","minimum":0,"maximum":10000}},{"name":"avg_job_value","in":"query","required":true,"description":"What a typical job pays the business, in US dollars. A number from 0 to 10000000.","schema":{"type":"number","minimum":0,"maximum":10000000}},{"name":"close_rate","in":"query","required":true,"description":"Percent of answered calls that become jobs, written as a percent: 40 means 40%. A number from 0 to 100.","schema":{"type":"number","minimum":0,"maximum":100}}],"responses":{"200":{"description":"The estimate.","headers":{"Cache-Control":{"description":"Results are cached for up to 10 minutes.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per minute per IP, per function instance.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta","errors"],"properties":{"data":{"$ref":"#/components/schemas/MissedCallCost"},"meta":{"$ref":"#/components/schemas/Meta"},"errors":{"type":"null"}}}}}},"400":{"description":"One or more parameters are missing or invalid. All field errors are returned at once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"405":{"description":"Method not allowed. The API is read-only: use GET.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limited (about 60 requests a minute per IP).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute per IP, per function instance.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds until the window ends.","schema":{"type":"integer"}}}},"500":{"description":"Internal error, with a generic message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/api/v1/ai-employee":{"get":{"operationId":"getAiEmployee","summary":"What an AI employee is at Go-To Local","description":"The AI employees Go-To Local builds, their status, the founding pilot price and what the company will not do, taken from the website. Mirrors the what_is_an_ai_employee MCP tool.","responses":{"200":{"description":"The explainer.","headers":{"Cache-Control":{"description":"Results are cached for up to 10 minutes.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per minute per IP, per function instance.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta","errors"],"properties":{"data":{"$ref":"#/components/schemas/AiEmployee"},"meta":{"$ref":"#/components/schemas/Meta"},"errors":{"type":"null"}}}}}},"405":{"description":"Method not allowed. The API is read-only: use GET.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limited (about 60 requests a minute per IP).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute per IP, per function instance.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds until the window ends.","schema":{"type":"integer"}}}},"500":{"description":"Internal error, with a generic message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/api/v1/openapi.json":{"get":{"operationId":"getOpenApi","summary":"This document","responses":{"200":{"description":"The OpenAPI 3.1 description of this API.","headers":{"Cache-Control":{"description":"Results are cached for up to 10 minutes.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per minute per IP, per function instance.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"}}}},"405":{"description":"Method not allowed. The API is read-only: use GET.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limited (about 60 requests a minute per IP).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute per IP, per function instance.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds until the window ends.","schema":{"type":"integer"}}}},"500":{"description":"Internal error, with a generic message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}}},"components":{"schemas":{"Meta":{"type":"object","required":["api_version","docs_url"],"properties":{"api_version":{"type":"string","const":"v1"},"docs_url":{"type":"string","format":"uri"}}},"ErrorEnvelope":{"type":"object","required":["data","errors"],"properties":{"data":{"type":"null"},"errors":{"type":"array","items":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["VALIDATION_ERROR","METHOD_NOT_ALLOWED","RATE_LIMITED","INTERNAL_ERROR","NOT_FOUND"]},"message":{"type":"string"},"field":{"type":"string","description":"The query parameter at fault, for VALIDATION_ERROR."}}}}}},"MissedCallCost":{"type":"object","required":["inputs","monthly_cost_estimate","monthly_cost_text","formula","worked","caveat","calculator_url","source_url","attribution"],"properties":{"inputs":{"type":"object","required":["missed_calls_per_week","avg_job_value","close_rate"],"properties":{"missed_calls_per_week":{"type":"number","description":"Calls the business misses in a typical week, voicemails and unanswered rings included. A number from 0 to 10000."},"avg_job_value":{"type":"number","description":"What a typical job pays the business, in US dollars. A number from 0 to 10000000."},"close_rate":{"type":"number","description":"Percent of answered calls that become jobs, written as a percent: 40 means 40%. A number from 0 to 100."}}},"monthly_cost_estimate":{"type":"integer","description":"Dollars a month, rounded to whole dollars."},"monthly_cost_text":{"type":"string","examples":["$4,676 a month"]},"formula":{"type":"string"},"worked":{"type":"string","description":"The calculation written out, in the same format as the calculator page.","examples":["6 calls × 4.33 weeks × 40% × $450 = $4,676 a month"]},"caveat":{"type":"string"},"calculator_url":{"type":"string","format":"uri"},"source_url":{"type":"string","format":"uri"},"attribution":{"type":"string"}}},"AiEmployee":{"type":"object","required":["question","definition","definition_url","employees","pilot_price","says_it_is_an_assistant","what_we_will_not_do","source_url","attribution"],"properties":{"question":{"type":"string"},"definition":{"type":"string"},"definition_url":{"type":"string","format":"uri"},"employees":{"type":"array","items":{"type":"object","required":["name","status","outcome","description","page_url"],"properties":{"name":{"type":"string"},"status":{"type":"string","description":"Where it stands today, as printed on the site."},"outcome":{"type":"string"},"description":{"type":"string"},"page_url":{"type":"string","format":"uri"}}}},"pilot_price":{"type":"object","required":["text","founding_monthly_usd","founding_spots","standard_monthly_usd","page_url"],"properties":{"text":{"type":"string"},"founding_monthly_usd":{"type":"integer"},"founding_spots":{"type":"integer"},"standard_monthly_usd":{"type":"integer"},"page_url":{"type":"string","format":"uri"}}},"says_it_is_an_assistant":{"type":"object","required":["question","answer","page_url"],"properties":{"question":{"type":"string"},"answer":{"type":"string"},"page_url":{"type":"string","format":"uri"}}},"what_we_will_not_do":{"type":"object","required":["items","page_url"],"properties":{"items":{"type":"array","items":{"type":"string"}},"page_url":{"type":"string","format":"uri"}}},"source_url":{"type":"string","format":"uri"},"attribution":{"type":"string"}}}}}}