{"openapi":"3.1.0","info":{"title":"1001locals — free AI catalog of local experiences","description":"Public, no-auth catalog of local tours & experiences (Postgres-backed). New operators: first 100 bookings free, then flat 5% forever. MCP endpoint at /mcp.","version":"0.3.0"},"paths":{"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/offer":{"get":{"summary":"Api Offer","operationId":"api_offer_api_offer_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/cities":{"get":{"summary":"Api Cities","operationId":"api_cities_api_cities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/countries":{"get":{"summary":"Api Countries","operationId":"api_countries_api_countries_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/categories":{"get":{"summary":"Api Categories","operationId":"api_categories_api_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/experiences":{"get":{"summary":"Api Experiences","operationId":"api_experiences_api_experiences_get","parameters":[{"name":"country","in":"query","required":false,"schema":{"type":"string","title":"Country"}},{"name":"city","in":"query","required":false,"schema":{"type":"string","title":"City"}},{"name":"category","in":"query","required":false,"schema":{"type":"string","title":"Category"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":50,"title":"Limit"}},{"name":"source","in":"query","required":false,"schema":{"type":"string","title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/search":{"get":{"summary":"Api Search","operationId":"api_search_api_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","title":"Q"}},{"name":"country","in":"query","required":false,"schema":{"type":"string","title":"Country"}},{"name":"city","in":"query","required":false,"schema":{"type":"string","title":"City"}},{"name":"category","in":"query","required":false,"schema":{"type":"string","title":"Category"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":50,"title":"Limit"}},{"name":"source","in":"query","required":false,"schema":{"type":"string","title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/experiences/{eid}":{"get":{"summary":"Api Experience","operationId":"api_experience_api_experiences__eid__get","parameters":[{"name":"eid","in":"path","required":true,"schema":{"type":"string","title":"Eid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/.well-known/ai-plugin.json":{"get":{"summary":"Ai Plugin","operationId":"ai_plugin__well_known_ai_plugin_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/listings":{"post":{"summary":"Create Listing","operationId":"create_listing_api_listings_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/submission-schema":{"get":{"summary":"Submission Schema","operationId":"submission_schema_api_submission_schema_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/lead":{"post":{"summary":"Api Lead","description":"Capture any inbound contact (waitlist, application mirror, contact) -> DB + owner Telegram.","operationId":"api_lead_api_lead_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/leads":{"get":{"summary":"Admin Leads","operationId":"admin_leads_api_admin_leads_get","parameters":[{"name":"token","in":"query","required":false,"schema":{"type":"string","default":"","title":"Token"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/pending":{"get":{"summary":"Admin Pending","operationId":"admin_pending_api_admin_pending_get","parameters":[{"name":"token","in":"query","required":false,"schema":{"type":"string","default":"","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/listings/{slug}/approve":{"post":{"summary":"Admin Approve","operationId":"admin_approve_api_admin_listings__slug__approve_post","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"token","in":"query","required":false,"schema":{"type":"string","default":"","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/parse":{"post":{"summary":"Api Parse","operationId":"api_parse_api_parse_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/mcp":{"post":{"summary":"Mcp","operationId":"mcp_mcp_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/{lang}/{country}/{city}/{category}":{"get":{"summary":"Page Geo Cat","operationId":"page_geo_cat__lang___country___city___category__get","parameters":[{"name":"lang","in":"path","required":true,"schema":{"type":"string","title":"Lang"}},{"name":"country","in":"path","required":true,"schema":{"type":"string","title":"Country"}},{"name":"city","in":"path","required":true,"schema":{"type":"string","title":"City"}},{"name":"category","in":"path","required":true,"schema":{"type":"string","title":"Category"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{lang}/{country}/{city}":{"get":{"summary":"Page City","operationId":"page_city__lang___country___city__get","parameters":[{"name":"lang","in":"path","required":true,"schema":{"type":"string","title":"Lang"}},{"name":"country","in":"path","required":true,"schema":{"type":"string","title":"Country"}},{"name":"city","in":"path","required":true,"schema":{"type":"string","title":"City"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sitemap-geo.xml":{"get":{"summary":"Sitemap Geo","operationId":"sitemap_geo_sitemap_geo_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/{lang}":{"get":{"summary":"Page Lang Home","operationId":"page_lang_home__lang__get","parameters":[{"name":"lang","in":"path","required":true,"schema":{"type":"string","title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}