{"openapi":"3.1.0","info":{"title":"Global Forest Watch (BYOK) API","version":"0.1.0","description":"Global Forest Watch (BYOK) lets an AI assistant read your own Global Forest Watch data through the Global Forest Watch API with a key you supply (Global Forest Watch Data API key). Read-only: 10 tools (list_datasets, get_dataset, get_dataset_version, get_dataset_fields, get_version_metadata, list_version_assets, query_dataset, get_features_at_point, get_geostore, get_dataset_stats). The BYOK key...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-globalforestwatch.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-globalforestwatch/docs"},"termsOfService":"https://connectorbay.com/byok-globalforestwatch/terms"},"servers":[{"url":"https://byok-globalforestwatch.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-globalforestwatch/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_datasets":{"post":{"operationId":"list_datasets","summary":"List the datasets of the Global Forest Watch Data API with their versions and when they were last updated. Use page_size","description":"List the datasets of the Global Forest Watch Data API with their versions and when they were last updated. Use page_size to page through them. Use for \"Which datasets does Global Forest Watch offer\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_number":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Page number, starting at 1.","title":"Page Number"},"page_size":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Datasets per page (the service default is 10).","title":"Page Size"}},"title":"list_datasetsArguments","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_dataset":{"post":{"operationId":"get_dataset","summary":"Get one dataset: its versions and its descriptive metadata (title, overview, source, license, coverage, update frequency","description":"Get one dataset: its versions and its descriptive metadata (title, overview, source, license, coverage, update frequency, citation, tags). Use for \"What is the umd_tree_cover_loss dataset and which versions exist\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dataset":{"description":"Dataset name (lowercase letters, digits, underscore or hyphen), for example 'umd_tree_cover_loss'; list_datasets shows the names.","maxLength":200,"title":"Dataset","type":"string"}},"required":["dataset"],"title":"get_datasetArguments","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_dataset_version":{"post":{"operationId":"get_dataset_version","summary":"Get one dataset version: whether it is the latest, whether it can still change, and when it was created and updated. Use","description":"Get one dataset version: whether it is the latest, whether it can still change, and when it was created and updated. Use for \"Is v1.11 the latest version of umd_tree_cover_loss\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dataset":{"description":"Dataset name (lowercase letters, digits, underscore or hyphen), for example 'umd_tree_cover_loss'; list_datasets shows the names.","maxLength":200,"title":"Dataset","type":"string"},"version":{"description":"Dataset version such as 'v1.11' or the word 'latest'; get_dataset lists the versions.","maxLength":200,"title":"Version","type":"string"}},"required":["dataset","version"],"title":"get_dataset_versionArguments","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_dataset_fields":{"post":{"operationId":"get_dataset_fields","summary":"List the fields (columns) of a dataset version with alias, description, data type and unit, so you know what a SQL query","description":"List the fields (columns) of a dataset version with alias, description, data type and unit, so you know what a SQL query can select, filter and group by. Use for \"Which fields can I query in the latest umd_tree_cover_loss\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dataset":{"description":"Dataset name (lowercase letters, digits, underscore or hyphen), for example 'umd_tree_cover_loss'; list_datasets shows the names.","maxLength":200,"title":"Dataset","type":"string"},"version":{"description":"Dataset version such as 'v1.11' or the word 'latest'; get_dataset lists the versions.","maxLength":200,"title":"Version","type":"string"}},"required":["dataset","version"],"title":"get_dataset_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/get_version_metadata":{"post":{"operationId":"get_version_metadata","summary":"Get the metadata record of a dataset version, optionally merged with the dataset's own metadata. Use for \"Give me the me","description":"Get the metadata record of a dataset version, optionally merged with the dataset's own metadata. Use for \"Give me the metadata of the latest umd_tree_cover_loss version\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dataset":{"description":"Dataset name (lowercase letters, digits, underscore or hyphen), for example 'umd_tree_cover_loss'; list_datasets shows the names.","maxLength":200,"title":"Dataset","type":"string"},"version":{"description":"Dataset version such as 'v1.11' or the word 'latest'; get_dataset lists the versions.","maxLength":200,"title":"Version","type":"string"},"include_dataset_metadata":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include the dataset-level metadata as well.","title":"Include Dataset Metadata"}},"required":["dataset","version"],"title":"get_version_metadataArguments","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_version_assets":{"post":{"operationId":"list_version_assets","summary":"List the assets (tile sets, tables, files) of a dataset version with type, URI and status. Use for \"Which assets does th","description":"List the assets (tile sets, tables, files) of a dataset version with type, URI and status. Use for \"Which assets does the latest umd_tree_cover_loss version have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dataset":{"description":"Dataset name (lowercase letters, digits, underscore or hyphen), for example 'umd_tree_cover_loss'; list_datasets shows the names.","maxLength":200,"title":"Dataset","type":"string"},"version":{"description":"Dataset version such as 'v1.11' or the word 'latest'; get_dataset lists the versions.","maxLength":200,"title":"Version","type":"string"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to return only the default asset.","title":"Is Default"},"is_latest":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to return only the latest assets.","title":"Is Latest"},"page_number":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Page number, starting at 1.","title":"Page Number"},"page_size":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Assets per page (the service default is 10).","title":"Page Size"}},"required":["dataset","version"],"title":"list_version_assetsArguments","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/query_dataset":{"post":{"operationId":"query_dataset","summary":"Run a read-only SQL query on a dataset version and return the rows. Optionally restrict it to a stored area (geostore). ","description":"Run a read-only SQL query on a dataset version and return the rows. Optionally restrict it to a stored area (geostore). Raster-only datasets need a geostore ID. Use for \"Sum the area in hectares by year for umd_tree_cover_loss inside geostore 1d2e3f40-0000-4000-8000-000000000000\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dataset":{"description":"Dataset name (lowercase letters, digits, underscore or hyphen), for example 'umd_tree_cover_loss'; list_datasets shows the names.","maxLength":200,"title":"Dataset","type":"string"},"version":{"description":"Dataset version such as 'v1.11' or the word 'latest'; get_dataset lists the versions.","maxLength":200,"title":"Version","type":"string"},"sql":{"description":"A read-only SQL SELECT statement using fields listed by get_dataset_fields; the reserved fields area__ha, latitude and longitude can also be used.","maxLength":2000,"title":"Sql","type":"string"},"geostore_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"ID (UUID) of a stored Polygon or MultiPolygon area to restrict the query to.","title":"Geostore Id"}},"required":["dataset","version","sql"],"title":"query_datasetArguments","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_features_at_point":{"post":{"operationId":"get_features_at_point","summary":"Get the features of a dataset version at a map location; the search radius shrinks with higher zoom levels. Use for \"Wha","description":"Get the features of a dataset version at a map location; the search radius shrinks with higher zoom levels. Use for \"What does the latest umd_tree_cover_loss show at latitude -3.1 longitude -60.0\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dataset":{"description":"Dataset name (lowercase letters, digits, underscore or hyphen), for example 'umd_tree_cover_loss'; list_datasets shows the names.","maxLength":200,"title":"Dataset","type":"string"},"version":{"description":"Dataset version such as 'v1.11' or the word 'latest'; get_dataset lists the versions.","maxLength":200,"title":"Version","type":"string"},"lat":{"description":"Latitude in decimal degrees (-90 to 90).","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lng":{"description":"Longitude in decimal degrees (-180 to 180).","maximum":180,"minimum":-180,"title":"Lng","type":"number"},"z":{"description":"Map zoom level, 0 to 22.","maximum":22,"minimum":0,"title":"Z","type":"integer"}},"required":["dataset","version","lat","lng","z"],"title":"get_features_at_pointArguments","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_geostore":{"post":{"operationId":"get_geostore","summary":"Get the stored GeoJSON area for a geostore ID: area in hectares and bounding box. Use for \"How large is geostore 1d2e3f4","description":"Get the stored GeoJSON area for a geostore ID: area in hectares and bounding box. Use for \"How large is geostore 1d2e3f40-0000-4000-8000-000000000000\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"geostore_id":{"description":"Geostore ID, a UUID as returned when an area was stored.","maxLength":200,"title":"Geostore Id","type":"string"}},"required":["geostore_id"],"title":"get_geostoreArguments","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_dataset_stats":{"post":{"operationId":"get_dataset_stats","summary":"Get summary statistics of a dataset version's default asset (value ranges and band statistics for rasters). Use for \"Giv","description":"Get summary statistics of a dataset version's default asset (value ranges and band statistics for rasters). Use for \"Give statistics for the latest umd_tree_cover_loss version\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dataset":{"description":"Dataset name (lowercase letters, digits, underscore or hyphen), for example 'umd_tree_cover_loss'; list_datasets shows the names.","maxLength":200,"title":"Dataset","type":"string"},"version":{"description":"Dataset version such as 'v1.11' or the word 'latest'; get_dataset lists the versions.","maxLength":200,"title":"Version","type":"string"}},"required":["dataset","version"],"title":"get_dataset_statsArguments","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}}}}