{"openapi":"3.0.3","info":{"title":"Gnist Context — OpenStreetMap POI","description":"Points of interest from OpenStreetMap — restaurants, shops, landmarks, and amenities.\n\n- **MCP endpoint:** `https://context.gnist.ai/mcp/osm-poi/`\n- **Toolkit page:** `/toolkits/osm-poi`\n- **Full API spec:** `/api/openapi.json`\n- **Get an API key:** `/signup`","version":"1.0.0","contact":{"name":"GnistAI","url":"https://gnist.ai"}},"servers":[{"url":"https://context.gnist.ai","description":"Production"}],"paths":{"/rest/osm-poi/nearby_pois":{"post":{"tags":["Geography"],"summary":"nearby_pois","description":"Find points of interest near a location.\n\nSearches OpenStreetMap for POIs within a radius of the given coordinates.\n\nArgs:\n    lat: Latitude of the centre point (-90 to 90).\n    lon: Longitude of the centre point (-180 to 180).\n    radius_m: Search radius in metres (1–50000, default 500).\n    poi_type: Type of POI to filter by. Examples: \"restaurant\", \"cafe\", \"hospital\",\n              \"pharmacy\", \"hotel\", \"museum\", \"supermarket\", \"park\", \"ev_charger\",\n              \"school\", \"bank\", \"parking\". Omit to return all POI types.\n    max_results: Maximum number of results (1–100, default 20).\n\nReturns:\n    Object with count and list of POIs, each with osm_id, name, poi_type,\n    lat, lon, and key OSM tags (address, opening hours, phone, website, etc.).","operationId":"osm_poi_nearby_pois","responses":{"200":{"description":"Successful tool call","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Server or tool not found"},"500":{"description":"Tool execution error"}},"security":[{"ApiKeyHeader":[]},{"ApiKeyQuery":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"lat":{"description":"Latitude of the centre point (-90 to 90).","type":"number"},"lon":{"description":"Longitude of the centre point (-180 to 180).","type":"number"},"radius_m":{"default":500,"description":"Search radius in metres (1–50000, default 500).","type":"integer"},"poi_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Type of POI to filter by. Examples: \"restaurant\", \"cafe\", \"hospital\", \"pharmacy\", \"hotel\", \"museum\", \"supermarket\", \"park\", \"ev_charger\", \"school\", \"bank\", \"parking\". Omit t..."},"max_results":{"default":20,"description":"Maximum number of results (1–100, default 20).","type":"integer"}},"required":["lat","lon"],"type":"object"}}}}}},"/rest/osm-poi/search_poi":{"post":{"tags":["Geography"],"summary":"search_poi","description":"Search for POIs by name across OpenStreetMap.\n\nPerforms a case-insensitive regex search over OSM name tags. Optionally\nrestricted to a specific country.\n\nArgs:\n    name_query: Name or partial name to search for (e.g. \"Starbucks\", \"IKEA\").\n    country_code: ISO 3166-1 alpha-2 country code to restrict results\n                  (e.g. \"NO\" for Norway, \"GB\" for UK, \"US\" for United States).\n                  Omit for global search (slower, may time out for common names).\n    max_results: Maximum number of results (1–50, default 20).\n\nReturns:\n    Object with count and list of matching POIs, each with osm_id, name,\n    poi_type, lat, lon, and key OSM tags.","operationId":"osm_poi_search_poi","responses":{"200":{"description":"Successful tool call","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Server or tool not found"},"500":{"description":"Tool execution error"}},"security":[{"ApiKeyHeader":[]},{"ApiKeyQuery":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"name_query":{"description":"Name or partial name to search for (e.g. \"Starbucks\", \"IKEA\").","type":"string"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"ISO 3166-1 alpha-2 country code to restrict results (e.g. \"NO\" for Norway, \"GB\" for UK, \"US\" for United States). Omit for global search (slower, may time out for common names)."},"max_results":{"default":20,"description":"Maximum number of results (1–50, default 20).","type":"integer"}},"required":["name_query"],"type":"object"}}}}}},"/rest/osm-poi/get_poi_details":{"post":{"tags":["Geography"],"summary":"get_poi_details","description":"Get full OSM tag data for a specific POI.\n\nReturns all available metadata for a single OSM element, including\nopening hours, contact info, accessibility attributes, and more.\n\nArgs:\n    osm_id: OSM element identifier in the format \"type/id\", e.g. \"node/12345\"\n            or \"way/67890\". Obtained from nearby_pois or search_poi results.\n\nReturns:\n    Full POI record with all OSM tags, or {\"error\": \"not_found\"} if the\n    element does not exist.","operationId":"osm_poi_get_poi_details","responses":{"200":{"description":"Successful tool call","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Server or tool not found"},"500":{"description":"Tool execution error"}},"security":[{"ApiKeyHeader":[]},{"ApiKeyQuery":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"osm_id":{"description":"OSM element identifier in the format \"type/id\", e.g. \"node/12345\" or \"way/67890\". Obtained from nearby_pois or search_poi results.","type":"string"}},"required":["osm_id"],"type":"object"}}}}}},"/rest/osm-poi/count_pois":{"post":{"tags":["Geography"],"summary":"count_pois","description":"Count POIs within a bounding box.\n\nUseful for density analysis, market research, and catchment area studies.\n\nArgs:\n    min_lat: Southern boundary latitude.\n    min_lon: Western boundary longitude.\n    max_lat: Northern boundary latitude.\n    max_lon: Eastern boundary longitude.\n    poi_type: POI type to count (e.g. \"restaurant\", \"ev_charger\"). Omit to\n              count all named POIs.\n\nReturns:\n    Object with the count of matching POIs and the queried bbox.","operationId":"osm_poi_count_pois","responses":{"200":{"description":"Successful tool call","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Server or tool not found"},"500":{"description":"Tool execution error"}},"security":[{"ApiKeyHeader":[]},{"ApiKeyQuery":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"min_lat":{"description":"Southern boundary latitude.","type":"number"},"min_lon":{"description":"Western boundary longitude.","type":"number"},"max_lat":{"description":"Northern boundary latitude.","type":"number"},"max_lon":{"description":"Eastern boundary longitude.","type":"number"},"poi_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"POI type to count (e.g. \"restaurant\", \"ev_charger\"). Omit to count all named POIs."}},"required":["min_lat","min_lon","max_lat","max_lon"],"type":"object"}}}}}},"/rest/osm-poi/report_feedback":{"post":{"tags":["Geography"],"summary":"report_feedback","description":"Report a bug, feature request, or general feedback for this data source.\n\nUse this when something doesn't work as expected, when you'd like\na new feature, or when you have suggestions for improvement.\n\nArgs:\n    feedback: Describe the issue or suggestion.\n    feedback_type: One of 'bug', 'feature_request', or 'general'.","operationId":"osm_poi_report_feedback","responses":{"200":{"description":"Successful tool call","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Server or tool not found"},"500":{"description":"Tool execution error"}},"security":[{"ApiKeyHeader":[]},{"ApiKeyQuery":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"feedback":{"type":"string"},"feedback_type":{"default":"general","type":"string"}},"required":["feedback"],"type":"object"}}}}}}},"tags":[{"name":"Geography","description":"Data sources: Geography"}],"components":{"securitySchemes":{"ApiKeyHeader":{"type":"apiKey","in":"header","name":"gnist-api-key","description":"API key passed via request header."},"ApiKeyQuery":{"type":"apiKey","in":"query","name":"gnist_api_key","description":"API key passed via query parameter."}}}}