{"openapi":"3.1.0","info":{"title":"Ocean Networks Canada (BYOK) API","version":"0.1.0","description":"Ocean Networks Canada (BYOK) lets an AI assistant read your own Ocean Networks Canada data through the Ocean Networks Canada API with a key you supply (Oceans 3.0 API token). Read-only: 10 tools (list_locations, list_device_categories, list_properties, list_data_products, list_deployments, list_devices, get_scalar_data_by_location, get_scalar_data_by_device, get_raw_data_by_location,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-oceannetworks.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-oceannetworks/docs"},"termsOfService":"https://connectorbay.com/byok-oceannetworks/terms"},"servers":[{"url":"https://byok-oceannetworks.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-oceannetworks/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_locations":{"post":{"operationId":"list_locations","summary":"Search observatory locations (seafloor sites, buoys, shore stations) by code or name and get coordinates, depth, descrip","description":"Search observatory locations (seafloor sites, buoys, shore stations) by code or name and get coordinates, depth, description and how many deployments they have. Use for \"Which Ocean Networks Canada location is called Bullseye\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"location_code":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Location code to filter by, for example NC89 (see list_locations).","title":"Location Code"},"location_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Part of the location name, for example Bullseye.","title":"Location Name"}},"title":"list_locationsArguments","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_device_categories":{"post":{"operationId":"list_device_categories","summary":"List the instrument categories (CTD, bottom pressure recorder, seismometer, hydrophone, camera ...) installed at a locat","description":"List the instrument categories (CTD, bottom pressure recorder, seismometer, hydrophone, camera ...) installed at a location or matching a name. Use for \"What kinds of instruments are installed at location NC89\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"location_code":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Location code to filter by, for example NC89 (see list_locations).","title":"Location Code"},"device_category_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Part of the category name or property, for example pressure.","title":"Device Category Name"}},"title":"list_device_categoriesArguments","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_properties":{"post":{"operationId":"list_properties","summary":"List the measured properties (conductivity, pressure, temperature ...) with description and unit of measure for a locati","description":"List the measured properties (conductivity, pressure, temperature ...) with description and unit of measure for a location and device category. Use for \"Which properties does the CTD at NC89 measure\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"location_code":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Location code to filter by, for example NC89 (see list_locations).","title":"Location Code"},"device_category_code":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Device category code to filter by, for example CTD or BPR (see list_device_categories).","title":"Device Category Code"}},"title":"list_propertiesArguments","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_data_products":{"post":{"operationId":"list_data_products","summary":"List the downloadable data product types (time series plots, spectrograms, annotation files ...) available for a locatio","description":"List the downloadable data product types (time series plots, spectrograms, annotation files ...) available for a location and device category. Use for \"What data products exist for the CTD at NC89\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"location_code":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Location code to filter by, for example NC89 (see list_locations).","title":"Location Code"},"device_category_code":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Device category code to filter by, for example CTD or BPR (see list_device_categories).","title":"Device Category Code"}},"title":"list_data_productsArguments","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_deployments":{"post":{"operationId":"list_deployments","summary":"List device deployments at a location and device category with start and end times, position, depth and orientation; ope","description":"List device deployments at a location and device category with start and end times, position, depth and orientation; open deployments have no end. Use for \"When were bottom pressure recorders deployed at NC89\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"location_code":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Location code to filter by, for example NC89 (see list_locations).","title":"Location Code"},"device_category_code":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Device category code to filter by, for example CTD or BPR (see list_device_categories).","title":"Device Category Code"}},"title":"list_deploymentsArguments","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_devices":{"post":{"operationId":"list_devices","summary":"List devices (serial-numbered instruments) for a device category and location, optionally limited to those with data in ","description":"List devices (serial-numbered instruments) for a device category and location, optionally limited to those with data in a time window. Use for \"Which bottom pressure recorders have data at NC89\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"device_category_code":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Device category code to filter by, for example CTD or BPR (see list_device_categories).","title":"Device Category Code"},"location_code":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Location code to filter by, for example NC89 (see list_locations).","title":"Location Code"},"date_from":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the window as an ISO 8601 UTC timestamp.","title":"Date From"},"date_to":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"End of the window as an ISO 8601 UTC timestamp.","title":"Date To"}},"title":"list_devicesArguments","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_scalar_data_by_location":{"post":{"operationId":"get_scalar_data_by_location","summary":"Get processed sensor readings (values with quality flags and sample times) from all sensors of a device category at a lo","description":"Get processed sensor readings (values with quality flags and sample times) from all sensors of a device category at a location for a time window. Use for \"Show bottom pressure residuals at NC89 for five seconds on 28 January 2021\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"location_code":{"description":"Ocean Networks Canada location code, for example NC89 (Clayoquot Slope Bullseye); find codes with list_locations.","maxLength":200,"title":"Location Code","type":"string"},"device_category_code":{"description":"Device category code, for example CTD, BPR (bottom pressure recorder) or VIDEOCAM; find codes with list_device_categories.","maxLength":200,"title":"Device Category Code","type":"string"},"date_from":{"description":"Start of the window as an ISO 8601 UTC timestamp, for example 2021-01-28T00:00:00.000Z. Keep the window short (minutes to hours): a request returns up to 100,000 samples.","maxLength":200,"title":"Date From","type":"string"},"date_to":{"description":"End of the window as an ISO 8601 UTC timestamp, for example 2021-01-28T00:00:05.000Z.","maxLength":200,"title":"Date To","type":"string"},"sensor_category_codes":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated sensor category codes to return, for example dart_pressure_residual (omit for all sensors).","title":"Sensor Category Codes"},"property_code":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Property code to return, for example pressure or temperature (see list_properties).","title":"Property Code"}},"required":["location_code","device_category_code","date_from","date_to"],"title":"get_scalar_data_by_locationArguments","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_scalar_data_by_device":{"post":{"operationId":"get_scalar_data_by_device","summary":"Get processed sensor readings (values with quality flags and sample times) from one device for a time window. Use for \"S","description":"Get processed sensor readings (values with quality flags and sample times) from one device for a time window. Use for \"Show readings of device BPR_889 for five seconds on 28 January 2021\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"device_code":{"description":"Device code, for example BPR_889; find codes with list_devices or list_deployments.","maxLength":200,"title":"Device Code","type":"string"},"date_from":{"description":"Start of the window as an ISO 8601 UTC timestamp, for example 2021-01-28T00:00:00.000Z. Keep the window short (minutes to hours): a request returns up to 100,000 samples.","maxLength":200,"title":"Date From","type":"string"},"date_to":{"description":"End of the window as an ISO 8601 UTC timestamp, for example 2021-01-28T00:00:05.000Z.","maxLength":200,"title":"Date To","type":"string"},"sensor_category_codes":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated sensor category codes to return, for example dart_pressure_residual (omit for all sensors).","title":"Sensor Category Codes"},"property_code":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Property code to return, for example pressure or temperature (see list_properties).","title":"Property Code"}},"required":["device_code","date_from","date_to"],"title":"get_scalar_data_by_deviceArguments","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_raw_data_by_location":{"post":{"operationId":"get_raw_data_by_location","summary":"Get unprocessed instrument output lines (as the device sent them, often hex or XML) with timestamps for a device categor","description":"Get unprocessed instrument output lines (as the device sent them, often hex or XML) with timestamps for a device category at a location. Use for \"Show raw bottom pressure recorder output at NC89 for five seconds on 28 January 2020\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"location_code":{"description":"Ocean Networks Canada location code, for example NC89 (Clayoquot Slope Bullseye); find codes with list_locations.","maxLength":200,"title":"Location Code","type":"string"},"device_category_code":{"description":"Device category code, for example CTD, BPR (bottom pressure recorder) or VIDEOCAM; find codes with list_device_categories.","maxLength":200,"title":"Device Category Code","type":"string"},"date_from":{"description":"Start of the window as an ISO 8601 UTC timestamp, for example 2021-01-28T00:00:00.000Z. Keep the window short (minutes to hours): a request returns up to 100,000 samples.","maxLength":200,"title":"Date From","type":"string"},"date_to":{"description":"End of the window as an ISO 8601 UTC timestamp, for example 2021-01-28T00:00:05.000Z.","maxLength":200,"title":"Date To","type":"string"}},"required":["location_code","device_category_code","date_from","date_to"],"title":"get_raw_data_by_locationArguments","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_archive_files_by_location":{"post":{"operationId":"list_archive_files_by_location","summary":"List the names of archived files (plots, audio, video, images, instrument files) available for a device category at a lo","description":"List the names of archived files (plots, audio, video, images, instrument files) available for a device category at a location in a time window. Use for \"Which camera files exist at Ridley Island (RISS) for five minutes on 1 December 2016\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"location_code":{"description":"Ocean Networks Canada location code, for example NC89 (Clayoquot Slope Bullseye); find codes with list_locations.","maxLength":200,"title":"Location Code","type":"string"},"device_category_code":{"description":"Device category code, for example CTD, BPR (bottom pressure recorder) or VIDEOCAM; find codes with list_device_categories.","maxLength":200,"title":"Device Category Code","type":"string"},"date_from":{"description":"Start of the window as an ISO 8601 UTC timestamp, for example 2021-01-28T00:00:00.000Z. Keep the window short (minutes to hours): a request returns up to 100,000 samples.","maxLength":200,"title":"Date From","type":"string"},"date_to":{"description":"End of the window as an ISO 8601 UTC timestamp, for example 2021-01-28T00:00:05.000Z.","maxLength":200,"title":"Date To","type":"string"}},"required":["location_code","device_category_code","date_from","date_to"],"title":"list_archive_files_by_locationArguments","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}}}}