---
title: Update a cross-project Holdout
slug: feature-experimentation/api/update-a-cross-project-holdout
docTags: 
createdAt: 2026-10-13T18:16:15.508Z
---

{
  "id": "X4hgHo9IpGOApzOF8Frr6",
  "type": "api-oas-v2",
  "data": {
    "method": "PATCH",
    "url": "https://api.optimizely.com/flags/v1//holdouts/{holdout_id}",
    "servers": [
      {
        "url": "https://api.optimizely.com/flags/v1//holdouts/{holdout_id}"
      }
    ],
    "name": "Update a cross-project Holdout",
    "description": "<p>Update a holdout experiment using JSON Patch (RFC 6902) operations.\nSupports status transitions, configuration updates, and target changes.</p>\n<p><strong>Authorization</strong>:</p>\n<ul>\n<li>Requires <code>HOLDOUTS_ACCESS</code> permission (feature-level gate)</li>\n<li>Requires <code>FLAGS_ADMIN</code> permission on ALL affected projects (both old and new targets)</li>\n<li>Gated behind <code>holdouts-m2</code> feature flag</li>\n</ul>\n<p><strong>Optimistic Locking</strong>:</p>\n<ul>\n<li>Include <code>If-Match</code> header with current revision ETag to prevent concurrent updates</li>\n<li>Server returns 409 Conflict if holdout was modified since client's last read</li>\n</ul>\n<p><strong>Supported Operations</strong>:</p>\n<ul>\n<li>Update name, description, traffic allocation (any status)</li>\n<li>Transition status: draft → running → concluded</li>\n<li>Update scope (draft only)</li>\n<li>Update project_ids for global holdouts (draft only)</li>\n<li>Update rule_ids for local holdouts (draft only)</li>\n<li>Update metrics</li>\n<li>Update audience_conditions</li>\n</ul>\n<p><strong>Validation Rules</strong>:</p>\n<ul>\n<li>Scope changes only allowed in draft status</li>\n<li>Target changes (project_ids/rule_ids) only allowed in draft status</li>\n<li>Cannot update project_ids on local holdouts (400 error)</li>\n<li>Cannot update rule_ids on global holdouts (400 error)</li>\n<li>Status transitions must be valid (draft→running, running→concluded)</li>\n<li>Traffic allocation must be 0-10000 basis points</li>\n<li>Cannot set audience_conditions on a holdout whose targeted rules\nspan more than one project (400 error)</li>\n</ul>",
    "contentType": "application/json-patch+json",
    "request": {
      "pathParameters": [
        {
          "kind": "required",
          "name": "holdout_id",
          "type": "integer",
          "description": ""
        }
      ],
      "headerParameters": [
        {
          "name": "accept",
          "type": "string",
          "kind": "optional",
          "description": "Generated from available response content types",
          "enum": [
            "application/json",
            "application/problem+json"
          ],
          "default": "application/json"
        },
        {
          "kind": "optional",
          "name": "If-Match",
          "type": "string",
          "example": "\"revision-5\"",
          "description": "<p>ETag value from previous GET request, used for optimistic locking.\nFormat: \"revision-{N}\" where N is the holdout's revision number.\nIf provided and does not match current revision, returns 409 Conflict.</p>",
          "pattern": "^\"revision-[0-9]+\"$"
        }
      ],
      "queryParameters": [],
      "bodyDataParameters": [],
      "formDataParameters": [],
      "oAuthParameters": [
        {
          "id": "apiKey",
          "name": "apiKey",
          "kind": "optional",
          "type": "http",
          "scheme": "bearer"
        },
        {
          "id": "OAuth2",
          "name": "OAuth2",
          "kind": "optional",
          "type": "oauth2",
          "description": "Write applications that authenticate with the REST API via OAuth 2.0.",
          "oauth2Flows": {
            "authorizationCode": {
              "authorizationUrl": "https://app.optimizely.com/oauth2/authorize",
              "tokenUrl": "https://app.optimizely.com/oauth2/token",
              "scopes": {
                "all": "Grants all access"
              }
            }
          },
          "requiredScopes": [
            "read",
            "write"
          ]
        }
      ],
      "cookieParameters": []
    },
    "responses": [
      {
        "statusCode": "200",
        "description": "Holdout successfully updated",
        "jsonExample": "",
        "isExpanded": true,
        "headers": [
          {
            "kind": "optional",
            "name": "ETag",
            "type": "string",
            "example": "\"revision-6\"",
            "description": "Current revision ETag for optimistic locking"
          }
        ],
        "schema": [
          {
            "kind": "optional",
            "type": "object",
            "example": "{\"archived\":false,\"audience_conditions\":[\"or\",{\"audience_id\":5340810295}],\"created_by_user_email\":\"user@company.com\",\"created_time\":\"2023-12-15T10:00:00.000Z\",\"description\":\"Holdout group to measure the overall impact of our growth experiments throughout the year\",\"environment_key\":\"production\",\"holdout_results_api_token\":\"SampleToken.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9\",\"id\":12345,\"key\":\"annual_growth_holdout\",\"metrics\":[{\"aggregator\":\"unique\",\"display_title\":\"Conversion Rate\",\"scope\":\"visitor\",\"winning_direction\":\"increasing\"}],\"name\":\"Annual Growth Control Group\",\"project_id\":98765,\"revision\":3,\"scope\":\"global\",\"start_time\":\"2024-01-01T00:00:00.000Z\",\"status\":\"running\",\"traffic_allocation\":1000,\"updated_time\":\"2024-01-01T10:00:00.000Z\",\"urn\":\"holdout.flag.optimizely.com::12345\"}",
            "description": "<p>Represents a holdout experiment that reserves a portion of traffic to measure the impact of feature flags and experiments.</p>\n<p>Holdouts help establish control groups by excluding a percentage of users from seeing any experiments, allowing you to measure the overall impact of your experimentation program against a baseline.</p>",
            "customType": "Holdout",
            "schema": [
              {
                "name": "archived",
                "kind": "optional",
                "type": "boolean",
                "description": "Whether the holdout is archived. Archived holdouts are hidden from normal views\nbut retain their historical data and configuration.\n",
                "example": false
              },
              {
                "name": "audience_conditions",
                "kind": "optional",
                "type": "array",
                "description": "<p>Defines which audiences this holdout applies to. If omitted, the holdout applies to all users.\nUses logical operators like 'and', 'or', 'not' to combine multiple audience conditions.</p>",
                "example": "[\"[\"or\",{\"audience_id\":5340810295},{\"audience_id\":1234567890}]\"]",
                "itemType": "object",
                "customType": "object[]",
                "itemExample": "[\"or\",{\"audience_id\":5340810295},{\"audience_id\":1234567890}]",
                "itemDefault": ""
              },
              {
                "name": "audience_ids",
                "kind": "optional",
                "type": "array",
                "deprecated": true,
                "description": "Warning: Deprecated\n<p>DEPRECATED: Use audience_conditions instead. List of audience IDs that this holdout applies to.\nThis field is maintained for backward compatibility.</p>",
                "example": "[5340810295,1234567890]",
                "itemType": "integer",
                "customType": "integer[]",
                "itemExample": "",
                "itemDefault": ""
              },
              {
                "name": "created_by_user_email",
                "kind": "optional",
                "type": "string",
                "readOnly": true,
                "description": "Email address of the user who created the holdout.",
                "example": "user@company.com"
              },
              {
                "name": "created_time",
                "kind": "optional",
                "type": "string<date-time>",
                "readOnly": true,
                "nullable": true,
                "description": "Timestamp when the holdout was originally created.",
                "example": "2023-12-15T10:00:00.000Z",
                "format": "date-time"
              },
              {
                "name": "description",
                "kind": "optional",
                "type": "string",
                "description": "Optional detailed description explaining the purpose and context of this holdout.\nHelps team members understand what this holdout is measuring.\n",
                "example": "Holdout group to measure the overall impact of our growth experiments throughout the year",
                "maxLength": 1000
              },
              {
                "name": "end_time",
                "kind": "optional",
                "type": "string<date-time>",
                "readOnly": true,
                "nullable": true,
                "description": "Timestamp when the holdout finished or will finish.\nNull for holdouts that are still running or have no defined end time.\n",
                "example": "2024-12-31T23:59:59.000Z",
                "format": "date-time"
              },
              {
                "name": "environment_key",
                "kind": "optional",
                "type": "string",
                "description": "<p>The environment where this holdout is active (e.g., 'production', 'staging').\nThe holdout only affects traffic in this specific environment.</p>",
                "example": "production"
              },
              {
                "name": "environment_name",
                "kind": "optional",
                "type": "string",
                "readOnly": true,
                "description": "<p>The human-readable name of the environment where this holdout is active.</p>",
                "example": "Production"
              },
              {
                "name": "exclude_targeted_deliveries",
                "kind": "optional",
                "type": "boolean",
                "description": "<p>When true, Targeted Delivery rules are excluded from this holdout, so\nholdout users are not withheld from them. Targeted Deliveries represent\npermanent ship decisions rather than active experiments, so there is\nnothing to measure by withholding them.\nApplies to global holdouts only; ignored for local holdouts.\nCan only be changed while the holdout is in draft status.\nDefaults to false.</p>",
                "example": false,
                "default": false
              },
              {
                "name": "holdout_results_api_token",
                "kind": "optional",
                "type": "string",
                "readOnly": true,
                "description": "<p>API token for accessing holdout results and analytics data.\nThis token is dynamically generated for each API response and provides\nsecure access to holdout-specific results endpoints.</p>",
                "example": "SampleToken.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"
              },
              {
                "name": "id",
                "kind": "required",
                "type": "integer",
                "readOnly": true,
                "description": "<p>System-generated unique identifier for the holdout.</p>",
                "example": 12345
              },
              {
                "name": "key",
                "kind": "required",
                "type": "string",
                "description": "<p>Unique user-defined identifier for the holdout within the project.\nMust contain only alphanumeric characters, underscores, and hyphens.</p>",
                "example": "annual_growth_holdout",
                "maxLength": 64,
                "pattern": "^[a-zA-Z0-9_\\-]+$"
              },
              {
                "name": "metrics",
                "kind": "optional",
                "type": "array",
                "description": "List of metrics being tracked and analyzed for this holdout.\nThese metrics help measure the impact of experiments on the control group.\n",
                "modelRef": "#/components/schemas/Metric",
                "customType": "Metric[]",
                "schema": [
                  {
                    "name": "aggregator",
                    "kind": "required",
                    "type": "string<unique | count | sum | ratio>",
                    "description": "<p>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</p>",
                    "enum": [
                      "unique",
                      "count",
                      "sum",
                      "ratio"
                    ]
                  },
                  {
                    "name": "display_title",
                    "kind": "optional",
                    "type": "string",
                    "description": "<p>An optional title for the unique metric configuration. If not provided, the event name will be used.</p>"
                  },
                  {
                    "name": "display_unit",
                    "kind": "optional",
                    "type": "string",
                    "description": "An optional name for the unit of the unique metric configuration."
                  },
                  {
                    "name": "event_id",
                    "kind": "optional",
                    "type": "integer<int64>",
                    "description": "<p>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\"</p>",
                    "example": 32334454244,
                    "format": "int64"
                  },
                  {
                    "name": "event_properties",
                    "kind": "optional",
                    "type": "object",
                    "description": "",
                    "example": "",
                    "schema": [
                      {
                        "name": "filter",
                        "kind": "optional",
                        "type": "object",
                        "description": "",
                        "example": "",
                        "schema": [
                          {
                            "name": "combine_operator",
                            "kind": "optional",
                            "type": "string<or | and>",
                            "description": "",
                            "enum": [
                              "or",
                              "and"
                            ]
                          },
                          {
                            "name": "conditions",
                            "kind": "optional",
                            "type": "array",
                            "description": "",
                            "modelRef": "#/components/schemas/EventPropertyCondition",
                            "customType": "EventPropertyCondition[]",
                            "schema": [
                              {
                                "name": "name",
                                "kind": "required",
                                "type": "string",
                                "description": ""
                              },
                              {
                                "name": "operator",
                                "kind": "required",
                                "type": "string<equal_to | not_equal_to | greater_than | greater_than_or_equal_to | less_than | less_than_or_equal_to | contains | does_not_contain>",
                                "description": "",
                                "enum": [
                                  "equal_to",
                                  "not_equal_to",
                                  "greater_than",
                                  "greater_than_or_equal_to",
                                  "less_than",
                                  "less_than_or_equal_to",
                                  "contains",
                                  "does_not_contain"
                                ]
                              },
                              {
                                "name": "type",
                                "kind": "required",
                                "type": "string<string | number | boolean>",
                                "description": "",
                                "enum": [
                                  "string",
                                  "number",
                                  "boolean"
                                ]
                              },
                              {
                                "name": "value",
                                "kind": "required",
                                "type": "string",
                                "description": ""
                              }
                            ]
                          }
                        ]
                      }
                    ]
                  },
                  {
                    "name": "event_type",
                    "kind": "optional",
                    "type": "string",
                    "description": ""
                  },
                  {
                    "name": "field",
                    "kind": "optional",
                    "type": "string<revenue | value>",
                    "nullable": true,
                    "description": "<p>The field to aggregate for the numerator of the metric. Required when 'aggregator' = 'sum', otherwise omitted</p>",
                    "enum": [
                      "revenue",
                      "value"
                    ]
                  },
                  {
                    "name": "id",
                    "kind": "optional",
                    "type": "string",
                    "description": "A unique identifier for the metric configuration."
                  },
                  {
                    "name": "metrics",
                    "kind": "optional",
                    "type": "array",
                    "description": "",
                    "modelRef": "#/components/schemas/SubMetric",
                    "customType": "SubMetric[]",
                    "schema": [
                      {
                        "name": "aggregator",
                        "kind": "optional",
                        "type": "string",
                        "description": ""
                      },
                      {
                        "name": "display_title",
                        "kind": "optional",
                        "type": "string",
                        "nullable": true,
                        "description": ""
                      },
                      {
                        "name": "event_id",
                        "kind": "optional",
                        "type": "integer",
                        "description": ""
                      },
                      {
                        "name": "event_type",
                        "kind": "optional",
                        "type": "string",
                        "description": ""
                      },
                      {
                        "name": "field",
                        "kind": "optional",
                        "type": "string",
                        "nullable": true,
                        "description": ""
                      },
                      {
                        "name": "role",
                        "kind": "optional",
                        "type": "string<numerator | denominator>",
                        "description": "",
                        "enum": [
                          "numerator",
                          "denominator"
                        ]
                      },
                      {
                        "name": "scope",
                        "kind": "optional",
                        "type": "string",
                        "description": ""
                      }
                    ]
                  },
                  {
                    "name": "project_id",
                    "kind": "optional",
                    "type": "integer",
                    "description": "A unique identifier for the project associated with the metric."
                  },
                  {
                    "name": "scope",
                    "kind": "optional",
                    "type": "string<session | visitor | event>",
                    "description": "<p>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</p>",
                    "enum": [
                      "session",
                      "visitor",
                      "event"
                    ]
                  },
                  {
                    "name": "visibility",
                    "kind": "optional",
                    "type": "string<account | experiment | project>",
                    "description": "The visibility of the metric.",
                    "enum": [
                      "account",
                      "experiment",
                      "project"
                    ]
                  },
                  {
                    "name": "winning_direction",
                    "kind": "required",
                    "type": "string<increasing | decreasing>",
                    "description": "The winning direction of this metric",
                    "enum": [
                      "increasing",
                      "decreasing"
                    ]
                  }
                ]
              },
              {
                "name": "name",
                "kind": "required",
                "type": "string",
                "description": "<p>Human-readable name for the holdout displayed in the UI.</p>",
                "example": "Annual Growth Control Group",
                "maxLength": 255
              },
              {
                "name": "project_id",
                "kind": "optional",
                "type": "integer<int64>",
                "readOnly": true,
                "description": "The unique identifier of the project this holdout belongs to.",
                "example": 98765,
                "format": "int64"
              },
              {
                "name": "projects",
                "kind": "optional",
                "type": "array",
                "readOnly": true,
                "description": "<p>Project objects returned by cross-project GET endpoints.\nFor global-scope holdouts, lists target project IDs.\nEmpty array for local-scope holdouts.\nFrontend resolves project names via entity-management API.</p>",
                "example": "[{\"id\":123}]",
                "itemType": "object",
                "customType": "object[]",
                "schema": [
                  {
                    "name": "id",
                    "kind": "optional",
                    "type": "integer<int64>",
                    "description": "Project ID.",
                    "format": "int64"
                  }
                ]
              },
              {
                "name": "revision",
                "kind": "optional",
                "type": "integer",
                "readOnly": true,
                "description": "Revision number that increments with each change to the holdout.\nUsed for tracking modifications and ensuring data consistency.\n",
                "example": 3
              },
              {
                "name": "rules",
                "kind": "optional",
                "type": "array",
                "readOnly": true,
                "description": "<p>Enriched rule objects returned by cross-project GET endpoints.\nFor local-scope holdouts, lists target rules with metadata.\nEmpty array for global-scope holdouts.</p>",
                "example": "[{\"flag_key\":\"my_flag\",\"id\":456,\"key\":\"experiment_rule_a\",\"name\":\"Experiment Rule A\",\"project_id\":123}]",
                "itemType": "object",
                "customType": "object[]",
                "schema": [
                  {
                    "name": "flag_id",
                    "kind": "optional",
                    "type": "integer<int64>",
                    "description": "ID of the flag containing this rule.",
                    "format": "int64"
                  },
                  {
                    "name": "flag_key",
                    "kind": "optional",
                    "type": "string",
                    "description": "Key of the flag containing this rule."
                  },
                  {
                    "name": "flag_name",
                    "kind": "optional",
                    "type": "string",
                    "description": "Name of the flag containing this rule."
                  },
                  {
                    "name": "id",
                    "kind": "optional",
                    "type": "integer<int64>",
                    "description": "Rule ID.",
                    "format": "int64"
                  },
                  {
                    "name": "key",
                    "kind": "optional",
                    "type": "string",
                    "description": "Rule key."
                  },
                  {
                    "name": "name",
                    "kind": "optional",
                    "type": "string",
                    "description": "Rule name."
                  },
                  {
                    "name": "project_id",
                    "kind": "optional",
                    "type": "integer<int64>",
                    "description": "ID of the project this rule belongs to.",
                    "format": "int64"
                  }
                ]
              },
              {
                "name": "scope",
                "kind": "optional",
                "type": "string<global | local>",
                "description": "<p>Defines the scope of the holdout:</p>\n<ul>\n<li>'global': Affects all experiments across the entire project</li>\n<li>'local': Affects only specific experiments or flags</li>\n</ul>",
                "example": "global",
                "enum": [
                  "global",
                  "local"
                ]
              },
              {
                "name": "start_time",
                "kind": "optional",
                "type": "string<date-time>",
                "description": "Timestamp when the holdout became or will become active.\nWhen the holdout starts affecting traffic allocation.\n",
                "example": "2024-01-01T00:00:00.000Z",
                "format": "date-time"
              },
              {
                "name": "status",
                "kind": "optional",
                "type": "string<draft | running | concluded>",
                "description": "<p>Current operational status of the holdout:</p>\n<ul>\n<li>'draft': Holdout is configured but not yet active</li>\n<li>'running': Holdout is currently active and affecting traffic</li>\n<li>'concluded': Holdout has finished and is no longer active</li>\n</ul>",
                "example": "running",
                "enum": [
                  "draft",
                  "running",
                  "concluded"
                ]
              },
              {
                "name": "traffic_allocation",
                "kind": "optional",
                "type": "integer",
                "description": "<p>Percentage of traffic allocated to this holdout, expressed in basis points (1/100th of a percent).\nFor example: 100 = 1%, 1000 = 10%, 5000 = 50%. The remaining traffic sees experiments normally.</p>",
                "example": 1000,
                "minimum": 0,
                "maximum": 10000
              },
              {
                "name": "updated_time",
                "kind": "optional",
                "type": "string<date-time>",
                "readOnly": true,
                "description": "Timestamp when the holdout was last modified.",
                "example": "2024-01-01T10:00:00.000Z",
                "format": "date-time"
              },
              {
                "name": "url",
                "kind": "optional",
                "type": "string",
                "readOnly": true,
                "description": "<p>RESTful link to fetch this holdout's details.\nFor project-scoped endpoints: /projects/{project_id}/holdouts/{holdout_id}\nFor cross-project endpoints: /holdouts/{holdout_id}</p>",
                "example": "/holdouts/12345"
              },
              {
                "name": "urn",
                "kind": "optional",
                "type": "string",
                "readOnly": true,
                "description": "<p>Universal Resource Name (URN) for the holdout, used for global identification.</p>",
                "example": "holdout.flag.optimizely.com::12345"
              }
            ],
            "modelRef": "#/components/schemas/Holdout",
            "isExpanded": true
          }
        ]
      },
      {
        "statusCode": "400",
        "description": "Malformed requests and invalid parameter names and types",
        "jsonExample": "",
        "isExpanded": true
      },
      {
        "statusCode": "401",
        "description": "Invalid credentials",
        "jsonExample": "",
        "isExpanded": true
      },
      {
        "statusCode": "403",
        "description": "Do not have permission to perform the operation",
        "jsonExample": "",
        "isExpanded": true
      },
      {
        "statusCode": "404",
        "description": "Not found. No content",
        "jsonExample": "",
        "isExpanded": true
      },
      {
        "statusCode": "409",
        "description": "<p>Conflict - concurrent modification detected (optimistic lock failure)</p>",
        "jsonExample": "",
        "isExpanded": true
      }
    ],
    "hasXCodeSamples": false,
    "examples": {
      "languages": [
        {
          "id": "_HNAbGDEgeOBWlcXM8bUH",
          "language": "curl",
          "label": "cURL",
          "code": "curl --request PATCH \\\n     --url https://api.optimizely.com/flags/v1//holdouts/{holdout_id} \\\n     --header 'accept: application/json'"
        },
        {
          "id": "LdF54nsuwcZf5kA7VMe-A",
          "language": "javascript",
          "label": "javascript",
          "code": "var myHeaders = new Headers();\nmyHeaders.append(\"accept\", \"application/json\");\nmyHeaders.append(\"content-type\", \"application/json-patch+json\");\n\nvar requestOptions = {\n   method: 'PATCH',\n   headers: myHeaders,\n   redirect: 'follow'\n};\n\nfetch(\"https://api.optimizely.com/flags/v1//holdouts/{holdout_id}\", requestOptions)\n   .then(response => response.text())\n   .then(result => console.log(result))\n   .catch(error => console.log('error', error));"
        },
        {
          "id": "MIxeKEAXHrfk4JuuJ6fRR",
          "language": "ruby",
          "label": "Ruby",
          "code": "require \"uri\"\nrequire \"json\"\nrequire \"net/http\"\n\nurl = URI(\"https://api.optimizely.com/flags/v1//holdouts/{holdout_id}\")\n\nhttps = Net::HTTP.new(url.host, url.port)\nhttps.use_ssl = true\n\nrequest = Net::HTTP::Patch.new(url)\nrequest[\"accept\"] = \"application/json\"\nrequest[\"content-type\"] = \"application/json-patch+json\"\n\nresponse = https.request(request)\nputs response.read_body\n"
        },
        {
          "id": "M29FV5E0JBHw4j7n7pChn",
          "language": "python",
          "label": "Python",
          "code": "import requests\nimport json\n\nurl = \"https://api.optimizely.com/flags/v1//holdouts/{holdout_id}\"\n\npayload = {}\nheaders = {\n   'accept': 'application/json',\n   'content-type': 'application/json-patch+json'\n}\n\nresponse = requests.request(\"PATCH\", url, headers=headers, data=payload)\n\nprint(response.text)\n"
        }
      ],
      "selectedLanguageId": "_HNAbGDEgeOBWlcXM8bUH"
    },
    "results": {
      "languages": [
        {
          "id": "BkSVX2O5fR-VJHRS3_Wis",
          "language": "200",
          "code": "// Holdout successfully updated\n{\n  \"archived\": false,\n  \"audience_conditions\": [\n    {}\n  ],\n  \"audience_ids\": [\n    0\n  ],\n  \"created_by_user_email\": \"user@company.com\",\n  \"created_time\": \"2023-12-15T10:00:00.000Z\",\n  \"description\": \"Holdout group to measure the overall impact of our growth experiments throughout the year\",\n  \"end_time\": \"2024-12-31T23:59:59.000Z\",\n  \"environment_key\": \"production\",\n  \"environment_name\": \"Production\",\n  \"exclude_targeted_deliveries\": false,\n  \"holdout_results_api_token\": \"SampleToken.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9\",\n  \"id\": 12345,\n  \"key\": \"annual_growth_holdout\",\n  \"metrics\": [\n    {\n      \"aggregator\": \"\",\n      \"display_title\": \"\",\n      \"display_unit\": \"\",\n      \"event_id\": 32334454244,\n      \"event_properties\": {\n        \"filter\": {\n          \"combine_operator\": \"\",\n          \"conditions\": [\n            {\n              \"name\": \"\",\n              \"operator\": \"\",\n              \"type\": \"\",\n              \"value\": \"\"\n            }\n          ]\n        }\n      },\n      \"event_type\": \"\",\n      \"field\": \"\",\n      \"id\": \"\",\n      \"metrics\": [\n        {\n          \"aggregator\": \"\",\n          \"display_title\": \"\",\n          \"event_id\": 0,\n          \"event_type\": \"\",\n          \"field\": \"\",\n          \"role\": \"\",\n          \"scope\": \"\"\n        }\n      ],\n      \"project_id\": 0,\n      \"scope\": \"\",\n      \"visibility\": \"\",\n      \"winning_direction\": \"\"\n    }\n  ],\n  \"name\": \"Annual Growth Control Group\",\n  \"project_id\": 98765,\n  \"projects\": [\n    {\n      \"id\": \"\"\n    }\n  ],\n  \"revision\": 3,\n  \"rules\": [\n    {\n      \"flag_id\": \"\",\n      \"flag_key\": \"\",\n      \"flag_name\": \"\",\n      \"id\": \"\",\n      \"key\": \"\",\n      \"name\": \"\",\n      \"project_id\": \"\"\n    }\n  ],\n  \"scope\": \"global\",\n  \"start_time\": \"2024-01-01T00:00:00.000Z\",\n  \"status\": \"running\",\n  \"traffic_allocation\": 1000,\n  \"updated_time\": \"2024-01-01T10:00:00.000Z\",\n  \"url\": \"/holdouts/12345\",\n  \"urn\": \"holdout.flag.optimizely.com::12345\"\n}"
        },
        {
          "id": "lSyllBXNBQJzFdfexouxV",
          "language": "400",
          "code": "// Malformed requests and invalid parameter names and types\n"
        },
        {
          "id": "ShyAxnFbA3IvJy_iu9xRo",
          "language": "401",
          "code": "// Invalid credentials\n"
        },
        {
          "id": "fRa5pYyS37oCEMekAhQvK",
          "language": "403",
          "code": "// Do not have permission to perform the operation\n"
        },
        {
          "id": "Y9j-9eKhCuUviMl-Icd6I",
          "language": "404",
          "code": "// Not found. No content\n"
        },
        {
          "id": "jj268vGQuvAW4XVM4ctGZ",
          "language": "409",
          "code": "// Conflict - concurrent modification detected (optimistic lock failure)\n"
        }
      ],
      "selectedLanguageId": "BkSVX2O5fR-VJHRS3_Wis"
    }
  },
  "children": [
    {
      "text": ""
    }
  ]
}