{"openapi":"3.1.0","info":{"title":"Optimizely Project Setup (BYOK) API","version":"0.1.0","description":"Optimizely Project Setup (BYOK) lets an AI assistant read your own Optimizely Project Setup data through the Optimizely Project Setup API with a key you supply (personal access token). Read-only: 8 tools (list_pages, list_attributes, list_exclusion_groups, get_exclusion_group, list_extensions, list_scheduled_reports, get_experiment_results, get_impressions_usage_summary). The BYOK key travels...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-optimizely-config.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-optimizely-config/docs"},"termsOfService":"https://connectorbay.com/byok-optimizely-config/terms"},"servers":[{"url":"https://byok-optimizely-config.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-optimizely-config/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_pages":{"post":{"operationId":"list_pages","summary":"List the pages of a project (URL sets that experiments target) with key, name, type, category, activation type and how m","description":"List the pages of a project (URL sets that experiments target) with key, name, type, category, activation type and how many experiments use each. Use for \"Which pages are defined in my Optimizely project\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Project id (from the Optimizely connector list_projects).","maximum":1000000000000000,"minimum":1,"title":"Project Id","type":"integer"},"include_single_use":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include single-use pages created for campaign URL targeting.","title":"Include Single Use"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Results per page (1 to 100, default 25).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["project_id"],"title":"list_pagesArguments","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_attributes":{"post":{"operationId":"list_attributes","summary":"List the custom attributes and dimensions of a project (visitor properties usable for audiences) with key, name, type an","description":"List the custom attributes and dimensions of a project (visitor properties usable for audiences) with key, name, type and archived flag. Use for \"Which visitor attributes are defined in Optimizely\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Project id (from the Optimizely connector list_projects).","maximum":1000000000000000,"minimum":1,"title":"Project Id","type":"integer"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Results per page (1 to 100, default 25).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["project_id"],"title":"list_attributesArguments","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_exclusion_groups":{"post":{"operationId":"list_exclusion_groups","summary":"List the exclusion groups of a project (sets of experiments that never overlap) with their member experiments and weight","description":"List the exclusion groups of a project (sets of experiments that never overlap) with their member experiments and weights. Use for \"Which Optimizely exclusion groups exist\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Project id (from the Optimizely connector list_projects).","maximum":1000000000000000,"minimum":1,"title":"Project Id","type":"integer"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Results per page (1 to 100, default 25).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["project_id"],"title":"list_exclusion_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/get_exclusion_group":{"post":{"operationId":"get_exclusion_group","summary":"Get one exclusion group with its member experiments or campaigns (id, kind, traffic weight). Use for \"Show Optimizely ex","description":"Get one exclusion group with its member experiments or campaigns (id, kind, traffic weight). Use for \"Show Optimizely exclusion group 6000\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"group_id":{"description":"Exclusion group id from list_exclusion_groups.","maximum":1000000000000000,"minimum":1,"title":"Group Id","type":"integer"}},"required":["group_id"],"title":"get_exclusion_groupArguments","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_extensions":{"post":{"operationId":"list_extensions","summary":"List the extensions (reusable code and settings widgets) of a project with name, description, enabled and archived flags","description":"List the extensions (reusable code and settings widgets) of a project with name, description, enabled and archived flags and use count. The implementation code is left out. Use for \"Which extensions does my Optimizely project have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Project id (from the Optimizely connector list_projects).","maximum":1000000000000000,"minimum":1,"title":"Project Id","type":"integer"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Results per page (1 to 100, default 25).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["project_id"],"title":"list_extensionsArguments","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_scheduled_reports":{"post":{"operationId":"list_scheduled_reports","summary":"List the scheduled results report jobs of the account with frequency, project and the experiments or campaigns covered. ","description":"List the scheduled results report jobs of the account with frequency, project and the experiments or campaigns covered. Delivery channels are left out. Use for \"Which scheduled Optimizely results reports are set up\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_scheduled_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}},"/v1/tools/get_experiment_results":{"post":{"operationId":"get_experiment_results","summary":"Get aggregated results of one experiment: reach per variation, each metric with per-variation statistics, winner and los","description":"Get aggregated results of one experiment: reach per variation, each metric with per-variation statistics, winner and loser if concluded, and the stats settings. No visitor-level data. Optionally segment by browser, device or source (one segment at a time). Use for \"What are the results of Optimizely experiment 777\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"experiment_id":{"description":"Experiment id from the Optimizely connector list_experiments.","maximum":1000000000000000,"minimum":1,"title":"Experiment Id","type":"integer"},"start_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the result window as an ISO 8601 time (default: experiment start).","title":"Start Time"},"end_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the result window as an ISO 8601 time (default: now).","title":"End Time"},"baseline_variation_id":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Variation id to compare the others against (default: first variation).","title":"Baseline Variation Id"},"browser":{"anyOf":[{"enum":["firefox","chrome","internet_explorer","opera","safari"],"type":"string"},{"type":"null"}],"default":null,"description":"Segment results by browser.","title":"Browser"},"device":{"anyOf":[{"enum":["desktop","ipad","iphone","mobile","tablet"],"type":"string"},{"type":"null"}],"default":null,"description":"Segment results by device.","title":"Device"},"source":{"anyOf":[{"enum":["campaign","direct","referral","search"],"type":"string"},{"type":"null"}],"default":null,"description":"Segment results by traffic source.","title":"Source"}},"required":["experiment_id"],"title":"get_experiment_resultsArguments","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_impressions_usage_summary":{"post":{"operationId":"get_impressions_usage_summary","summary":"Get the account's impressions usage summary for the current billing window: allowance, usage, usage percentage and dates","description":"Get the account's impressions usage summary for the current billing window: allowance, usage, usage percentage and dates. Use for \"How much of my Optimizely impressions allowance have I used\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_id":{"description":"Optimizely account id (shown as account_id on projects).","maximum":1000000000000000,"minimum":1,"title":"Account Id","type":"integer"}},"required":["account_id"],"title":"get_impressions_usage_summaryArguments","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}}}}