{"openapi":"3.1.0","info":{"title":"AgriWebb (BYOK) API","version":"0.1.0","description":"AgriWebb (BYOK) lets an AI assistant read your own AgriWebb data through the AgriWebb API with a key you supply (AgriWebb API key (issued by AgriWebb on request)). Read-only: 12 tools (list_farms, list_fields, list_enterprises, list_management_groups, count_animals, list_feed_on_offer, list_feed_on_offer_targets, list_pasture_growth_rates, list_rainfalls, list_level_readings, list_map_features,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-agriwebb.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-agriwebb/docs"},"termsOfService":"https://connectorbay.com/byok-agriwebb/terms"},"servers":[{"url":"https://byok-agriwebb.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-agriwebb/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_farms":{"post":{"operationId":"list_farms","summary":"List the farms the key can access with id, name, time zone and town. Needs the read:farms scope. Use for \"Which farms ca","description":"List the farms the key can access with id, name, time zone and town. Needs the read:farms scope. Use for \"Which farms can my AgriWebb key see\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_farmsArguments","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_fields":{"post":{"operationId":"list_fields","summary":"List a farm's fields (paddocks) with total and grazable area, unit, land use and crop type. Needs read:fields. Use for \"","description":"List a farm's fields (paddocks) with total and grazable area, unit, land use and crop type. Needs read:fields. Use for \"What paddocks does my AgriWebb farm have and how big are they\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"farm_id":{"description":"AgriWebb farm id (get it from list_farms).","maxLength":64,"title":"Farm Id","type":"string"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 500).","title":"Limit"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Skip"}},"required":["farm_id"],"title":"list_fieldsArguments","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_enterprises":{"post":{"operationId":"list_enterprises","summary":"List a farm's livestock enterprises (id and name). Needs read:enterprise. Use for \"Which enterprises are set up on my Ag","description":"List a farm's livestock enterprises (id and name). Needs read:enterprise. Use for \"Which enterprises are set up on my AgriWebb farm\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"farm_id":{"description":"AgriWebb farm id (get it from list_farms).","maxLength":64,"title":"Farm Id","type":"string"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 500).","title":"Limit"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Skip"}},"required":["farm_id"],"title":"list_enterprisesArguments","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_management_groups":{"post":{"operationId":"list_management_groups","summary":"List a farm's management groups with enterprise, species (Cattle or Sheep) and type. Needs read:management-groups. Use f","description":"List a farm's management groups with enterprise, species (Cattle or Sheep) and type. Needs read:management-groups. Use for \"What mobs or management groups are on my AgriWebb farm\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"farm_id":{"description":"AgriWebb farm id (get it from list_farms).","maxLength":64,"title":"Farm Id","type":"string"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 500).","title":"Limit"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Skip"}},"required":["farm_id"],"title":"list_management_groupsArguments","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/count_animals":{"post":{"operationId":"count_animals","summary":"Count the animals recorded on a farm (a number only; no individual animal records are returned). Needs read:animals. Use","description":"Count the animals recorded on a farm (a number only; no individual animal records are returned). Needs read:animals. Use for \"How many animals are on my AgriWebb farm\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"farm_id":{"description":"AgriWebb farm id (get it from list_farms).","maxLength":64,"title":"Farm Id","type":"string"}},"required":["farm_id"],"title":"count_animalsArguments","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_feed_on_offer":{"post":{"operationId":"list_feed_on_offer","summary":"List feed-on-offer readings per field, newest first, with value, time and source. At most 500 per call. Needs read:feed-","description":"List feed-on-offer readings per field, newest first, with value, time and source. At most 500 per call. Needs read:feed-on-offers. Use for \"What is the latest feed on offer in my AgriWebb paddocks\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"farm_id":{"description":"AgriWebb farm id (get it from list_farms).","maxLength":64,"title":"Farm Id","type":"string"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 500).","title":"Limit"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Skip"}},"required":["farm_id"],"title":"list_feed_on_offerArguments","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_feed_on_offer_targets":{"post":{"operationId":"list_feed_on_offer_targets","summary":"List feed-on-offer targets per field, newest first. At most 500 per call. Needs read:feed-on-offer-targets. Use for \"Wha","description":"List feed-on-offer targets per field, newest first. At most 500 per call. Needs read:feed-on-offer-targets. Use for \"What feed targets are set for my AgriWebb paddocks\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"farm_id":{"description":"AgriWebb farm id (get it from list_farms).","maxLength":64,"title":"Farm Id","type":"string"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 500).","title":"Limit"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Skip"}},"required":["farm_id"],"title":"list_feed_on_offer_targetsArguments","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_pasture_growth_rates":{"post":{"operationId":"list_pasture_growth_rates","summary":"List pasture growth rate records per field, newest first. At most 500 per call. Needs read:pasture-growth-rates. Use for","description":"List pasture growth rate records per field, newest first. At most 500 per call. Needs read:pasture-growth-rates. Use for \"How fast is pasture growing on my AgriWebb farm\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"farm_id":{"description":"AgriWebb farm id (get it from list_farms).","maxLength":64,"title":"Farm Id","type":"string"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 500).","title":"Limit"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Skip"}},"required":["farm_id"],"title":"list_pasture_growth_ratesArguments","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_rainfalls":{"post":{"operationId":"list_rainfalls","summary":"List rain gauge readings with value, unit, mode (absolute or cumulative) and time, newest first. At most 500 per call. N","description":"List rain gauge readings with value, unit, mode (absolute or cumulative) and time, newest first. At most 500 per call. Needs read:rainfalls. Use for \"How much rain has my AgriWebb farm had recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"farm_id":{"description":"AgriWebb farm id (get it from list_farms).","maxLength":64,"title":"Farm Id","type":"string"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 500).","title":"Limit"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Skip"}},"required":["farm_id"],"title":"list_rainfallsArguments","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_level_readings":{"post":{"operationId":"list_level_readings","summary":"List water tank or trough level readings with value, unit, mode and time, newest first. At most 500 per call. Needs read","description":"List water tank or trough level readings with value, unit, mode and time, newest first. At most 500 per call. Needs read:level-readings. Use for \"What are the water tank levels on my AgriWebb farm\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"farm_id":{"description":"AgriWebb farm id (get it from list_farms).","maxLength":64,"title":"Farm Id","type":"string"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 500).","title":"Limit"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Skip"}},"required":["farm_id"],"title":"list_level_readingsArguments","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_map_features":{"post":{"operationId":"list_map_features","summary":"List a farm's map features (rain gauges, water tanks, troughs) with name, type, capacity and alert thresholds. Needs rea","description":"List a farm's map features (rain gauges, water tanks, troughs) with name, type, capacity and alert thresholds. Needs read:map-features. Use for \"Where are the water tanks and rain gauges on my AgriWebb farm\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"farm_id":{"description":"AgriWebb farm id (get it from list_farms).","maxLength":64,"title":"Farm Id","type":"string"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 500).","title":"Limit"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Skip"}},"required":["farm_id"],"title":"list_map_featuresArguments","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_reports":{"post":{"operationId":"list_reports","summary":"List generated AgriWebb reports (type, farm, reporting period, status) newest first; download is not included. Needs a k","description":"List generated AgriWebb reports (type, farm, reporting period, status) newest first; download is not included. Needs a key with report scopes. Use for \"Which AgriWebb reports have been generated for my farm\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"per_page":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many reports per page (1 to 1000).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"title":"list_reportsArguments","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}}}}