{"openapi":"3.1.0","info":{"title":"Agromonitoring (BYOK) API","version":"0.1.0","description":"Agromonitoring (BYOK) lets an AI assistant read your own Agromonitoring data through the Agromonitoring API with a key you supply (Agromonitoring API key). Read-only: 12 tools (list_polygons, get_polygon, get_current_weather, get_forecast_weather, get_historical_weather, get_current_soil, get_historical_soil, get_current_uvi, get_forecast_uvi, get_ndvi_history, get_accumulated_temperature,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-agromonitoring.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-agromonitoring/docs"},"termsOfService":"https://connectorbay.com/byok-agromonitoring/terms"},"servers":[{"url":"https://byok-agromonitoring.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-agromonitoring/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_polygons":{"post":{"operationId":"list_polygons","summary":"List the field polygons saved in the account with id, name and area in hectares. The polygon geometry is left out; use t","description":"List the field polygons saved in the account with id, name and area in hectares. The polygon geometry is left out; use the id in the soil, UV and NDVI tools. Use for \"Which fields have I set up in Agromonitoring and how big are they\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_polygonsArguments","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_polygon":{"post":{"operationId":"get_polygon","summary":"Get one saved polygon by id: name and area in hectares (the geometry is left out). Use for \"How many hectares is my poly","description":"Get one saved polygon by id: name and area in hectares (the geometry is left out). Use for \"How many hectares is my polygon 5abb9fb82c8897000bde3e87\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"polygon_id":{"description":"Id of the polygon, as returned by list_polygons.","maxLength":40,"title":"Polygon Id","type":"string"}},"required":["polygon_id"],"title":"get_polygonArguments","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 the current weather at coordinates: conditions, temperature, feels-like, pressure, humidity, wind and cloudiness. Te","description":"Get the current weather at coordinates: conditions, temperature, feels-like, pressure, humidity, wind and cloudiness. Temperatures are in Kelvin, wind in metres per second. Use for \"What is the weather right now at latitude 35, longitude 139\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude of the place in decimal degrees (-90 to 90).","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lon":{"description":"Longitude of the place in decimal degrees (-180 to 180).","maximum":180,"minimum":-180,"title":"Lon","type":"number"}},"required":["lat","lon"],"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_forecast_weather":{"post":{"operationId":"get_forecast_weather","summary":"Get the 5-day weather forecast at coordinates in 3-hour steps with temperature (Kelvin), pressure, humidity, wind and cl","description":"Get the 5-day weather forecast at coordinates in 3-hour steps with temperature (Kelvin), pressure, humidity, wind and clouds. Use for \"What will the weather be over the next five days at latitude 35, longitude 139\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude of the place in decimal degrees (-90 to 90).","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lon":{"description":"Longitude of the place in decimal degrees (-180 to 180).","maximum":180,"minimum":-180,"title":"Lon","type":"number"}},"required":["lat","lon"],"title":"get_forecast_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_historical_weather":{"post":{"operationId":"get_historical_weather","summary":"Get past weather at coordinates between two Unix timestamps. Historical data is not available on the free plan. Use for ","description":"Get past weather at coordinates between two Unix timestamps. Historical data is not available on the free plan. Use for \"What was the weather at latitude 37.75, longitude -122.37 in May 2021\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude of the place in decimal degrees (-90 to 90).","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lon":{"description":"Longitude of the place in decimal degrees (-180 to 180).","maximum":180,"minimum":-180,"title":"Lon","type":"number"},"start":{"description":"Start of the period as a Unix timestamp in seconds (UTC).","maximum":4102444800,"minimum":0,"title":"Start","type":"integer"},"end":{"description":"End of the period as a Unix timestamp in seconds (UTC).","maximum":4102444800,"minimum":0,"title":"End","type":"integer"}},"required":["lat","lon","start","end"],"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/get_current_soil":{"post":{"operationId":"get_current_soil","summary":"Get the latest soil data for one of your polygons: surface temperature (t0) and temperature at 10 cm depth (t10) in Kelv","description":"Get the latest soil data for one of your polygons: surface temperature (t0) and temperature at 10 cm depth (t10) in Kelvin and soil moisture in cubic metres per cubic metre. Use for \"How moist is the soil in my field right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"polygon_id":{"description":"Id of one of your polygons (fields), as returned by list_polygons.","maxLength":40,"title":"Polygon Id","type":"string"}},"required":["polygon_id"],"title":"get_current_soilArguments","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_soil":{"post":{"operationId":"get_historical_soil","summary":"Get past soil temperature and moisture of one of your polygons between two Unix timestamps. Historical data is not avail","description":"Get past soil temperature and moisture of one of your polygons between two Unix timestamps. Historical data is not available on the free plan. Use for \"How did soil moisture change in my field during February 2018\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"polygon_id":{"description":"Id of one of your polygons (fields), as returned by list_polygons.","maxLength":40,"title":"Polygon Id","type":"string"},"start":{"description":"Start of the period as a Unix timestamp in seconds (UTC).","maximum":4102444800,"minimum":0,"title":"Start","type":"integer"},"end":{"description":"End of the period as a Unix timestamp in seconds (UTC).","maximum":4102444800,"minimum":0,"title":"End","type":"integer"}},"required":["polygon_id","start","end"],"title":"get_historical_soilArguments","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_uvi":{"post":{"operationId":"get_current_uvi","summary":"Get the current clear-sky ultraviolet index for one of your polygons. Use for \"What is the UV index at my field today\".","description":"Get the current clear-sky ultraviolet index for one of your polygons. Use for \"What is the UV index at my field today\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"polygon_id":{"description":"Id of one of your polygons (fields), as returned by list_polygons.","maxLength":40,"title":"Polygon Id","type":"string"}},"required":["polygon_id"],"title":"get_current_uviArguments","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_forecast_uvi":{"post":{"operationId":"get_forecast_uvi","summary":"Get the daily ultraviolet index forecast for one of your polygons. Use for \"What will the UV index be at my field over t","description":"Get the daily ultraviolet index forecast for one of your polygons. Use for \"What will the UV index be at my field over the next days\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"polygon_id":{"description":"Id of one of your polygons (fields), as returned by list_polygons.","maxLength":40,"title":"Polygon Id","type":"string"},"cnt":{"anyOf":[{"maximum":16,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Number of days to return.","title":"Cnt"}},"required":["polygon_id"],"title":"get_forecast_uviArguments","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_ndvi_history":{"post":{"operationId":"get_ndvi_history","summary":"Get the NDVI vegetation index statistics (mean, median, min, max, quartiles, pixel count) of one of your polygons for ea","description":"Get the NDVI vegetation index statistics (mean, median, min, max, quartiles, pixel count) of one of your polygons for each satellite pass in a period, from Landsat 8 or Sentinel-2. Historical data is not available on the free plan. Use for \"How did vegetation health (NDVI) in my field develop between July and August 2018\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"polygon_id":{"description":"Id of one of your polygons (fields), as returned by list_polygons.","maxLength":40,"title":"Polygon Id","type":"string"},"start":{"description":"Start of the period as a Unix timestamp in seconds (UTC).","maximum":4102444800,"minimum":0,"title":"Start","type":"integer"},"end":{"description":"End of the period as a Unix timestamp in seconds (UTC).","maximum":4102444800,"minimum":0,"title":"End","type":"integer"},"type":{"anyOf":[{"enum":["l8","s2"],"type":"string"},{"type":"null"}],"default":null,"description":"Satellite: l8 (Landsat 8) or s2 (Sentinel-2); leave out for both.","title":"Type"},"clouds_max":{"anyOf":[{"maximum":100,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Skip passes with more than this cloud cover percent.","title":"Clouds Max"},"coverage_min":{"anyOf":[{"maximum":100,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Skip passes covering less than this percent of the polygon.","title":"Coverage Min"}},"required":["polygon_id","start","end"],"title":"get_ndvi_historyArguments","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_accumulated_temperature":{"post":{"operationId":"get_accumulated_temperature","summary":"Get accumulated temperature (growing degree style sum) at coordinates between two Unix timestamps, counting only values ","description":"Get accumulated temperature (growing degree style sum) at coordinates between two Unix timestamps, counting only values above a threshold in Kelvin. Use for \"How much accumulated temperature above 284 K did my location get in February 2018\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude of the place in decimal degrees (-90 to 90).","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lon":{"description":"Longitude of the place in decimal degrees (-180 to 180).","maximum":180,"minimum":-180,"title":"Lon","type":"number"},"start":{"description":"Start of the period as a Unix timestamp in seconds (UTC).","maximum":4102444800,"minimum":0,"title":"Start","type":"integer"},"end":{"description":"End of the period as a Unix timestamp in seconds (UTC).","maximum":4102444800,"minimum":0,"title":"End","type":"integer"},"threshold":{"description":"Values below this temperature in Kelvin are ignored.","maximum":400,"minimum":200,"title":"Threshold","type":"number"}},"required":["lat","lon","start","end","threshold"],"title":"get_accumulated_temperatureArguments","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_accumulated_precipitation":{"post":{"operationId":"get_accumulated_precipitation","summary":"Get accumulated precipitation in millimetres at coordinates between two Unix timestamps. Use for \"How much rain accumula","description":"Get accumulated precipitation in millimetres at coordinates between two Unix timestamps. Use for \"How much rain accumulated at my location in February 2018\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude of the place in decimal degrees (-90 to 90).","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lon":{"description":"Longitude of the place in decimal degrees (-180 to 180).","maximum":180,"minimum":-180,"title":"Lon","type":"number"},"start":{"description":"Start of the period as a Unix timestamp in seconds (UTC).","maximum":4102444800,"minimum":0,"title":"Start","type":"integer"},"end":{"description":"End of the period as a Unix timestamp in seconds (UTC).","maximum":4102444800,"minimum":0,"title":"End","type":"integer"}},"required":["lat","lon","start","end"],"title":"get_accumulated_precipitationArguments","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}}}}