> This page is for Data API, version v2 (default).
> For other versions, use one of these documentation indexes:
> - v2 (default): https://developers.webflow.com/data/v2.0.0/llms.txt
> - v2 Beta: https://developers.webflow.com/data/v2.0.0-beta/llms.txt
> - v1: https://developers.webflow.com/data/v1.0.0/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developers.webflow.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developers.webflow.com/_mcp/server.

# List Optimizations

GET https://api.webflow.com/v2/optimize/{optimize_id}/optimizations

Lists the optimizations for an `optimizeId`, with each one's type, status, intervals, and current goals. Returns live and draft optimizations unless you set `status`.Each report covers a date range within a single interval of an optimization. Use an interval's `start` and `end` to choose a report's `intervalStart` and `intervalEnd`.Each interval lists its goals as they were when it started. `currentGoals` lists the optimization's goals as they're set up now, and each goal's `source` shows where it comes from. A report accepts a `goalId` from either list.Results are sorted by `optimizationId`, and each optimization's intervals are listed oldest first. To get the next page, pass `nextCursor` as `cursor`.This endpoint requires a Webflow site with the Optimize add-on, or a non-Webflow site that uses Optimize.Each access token can have one Optimize request in flight at a time, across all Optimize endpoints. Additional concurrent requests return `429 Too Many Requests`. Wait for your in-flight request to finish, or for the `Retry-After` interval, then retry.Required scope | `sites:read`

Reference: https://developers.webflow.com/data/reference/optimize/list-optimizations

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Request

### Path parameters

- `optimize_id` (string, required) — The Optimize ID, from [List Optimize IDs](/data/reference/optimize/list-optimize-ids).

### Query parameters

- `status` (list of enum, optional, default: ["live","draft"]) — The statuses to include. Defaults to `live` and `draft`. Pass repeated values (`status=live&status=draft`) or a comma-separated list (`status=live,draft`). A `cursor` keeps the statuses it was created with. When you pass a `cursor`, omit `status` or send the same statuses.
  - Allowed values: `live`, `draft`, `ready`, `archived`, `off`
- `pageSize` (integer, optional, default: 100) — The maximum number of results to return. Defaults to `100`, up to `200`.
- `cursor` (string, optional) — The `nextCursor` from a previous response, to get the next page.

## Response

### 200

A page of optimizations.

- `optimizations` (list of OptimizeOptimizeIdOptimizationsGetResponsesContentApplicationJsonSchemaOptimizationsItems, required) — The optimizations on this page, sorted by `optimizationId`.
- `status` (list of enum, required) — The statuses this list includes.
  - Allowed values: `live`, `draft`, `ready`, `archived`, `off`
- `nextCursor` (string, optional) — Pass this value as `cursor` to get the next page. Omitted on the last page.

## Errors

### 400 Bad Request Error

The request failed validation. The `code` field identifies the rule that failed: - `optimize_input_validation` — a parameter is invalid, or `status` differs from the statuses the `cursor` was created with. `details[0].param` names the first failing field.

- `code` (enum, optional) — Error code
  - Allowed values: `aeo_input_validation`, `analyze_filter_conflict`, `analyze_input_validation`, `analyze_unsupported_filter`, `bad_request`, `batch_too_large`, `before_historical_floor`, `billing_provider_unavailable`, `branch_merge_conflict`, `branch_merge_in_progress`, `branch_not_found`, `branch_publish_failed`, `branch_sync_pending`, `branch_task_not_found`, `branch_update_in_progress`, `brand_not_configured`, `cannot_invite_self`, `cannot_remove_self`, `cannot_update_user_role`, `client_seats_unavailable`, `collection_not_found`, `competitors_not_configured`, `conflict`, `conflicting_scope_filters`, `default_site_role_required`, `duplicate_collection`, `duplicate_member_in_request`, `duplicate_site_in_request`, `duplicate_user_email`, `ecommerce_not_enabled`, `end_time_too_recent`, `enterprise_provisioning_upstream_error`, `enterprise_self_provisioning_not_entitled`, `forbidden`, `forms_require_republish`, `incompatible_webhook_filter`, `insufficient_permissions`, `insufficient_seats`, `internal_error`, `invalid_auth_version`, `invalid_credentials`, `invalid_domain`, `invalid_resolution`, `invalid_site_role`, `invalid_time_range`, `invalid_user_email`, `invalid_workspace_role`, `invite_expired`, `invite_role_conflict`, `item_not_found`, `managed_by_scim`, `member_already_has_access`, `member_has_no_site_access`, `member_is_paying_client`, `member_not_found`, `member_not_removable`, `member_role_conflict`, `missing_scopes`, `no_domains`, `no_members_or_invites`, `not_authorized`, `not_enterprise_plan_site`, `not_enterprise_plan_workspace`, `optimize_before_historical_floor`, `optimize_input_validation`, `optimize_invalid_interval`, `optimize_unknown_dimension`, `optimize_unknown_goal`, `optimize_unknown_optimization`, `optimize_unsupported_group_by`, `order_not_found`, `page_cannot_branch`, `resource_not_found`, `service_unavailable`, `site_access_not_applicable_to_member`, `site_access_not_scopable_for_role`, `site_access_roles_must_match`, `site_not_in_workspace`, `site_role_id_invalid`, `site_role_id_not_allowed`, `site_role_id_required`, `site_specific_access_disabled`, `site_specific_access_not_entitled`, `time_range_too_wide`, `too_many_requests`, `unsupported_bot_provider`, `unsupported_version`, `unsupported_webhook_trigger_type`, `user_limit_reached`, `user_not_found`, `users_not_enabled`, `validation_error`, `workspace_invite_not_found`, `workspace_member_managed_by_scim`, `workspace_member_not_found`, `workspace_member_not_removable`, `workspace_role_not_grantable`
- `message` (string, optional) — Error message
- `externalReference` (string, optional) — Link to more information
- `details` (list of OptimizeOptimizeIdOptimizationsGetResponsesContentApplicationJsonSchemaDetailsItems, optional) — Array of errors

### 401 Unauthorized Error

Provided access token is invalid or does not have access to requested resource

- `code` (enum, optional) — Error code
  - Allowed values: `aeo_input_validation`, `analyze_filter_conflict`, `analyze_input_validation`, `analyze_unsupported_filter`, `bad_request`, `batch_too_large`, `before_historical_floor`, `billing_provider_unavailable`, `branch_merge_conflict`, `branch_merge_in_progress`, `branch_not_found`, `branch_publish_failed`, `branch_sync_pending`, `branch_task_not_found`, `branch_update_in_progress`, `brand_not_configured`, `cannot_invite_self`, `cannot_remove_self`, `cannot_update_user_role`, `client_seats_unavailable`, `collection_not_found`, `competitors_not_configured`, `conflict`, `conflicting_scope_filters`, `default_site_role_required`, `duplicate_collection`, `duplicate_member_in_request`, `duplicate_site_in_request`, `duplicate_user_email`, `ecommerce_not_enabled`, `end_time_too_recent`, `enterprise_provisioning_upstream_error`, `enterprise_self_provisioning_not_entitled`, `forbidden`, `forms_require_republish`, `incompatible_webhook_filter`, `insufficient_permissions`, `insufficient_seats`, `internal_error`, `invalid_auth_version`, `invalid_credentials`, `invalid_domain`, `invalid_resolution`, `invalid_site_role`, `invalid_time_range`, `invalid_user_email`, `invalid_workspace_role`, `invite_expired`, `invite_role_conflict`, `item_not_found`, `managed_by_scim`, `member_already_has_access`, `member_has_no_site_access`, `member_is_paying_client`, `member_not_found`, `member_not_removable`, `member_role_conflict`, `missing_scopes`, `no_domains`, `no_members_or_invites`, `not_authorized`, `not_enterprise_plan_site`, `not_enterprise_plan_workspace`, `optimize_before_historical_floor`, `optimize_input_validation`, `optimize_invalid_interval`, `optimize_unknown_dimension`, `optimize_unknown_goal`, `optimize_unknown_optimization`, `optimize_unsupported_group_by`, `order_not_found`, `page_cannot_branch`, `resource_not_found`, `service_unavailable`, `site_access_not_applicable_to_member`, `site_access_not_scopable_for_role`, `site_access_roles_must_match`, `site_not_in_workspace`, `site_role_id_invalid`, `site_role_id_not_allowed`, `site_role_id_required`, `site_specific_access_disabled`, `site_specific_access_not_entitled`, `time_range_too_wide`, `too_many_requests`, `unsupported_bot_provider`, `unsupported_version`, `unsupported_webhook_trigger_type`, `user_limit_reached`, `user_not_found`, `users_not_enabled`, `validation_error`, `workspace_invite_not_found`, `workspace_member_managed_by_scim`, `workspace_member_not_found`, `workspace_member_not_removable`, `workspace_role_not_grantable`
- `message` (string, optional) — Error message
- `externalReference` (string, optional) — Link to more information
- `details` (list of OptimizeOptimizeIdOptimizationsGetResponsesContentApplicationJsonSchemaDetailsItems, optional) — Array of errors

### 403 Forbidden Error

The access token is missing the `sites:read` scope (`missing_scopes`), or doesn't have sufficient user-level permissions (`insufficient_permissions`).

- `code` (enum, optional) — Error code
  - Allowed values: `aeo_input_validation`, `analyze_filter_conflict`, `analyze_input_validation`, `analyze_unsupported_filter`, `bad_request`, `batch_too_large`, `before_historical_floor`, `billing_provider_unavailable`, `branch_merge_conflict`, `branch_merge_in_progress`, `branch_not_found`, `branch_publish_failed`, `branch_sync_pending`, `branch_task_not_found`, `branch_update_in_progress`, `brand_not_configured`, `cannot_invite_self`, `cannot_remove_self`, `cannot_update_user_role`, `client_seats_unavailable`, `collection_not_found`, `competitors_not_configured`, `conflict`, `conflicting_scope_filters`, `default_site_role_required`, `duplicate_collection`, `duplicate_member_in_request`, `duplicate_site_in_request`, `duplicate_user_email`, `ecommerce_not_enabled`, `end_time_too_recent`, `enterprise_provisioning_upstream_error`, `enterprise_self_provisioning_not_entitled`, `forbidden`, `forms_require_republish`, `incompatible_webhook_filter`, `insufficient_permissions`, `insufficient_seats`, `internal_error`, `invalid_auth_version`, `invalid_credentials`, `invalid_domain`, `invalid_resolution`, `invalid_site_role`, `invalid_time_range`, `invalid_user_email`, `invalid_workspace_role`, `invite_expired`, `invite_role_conflict`, `item_not_found`, `managed_by_scim`, `member_already_has_access`, `member_has_no_site_access`, `member_is_paying_client`, `member_not_found`, `member_not_removable`, `member_role_conflict`, `missing_scopes`, `no_domains`, `no_members_or_invites`, `not_authorized`, `not_enterprise_plan_site`, `not_enterprise_plan_workspace`, `optimize_before_historical_floor`, `optimize_input_validation`, `optimize_invalid_interval`, `optimize_unknown_dimension`, `optimize_unknown_goal`, `optimize_unknown_optimization`, `optimize_unsupported_group_by`, `order_not_found`, `page_cannot_branch`, `resource_not_found`, `service_unavailable`, `site_access_not_applicable_to_member`, `site_access_not_scopable_for_role`, `site_access_roles_must_match`, `site_not_in_workspace`, `site_role_id_invalid`, `site_role_id_not_allowed`, `site_role_id_required`, `site_specific_access_disabled`, `site_specific_access_not_entitled`, `time_range_too_wide`, `too_many_requests`, `unsupported_bot_provider`, `unsupported_version`, `unsupported_webhook_trigger_type`, `user_limit_reached`, `user_not_found`, `users_not_enabled`, `validation_error`, `workspace_invite_not_found`, `workspace_member_managed_by_scim`, `workspace_member_not_found`, `workspace_member_not_removable`, `workspace_role_not_grantable`
- `message` (string, optional) — Error message
- `externalReference` (string, optional) — Link to more information
- `details` (list of OptimizeOptimizeIdOptimizationsGetResponsesContentApplicationJsonSchemaDetailsItems, optional) — Array of errors

### 404 Not Found Error

The requested resource wasn't found.

- `code` (enum, optional) — Error code
  - Allowed values: `aeo_input_validation`, `analyze_filter_conflict`, `analyze_input_validation`, `analyze_unsupported_filter`, `bad_request`, `batch_too_large`, `before_historical_floor`, `billing_provider_unavailable`, `branch_merge_conflict`, `branch_merge_in_progress`, `branch_not_found`, `branch_publish_failed`, `branch_sync_pending`, `branch_task_not_found`, `branch_update_in_progress`, `brand_not_configured`, `cannot_invite_self`, `cannot_remove_self`, `cannot_update_user_role`, `client_seats_unavailable`, `collection_not_found`, `competitors_not_configured`, `conflict`, `conflicting_scope_filters`, `default_site_role_required`, `duplicate_collection`, `duplicate_member_in_request`, `duplicate_site_in_request`, `duplicate_user_email`, `ecommerce_not_enabled`, `end_time_too_recent`, `enterprise_provisioning_upstream_error`, `enterprise_self_provisioning_not_entitled`, `forbidden`, `forms_require_republish`, `incompatible_webhook_filter`, `insufficient_permissions`, `insufficient_seats`, `internal_error`, `invalid_auth_version`, `invalid_credentials`, `invalid_domain`, `invalid_resolution`, `invalid_site_role`, `invalid_time_range`, `invalid_user_email`, `invalid_workspace_role`, `invite_expired`, `invite_role_conflict`, `item_not_found`, `managed_by_scim`, `member_already_has_access`, `member_has_no_site_access`, `member_is_paying_client`, `member_not_found`, `member_not_removable`, `member_role_conflict`, `missing_scopes`, `no_domains`, `no_members_or_invites`, `not_authorized`, `not_enterprise_plan_site`, `not_enterprise_plan_workspace`, `optimize_before_historical_floor`, `optimize_input_validation`, `optimize_invalid_interval`, `optimize_unknown_dimension`, `optimize_unknown_goal`, `optimize_unknown_optimization`, `optimize_unsupported_group_by`, `order_not_found`, `page_cannot_branch`, `resource_not_found`, `service_unavailable`, `site_access_not_applicable_to_member`, `site_access_not_scopable_for_role`, `site_access_roles_must_match`, `site_not_in_workspace`, `site_role_id_invalid`, `site_role_id_not_allowed`, `site_role_id_required`, `site_specific_access_disabled`, `site_specific_access_not_entitled`, `time_range_too_wide`, `too_many_requests`, `unsupported_bot_provider`, `unsupported_version`, `unsupported_webhook_trigger_type`, `user_limit_reached`, `user_not_found`, `users_not_enabled`, `validation_error`, `workspace_invite_not_found`, `workspace_member_managed_by_scim`, `workspace_member_not_found`, `workspace_member_not_removable`, `workspace_role_not_grantable`
- `message` (string, optional) — Error message
- `externalReference` (string, optional) — Link to more information
- `details` (list of OptimizeOptimizeIdOptimizationsGetResponsesContentApplicationJsonSchemaDetailsItems, optional) — Array of errors

### 409 Conflict Error

The `optimize_id` matches more than one resource the access token can access.

- `code` (enum, optional) — Error code
  - Allowed values: `aeo_input_validation`, `analyze_filter_conflict`, `analyze_input_validation`, `analyze_unsupported_filter`, `bad_request`, `batch_too_large`, `before_historical_floor`, `billing_provider_unavailable`, `branch_merge_conflict`, `branch_merge_in_progress`, `branch_not_found`, `branch_publish_failed`, `branch_sync_pending`, `branch_task_not_found`, `branch_update_in_progress`, `brand_not_configured`, `cannot_invite_self`, `cannot_remove_self`, `cannot_update_user_role`, `client_seats_unavailable`, `collection_not_found`, `competitors_not_configured`, `conflict`, `conflicting_scope_filters`, `default_site_role_required`, `duplicate_collection`, `duplicate_member_in_request`, `duplicate_site_in_request`, `duplicate_user_email`, `ecommerce_not_enabled`, `end_time_too_recent`, `enterprise_provisioning_upstream_error`, `enterprise_self_provisioning_not_entitled`, `forbidden`, `forms_require_republish`, `incompatible_webhook_filter`, `insufficient_permissions`, `insufficient_seats`, `internal_error`, `invalid_auth_version`, `invalid_credentials`, `invalid_domain`, `invalid_resolution`, `invalid_site_role`, `invalid_time_range`, `invalid_user_email`, `invalid_workspace_role`, `invite_expired`, `invite_role_conflict`, `item_not_found`, `managed_by_scim`, `member_already_has_access`, `member_has_no_site_access`, `member_is_paying_client`, `member_not_found`, `member_not_removable`, `member_role_conflict`, `missing_scopes`, `no_domains`, `no_members_or_invites`, `not_authorized`, `not_enterprise_plan_site`, `not_enterprise_plan_workspace`, `optimize_before_historical_floor`, `optimize_input_validation`, `optimize_invalid_interval`, `optimize_unknown_dimension`, `optimize_unknown_goal`, `optimize_unknown_optimization`, `optimize_unsupported_group_by`, `order_not_found`, `page_cannot_branch`, `resource_not_found`, `service_unavailable`, `site_access_not_applicable_to_member`, `site_access_not_scopable_for_role`, `site_access_roles_must_match`, `site_not_in_workspace`, `site_role_id_invalid`, `site_role_id_not_allowed`, `site_role_id_required`, `site_specific_access_disabled`, `site_specific_access_not_entitled`, `time_range_too_wide`, `too_many_requests`, `unsupported_bot_provider`, `unsupported_version`, `unsupported_webhook_trigger_type`, `user_limit_reached`, `user_not_found`, `users_not_enabled`, `validation_error`, `workspace_invite_not_found`, `workspace_member_managed_by_scim`, `workspace_member_not_found`, `workspace_member_not_removable`, `workspace_role_not_grantable`
- `message` (string, optional) — Error message
- `externalReference` (string, optional) — Link to more information
- `details` (list of OptimizeOptimizeIdOptimizationsGetResponsesContentApplicationJsonSchemaDetailsItems, optional) — Array of errors

### 429 Too Many Requests Error

The rate limit of the provided access_token has been reached. Please have your application respect the X-RateLimit-Remaining header we include on API responses.

- `code` (enum, optional) — Error code
  - Allowed values: `aeo_input_validation`, `analyze_filter_conflict`, `analyze_input_validation`, `analyze_unsupported_filter`, `bad_request`, `batch_too_large`, `before_historical_floor`, `billing_provider_unavailable`, `branch_merge_conflict`, `branch_merge_in_progress`, `branch_not_found`, `branch_publish_failed`, `branch_sync_pending`, `branch_task_not_found`, `branch_update_in_progress`, `brand_not_configured`, `cannot_invite_self`, `cannot_remove_self`, `cannot_update_user_role`, `client_seats_unavailable`, `collection_not_found`, `competitors_not_configured`, `conflict`, `conflicting_scope_filters`, `default_site_role_required`, `duplicate_collection`, `duplicate_member_in_request`, `duplicate_site_in_request`, `duplicate_user_email`, `ecommerce_not_enabled`, `end_time_too_recent`, `enterprise_provisioning_upstream_error`, `enterprise_self_provisioning_not_entitled`, `forbidden`, `forms_require_republish`, `incompatible_webhook_filter`, `insufficient_permissions`, `insufficient_seats`, `internal_error`, `invalid_auth_version`, `invalid_credentials`, `invalid_domain`, `invalid_resolution`, `invalid_site_role`, `invalid_time_range`, `invalid_user_email`, `invalid_workspace_role`, `invite_expired`, `invite_role_conflict`, `item_not_found`, `managed_by_scim`, `member_already_has_access`, `member_has_no_site_access`, `member_is_paying_client`, `member_not_found`, `member_not_removable`, `member_role_conflict`, `missing_scopes`, `no_domains`, `no_members_or_invites`, `not_authorized`, `not_enterprise_plan_site`, `not_enterprise_plan_workspace`, `optimize_before_historical_floor`, `optimize_input_validation`, `optimize_invalid_interval`, `optimize_unknown_dimension`, `optimize_unknown_goal`, `optimize_unknown_optimization`, `optimize_unsupported_group_by`, `order_not_found`, `page_cannot_branch`, `resource_not_found`, `service_unavailable`, `site_access_not_applicable_to_member`, `site_access_not_scopable_for_role`, `site_access_roles_must_match`, `site_not_in_workspace`, `site_role_id_invalid`, `site_role_id_not_allowed`, `site_role_id_required`, `site_specific_access_disabled`, `site_specific_access_not_entitled`, `time_range_too_wide`, `too_many_requests`, `unsupported_bot_provider`, `unsupported_version`, `unsupported_webhook_trigger_type`, `user_limit_reached`, `user_not_found`, `users_not_enabled`, `validation_error`, `workspace_invite_not_found`, `workspace_member_managed_by_scim`, `workspace_member_not_found`, `workspace_member_not_removable`, `workspace_role_not_grantable`
- `message` (string, optional) — Error message
- `externalReference` (string, optional) — Link to more information
- `details` (list of OptimizeOptimizeIdOptimizationsGetResponsesContentApplicationJsonSchemaDetailsItems, optional) — Array of errors

### 500 Internal Server Error

We had a problem with our server. Try again later.

- `code` (enum, optional) — Error code
  - Allowed values: `aeo_input_validation`, `analyze_filter_conflict`, `analyze_input_validation`, `analyze_unsupported_filter`, `bad_request`, `batch_too_large`, `before_historical_floor`, `billing_provider_unavailable`, `branch_merge_conflict`, `branch_merge_in_progress`, `branch_not_found`, `branch_publish_failed`, `branch_sync_pending`, `branch_task_not_found`, `branch_update_in_progress`, `brand_not_configured`, `cannot_invite_self`, `cannot_remove_self`, `cannot_update_user_role`, `client_seats_unavailable`, `collection_not_found`, `competitors_not_configured`, `conflict`, `conflicting_scope_filters`, `default_site_role_required`, `duplicate_collection`, `duplicate_member_in_request`, `duplicate_site_in_request`, `duplicate_user_email`, `ecommerce_not_enabled`, `end_time_too_recent`, `enterprise_provisioning_upstream_error`, `enterprise_self_provisioning_not_entitled`, `forbidden`, `forms_require_republish`, `incompatible_webhook_filter`, `insufficient_permissions`, `insufficient_seats`, `internal_error`, `invalid_auth_version`, `invalid_credentials`, `invalid_domain`, `invalid_resolution`, `invalid_site_role`, `invalid_time_range`, `invalid_user_email`, `invalid_workspace_role`, `invite_expired`, `invite_role_conflict`, `item_not_found`, `managed_by_scim`, `member_already_has_access`, `member_has_no_site_access`, `member_is_paying_client`, `member_not_found`, `member_not_removable`, `member_role_conflict`, `missing_scopes`, `no_domains`, `no_members_or_invites`, `not_authorized`, `not_enterprise_plan_site`, `not_enterprise_plan_workspace`, `optimize_before_historical_floor`, `optimize_input_validation`, `optimize_invalid_interval`, `optimize_unknown_dimension`, `optimize_unknown_goal`, `optimize_unknown_optimization`, `optimize_unsupported_group_by`, `order_not_found`, `page_cannot_branch`, `resource_not_found`, `service_unavailable`, `site_access_not_applicable_to_member`, `site_access_not_scopable_for_role`, `site_access_roles_must_match`, `site_not_in_workspace`, `site_role_id_invalid`, `site_role_id_not_allowed`, `site_role_id_required`, `site_specific_access_disabled`, `site_specific_access_not_entitled`, `time_range_too_wide`, `too_many_requests`, `unsupported_bot_provider`, `unsupported_version`, `unsupported_webhook_trigger_type`, `user_limit_reached`, `user_not_found`, `users_not_enabled`, `validation_error`, `workspace_invite_not_found`, `workspace_member_managed_by_scim`, `workspace_member_not_found`, `workspace_member_not_removable`, `workspace_role_not_grantable`
- `message` (string, optional) — Error message
- `externalReference` (string, optional) — Link to more information
- `details` (list of OptimizeOptimizeIdOptimizationsGetResponsesContentApplicationJsonSchemaDetailsItems, optional) — Array of errors

## Types

### OptimizeOptimizeIdOptimizationsGetResponsesContentApplicationJsonSchemaOptimizationsItems

An optimization is a container for one or more variations. It defines where (the pages), what (the changes, grouped into variations), and who (which visitors see each variation).

- `optimizationId` (string, required) — The optimization ID.
- `name` (string, required) — The optimization's name.
- `optimizationType` (enum, required) — The kind of optimization. - `test`: A traditional test. Randomly shows different versions of your content to a set percentage of your traffic. After enough traffic has seen the variations, a single winner is determined based on statistical significance. - `personalize`: A manual personalization. Uses rules-based personalization to define who should see which variation. Runs until you choose to stop it, and every visitor in the target segment consistently sees the same version of the page. - `aiOptimize`: An AI-optimized optimization. Uses AI to automatically deliver the best-performing variation to each visitor. As behavior shifts, the AI adapts in real time, learning which versions yield the most conversions.
  - Allowed values: `test`, `personalize`, `aiOptimize`
- `status` (enum, required) — The optimization's status. - `live`: An optimization with at least one live variation. - `draft`: A new optimization that has never gone live. - `ready`: A draft optimization where all variations are ready to publish. - `archived`: An optimization that's been decommissioned but still retains its results. - `off`: An optimization that's been stopped or all its variations are paused.
  - Allowed values: `live`, `draft`, `ready`, `archived`, `off`
- `variationCount` (integer, required) — The number of variations in the optimization.
- `intervals` (list of OptimizeOptimizeIdOptimizationsGetResponsesContentApplicationJsonSchemaOptimizationsItemsIntervalsItems, required) — The optimization's intervals, oldest first. Empty for an optimization that has never run.
- `currentGoals` (list of OptimizeOptimizeIdOptimizationsGetResponsesContentApplicationJsonSchemaOptimizationsItemsCurrentGoalsItems, required) — The optimization's goals as they're set up now: its site goals, the existing goals added to it, and the goals created in it. `source` shows where each goal comes from. The list is the same for every interval, and optimizations that have never run have it too. It isn't in a set order. A report accepts any `goalId` from this list, in any interval.
- `updatedAt` (string, optional) — When the optimization was last updated.

### OptimizeOptimizeIdOptimizationsGetResponsesContentApplicationJsonSchemaDetailsItems

### OptimizeOptimizeIdOptimizationsGetResponsesContentApplicationJsonSchemaOptimizationsItemsIntervalsItems

An interval is a snapshot of the optimization's configuration, such as which variations are live and which goals are target goals. When the configuration changes in a way that affects results, the current interval ends and a new one begins. Each report covers a date range within one interval. Use an interval's `start` and `end` to choose `intervalStart` and `intervalEnd`.

- `start` (string, required) — When the interval began.
- `goals` (list of OptimizeOptimizeIdOptimizationsGetResponsesContentApplicationJsonSchemaOptimizationsItemsIntervalsItemsGoalsItems, required) — The goals saved when this interval started. They include the interval's target goals and the goals created in the optimization by then. Goals created later, and site goals and existing goals that aren't a target goal, appear only in the optimization's `currentGoals`.
- `end` (string, optional) — When the interval ended. Omitted while the interval is ongoing.

### OptimizeOptimizeIdOptimizationsGetResponsesContentApplicationJsonSchemaOptimizationsItemsCurrentGoalsItems

A goal as it's set up on the optimization now. It has no `isPrimary`, because target goals are set per interval.

- `goalId` (string, required) — The goal ID. Pass it as `goalId` to choose the goal a report measures, in any interval.
- `name` (string, required) — The goal's name.
- `metricType` (enum, required) — What the goal measures. - `conversion`: A goal without a monetary value. Results show its conversions. - `value`: A goal with a monetary value. Results also show the value tied to each conversion.
  - Allowed values: `conversion`, `value`
- `scope` (enum, required) — The unit the goal counts conversions in. - `pageview`: A page view is recorded any time a visitor loads a site page. - `user`: A unique visitor who browses your site and sees your variation. A visitor who browses multiple times counts as one user. - `session`: A period of continuous activity by a unique visitor. If the visitor returns after 30 minutes or more of inactivity, a new session begins.
  - Allowed values: `pageview`, `user`, `session`
- `countingMethod` (enum, required) — How many conversions the goal counts. - `unique`: One conversion is counted per session or user, depending on the goal's `scope`. - `cumulative`: All conversions are counted per session or user, depending on the goal's `scope`.
  - Allowed values: `unique`, `cumulative`
- `source` (enum, required) — Where the goal comes from. - `site`: A site goal. Site goals apply to every optimization on the site, so each optimization has them without anyone adding them. - `existing`: A goal created outside this optimization that was added to it or chosen as a target goal. It isn't a site goal, and other optimizations can use it too. - `optimization`: A goal created in this optimization, such as the AutoGoal that Optimize creates with each optimization. Only this optimization has it.
  - Allowed values: `site`, `existing`, `optimization`

### OptimizeOptimizeIdOptimizationsGetResponsesContentApplicationJsonSchemaOptimizationsItemsIntervalsItemsGoalsItems

A goal. Results are measured against goals. If a visitor takes the action defined in a goal, that counts as a conversion.

- `goalId` (string, required) — The goal ID. Pass it as `goalId` to choose the goal a report measures.
- `name` (string, required) — The goal's name.
- `isPrimary` (boolean, required) — `true` for a target goal, a goal Optimize uses to measure success. An interval usually has one target goal, but it can have several or none. Other goals are used only for reporting.
- `metricType` (enum, required) — What the goal measures. - `conversion`: A goal without a monetary value. Results show its conversions. - `value`: A goal with a monetary value. Results also show the value tied to each conversion.
  - Allowed values: `conversion`, `value`
- `scope` (enum, required) — The unit the goal counts conversions in. - `pageview`: A page view is recorded any time a visitor loads a site page. - `user`: A unique visitor who browses your site and sees your variation. A visitor who browses multiple times counts as one user. - `session`: A period of continuous activity by a unique visitor. If the visitor returns after 30 minutes or more of inactivity, a new session begins.
  - Allowed values: `pageview`, `user`, `session`
- `countingMethod` (enum, required) — How many conversions the goal counts. - `unique`: One conversion is counted per session or user, depending on the goal's `scope`. - `cumulative`: All conversions are counted per session or user, depending on the goal's `scope`.
  - Allowed values: `unique`, `cumulative`

## Examples

**Response**

```json
{
  "optimizations": [
    {
      "optimizationId": "417200971",
      "name": "Don't Panic hero headline",
      "optimizationType": "test",
      "status": "live",
      "variationCount": 2,
      "intervals": [
        {
          "start": "2026-07-01T16:00:00.000Z",
          "goals": [
            {
              "goalId": "198042420",
              "name": "AutoGoal: click engagement",
              "isPrimary": true,
              "metricType": "conversion",
              "scope": "session",
              "countingMethod": "unique"
            }
          ],
          "end": "2026-08-15T17:30:00.000Z"
        },
        {
          "start": "2026-08-15T17:30:00.000Z",
          "goals": [
            {
              "goalId": "198042421",
              "name": "Towel purchase",
              "isPrimary": true,
              "metricType": "value",
              "scope": "session",
              "countingMethod": "unique"
            },
            {
              "goalId": "198042420",
              "name": "AutoGoal: click engagement",
              "isPrimary": false,
              "metricType": "conversion",
              "scope": "session",
              "countingMethod": "unique"
            }
          ]
        }
      ],
      "currentGoals": [
        {
          "goalId": "198042421",
          "name": "Towel purchase",
          "metricType": "value",
          "scope": "session",
          "countingMethod": "unique",
          "source": "site"
        },
        {
          "goalId": "198042425",
          "name": "Book club signup",
          "metricType": "conversion",
          "scope": "user",
          "countingMethod": "unique",
          "source": "existing"
        },
        {
          "goalId": "198042420",
          "name": "AutoGoal: click engagement",
          "metricType": "conversion",
          "scope": "session",
          "countingMethod": "unique",
          "source": "optimization"
        }
      ],
      "updatedAt": "2026-08-15T17:31:12.518Z"
    },
    {
      "optimizationId": "417200972",
      "name": "Welcome back, hoopy froods",
      "optimizationType": "personalize",
      "status": "live",
      "variationCount": 2,
      "intervals": [
        {
          "start": "2026-06-01T15:02:51.000Z",
          "goals": [
            {
              "goalId": "198042424",
              "name": "AutoGoal: On-page engagement",
              "isPrimary": true,
              "metricType": "conversion",
              "scope": "session",
              "countingMethod": "unique"
            }
          ]
        }
      ],
      "currentGoals": [
        {
          "goalId": "198042421",
          "name": "Towel purchase",
          "metricType": "value",
          "scope": "session",
          "countingMethod": "unique",
          "source": "site"
        },
        {
          "goalId": "198042424",
          "name": "AutoGoal: On-page engagement",
          "metricType": "conversion",
          "scope": "session",
          "countingMethod": "unique",
          "source": "optimization"
        }
      ],
      "updatedAt": "2026-06-01T15:02:47.206Z"
    },
    {
      "optimizationId": "417200973",
      "name": "Babel fish pricing page",
      "optimizationType": "aiOptimize",
      "status": "draft",
      "variationCount": 0,
      "intervals": [],
      "currentGoals": [
        {
          "goalId": "198042421",
          "name": "Towel purchase",
          "metricType": "value",
          "scope": "session",
          "countingMethod": "unique",
          "source": "site"
        },
        {
          "goalId": "198042426",
          "name": "AutoGoal: click engagement",
          "metricType": "conversion",
          "scope": "session",
          "countingMethod": "unique",
          "source": "optimization"
        }
      ]
    }
  ],
  "status": [
    "live",
    "draft"
  ],
  "nextCursor": "c2xhcnRpYmFydGZhc3Q"
}
```

**SDK Code**

```python Optimizations
import requests

url = "https://api.webflow.com/v2/optimize/117420042/optimizations"

querystring = {"status":"[\"live\",\"draft\"]","pageSize":"100","cursor":"c2xhcnRpYmFydGZhc3Q"}

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers, params=querystring)

print(response.json())
```

```javascript Optimizations
const url = 'https://api.webflow.com/v2/optimize/117420042/optimizations?status=%5B%22live%22%2C%22draft%22%5D&pageSize=100&cursor=c2xhcnRpYmFydGZhc3Q';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Optimizations
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.webflow.com/v2/optimize/117420042/optimizations?status=%5B%22live%22%2C%22draft%22%5D&pageSize=100&cursor=c2xhcnRpYmFydGZhc3Q"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Optimizations
require 'uri'
require 'net/http'

url = URI("https://api.webflow.com/v2/optimize/117420042/optimizations?status=%5B%22live%22%2C%22draft%22%5D&pageSize=100&cursor=c2xhcnRpYmFydGZhc3Q")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java Optimizations
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.webflow.com/v2/optimize/117420042/optimizations?status=%5B%22live%22%2C%22draft%22%5D&pageSize=100&cursor=c2xhcnRpYmFydGZhc3Q")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php Optimizations
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.webflow.com/v2/optimize/117420042/optimizations?status=%5B%22live%22%2C%22draft%22%5D&pageSize=100&cursor=c2xhcnRpYmFydGZhc3Q', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp Optimizations
using RestSharp;

var client = new RestClient("https://api.webflow.com/v2/optimize/117420042/optimizations?status=%5B%22live%22%2C%22draft%22%5D&pageSize=100&cursor=c2xhcnRpYmFydGZhc3Q");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift Optimizations
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.webflow.com/v2/optimize/117420042/optimizations?status=%5B%22live%22%2C%22draft%22%5D&pageSize=100&cursor=c2xhcnRpYmFydGZhc3Q")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```