{"openapi":"3.1.0","info":{"title":"QWeather (BYOK) API","version":"0.1.0","description":"QWeather (BYOK) lets an AI assistant read your own QWeather data through the QWeather API with a key you supply (QWeather API key). Read-only: 12 tools (lookup_city, get_current_weather, get_daily_forecast, get_hourly_forecast, get_current_air_quality, get_daily_air_forecast, get_weather_alerts, get_solar_radiation_forecast, get_historical_weather, list_storms, get_storm_forecast, get_tide). The...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-qweather.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-qweather/docs"},"termsOfService":"https://connectorbay.com/byok-qweather/terms"},"servers":[{"url":"https://byok-qweather.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-qweather/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/lookup_city":{"post":{"operationId":"lookup_city","summary":"Search places by name, LocationID or longitude,latitude and get their LocationID, coordinates, administrative areas, tim","description":"Search places by name, LocationID or longitude,latitude and get their LocationID, coordinates, administrative areas, time zone and rank (GeoAPI). Use for \"Find the QWeather location for Beijing\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"api_host":{"description":"Your QWeather API Host label: the part before .qweatherapi.com, for example 'abcxyz' for abcxyz.qweatherapi.com (shown in the QWeather console under Settings).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Api Host","type":"string"},"location":{"description":"Place name, LocationID or 'longitude,latitude' (up to 2 decimals), for example 'beijing' or '116.41,39.92'.","maxLength":200,"title":"Location","type":"string"},"adm":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Superior administrative area to narrow results, for example 'beijing'.","title":"Adm"},"range":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Limit the search to one country using an ISO 3166 code, for example 'cn'.","title":"Range"},"number":{"anyOf":[{"maximum":20,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Number of results (1 to 20; default 10).","title":"Number"},"lang":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Language code for text fields, for example en, zh, de, fr, ja (default English).","title":"Lang"}},"required":["api_host","location"],"title":"lookup_cityArguments","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_current_weather":{"post":{"operationId":"get_current_weather","summary":"Get real-time weather at coordinates: condition, temperature, feels-like, humidity, wind, gusts, precipitation, pressure","description":"Get real-time weather at coordinates: condition, temperature, feels-like, humidity, wind, gusts, precipitation, pressure, visibility, dew point, cloud cover and UV index. Use for \"What is the weather right now at 39.92, 116.41\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"api_host":{"description":"Your QWeather API Host label: the part before .qweatherapi.com, for example 'abcxyz' for abcxyz.qweatherapi.com (shown in the QWeather console under Settings).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Api Host","type":"string"},"latitude":{"description":"Latitude in decimal degrees, for example 39.92.","maximum":90,"minimum":-90,"title":"Latitude","type":"number"},"longitude":{"description":"Longitude in decimal degrees, for example 116.41.","maximum":180,"minimum":-180,"title":"Longitude","type":"number"},"local_time":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to return times in the location's local time instead of UTC.","title":"Local Time"},"lang":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Language code for text fields, for example en, zh, de, fr, ja (default English).","title":"Lang"}},"required":["api_host","latitude","longitude"],"title":"get_current_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_daily_forecast":{"post":{"operationId":"get_daily_forecast","summary":"Get a daily forecast (1 to 10 days) at coordinates with sun and moon times, temperature range, UV, and daytime and night","description":"Get a daily forecast (1 to 10 days) at coordinates with sun and moon times, temperature range, UV, and daytime and nighttime condition, wind and precipitation. Use for \"Give me the 7-day forecast for 39.92, 116.41\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"api_host":{"description":"Your QWeather API Host label: the part before .qweatherapi.com, for example 'abcxyz' for abcxyz.qweatherapi.com (shown in the QWeather console under Settings).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Api Host","type":"string"},"latitude":{"description":"Latitude in decimal degrees, for example 39.92.","maximum":90,"minimum":-90,"title":"Latitude","type":"number"},"longitude":{"description":"Longitude in decimal degrees, for example 116.41.","maximum":180,"minimum":-180,"title":"Longitude","type":"number"},"days":{"anyOf":[{"maximum":10,"minimum":1,"type":"integer"},{"type":"null"}],"default":7,"description":"Number of forecast days (1 to 10; default 7).","title":"Days"},"local_time":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to return times in the location's local time instead of UTC.","title":"Local Time"},"lang":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Language code for text fields, for example en, zh, de, fr, ja (default English).","title":"Lang"}},"required":["api_host","latitude","longitude"],"title":"get_daily_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_hourly_forecast":{"post":{"operationId":"get_hourly_forecast","summary":"Get an hourly forecast (1 to 240 hours) at coordinates: condition, temperature, humidity, wind, precipitation chance, pr","description":"Get an hourly forecast (1 to 240 hours) at coordinates: condition, temperature, humidity, wind, precipitation chance, pressure, visibility, cloud cover and UV. Use for \"Show the hourly forecast for the next 24 hours at 39.92, 116.41\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"api_host":{"description":"Your QWeather API Host label: the part before .qweatherapi.com, for example 'abcxyz' for abcxyz.qweatherapi.com (shown in the QWeather console under Settings).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Api Host","type":"string"},"latitude":{"description":"Latitude in decimal degrees, for example 39.92.","maximum":90,"minimum":-90,"title":"Latitude","type":"number"},"longitude":{"description":"Longitude in decimal degrees, for example 116.41.","maximum":180,"minimum":-180,"title":"Longitude","type":"number"},"hours":{"anyOf":[{"maximum":240,"minimum":1,"type":"integer"},{"type":"null"}],"default":24,"description":"Number of forecast hours (1 to 240; default 24).","title":"Hours"},"local_time":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to return times in the location's local time instead of UTC.","title":"Local Time"},"lang":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Language code for text fields, for example en, zh, de, fr, ja (default English).","title":"Lang"}},"required":["api_host","latitude","longitude"],"title":"get_hourly_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_current_air_quality":{"post":{"operationId":"get_current_air_quality","summary":"Get current air quality at coordinates: local AQI indexes with category and health advice, plus pollutant concentrations","description":"Get current air quality at coordinates: local AQI indexes with category and health advice, plus pollutant concentrations (PM2.5, PM10, NO2, O3, SO2, CO). Use for \"What is the air quality right now at 39.92, 116.41\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"api_host":{"description":"Your QWeather API Host label: the part before .qweatherapi.com, for example 'abcxyz' for abcxyz.qweatherapi.com (shown in the QWeather console under Settings).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Api Host","type":"string"},"latitude":{"description":"Latitude in decimal degrees, for example 39.92.","maximum":90,"minimum":-90,"title":"Latitude","type":"number"},"longitude":{"description":"Longitude in decimal degrees, for example 116.41.","maximum":180,"minimum":-180,"title":"Longitude","type":"number"},"lang":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Language code for text fields, for example en, zh, de, fr, ja (default English).","title":"Lang"}},"required":["api_host","latitude","longitude"],"title":"get_current_air_qualityArguments","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_daily_air_forecast":{"post":{"operationId":"get_daily_air_forecast","summary":"Get a 3-day daily air quality forecast at coordinates with AQI indexes and pollutant concentrations per day. Use for \"Ho","description":"Get a 3-day daily air quality forecast at coordinates with AQI indexes and pollutant concentrations per day. Use for \"How will the air quality be over the next days at 39.92, 116.41\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"api_host":{"description":"Your QWeather API Host label: the part before .qweatherapi.com, for example 'abcxyz' for abcxyz.qweatherapi.com (shown in the QWeather console under Settings).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Api Host","type":"string"},"latitude":{"description":"Latitude in decimal degrees, for example 39.92.","maximum":90,"minimum":-90,"title":"Latitude","type":"number"},"longitude":{"description":"Longitude in decimal degrees, for example 116.41.","maximum":180,"minimum":-180,"title":"Longitude","type":"number"},"lang":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Language code for text fields, for example en, zh, de, fr, ja (default English).","title":"Lang"}},"required":["api_host","latitude","longitude"],"title":"get_daily_air_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_weather_alerts":{"post":{"operationId":"get_weather_alerts","summary":"Get active official weather alerts at coordinates: event type, severity, urgency, certainty, headline, description, vali","description":"Get active official weather alerts at coordinates: event type, severity, urgency, certainty, headline, description, validity times and issuing agency. Use for \"Are there any weather warnings at 39.92, 116.41\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"api_host":{"description":"Your QWeather API Host label: the part before .qweatherapi.com, for example 'abcxyz' for abcxyz.qweatherapi.com (shown in the QWeather console under Settings).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Api Host","type":"string"},"latitude":{"description":"Latitude in decimal degrees, for example 39.92.","maximum":90,"minimum":-90,"title":"Latitude","type":"number"},"longitude":{"description":"Longitude in decimal degrees, for example 116.41.","maximum":180,"minimum":-180,"title":"Longitude","type":"number"},"local_time":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to return times in the location's local time instead of UTC.","title":"Local Time"},"lang":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Language code for text fields, for example en, zh, de, fr, ja (default English).","title":"Lang"}},"required":["api_host","latitude","longitude"],"title":"get_weather_alertsArguments","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_solar_radiation_forecast":{"post":{"operationId":"get_solar_radiation_forecast","summary":"Get a solar radiation forecast (1 to 72 hours) at coordinates: GHI, DNI, DHI, sun angle and optional weather and tilted-","description":"Get a solar radiation forecast (1 to 72 hours) at coordinates: GHI, DNI, DHI, sun angle and optional weather and tilted-panel (POA) irradiance. Use for \"Forecast solar irradiance for the next 24 hours at 39.92, 116.41\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"api_host":{"description":"Your QWeather API Host label: the part before .qweatherapi.com, for example 'abcxyz' for abcxyz.qweatherapi.com (shown in the QWeather console under Settings).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Api Host","type":"string"},"latitude":{"description":"Latitude in decimal degrees, for example 39.92.","maximum":90,"minimum":-90,"title":"Latitude","type":"number"},"longitude":{"description":"Longitude in decimal degrees, for example 116.41.","maximum":180,"minimum":-180,"title":"Longitude","type":"number"},"hours":{"anyOf":[{"maximum":72,"minimum":1,"type":"integer"},{"type":"null"}],"default":24,"description":"Forecast hours (1 to 72; default 24).","title":"Hours"},"interval":{"anyOf":[{"enum":[15,30,60],"type":"integer"},{"type":"null"}],"default":60,"description":"Minutes between samples: 15, 30 or 60 (default 60).","title":"Interval"},"tilt":{"anyOf":[{"maximum":90,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"PV panel tilt angle 0 to 90; required when extra includes poa.","title":"Tilt"},"azimuth":{"anyOf":[{"maximum":359,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"PV panel azimuth 0 to 359 (0 = north); required when extra includes poa.","title":"Azimuth"},"extra":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Extras, comma separated: weather and/or poa (poa needs tilt and azimuth).","title":"Extra"},"local_time":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to return times in the location's local time instead of UTC.","title":"Local Time"}},"required":["api_host","latitude","longitude"],"title":"get_solar_radiation_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_historical_weather":{"post":{"operationId":"get_historical_weather","summary":"Get observed daily and hourly weather for one past day (within the last 10 days, not today) for a QWeather LocationID. U","description":"Get observed daily and hourly weather for one past day (within the last 10 days, not today) for a QWeather LocationID. Use for \"What was the weather yesterday in Beijing (location 101010100)\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"api_host":{"description":"Your QWeather API Host label: the part before .qweatherapi.com, for example 'abcxyz' for abcxyz.qweatherapi.com (shown in the QWeather console under Settings).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Api Host","type":"string"},"location":{"description":"QWeather LocationID from lookup_city, for example 101010100.","maxLength":200,"title":"Location","type":"string"},"date":{"description":"A date within the most recent 10 days, excluding today, as yyyyMMdd.","maxLength":200,"title":"Date","type":"string"},"unit":{"anyOf":[{"enum":["m","i"],"type":"string"},{"type":"null"}],"default":"m","description":"Units: m for metric (default) or i for imperial.","title":"Unit"},"lang":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Language code for text fields, for example en, zh, de, fr, ja (default English).","title":"Lang"}},"required":["api_host","location","date"],"title":"get_historical_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/list_storms":{"post":{"operationId":"list_storms","summary":"List tropical storms of a basin for the current or previous year with storm id, name and whether the storm is active. Us","description":"List tropical storms of a basin for the current or previous year with storm id, name and whether the storm is active. Use for \"Which tropical storms are in the Northwest Pacific this year\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"api_host":{"description":"Your QWeather API Host label: the part before .qweatherapi.com, for example 'abcxyz' for abcxyz.qweatherapi.com (shown in the QWeather console under Settings).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Api Host","type":"string"},"basin":{"description":"Ocean basin: AL (North Atlantic), EP (Eastern Pacific), NP (Northwest Pacific), SP, NI or SI (availability depends on your plan).","enum":["AL","EP","NP","SP","NI","SI"],"title":"Basin","type":"string"},"year":{"description":"Year to query: this year or last year, for example 2025.","title":"Year","type":"integer"}},"required":["api_host","basin","year"],"title":"list_stormsArguments","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_forecast":{"post":{"operationId":"get_storm_forecast","summary":"Get the forecast track of one tropical storm: forecast times, positions, storm type, central pressure and wind speed. Us","description":"Get the forecast track of one tropical storm: forecast times, positions, storm type, central pressure and wind speed. Use for \"Where is storm NP_2018 forecast to go\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"api_host":{"description":"Your QWeather API Host label: the part before .qweatherapi.com, for example 'abcxyz' for abcxyz.qweatherapi.com (shown in the QWeather console under Settings).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Api Host","type":"string"},"storm_id":{"description":"Storm id from list_storms, for example NP_2018.","maxLength":200,"title":"Storm Id","type":"string"}},"required":["api_host","storm_id"],"title":"get_storm_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_tide":{"post":{"operationId":"get_tide","summary":"Get the tide table (high and low water times and heights) and hourly tide heights for a tide station and date (up to 10 ","description":"Get the tide table (high and low water times and heights) and hourly tide heights for a tide station and date (up to 10 days ahead). Use for \"When is high tide at tide station P66981 on 20 October 2025\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"api_host":{"description":"Your QWeather API Host label: the part before .qweatherapi.com, for example 'abcxyz' for abcxyz.qweatherapi.com (shown in the QWeather console under Settings).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Api Host","type":"string"},"location":{"description":"Tide station LocationID, for example P66981.","maxLength":200,"title":"Location","type":"string"},"date":{"description":"Date as yyyyMMdd, up to 10 days ahead including today.","maxLength":200,"title":"Date","type":"string"}},"required":["api_host","location","date"],"title":"get_tideArguments","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}}}}