{"openapi":"3.1.0","info":{"title":"Davis Instruments (BYOK) API","version":"0.1.0","description":"Davis Instruments (BYOK) lets an AI assistant read your own Davis Instruments data through the Davis Instruments API with a key you supply (WeatherLink v2 API key). Read-only: 8 tools (list_stations, get_stations, get_current_conditions, get_historic_data, get_evapotranspiration, list_sensors, get_sensor_activity, get_sensor_catalog). The BYOK key travels with each request, is used for that one...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-davis-weatherlink.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-davis-weatherlink/docs"},"termsOfService":"https://connectorbay.com/byok-davis-weatherlink/terms"},"servers":[{"url":"https://byok-davis-weatherlink.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-davis-weatherlink/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/list_stations":{"post":{"operationId":"list_stations","summary":"List the WeatherLink weather stations the API key can access with station id, UUID and name. Locations and other metadat","description":"List the WeatherLink weather stations the API key can access with station id, UUID and name. Locations and other metadata are left out. Use for \"Which Davis weather stations do I have in WeatherLink\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_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_stations":{"post":{"operationId":"get_stations","summary":"Get the id, UUID and name of specific stations by id (comma-separated, up to 100). Use for \"What is the name of WeatherL","description":"Get the id, UUID and name of specific stations by id (comma-separated, up to 100). Use for \"What is the name of WeatherLink station 96230\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"station_ids":{"description":"One or more WeatherLink station ids (integer or UUID), comma-separated, at most 100.","maxLength":1500,"title":"Station Ids","type":"string"}},"required":["station_ids"],"title":"get_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_current_conditions":{"post":{"operationId":"get_current_conditions","summary":"Get current conditions of a station: for each sensor the latest record, such as temperature, humidity, wind, rain, press","description":"Get current conditions of a station: for each sensor the latest record, such as temperature, humidity, wind, rain, pressure, UV and solar radiation (raw station units, see the WeatherLink sensor catalog). Console health records may be included. Use for \"What are the current temperature, wind and rain at my Davis station\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"station_id":{"description":"WeatherLink station id: the integer or UUID returned by list_stations.","maxLength":40,"title":"Station Id","type":"string"}},"required":["station_id"],"title":"get_current_conditionsArguments","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_historic_data":{"post":{"operationId":"get_historic_data","summary":"Get archive records of a station for a period of at most 24 hours (Unix timestamps; the window is start exclusive, end i","description":"Get archive records of a station for a period of at most 24 hours (Unix timestamps; the window is start exclusive, end inclusive). Needs a Pro or Pro+ WeatherLink subscription for the station. Use for \"Show hourly archive data of my Davis station for 1 July 2019\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"station_id":{"description":"WeatherLink station id: the integer or UUID returned by list_stations.","maxLength":40,"title":"Station Id","type":"string"},"start_timestamp":{"description":"Start as a Unix timestamp in seconds; must be earlier than end and at most 24 hours before it.","maximum":4102444800,"minimum":0,"title":"Start Timestamp","type":"integer"},"end_timestamp":{"description":"End as a Unix timestamp in seconds; at most 24 hours after start.","maximum":4102444800,"minimum":0,"title":"End Timestamp","type":"integer"}},"required":["station_id","start_timestamp","end_timestamp"],"title":"get_historic_dataArguments","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_evapotranspiration":{"post":{"operationId":"get_evapotranspiration","summary":"Get evapotranspiration data for a WeatherLink Live station. Use for \"What is the evapotranspiration at my Davis WeatherL","description":"Get evapotranspiration data for a WeatherLink Live station. Use for \"What is the evapotranspiration at my Davis WeatherLink Live station\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"station_id":{"description":"WeatherLink station id: the integer or UUID returned by list_stations.","maxLength":40,"title":"Station Id","type":"string"}},"required":["station_id"],"title":"get_evapotranspirationArguments","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_sensors":{"post":{"operationId":"list_sensors","summary":"List the metadata of the sensors the API key can access. Use for \"Which sensors do my Davis stations have\".","description":"List the metadata of the sensors the API key can access. Use for \"Which sensors do my Davis stations have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_sensorsArguments","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_sensor_activity":{"post":{"operationId":"get_sensor_activity","summary":"Get the last reporting time of every sensor the API key can access, to spot sensors that stopped reporting. Use for \"Whi","description":"Get the last reporting time of every sensor the API key can access, to spot sensors that stopped reporting. Use for \"Which of my Davis sensors have stopped reporting\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_sensor_activityArguments","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_sensor_catalog":{"post":{"operationId":"get_sensor_catalog","summary":"Get the catalog of all available WeatherLink sensor types, to interpret sensor_type codes in current and historic data. ","description":"Get the catalog of all available WeatherLink sensor types, to interpret sensor_type codes in current and historic data. Use for \"What does sensor type 45 in my Davis data mean\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_sensor_catalogArguments","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}}}}