{
 "version": 1,
 "generated": "2026-10-11",
 "site": "https://fitzyracing1.github.io/civicbot",
 "repo": "https://github.com/fitzyracing1/civicbot",
 "geocoder": "https://geocoding-api.open-meteo.com/v1/search?name={place}&count=5&language=en&format=json",
 "skills": [
  {
   "name": "active-storms",
   "title": "Active tropical storms (NOAA NHC)",
   "what": "Active Atlantic and Eastern/Central Pacific tropical cyclones from the National Hurricane Center. No key.",
   "when": [
    "tropical storm",
    "any storms",
    "hurricane",
    "hurricanes",
    "tropical",
    "cyclone",
    "nhc"
   ],
   "needs_location": false,
   "url": "https://www.nhc.noaa.gov/CurrentStorms.json",
   "tokens": [],
   "inputs": {},
   "read": [
    "activeStorms[] (first 4): name, classification, intensity"
   ],
   "source": "NOAA National Hurricane Center",
   "docs": "https://www.nhc.noaa.gov/aboutrss.shtml",
   "example": "any tropical storms",
   "sample": {
    "place": null,
    "url": "https://www.nhc.noaa.gov/CurrentStorms.json"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the NOAA National Hurricane Center API (https://www.nhc.noaa.gov/CurrentStorms.json), answer: \"any tropical storms\"."
  },
  {
   "name": "air-quality",
   "title": "Air quality now (Open-Meteo)",
   "what": "Current US AQI and PM2.5 for the place you mention, from Open-Meteo's air-quality API (CAMS data). No key.",
   "when": [
    "air quality",
    "how's the air",
    "is the air",
    "aqi",
    "smog",
    "pollution",
    "pm2.5",
    "smoke"
   ],
   "needs_location": true,
   "url": "https://air-quality-api.open-meteo.com/v1/air-quality?latitude={lat}&longitude={lng}&current=us_aqi,pm2_5,ozone&timezone=auto",
   "tokens": [
    "lat",
    "lng"
   ],
   "inputs": {},
   "read": [
    "current.us_aqi",
    "current.pm2_5",
    "current.ozone",
    "current.time"
   ],
   "source": "Open-Meteo Air Quality",
   "docs": "https://open-meteo.com/en/docs/air-quality-api",
   "example": "how's the air quality",
   "sample": {
    "place": "Bloomington, IN",
    "url": "https://air-quality-api.open-meteo.com/v1/air-quality?latitude=39.1653&longitude=-86.5264&current=us_aqi,pm2_5,ozone&timezone=auto"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open-Meteo Air Quality API (https://air-quality-api.open-meteo.com/v1/air-quality?latitude=39.1653&longitude=-86.5264&current=us_aqi,pm2_5,ozone&timezone=auto), answer: \"how's the air quality\" for Bloomington, IN."
  },
  {
   "name": "book-lookup",
   "title": "Book lookup (Open Library)",
   "what": "Author and first-publication year for a book title, e.g. 'book the power broker'. No key.",
   "when": [
    "who wrote",
    "book",
    "novel",
    "author"
   ],
   "needs_location": false,
   "url": "https://openlibrary.org/search.json?q={title}&limit=1&fields=title,author_name,first_publish_year",
   "tokens": [
    "title"
   ],
   "inputs": {
    "title": {
     "what": "a book title",
     "pattern": "^[A-Za-z0-9][A-Za-z0-9 ,.'():-]{1,58}$"
    }
   },
   "read": [
    "docs.0.title",
    "docs.0.author_name.0",
    "docs.0.first_publish_year"
   ],
   "source": "Open Library search",
   "docs": "https://openlibrary.org/developers/api",
   "example": "book the power broker",
   "sample": {
    "place": null,
    "url": "https://openlibrary.org/search.json?q=the%20power%20broker&limit=1&fields=title,author_name,first_publish_year"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open Library search API (https://openlibrary.org/search.json?q=the%20power%20broker&limit=1&fields=title,author_name,first_publish_year), answer: \"book the power broker\"."
  },
  {
   "name": "carris-metropolitana-arrivals",
   "title": "Carris Metropolitana next buses (Lisbon area)",
   "what": "Next Carris Metropolitana bus arrivals at a 6-digit stop id in the Lisbon metropolitan area, from the public api.carrismetropolitana.pt v2 API. No key needed.",
   "when": [
    "next bus",
    "próximo autocarro",
    "carris",
    "autocarro",
    "autocarros",
    "paragem",
    "cacilhas"
   ],
   "needs_location": false,
   "url": "https://api.carrismetropolitana.pt/v2/arrivals/by_stop/{stop}",
   "tokens": [
    "stop"
   ],
   "inputs": {
    "stop": {
     "what": "6-digit Carris Metropolitana stop id",
     "pattern": "^[0-9]{6}$",
     "default": "020429"
    }
   },
   "read": [
    "the top-level array (first 3): line_id, headsign"
   ],
   "source": "Carris Metropolitana",
   "docs": "https://github.com/carrismetropolitana/api",
   "example": "carris 020429",
   "sample": {
    "place": null,
    "url": "https://api.carrismetropolitana.pt/v2/arrivals/by_stop/020429"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Carris Metropolitana API (https://api.carrismetropolitana.pt/v2/arrivals/by_stop/020429), answer: \"carris 020429\"."
  },
  {
   "name": "census-district",
   "title": "County and congressional district (US Census)",
   "what": "Which county and congressional district a US place is in, from the Census Bureau geocoder. No key.",
   "when": [
    "what district",
    "which county",
    "who represents",
    "district",
    "congressional",
    "county",
    "representative"
   ],
   "needs_location": true,
   "url": "https://geocoding.geo.census.gov/geocoder/geographies/coordinates?x={lng}&y={lat}&benchmark=Public_AR_Current&vintage=Current_Current&format=json",
   "tokens": [
    "lat",
    "lng"
   ],
   "inputs": {},
   "read": [
    "result.geographies.Counties.0.NAME",
    "result.geographies.States.0.STUSAB",
    "result.geographies.119th Congressional Districts.0.NAME or result.geographies.120th Congressional Districts.0.NAME or result.geographies.121st Congressional Districts.0.NAME"
   ],
   "source": "Census geographies by point",
   "docs": "https://geocoding.geo.census.gov/geocoder/Geocoding_Services_API.html",
   "example": "what district am I in",
   "sample": {
    "place": "Bloomington, IN",
    "url": "https://geocoding.geo.census.gov/geocoder/geographies/coordinates?x=-86.5264&y=39.1653&benchmark=Public_AR_Current&vintage=Current_Current&format=json"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Census geographies by point API (https://geocoding.geo.census.gov/geocoder/geographies/coordinates?x=-86.5264&y=39.1653&benchmark=Public_AR_Current&vintage=Current_Current&format=json), answer: \"what district am I in\" for Bloomington, IN."
  },
  {
   "name": "chicago-311-nearby",
   "title": "Recent Chicago 311 requests nearby (Socrata)",
   "what": "Latest Chicago 311 service requests within 400 m of a place in the last 30 days, from the city's open data portal (Socrata SODA API, dataset v6vf-nfxy).",
   "when": [
    "311 near",
    "311 requests near",
    "what's been reported",
    "311",
    "requests",
    "complaints",
    "reported"
   ],
   "needs_location": true,
   "url": "https://data.cityofchicago.org/resource/v6vf-nfxy.json?$select=sr_type,status,created_date&$where=within_circle(location,%20{lat},%20{lng},%20400)%20AND%20created_date%20%3E%20'{days_ago_30}T00:00:00'&$order=created_date%20DESC&$limit=4",
   "tokens": [
    "days_ago_30",
    "lat",
    "lng"
   ],
   "inputs": {},
   "read": [
    "the top-level array (first 4): sr_type, status, created_date"
   ],
   "source": "Chicago 311 requests (Socrata)",
   "docs": "https://dev.socrata.com/foundry/data.cityofchicago.org/v6vf-nfxy",
   "example": "311 requests near 121 N LaSalle St, Chicago",
   "sample": {
    "place": "121 N LaSalle St, Chicago",
    "url": "https://data.cityofchicago.org/resource/v6vf-nfxy.json?$select=sr_type,status,created_date&$where=within_circle(location,%2041.8837,%20-87.6324,%20400)%20AND%20created_date%20%3E%20'2026-09-11T00:00:00'&$order=created_date%20DESC&$limit=4"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Chicago 311 requests (Socrata) API (https://data.cityofchicago.org/resource/v6vf-nfxy.json?$select=sr_type,status,created_date&$where=within_circle(location,%2041.8837,%20-87.6324,%20400)%20AND%20created_date%20%3E%20'2026-09-11T00:00:00'&$order=created_date%20DESC&$limit=4), answer: \"311 requests near 121 N LaSalle St, Chicago\" for 121 N LaSalle St, Chicago."
  },
  {
   "name": "currency-convert",
   "title": "Currency conversion (Frankfurter / ECB)",
   "what": "Convert between currencies using ECB reference rates, e.g. '100 usd to eur'. No key.",
   "when": [
    "exchange rate",
    " to eur",
    " to usd",
    "convert",
    "exchange",
    "currency",
    "fx"
   ],
   "needs_location": false,
   "url": "https://api.frankfurter.dev/v1/latest?base={from}&symbols={to}",
   "tokens": [
    "from",
    "to"
   ],
   "inputs": {
    "from": {
     "what": "currency code",
     "pattern": "^[A-Z]{3}$",
     "default": "USD",
     "case": "upper"
    },
    "to": {
     "what": "currency code",
     "pattern": "^[A-Z]{3}$",
     "default": "EUR",
     "case": "upper"
    }
   },
   "read": [
    "rates.{to}",
    "date"
   ],
   "source": "Frankfurter",
   "docs": "https://frankfurter.dev/",
   "example": "exchange rate usd to eur",
   "sample": {
    "place": null,
    "url": "https://api.frankfurter.dev/v1/latest?base=USD&symbols=EUR"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Frankfurter API (https://api.frankfurter.dev/v1/latest?base=USD&symbols=EUR), answer: \"exchange rate usd to eur\"."
  },
  {
   "name": "earthquakes-near",
   "title": "Recent earthquakes nearby (USGS)",
   "what": "M2.5+ earthquakes within 500 km of a place in the last 7 days, from USGS. No key.",
   "when": [
    "earthquake",
    "earthquakes",
    "quake",
    "quakes",
    "seismic"
   ],
   "needs_location": true,
   "url": "https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&latitude={lat}&longitude={lng}&maxradiuskm=500&starttime={days_ago_7}&minmagnitude=2.5&orderby=time&limit=3",
   "tokens": [
    "days_ago_7",
    "lat",
    "lng"
   ],
   "inputs": {},
   "read": [
    "features[] (first 3): properties.mag, properties.place, properties.time"
   ],
   "source": "USGS earthquake search",
   "docs": "https://earthquake.usgs.gov/fdsnws/event/1/",
   "example": "any earthquakes",
   "sample": {
    "place": "Anchorage",
    "url": "https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&latitude=61.2181&longitude=-149.9003&maxradiuskm=500&starttime=2026-10-04&minmagnitude=2.5&orderby=time&limit=3"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the USGS earthquake search API (https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&latitude=61.2181&longitude=-149.9003&maxradiuskm=500&starttime=2026-10-04&minmagnitude=2.5&orderby=time&limit=3), answer: \"any earthquakes\" for Anchorage."
  },
  {
   "name": "elevation",
   "title": "Elevation (Open-Meteo)",
   "what": "Ground elevation for the place you mention (Copernicus DEM 90 m). No key.",
   "when": [
    "above sea level",
    "how high is",
    "elevation",
    "altitude"
   ],
   "needs_location": true,
   "url": "https://api.open-meteo.com/v1/elevation?latitude={lat}&longitude={lng}",
   "tokens": [
    "lat",
    "lng"
   ],
   "inputs": {},
   "read": [
    "elevation.0"
   ],
   "source": "Open-Meteo Elevation",
   "docs": "https://open-meteo.com/en/docs/elevation-api",
   "example": "elevation here",
   "sample": {
    "place": "Bloomington, IN",
    "url": "https://api.open-meteo.com/v1/elevation?latitude=39.1653&longitude=-86.5264"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open-Meteo Elevation API (https://api.open-meteo.com/v1/elevation?latitude=39.1653&longitude=-86.5264), answer: \"elevation here\" for Bloomington, IN."
  },
  {
   "name": "emsc-earthquakes",
   "title": "Recent earthquakes (EMSC, Europe-Mediterranean)",
   "what": "Latest earthquakes within ~500 km of a place from the European-Mediterranean Seismological Centre. No key.",
   "when": [
    "emsc earthquake",
    "europe earthquake",
    "emsc",
    "sismo",
    "terremoto"
   ],
   "needs_location": true,
   "url": "https://www.seismicportal.eu/fdsnws/event/1/query?format=json&lat={lat}&lon={lng}&maxradius=4.5&limit=3&orderby=time",
   "tokens": [
    "lat",
    "lng"
   ],
   "inputs": {},
   "read": [
    "features[] (first 3): properties.mag, properties.flynn_region, properties.time"
   ],
   "source": "EMSC Seismic Portal",
   "docs": "https://www.seismicportal.eu/fdsn-wsevent.html",
   "example": "emsc earthquake",
   "sample": {
    "place": "Lisbon",
    "url": "https://www.seismicportal.eu/fdsnws/event/1/query?format=json&lat=38.7223&lon=-9.1393&maxradius=4.5&limit=3&orderby=time"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the EMSC Seismic Portal API (https://www.seismicportal.eu/fdsnws/event/1/query?format=json&lat=38.7223&lon=-9.1393&maxradius=4.5&limit=3&orderby=time), answer: \"emsc earthquake\" for Lisbon."
  },
  {
   "name": "fema-disasters",
   "title": "Recent FEMA disaster declarations",
   "what": "The latest FEMA disaster declarations for a US state (two-letter code, e.g. 'fema disasters in TX'). No key.",
   "when": [
    "disaster declaration",
    "fema",
    "disaster",
    "disasters",
    "declaration"
   ],
   "needs_location": false,
   "url": "https://www.fema.gov/api/open/v2/DisasterDeclarationsSummaries?$filter=state%20eq%20'{state}'&$orderby=declarationDate%20desc&$top=3&$select=declarationTitle,declarationDate,incidentType,designatedArea",
   "tokens": [
    "state"
   ],
   "inputs": {
    "state": {
     "what": "a two-letter US state code (e.g. 'in TX')",
     "pattern": "^[A-Z]{2}$",
     "case": "upper"
    }
   },
   "read": [
    "DisasterDeclarationsSummaries[] (first 3): incidentType, designatedArea, declarationDate"
   ],
   "source": "OpenFEMA disaster declarations",
   "docs": "https://www.fema.gov/about/openfema/api",
   "example": "fema disasters in tx",
   "sample": {
    "place": null,
    "url": "https://www.fema.gov/api/open/v2/DisasterDeclarationsSummaries?$filter=state%20eq%20'TX'&$orderby=declarationDate%20desc&$top=3&$select=declarationTitle,declarationDate,incidentType,designatedArea"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the OpenFEMA disaster declarations API (https://www.fema.gov/api/open/v2/DisasterDeclarationsSummaries?$filter=state%20eq%20'TX'&$orderby=declarationDate%20desc&$top=3&$select=declarationTitle,declarationDate,incidentType,designatedArea), answer: \"fema disasters in tx\"."
  },
  {
   "name": "food-barcode",
   "title": "Food product by barcode (Open Food Facts)",
   "what": "Product name, brand and Nutri-Score for a barcode, e.g. 'barcode 3017624010701'. No key.",
   "when": [
    "nutri-score",
    "scan code",
    "barcode",
    "nutriscore",
    "ean",
    "upc"
   ],
   "needs_location": false,
   "url": "https://world.openfoodfacts.org/api/v2/product/{code}.json?fields=product_name,brands,nutriscore_grade",
   "tokens": [
    "code"
   ],
   "inputs": {
    "code": {
     "what": "an 8-14 digit barcode",
     "pattern": "^[0-9]{8,14}$"
    }
   },
   "read": [
    "product.product_name",
    "product.brands",
    "product.nutriscore_grade"
   ],
   "source": "Open Food Facts",
   "docs": "https://openfoodfacts.github.io/openfoodfacts-server/api/",
   "example": "barcode 3017624010701",
   "sample": {
    "place": null,
    "url": "https://world.openfoodfacts.org/api/v2/product/3017624010701.json?fields=product_name,brands,nutriscore_grade"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open Food Facts API (https://world.openfoodfacts.org/api/v2/product/3017624010701.json?fields=product_name,brands,nutriscore_grade), answer: \"barcode 3017624010701\"."
  },
  {
   "name": "food-recalls",
   "title": "Latest FDA food recalls",
   "what": "The newest US FDA food enforcement reports (recalls). No key.",
   "when": [
    "food recall",
    "food recalls",
    "recall",
    "recalls",
    "fda",
    "food"
   ],
   "needs_location": false,
   "url": "https://api.fda.gov/food/enforcement.json?sort=report_date:desc&limit=3",
   "tokens": [],
   "inputs": {},
   "read": [
    "results[] (first 3): recalling_firm, reason_for_recall"
   ],
   "source": "openFDA food recalls",
   "docs": "https://open.fda.gov/apis/food/enforcement/",
   "example": "latest food recalls",
   "sample": {
    "place": null,
    "url": "https://api.fda.gov/food/enforcement.json?sort=report_date:desc&limit=3"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the openFDA food recalls API (https://api.fda.gov/food/enforcement.json?sort=report_date:desc&limit=3), answer: \"latest food recalls\"."
  },
  {
   "name": "ipma-forecast",
   "title": "Portugal forecast (IPMA)",
   "what": "Today's forecast from Portugal's weather institute IPMA for a city id (default Lisboa, 1110600; Porto is 1131200). No key.",
   "when": [
    "ipma forecast",
    "tempo em lisboa",
    "portugal weather",
    "ipma",
    "previsão",
    "tempo"
   ],
   "needs_location": false,
   "url": "https://api.ipma.pt/open-data/forecast/meteorology/cities/daily/{city}.json",
   "tokens": [
    "city"
   ],
   "inputs": {
    "city": {
     "what": "IPMA globalIdLocal (7 digits); default 1110600 Lisboa",
     "pattern": "^[1-3][0-9]{6}$",
     "default": "1110600"
    }
   },
   "read": [
    "data.0.tMax",
    "data.0.tMin",
    "data.0.precipitaProb",
    "data.0.predWindDir",
    "data.0.forecastDate"
   ],
   "source": "IPMA Portugal city forecast",
   "docs": "https://api.ipma.pt/",
   "example": "ipma forecast",
   "sample": {
    "place": null,
    "url": "https://api.ipma.pt/open-data/forecast/meteorology/cities/daily/1110600.json"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the IPMA Portugal city forecast API (https://api.ipma.pt/open-data/forecast/meteorology/cities/daily/1110600.json), answer: \"ipma forecast\"."
  },
  {
   "name": "iss-location",
   "title": "Where is the ISS? (wheretheiss.at)",
   "what": "Current position, altitude and speed of the International Space Station. No key.",
   "when": [
    "space station",
    "where is the iss",
    "iss"
   ],
   "needs_location": false,
   "url": "https://api.wheretheiss.at/v1/satellites/25544",
   "tokens": [],
   "inputs": {},
   "read": [
    "latitude",
    "longitude",
    "altitude",
    "velocity",
    "visibility"
   ],
   "source": "Where the ISS at?",
   "docs": "https://wheretheiss.at/w/developer",
   "example": "where is the iss",
   "sample": {
    "place": null,
    "url": "https://api.wheretheiss.at/v1/satellites/25544"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Where the ISS at? API (https://api.wheretheiss.at/v1/satellites/25544), answer: \"where is the iss\"."
  },
  {
   "name": "marine-waves",
   "title": "Waves and sea temperature (Open-Meteo Marine)",
   "what": "Current wave height, period and sea-surface temperature near a coastal place. No key.",
   "when": [
    "wave height",
    "water temperature",
    "sea temperature",
    "waves",
    "surf",
    "swell",
    "sea",
    "beach"
   ],
   "needs_location": true,
   "url": "https://marine-api.open-meteo.com/v1/marine?latitude={lat}&longitude={lng}&current=wave_height,wave_period,sea_surface_temperature&timezone=auto",
   "tokens": [
    "lat",
    "lng"
   ],
   "inputs": {},
   "read": [
    "current.wave_height",
    "current.wave_period",
    "current.sea_surface_temperature"
   ],
   "source": "Open-Meteo Marine",
   "docs": "https://open-meteo.com/en/docs/marine-weather-api",
   "example": "wave height",
   "sample": {
    "place": "Cascais",
    "url": "https://marine-api.open-meteo.com/v1/marine?latitude=38.6913&longitude=-9.4215&current=wave_height,wave_period,sea_surface_temperature&timezone=auto"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open-Meteo Marine API (https://marine-api.open-meteo.com/v1/marine?latitude=38.6913&longitude=-9.4215&current=wave_height,wave_period,sea_surface_temperature&timezone=auto), answer: \"wave height\" for Cascais."
  },
  {
   "name": "mbta-alerts",
   "title": "MBTA subway/light-rail alerts (Boston)",
   "what": "Current service alerts on MBTA subway and light rail. No key needed (20 requests/minute).",
   "when": [
    "mbta alerts",
    "t alerts",
    "is the t running",
    "delays",
    "delay",
    "disruption",
    "shuttle"
   ],
   "needs_location": false,
   "url": "https://api-v3.mbta.com/alerts?filter%5Broute_type%5D=0,1&filter%5Bactivity%5D=BOARD,EXIT,RIDE&filter%5Bdatetime%5D=NOW&page%5Blimit%5D=4&fields%5Balert%5D=service_effect,short_header,severity&sort=-severity",
   "tokens": [],
   "inputs": {},
   "read": [
    "data[] (first 4): "
   ],
   "source": "MBTA service alerts",
   "docs": "https://www.mbta.com/developers/v3-api",
   "example": "mbta alerts",
   "sample": {
    "place": null,
    "url": "https://api-v3.mbta.com/alerts?filter%5Broute_type%5D=0,1&filter%5Bactivity%5D=BOARD,EXIT,RIDE&filter%5Bdatetime%5D=NOW&page%5Blimit%5D=4&fields%5Balert%5D=service_effect,short_header,severity&sort=-severity"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the MBTA service alerts API (https://api-v3.mbta.com/alerts?filter%5Broute_type%5D=0,1&filter%5Bactivity%5D=BOARD,EXIT,RIDE&filter%5Bdatetime%5D=NOW&page%5Blimit%5D=4&fields%5Balert%5D=service_effect,short_header,severity&sort=-severity), answer: \"mbta alerts\"."
  },
  {
   "name": "mbta-next-trains",
   "title": "MBTA next departures (Boston)",
   "what": "Next MBTA departures at a stop, from the MBTA V3 API predictions endpoint. Give a stop id like place-pktrm (Park Street) or a bus stop number.",
   "when": [
    "next train",
    "next t",
    "when is the train",
    "mbta",
    "train",
    "trains",
    "subway",
    "departures"
   ],
   "needs_location": false,
   "url": "https://api-v3.mbta.com/predictions?filter%5Bstop%5D={stop}&sort=departure_time&page%5Blimit%5D=25&fields%5Bprediction%5D=arrival_time,departure_time,direction_id",
   "tokens": [
    "stop"
   ],
   "inputs": {
    "stop": {
     "what": "MBTA stop id; defaults to place-pktrm (Park Street)",
     "pattern": "^(place-[a-z0-9-]+|[0-9]{2,6})$",
     "default": "place-pktrm"
    }
   },
   "read": [
    "data[] (first 3): relationships.route.data.id"
   ],
   "source": "MBTA V3",
   "docs": "https://www.mbta.com/developers/v3-api",
   "example": "next train at place-pktrm",
   "sample": {
    "place": null,
    "url": "https://api-v3.mbta.com/predictions?filter%5Bstop%5D=place-pktrm&sort=departure_time&page%5Blimit%5D=25&fields%5Bprediction%5D=arrival_time,departure_time,direction_id"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the MBTA V3 API (https://api-v3.mbta.com/predictions?filter%5Bstop%5D=place-pktrm&sort=departure_time&page%5Blimit%5D=25&fields%5Bprediction%5D=arrival_time,departure_time,direction_id), answer: \"next train at place-pktrm\"."
  },
  {
   "name": "moon-phase",
   "title": "Next moon phases (US Naval Observatory)",
   "what": "The next two primary moon phases with dates (UT), from the USNO. No key.",
   "when": [
    "full moon",
    "new moon",
    "moon phase",
    "moon",
    "lunar"
   ],
   "needs_location": false,
   "url": "https://aa.usno.navy.mil/api/moon/phases/date?date={today}&nump=2",
   "tokens": [
    "today"
   ],
   "inputs": {},
   "read": [
    "phasedata[] (first 2): phase, year, month, day, time"
   ],
   "source": "USNO moon phases",
   "docs": "https://aa.usno.navy.mil/data/api",
   "example": "next full moon",
   "sample": {
    "place": null,
    "url": "https://aa.usno.navy.mil/api/moon/phases/date?date=2026-10-11&nump=2"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the USNO moon phases API (https://aa.usno.navy.mil/api/moon/phases/date?date=2026-10-11&nump=2), answer: \"next full moon\"."
  },
  {
   "name": "natural-events",
   "title": "Open natural events (NASA EONET)",
   "what": "Currently open wildfires, volcanoes, severe storms and other events tracked by NASA EONET. No key.",
   "when": [
    "natural events",
    "natural disasters",
    "wildfire",
    "wildfires",
    "volcano",
    "volcanoes",
    "eonet"
   ],
   "needs_location": false,
   "url": "https://eonet.gsfc.nasa.gov/api/v3/events?status=open&limit=4&days=14",
   "tokens": [],
   "inputs": {},
   "read": [
    "events[] (first 4): title"
   ],
   "source": "NASA EONET",
   "docs": "https://eonet.gsfc.nasa.gov/docs/v3",
   "example": "natural events",
   "sample": {
    "place": null,
    "url": "https://eonet.gsfc.nasa.gov/api/v3/events?status=open&limit=4&days=14"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the NASA EONET API (https://eonet.gsfc.nasa.gov/api/v3/events?status=open&limit=4&days=14), answer: \"natural events\"."
  },
  {
   "name": "next-launch",
   "title": "Next rocket launch (Launch Library 2)",
   "what": "The next scheduled orbital launch worldwide, from The Space Devs' Launch Library 2. No key.",
   "when": [
    "next launch",
    "rocket launch",
    "launch",
    "rocket",
    "spacex"
   ],
   "needs_location": false,
   "url": "https://ll.thespacedevs.com/2.3.0/launches/upcoming/?limit=1&mode=list&hide_recent_previous=true",
   "tokens": [],
   "inputs": {},
   "read": [
    "results.0.name",
    "results.0.net",
    "results.0.status.abbrev",
    "results.0.location or results.0.pad.location.name"
   ],
   "source": "Launch Library 2",
   "docs": "https://thespacedevs.com/llapi",
   "example": "next rocket launch",
   "sample": {
    "place": null,
    "url": "https://ll.thespacedevs.com/2.3.0/launches/upcoming/?limit=1&mode=list&hide_recent_previous=true"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Launch Library 2 API (https://ll.thespacedevs.com/2.3.0/launches/upcoming/?limit=1&mode=list&hide_recent_previous=true), answer: \"next rocket launch\"."
  },
  {
   "name": "nws-alerts",
   "title": "Active weather alerts (US National Weather Service)",
   "what": "Active NWS watches, warnings and advisories for a US place. No key.",
   "when": [
    "weather alert",
    "any alerts",
    "severe weather",
    "warning",
    "warnings",
    "watch",
    "advisory",
    "tornado"
   ],
   "needs_location": true,
   "url": "https://api.weather.gov/alerts/active?point={lat},{lng}",
   "tokens": [
    "lat",
    "lng"
   ],
   "inputs": {},
   "read": [
    "features[] (first 3): properties.event"
   ],
   "source": "NWS active alerts",
   "docs": "https://www.weather.gov/documentation/services-web-api",
   "example": "any alerts",
   "sample": {
    "place": "Bloomington, IN",
    "url": "https://api.weather.gov/alerts/active?point=39.1653,-86.5264"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the NWS active alerts API (https://api.weather.gov/alerts/active?point=39.1653,-86.5264), answer: \"any alerts\" for Bloomington, IN."
  },
  {
   "name": "nyc-311-nearby",
   "title": "Recent NYC 311 requests nearby",
   "what": "The latest NYC 311 service requests within 500 m of a place in New York City (NYC Open Data). Read-only; no key.",
   "when": [
    "nyc 311",
    "311 near",
    "complaints near",
    "nyc",
    "311"
   ],
   "needs_location": true,
   "url": "https://data.cityofnewyork.us/resource/erm2-nwe9.json?$where=within_circle(location,%20{lat},%20{lng},%20500)&$order=created_date%20DESC&$limit=3&$select=complaint_type,descriptor,status,created_date",
   "tokens": [
    "lat",
    "lng"
   ],
   "inputs": {},
   "read": [
    "the top-level array (first 3): complaint_type, status, created_date"
   ],
   "source": "NYC 311 requests (Socrata)",
   "docs": "https://dev.socrata.com/foundry/data.cityofnewyork.us/erm2-nwe9",
   "example": "nyc 311 near me",
   "sample": {
    "place": "Lower Manhattan",
    "url": "https://data.cityofnewyork.us/resource/erm2-nwe9.json?$where=within_circle(location,%2040.7128,%20-74.006,%20500)&$order=created_date%20DESC&$limit=3&$select=complaint_type,descriptor,status,created_date"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the NYC 311 requests (Socrata) API (https://data.cityofnewyork.us/resource/erm2-nwe9.json?$where=within_circle(location,%2040.7128,%20-74.006,%20500)&$order=created_date%20DESC&$limit=3&$select=complaint_type,descriptor,status,created_date), answer: \"nyc 311 near me\" for Lower Manhattan."
  },
  {
   "name": "open-meteo-tomorrow",
   "title": "Tomorrow's forecast (Open-Meteo)",
   "what": "Tomorrow's high, low, conditions and chance of rain for the place you mention (or your home city). No key.",
   "when": [
    "weather tomorrow",
    "forecast tomorrow",
    "rain tomorrow",
    "tomorrow",
    "tmrw",
    "tomorrow's"
   ],
   "needs_location": true,
   "url": "https://api.open-meteo.com/v1/forecast?latitude={lat}&longitude={lng}&daily=temperature_2m_max,temperature_2m_min,precipitation_probability_max,weather_code&temperature_unit=fahrenheit&timezone=auto&forecast_days=2",
   "tokens": [
    "lat",
    "lng"
   ],
   "inputs": {},
   "read": [
    "daily.temperature_2m_max.1",
    "daily.temperature_2m_min.1",
    "daily.precipitation_probability_max.1",
    "daily.weather_code.1",
    "daily.time.1"
   ],
   "source": "Open-Meteo Forecast",
   "docs": "https://open-meteo.com/en/docs",
   "example": "weather tomorrow",
   "sample": {
    "place": "Bloomington, IN",
    "url": "https://api.open-meteo.com/v1/forecast?latitude=39.1653&longitude=-86.5264&daily=temperature_2m_max,temperature_2m_min,precipitation_probability_max,weather_code&temperature_unit=fahrenheit&timezone=auto&forecast_days=2"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open-Meteo Forecast API (https://api.open-meteo.com/v1/forecast?latitude=39.1653&longitude=-86.5264&daily=temperature_2m_max,temperature_2m_min,precipitation_probability_max,weather_code&temperature_unit=fahrenheit&timezone=auto&forecast_days=2), answer: \"weather tomorrow\" for Bloomington, IN."
  },
  {
   "name": "open-meteo-weather",
   "title": "Current weather (Open-Meteo)",
   "what": "Current temperature, conditions and wind for the place you mention (or your home city), from Open-Meteo's free forecast API. No key needed.",
   "when": [
    "what's the weather",
    "how cold",
    "how warm",
    "weather",
    "forecast",
    "temperature",
    "temp",
    "raining"
   ],
   "needs_location": true,
   "url": "https://api.open-meteo.com/v1/forecast?latitude={lat}&longitude={lng}&current=temperature_2m,apparent_temperature,weather_code,wind_speed_10m&temperature_unit=fahrenheit&wind_speed_unit=mph&timezone=auto",
   "tokens": [
    "lat",
    "lng"
   ],
   "inputs": {},
   "read": [
    "current.temperature_2m",
    "current.apparent_temperature",
    "current.weather_code",
    "current.wind_speed_10m",
    "current.time"
   ],
   "source": "Open-Meteo Forecast",
   "docs": "https://open-meteo.com/en/docs",
   "example": "what's the weather",
   "sample": {
    "place": "Bloomington, IN",
    "url": "https://api.open-meteo.com/v1/forecast?latitude=39.1653&longitude=-86.5264&current=temperature_2m,apparent_temperature,weather_code,wind_speed_10m&temperature_unit=fahrenheit&wind_speed_unit=mph&timezone=auto"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open-Meteo Forecast API (https://api.open-meteo.com/v1/forecast?latitude=39.1653&longitude=-86.5264&current=temperature_2m,apparent_temperature,weather_code,wind_speed_10m&temperature_unit=fahrenheit&wind_speed_unit=mph&timezone=auto), answer: \"what's the weather\" for Bloomington, IN."
  },
  {
   "name": "public-holidays",
   "title": "Next public holidays (Nager.Date)",
   "what": "The next public holidays for a country (two-letter code, e.g. 'holidays in PT'; default US). No key.",
   "when": [
    "public holiday",
    "bank holiday",
    "day off",
    "holiday",
    "holidays",
    "feriado",
    "feriados"
   ],
   "needs_location": false,
   "url": "https://date.nager.at/api/v3/NextPublicHolidays/{country}",
   "tokens": [
    "country"
   ],
   "inputs": {
    "country": {
     "what": "ISO country code (e.g. 'in PT')",
     "pattern": "^[A-Z]{2}$",
     "default": "US",
     "case": "upper"
    }
   },
   "read": [
    "the top-level array (first 3): name, date"
   ],
   "source": "Nager.Date next holidays",
   "docs": "https://date.nager.at/Api",
   "example": "next holidays in PT",
   "sample": {
    "place": null,
    "url": "https://date.nager.at/api/v3/NextPublicHolidays/PT"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Nager.Date next holidays API (https://date.nager.at/api/v3/NextPublicHolidays/PT), answer: \"next holidays in PT\"."
  },
  {
   "name": "river-flow",
   "title": "River flow and gage height (USGS)",
   "what": "Latest streamflow and gage height at a USGS site number (default 01646500, Potomac at Little Falls). No key.",
   "when": [
    "river level",
    "how high is the river",
    "river",
    "streamflow",
    "gage",
    "gauge",
    "creek"
   ],
   "needs_location": false,
   "url": "https://waterservices.usgs.gov/nwis/iv/?format=json&sites={site}&parameterCd=00060,00065&siteStatus=active",
   "tokens": [
    "site"
   ],
   "inputs": {
    "site": {
     "what": "USGS site number",
     "pattern": "^[0-9]{8,15}$",
     "default": "01646500"
    }
   },
   "read": [
    "value.timeSeries.0.sourceInfo.siteName",
    "value.timeSeries.0.values.0.value.0.value",
    "value.timeSeries.0.variable.unit.unitCode",
    "value.timeSeries.0.values.0.value.0.dateTime",
    "value.timeSeries.1.values.0.value.0.value",
    "value.timeSeries.1.variable.unit.unitCode"
   ],
   "source": "USGS Water Services (instantaneous)",
   "docs": "https://waterservices.usgs.gov/docs/instantaneous-values/",
   "example": "river level 01646500",
   "sample": {
    "place": null,
    "url": "https://waterservices.usgs.gov/nwis/iv/?format=json&sites=01646500&parameterCd=00060,00065&siteStatus=active"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the USGS Water Services (instantaneous) API (https://waterservices.usgs.gov/nwis/iv/?format=json&sites=01646500&parameterCd=00060,00065&siteStatus=active), answer: \"river level 01646500\"."
  },
  {
   "name": "seeclickfix-nearby",
   "title": "Recent SeeClickFix reports nearby",
   "what": "Recent public issue reports (potholes, streetlights...) near a place, from SeeClickFix (many US towns). Read-only; no key.",
   "when": [
    "seeclickfix reports",
    "open issues near",
    "issues near",
    "seeclickfix",
    "issues"
   ],
   "needs_location": true,
   "url": "https://seeclickfix.com/api/v2/issues?lat={lat}&lng={lng}&per_page=3&sort=created_at&status=open,acknowledged",
   "tokens": [
    "lat",
    "lng"
   ],
   "inputs": {},
   "read": [
    "issues[] (first 3): summary, status, created_at"
   ],
   "source": "SeeClickFix API v2",
   "docs": "https://dev.seeclickfix.com/",
   "example": "open issues near here",
   "sample": {
    "place": "New Haven, CT",
    "url": "https://seeclickfix.com/api/v2/issues?lat=41.3083&lng=-72.9259&per_page=3&sort=created_at&status=open,acknowledged"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the SeeClickFix API v2 API (https://seeclickfix.com/api/v2/issues?lat=41.3083&lng=-72.9259&per_page=3&sort=created_at&status=open,acknowledged), answer: \"open issues near here\" for New Haven, CT."
  },
  {
   "name": "sun-times",
   "title": "Sunrise and sunset (Open-Meteo)",
   "what": "Today's sunrise, sunset and daylight hours for the place you mention, in local time. No key.",
   "when": [
    "when does the sun",
    "golden hour",
    "sunrise",
    "sunset",
    "dawn",
    "dusk",
    "daylight"
   ],
   "needs_location": true,
   "url": "https://api.open-meteo.com/v1/forecast?latitude={lat}&longitude={lng}&daily=sunrise,sunset,daylight_duration&timezone=auto&forecast_days=1",
   "tokens": [
    "lat",
    "lng"
   ],
   "inputs": {},
   "read": [
    "daily.sunrise.0",
    "daily.sunset.0",
    "daily.daylight_duration.0"
   ],
   "source": "Open-Meteo Forecast",
   "docs": "https://open-meteo.com/en/docs",
   "example": "when is sunset",
   "sample": {
    "place": "Bloomington, IN",
    "url": "https://api.open-meteo.com/v1/forecast?latitude=39.1653&longitude=-86.5264&daily=sunrise,sunset,daylight_duration&timezone=auto&forecast_days=1"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open-Meteo Forecast API (https://api.open-meteo.com/v1/forecast?latitude=39.1653&longitude=-86.5264&daily=sunrise,sunset,daylight_duration&timezone=auto&forecast_days=1), answer: \"when is sunset\" for Bloomington, IN."
  },
  {
   "name": "tides-today",
   "title": "Today's tides (NOAA)",
   "what": "Today's high/low tide predictions for a NOAA station id (default 8443970, Boston). No key.",
   "when": [
    "when is high tide",
    "when is low tide",
    "tide",
    "tides",
    "high tide",
    "low tide"
   ],
   "needs_location": false,
   "url": "https://api.tidesandcurrents.noaa.gov/api/prod/datagetter?product=predictions&station={station}&date=today&datum=MLLW&interval=hilo&units=english&time_zone=lst_ldt&format=json&application=civicbot",
   "tokens": [
    "station"
   ],
   "inputs": {
    "station": {
     "what": "NOAA tide station id",
     "pattern": "^[0-9]{7}$",
     "default": "8443970"
    }
   },
   "read": [
    "predictions[] (first 4): type, t, v"
   ],
   "source": "NOAA tide predictions",
   "docs": "https://api.tidesandcurrents.noaa.gov/api/prod/",
   "example": "when is high tide",
   "sample": {
    "place": null,
    "url": "https://api.tidesandcurrents.noaa.gov/api/prod/datagetter?product=predictions&station=8443970&date=today&datum=MLLW&interval=hilo&units=english&time_zone=lst_ldt&format=json&application=civicbot"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the NOAA tide predictions API (https://api.tidesandcurrents.noaa.gov/api/prod/datagetter?product=predictions&station=8443970&date=today&datum=MLLW&interval=hilo&units=english&time_zone=lst_ldt&format=json&application=civicbot), answer: \"when is high tide\"."
  },
  {
   "name": "tube-status",
   "title": "London Underground status (TfL)",
   "what": "Line-by-line status of the London Underground from Transport for London. No key needed.",
   "when": [
    "tube status",
    "london underground",
    "tube",
    "underground",
    "tfl"
   ],
   "needs_location": false,
   "url": "https://api.tfl.gov.uk/Line/Mode/tube/Status",
   "tokens": [],
   "inputs": {},
   "read": [
    "the top-level array (first 10): name, lineStatuses.0.statusSeverityDescription"
   ],
   "source": "TfL Unified API (line status)",
   "docs": "https://api-portal.tfl.gov.uk/",
   "example": "tube status",
   "sample": {
    "place": null,
    "url": "https://api.tfl.gov.uk/Line/Mode/tube/Status"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the TfL Unified API (line status) API (https://api.tfl.gov.uk/Line/Mode/tube/Status), answer: \"tube status\"."
  },
  {
   "name": "uk-carbon-intensity",
   "title": "UK grid carbon intensity (National Grid ESO)",
   "what": "How clean Great Britain's electricity is right now (gCO2/kWh). No key.",
   "when": [
    "carbon intensity",
    "is the grid green",
    "uk grid",
    "carbon",
    "grid",
    "co2"
   ],
   "needs_location": false,
   "url": "https://api.carbonintensity.org.uk/intensity",
   "tokens": [],
   "inputs": {},
   "read": [
    "data.0.intensity.actual or data.0.intensity.forecast",
    "data.0.intensity.index",
    "data.0.from"
   ],
   "source": "UK Carbon Intensity",
   "docs": "https://carbon-intensity.github.io/api-definitions/",
   "example": "uk grid carbon intensity",
   "sample": {
    "place": null,
    "url": "https://api.carbonintensity.org.uk/intensity"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the UK Carbon Intensity API (https://api.carbonintensity.org.uk/intensity), answer: \"uk grid carbon intensity\"."
  },
  {
   "name": "uv-index",
   "title": "UV index (Open-Meteo)",
   "what": "Current UV index and today's peak for the place you mention. No key.",
   "when": [
    "uv index",
    "uv",
    "sunscreen",
    "sunburn",
    "sunblock"
   ],
   "needs_location": true,
   "url": "https://api.open-meteo.com/v1/forecast?latitude={lat}&longitude={lng}&current=uv_index&daily=uv_index_max&timezone=auto&forecast_days=1",
   "tokens": [
    "lat",
    "lng"
   ],
   "inputs": {},
   "read": [
    "current.uv_index",
    "daily.uv_index_max.0"
   ],
   "source": "Open-Meteo Forecast",
   "docs": "https://open-meteo.com/en/docs",
   "example": "uv index today",
   "sample": {
    "place": "Bloomington, IN",
    "url": "https://api.open-meteo.com/v1/forecast?latitude=39.1653&longitude=-86.5264&current=uv_index&daily=uv_index_max&timezone=auto&forecast_days=1"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open-Meteo Forecast API (https://api.open-meteo.com/v1/forecast?latitude=39.1653&longitude=-86.5264&current=uv_index&daily=uv_index_max&timezone=auto&forecast_days=1), answer: \"uv index today\" for Bloomington, IN."
  },
  {
   "name": "vehicle-recalls",
   "title": "Vehicle recalls (NHTSA)",
   "what": "Safety recalls for a vehicle, e.g. 'recalls 2018 honda civic'. No key.",
   "when": [
    "car recall",
    "vehicle recall",
    "recall",
    "recalls",
    "nhtsa",
    "car",
    "truck"
   ],
   "needs_location": false,
   "url": "https://api.nhtsa.gov/recalls/recallsByVehicle?make={make}&model={model}&modelYear={year}",
   "tokens": [
    "make",
    "model",
    "year"
   ],
   "inputs": {
    "year": {
     "what": "model year",
     "pattern": "^(19|20)[0-9]{2}$"
    },
    "make": {
     "what": "make",
     "pattern": "^[a-z-]{2,20}$",
     "case": "lower"
    },
    "model": {
     "what": "model",
     "pattern": "^[a-z0-9-]{1,20}$",
     "case": "lower"
    }
   },
   "read": [
    "Count",
    "results[] (first 3): Component"
   ],
   "source": "NHTSA vehicle recalls",
   "docs": "https://www.nhtsa.gov/nhtsa-datasets-and-apis",
   "example": "recalls 2018 honda civic",
   "sample": {
    "place": null,
    "url": "https://api.nhtsa.gov/recalls/recallsByVehicle?make=honda&model=civic&modelYear=2018"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the NHTSA vehicle recalls API (https://api.nhtsa.gov/recalls/recallsByVehicle?make=honda&model=civic&modelYear=2018), answer: \"recalls 2018 honda civic\"."
  },
  {
   "name": "wikipedia-nearby",
   "title": "Wikipedia places nearby",
   "what": "Wikipedia articles about places within 2 km of where you are. No key.",
   "when": [
    "what's around",
    "places near",
    "nearby places",
    "landmarks",
    "landmark",
    "sights",
    "history"
   ],
   "needs_location": true,
   "url": "https://en.wikipedia.org/w/api.php?action=query&list=geosearch&gscoord={lat}%7C{lng}&gsradius=2000&gslimit=4&format=json",
   "tokens": [
    "lat",
    "lng"
   ],
   "inputs": {},
   "read": [
    "query.geosearch[] (first 4): title, dist"
   ],
   "source": "Wikipedia nearby",
   "docs": "https://www.mediawiki.org/wiki/API:Geosearch",
   "example": "places near me",
   "sample": {
    "place": "Lisbon",
    "url": "https://en.wikipedia.org/w/api.php?action=query&list=geosearch&gscoord=38.7223%7C-9.1393&gsradius=2000&gslimit=4&format=json"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Wikipedia nearby API (https://en.wikipedia.org/w/api.php?action=query&list=geosearch&gscoord=38.7223%7C-9.1393&gsradius=2000&gslimit=4&format=json), answer: \"places near me\" for Lisbon."
  },
  {
   "name": "wikipedia-summary",
   "title": "Wikipedia summary",
   "what": "A two-sentence Wikipedia summary, e.g. 'wiki Lisbon' or 'what is a roundabout'. No key.",
   "when": [
    "wiki ",
    "wikipedia ",
    "tell me about",
    "wiki",
    "wikipedia"
   ],
   "needs_location": false,
   "url": "https://en.wikipedia.org/w/api.php?action=query&prop=extracts&exintro=1&explaintext=1&exsentences=2&redirects=1&format=json&formatversion=2&titles={topic}",
   "tokens": [
    "topic"
   ],
   "inputs": {
    "topic": {
     "what": "a topic (e.g. 'wiki Lisbon')",
     "pattern": "^[A-Za-z0-9][A-Za-z0-9 ,.'()-]{1,58}$"
    }
   },
   "read": [
    "query.pages.0.title",
    "query.pages.0.extract"
   ],
   "source": "Wikipedia page summary",
   "docs": "https://en.wikipedia.org/api/rest_v1/",
   "example": "wiki Lisbon",
   "sample": {
    "place": null,
    "url": "https://en.wikipedia.org/w/api.php?action=query&prop=extracts&exintro=1&explaintext=1&exsentences=2&redirects=1&format=json&formatversion=2&titles=Lisbon"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Wikipedia page summary API (https://en.wikipedia.org/w/api.php?action=query&prop=extracts&exintro=1&explaintext=1&exsentences=2&redirects=1&format=json&formatversion=2&titles=Lisbon), answer: \"wiki Lisbon\"."
  },
  {
   "name": "zip-lookup",
   "title": "US ZIP code lookup (Zippopotam.us)",
   "what": "City and state for a US ZIP code, e.g. 'zip 47401'. No key.",
   "when": [
    "zip code",
    "zip",
    "zipcode",
    "postcode"
   ],
   "needs_location": false,
   "url": "https://api.zippopotam.us/us/{zip}",
   "tokens": [
    "zip"
   ],
   "inputs": {
    "zip": {
     "what": "a 5-digit US ZIP code",
     "pattern": "^[0-9]{5}$"
    }
   },
   "read": [
    "places.0.place name",
    "places.0.state",
    "places.0.state abbreviation"
   ],
   "source": "Zippopotam.us",
   "docs": "https://www.zippopotam.us/",
   "example": "zip code 47401",
   "sample": {
    "place": null,
    "url": "https://api.zippopotam.us/us/47401"
   },
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Zippopotam.us API (https://api.zippopotam.us/us/47401), answer: \"zip code 47401\"."
  }
 ],
 "apis": [
  {
   "id": "open-meteo-forecast",
   "name": "Open-Meteo Forecast",
   "category": "Weather & climate",
   "answers": "Current weather, hourly and 16-day forecasts anywhere",
   "region": "Global",
   "example": "https://api.open-meteo.com/v1/forecast?latitude=39.1653&longitude=-86.5264&current=temperature_2m,weather_code",
   "docs": "https://open-meteo.com/en/docs",
   "limits": "Free for non-commercial use, < 10,000 calls/day; CC BY 4.0 attribution",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open-Meteo Forecast API (https://api.open-meteo.com/v1/forecast?latitude=39.1653&longitude=-86.5264&daily=temperature_2m_max,temperature_2m_min,precipitation_probability_max,weather_code&temperature_unit=fahrenheit&timezone=auto&forecast_days=2), answer: \"weather tomorrow\" for Bloomington, IN.",
   "grok_prompt_template": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open-Meteo Forecast API (https://api.open-meteo.com/v1/forecast?latitude={lat}&longitude={lng}&daily=temperature_2m_max,temperature_2m_min,precipitation_probability_max,weather_code&temperature_unit=fahrenheit&timezone=auto&forecast_days=2, with {lat},{lng} for my place), answer: \"weather tomorrow\" for {place}."
  },
  {
   "id": "open-meteo-archive",
   "name": "Open-Meteo Historical Weather",
   "category": "Weather & climate",
   "answers": "What the weather was on a past date (back to 1940)",
   "region": "Global",
   "example": "https://archive-api.open-meteo.com/v1/archive?latitude=39.1653&longitude=-86.5264&start_date=2026-10-01&end_date=2026-10-02&daily=temperature_2m_max",
   "docs": "https://open-meteo.com/en/docs/historical-weather-api",
   "limits": "Non-commercial free tier; CC BY 4.0",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open-Meteo Historical Weather API (https://archive-api.open-meteo.com/v1/archive?latitude=39.1653&longitude=-86.5264&start_date=2026-10-01&end_date=2026-10-02&daily=temperature_2m_max), what does it show for \"What the weather was on a past date (back to 1940)\" right now? Summarize briefly."
  },
  {
   "id": "open-meteo-climate",
   "name": "Open-Meteo Climate Change",
   "category": "Weather & climate",
   "answers": "Long-range climate projections for a place",
   "region": "Global",
   "example": "https://climate-api.open-meteo.com/v1/climate?latitude=39.1653&longitude=-86.5264&start_date=2030-01-01&end_date=2030-01-02&models=MRI_AGCM3_2_S&daily=temperature_2m_max",
   "docs": "https://open-meteo.com/en/docs/climate-api",
   "limits": "Non-commercial free tier; CC BY 4.0",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open-Meteo Climate Change API (https://climate-api.open-meteo.com/v1/climate?latitude=39.1653&longitude=-86.5264&start_date=2030-01-01&end_date=2030-01-02&models=MRI_AGCM3_2_S&daily=temperature_2m_max), what does it show for \"Long-range climate projections for a place\" right now? Summarize briefly."
  },
  {
   "id": "open-meteo-ensemble",
   "name": "Open-Meteo Ensemble",
   "category": "Weather & climate",
   "answers": "How uncertain the forecast is (ensemble spread)",
   "region": "Global",
   "example": "https://ensemble-api.open-meteo.com/v1/ensemble?latitude=39.1653&longitude=-86.5264&hourly=temperature_2m&models=icon_seamless&forecast_days=1",
   "docs": "https://open-meteo.com/en/docs/ensemble-api",
   "limits": "Non-commercial free tier; CC BY 4.0",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open-Meteo Ensemble API (https://ensemble-api.open-meteo.com/v1/ensemble?latitude=39.1653&longitude=-86.5264&hourly=temperature_2m&models=icon_seamless&forecast_days=1), what does it show for \"How uncertain the forecast is (ensemble spread)\" right now? Summarize briefly."
  },
  {
   "id": "nws-points",
   "name": "US National Weather Service (forecast)",
   "category": "Weather & climate",
   "answers": "Official NWS forecast for a US point",
   "region": "US",
   "example": "https://api.weather.gov/points/39.1653,-86.5264",
   "docs": "https://www.weather.gov/documentation/services-web-api",
   "limits": "No key; send a User-Agent identifying your app; public domain",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the US National Weather Service (forecast) API (https://api.weather.gov/points/39.1653,-86.5264), what does it show for \"Official NWS forecast for a US point\" right now? Summarize briefly."
  },
  {
   "id": "nws-stations-obs",
   "name": "NWS latest observation",
   "category": "Weather & climate",
   "answers": "Latest observed conditions at a weather station",
   "region": "US",
   "example": "https://api.weather.gov/stations/KBMG/observations/latest",
   "docs": "https://www.weather.gov/documentation/services-web-api",
   "limits": "No key; User-Agent required",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the NWS latest observation API (https://api.weather.gov/stations/KBMG/observations/latest), what does it show for \"Latest observed conditions at a weather station\" right now? Summarize briefly."
  },
  {
   "id": "met-no",
   "name": "MET Norway Locationforecast",
   "category": "Weather & climate",
   "answers": "Global forecast from the Norwegian Meteorological Institute",
   "region": "Global",
   "example": "https://api.met.no/weatherapi/locationforecast/2.0/compact?lat=38.7223&lon=-9.1393",
   "docs": "https://api.met.no/weatherapi/locationforecast/2.0/documentation",
   "limits": "No key; identifying User-Agent required; cache responses; CC BY 4.0",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the MET Norway Locationforecast API (https://api.met.no/weatherapi/locationforecast/2.0/compact?lat=38.7223&lon=-9.1393), what does it show for \"Global forecast from the Norwegian Meteorological Institute\" right now? Summarize briefly."
  },
  {
   "id": "ipma-forecast",
   "name": "IPMA Portugal city forecast",
   "category": "Weather & climate",
   "answers": "5-day forecast for Portuguese cities (Lisbon = 1110600)",
   "region": "PT",
   "example": "https://api.ipma.pt/open-data/forecast/meteorology/cities/daily/1110600.json",
   "docs": "https://api.ipma.pt/",
   "limits": "No key; IPMA open data terms (attribution)",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the IPMA Portugal city forecast API (https://api.ipma.pt/open-data/forecast/meteorology/cities/daily/1110600.json), answer: \"ipma forecast\"."
  },
  {
   "id": "ipma-sea",
   "name": "IPMA sea state",
   "category": "Weather & climate",
   "answers": "Wave height and sea temperature forecast for Portugal's coast",
   "region": "PT",
   "example": "https://api.ipma.pt/open-data/forecast/oceanography/daily/hp-daily-sea-forecast-day0.json",
   "docs": "https://api.ipma.pt/",
   "limits": "No key; attribution",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the IPMA sea state API (https://api.ipma.pt/open-data/forecast/oceanography/daily/hp-daily-sea-forecast-day0.json), what does it show for \"Wave height and sea temperature forecast for Portugal's coast\" right now? Summarize briefly."
  },
  {
   "id": "rainviewer",
   "name": "RainViewer weather maps",
   "category": "Weather & climate",
   "answers": "Is it raining nearby? Radar frames index",
   "region": "Global",
   "example": "https://api.rainviewer.com/public/weather-maps.json",
   "docs": "https://www.rainviewer.com/api.html",
   "limits": "Free for personal/non-commercial use; attribution",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the RainViewer weather maps API (https://api.rainviewer.com/public/weather-maps.json), what does it show for \"Is it raining nearby? Radar frames index\" right now? Summarize briefly."
  },
  {
   "id": "dwd-brightsky",
   "name": "Bright Sky (DWD, Germany)",
   "category": "Weather & climate",
   "answers": "German Weather Service forecasts and observations",
   "region": "DE",
   "example": "https://api.brightsky.dev/current_weather?lat=52.52&lon=13.40",
   "docs": "https://brightsky.dev/docs/",
   "limits": "No key; DWD open data",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Bright Sky (DWD, Germany) API (https://api.brightsky.dev/current_weather?lat=52.52&lon=13.40), what does it show for \"German Weather Service forecasts and observations\" right now? Summarize briefly."
  },
  {
   "id": "open-meteo-air",
   "name": "Open-Meteo Air Quality",
   "category": "Air quality & environment",
   "answers": "US AQI, PM2.5, ozone, pollen (Europe) for a place",
   "region": "Global",
   "example": "https://air-quality-api.open-meteo.com/v1/air-quality?latitude=39.1653&longitude=-86.5264&current=us_aqi,pm2_5",
   "docs": "https://open-meteo.com/en/docs/air-quality-api",
   "limits": "Non-commercial free tier; CAMS data, CC BY 4.0",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open-Meteo Air Quality API (https://air-quality-api.open-meteo.com/v1/air-quality?latitude=39.1653&longitude=-86.5264&current=us_aqi,pm2_5,ozone&timezone=auto), answer: \"how's the air quality\" for Bloomington, IN.",
   "grok_prompt_template": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open-Meteo Air Quality API (https://air-quality-api.open-meteo.com/v1/air-quality?latitude={lat}&longitude={lng}&current=us_aqi,pm2_5,ozone&timezone=auto, with {lat},{lng} for my place), answer: \"how's the air quality\" for {place}."
  },
  {
   "id": "uk-carbon-intensity",
   "name": "UK Carbon Intensity",
   "category": "Air quality & environment",
   "answers": "How clean the UK grid is right now (good time to run the dishwasher?)",
   "region": "UK",
   "example": "https://api.carbonintensity.org.uk/intensity",
   "docs": "https://carbon-intensity.github.io/api-definitions/",
   "limits": "No key; CC BY 4.0",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the UK Carbon Intensity API (https://api.carbonintensity.org.uk/intensity), answer: \"uk grid carbon intensity\"."
  },
  {
   "id": "sensor-community",
   "name": "Sensor.Community",
   "category": "Air quality & environment",
   "answers": "Citizen-science PM sensors near a point",
   "region": "Global",
   "example": "https://data.sensor.community/airrohr/v1/filter/area=38.7223,-9.1393,2",
   "docs": "https://github.com/opendata-stuttgart/meta/wiki/EN-APIs",
   "limits": "No key; ODbL; don't poll faster than 5 min",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Sensor.Community API (https://data.sensor.community/airrohr/v1/filter/area=38.7223,-9.1393,2), what does it show for \"Citizen-science PM sensors near a point\" right now? Summarize briefly."
  },
  {
   "id": "currentuvindex",
   "name": "Current UV Index",
   "category": "Air quality & environment",
   "answers": "UV index now and forecast for a place",
   "region": "Global",
   "example": "https://currentuvindex.com/api/v1/uvi?latitude=39.1653&longitude=-86.5264",
   "docs": "https://currentuvindex.com/api",
   "limits": "No key; free; fair use",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Current UV Index API (https://currentuvindex.com/api/v1/uvi?latitude=39.1653&longitude=-86.5264), what does it show for \"UV index now and forecast for a place\" right now? Summarize briefly."
  },
  {
   "id": "nasa-power",
   "name": "NASA POWER",
   "category": "Air quality & environment",
   "answers": "Solar radiation and climate data for a point (solar panel questions)",
   "region": "Global",
   "example": "https://power.larc.nasa.gov/api/temporal/daily/point?parameters=ALLSKY_SFC_SW_DWN&community=RE&longitude=-86.5264&latitude=39.1653&start=20260901&end=20260902&format=JSON",
   "docs": "https://power.larc.nasa.gov/docs/services/api/",
   "limits": "No key; NASA open data",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the NASA POWER API (https://power.larc.nasa.gov/api/temporal/daily/point?parameters=ALLSKY_SFC_SW_DWN&community=RE&longitude=-86.5264&latitude=39.1653&start=20260901&end=20260902&format=JSON), what does it show for \"Solar radiation and climate data for a point (solar panel questions)\" right now? Summarize briefly."
  },
  {
   "id": "nws-alerts",
   "name": "NWS active alerts",
   "category": "Alerts & hazards",
   "answers": "Weather warnings and watches for a US point",
   "region": "US",
   "example": "https://api.weather.gov/alerts/active?point=39.1653,-86.5264",
   "docs": "https://www.weather.gov/documentation/services-web-api",
   "limits": "No key; User-Agent required",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the NWS active alerts API (https://api.weather.gov/alerts/active?point=39.1653,-86.5264), answer: \"any alerts\" for Bloomington, IN.",
   "grok_prompt_template": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the NWS active alerts API (https://api.weather.gov/alerts/active?point={lat},{lng}, with {lat},{lng} for my place), answer: \"any alerts\" for {place}."
  },
  {
   "id": "usgs-quakes-feed",
   "name": "USGS earthquakes (feed)",
   "category": "Alerts & hazards",
   "answers": "Earthquakes M2.5+ worldwide in the last day",
   "region": "Global",
   "example": "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_day.geojson",
   "docs": "https://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php",
   "limits": "No key; public domain",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the USGS earthquakes (feed) API (https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_day.geojson), what does it show for \"Earthquakes M2.5+ worldwide in the last day\" right now? Summarize briefly."
  },
  {
   "id": "usgs-quakes-query",
   "name": "USGS earthquake search",
   "category": "Alerts & hazards",
   "answers": "Recent earthquakes near a place",
   "region": "Global",
   "example": "https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&latitude=39.1653&longitude=-86.5264&maxradiuskm=1000&limit=3&orderby=time",
   "docs": "https://earthquake.usgs.gov/fdsnws/event/1/",
   "limits": "No key; public domain",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the USGS earthquake search API (https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&latitude=61.2181&longitude=-149.9003&maxradiuskm=500&starttime=2026-10-04&minmagnitude=2.5&orderby=time&limit=3), answer: \"any earthquakes\" for Anchorage.",
   "grok_prompt_template": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the USGS earthquake search API (https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&latitude={lat}&longitude={lng}&maxradiuskm=500&starttime={days_ago_7}&minmagnitude=2.5&orderby=time&limit=3, with {lat},{lng} for my place), answer: \"any earthquakes\" for {place}."
  },
  {
   "id": "emsc-quakes",
   "name": "EMSC Seismic Portal",
   "category": "Alerts & hazards",
   "answers": "European-Mediterranean earthquakes (great for Portugal)",
   "region": "EU",
   "example": "https://www.seismicportal.eu/fdsnws/event/1/query?format=json&limit=3",
   "docs": "https://www.seismicportal.eu/fdsn-wsevent.html",
   "limits": "No key; fair use",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the EMSC Seismic Portal API (https://www.seismicportal.eu/fdsnws/event/1/query?format=json&lat=38.7223&lon=-9.1393&maxradius=4.5&limit=3&orderby=time), answer: \"emsc earthquake\" for Lisbon.",
   "grok_prompt_template": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the EMSC Seismic Portal API (https://www.seismicportal.eu/fdsnws/event/1/query?format=json&lat={lat}&lon={lng}&maxradius=4.5&limit=3&orderby=time, with {lat},{lng} for my place), answer: \"emsc earthquake\" for {place}."
  },
  {
   "id": "nasa-eonet",
   "name": "NASA EONET",
   "category": "Alerts & hazards",
   "answers": "Open natural events: wildfires, storms, volcanoes",
   "region": "Global",
   "example": "https://eonet.gsfc.nasa.gov/api/v3/events?limit=3&status=open",
   "docs": "https://eonet.gsfc.nasa.gov/docs/v3",
   "limits": "No key; NASA open data",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the NASA EONET API (https://eonet.gsfc.nasa.gov/api/v3/events?status=open&limit=4&days=14), answer: \"natural events\"."
  },
  {
   "id": "nhc-storms",
   "name": "NOAA National Hurricane Center",
   "category": "Alerts & hazards",
   "answers": "Active Atlantic/Pacific tropical storms",
   "region": "US",
   "example": "https://www.nhc.noaa.gov/CurrentStorms.json",
   "docs": "https://www.nhc.noaa.gov/aboutrss.shtml",
   "limits": "No key; public domain",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the NOAA National Hurricane Center API (https://www.nhc.noaa.gov/CurrentStorms.json), answer: \"any tropical storms\"."
  },
  {
   "id": "fema-declarations",
   "name": "OpenFEMA disaster declarations",
   "category": "Alerts & hazards",
   "answers": "Recent federal disaster declarations for a state",
   "region": "US",
   "example": "https://www.fema.gov/api/open/v2/DisasterDeclarationsSummaries?$top=2&$orderby=declarationDate%20desc&$filter=state%20eq%20%27IN%27",
   "docs": "https://www.fema.gov/about/openfema/api",
   "limits": "No key; public domain",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the OpenFEMA disaster declarations API (https://www.fema.gov/api/open/v2/DisasterDeclarationsSummaries?$filter=state%20eq%20'TX'&$orderby=declarationDate%20desc&$top=3&$select=declarationTitle,declarationDate,incidentType,designatedArea), answer: \"fema disasters in tx\"."
  },
  {
   "id": "swpc-kp",
   "name": "NOAA Space Weather (Kp)",
   "category": "Alerts & hazards",
   "answers": "Geomagnetic activity: chance of northern lights",
   "region": "Global",
   "example": "https://services.swpc.noaa.gov/products/noaa-planetary-k-index.json",
   "docs": "https://www.swpc.noaa.gov/products/planetary-k-index",
   "limits": "No key; public domain",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the NOAA Space Weather (Kp) API (https://services.swpc.noaa.gov/products/noaa-planetary-k-index.json), what does it show for \"Geomagnetic activity: chance of northern lights\" right now? Summarize briefly."
  },
  {
   "id": "swpc-aurora",
   "name": "NOAA aurora forecast",
   "category": "Alerts & hazards",
   "answers": "30-minute aurora probability grid",
   "region": "Global",
   "example": "https://services.swpc.noaa.gov/json/ovation_aurora_latest.json",
   "docs": "https://www.swpc.noaa.gov/products/aurora-30-minute-forecast",
   "limits": "No key; public domain; large (~1 MB)",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the NOAA aurora forecast API (https://services.swpc.noaa.gov/json/ovation_aurora_latest.json), what does it show for \"30-minute aurora probability grid\" right now? Summarize briefly."
  },
  {
   "id": "uk-floods",
   "name": "UK Environment Agency floods",
   "category": "Alerts & hazards",
   "answers": "Current flood warnings in England",
   "region": "UK",
   "example": "https://environment.data.gov.uk/flood-monitoring/id/floods?_limit=3",
   "docs": "https://environment.data.gov.uk/flood-monitoring/doc/reference",
   "limits": "No key; Open Government Licence",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the UK Environment Agency floods API (https://environment.data.gov.uk/flood-monitoring/id/floods?_limit=3), what does it show for \"Current flood warnings in England\" right now? Summarize briefly."
  },
  {
   "id": "noaa-tides",
   "name": "NOAA tide predictions",
   "category": "Water, tides & marine",
   "answers": "Today's high and low tides at a US station",
   "region": "US",
   "example": "https://api.tidesandcurrents.noaa.gov/api/prod/datagetter?date=today&station=8443970&product=predictions&datum=MLLW&time_zone=lst_ldt&units=english&interval=hilo&format=json&application=civicbot",
   "docs": "https://api.tidesandcurrents.noaa.gov/api/prod/",
   "limits": "No key; public domain; pass application=<your app>",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the NOAA tide predictions API (https://api.tidesandcurrents.noaa.gov/api/prod/datagetter?product=predictions&station=8443970&date=today&datum=MLLW&interval=hilo&units=english&time_zone=lst_ldt&format=json&application=civicbot), answer: \"when is high tide\"."
  },
  {
   "id": "noaa-water-level",
   "name": "NOAA water level",
   "category": "Water, tides & marine",
   "answers": "Latest observed water level at a tide gauge",
   "region": "US",
   "example": "https://api.tidesandcurrents.noaa.gov/api/prod/datagetter?date=latest&station=8443970&product=water_level&datum=MLLW&time_zone=lst_ldt&units=english&format=json&application=civicbot",
   "docs": "https://api.tidesandcurrents.noaa.gov/api/prod/",
   "limits": "No key; public domain",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the NOAA water level API (https://api.tidesandcurrents.noaa.gov/api/prod/datagetter?date=latest&station=8443970&product=water_level&datum=MLLW&time_zone=lst_ldt&units=english&format=json&application=civicbot), what does it show for \"Latest observed water level at a tide gauge\" right now? Summarize briefly."
  },
  {
   "id": "usgs-water-iv",
   "name": "USGS Water Services (instantaneous)",
   "category": "Water, tides & marine",
   "answers": "River flow and gauge height right now",
   "region": "US",
   "example": "https://waterservices.usgs.gov/nwis/iv/?format=json&sites=03353000&parameterCd=00060",
   "docs": "https://waterservices.usgs.gov/docs/instantaneous-values/",
   "limits": "No key; public domain (legacy service; USGS is moving to api.waterdata.usgs.gov)",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the USGS Water Services (instantaneous) API (https://waterservices.usgs.gov/nwis/iv/?format=json&sites=01646500&parameterCd=00060,00065&siteStatus=active), answer: \"river level 01646500\"."
  },
  {
   "id": "usgs-waterdata",
   "name": "USGS Water Data OGC API",
   "category": "Water, tides & marine",
   "answers": "Monitoring locations and latest values (new USGS API)",
   "region": "US",
   "example": "https://api.waterdata.usgs.gov/ogcapi/v0/collections/monitoring-locations/items?f=json&limit=1",
   "docs": "https://api.waterdata.usgs.gov/",
   "limits": "No key for low volume (free key raises limits); public domain",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the USGS Water Data OGC API API (https://api.waterdata.usgs.gov/ogcapi/v0/collections/monitoring-locations/items?f=json&limit=1), what does it show for \"Monitoring locations and latest values (new USGS API)\" right now? Summarize briefly."
  },
  {
   "id": "open-meteo-marine",
   "name": "Open-Meteo Marine",
   "category": "Water, tides & marine",
   "answers": "Wave height and swell for a coastal point",
   "region": "Global",
   "example": "https://marine-api.open-meteo.com/v1/marine?latitude=38.68&longitude=-9.35&current=wave_height",
   "docs": "https://open-meteo.com/en/docs/marine-weather-api",
   "limits": "Non-commercial free tier; CC BY 4.0",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open-Meteo Marine API (https://marine-api.open-meteo.com/v1/marine?latitude=38.6913&longitude=-9.4215&current=wave_height,wave_period,sea_surface_temperature&timezone=auto), answer: \"wave height\" for Cascais.",
   "grok_prompt_template": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open-Meteo Marine API (https://marine-api.open-meteo.com/v1/marine?latitude={lat}&longitude={lng}&current=wave_height,wave_period,sea_surface_temperature&timezone=auto, with {lat},{lng} for my place), answer: \"wave height\" for {place}."
  },
  {
   "id": "open-meteo-flood",
   "name": "Open-Meteo Flood (GloFAS)",
   "category": "Water, tides & marine",
   "answers": "River discharge forecast near a place",
   "region": "Global",
   "example": "https://flood-api.open-meteo.com/v1/flood?latitude=39.1653&longitude=-86.5264&daily=river_discharge&forecast_days=3",
   "docs": "https://open-meteo.com/en/docs/flood-api",
   "limits": "Non-commercial free tier; CC BY 4.0",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open-Meteo Flood (GloFAS) API (https://flood-api.open-meteo.com/v1/flood?latitude=39.1653&longitude=-86.5264&daily=river_discharge&forecast_days=3), what does it show for \"River discharge forecast near a place\" right now? Summarize briefly."
  },
  {
   "id": "mbta-v3",
   "name": "MBTA V3",
   "category": "Transit",
   "answers": "Boston subway/bus predictions, alerts, stops",
   "region": "US",
   "example": "https://api-v3.mbta.com/predictions?filter[stop]=place-pktrm&page[limit]=2",
   "docs": "https://www.mbta.com/developers/v3-api",
   "limits": "No key: 20 req/min; free key: 1000 req/min",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the MBTA V3 API (https://api-v3.mbta.com/predictions?filter%5Bstop%5D=place-pktrm&sort=departure_time&page%5Blimit%5D=25&fields%5Bprediction%5D=arrival_time,departure_time,direction_id), answer: \"next train at place-pktrm\"."
  },
  {
   "id": "mbta-alerts",
   "name": "MBTA service alerts",
   "category": "Transit",
   "answers": "Current Boston transit disruptions",
   "region": "US",
   "example": "https://api-v3.mbta.com/alerts?filter[activity]=BOARD&page[limit]=2",
   "docs": "https://www.mbta.com/developers/v3-api",
   "limits": "No key: 20 req/min",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the MBTA service alerts API (https://api-v3.mbta.com/alerts?filter%5Broute_type%5D=0,1&filter%5Bactivity%5D=BOARD,EXIT,RIDE&filter%5Bdatetime%5D=NOW&page%5Blimit%5D=4&fields%5Balert%5D=service_effect,short_header,severity&sort=-severity), answer: \"mbta alerts\"."
  },
  {
   "id": "tfl-status",
   "name": "TfL Unified API (line status)",
   "category": "Transit",
   "answers": "London Tube line status",
   "region": "UK",
   "example": "https://api.tfl.gov.uk/Line/Mode/tube/Status",
   "docs": "https://api-portal.tfl.gov.uk/",
   "limits": "Works without a key at low volume; free key for 500 req/min",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the TfL Unified API (line status) API (https://api.tfl.gov.uk/Line/Mode/tube/Status), answer: \"tube status\"."
  },
  {
   "id": "tfl-bikepoints",
   "name": "TfL BikePoints",
   "category": "Transit",
   "answers": "Santander Cycles docks in London",
   "region": "UK",
   "example": "https://api.tfl.gov.uk/BikePoint/BikePoints_1",
   "docs": "https://api-portal.tfl.gov.uk/",
   "limits": "No key at low volume",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the TfL BikePoints API (https://api.tfl.gov.uk/BikePoint/BikePoints_1), what does it show for \"Santander Cycles docks in London\" right now? Summarize briefly."
  },
  {
   "id": "carris-metropolitana",
   "name": "Carris Metropolitana",
   "category": "Transit",
   "answers": "Lisbon-area bus arrivals, stops, alerts",
   "region": "PT",
   "example": "https://api.carrismetropolitana.pt/v2/arrivals/by_stop/020429",
   "docs": "https://github.com/carrismetropolitana/api",
   "limits": "No key; fair use",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Carris Metropolitana API (https://api.carrismetropolitana.pt/v2/arrivals/by_stop/020429), answer: \"carris 020429\"."
  },
  {
   "id": "carris-alerts",
   "name": "Carris Metropolitana alerts",
   "category": "Transit",
   "answers": "Service alerts for Lisbon-area buses",
   "region": "PT",
   "example": "https://api.carrismetropolitana.pt/v2/alerts",
   "docs": "https://github.com/carrismetropolitana/api",
   "limits": "No key",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Carris Metropolitana alerts API (https://api.carrismetropolitana.pt/v2/alerts), what does it show for \"Service alerts for Lisbon-area buses\" right now? Summarize briefly."
  },
  {
   "id": "mta-subway-alerts",
   "name": "MTA subway alerts (JSON)",
   "category": "Transit",
   "answers": "NYC subway service alerts",
   "region": "US",
   "example": "https://api-endpoint.mta.info/Dataservice/mtagtfsfeeds/camsys%2Fsubway-alerts.json",
   "docs": "https://api.mta.info/",
   "limits": "No key (since 2024)",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the MTA subway alerts (JSON) API (https://api-endpoint.mta.info/Dataservice/mtagtfsfeeds/camsys%2Fsubway-alerts.json), what does it show for \"NYC subway service alerts\" right now? Summarize briefly."
  },
  {
   "id": "mta-gtfs-rt",
   "name": "MTA subway GTFS-Realtime",
   "category": "Transit",
   "answers": "NYC subway arrivals (protobuf; civicbot's gtfs-transit built-in reads it)",
   "region": "US",
   "example": "https://api-endpoint.mta.info/Dataservice/mtagtfsfeeds/nyct%2Fgtfs-ace",
   "docs": "https://api.mta.info/",
   "limits": "No key",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the MTA subway GTFS-Realtime API (https://api-endpoint.mta.info/Dataservice/mtagtfsfeeds/nyct%2Fgtfs-ace), what does it show for \"NYC subway arrivals (protobuf; civicbot's gtfs-transit built-in reads it)\" right now? Summarize briefly."
  },
  {
   "id": "mbta-gtfs-rt",
   "name": "MBTA GTFS-Realtime",
   "category": "Transit",
   "answers": "Boston trip updates (protobuf)",
   "region": "US",
   "example": "https://cdn.mbta.com/realtime/TripUpdates.pb",
   "docs": "https://www.mbta.com/developers/gtfs-realtime",
   "limits": "No key",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the MBTA GTFS-Realtime API (https://cdn.mbta.com/realtime/TripUpdates.pb), what does it show for \"Boston trip updates (protobuf)\" right now? Summarize briefly."
  },
  {
   "id": "irail",
   "name": "iRail (Belgian railways)",
   "category": "Transit",
   "answers": "Belgian train departures",
   "region": "EU",
   "example": "https://api.irail.be/v1/liveboard/?station=Gent-Sint-Pieters&format=json&lang=en",
   "docs": "https://docs.irail.be/",
   "limits": "No key; 3 req/s; send User-Agent",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the iRail (Belgian railways) API (https://api.irail.be/v1/liveboard/?station=Gent-Sint-Pieters&format=json&lang=en), what does it show for \"Belgian train departures\" right now? Summarize briefly."
  },
  {
   "id": "swiss-transport",
   "name": "Swiss public transport (transport.opendata.ch)",
   "category": "Transit",
   "answers": "Swiss departures and connections",
   "region": "EU",
   "example": "https://transport.opendata.ch/v1/stationboard?station=Zurich%20HB&limit=2",
   "docs": "https://transport.opendata.ch/docs.html",
   "limits": "No key; fair use",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Swiss public transport (transport.opendata.ch) API (https://transport.opendata.ch/v1/stationboard?station=Zurich%20HB&limit=2), what does it show for \"Swiss departures and connections\" right now? Summarize briefly."
  },
  {
   "id": "entur",
   "name": "Entur (Norway)",
   "category": "Transit",
   "answers": "Norwegian journey planner (GraphQL, POST)",
   "region": "EU",
   "example": "https://api.entur.io/geocoder/v1/autocomplete?text=oslo&size=1",
   "docs": "https://developer.entur.org/",
   "limits": "No key; send ET-Client-Name header",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Entur (Norway) API (https://api.entur.io/geocoder/v1/autocomplete?text=oslo&size=1), what does it show for \"Norwegian journey planner (GraphQL, POST)\" right now? Summarize briefly."
  },
  {
   "id": "adsb-lol",
   "name": "adsb.lol",
   "category": "Flights & space",
   "answers": "Aircraft within N nautical miles of a point",
   "region": "Global",
   "example": "https://api.adsb.lol/v2/point/40.64/-73.78/5",
   "docs": "https://api.adsb.lol/docs",
   "limits": "No key; ODbL; fair use",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the adsb.lol API (https://api.adsb.lol/v2/point/40.64/-73.78/5), what does it show for \"Aircraft within N nautical miles of a point\" right now? Summarize briefly."
  },
  {
   "id": "gbfs-citibike",
   "name": "Citi Bike (NYC) GBFS",
   "category": "Bikeshare & micromobility",
   "answers": "Bikes and docks available at each station",
   "region": "US",
   "example": "https://gbfs.citibikenyc.com/gbfs/en/station_status.json",
   "docs": "https://github.com/MobilityData/gbfs",
   "limits": "No key; GBFS open data (operator license)",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Citi Bike (NYC) GBFS API (https://gbfs.citibikenyc.com/gbfs/en/station_status.json), what does it show for \"Bikes and docks available at each station\" right now? Summarize briefly."
  },
  {
   "id": "gbfs-divvy",
   "name": "Divvy (Chicago) GBFS",
   "category": "Bikeshare & micromobility",
   "answers": "Bikes and docks available at each station",
   "region": "US",
   "example": "https://gbfs.divvybikes.com/gbfs/en/station_status.json",
   "docs": "https://github.com/MobilityData/gbfs",
   "limits": "No key; GBFS open data (operator license)",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Divvy (Chicago) GBFS API (https://gbfs.divvybikes.com/gbfs/en/station_status.json), what does it show for \"Bikes and docks available at each station\" right now? Summarize briefly."
  },
  {
   "id": "gbfs-baywheels",
   "name": "Bay Wheels (SF) GBFS",
   "category": "Bikeshare & micromobility",
   "answers": "Bikes and docks available at each station",
   "region": "US",
   "example": "https://gbfs.lyftbikes.com/gbfs/en/station_status.json",
   "docs": "https://github.com/MobilityData/gbfs",
   "limits": "No key; GBFS open data (operator license)",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Bay Wheels (SF) GBFS API (https://gbfs.lyftbikes.com/gbfs/en/station_status.json), what does it show for \"Bikes and docks available at each station\" right now? Summarize briefly."
  },
  {
   "id": "gbfs-capital-bikeshare",
   "name": "Capital Bikeshare (DC) GBFS",
   "category": "Bikeshare & micromobility",
   "answers": "Bikes and docks available at each station",
   "region": "US",
   "example": "https://gbfs.capitalbikeshare.com/gbfs/en/station_status.json",
   "docs": "https://github.com/MobilityData/gbfs",
   "limits": "No key; GBFS open data (operator license)",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Capital Bikeshare (DC) GBFS API (https://gbfs.capitalbikeshare.com/gbfs/en/station_status.json), what does it show for \"Bikes and docks available at each station\" right now? Summarize briefly."
  },
  {
   "id": "gbfs-bluebikes",
   "name": "Bluebikes (Boston) GBFS",
   "category": "Bikeshare & micromobility",
   "answers": "Bikes and docks available at each station",
   "region": "US",
   "example": "https://gbfs.bluebikes.com/gbfs/en/station_status.json",
   "docs": "https://github.com/MobilityData/gbfs",
   "limits": "No key; GBFS open data (operator license)",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Bluebikes (Boston) GBFS API (https://gbfs.bluebikes.com/gbfs/en/station_status.json), what does it show for \"Bikes and docks available at each station\" right now? Summarize briefly."
  },
  {
   "id": "gbfs-biketown",
   "name": "BIKETOWN (Portland) GBFS",
   "category": "Bikeshare & micromobility",
   "answers": "Bikes and docks available at each station",
   "region": "US",
   "example": "https://gbfs.biketownpdx.com/gbfs/en/station_status.json",
   "docs": "https://github.com/MobilityData/gbfs",
   "limits": "No key; GBFS open data (operator license)",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the BIKETOWN (Portland) GBFS API (https://gbfs.biketownpdx.com/gbfs/en/station_status.json), what does it show for \"Bikes and docks available at each station\" right now? Summarize briefly."
  },
  {
   "id": "citybikes",
   "name": "CityBikes API",
   "category": "Bikeshare & micromobility",
   "answers": "Bikeshare availability in 600+ cities (incl. Lisbon GIRA)",
   "region": "Global",
   "example": "https://api.citybik.es/v2/networks/gira",
   "docs": "https://api.citybik.es/v2/",
   "limits": "No key; fair use; AGPL project",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the CityBikes API API (https://api.citybik.es/v2/networks/gira), what does it show for \"Bikeshare availability in 600+ cities (incl. Lisbon GIRA)\" right now? Summarize briefly."
  },
  {
   "id": "open311-bloomington",
   "name": "Bloomington, IN Open311",
   "category": "311 & service requests",
   "answers": "Which problems the city accepts (GET services); reads are keyless",
   "region": "US",
   "example": "https://bloomington.in.gov/crm/open311/v2/services.json",
   "docs": "https://wiki.open311.org/GeoReport_v2/",
   "limits": "Reads keyless; FILING needs a city-issued key (civicbot keeps filing dry-run)",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Bloomington, IN Open311 API (https://bloomington.in.gov/crm/open311/v2/services.json), what does it show for \"Which problems the city accepts (GET services); reads are keyless\" right now? Summarize briefly."
  },
  {
   "id": "open311-boston",
   "name": "Boston Open311",
   "category": "311 & service requests",
   "answers": "Which problems the city accepts (GET services); reads are keyless",
   "region": "US",
   "example": "https://311.boston.gov/open311/v2/services.json",
   "docs": "https://wiki.open311.org/GeoReport_v2/",
   "limits": "Reads keyless; FILING needs a city-issued key (civicbot keeps filing dry-run)",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Boston Open311 API (https://311.boston.gov/open311/v2/services.json), what does it show for \"Which problems the city accepts (GET services); reads are keyless\" right now? Summarize briefly."
  },
  {
   "id": "open311-austin",
   "name": "Austin Open311",
   "category": "311 & service requests",
   "answers": "Which problems the city accepts (GET services); reads are keyless",
   "region": "US",
   "example": "https://311.austintexas.gov/open311/v2/services.json",
   "docs": "https://wiki.open311.org/GeoReport_v2/",
   "limits": "Reads keyless; FILING needs a city-issued key (civicbot keeps filing dry-run)",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Austin Open311 API (https://311.austintexas.gov/open311/v2/services.json), what does it show for \"Which problems the city accepts (GET services); reads are keyless\" right now? Summarize briefly."
  },
  {
   "id": "open311-brookline",
   "name": "Brookline, MA Open311",
   "category": "311 & service requests",
   "answers": "Which problems the city accepts (GET services); reads are keyless",
   "region": "US",
   "example": "https://spot.brooklinema.gov/open311/v2/services.json",
   "docs": "https://wiki.open311.org/GeoReport_v2/",
   "limits": "Reads keyless; FILING needs a city-issued key (civicbot keeps filing dry-run)",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Brookline, MA Open311 API (https://spot.brooklinema.gov/open311/v2/services.json), what does it show for \"Which problems the city accepts (GET services); reads are keyless\" right now? Summarize briefly."
  },
  {
   "id": "seeclickfix",
   "name": "SeeClickFix API v2",
   "category": "311 & service requests",
   "answers": "Recent issues reported near a point (hundreds of US towns)",
   "region": "US",
   "example": "https://seeclickfix.com/api/v2/issues?lat=41.3083&lng=-72.9259&per_page=2",
   "docs": "https://dev.seeclickfix.com/",
   "limits": "No key for reads; fair use",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the SeeClickFix API v2 API (https://seeclickfix.com/api/v2/issues?lat=41.3083&lng=-72.9259&per_page=3&sort=created_at&status=open,acknowledged), answer: \"open issues near here\" for New Haven, CT.",
   "grok_prompt_template": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the SeeClickFix API v2 API (https://seeclickfix.com/api/v2/issues?lat={lat}&lng={lng}&per_page=3&sort=created_at&status=open,acknowledged, with {lat},{lng} for my place), answer: \"open issues near here\" for {place}."
  },
  {
   "id": "nyc-311",
   "name": "NYC 311 requests (Socrata)",
   "category": "311 & service requests",
   "answers": "Recent NYC 311 complaints near a place",
   "region": "US",
   "example": "https://data.cityofnewyork.us/resource/erm2-nwe9.json?$limit=1",
   "docs": "https://dev.socrata.com/foundry/data.cityofnewyork.us/erm2-nwe9",
   "limits": "No key: throttled per IP; free app token raises limits",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the NYC 311 requests (Socrata) API (https://data.cityofnewyork.us/resource/erm2-nwe9.json?$where=within_circle(location,%2040.7128,%20-74.006,%20500)&$order=created_date%20DESC&$limit=3&$select=complaint_type,descriptor,status,created_date), answer: \"nyc 311 near me\" for Lower Manhattan.",
   "grok_prompt_template": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the NYC 311 requests (Socrata) API (https://data.cityofnewyork.us/resource/erm2-nwe9.json?$where=within_circle(location,%20{lat},%20{lng},%20500)&$order=created_date%20DESC&$limit=3&$select=complaint_type,descriptor,status,created_date, with {lat},{lng} for my place), answer: \"nyc 311 near me\" for {place}."
  },
  {
   "id": "chicago-311",
   "name": "Chicago 311 requests (Socrata)",
   "category": "311 & service requests",
   "answers": "Recent Chicago 311 requests near a place",
   "region": "US",
   "example": "https://data.cityofchicago.org/resource/v6vf-nfxy.json?$select=sr_type,status,created_date&$where=within_circle(location,41.8837,-87.6319,400)&$order=created_date%20DESC&$limit=2",
   "docs": "https://dev.socrata.com/foundry/data.cityofchicago.org/v6vf-nfxy",
   "limits": "No key: throttled; free app token raises limits",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Chicago 311 requests (Socrata) API (https://data.cityofchicago.org/resource/v6vf-nfxy.json?$select=sr_type,status,created_date&$where=within_circle(location,%2041.8837,%20-87.6324,%20400)%20AND%20created_date%20%3E%20'2026-09-11T00:00:00'&$order=created_date%20DESC&$limit=4), answer: \"311 requests near 121 N LaSalle St, Chicago\" for 121 N LaSalle St, Chicago.",
   "grok_prompt_template": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Chicago 311 requests (Socrata) API (https://data.cityofchicago.org/resource/v6vf-nfxy.json?$select=sr_type,status,created_date&$where=within_circle(location,%20{lat},%20{lng},%20400)%20AND%20created_date%20%3E%20'{days_ago_30}T00:00:00'&$order=created_date%20DESC&$limit=4, with {lat},{lng} for my place), answer: \"311 requests near 121 N LaSalle St, Chicago\" for {place}."
  },
  {
   "id": "sf-311",
   "name": "San Francisco 311 cases (Socrata)",
   "category": "311 & service requests",
   "answers": "Recent SF 311 cases near a place",
   "region": "US",
   "example": "https://data.sf.gov/resource/vw6y-z8j6.json?$limit=1",
   "docs": "https://dev.socrata.com/foundry/data.sf.gov/vw6y-z8j6",
   "limits": "No key: throttled",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the San Francisco 311 cases (Socrata) API (https://data.sf.gov/resource/vw6y-z8j6.json?$limit=1), what does it show for \"Recent SF 311 cases near a place\" right now? Summarize briefly."
  },
  {
   "id": "seattle-csr",
   "name": "Seattle customer service requests (Socrata)",
   "category": "311 & service requests",
   "answers": "Recent Seattle service requests",
   "region": "US",
   "example": "https://data.seattle.gov/resource/5ngg-rpne.json?$limit=1",
   "docs": "https://dev.socrata.com/foundry/data.seattle.gov/5ngg-rpne",
   "limits": "No key: throttled",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Seattle customer service requests (Socrata) API (https://data.seattle.gov/resource/5ngg-rpne.json?$limit=1), what does it show for \"Recent Seattle service requests\" right now? Summarize briefly."
  },
  {
   "id": "austin-311",
   "name": "Austin 311 (Transportation & Public Works)",
   "category": "311 & service requests",
   "answers": "Recent Austin street/traffic 311 requests",
   "region": "US",
   "example": "https://data.austintexas.gov/resource/38mr-dwji.json?$limit=1",
   "docs": "https://dev.socrata.com/foundry/data.austintexas.gov/38mr-dwji",
   "limits": "No key: throttled",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Austin 311 (Transportation & Public Works) API (https://data.austintexas.gov/resource/38mr-dwji.json?$limit=1), what does it show for \"Recent Austin street/traffic 311 requests\" right now? Summarize briefly."
  },
  {
   "id": "nola-311",
   "name": "New Orleans 311 (Socrata)",
   "category": "311 & service requests",
   "answers": "Recent New Orleans 311 calls",
   "region": "US",
   "example": "https://data.nola.gov/resource/2jgv-pqrq.json?$limit=1",
   "docs": "https://dev.socrata.com/foundry/data.nola.gov/2jgv-pqrq",
   "limits": "No key: throttled",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the New Orleans 311 (Socrata) API (https://data.nola.gov/resource/2jgv-pqrq.json?$limit=1), what does it show for \"Recent New Orleans 311 calls\" right now? Summarize briefly."
  },
  {
   "id": "kc-311",
   "name": "Kansas City 311 (Socrata)",
   "category": "311 & service requests",
   "answers": "Kansas City 311 reported issues",
   "region": "US",
   "example": "https://data.kcmo.org/resource/d4px-6rwg.json?$limit=1",
   "docs": "https://dev.socrata.com/foundry/data.kcmo.org/d4px-6rwg",
   "limits": "No key: throttled",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Kansas City 311 (Socrata) API (https://data.kcmo.org/resource/d4px-6rwg.json?$limit=1), what does it show for \"Kansas City 311 reported issues\" right now? Summarize briefly."
  },
  {
   "id": "boston-311-ckan",
   "name": "Boston 311 (CKAN datastore)",
   "category": "311 & service requests",
   "answers": "Boston 311 requests, new system",
   "region": "US",
   "example": "https://data.boston.gov/api/3/action/datastore_search?resource_id=254adca6-64ab-4c5c-9fc0-a6da622be185&limit=1",
   "docs": "https://data.boston.gov/dataset/311-service-requests",
   "limits": "No key; ODC PDDL",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Boston 311 (CKAN datastore) API (https://data.boston.gov/api/3/action/datastore_search?resource_id=254adca6-64ab-4c5c-9fc0-a6da622be185&limit=1), what does it show for \"Boston 311 requests, new system\" right now? Summarize briefly."
  },
  {
   "id": "nyc-restaurants",
   "name": "NYC restaurant inspections",
   "category": "City open data",
   "answers": "Latest health grade for a NYC restaurant",
   "region": "US",
   "example": "https://data.cityofnewyork.us/resource/43nn-pn8j.json?$limit=1",
   "docs": "https://dev.socrata.com/foundry/data.cityofnewyork.us/43nn-pn8j",
   "limits": "No key: throttled",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the NYC restaurant inspections API (https://data.cityofnewyork.us/resource/43nn-pn8j.json?$limit=1), what does it show for \"Latest health grade for a NYC restaurant\" right now? Summarize briefly."
  },
  {
   "id": "chicago-food",
   "name": "Chicago food inspections",
   "category": "City open data",
   "answers": "Food inspection results by restaurant",
   "region": "US",
   "example": "https://data.cityofchicago.org/resource/4ijn-s7e5.json?$limit=1",
   "docs": "https://dev.socrata.com/foundry/data.cityofchicago.org/4ijn-s7e5",
   "limits": "No key: throttled",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Chicago food inspections API (https://data.cityofchicago.org/resource/4ijn-s7e5.json?$limit=1), what does it show for \"Food inspection results by restaurant\" right now? Summarize briefly."
  },
  {
   "id": "chicago-crimes",
   "name": "Chicago crimes",
   "category": "City open data",
   "answers": "Reported crimes near a place (last 7 days lag)",
   "region": "US",
   "example": "https://data.cityofchicago.org/resource/ijzp-q8t2.json?$limit=1",
   "docs": "https://dev.socrata.com/foundry/data.cityofchicago.org/ijzp-q8t2",
   "limits": "No key: throttled",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Chicago crimes API (https://data.cityofchicago.org/resource/ijzp-q8t2.json?$limit=1), what does it show for \"Reported crimes near a place (last 7 days lag)\" right now? Summarize briefly."
  },
  {
   "id": "sf-fire-calls",
   "name": "SF fire department calls",
   "category": "City open data",
   "answers": "Recent SF fire/EMS calls for service",
   "region": "US",
   "example": "https://data.sf.gov/resource/nuek-vuh3.json?$limit=1",
   "docs": "https://dev.socrata.com/foundry/data.sf.gov/nuek-vuh3",
   "limits": "No key: throttled",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the SF fire department calls API (https://data.sf.gov/resource/nuek-vuh3.json?$limit=1), what does it show for \"Recent SF fire/EMS calls for service\" right now? Summarize briefly."
  },
  {
   "id": "seattle-911-fire",
   "name": "Seattle Real-Time Fire 911",
   "category": "City open data",
   "answers": "Fire/EMS dispatches in Seattle, near real time",
   "region": "US",
   "example": "https://data.seattle.gov/resource/kzjm-xkqj.json?$limit=1",
   "docs": "https://dev.socrata.com/foundry/data.seattle.gov/kzjm-xkqj",
   "limits": "No key: throttled",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Seattle Real-Time Fire 911 API (https://data.seattle.gov/resource/kzjm-xkqj.json?$limit=1), what does it show for \"Fire/EMS dispatches in Seattle, near real time\" right now? Summarize briefly."
  },
  {
   "id": "la-crime",
   "name": "Los Angeles NIBRS offenses",
   "category": "City open data",
   "answers": "Reported offenses in LA",
   "region": "US",
   "example": "https://data.lacity.org/resource/k7nn-b2ep.json?$limit=1",
   "docs": "https://dev.socrata.com/foundry/data.lacity.org/k7nn-b2ep",
   "limits": "No key: throttled",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Los Angeles NIBRS offenses API (https://data.lacity.org/resource/k7nn-b2ep.json?$limit=1), what does it show for \"Reported offenses in LA\" right now? Summarize briefly."
  },
  {
   "id": "socrata-discovery",
   "name": "Socrata Discovery API",
   "category": "City open data",
   "answers": "Find datasets on 100s of city portals",
   "region": "US",
   "example": "https://api.us.socrata.com/api/catalog/v1?q=311&limit=1",
   "docs": "https://dev.socrata.com/docs/other/discovery",
   "limits": "No key",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Socrata Discovery API API (https://api.us.socrata.com/api/catalog/v1?q=311&limit=1), what does it show for \"Find datasets on 100s of city portals\" right now? Summarize briefly."
  },
  {
   "id": "dados-gov-pt",
   "name": "dados.gov.pt",
   "category": "Portugal & EU",
   "answers": "Portugal's national open data portal",
   "region": "PT",
   "example": "https://dados.gov.pt/api/1/datasets/?q=transportes&page_size=1",
   "docs": "https://dados.gov.pt/pt/docapi/",
   "limits": "No key",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the dados.gov.pt API (https://dados.gov.pt/api/1/datasets/?q=transportes&page_size=1), what does it show for \"Portugal's national open data portal\" right now? Summarize briefly."
  },
  {
   "id": "geoapi-pt",
   "name": "GeoAPI.pt",
   "category": "Portugal & EU",
   "answers": "Which Portuguese parish/municipality a point is in",
   "region": "PT",
   "example": "https://json.geoapi.pt/gps/38.7223,-9.1393",
   "docs": "https://geoapi.pt/",
   "limits": "No key; fair use",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the GeoAPI.pt API (https://json.geoapi.pt/gps/38.7223,-9.1393), what does it show for \"Which Portuguese parish/municipality a point is in\" right now? Summarize briefly."
  },
  {
   "id": "data-europa",
   "name": "data.europa.eu search",
   "category": "Portugal & EU",
   "answers": "Search EU open datasets",
   "region": "EU",
   "example": "https://data.europa.eu/api/hub/search/search?q=bicycle&limit=1",
   "docs": "https://data.europa.eu/en/about/api",
   "limits": "No key",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the data.europa.eu search API (https://data.europa.eu/api/hub/search/search?q=bicycle&limit=1), what does it show for \"Search EU open datasets\" right now? Summarize briefly."
  },
  {
   "id": "eurostat",
   "name": "Eurostat statistics",
   "category": "Portugal & EU",
   "answers": "EU statistics (population, prices) by country",
   "region": "EU",
   "example": "https://ec.europa.eu/eurostat/api/dissemination/statistics/1.0/data/demo_pjan?geo=PT&sex=T&age=TOTAL&lastTimePeriod=1",
   "docs": "https://wikis.ec.europa.eu/display/EUROSTATHELP/API+Statistics+-+data+query",
   "limits": "No key",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Eurostat statistics API (https://ec.europa.eu/eurostat/api/dissemination/statistics/1.0/data/demo_pjan?geo=PT&sex=T&age=TOTAL&lastTimePeriod=1), what does it show for \"EU statistics (population, prices) by country\" right now? Summarize briefly."
  },
  {
   "id": "ecb-fx",
   "name": "ECB exchange rates (SDMX)",
   "category": "Money",
   "answers": "Official euro reference rates",
   "region": "EU",
   "example": "https://data-api.ecb.europa.eu/service/data/EXR/D.USD.EUR.SP00.A?lastNObservations=1&format=jsondata",
   "docs": "https://data.ecb.europa.eu/help/api/overview",
   "limits": "No key",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the ECB exchange rates (SDMX) API (https://data-api.ecb.europa.eu/service/data/EXR/D.USD.EUR.SP00.A?lastNObservations=1&format=jsondata), what does it show for \"Official euro reference rates\" right now? Summarize briefly."
  },
  {
   "id": "uk-police",
   "name": "UK Police data",
   "category": "City open data",
   "answers": "Street-level crimes near a UK point",
   "region": "UK",
   "example": "https://data.police.uk/api/crimes-street/all-crime?lat=51.5074&lng=-0.1278",
   "docs": "https://data.police.uk/docs/",
   "limits": "No key; 15 req/s; OGL",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the UK Police data API (https://data.police.uk/api/crimes-street/all-crime?lat=51.5074&lng=-0.1278), what does it show for \"Street-level crimes near a UK point\" right now? Summarize briefly."
  },
  {
   "id": "postcodes-io",
   "name": "Postcodes.io",
   "category": "Geocoding & places",
   "answers": "UK postcode lookup",
   "region": "UK",
   "example": "https://api.postcodes.io/postcodes/SW1A1AA",
   "docs": "https://postcodes.io/docs",
   "limits": "No key; MIT; OGL data",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Postcodes.io API (https://api.postcodes.io/postcodes/SW1A1AA), what does it show for \"UK postcode lookup\" right now? Summarize briefly."
  },
  {
   "id": "census-geocoder",
   "name": "US Census Geocoder",
   "category": "Geocoding & places",
   "answers": "US street address to coordinates (+ districts)",
   "region": "US",
   "example": "https://geocoding.geo.census.gov/geocoder/locations/onelineaddress?address=401%20N%20Morton%20St%2C%20Bloomington%2C%20IN&benchmark=Public_AR_Current&format=json",
   "docs": "https://geocoding.geo.census.gov/geocoder/Geocoding_Services_API.html",
   "limits": "No key; public domain",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the US Census Geocoder API (https://geocoding.geo.census.gov/geocoder/locations/onelineaddress?address=401%20N%20Morton%20St%2C%20Bloomington%2C%20IN&benchmark=Public_AR_Current&format=json), what does it show for \"US street address to coordinates (+ districts)\" right now? Summarize briefly."
  },
  {
   "id": "census-geographies",
   "name": "Census geographies by point",
   "category": "Geocoding & places",
   "answers": "Which county, tract and congressional district a point is in",
   "region": "US",
   "example": "https://geocoding.geo.census.gov/geocoder/geographies/coordinates?x=-86.5264&y=39.1653&benchmark=Public_AR_Current&vintage=Current_Current&format=json",
   "docs": "https://geocoding.geo.census.gov/geocoder/Geocoding_Services_API.html",
   "limits": "No key; public domain",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Census geographies by point API (https://geocoding.geo.census.gov/geocoder/geographies/coordinates?x=-86.5264&y=39.1653&benchmark=Public_AR_Current&vintage=Current_Current&format=json), answer: \"what district am I in\" for Bloomington, IN.",
   "grok_prompt_template": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Census geographies by point API (https://geocoding.geo.census.gov/geocoder/geographies/coordinates?x={lng}&y={lat}&benchmark=Public_AR_Current&vintage=Current_Current&format=json, with {lat},{lng} for my place), answer: \"what district am I in\" for {place}."
  },
  {
   "id": "nominatim",
   "name": "OpenStreetMap Nominatim",
   "category": "Geocoding & places",
   "answers": "Address/place search worldwide",
   "region": "Global",
   "example": "https://nominatim.openstreetmap.org/search?q=Rossio%2C%20Lisboa&format=jsonv2&limit=1",
   "docs": "https://nominatim.org/release-docs/latest/api/Search/",
   "limits": "Max 1 req/s, identifying User-Agent, no bulk geocoding, attribution (ODbL)",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the OpenStreetMap Nominatim API (https://nominatim.openstreetmap.org/search?q=Rossio%2C%20Lisboa&format=jsonv2&limit=1), what does it show for \"Address/place search worldwide\" right now? Summarize briefly."
  },
  {
   "id": "photon",
   "name": "Photon (komoot)",
   "category": "Geocoding & places",
   "answers": "Fast OSM place search / autocomplete",
   "region": "Global",
   "example": "https://photon.komoot.io/api/?q=lisboa&limit=1",
   "docs": "https://photon.komoot.io/",
   "limits": "No key; fair use; ODbL",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Photon (komoot) API (https://photon.komoot.io/api/?q=lisboa&limit=1), what does it show for \"Fast OSM place search / autocomplete\" right now? Summarize briefly."
  },
  {
   "id": "open-meteo-geocoding",
   "name": "Open-Meteo Geocoding",
   "category": "Geocoding & places",
   "answers": "City name to coordinates (great for chat)",
   "region": "Global",
   "example": "https://geocoding-api.open-meteo.com/v1/search?name=Lisbon&count=1",
   "docs": "https://open-meteo.com/en/docs/geocoding-api",
   "limits": "Non-commercial free tier",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open-Meteo Geocoding API (https://geocoding-api.open-meteo.com/v1/search?name=Lisbon&count=1), what does it show for \"City name to coordinates (great for chat)\" right now? Summarize briefly."
  },
  {
   "id": "fcc-area",
   "name": "FCC Area API",
   "category": "Geocoding & places",
   "answers": "County and FIPS code for a US point",
   "region": "US",
   "example": "https://geo.fcc.gov/api/census/area?lat=39.1653&lon=-86.5264&format=json",
   "docs": "https://geo.fcc.gov/api/census/",
   "limits": "No key",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the FCC Area API API (https://geo.fcc.gov/api/census/area?lat=39.1653&lon=-86.5264&format=json), what does it show for \"County and FIPS code for a US point\" right now? Summarize briefly."
  },
  {
   "id": "zippopotam",
   "name": "Zippopotam.us",
   "category": "Geocoding & places",
   "answers": "Postal code to place name (60+ countries)",
   "region": "Global",
   "example": "https://api.zippopotam.us/us/47401",
   "docs": "https://www.zippopotam.us/",
   "limits": "No key",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Zippopotam.us API (https://api.zippopotam.us/us/47401), answer: \"zip code 47401\"."
  },
  {
   "id": "open-meteo-elevation",
   "name": "Open-Meteo Elevation",
   "category": "Geocoding & places",
   "answers": "Elevation of a point",
   "region": "Global",
   "example": "https://api.open-meteo.com/v1/elevation?latitude=39.1653&longitude=-86.5264",
   "docs": "https://open-meteo.com/en/docs/elevation-api",
   "limits": "Non-commercial free tier",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open-Meteo Elevation API (https://api.open-meteo.com/v1/elevation?latitude=39.1653&longitude=-86.5264), answer: \"elevation here\" for Bloomington, IN.",
   "grok_prompt_template": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open-Meteo Elevation API (https://api.open-meteo.com/v1/elevation?latitude={lat}&longitude={lng}, with {lat},{lng} for my place), answer: \"elevation here\" for {place}."
  },
  {
   "id": "wikipedia-geosearch",
   "name": "Wikipedia nearby",
   "category": "Geocoding & places",
   "answers": "Wikipedia articles about places near a point",
   "region": "Global",
   "example": "https://en.wikipedia.org/w/api.php?action=query&list=geosearch&gscoord=39.1653%7C-86.5264&gsradius=2000&gslimit=3&format=json&origin=*",
   "docs": "https://www.mediawiki.org/wiki/API:Geosearch",
   "limits": "No key; send User-Agent; CC BY-SA",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Wikipedia nearby API (https://en.wikipedia.org/w/api.php?action=query&list=geosearch&gscoord=38.7223%7C-9.1393&gsradius=2000&gslimit=4&format=json), answer: \"places near me\" for Lisbon.",
   "grok_prompt_template": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Wikipedia nearby API (https://en.wikipedia.org/w/api.php?action=query&list=geosearch&gscoord={lat}%7C{lng}&gsradius=2000&gslimit=4&format=json, with {lat},{lng} for my place), answer: \"places near me\" for {place}."
  },
  {
   "id": "sunrise-sunset",
   "name": "Sunrise-Sunset.org",
   "category": "Sun, time & holidays",
   "answers": "Sunrise, sunset and twilight for a place/date",
   "region": "Global",
   "example": "https://api.sunrise-sunset.org/json?lat=39.1653&lng=-86.5264&formatted=0",
   "docs": "https://sunrise-sunset.org/api",
   "limits": "No key; attribution requested",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Sunrise-Sunset.org API (https://api.sunrise-sunset.org/json?lat=39.1653&lng=-86.5264&formatted=0), what does it show for \"Sunrise, sunset and twilight for a place/date\" right now? Summarize briefly."
  },
  {
   "id": "usno-rstt",
   "name": "US Naval Observatory sun & moon",
   "category": "Sun, time & holidays",
   "answers": "Sun/moon rise and set, moon phase",
   "region": "US",
   "example": "https://aa.usno.navy.mil/api/rstt/oneday?date=2026-10-10&coords=39.1653,-86.5264&tz=-4",
   "docs": "https://aa.usno.navy.mil/data/api",
   "limits": "No key; public domain",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the US Naval Observatory sun & moon API (https://aa.usno.navy.mil/api/rstt/oneday?date=2026-10-10&coords=39.1653,-86.5264&tz=-4), what does it show for \"Sun/moon rise and set, moon phase\" right now? Summarize briefly."
  },
  {
   "id": "usno-moon",
   "name": "USNO moon phases",
   "category": "Sun, time & holidays",
   "answers": "Upcoming moon phases",
   "region": "US",
   "example": "https://aa.usno.navy.mil/api/moon/phases/date?date=2026-10-10&nump=4",
   "docs": "https://aa.usno.navy.mil/data/api",
   "limits": "No key",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the USNO moon phases API (https://aa.usno.navy.mil/api/moon/phases/date?date=2026-10-11&nump=2), answer: \"next full moon\"."
  },
  {
   "id": "nager-date",
   "name": "Nager.Date public holidays",
   "category": "Sun, time & holidays",
   "answers": "Public holidays for 100+ countries",
   "region": "Global",
   "example": "https://date.nager.at/api/v3/PublicHolidays/2026/US",
   "docs": "https://date.nager.at/Api",
   "limits": "No key; fair use; MIT",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Nager.Date public holidays API (https://date.nager.at/api/v3/PublicHolidays/2026/US), what does it show for \"Public holidays for 100+ countries\" right now? Summarize briefly."
  },
  {
   "id": "nager-next",
   "name": "Nager.Date next holidays",
   "category": "Sun, time & holidays",
   "answers": "Next public holidays in a country",
   "region": "Global",
   "example": "https://date.nager.at/api/v3/NextPublicHolidays/PT",
   "docs": "https://date.nager.at/Api",
   "limits": "No key",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Nager.Date next holidays API (https://date.nager.at/api/v3/NextPublicHolidays/PT), answer: \"next holidays in PT\"."
  },
  {
   "id": "openholidays",
   "name": "OpenHolidays API",
   "category": "Sun, time & holidays",
   "answers": "Public and school holidays in Europe (by region)",
   "region": "EU",
   "example": "https://openholidaysapi.org/PublicHolidays?countryIsoCode=PT&languageIsoCode=EN&validFrom=2026-01-01&validTo=2026-12-31",
   "docs": "https://www.openholidaysapi.org/en/",
   "limits": "No key; fair use",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the OpenHolidays API API (https://openholidaysapi.org/PublicHolidays?countryIsoCode=PT&languageIsoCode=EN&validFrom=2026-01-01&validTo=2026-12-31), what does it show for \"Public and school holidays in Europe (by region)\" right now? Summarize briefly."
  },
  {
   "id": "timeapi",
   "name": "TimeAPI.io",
   "category": "Sun, time & holidays",
   "answers": "Current time in a time zone",
   "region": "Global",
   "example": "https://timeapi.io/api/time/current/zone?timeZone=Europe%2FLisbon",
   "docs": "https://timeapi.io/swagger/index.html",
   "limits": "No key; fair use",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the TimeAPI.io API (https://timeapi.io/api/time/current/zone?timeZone=Europe%2FLisbon), what does it show for \"Current time in a time zone\" right now? Summarize briefly."
  },
  {
   "id": "frankfurter",
   "name": "Frankfurter",
   "category": "Money",
   "answers": "Currency conversion (ECB reference rates)",
   "region": "Global",
   "example": "https://api.frankfurter.dev/v1/latest?base=USD&symbols=EUR",
   "docs": "https://frankfurter.dev/",
   "limits": "No key; no limits stated; ECB data",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Frankfurter API (https://api.frankfurter.dev/v1/latest?base=USD&symbols=EUR), answer: \"exchange rate usd to eur\"."
  },
  {
   "id": "treasury-fiscal",
   "name": "US Treasury Fiscal Data",
   "category": "Money",
   "answers": "Debt to the penny, interest rates, exchange rates",
   "region": "US",
   "example": "https://api.fiscaldata.treasury.gov/services/api/fiscal_service/v2/accounting/od/debt_to_penny?sort=-record_date&page%5Bsize%5D=1",
   "docs": "https://fiscaldata.treasury.gov/api-documentation/",
   "limits": "No key",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the US Treasury Fiscal Data API (https://api.fiscaldata.treasury.gov/services/api/fiscal_service/v2/accounting/od/debt_to_penny?sort=-record_date&page%5Bsize%5D=1), what does it show for \"Debt to the penny, interest rates, exchange rates\" right now? Summarize briefly."
  },
  {
   "id": "bls-v1",
   "name": "BLS Public Data API v1",
   "category": "Money",
   "answers": "Consumer price index (inflation) and jobs data",
   "region": "US",
   "example": "https://api.bls.gov/publicAPI/v1/timeseries/data/CUUR0000SA0",
   "docs": "https://www.bls.gov/developers/",
   "limits": "v1 needs no key: 25 queries/day; free v2 key: 500/day",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the BLS Public Data API v1 API (https://api.bls.gov/publicAPI/v1/timeseries/data/CUUR0000SA0), what does it show for \"Consumer price index (inflation) and jobs data\" right now? Summarize briefly."
  },
  {
   "id": "coinbase-spot",
   "name": "Coinbase spot price",
   "category": "Money",
   "answers": "Spot price of BTC/ETH in a currency",
   "region": "Global",
   "example": "https://api.coinbase.com/v2/prices/BTC-USD/spot",
   "docs": "https://docs.cdp.coinbase.com/coinbase-app/track-apis/prices",
   "limits": "No key for public prices",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Coinbase spot price API (https://api.coinbase.com/v2/prices/BTC-USD/spot), what does it show for \"Spot price of BTC/ETH in a currency\" right now? Summarize briefly."
  },
  {
   "id": "wikipedia-summary",
   "name": "Wikipedia page summary",
   "category": "Books, words & knowledge",
   "answers": "Short summary of any topic",
   "region": "Global",
   "example": "https://en.wikipedia.org/api/rest_v1/page/summary/Lisbon",
   "docs": "https://en.wikipedia.org/api/rest_v1/",
   "limits": "No key; 200 req/s; send User-Agent; CC BY-SA",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Wikipedia page summary API (https://en.wikipedia.org/w/api.php?action=query&prop=extracts&exintro=1&explaintext=1&exsentences=2&redirects=1&format=json&formatversion=2&titles=Lisbon), answer: \"wiki Lisbon\"."
  },
  {
   "id": "wikipedia-onthisday",
   "name": "Wikipedia On this day",
   "category": "Books, words & knowledge",
   "answers": "Historical events on today's date",
   "region": "Global",
   "example": "https://api.wikimedia.org/feed/v1/wikipedia/en/onthisday/selected/10/10",
   "docs": "https://api.wikimedia.org/wiki/Feed_API/Reference/On_this_day",
   "limits": "No key at low volume; CC BY-SA",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Wikipedia On this day API (https://api.wikimedia.org/feed/v1/wikipedia/en/onthisday/selected/10/10), what does it show for \"Historical events on today's date\" right now? Summarize briefly."
  },
  {
   "id": "open-library",
   "name": "Open Library search",
   "category": "Books, words & knowledge",
   "answers": "Find a book, author, first published year",
   "region": "Global",
   "example": "https://openlibrary.org/search.json?q=the+power+broker&limit=1",
   "docs": "https://openlibrary.org/developers/api",
   "limits": "No key; send User-Agent; be gentle",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open Library search API (https://openlibrary.org/search.json?q=the%20power%20broker&limit=1&fields=title,author_name,first_publish_year), answer: \"book the power broker\"."
  },
  {
   "id": "gutendex",
   "name": "Gutendex (Project Gutenberg)",
   "category": "Books, words & knowledge",
   "answers": "Free public-domain e-books",
   "region": "Global",
   "example": "https://gutendex.com/books/?search=dickens",
   "docs": "https://gutendex.com/",
   "limits": "No key",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Gutendex (Project Gutenberg) API (https://gutendex.com/books/?search=dickens), what does it show for \"Free public-domain e-books\" right now? Summarize briefly."
  },
  {
   "id": "loc",
   "name": "Library of Congress",
   "category": "Books, words & knowledge",
   "answers": "Search Library of Congress collections",
   "region": "US",
   "example": "https://www.loc.gov/search/?q=bloomington&fo=json&c=1",
   "docs": "https://www.loc.gov/apis/",
   "limits": "No key; rate limited (~20 req/10 s)",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Library of Congress API (https://www.loc.gov/search/?q=bloomington&fo=json&c=1), what does it show for \"Search Library of Congress collections\" right now? Summarize briefly."
  },
  {
   "id": "datamuse",
   "name": "Datamuse",
   "category": "Books, words & knowledge",
   "answers": "Words that mean/rhyme/sound like",
   "region": "Global",
   "example": "https://api.datamuse.com/words?ml=city&max=3",
   "docs": "https://www.datamuse.com/api/",
   "limits": "No key; 100,000 req/day",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Datamuse API (https://api.datamuse.com/words?ml=city&max=3), what does it show for \"Words that mean/rhyme/sound like\" right now? Summarize briefly."
  },
  {
   "id": "artic",
   "name": "Art Institute of Chicago",
   "category": "Books, words & knowledge",
   "answers": "Artworks, artists and exhibitions",
   "region": "US",
   "example": "https://api.artic.edu/api/v1/artworks?limit=1&fields=id,title",
   "docs": "https://api.artic.edu/docs/",
   "limits": "No key; 60 req/min; CC0 data",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Art Institute of Chicago API (https://api.artic.edu/api/v1/artworks?limit=1&fields=id,title), what does it show for \"Artworks, artists and exhibitions\" right now? Summarize briefly."
  },
  {
   "id": "met-museum",
   "name": "The Met Collection",
   "category": "Books, words & knowledge",
   "answers": "Objects in The Metropolitan Museum of Art",
   "region": "US",
   "example": "https://collectionapi.metmuseum.org/public/collection/v1/objects/436535",
   "docs": "https://metmuseum.github.io/",
   "limits": "No key; 80 req/s; CC0",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the The Met Collection API (https://collectionapi.metmuseum.org/public/collection/v1/objects/436535), what does it show for \"Objects in The Metropolitan Museum of Art\" right now? Summarize briefly."
  },
  {
   "id": "federal-register",
   "name": "Federal Register",
   "category": "Government & safety",
   "answers": "New federal rules and notices",
   "region": "US",
   "example": "https://www.federalregister.gov/api/v1/documents.json?per_page=1",
   "docs": "https://www.federalregister.gov/developers/documentation/api/v1",
   "limits": "No key",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Federal Register API (https://www.federalregister.gov/api/v1/documents.json?per_page=1), what does it show for \"New federal rules and notices\" right now? Summarize briefly."
  },
  {
   "id": "usaspending",
   "name": "USAspending.gov",
   "category": "Government & safety",
   "answers": "Federal spending by agency or place",
   "region": "US",
   "example": "https://api.usaspending.gov/api/v2/references/toptier_agencies/",
   "docs": "https://api.usaspending.gov/",
   "limits": "No key",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the USAspending.gov API (https://api.usaspending.gov/api/v2/references/toptier_agencies/), what does it show for \"Federal spending by agency or place\" right now? Summarize briefly."
  },
  {
   "id": "openfda-food",
   "name": "openFDA food recalls",
   "category": "Government & safety",
   "answers": "Recent food recalls (by state or product)",
   "region": "US",
   "example": "https://api.fda.gov/food/enforcement.json?limit=1",
   "docs": "https://open.fda.gov/apis/food/enforcement/",
   "limits": "No key: 240 req/min, 1,000/day per IP; free key: 120,000/day",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the openFDA food recalls API (https://api.fda.gov/food/enforcement.json?sort=report_date:desc&limit=3), answer: \"latest food recalls\"."
  },
  {
   "id": "nhtsa-recalls",
   "name": "NHTSA vehicle recalls",
   "category": "Government & safety",
   "answers": "Recalls for a car make/model/year",
   "region": "US",
   "example": "https://api.nhtsa.gov/recalls/recallsByVehicle?make=honda&model=accord&modelYear=2012",
   "docs": "https://www.nhtsa.gov/nhtsa-datasets-and-apis",
   "limits": "No key",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the NHTSA vehicle recalls API (https://api.nhtsa.gov/recalls/recallsByVehicle?make=honda&model=civic&modelYear=2018), answer: \"recalls 2018 honda civic\"."
  },
  {
   "id": "nhtsa-vpic",
   "name": "NHTSA vPIC VIN decoder",
   "category": "Government & safety",
   "answers": "Decode a VIN",
   "region": "US",
   "example": "https://vpic.nhtsa.dot.gov/api/vehicles/decodevinvalues/1HGCM82633A004352?format=json",
   "docs": "https://vpic.nhtsa.dot.gov/api/",
   "limits": "No key",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the NHTSA vPIC VIN decoder API (https://vpic.nhtsa.dot.gov/api/vehicles/decodevinvalues/1HGCM82633A004352?format=json), what does it show for \"Decode a VIN\" right now? Summarize briefly."
  },
  {
   "id": "cpsc-recalls",
   "name": "CPSC product recalls",
   "category": "Government & safety",
   "answers": "Consumer product recalls",
   "region": "US",
   "example": "https://www.saferproducts.gov/RestWebServices/Recall?format=json&RecallDateStart=2026-09-01",
   "docs": "https://www.cpsc.gov/Recalls/CPSC-Recalls-Application-Program-Interface-API-Information",
   "limits": "No key",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the CPSC product recalls API (https://www.saferproducts.gov/RestWebServices/Recall?format=json&RecallDateStart=2026-09-01), what does it show for \"Consumer product recalls\" right now? Summarize briefly."
  },
  {
   "id": "open-food-facts",
   "name": "Open Food Facts",
   "category": "Government & safety",
   "answers": "Ingredients, allergens and Nutri-Score by barcode",
   "region": "Global",
   "example": "https://world.openfoodfacts.org/api/v2/product/737628064502.json?fields=product_name,brands",
   "docs": "https://openfoodfacts.github.io/openfoodfacts-server/api/",
   "limits": "No key; 100 req/min for product reads; send User-Agent; ODbL",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Open Food Facts API (https://world.openfoodfacts.org/api/v2/product/3017624010701.json?fields=product_name,brands,nutriscore_grade), answer: \"barcode 3017624010701\"."
  },
  {
   "id": "wheretheiss",
   "name": "Where the ISS at?",
   "category": "Flights & space",
   "answers": "Where the space station is right now",
   "region": "Global",
   "example": "https://api.wheretheiss.at/v1/satellites/25544",
   "docs": "https://wheretheiss.at/w/developer",
   "limits": "No key; ~1 req/s",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Where the ISS at? API (https://api.wheretheiss.at/v1/satellites/25544), answer: \"where is the iss\"."
  },
  {
   "id": "launch-library",
   "name": "Launch Library 2",
   "category": "Flights & space",
   "answers": "Next rocket launches",
   "region": "Global",
   "example": "https://ll.thespacedevs.com/2.3.0/launches/upcoming/?limit=1&mode=list",
   "docs": "https://thespacedevs.com/llapi",
   "limits": "No key: 15 req/hour",
   "grok_prompt": "Use https://fitzyracing1.github.io/civicbot/grok.txt as your civicbot instructions. Using the Launch Library 2 API (https://ll.thespacedevs.com/2.3.0/launches/upcoming/?limit=1&mode=list&hide_recent_previous=true), answer: \"next rocket launch\"."
  }
 ],
 "open311": {
  "cities": [
   {
    "id": "chicago",
    "name": "Chicago, IL",
    "bbox": [
     41.644,
     -87.94,
     42.023,
     -87.524
    ],
    "submit": "https://311.chicago.gov/",
    "app": "CHI311 app",
    "phone": "",
    "services": ""
   },
   {
    "id": "boston",
    "name": "Boston, MA",
    "bbox": [
     42.227,
     -71.191,
     42.4,
     -70.986
    ],
    "submit": "https://www.boston.gov/departments/boston-311",
    "app": "BOS:311 app",
    "phone": "311",
    "services": "https://311.boston.gov/open311/v2/services.json"
   },
   {
    "id": "bloomington-in",
    "name": "Bloomington, IN",
    "bbox": [
     39.11,
     -86.6,
     39.22,
     -86.47
    ],
    "submit": "https://bloomington.in.gov/ureport",
    "app": "",
    "phone": "",
    "services": "https://bloomington.in.gov/crm/open311/v2/services.json"
   },
   {
    "id": "austin",
    "name": "Austin, TX",
    "bbox": [
     30.098,
     -97.938,
     30.517,
     -97.561
    ],
    "submit": "https://311.austintexas.gov/",
    "app": "Austin 3-1-1 app",
    "phone": "3-1-1",
    "services": "https://311.austintexas.gov/open311/v2/services.json"
   },
   {
    "id": "brookline-ma",
    "name": "Brookline, MA",
    "bbox": [
     42.295,
     -71.18,
     42.353,
     -71.104
    ],
    "submit": "https://spot.brooklinema.gov/",
    "app": "",
    "phone": "",
    "services": "https://spot.brooklinema.gov/open311/v2/services.json"
   }
  ],
  "seeclickfix_services": "https://seeclickfix.com/open311/v2/services.json?lat={lat}&long={lng}",
  "seeclickfix_submit": "https://seeclickfix.com/"
 }
}
