---
title: Retrieve changes for a project.
slug: web-experimentation/api/retrieve-changes-for-a-project
docTags: 
createdAt: 2026-10-02T13:15:18.296Z
---

{
  "id": "fV0buULr3tm3MKwMLUpT1",
  "type": "api-oas-v2",
  "data": {
    "method": "GET",
    "url": "https://api.optimizely.com/v2/changes",
    "servers": [
      {
        "url": "https://api.optimizely.com/v2/changes"
      }
    ],
    "name": "Retrieve changes for a project.",
    "description": "Get a list of changes for a given project using optional filters.",
    "contentType": "application/json",
    "request": {
      "pathParameters": [],
      "headerParameters": [
        {
          "name": "accept",
          "type": "string",
          "kind": "optional",
          "description": "Generated from available response content types",
          "enum": [
            "application/json"
          ],
          "default": "application/json"
        }
      ],
      "queryParameters": [
        {
          "kind": "required",
          "name": "project_id",
          "type": "integer<int64>",
          "description": "ID of the Project you want to list changes for.",
          "format": "int64"
        },
        {
          "kind": "optional",
          "name": "id",
          "type": "array",
          "description": "A specific Change ID to filter by. Can be specified multiple times to include multiple specific changes.",
          "schema": [],
          "itemType": "integer",
          "customType": "integer[]"
        },
        {
          "kind": "optional",
          "name": "start_time",
          "type": "string<date-time>",
          "description": "<p>Start of the time interval (inclusive) to list changes. The time is formatted in ISO 8601.</p>",
          "format": "date-time"
        },
        {
          "kind": "optional",
          "name": "end_time",
          "type": "string<date-time>",
          "description": "<p>End of the time interval (exclusive) to look for changes. The time is formatted in ISO 8601.</p>",
          "format": "date-time"
        },
        {
          "kind": "optional",
          "name": "user",
          "type": "array",
          "description": "Email of the user who made the change. Can be specified multiple times to include changes from multiple users.",
          "schema": [],
          "itemType": "string",
          "customType": "string[]"
        },
        {
          "kind": "optional",
          "name": "entity_type",
          "type": "array",
          "description": "<p>The type of the entity. The entity_type must be one of the following : approval, attribute, audience, campaign, custom_field, environment, event, experiment, extension, feature, flag, group, list_attribute, metrics, page, project, report, rule, ruleset, section, tag, variation, variable, webhook, permission, policy, team, metric, metric_set, experiment</p><div></div>/b, experiment<div></div>, experiment<div></div>, experiment<div></div>. Can be specified multiple times to include changes for multiple entity types.<p></p>",
          "schema": [],
          "itemType": "string",
          "customType": "string[]"
        },
        {
          "kind": "optional",
          "name": "source",
          "type": "string",
          "description": "<p>The source of the change (UI or API)</p>"
        },
        {
          "kind": "optional",
          "name": "entity",
          "type": "array",
          "description": "<p>Colon (:) delimited string containing the entity_type and entity_id of the entity wanted. The entity_type must be one of the following : approval, attribute, audience, campaign, custom_field, environment, event, experiment, extension, feature, flag, group, list_attribute, metrics, page, project, report, rule, ruleset, section, tag, variation, variable, webhook, permission, policy, team, metric, metric_set e.g. ruleset</p><div></div>, experiment<div></div>. Can be specified multiple times to filter changes to a specific set of entities.<p></p>",
          "schema": [],
          "itemType": "string",
          "customType": "string[]"
        },
        {
          "kind": "optional",
          "name": "per_page",
          "type": "integer",
          "description": "Optional pagination argument that specifies the maximum number of objects to return per request",
          "default": 25,
          "maximum": 100
        },
        {
          "kind": "optional",
          "name": "page",
          "type": "integer",
          "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",
          "default": 1
        }
      ],
      "bodyDataParameters": [],
      "formDataParameters": [],
      "oAuthParameters": [
        {
          "id": "apiKey",
          "name": "apiKey",
          "kind": "optional",
          "type": "http",
          "scheme": "bearer"
        },
        {
          "id": "OAuth2",
          "name": "OAuth2",
          "kind": "optional",
          "type": "oauth2",
          "description": "<p>Write applications that authenticate with the REST API via OAuth 2.0. Or, to authenticate using a personal token, see <a href=\"https://docs.developers.optimizely.com/web/docs/personal-token\" target=\"_blank\">https://docs.developers.optimizely.com/web/docs/personal-token</a></p>",
          "oauth2Flows": {
            "authorizationCode": {
              "authorizationUrl": "https://app.optimizely.com/oauth2/authorize",
              "tokenUrl": "https://app.optimizely.com/oauth2/token",
              "scopes": {
                "all": "Full access to your account"
              }
            }
          },
          "requiredScopes": [
            "read",
            "write"
          ]
        }
      ],
      "cookieParameters": []
    },
    "responses": [
      {
        "statusCode": "200",
        "description": "Returns changes.",
        "jsonExample": "",
        "isExpanded": true,
        "schema": [
          {
            "kind": "optional",
            "type": "array",
            "description": "",
            "customType": "ChangeHistoryChange[]",
            "schema": [
              {
                "name": "change_type",
                "kind": "optional",
                "type": "string<archive | create | update | delete | publish | unarchive | migration | archive_related_entity | unarchive_related_entity | flag_status_update>",
                "description": "Action performed on the entity.",
                "enum": [
                  "archive",
                  "create",
                  "update",
                  "delete",
                  "publish",
                  "unarchive",
                  "migration",
                  "archive_related_entity",
                  "unarchive_related_entity",
                  "flag_status_update"
                ]
              },
              {
                "name": "changes",
                "kind": "optional",
                "type": "array",
                "description": "List of change details.",
                "modelRef": "#/components/schemas/ChangeDetail",
                "customType": "ChangeDetail[]",
                "schema": [
                  {
                    "name": "after",
                    "kind": "optional",
                    "type": "",
                    "description": "Value of the property after modification."
                  },
                  {
                    "name": "before",
                    "kind": "optional",
                    "type": "",
                    "description": "Value of the property before modification."
                  },
                  {
                    "name": "description",
                    "kind": "optional",
                    "type": "string",
                    "description": "Human readable description of the change."
                  },
                  {
                    "name": "property",
                    "kind": "optional",
                    "type": "string",
                    "description": "The name of the property modified."
                  }
                ]
              },
              {
                "name": "created",
                "kind": "optional",
                "type": "string<date-time>",
                "description": "Created time of the current revision. Format is ISO 8601.",
                "format": "date-time"
              },
              {
                "name": "entity",
                "kind": "optional",
                "type": "object",
                "description": "",
                "modelRef": "#/components/schemas/Entity",
                "customType": "Entity",
                "schema": [
                  {
                    "name": "api_url",
                    "kind": "optional",
                    "type": "string<url>",
                    "description": "Generated URL to access the entity by using the public API.",
                    "format": "url"
                  },
                  {
                    "name": "id",
                    "kind": "optional",
                    "type": "integer<int64>",
                    "description": "ID of the entity.",
                    "format": "int64"
                  },
                  {
                    "name": "name",
                    "kind": "optional",
                    "type": "string",
                    "description": "Name of the entity."
                  },
                  {
                    "name": "sub_type",
                    "kind": "optional",
                    "type": "string",
                    "description": "<p>Optional field for entities that have sub_types (projects, experiments, extensions, pages, etc)</p>"
                  },
                  {
                    "name": "type",
                    "kind": "optional",
                    "type": "string",
                    "description": "Type of the entity as defined by the public API."
                  },
                  {
                    "name": "ui_url",
                    "kind": "optional",
                    "type": "string<url>",
                    "description": "Generated URL to access the entity using Optimizely UI.",
                    "format": "url"
                  }
                ]
              },
              {
                "name": "id",
                "kind": "optional",
                "type": "integer<int64>",
                "description": "ID of the change.",
                "format": "int64"
              },
              {
                "name": "project_id",
                "kind": "required",
                "type": "integer<int64>",
                "description": "ID of the project related to the entity.",
                "format": "int64"
              },
              {
                "name": "revisions",
                "kind": "optional",
                "type": "object",
                "description": "",
                "modelRef": "#/components/schemas/ChangeRevision",
                "customType": "ChangeRevision",
                "schema": [
                  {
                    "name": "current",
                    "kind": "optional",
                    "type": "object",
                    "description": "",
                    "modelRef": "#/components/schemas/Revision",
                    "customType": "Revision",
                    "schema": [
                      {
                        "name": "id",
                        "kind": "optional",
                        "type": "integer",
                        "nullable": true,
                        "description": "Reference to a revision of the entity."
                      },
                      {
                        "name": "sequence_number",
                        "kind": "optional",
                        "type": "integer<int64>",
                        "nullable": true,
                        "description": "<p>Auto-generated number assigned to the revision when the entity was modified.</p>",
                        "format": "int64"
                      }
                    ]
                  },
                  {
                    "name": "previous",
                    "kind": "optional",
                    "type": "object",
                    "description": "",
                    "modelRef": "#/components/schemas/Revision",
                    "customType": "Revision",
                    "schema": [
                      {
                        "name": "id",
                        "kind": "optional",
                        "type": "integer",
                        "nullable": true,
                        "description": "Reference to a revision of the entity."
                      },
                      {
                        "name": "sequence_number",
                        "kind": "optional",
                        "type": "integer<int64>",
                        "nullable": true,
                        "description": "<p>Auto-generated number assigned to the revision when the entity was modified.</p>",
                        "format": "int64"
                      }
                    ]
                  }
                ]
              },
              {
                "name": "source",
                "kind": "optional",
                "type": "string<ui | api | migration | mcp>",
                "description": "Origin of the current revision.",
                "enum": [
                  "ui",
                  "api",
                  "migration",
                  "mcp"
                ]
              },
              {
                "name": "summary",
                "kind": "optional",
                "type": "string",
                "description": "Short human readable description of the change."
              },
              {
                "name": "user",
                "kind": "optional",
                "type": "object",
                "description": "",
                "modelRef": "#/components/schemas/User",
                "customType": "User",
                "schema": [
                  {
                    "name": "display_name",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "<p>Display name of the user, most commonly the Optimizely user's email.</p>"
                  },
                  {
                    "name": "email",
                    "kind": "required",
                    "type": "string",
                    "description": "Email of the user."
                  },
                  {
                    "name": "first_name",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "First name of the user."
                  },
                  {
                    "name": "id",
                    "kind": "required",
                    "type": "string",
                    "description": "ID of the user."
                  },
                  {
                    "name": "last_name",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "Last name of the user."
                  },
                  {
                    "name": "profile_image_url",
                    "kind": "optional",
                    "type": "string",
                    "nullable": true,
                    "description": "URL to the user profile image."
                  }
                ]
              }
            ],
            "modelRef": "#/components/schemas/ChangeHistoryChange",
            "isExpanded": true
          }
        ]
      }
    ],
    "hasXCodeSamples": false,
    "examples": {
      "languages": [
        {
          "id": "fdHnKRwU65Bxh5g_TzI0T",
          "language": "curl",
          "label": "cURL",
          "code": "curl --request GET \\\n     --url 'https://api.optimizely.com/v2/changes?project_id=integer%3Cint64%3E&per_page=25&page=1' \\\n     --header 'accept: application/json'"
        },
        {
          "id": "K5mTZPaJughk4BFsxzmEg",
          "language": "javascript",
          "label": "javascript",
          "code": "var myHeaders = new Headers();\nmyHeaders.append(\"accept\", \"application/json\");\nmyHeaders.append(\"content-type\", \"application/json\");\n\nvar requestOptions = {\n   method: 'GET',\n   headers: myHeaders,\n   redirect: 'follow'\n};\n\nfetch(\"https://api.optimizely.com/v2/changes?project_id=integer<int64>&per_page=25&page=1\", requestOptions)\n   .then(response => response.text())\n   .then(result => console.log(result))\n   .catch(error => console.log('error', error));"
        },
        {
          "id": "lRz-_DgKviuREV1SxSfpF",
          "language": "ruby",
          "label": "Ruby",
          "code": "require \"uri\"\nrequire \"json\"\nrequire \"net/http\"\n\nurl = URI(\"https://api.optimizely.com/v2/changes?project_id=integer<int64>&per_page=25&page=1\")\n\nhttps = Net::HTTP.new(url.host, url.port)\nhttps.use_ssl = true\n\nrequest = Net::HTTP::Get.new(url)\nrequest[\"accept\"] = \"application/json\"\nrequest[\"content-type\"] = \"application/json\"\n\nresponse = https.request(request)\nputs response.read_body\n"
        },
        {
          "id": "mML025rPAUc4TZRbxTgjr",
          "language": "python",
          "label": "Python",
          "code": "import requests\nimport json\n\nurl = \"https://api.optimizely.com/v2/changes?project_id=integer<int64>&per_page=25&page=1\"\n\npayload = {}\nheaders = {\n   'accept': 'application/json',\n   'content-type': 'application/json'\n}\n\nresponse = requests.request(\"GET\", url, headers=headers, data=payload)\n\nprint(response.text)\n"
        }
      ],
      "selectedLanguageId": "fdHnKRwU65Bxh5g_TzI0T"
    },
    "results": {
      "languages": [
        {
          "id": "response-0-200",
          "language": "200",
          "code": "// Returns changes.\n[\n  {\n    \"change_type\": \"\",\n    \"changes\": [\n      {\n        \"after\": \"\",\n        \"before\": \"\",\n        \"description\": \"\",\n        \"property\": \"\"\n      }\n    ],\n    \"created\": \"\",\n    \"entity\": {\n      \"api_url\": \"\",\n      \"id\": \"\",\n      \"name\": \"\",\n      \"sub_type\": \"\",\n      \"type\": \"\",\n      \"ui_url\": \"\"\n    },\n    \"id\": \"\",\n    \"project_id\": \"\",\n    \"revisions\": {\n      \"current\": {\n        \"id\": 0,\n        \"sequence_number\": \"\"\n      },\n      \"previous\": {\n        \"id\": 0,\n        \"sequence_number\": \"\"\n      }\n    },\n    \"source\": \"\",\n    \"summary\": \"\",\n    \"user\": {\n      \"display_name\": \"\",\n      \"email\": \"\",\n      \"first_name\": \"\",\n      \"id\": \"\",\n      \"last_name\": \"\",\n      \"profile_image_url\": \"\"\n    }\n  }\n]"
        }
      ],
      "selectedLanguageId": "response-0-200"
    }
  },
  "children": [
    {
      "text": ""
    }
  ]
}