{"openapi":"3.1.0","info":{"title":"Xweather Environment (BYOK) API","version":"0.1.0","description":"Xweather Environment (BYOK) lets an AI assistant read your own Xweather Environment data through the Xweather Environment API with a key you supply (Xweather client id). Read-only: 12 tools (get_tide_predictions, list_tide_stations_near, get_river_gauges_near, get_air_quality_forecast, get_conditions_summary, get_climate_normals, get_storm_threats, get_lightning_threats, get_lightning_summary,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-xweather-environment.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-xweather-environment/docs"},"termsOfService":"https://connectorbay.com/byok-xweather-environment/terms"},"servers":[{"url":"https://byok-xweather-environment.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-xweather-environment/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_tide_predictions":{"post":{"operationId":"get_tide_predictions","summary":"Get predicted high and low tides for a US place: time, type (high or low) and height in feet and metres, for a time rang","description":"Get predicted high and low tides for a US place: time, type (high or low) and height in feet and metres, for a time range. Uses the nearest tide station. Use for \"When is high tide in Seattle tomorrow\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"place":{"description":"Place to query: 'city,state' such as 'seattle,wa', 'lat,lon' such as '47.61,-122.33', a US or Canadian postal code, or a place id.","maxLength":100,"title":"Place","type":"string"},"from_time":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the time range: now, a relative value such as -1day, or a date such as 2026-10-01.","title":"From Time"},"to_time":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"End of the time range: now, a relative value such as +1day, or a date such as 2026-10-19.","title":"To Time"},"plimit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum number of periods (time steps) to return per record.","title":"Plimit"},"fields":{"anyOf":[{"maxLength":1500,"type":"string"},{"type":"null"}],"default":"id,place.name,place.state,loc.lat,loc.long,periods.dateTimeISO,periods.type,periods.heightFT,periods.heightM,relativeTo.distanceMI","description":"Comma-separated response properties to keep, in dot notation; the default keeps time, type and height of each tide.","title":"Fields"}},"required":["place"],"title":"get_tide_predictionsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_tide_stations_near":{"post":{"operationId":"list_tide_stations_near","summary":"List the US tide prediction stations closest to a place, with station id, type and reference station. Use for \"Which tid","description":"List the US tide prediction stations closest to a place, with station id, type and reference station. Use for \"Which tide stations are near Seattle\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"p":{"description":"Where to look: 'city,state' such as 'seattle,wa', 'lat,lon' such as '47.61,-122.33', a US or Canadian postal code, or a place id.","maxLength":100,"title":"P","type":"string"},"radius":{"anyOf":[{"maxLength":12,"type":"string"},{"type":"null"}],"default":null,"description":"Search radius around the place with a unit, for example 25miles or 50km (default set by the service).","title":"Radius"},"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":5,"description":"Maximum number of records to return.","title":"Limit"},"fields":{"anyOf":[{"maxLength":1500,"type":"string"},{"type":"null"}],"default":"id,place.name,place.state,loc.lat,loc.long,profile.type,profile.refStationId,relativeTo.distanceMI","description":"Comma-separated response properties to keep, in dot notation; the default keeps station id, name, position and distance.","title":"Fields"}},"required":["p"],"title":"list_tide_stations_nearArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_river_gauges_near":{"post":{"operationId":"get_river_gauges_near","summary":"List the river and lake gauges (US, from NOAA) closest to a place with current water level, flow, flood stage status and","description":"List the river and lake gauges (US, from NOAA) closest to a place with current water level, flow, flood stage status and flood stage thresholds. Use for \"What is the river level near Sacramento\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"p":{"description":"Where to look: 'city,state' such as 'seattle,wa', 'lat,lon' such as '47.61,-122.33', a US or Canadian postal code, or a place id.","maxLength":100,"title":"P","type":"string"},"radius":{"anyOf":[{"maxLength":12,"type":"string"},{"type":"null"}],"default":null,"description":"Search radius around the place with a unit, for example 25miles or 50km (default set by the service).","title":"Radius"},"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":5,"description":"Maximum number of records to return.","title":"Limit"},"fields":{"anyOf":[{"maxLength":1500,"type":"string"},{"type":"null"}],"default":"id,loc.lat,loc.long,ob.dateTimeISO,ob.heightFT,ob.flowCFS,ob.status,ob.impact,place.name,place.state,profile.waterbody,profile.cats.actionFT,profile.cats.floodFT,profile.cats.moderateFT,profile.cats.majorFT,relativeTo.distanceMI","description":"Comma-separated response properties to keep, in dot notation; the default keeps level, flow, status and flood stages.","title":"Fields"}},"required":["p"],"title":"get_river_gauges_nearArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_air_quality_forecast":{"post":{"operationId":"get_air_quality_forecast","summary":"Get the air quality forecast (up to 4 days, hourly and daily) for a place: AQI, category, dominant pollutant and polluta","description":"Get the air quality forecast (up to 4 days, hourly and daily) for a place: AQI, category, dominant pollutant and pollutant concentrations. Counts as 5 accesses per call. Use for \"What is the air quality forecast for Los Angeles\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"place":{"description":"Place to query: 'city,state' such as 'seattle,wa', 'lat,lon' such as '47.61,-122.33', a US or Canadian postal code, or a place id.","maxLength":100,"title":"Place","type":"string"},"plimit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum number of periods (time steps) to return per record.","title":"Plimit"},"fields":{"anyOf":[{"maxLength":1500,"type":"string"},{"type":"null"}],"default":"place.name,place.state,place.country,interval,periods.dateTimeISO,periods.aqi,periods.category,periods.dominant,periods.pollutants.type,periods.pollutants.valueUGM3,periods.pollutants.aqi","description":"Comma-separated response properties to keep, in dot notation; the default keeps AQI, category and pollutants.","title":"Fields"}},"required":["place"],"title":"get_air_quality_forecastArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_conditions_summary":{"post":{"operationId":"get_conditions_summary","summary":"Get daily summaries of interpolated weather conditions for a place and date range (2004 to 15 days ahead, up to one mont","description":"Get daily summaries of interpolated weather conditions for a place and date range (2004 to 15 days ahead, up to one month per call): temperature, humidity, wind, precipitation, snow, UV and weather. Each day counts as one access. Use for \"What were the daily temperatures in Chicago over the last week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"place":{"description":"Place to query: 'city,state' such as 'seattle,wa', 'lat,lon' such as '47.61,-122.33', a US or Canadian postal code, or a place id.","maxLength":100,"title":"Place","type":"string"},"from_time":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the time range: now, a relative value such as -1day, or a date such as 2026-10-01.","title":"From Time"},"to_time":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"End of the time range: now, a relative value such as +1day, or a date such as 2026-10-19.","title":"To Time"},"fields":{"anyOf":[{"maxLength":1500,"type":"string"},{"type":"null"}],"default":"place.name,place.state,place.country,periods.dateTimeISO,periods.temp.maxC,periods.temp.minC,periods.temp.avgC,periods.temp.maxF,periods.temp.minF,periods.temp.avgF,periods.humidity.avg,periods.windSpeed.maxKPH,periods.windSpeed.avgKPH,periods.precip.totalMM,periods.precip.totalIN,periods.snow.totalCM,periods.uvi.max,periods.weather.phrase","description":"Comma-separated response properties to keep, in dot notation; the default keeps daily temperature, humidity, wind, precipitation and UV.","title":"Fields"}},"required":["place"],"title":"get_conditions_summaryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_climate_normals":{"post":{"operationId":"get_climate_normals","summary":"Get the climate normals of a US place for a month or day range: average, minimum and maximum temperature, precipitation ","description":"Get the climate normals of a US place for a month or day range: average, minimum and maximum temperature, precipitation and snow so far, heating and cooling degree days. Use for \"What are the normal temperatures in Denver for this time of year\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"place":{"description":"Place to query: 'city,state' such as 'seattle,wa', 'lat,lon' such as '47.61,-122.33', a US or Canadian postal code, or a place id.","maxLength":100,"title":"Place","type":"string"},"from_time":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the time range: now, a relative value such as -1day, or a date such as 2026-10-01.","title":"From Time"},"to_time":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"End of the time range: now, a relative value such as +1day, or a date such as 2026-10-19.","title":"To Time"},"plimit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum number of periods (time steps) to return per record.","title":"Plimit"},"fields":{"anyOf":[{"maxLength":1500,"type":"string"},{"type":"null"}],"default":"place.name,place.state,periods.type,periods.dateTimeISO,periods.temp.maxF,periods.temp.minF,periods.temp.avgF,periods.prcp.mtdIN,periods.snow.mtdIN,periods.hdd,periods.cdd","description":"Comma-separated response properties to keep, in dot notation; the default keeps normal temperatures, precipitation, snow and degree days.","title":"Fields"}},"required":["place"],"title":"get_climate_normalsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_storm_threats":{"post":{"operationId":"get_storm_threats","summary":"Get a localized summary of storm threats for a place (global): approaching storms, hail probability and size, rotation, ","description":"Get a localized summary of storm threats for a place (global): approaching storms, hail probability and size, rotation, tornadic signatures, nearby lightning and plain-language phrases. Use for \"Are any severe storms approaching Oklahoma City\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"place":{"description":"Place to query: 'city,state' such as 'seattle,wa', 'lat,lon' such as '47.61,-122.33', a US or Canadian postal code, or a place id.","maxLength":100,"title":"Place","type":"string"},"plimit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum number of periods (time steps) to return per record.","title":"Plimit"},"fields":{"anyOf":[{"maxLength":1500,"type":"string"},{"type":"null"}],"default":"place.name,place.state,place.country,periods.dateTimeISO,periods.storms.phrase.long,periods.storms.phrase.short,periods.storms.approaching,periods.storms.hail.prob,periods.storms.hail.maxSizeIN,periods.storms.rotation,periods.storms.tornadic,periods.storms.distance.minMI,periods.storms.lightning.nearby,periods.storms.lightning.approaching,periods.storms.lightning.phrase","description":"Comma-separated response properties to keep, in dot notation; the default keeps storm phrases, hail, rotation and lightning.","title":"Fields"}},"required":["place"],"title":"get_storm_threatsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_lightning_threats":{"post":{"operationId":"get_lightning_threats","summary":"Get the lightning nowcast near a place: storm tracks for the next 60 minutes in 10 minute steps with direction, speed an","description":"Get the lightning nowcast near a place: storm tracks for the next 60 minutes in 10 minute steps with direction, speed and severity. Counts as 10 accesses per call. Use for \"Is a lightning storm about to hit Tampa\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"place":{"description":"Place to query: 'city,state' such as 'seattle,wa', 'lat,lon' such as '47.61,-122.33', a US or Canadian postal code, or a place id.","maxLength":100,"title":"Place","type":"string"},"fields":{"anyOf":[{"maxLength":1500,"type":"string"},{"type":"null"}],"default":"id,dataSource,details.issuedDateTimeISO,details.range.minDateTimeISO,details.range.maxDateTimeISO,details.severe,details.movement.dir,details.movement.speedMPH,details.totalPeriods","description":"Comma-separated response properties to keep, in dot notation; the default keeps storm id, validity, movement and severity.","title":"Fields"}},"required":["place"],"title":"get_lightning_threatsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_lightning_summary":{"post":{"operationId":"get_lightning_summary","summary":"Get a count of the lightning strikes recorded around a place over the last minutes or hours (up to 24 hours): total, clo","description":"Get a count of the lightning strikes recorded around a place over the last minutes or hours (up to 24 hours): total, cloud-to-ground, intracloud, polarity and peak amplitude. Use for \"How many lightning strikes were there around Houston in the last hour\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"place":{"description":"Place to query: 'city,state' such as 'seattle,wa', 'lat,lon' such as '47.61,-122.33', a US or Canadian postal code, or a place id.","maxLength":100,"title":"Place","type":"string"},"radius":{"anyOf":[{"maxLength":12,"type":"string"},{"type":"null"}],"default":null,"description":"Search radius around the place with a unit, for example 25miles or 50km (default set by the service).","title":"Radius"},"from_time":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the time range: now, a relative value such as -1day, or a date such as 2026-10-01.","title":"From Time"},"to_time":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"End of the time range: now, a relative value such as +1day, or a date such as 2026-10-19.","title":"To Time"},"fields":{"anyOf":[{"maxLength":1500,"type":"string"},{"type":"null"}],"default":"summary.range.count,summary.range.fromDateTimeISO,summary.range.toDateTimeISO,summary.pulse.count,summary.pulse.cg,summary.pulse.ic,summary.pulse.negative,summary.pulse.positive,summary.peakAmp.all.max,summary.peakAmp.all.avg","description":"Comma-separated response properties to keep, in dot notation; the default keeps strike counts and peak amplitude.","title":"Fields"}},"required":["place"],"title":"get_lightning_summaryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_hail_threats":{"post":{"operationId":"get_hail_threats","summary":"Get the hail nowcast near a place for the next 60 minutes (US, Europe, Canada, Japan, Australia): expected maximum hail ","description":"Get the hail nowcast near a place for the next 60 minutes (US, Europe, Canada, Japan, Australia): expected maximum hail size, severe probability and storm movement. Counts as 12 accesses per call. Use for \"Is hail expected near Denver in the next hour\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"place":{"description":"Place to query: 'city,state' such as 'seattle,wa', 'lat,lon' such as '47.61,-122.33', a US or Canadian postal code, or a place id.","maxLength":100,"title":"Place","type":"string"},"fields":{"anyOf":[{"maxLength":1500,"type":"string"},{"type":"null"}],"default":"id,dataSource,details.issuedDateTimeISO,details.range.minDateTimeISO,details.range.maxDateTimeISO,details.movement.dir,details.movement.speedMPH,details.hail.maxSizeIN,details.hail.probSevere,details.hail.severe,details.totalPeriods","description":"Comma-separated response properties to keep, in dot notation; the default keeps hail size, severity and movement.","title":"Fields"}},"required":["place"],"title":"get_hail_threatsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_road_weather":{"post":{"operationId":"get_road_weather","summary":"Get the road weather forecast at a place (US, Europe, Japan, Canada, Australia, New Zealand): a green, yellow or red dri","description":"Get the road weather forecast at a place (US, Europe, Japan, Canada, Australia, New Zealand): a green, yellow or red driving summary every 15 minutes for 2 hours, then hourly for 24 hours. Use for \"How will the road conditions be around Minneapolis tonight\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"place":{"description":"Place to query: 'city,state' such as 'seattle,wa', 'lat,lon' such as '47.61,-122.33', a US or Canadian postal code, or a place id.","maxLength":100,"title":"Place","type":"string"},"plimit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum number of periods (time steps) to return per record.","title":"Plimit"},"fields":{"anyOf":[{"maxLength":1500,"type":"string"},{"type":"null"}],"default":"id,dataSource,road.type,road.name,loc.lat,loc.long,place.name,place.state,periods.dateTimeISO,periods.summary,periods.summaryIndex","description":"Comma-separated response properties to keep, in dot notation; the default keeps road, time, summary and index.","title":"Fields"}},"required":["place"],"title":"get_road_weatherArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_moon_phases":{"post":{"operationId":"get_moon_phases","summary":"Get the moon phase calendar for a place: the next new, first quarter, full and last quarter moons with date and time, fo","description":"Get the moon phase calendar for a place: the next new, first quarter, full and last quarter moons with date and time, for up to one month. Use for \"When is the next full moon\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"place":{"description":"Place to query: 'city,state' such as 'seattle,wa', 'lat,lon' such as '47.61,-122.33', a US or Canadian postal code, or a place id.","maxLength":100,"title":"Place","type":"string"},"from_time":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the time range: now, a relative value such as -1day, or a date such as 2026-10-01.","title":"From Time"},"to_time":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"End of the time range: now, a relative value such as +1day, or a date such as 2026-10-19.","title":"To Time"}},"required":["place"],"title":"get_moon_phasesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}