{"openapi":"3.1.0","info":{"title":"Osano (BYOK) API","version":"0.1.0","description":"Osano (BYOK) lets an AI assistant read your own Osano data through the Osano API with a key you supply (Osano API key). Read-only: 9 tools (list_cookie_consent_configs, get_cookie_consent_config, list_config_discoveries, query_cookie_consent_audit_log, list_data_stores, list_data_connectors, list_data_store_labels, list_subject_rights_requests, list_subject_rights_request_types). The BYOK key...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-osano.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-osano/docs"},"termsOfService":"https://connectorbay.com/byok-osano/terms"},"servers":[{"url":"https://byok-osano.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-osano/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_cookie_consent_configs":{"post":{"operationId":"list_cookie_consent_configs","summary":"List cookie consent configurations with domains, compliance mode, publish status and last publish time; filter by name, ","description":"List cookie consent configurations with domains, compliance mode, publish status and last publish time; filter by name, domain, mode or status. Use for \"Which of my cookie consent configurations are unpublished or outdated\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Configuration name to filter by (case-insensitive, partial match).","title":"Name"},"domains":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated domains to filter by.","title":"Domains"},"mode":{"anyOf":[{"enum":["debug","permissive","production"],"type":"string"},{"type":"null"}],"default":null,"description":"Compliance mode: debug, permissive or production.","title":"Mode"},"status":{"anyOf":[{"enum":["unpublished","in-progress","published","outdated","error"],"type":"string"},{"type":"null"}],"default":null,"description":"Publish status: unpublished, in-progress, published, outdated or error.","title":"Status"},"sort_by":{"anyOf":[{"enum":["name","created","updated","lastPublished"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field: name, created, updated or lastPublished.","title":"Sort By"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items to return (1 to 1000).","title":"Limit"},"next":{"anyOf":[{"maxLength":1000,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination token: the 'next' value from the previous answer.","title":"Next"}},"title":"list_cookie_consent_configsArguments","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_cookie_consent_config":{"post":{"operationId":"get_cookie_consent_config","summary":"Get one cookie consent configuration: domains, mode, publish status and key banner settings (widget, GPC and DNT support","description":"Get one cookie consent configuration: domains, mode, publish status and key banner settings (widget, GPC and DNT support, Google and Microsoft consent, iframe and storage blocking). Use for \"How is my cookie consent banner configured\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"config_id":{"description":"Cookie Consent configuration ID (the configId field from list_cookie_consent_configs).","maxLength":200,"title":"Config Id","type":"string"}},"required":["config_id"],"title":"get_cookie_consent_configArguments","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_config_discoveries":{"post":{"operationId":"list_config_discoveries","summary":"List cookies, scripts, iframes or local storage keys discovered on a site by a configuration, with scan origin, first pa","description":"List cookies, scripts, iframes or local storage keys discovered on a site by a configuration, with scan origin, first page seen and classification confidence. Use for \"Which cookies has Osano discovered on my site\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"config_id":{"description":"Cookie Consent configuration ID (the configId field from list_cookie_consent_configs).","maxLength":200,"title":"Config Id","type":"string"},"type":{"anyOf":[{"enum":["cookie","script","iframe","localStorage"],"type":"string"},{"type":"null"}],"default":null,"description":"Discovery type: cookie (default), script, iframe or localStorage.","title":"Type"}},"required":["config_id"],"title":"list_config_discoveriesArguments","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_cookie_consent_audit_log":{"post":{"operationId":"query_cookie_consent_audit_log","summary":"Query the cookie consent audit log (configuration updates and publishes) by configuration, event type, change type and t","description":"Query the cookie consent audit log (configuration updates and publishes) by configuration, event type, change type and time range. Use for \"What changes were made to my cookie consent configuration this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"config_ids":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated configuration IDs to filter by.","title":"Config Ids"},"event_types":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated event types, for example 'cmp.configUpdated,cmp.configPublished'.","title":"Event Types"},"change_type":{"anyOf":[{"enum":["text_customization","style","iab","setting","rule"],"type":"string"},{"type":"null"}],"default":null,"description":"Kind of change: text_customization, style, iab, setting or rule.","title":"Change Type"},"start_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Events at or after this UTC ISO 8601 time.","title":"Start Date"},"end_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Events before this UTC ISO 8601 time.","title":"End Date"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many items to return (1 to 200).","title":"Limit"},"next":{"anyOf":[{"maxLength":1000,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination token: the 'next' value from the previous answer.","title":"Next"}},"title":"query_cookie_consent_audit_logArguments","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_stores":{"post":{"operationId":"list_data_stores","summary":"List data stores found by data discovery with type, sync status, field counts (total, unclassified, holding user data) a","description":"List data stores found by data discovery with type, sync status, field counts (total, unclassified, holding user data) and labels; owners are not returned. Use for \"Which data stores have unclassified fields\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Data store name to filter by (partial match).","title":"Name"},"type":{"anyOf":[{"enum":["internal","saas","onprem"],"type":"string"},{"type":"null"}],"default":null,"description":"Store type: internal, saas or onprem.","title":"Type"},"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for active stores (default), false for inactive ones.","title":"Active"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items changed after this UTC ISO 8601 time.","title":"After"},"connector_id":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only stores of this connector ID.","title":"Connector Id"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items to return (1 to 500).","title":"Limit"},"next":{"anyOf":[{"maxLength":1000,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination token: the 'next' value from the previous answer.","title":"Next"}},"title":"list_data_storesArguments","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_connectors":{"post":{"operationId":"list_data_connectors","summary":"List the connectors available to data discovery (product name and authentication type). Use for \"Which systems can Osano","description":"List the connectors available to data discovery (product name and authentication type). Use for \"Which systems can Osano data discovery connect to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Product name to filter by (partial match).","title":"Name"},"type":{"anyOf":[{"enum":["saas","onprem"],"type":"string"},{"type":"null"}],"default":null,"description":"Connector type: saas or onprem.","title":"Type"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items to return (1 to 500).","title":"Limit"},"next":{"anyOf":[{"maxLength":1000,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination token: the 'next' value from the previous answer.","title":"Next"}},"title":"list_data_connectorsArguments","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_store_labels":{"post":{"operationId":"list_data_store_labels","summary":"List the labels that can be attached to data stores. Use for \"What data store labels exist in Osano\".","description":"List the labels that can be attached to data stores. Use for \"What data store labels exist in Osano\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Label name to search for (case-insensitive partial match).","title":"Search"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items to return (1 to 500).","title":"Limit"},"next":{"anyOf":[{"maxLength":1000,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination token: the 'next' value from the previous answer.","title":"Next"}},"title":"list_data_store_labelsArguments","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_subject_rights_requests":{"post":{"operationId":"list_subject_rights_requests","summary":"List subject rights requests (DSARs) with type, source, status, due and created dates and form name; the requester's det","description":"List subject rights requests (DSARs) with type, source, status, due and created dates and form name; the requester's details and notes are not returned. Use for \"Which subject rights requests are overdue or still in progress\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"enum":["PENDING_EMAIL_VERIFICATION","PENDING_IDENTITY_VERIFICATION","IN_PROGRESS","IN_REVIEW","PENDING_APPEAL","COMPLETED","REJECTED","REJECTED_AUTO"],"type":"string"},{"type":"null"}],"default":null,"description":"Request status.","title":"Status"},"source":{"anyOf":[{"enum":["ADMIN","AGENT_WEB","API","CMP","CSV","EMAIL_INTAKE","WEB"],"type":"string"},{"type":"null"}],"default":null,"description":"Request source.","title":"Source"},"request_type":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Request type such as DELETE, CORRECT, DO_NOT_SELL or OPT_OUT.","title":"Request Type"},"form_id":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only requests made through this form ID.","title":"Form Id"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items changed after this UTC ISO 8601 time.","title":"After"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items to return (1 to 500).","title":"Limit"},"next":{"anyOf":[{"maxLength":1000,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination token: the 'next' value from the previous answer.","title":"Next"}},"title":"list_subject_rights_requestsArguments","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_subject_rights_request_types":{"post":{"operationId":"list_subject_rights_request_types","summary":"List the subject rights request types with their category and the privacy laws that apply (name, abbreviation, effective","description":"List the subject rights request types with their category and the privacy laws that apply (name, abbreviation, effective date). Use for \"Which request types does the CCPA define in Osano\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"country":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"ISO 3166-1 alpha-2 country code, for example 'US'.","title":"Country"},"privacy_law_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Privacy law name filter (case-insensitive).","title":"Privacy Law Name"},"request_type":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Request type filter (case-insensitive).","title":"Request Type"},"category":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Request type category filter (case-insensitive).","title":"Category"}},"title":"list_subject_rights_request_typesArguments","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}}}}