Optimizely Projects API

Manage Feature Experimentation projects that serve as containers for flags, experiments, and environments.

Operations 5

GET /projects List projects #
POST /projects Create a project #
GET /projects/{project_id} Get a project #
PATCH /projects/{project_id} Update a project #
DELETE /projects/{project_id} Delete a project #

Documentation

Specifications

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/optimizely-projects-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

optimizely-projects-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Optimizely Projects API
  version: '2.0'
  description: 'Operations tagged Projects across 3 of this provider''s published API definitions: optimizely-feature-experimentation-openapi.yml, optimizely-web-experimentation-openapi.yml, optimizely-web-experimentation-optimizely-api-openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.optimizely.com/v2
  description: Optimizely REST API v2 Management Server
- url: https://api.optimizely.com/flags/v1
  description: Optimizely Flags API v1 Server
tags:
- name: Projects
  description: Manage Feature Experimentation projects that serve as containers for flags, experiments, and environments.
paths:
  /projects:
    get:
      operationId: listProjects
      summary: List projects
      description: Returns a list of all Feature Experimentation projects accessible to the authenticated user.
      tags:
      - Projects
      parameters:
      - $ref: '#/components/parameters/perPage'
      - $ref: '#/components/parameters/page'
      responses:
        '200':
          description: Successfully retrieved the list of projects
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Project'
        '401':
          description: Authentication credentials are missing or invalid
      security:
      - bearerAuth: []
    post:
      operationId: createProject
      summary: Create a project
      description: Creates a new Feature Experimentation project.
      tags:
      - Projects
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectInput'
      responses:
        '201':
          description: Project successfully created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
        '400':
          description: Invalid request body
        '401':
          description: Authentication credentials are missing or invalid
      security:
      - bearerAuth: []
    servers:
    - url: https://api.optimizely.com/v2
      description: Optimizely REST API v2 Management Server
    - url: https://api.optimizely.com/flags/v1
      description: Optimizely Flags API v1 Server
  /projects/{project_id}:
    get:
      operationId: getProject
      summary: Get a project
      description: Retrieves the details of a specific project by its unique identifier.
      tags:
      - Projects
      parameters:
      - $ref: '#/components/parameters/projectId'
      responses:
        '200':
          description: Successfully retrieved the project
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
        '401':
          description: Authentication credentials are missing or invalid
        '404':
          description: Project not found
      security:
      - bearerAuth: []
    patch:
      operationId: updateProject
      summary: Update a project
      description: Updates the specified project with the provided fields.
      tags:
      - Projects
      parameters:
      - $ref: '#/components/parameters/projectId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectInput'
      responses:
        '200':
          description: Project successfully updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
        '400':
          description: Invalid request body
        '401':
          description: Authentication credentials are missing or invalid
        '404':
          description: Project not found
      security:
      - bearerAuth: []
    delete:
      operationId: deleteProject
      summary: Delete a project
      description: Permanently deletes the specified project and all associated resources including experiments, audiences, and events.
      tags:
      - Projects
      parameters:
      - $ref: '#/components/parameters/projectId'
      responses:
        '204':
          description: Project successfully deleted
        '401':
          description: Authentication credentials are missing or invalid
        '404':
          description: Project not found
      security:
      - bearerAuth: []
    servers:
    - url: https://api.optimizely.com/v2
      description: Optimizely REST API v2 Management Server
    - url: https://api.optimizely.com/flags/v1
      description: Optimizely Flags API v1 Server
components:
  parameters:
    projectId:
      name: project_id
      in: path
      required: true
      description: The unique identifier for the project
      schema:
        type: integer
        format: int64
    page:
      name: page
      in: query
      required: false
      description: Page number for pagination
      schema:
        type: integer
        default: 1
        minimum: 1
    perPage:
      name: per_page
      in: query
      required: false
      description: Number of results per page
      schema:
        type: integer
        default: 25
        minimum: 1
        maximum: 100
    page_2:
      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.

        '
      in: query
      name: page
      required: false
      schema:
        default: 1
        type: integer
    per_page:
      description: Optional pagination argument that specifies the maximum number of objects to return per request
      in: query
      name: per_page
      required: false
      schema:
        default: 25
        maximum: 100
        type: integer
  schemas:
    ProjectInput:
      type: object
      description: Input for creating or updating a project
      properties:
        name:
          type: string
          description: Human-readable name of the project
        status:
          type: string
          description: Current status of the project
          enum:
          - active
          - archived
    Project:
      type: object
      description: A Feature Experimentation project
      properties:
        id:
          type: integer
          format: int64
          description: Unique identifier for the project
        name:
          type: string
          description: Human-readable name of the project
        account_id:
          type: integer
          format: int64
          description: The account this project belongs to
        platform:
          type: string
          description: The platform type for this project
          enum:
          - custom
        status:
          type: string
          description: Current status of the project
          enum:
          - active
          - archived
        sdks:
          type: array
          description: List of SDKs configured for this project
          items:
            type: string
        created:
          type: string
          format: date-time
          description: Timestamp when the project was created
        last_modified:
          type: string
          format: date-time
          description: Timestamp when the project was last modified
    ProjectInput_2:
      type: object
      description: Input for creating or updating a project
      properties:
        name:
          type: string
          description: Human-readable name of the project
        platform:
          type: string
          description: The platform type for this project
          enum:
          - web
          - custom
        status:
          type: string
          description: Current status of the project
          enum:
          - active
          - archived
    Project_2:
      type: object
      description: An Optimizely project that contains experiments, audiences, and other resources
      properties:
        id:
          type: integer
          format: int64
          description: Unique identifier for the project
        name:
          type: string
          description: Human-readable name of the project
        account_id:
          type: integer
          format: int64
          description: The account this project belongs to
        platform:
          type: string
          description: The platform type for this project
          enum:
          - web
          - custom
        status:
          type: string
          description: Current status of the project
          enum:
          - active
          - archived
        created:
          type: string
          format: date-time
          description: Timestamp when the project was created
        last_modified:
          type: string
          format: date-time
          description: Timestamp when the project was last modified
        web_snippet:
          type: object
          description: Configuration for the JavaScript snippet
          properties:
            enable_force_variation:
              type: boolean
              description: Whether force variation is enabled
            exclude_disabled_experiments:
              type: boolean
              description: Whether to exclude disabled experiments from the snippet
            code_revision:
              type: integer
              description: Current revision of the snippet code
            js_file_size:
              type: integer
              description: Size of the JavaScript file in bytes
    Error:
      properties:
        code:
          type: string
        message:
          type: string
        messages:
          type: object
        uuid:
          format: uuid
          type: string
      type: object
    ProjectUpdate:
      properties:
        account_id:
          description: The ID of the account the Project is associated with
          example: 12345
          format: int64
          readOnly: true
          type: integer
        confidence_threshold:
          description: The significance level at which you would like to declare winning and losing variations. A lower number minimizes the time needed to declare a winning or losing variation, but increases the risk that your results aren't true winners and losers. The precision for this number is up to 4 decimal places.
          example: 0.9
          format: double
          maximum: 1
          minimum: 0.5
          type: number
        dcp_service_id:
          description: The ID of a Dynamic Customer Profile Service associated with this Project
          example: 121234
          format: int64
          type: integer
        description:
          description: A short description of the Project
          example: Project for user sign up flow
          type: string
        name:
          description: The name of the Project
          example: Test Project
          type: string
        status:
          description: The current status of the Project
          enum:
          - active
          - archived
          type: string
        web_snippet:
          $ref: '#/components/schemas/WebSnippetUpdate'
      type: object
    Project_3:
      properties:
        account_id:
          description: The account the Project is associated with
          example: 12345
          format: int64
          readOnly: true
          type: integer
        confidence_threshold:
          description: 'The significance level at which you would like to declare winning and losing variations. A lower number minimizes the time needed to declare a winning or losing variation, but increases the risk that your results aren''t true winners and losers. The precision for this number is up to 4 decimal places

            '
          example: 0.9
          format: double
          maximum: 1
          minimum: 0.5
          type: number
        created:
          description: The time that the Project was originally created
          format: date-time
          readOnly: true
          type: string
        dcp_service_id:
          description: The ID of a Dynamic Customer Profile Service associated with this Project
          example: 121234
          externalDocs:
            description: Dynamic Customer Profile Service
            url: https://developers.optimizely.com/rest/v1/#dcp_services
          format: int64
          type: integer
        description:
          description: A short description of the Project
          example: Project for user sign up flow
          type: string
        id:
          description: The unique identifier for the Project
          example: 1000
          format: int64
          readOnly: true
          type: integer
        is_classic:
          description: 'If `is_classic` is true it means that the project doesn''t have Optimizely X enabled. In other words: this project is Optimizely Classic only. The v2 REST API can only be used for Optimizely X objects (with the exception of Audiences and Projects, which can be shared between Optimizely X and Classic), so when `is_classic` is set to true you will need to use the v1 API

            '
          readOnly: true
          type: boolean
        is_flags_enabled:
          description: If is_flags_enabled is true, this project uses the new Flags-First user experience and will use the [Flags API](https://library.optimizely.com/docs/api/flags/v1/index.html) to make changes to entities.
          type: boolean
        last_modified:
          description: The time the Project was last modified
          format: date-time
          readOnly: true
          type: string
        name:
          description: The name of the Project
          example: Test Project
          type: string
        platform:
          default: web
          description: The platform of the Project
          enum:
          - web
          - ios
          - android
          - custom
          type: string
        sdks:
          description: For Full Stack, Mobile, and OTT projects, the language used for the SDK
          items:
            enum:
            - android
            - android_tv
            - ios
            - java
            - javascript
            - node
            - php
            - python
            - ruby
            - tv_os
            type: string
          type: array
        socket_token:
          description: The token used to identify your mobile app to Optimizely (mobile only)
          example: AABBCCDD~123456789
          readOnly: true
          type: string
        status:
          default: active
          description: The current status of the Project
          enum:
          - active
          - archived
          type: string
        third_party_platform:
          description: 'The third party platform with which the project is intended to be used. When this is set, a project might have special restrictions. This can have a value of "salesforce" but defaults to null. In order to set this field, an account must have the third party platforms feature and be a fullstack project.

            '
          enum:
          - salesforce
          type:
          - string
          - 'null'
        web_snippet:
          $ref: '#/components/schemas/WebSnippet'
      required:
      - name
      type: object
    WebSnippetUpdate:
      properties:
        enable_force_variation:
          description: Enables the option to force yourself into a specific variation on any page
          externalDocs:
            description: force yourself into a specific variation
            url: https://help.optimizely.com/hc/en-us/articles/202480860#force_variations
          type: boolean
        exclude_disabled_experiments:
          description: Set to true to remove paused and draft Experiment from the snippet
          externalDocs:
            description: paused and draft Experiment
            url: https://help.optimizely.com/Set_Up_Optimizely/Project_Settings%3A_Privacy#draft_pause
          type: boolean
        exclude_names:
          description: Set to true to mask descriptive names
          externalDocs:
            description: mask descriptive names
            url: https://help.optimizely.com/Set_Up_Optimizely/Project_Settings%3A_Privacy#masking_descriptive_names
          type: boolean
        include_jquery:
          description: Set to true to include jQuery in your snippet
          type: boolean
        ip_anonymization:
          description: Set to true to change the last octet of IP addresses to 0 prior to logging
          type: boolean
        ip_filter:
          description: A regular expression (max 1500 characters) matching ip addresses for filtering out visitors. Matching visitors will still see the Experiment, but they won't be counted in results.
          example: ^206\.23\.100\.([5-9][0-9]|1([0-4][0-9]|50))$
          externalDocs:
            description: filtering out visitors
            url: https://help.optimizely.com/hc/en-us/articles/200040595-IP-Filtering
          type: string
        library:
          description: The prefered jQuery library version you would like to use with your snippet. If you do not want to include jQuery, set include_jquery to false
          enum:
          - jquery-1.11.3-trim
          - jquery-1.11.3-full
          - jquery-1.6.4-trim
          - jquery-1.6.4-full
          - none
          type: string
        project_javascript:
          description: The javascript code which runs before Optimizely on all pages, regardless of whether or not there is a running Experiment
          example: alert("Active Experiment")
          type: string
        visitor_id_locator_name:
          description: (BETA) The name of said identifier that locates the visitor id
          example: cookie_name
          type:
          - string
          - 'null'
        visitor_id_locator_type:
          description: (BETA) The type of identifer where the visitor id is located (e.g. cookies, query param)
          enum:
          - cookie
          - query
          - localStorage
          - js
          type:
          - string
          - 'null'
      type: object
    WebSnippet:
      properties:
        code_revision:
          description: The current revision number of the Project snippet
          readOnly: true
          type: integer
        enable_force_variation:
          default: false
          description: Enables the option to force yourself into a specific variation on any page
          externalDocs:
            description: force yourself into a specific variation
            url: https://help.optimizely.com/hc/en-us/articles/202480860#force_variations
          type: boolean
        exclude_disabled_experiments:
          default: false
          description: Set to true to remove paused and draft Experiment from the snippet
          externalDocs:
            description: paused and draft Experiment
            url: https://help.optimizely.com/Set_Up_Optimizely/Project_Settings%3A_Privacy#draft_pause
          type: boolean
        exclude_names:
          default: true
          description: Set to true to mask descriptive names
          externalDocs:
            description: mask descriptive names
            url: https://help.optimizely.com/Set_Up_Optimizely/Project_Settings%3A_Privacy#masking_descriptive_names
          type: boolean
        include_jquery:
          default: true
          description: Set to true to include jQuery in your snippet
          type: boolean
        ip_anonymization:
          default: false
          description: Set to true to change the last octet of IP addresses to 0 prior to logging
          type: boolean
        ip_filter:
          description: A regular expression (max 1500 characters) matching ip addresses for filtering out visitors. Matching visitors will still see the Experiment, but they won't be counted in results.
          example: ^206\.23\.100\.([5-9][0-9]|1([0-4][0-9]|50))$
          externalDocs:
            description: filtering out visitors
            url: https://help.optimizely.com/hc/en-us/articles/200040595-IP-Filtering
          type: string
        js_file_size:
          description: The current size in bytes of the Project snippet
          example: 63495
          readOnly: true
          type: integer
        library:
          default: jquery-1.11.3-trim
          description: The prefered jQuery library version you would like to use with your snippet. If you do not want to include jQuery, set include_jquery to false
          enum:
          - jquery-1.11.3-trim
          - jquery-1.11.3-full
          - jquery-1.6.4-trim
          - jquery-1.6.4-full
          - none
          type: string
        project_javascript:
          description: The javascript code which runs before Optimizely on all pages, regardless of whether or not there is a running Experiment
          example: alert("Active Experiment")
          type: string
        visitor_id_locator_name:
          description: (BETA) The name of said identifier that locates the visitor id
          example: cookie_name
          type:
          - string
          - 'null'
        visitor_id_locator_type:
          description: (BETA) The type of identifer where the visitor id is located (e.g. cookies, query param)
          enum:
          - cookie
          - query
          - localStorage
          - js
          type:
          - string
          - 'null'
      type: object
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: OAuth 2.0 Bearer token or personal access token for authentication.
    OAuth2:
      description: Write applications that authenticate with the REST API via OAuth 2.0. Or, to authenticate using a personal token, see https://docs.developers.optimizely.com/web/docs/personal-token
      flows:
        authorizationCode:
          authorizationUrl: https://app.optimizely.com/oauth2/authorize
          scopes:
            all: Full access to your account
          tokenUrl: https://app.optimizely.com/oauth2/token
      type: oauth2
    apiKey:
      scheme: bearer
      type: http
x-refined-from:
- optimizely-feature-experimentation-openapi.yml
- optimizely-web-experimentation-openapi.yml
- optimizely-web-experimentation-optimizely-api-openapi.json