{"openapi":"3.1.0","info":{"title":"Storm Glass (BYOK) API","version":"0.1.0","description":"Storm Glass (BYOK) lets an AI assistant read your own Storm Glass data through the Storm Glass API with a key you supply (Storm Glass API key). Read-only: 8 tools (get_weather_forecast, get_tide_extremes, get_tide_sea_level, list_tide_stations, get_astronomy, get_solar, get_bio, get_elevation). The BYOK key travels with each request, is used for that one call only and is never stored, logged or...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-stormglass.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-stormglass/docs"},"termsOfService":"https://connectorbay.com/byok-stormglass/terms"},"servers":[{"url":"https://byok-stormglass.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-stormglass/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_weather_forecast":{"post":{"operationId":"get_weather_forecast","summary":"Get the hourly weather and marine forecast for a coordinate: air temperature, wind, gusts, waves, swell, pressure, cloud","description":"Get the hourly weather and marine forecast for a coordinate: air temperature, wind, gusts, waves, swell, pressure, cloud cover and more, per source (up to 24 hours kept). Each request counts against the key's daily quota (the free plan allows few requests a day). Use for \"What is the wind speed and wave height forecast at 58.7984, 17.8081\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude, -90 to 90.","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lng":{"description":"Longitude, -180 to 180.","maximum":180,"minimum":-180,"title":"Lng","type":"number"},"params":{"description":"Comma-separated weather parameters (for example airTemperature, windSpeed, gust, waveHeight, swellHeight, pressure, cloudCover) to return, for example windSpeed,waveHeight.","maxLength":300,"title":"Params","type":"string"},"start":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"First time to include: UTC UNIX timestamp or ISO 8601 text (default: today at 00:00 UTC).","title":"Start"},"end":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Last time to include: UTC UNIX timestamp or ISO 8601 text.","title":"End"},"source":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"One source or a comma-separated list, for example sg, noaa or dwd,noaa (default: all).","title":"Source"}},"required":["lat","lng","params"],"title":"get_weather_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_extremes":{"post":{"operationId":"get_tide_extremes","summary":"Get the high and low tide times and heights for a coordinate from the nearest tide station (default next 10 days). Each ","description":"Get the high and low tide times and heights for a coordinate from the nearest tide station (default next 10 days). Each request counts against the key's daily quota (the free plan allows few requests a day). Use for \"When is high tide near 60.936, 5.114\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude, -90 to 90.","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lng":{"description":"Longitude, -180 to 180.","maximum":180,"minimum":-180,"title":"Lng","type":"number"},"start":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"First time to include: UTC UNIX timestamp or ISO 8601 text (default: today at 00:00 UTC).","title":"Start"},"end":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Last time to include: UTC UNIX timestamp or ISO 8601 text.","title":"End"},"datum":{"anyOf":[{"enum":["LAT","MLLW","MLW","MSL","MHW","MHHW","HAT"],"type":"string"},{"type":"null"}],"default":null,"description":"Datum that tide heights are relative to: LAT, MLLW, MLW, MSL, MHW, MHHW or HAT (default MSL).","title":"Datum"}},"required":["lat","lng"],"title":"get_tide_extremesArguments","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_sea_level":{"post":{"operationId":"get_tide_sea_level","summary":"Get hourly sea level heights for a coordinate from the nearest tide station (default next 10 days). Each request counts ","description":"Get hourly sea level heights for a coordinate from the nearest tide station (default next 10 days). Each request counts against the key's daily quota (the free plan allows few requests a day). Use for \"What is the sea level forecast near 60.936, 5.114\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude, -90 to 90.","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lng":{"description":"Longitude, -180 to 180.","maximum":180,"minimum":-180,"title":"Lng","type":"number"},"start":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"First time to include: UTC UNIX timestamp or ISO 8601 text (default: today at 00:00 UTC).","title":"Start"},"end":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Last time to include: UTC UNIX timestamp or ISO 8601 text.","title":"End"},"datum":{"anyOf":[{"enum":["LAT","MLLW","MLW","MSL","MHW","MHHW","HAT"],"type":"string"},{"type":"null"}],"default":null,"description":"Datum that tide heights are relative to: LAT, MLLW, MLW, MSL, MHW, MHHW or HAT (default MSL).","title":"Datum"}},"required":["lat","lng"],"title":"get_tide_sea_levelArguments","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":{"post":{"operationId":"list_tide_stations","summary":"List every tide station with name, coordinates and owner (a long list, the first entries are kept). Each request counts ","description":"List every tide station with name, coordinates and owner (a long list, the first entries are kept). Each request counts against the key's daily quota (the free plan allows few requests a day). Use for \"Which tide stations does Storm Glass have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_tide_stationsArguments","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_astronomy":{"post":{"operationId":"get_astronomy","summary":"Get sunrise, sunset, dawn, dusk, moonrise, moonset and moon phase per day for a coordinate (up to 10 days). Each request","description":"Get sunrise, sunset, dawn, dusk, moonrise, moonset and moon phase per day for a coordinate (up to 10 days). Each request counts against the key's daily quota (the free plan allows few requests a day). Use for \"When is sunrise and sunset at 58.7984, 17.8081\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude, -90 to 90.","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lng":{"description":"Longitude, -180 to 180.","maximum":180,"minimum":-180,"title":"Lng","type":"number"},"start":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"First time to include: UTC UNIX timestamp or ISO 8601 text (default: today at 00:00 UTC).","title":"Start"},"end":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Last day: UTC UNIX timestamp or ISO 8601 text (up to 10 days ahead).","title":"End"}},"required":["lat","lng"],"title":"get_astronomyArguments","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":{"post":{"operationId":"get_solar","summary":"Get hourly solar data for a coordinate, such as uvIndex and radiation parameters, per source. Each request counts agains","description":"Get hourly solar data for a coordinate, such as uvIndex and radiation parameters, per source. Each request counts against the key's daily quota (the free plan allows few requests a day). Use for \"What is the UV index forecast at 58.7984, 17.8081\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude, -90 to 90.","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lng":{"description":"Longitude, -180 to 180.","maximum":180,"minimum":-180,"title":"Lng","type":"number"},"params":{"description":"Comma-separated solar parameters (for example uvIndex) to return, for example uvIndex.","maxLength":300,"title":"Params","type":"string"},"start":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"First time to include: UTC UNIX timestamp or ISO 8601 text (default: today at 00:00 UTC).","title":"Start"},"end":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Last time to include: UTC UNIX timestamp or ISO 8601 text.","title":"End"},"source":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"One source or a comma-separated list, for example sg, noaa or dwd,noaa (default: all).","title":"Source"}},"required":["lat","lng","params"],"title":"get_solarArguments","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_bio":{"post":{"operationId":"get_bio","summary":"Get hourly ocean biology data for a coordinate, such as chlorophyll, oxygen, pH, salinity and nutrients, or soil data, p","description":"Get hourly ocean biology data for a coordinate, such as chlorophyll, oxygen, pH, salinity and nutrients, or soil data, per source. Each request counts against the key's daily quota (the free plan allows few requests a day). Use for \"What is the sea water salinity at 58.7984, 17.8081\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude, -90 to 90.","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lng":{"description":"Longitude, -180 to 180.","maximum":180,"minimum":-180,"title":"Lng","type":"number"},"params":{"description":"Comma-separated bio parameters (for example chlorophyll, oxygen, ph, salinity, nitrate) to return, for example salinity,ph.","maxLength":300,"title":"Params","type":"string"},"start":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"First time to include: UTC UNIX timestamp or ISO 8601 text (default: today at 00:00 UTC).","title":"Start"},"end":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Last time to include: UTC UNIX timestamp or ISO 8601 text.","title":"End"},"source":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"One source or a comma-separated list, for example sg, noaa or dwd,noaa (default: all).","title":"Source"}},"required":["lat","lng","params"],"title":"get_bioArguments","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_elevation":{"post":{"operationId":"get_elevation","summary":"Get the elevation or sea depth in metres relative to sea level at a coordinate. Each request counts against the key's da","description":"Get the elevation or sea depth in metres relative to sea level at a coordinate. Each request counts against the key's daily quota (the free plan allows few requests a day). Use for \"What is the elevation at 58.7984, 17.8081\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude, -90 to 90.","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lng":{"description":"Longitude, -180 to 180.","maximum":180,"minimum":-180,"title":"Lng","type":"number"}},"required":["lat","lng"],"title":"get_elevationArguments","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}}}}