Optimizely Experimentation REST API v2

The core Optimizely REST API v2 shared by Web Experimentation and Feature Experimentation — projects, experiments, campaigns, audiences, pages, events, attributes, environments, features, groups, extensions, holdout exports, webhooks, subject access requests and results/reporting. 108 operations. Published by Optimizely in its own RFC 9727 API catalog and harvested verbatim 2026-08-13.

OpenAPI Specification

optimizely-web-experimentation-optimizely-api-openapi.json Raw ↑
{"components":{"parameters":{"attribute_id_segment":{"description":"ID of the attribute to segment results by. Requests containing attribute_id will return the results for all visitors that have attribute_value for the attribute represented by attribute_id. If present, the attribute_value parameter must also be present, and it cannot be sent with any other segmentation parameters, i.e. any parameters in [browser, device, source].\n","in":"query","name":"attribute_id","schema":{"format":"int64","type":"integer"}},"attribute_value_segment":{"description":"UTF-8 encoded value correlating to attribute_id. If present, the attribute_id parameter must also be present. This parameter also requires attribute_id to be set, and cannot be sent with any other segmentation parameters, i.e. any parameters in [browser, device, source].\n","in":"query","name":"attribute_value","schema":{"type":"string"}},"browser_segment":{"description":"Browser to segment results by. This parameter must not be sent with any other segmentation parameters, i.e. any parameters in [device, source, attribute_id, attribute_value].","in":"query","name":"browser","schema":{"enum":["firefox","chrome","internet_explorer","opera","safari"],"type":"string"}},"device_segment":{"description":"Device to segment results by. This parameter must not be sent with any other segmentation parameters, i.e. any parameters in [browser, source, attribute_id, attribute_value].","in":"query","name":"device","schema":{"enum":["desktop","ipad","iphone","mobile","tablet"],"type":"string"}},"page":{"description":"Optional pagination argument that specifies the page to return. If you have 140 objects and you choose to return 100 objects per page you will be able to access the last 40 objects on page 2. The default value is 1.\n","in":"query","name":"page","required":false,"schema":{"default":1,"type":"integer"}},"page_token":{"description":"Pagination page token. Implements prev, next, last, first","in":"query","name":"page_token","schema":{"type":"string"}},"page_window":{"description":"Number of previous and next page links to supply for the request (defaults to 1).","in":"query","name":"page_window","schema":{"type":"integer"}},"per_page":{"description":"Optional pagination argument that specifies the maximum number of objects to return per request","in":"query","name":"per_page","required":false,"schema":{"default":25,"maximum":100,"type":"integer"}},"project_id":{"description":"The project identifier","example":12345,"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}},"segment_conditions":{"description":"(BETA) A string representation of a JSON Segment Conditions Expression. This parameter can be either URL-escaped stringified JSON or Base64-encoded stringified JSON using URL-safe alphabet (preferred).\nSegment Conditions Expressions consist of Logical Expressions and Match Expressions.\nLogical Expressions are represented as an array of the format [<operator>, <expression>...], where the supported operators are \"and\", \"or\" and \"not\".\nMatch Expressions are represented as an object of the format {\"attribute_id\": <attribute_id>, \"attribute_value\": <value>[, \"match_type\": <match_type>]}, where supported values for match_type are \"exact\" match type will match only an exact string match between \"value\" string and the attribute value. \"substring\" match type will match if \"value\" is a substring of the attribute value. \"prefix\" match type will match if \"value\" is a string prefix of the attribute value. \"regex\" match type will match if \"value\" is a regular expression match for the attribute value. The default match_type is \"exact\".\n","in":"query","name":"segment_conditions","schema":{"type":"string"}},"source_segment":{"description":"Source to segment results by. This parameter must not be sent with any other segmentation parameters, i.e. any parameters in [browser, device, attribute_id, attribute_value].\nCampaign: Contains users that arrive on a URL containing a 'utm_campaign,' 'utm_source,' 'gclid,' or 'otm_source' query parameter. If the URL contains one of these parameters, the visitor will count as \"Campaign\" traffic even if they arrived through search.\nDirect:  Includes all users who do not have any external referrer in their URL.\nReferral: Includes all users that come from another URL that doesn't count as Campaign.\n","in":"query","name":"source","schema":{"enum":["campaign","direct","referral","search"],"type":"string"}},"webhookId":{"description":"The webhook identifier","example":123,"in":"path","name":"webhook_id","required":true,"schema":{"type":"integer"}},"webhook_id":{"description":"The webhook identifier","example":12345,"in":"path","name":"webhook_id","required":true,"schema":{"type":"integer"}}},"requestBodies":{"SubjectAccessRequestUpdate":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubjectAccessRequestUpdate"}}},"description":"A JSON string containing the Subject Access Request fields to be updated.","required":true},"WebhookRequest":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookRequestBody"}}},"required":true}},"schemas":{"Account":{"properties":{"id":{"description":"The unique identifier of the Account","format":"int64","readOnly":true,"type":"integer"},"name":{"description":"The name of the Account","readOnly":true,"type":"string"}},"type":"object"},"AccountFeature":{"properties":{"feature_id":{"type":"string"},"sources":{"items":{"$ref":"#/components/schemas/AccountFeatureSource"},"type":"array"}},"type":"object"},"AccountFeatureSource":{"properties":{"type":{"type":"string"},"value":{"type":"string"}},"type":"object"},"Action":{"properties":{"changes":{"description":"The list of changes to apply to the Page. If 'dependencies' is supplied in a Change within 'changes', each ID in 'dependencies' must also be in 'changes'.","items":{"$ref":"#/components/schemas/Change"},"type":"array"},"page_id":{"description":"The ID of the Page to apply changes to","format":"int64","type":"integer"},"share_link":{"description":"The share link for the provided Variation and Page combination","externalDocs":{"description":"share link","url":"https://help.optimizely.com/QA_Campaigns_and_Experiments/QA%3A_Share_draft_variations_or_experiences"},"format":"url","readOnly":true,"type":"string"}},"required":["page_id"],"type":"object"},"Attribute":{"properties":{"archived":{"default":false,"description":"Whether or not the Attribute has been archived","type":"boolean"},"condition_type":{"default":"custom_attribute","description":"Whether this Attribute is a custom dimension or custom attribute. If this is a custom dimension, it belongs to an Optimizely Classic experiment and is read-only.","enum":["custom_attribute","custom_dimension"],"readOnly":true,"type":"string"},"description":{"description":"A short description of the Attribute","type":"string"},"id":{"description":"The unique identifier for the Attribute","format":"int64","readOnly":true,"type":"integer"},"key":{"description":"Unique string identifier for this Attribute within the project","example":"subscriber_status","maxLength":64,"pattern":"^[a-zA-Z0-9_\\- .]+$","type":"string"},"last_modified":{"description":"The last time the Attribute was modified","format":"date-time","readOnly":true,"type":"string"},"name":{"description":"The name of the Attribute. For Full Stack projects, the name will be set to the value of the key.","example":"Subscriber Status","type":"string"},"project_id":{"description":"The ID of the project the Attribute belongs to","example":17738411154,"format":"int64","type":"integer"}},"required":["key","project_id"],"type":"object"},"AttributeUpdate":{"properties":{"archived":{"default":false,"description":"Whether or not the Attribute has been archived","type":"boolean"},"description":{"description":"A short description of the Attribute","type":"string"},"key":{"description":"Unique string identifier for this Attribute within the project","example":"subscriber_status","maxLength":64,"pattern":"^[a-zA-Z0-9_\\- .]+$","type":"string"},"name":{"description":"The name of the Attribute","example":"Subscriber Status","type":"string"}},"type":"object"},"Audience":{"properties":{"archived":{"default":false,"description":"Whether the Audience has been archived","type":"boolean"},"conditions":{"description":"A string defining the targeting rules for an Audience","example":"[\"and\", {\"type\": \"language\", \"value\": \"es\"}, {\"type\": \"location\", \"value\": \"US-CA-SANFRANCISCO\"}]","externalDocs":{"description":"targeting rules for an Audience","url":"https://developers.optimizely.com/x/rest/guides/conditions/"},"type":"string"},"created":{"description":"The time the Audience was initially created","format":"date-time","readOnly":true,"type":"string"},"description":{"description":"A short description of the Audience","example":"People that speak spanish and are in San Francisco","type":"string"},"experiment_count":{"description":"Number of experiments by audience_id","example":123,"format":"int64","readOnly":true,"type":"integer"},"for_journey":{"default":false,"description":"Whether the Audience has been part of journey or not","type":"boolean"},"id":{"description":"The unique identifier for the Audience","example":5000,"format":"int64","readOnly":true,"type":"integer"},"is_classic":{"description":"Whether or not Audience is a classic Audience. If true, the Audience is only compatible with classic Experiments. Otherwise, the Audience may be used in Optimizely X Campaigns.","type":"boolean"},"last_modified":{"description":"The last time the Audience was modified","format":"date-time","readOnly":true,"type":"string"},"name":{"description":"The name of the Audience","example":"Spanish speaking San Franciscans","type":"string"},"project_id":{"description":"The ID of the Project the Audience was created in","example":1000,"format":"int64","type":"integer"},"segmentation":{"default":false,"description":"True if the Audience is available for segmentation on the results page (Audiences can only be used for segmentation in Optimizely Classic). Set to False if you intend to use this Audience only in Optimizely X. Note that a maximum of 10 Audiences can have segmentation set to True in any given Optimizely Classic project.","externalDocs":{"description":"segmentation","url":"https://help.optimizely.com/Analyze_Results/The_Results_page#segmenting"},"type":"boolean"}},"required":["project_id"],"type":"object"},"AudienceUpdate":{"properties":{"archived":{"description":"True if the Audience has been archived","type":"boolean"},"conditions":{"description":"A string defining the targeting rules for an Audience","type":"string"},"description":{"description":"A short description of the Audience","type":"string"},"for_journey":{"default":false,"description":"Whether the Audience has been part of journey or not","type":"boolean"},"name":{"description":"The name of the Audience","example":"Spanish speaking San Franciscans","type":"string"},"segmentation":{"description":"True if the Audience is available for segmentation on the results page (Enterprise plans only)","type":"boolean"}},"type":"object"},"BucketingInformation":{"properties":{"account_id":{"description":"ID of the Account","example":1000,"format":"int64","type":"integer"},"bucketing_history":{"description":"Array of bucketing information items","items":{"$ref":"#/components/schemas/BucketingInformationItem"},"type":"array"},"visitor_id":{"description":"The unique identifier of the visitor","example":"fa74a14b-1f3a-463d-aa98-2f7124ee6fc3","format":"uuid","readOnly":true,"type":"string"}},"type":"object"},"BucketingInformationItem":{"properties":{"campaign_id":{"description":"The unique identifier of the Campaign","example":2056053765,"format":"int64","type":"integer"},"experiment_id":{"description":"The unique identifier of the Experiment","example":9387397797,"format":"int64","type":"integer"},"is_holdback":{"description":"Is the visitor bucketed into a variation or a holdback","type":"boolean"},"timestamp":{"description":"The timestamp of the bucketing decision on the client side","example":1545871675000,"format":"int64","type":"integer"},"variation_id":{"description":"The unique identifier of the Variation","example":5042153527,"format":"int64","type":"integer"}},"type":"object"},"CSSAttribute":{"properties":{"background-color":{"type":"string"},"background-image":{"type":"string"},"border-color":{"type":"string"},"border-style":{"type":"string"},"border-width":{"type":"string"},"color":{"type":"string"},"font-family":{"type":"string"},"font-size":{"type":"string"},"font-weight":{"type":"string"},"height":{"type":"string"},"position":{"type":"string"},"width":{"type":"string"}},"type":"object"},"Campaign":{"properties":{"archived":{"default":false,"description":"Whether the Campaign has been archived","type":"boolean"},"changes":{"description":"A list of changes to apply to the Campaign.  This corresponds to the Campaign's Shared Code in the application.  Only supports 'custom_css' or 'custom_code' type changes.","items":{"$ref":"#/components/schemas/SharedCodeChange"},"type":"array"},"created":{"description":"The time the Campaign was initially created","format":"date-time","readOnly":true,"type":"string"},"custom_field_values":{"additionalProperties":true,"description":"Map of custom field `api_name` to value for this Campaign. Keys correspond to the `api_name` of a custom field definition for the Project, and values are typed according to that definition's `field_type`. Returns an empty object when no values are set.","type":"object"},"description":{"description":"The description or goal for a Campaign","example":"Tailor the landing page hero element for specific audiences","type":"string"},"earliest":{"description":"The first time the Campaign was activated","format":"date-time","readOnly":true,"type":"string"},"experiment_priorities":{"description":"A list of lists of Experiment IDs that indicate the relative priority of how to show those Experiments in the context of the Campaign. Each list inside of the list represents a group of Experiments of equal priority where groups that appear earlier in the list are of higher priority to be shown.","items":{"items":{"format":"int64","type":"integer"},"type":"array"},"type":"array"},"for_journey":{"default":false,"description":"Whether the Campaign has been part of journey or not","type":"boolean"},"holdback":{"description":"Percentage of visitors to exclude from personalization, measured in basis points. 100 basis points = 1% traffic. For example, a value of 500 would mean that 95% of visitors will see a personalized experience and 5% will see the holdback.","example":500,"maximum":10000,"minimum":0,"type":"integer"},"id":{"description":"The unique identifier for the Campaign","example":2000,"format":"int64","readOnly":true,"type":"integer"},"journey_id":{"description":"The journey this campaign is associated with, or null if not set","type":"string"},"last_modified":{"description":"The last time the Campaign was modified","format":"date-time","readOnly":true,"type":"string"},"latest":{"description":"The last time the Campaign was paused (not present if the Campaign still running)","format":"date-time","readOnly":true,"type":"string"},"metrics":{"description":"An ordered list of metrics to track for the Campaign","items":{"$ref":"#/components/schemas/Metric"},"type":"array"},"name":{"description":"The name of the Campaign","example":"Landing Page Optimization","type":"string"},"page_ids":{"description":"A list of Page IDs used in the Campaign","items":{"format":"int64","type":"integer"},"type":"array"},"project_id":{"description":"The Project ID the Campaign is in","example":1000,"format":"int64","type":"integer"},"status":{"description":"Current state of the Campaign. not_started means the Campaign has never been published to the world. running means the Campaign is currently live to the world. paused means the Campaign has been published, but is currently not running. archived means the Campaign is paused and not visible in the web UI.","enum":["not_started","running","paused","archived"],"readOnly":true,"type":"string"},"type":{"default":"personalization","description":"Indicates the type of this campaign. Campaigns created or fetched via the API should currently all have a type of `personalization`, but if you get a campaign_id for an experiment and look it up, you may get an `other` value.","enum":["personalization","other"],"type":"string"},"url_targeting":{"$ref":"#/components/schemas/URLTargeting"}},"required":["project_id"],"type":"object"},"CampaignMetricResults":{"description":"Results specific to an Event","properties":{"aggregator":{"description":"The aggregation function for the numerator of the metric. 'unique' measures the number of unique visitors/sessions that include the specified Event. 'count' measures the total number of occurrences of Event for the scope (visitor/session). 'sum' is the sum of the 'field' value","enum":["unique","count","sum","bounce","exit","ratio"],"type":"string"},"event_id":{"description":"The ID for the Event to select data from. Omitted for global metrics that are not relative to a specific Event, i.e. \"overall revenue\"","format":"int64","nullable":true,"type":"integer"},"event_properties":{"$ref":"#/components/schemas/MetricEventProperties","description":"The conditions used to filter the metric on specific event property values."},"field":{"description":"The field to aggregate for the numerator of the metric. Required when 'aggregator' = 'sum', otherwise omitted","enum":["revenue","value"],"type":"string"},"metrics":{"description":"A list of all metrics that will be used in the calculation of a ratio metric.","items":{"$ref":"#/components/schemas/CompoundSubMetric"},"type":"array"},"name":{"description":"The name of the Metric","type":"string"},"results":{"additionalProperties":{"$ref":"#/components/schemas/VariantResults"},"description":"A map of results for the variants affected by the Campaign. Variants may represent aggregated results scoped to the Campaign and/or individual Experiment results scoped to just that Experiment. The special variant 'baseline' represents visitors that have been held back from any change in experience across all Experiments in the Campaign. The special variant 'campaign' represents the aggregated effect of all Experiments included in the Campaign.","type":"object","x-map-key":{"description":"The name of the group or ID of the Experiment","example":"campaign","type":"string"}},"scope":{"description":"Specifies how Events should be grouped together. Can also be thought of as the denonimator of the metric. 'session' divides by the number of sessions. \"Influenced sessions\", or sessions that do not contain a decision Event but carry a decision from a previous session are not included in counts for numerator or denominator. 'visitor' divides by the number of visitors. 'event' divides by the total occurrences (impressions) of the specified Event","enum":["session","visitor","event"],"type":"string"},"time_window":{"description":"The maximum amount of time a numerator event can differ from a denominator event in order to be included in a ratio metric. This can be an integer, or an integer followed by a letter denoting the unit of time (d = days, h = hours, m = minutes). If no unit of time is supplied, hours is assumed. If no value is supplied, a time window of 48 hours is assumed.","type":"string"},"winning_direction":{"description":"The winning direction of this metric","enum":["increasing","decreasing"],"type":"string"}},"type":"object"},"CampaignResults":{"properties":{"campaign_id":{"description":"The unique identifier for the Campaign","format":"int64","type":"integer"},"confidence_threshold":{"description":"The significance level at which you would like to declare winning and losing variations. A lower number minimizes the time needed to declare a winning or losing variation, but increases the risk that your results aren't true winners and losers.","format":"double","type":"number"},"end_time":{"description":"End of the time interval (exclusive) used to calculate the results. The time is formatted in ISO 8601.","format":"date-time","type":"string"},"is_stale":{"description":"When true, indicates the results were delivered from a cache that is out of date.","type":"boolean"},"metrics":{"description":"The breakdown of Campaign results by metric. CampaignMetricResults object ordering in the array is consistent with the order that metrics are attached to the Experiment in the Optimizely UI and REST API (i.e. index 0 is the primary metric, indices 1-4 are secondary metrics, indices 5+ are monitoring metrics). See here for an explantion of the impact of metric ordering on results calculations.","externalDocs":{"description":"See here","url":"https://help.optimizely.com/Ideate_and_Hypothesize/Primary_and_secondary_metrics_and_monitoring_metrics"},"items":{"$ref":"#/components/schemas/CampaignMetricResults"},"type":"array"},"start_time":{"description":"Start of the time interval (inclusive) used to calculate the results. The time is formatted in ISO 8601.","format":"date-time","type":"string"}},"type":"object"},"CampaignUpdate":{"properties":{"changes":{"description":"A list of changes to apply to the Campaign","items":{"$ref":"#/components/schemas/SharedCodeChange"},"type":"array"},"description":{"description":"The description or goal for a Campaign","example":"Tailor the landing page hero element for specific audiences","type":"string"},"experiment_priorities":{"description":"A list of lists of Experiment IDs that indicate the relative priority of how to show those Experiments in the context of the Campaign. Each list inside of the list represents a group of Experiments of equal priority where groups that appear earlier in the list are of higher priority to be shown.","items":{"items":{"format":"int64","type":"integer"},"type":"array"},"type":"array"},"for_journey":{"default":false,"description":"Whether the Campaign has been part of journey or not","type":"boolean"},"holdback":{"description":"Percentage of visitors to exclude from personalization, measured in basis points. 100 basis points = 1% traffic. For example, a value of 500 would mean that 95% of visitors will see a personalized experience and 5% will see the holdback.","example":500,"maximum":10000,"minimum":0,"type":"integer"},"journey_id":{"description":"The journey this campaign is associated with, or null if not set","type":"string"},"metrics":{"description":"An ordered list of metrics to track for the Campaign","items":{"$ref":"#/components/schemas/Metric"},"type":"array"},"name":{"description":"The name of the Campaign","example":"Landing Page Optimization","type":"string"},"page_ids":{"description":"A list of Page IDs used in the Campaign.  Only `url_targeting` or `page_ids` can be used when updating a Campaign, but not both.","items":{"format":"int64","type":"integer"},"type":"array"},"url_targeting":{"$ref":"#/components/schemas/URLTargeting"}},"type":"object"},"Change":{"properties":{"allow_additional_redirect":{"description":"Whether or not to allow additional redirects after redirecting to destination. Required for changes of type 'redirect'","type":"boolean"},"async":{"description":"Indicates whether or not to execute the change asyncronously. If true, src will be returned in the response. Otherwise, it will be not included.","type":"boolean"},"attributes":{"$ref":"#/components/schemas/ChangeAttribute"},"config":{"description":"Configuration properties for the extension","example":"{\"name\": \"Flash Sale Today!\", \"color\": \"blue\"}","type":"object"},"css":{"$ref":"#/components/schemas/CSSAttribute"},"dependencies":{"description":"A list of dependent change IDs that must happen before this change","example":["ad1f6acb-78f2-4653-b955-913abd777e16","ad20a6dd-2083-4964-8ed2-f0dc7baef687"],"items":{"format":"uuid","type":"string"},"type":"array"},"destination":{"description":"URL to redirect to. Required for changes of type 'redirect'. `destination` and `destination_function` cannot be used at the same time","example":"https://app.optimizely.com/","type":"string"},"destination_function":{"description":"A function string to redirect to. Required for changes of type 'redirect'. `destination` and `destination_function` cannot be used at the same time","example":"https://app.optimizely.com/","type":"string"},"extension_id":{"description":"ID of the extension to insert. Required for changes of type 'extension'","readOnly":true,"type":"string"},"id":{"description":"The ID of the change","format":"uuid","readOnly":true,"type":"string"},"name":{"description":"Name of the change","example":"Setting button text","type":"string"},"operator":{"description":"Where to instert HTML or image for types 'insert_html' and 'insert_image' with respect to the element(s) matched by 'selector'","example":"after","type":"string"},"preserve_parameters":{"description":"Whether or not to preserve parameters from original request when redirecting to new destination URL. Required for changes of type 'redirect'. For redirects using `destination_function`, `preserve_parameters` must be false.","type":"boolean"},"rearrange":{"description":"A directive to place the DOM element(s) matched by 'selector' to the position of the element matched by 'insertSelector', with the relation specified by 'operator'. The supplied example moves element matched by 'selector' above the element of class .greyBox","example":"{\"insertSelector\": \".greyBox\", \"operator\": \"before\"}","type":"object"},"selector":{"description":"CSS selector to determine where changes are applied. Required for changes of type 'attribute', 'insert_html', and 'insert_image'","example":"a[href*=\"optimizely\"]","type":"string"},"src":{"description":"The path to the change payload on the CDN. Only present if 'async' is True.","readOnly":true,"type":"string"},"type":{"description":"The type of this change.\n- Changes of type 'attribute' have required fields 'selector' and 'attributes'\n- Changes of type 'custom_code' have required field 'value'\n- Changes of type 'custom_css' have required field 'value'\n- Changes of type 'extension' have required field 'extension_id'\n- Changes of type 'insert_html' have required field 'selector'\n- Changes of type 'insert_image' have required field 'selector'\n- Changes of type 'redirect' have required fields 'destination', 'preserve_parameters', and 'allow_additional_redirect'\n","enum":["attribute","custom_code","custom_css","extension","insert_html","insert_image","redirect"],"type":"string"},"value":{"description":"The value for the change can be custom Javascript or CSS as a string. Required for changes of type 'custom_css' and 'custom_code'","example":"window.someGlobalFunction();","type":"string"}},"required":["type"],"type":"object"},"ChangeAttribute":{"properties":{"class":{"description":"Name of the class to set the element(s) matched by a selector to","example":"intro","type":"string"},"hide":{"description":"Whether or not to hide the element(s) matched by a selector","type":"boolean"},"href":{"description":"Value of href attribute to add to element(s) matched by a selector","example":"example.com","type":"string"},"html":{"description":"Value of HTML attribute to add to element(s) matched by a selector","example":"New Title","type":"string"},"remove":{"description":"Whether or not to remove the element(s) matched by a selector","type":"boolean"},"src":{"description":"Value of src attribute to add to element(s) matched by a selector","example":"song.mp3","type":"string"},"style":{"description":"Value of style attribute to add to element(s) matched by a selector","example":"background-color:blue;","type":"string"},"text":{"description":"Value of text attribute to add to the element(s) matched by a selector","example":"Some nice message","type":"string"}},"type":"object"},"ChangeDetail":{"properties":{"after":{"description":"Value of the property after modification."},"before":{"description":"Value of the property before modification."},"description":{"description":"Human readable description of the change.","type":"string"},"property":{"description":"The name of the property modified.","type":"string"}},"type":"object"},"ChangeHistoryChange":{"properties":{"change_type":{"description":"Action performed on the entity.","enum":["archive","create","update","delete","publish"],"type":"string"},"changes":{"description":"List of change details.","items":{"$ref":"#/components/schemas/ChangeDetail"},"type":"array"},"created":{"description":"Created time of the current revision. Format is ISO 8601.","format":"date-time","type":"string"},"entity":{"$ref":"#/components/schemas/Entity"},"id":{"description":"ID of the change.","format":"int64","type":"integer"},"project_id":{"description":"ID of the project related to the entity.","format":"int64","type":"integer"},"revisions":{"$ref":"#/components/schemas/ChangeRevision"},"source":{"description":"Origin of the current revision.","enum":["ui","api"],"type":"string"},"summary":{"description":"Short human readable description of the change.","type":"string"},"user":{"$ref":"#/components/schemas/User"}},"required":["project_id"],"type":"object"},"ChangeRevision":{"properties":{"current":{"$ref":"#/components/schemas/Revision"},"previous":{"$ref":"#/components/schemas/Revision"}},"type":"object"},"Choices":{"properties":{"label":{"description":"label of the choice","type":"string"},"value":{"description":"value of the choice","type":"string"}},"type":"object"},"CollaboratorEntry":{"properties":{"id":{"description":"The unique identifier of the user","example":"fa74a14b-1f3a-463d-aa98-2f7124ee6fc3","format":"uuid","readOnly":true,"type":"string"},"profile":{"$ref":"#/components/schemas/UserProfile"},"project_roles":{"items":{"$ref":"#/components/schemas/ProjectRole"},"type":"array"}},"type":"object"},"CompoundSubMetric":{"description":"A metric that is used only as part of the calculation for a ratio metric.","properties":{"aggregator":{"default":"unique","description":"The aggregation function for the numerator of the metric. 'unique' measures the number of unique visitors/sessions that include the specified Event. 'count' measures the total number of occurrences of Event for the scope (visitor/session). 'sum' is the sum of the 'field' value.","enum":["unique","count","sum"],"type":"string"},"event_id":{"description":"The ID for the Event to select data from.","format":"int64","nullable":true,"type":"integer"},"event_type":{"description":"The type of this Event.","enum":["custom","click","pageview"],"type":"string"},"field":{"description":"The field to aggregate for the numerator of the metric. Required when 'aggregator' = 'sum', otherwise omitted.","enum":["revenue","value"],"nullable":true,"type":"string"},"scope":{"default":"visitor","description":"Specifies how Events should be grouped. Can also be thought of as the denominator of the metric. 'session' divides by the number of sessions. \"Influenced sessions\", or sessions that do not contain a decision Event but carry a decision from a previous session are not included in counts for numerator or denominator. 'visitor' divides by the number of visitors. 'event' divides by the total occurrences (impressions) of the specified Event.","enum":["session","visitor","event"],"type":"string"}},"type":"object"},"CredentialsItem":{"description":"Credentials item containing information on access key and secrets","properties":{"accessKeyId":{"description":"AWS access key","example":"ASIA5QMPA3WZQJNOABC","type":"string"},"expiration":{"description":"expiration time of the token in epoch time","example":1591026407394,"format":"int64","type":"integer"},"secretAccessKey":{"description":"AWS secret access key","example":"1234567qzerHJDWdIDGixoTYfqC1dZp","type":"string"},"sessionToken":{"description":"AWS session token","example":"FwoGZXIvYXdzEOT//////////wEaDH6J","type":"string"}},"type":"object"},"CurrentAccount":{"properties":{"features":{"additionalProperties":{"$ref":"#/components/schemas/AccountFeature"},"description":"The available features for the Account","readOnly":true,"type":"object"},"id":{"description":"The unique identifier of the Account","format":"int64","readOnly":true,"type":"integer"}},"type":"object"},"CustomEvent":{"properties":{"archived":{"description":"Whether or not to archive this Event","type":"boolean"},"category":{"$ref":"#/components/schemas/EventCategories"},"created":{"description":"Creation date for this Event","format":"date-time","readOnly":true,"type":"string"},"description":{"description":"A des

# --- truncated at 32 KB (286 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/optimizely/refs/heads/main/openapi/_original/optimizely-web-experimentation-optimizely-api-openapi.json