Optimizely Users API

User Management

Operations 10

Each operation below carries the questions people ask an LLM about it and the instructions they give an agent to run it. Generated by API Evangelist overlay

GET /{clientId}/users/authenticated Get the currently authenticated Campaign user · Get basic information of an authenticated user #
Ask an LLM
“How do I check which user my Campaign credentials are signed in as?”
“What basic info can I get about the authenticated user for a client?”
Tell an agent
Show the authenticated user for client {clientId}.
Tell me who I am logged in as on Campaign client {clientId}.
POST /{clientId}/users/rotatepassword Rotate a Campaign user's password · Rotate a password. #
Ask an LLM
“How do I rotate the password for a Campaign API user?”
“Why can't I log in right after rotating a password?”
Tell an agent
Rotate the password of user {username} on client {clientId} to {password}.
Set a new password {password} for Campaign user {username} under client {clientId}.
GET /userlist List users page by page · GET /userlist #
Ask an LLM
“How can I page through the full list of users?”
“Can I control the page size when listing users?”
Tell an agent
List users, {page_size} per page.
Get the user list starting at offset {offset}.
GET /users Find a user by email address · GET /users #
Ask an LLM
“Is there a user registered with a particular email address?”
“Can I look up a user when I only know their email?”
Tell an agent
Find the user with email {email}.
Look up whoever is registered as {email}.
POST /users Create a new user · Create a new user #
Ask an LLM
“What fields are supported when creating a user?”
“Can I attach identifiers and additional info to a new user?”
Tell an agent
Create a user with email {email}.
Add a new user {email} with identifiers {identifiers}.
GET /users/{id} Get a user by id · GET /users/{id} #
Ask an LLM
“How do I fetch one user's profile by their id?”
“What does a single user record contain?”
Tell an agent
Get user {id}.
Show the profile for user {id}.
PUT /users/{id} Update an existing user · Update user #
Ask an LLM
“Which user fields can actually be changed after creation?”
“Can I update a user's additional info?”
Tell an agent
Update user {id} additional info to {additional_info}.
Set the identifiers on user {id} to {identifiers}.
DELETE /users/{id} Permanently delete a user · Delete user #
Ask an LLM
“How do I permanently remove a user?”
“Is deleting a user reversible?”
Tell an agent destructive · confirm first
Delete user {id} permanently.
Remove user {id} from the system.
GET /users/{id}/content Get personalised content recommendations for a user · Fetch personalised content #
Ask an LLM
“What content is most relevant to a particular user?”
“Can I get personalised recommendations without a generic fallback?”
Tell an agent
Get personalised content for user {id}.
Recommend {rpp} content items for user {id} with topics included.
POST /users/{id}/content/_filter Search a user's content with a Lucene query · Search user content #
Ask an LLM
“Can I filter a user's personalised content with a Lucene query?”
“How do I search content ranked by relevance to one user?”
Tell an agent
Search content for user {id} matching {query}.
Find items matching Lucene query {query} ranked for user {id}.

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:optimizely-users-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 form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

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

OpenAPI Specification

optimizely-users-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Optimizely Users API
  version: '1.0'
  description: 'Operations tagged Users across 3 of this provider''s published API definitions: optimizely-campaign-optimizely-campaign-rest-api-openapi.json, optimizely-content-marketing-platform-optimizely-cmp-open-api-documentation-openapi.json, optimizely-recommendations-public-api-spec-openapi.yaml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.campaign.episerver.net/rest
- url: https://api.cmp.optimizely.com/v3
  description: v3 version of Optimizely CMP Open API
- url: https://{hostname}/1.0
  description: Primary API server
  variables:
    hostname:
      default: api.usea01.idio.episerver.net
      enum:
      - api.apac01.idio.episerver.net
      - api.caea01.idio.episerver.net
      - api.emea01.idio.episerver.net
      - api.usea01.idio.episerver.net
tags:
- name: Users
  description: User Management
paths:
  /{clientId}/users/authenticated:
    get:
      tags:
      - Users
      summary: Get basic information of an authenticated user
      operationId: getAuthenticatedUser
      parameters:
      - name: clientId
        in: path
        description: Client ID
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: The user is properly authenticated to use this client. The body contains a description of the authenticated user.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticatedUser'
            application/vnd.optivo.broadmail.v1+json:
              schema:
                $ref: '#/components/schemas/AuthenticatedUser'
      security:
      - Authorization: []
    servers:
    - url: https://api.campaign.episerver.net/rest
  /{clientId}/users/rotatepassword:
    post:
      tags:
      - Users
      summary: Rotate a password.
      operationId: rotatePassword
      parameters:
      - name: clientId
        in: path
        description: Client ID
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/UserRequestData'
      responses:
        '202':
          description: The request for password rotation was accepted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RestUser'
            application/vnd.optivo.broadmail.v1+json:
              schema:
                $ref: '#/components/schemas/RestUser'
        '400':
          description: The password could not be rotated (incomplete or wrong request).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RestUser'
            application/vnd.optivo.broadmail.v1+json:
              schema:
                $ref: '#/components/schemas/RestUser'
      security:
      - Authorization: []
    servers:
    - url: https://api.campaign.episerver.net/rest
  /userlist:
    get:
      operationId: listUsers
      tags:
      - Users
      summary: GET /userlist
      description: Get list of users.
      parameters:
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/page_size'
      responses:
        '200':
          description: List of users
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserListResponse'
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - url: https://api.cmp.optimizely.com/v3
      description: v3 version of Optimizely CMP Open API
  /users:
    get:
      operationId: findUserByEmail
      tags:
      - Users
      summary: GET /users
      description: Find a user by email address
      parameters:
      - name: email
        in: query
        required: true
        schema:
          type: string
          description: Email address of the user
        example: john.doe@example.com
      responses:
        '302':
          description: Redirect to the discovered user
          headers:
            Location:
              schema:
                type: string
              description: URL of the discovered user
              example: https://api.cmp.optimizely.com/v3/users/5fe4925ef8a9378056bf4e37
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    post:
      operationId: userCreate
      summary: Create a new user
      description: Create a new user. Only 'identifiers' and 'additional_info' fields are supported.
      tags:
      - Users
      requestBody:
        required: true
        description: A user
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserPartial'
      responses:
        '201':
          description: User created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserStub'
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - url: https://api.cmp.optimizely.com/v3
      description: v3 version of Optimizely CMP Open API
  /users/{id}:
    get:
      operationId: getUser
      tags:
      - Users
      summary: GET /users/{id}
      description: Get a user
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          description: Unique identifier of the user
        example: 5fe4925ef8a9378056bf4e37
      responses:
        '200':
          description: Fetched user
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserResponse'
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    parameters:
    - $ref: '#/components/parameters/userID'
    put:
      operationId: userUpdate
      summary: Update user
      description: Update an existing user. Only 'identifiers' and 'additional_info' fields are supported.
      tags:
      - Users
      requestBody:
        required: true
        description: A user
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserPartial'
      responses:
        '200':
          description: User updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Message'
              example:
                message: User 1 updated successfully
        '404':
          description: User does not exist
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    delete:
      operationId: userDelete
      summary: Delete user
      description: Permanently delete the specified user.
      tags:
      - Users
      responses:
        '200':
          description: Deletion successful.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Message'
              example:
                message: User 1 deleted successfully
        '404':
          description: User does not exist
      security:
      - OAuth2:
        - openid
        - profile
        - offline_access
    servers:
    - url: https://api.cmp.optimizely.com/v3
      description: v3 version of Optimizely CMP Open API
  /users/{id}/content:
    parameters:
    - $ref: '#/components/parameters/userID'
    get:
      operationId: userContentList
      summary: Fetch personalised content
      description: Paginated list of personalised content ordered by relevance to the specified user.
      tags:
      - Users
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/rpp'
      - $ref: '#/components/parameters/topics'
      - $ref: '#/components/parameters/no_fallback'
      - $ref: '#/components/parameters/record'
      responses:
        '200':
          $ref: '#/components/responses/UserContentList'
        '204':
          description: No content in system
        '404':
          description: User does not exist
      security:
      - key: []
    servers:
    - url: https://{hostname}/1.0
      description: Primary API server
      variables:
        hostname:
          default: api.usea01.idio.episerver.net
          enum:
          - api.apac01.idio.episerver.net
          - api.caea01.idio.episerver.net
          - api.emea01.idio.episerver.net
          - api.usea01.idio.episerver.net
  /users/{id}/content/_filter:
    parameters:
    - $ref: '#/components/parameters/userID'
    post:
      operationId: userContentSearch
      summary: Search user content
      description: Paginated list of content matching a Lucene query ordered by relevance to the user.
      tags:
      - Users
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/rpp'
      - $ref: '#/components/parameters/topics'
      requestBody:
        required: true
        description: Lucene query
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContentQuery'
      responses:
        '200':
          $ref: '#/components/responses/UserContentList'
        '204':
          description: No content matching query
        '404':
          description: User does not exist
      security:
      - key: []
    servers:
    - url: https://{hostname}/1.0
      description: Primary API server
      variables:
        hostname:
          default: api.usea01.idio.episerver.net
          enum:
          - api.apac01.idio.episerver.net
          - api.caea01.idio.episerver.net
          - api.emea01.idio.episerver.net
          - api.usea01.idio.episerver.net
components:
  schemas:
    UserRequestData:
      required:
      - password
      - username
      type: object
      properties:
        username:
          type: string
          description: Campaign user name
        password:
          type: string
          description: New password
    RestUser:
      type: object
      properties:
        userName:
          type: string
          description: User Name
        lastPasswordChange:
          type: string
          description: Date of last password change
          format: date-time
    AuthenticatedUser:
      type: object
      properties:
        id:
          type: integer
          description: User id
          format: int64
        username:
          type: string
          description: User name
        email:
          type: string
          description: User email
    UserResponse:
      type: object
      additionalProperties: false
      properties:
        id:
          type: string
          description: Unique identifier of the user
          example: 5fe4925ef8a9378056bf4e37
        first_name:
          type: string
          description: First name of the user
          example: John
        last_name:
          type: string
          description: Last name of the user
          example: Doe
        full_name:
          type: string
          description: Full name of the user
          example: John Doe
        email:
          type:
          - string
          - 'null'
          description: Email of the user – null unless the application is configured to expose the user email
          example: john.doe@example.com
        image_url:
          type:
          - string
          - 'null'
          description: URL of the profile picture of the user – null if the user has not provided an image
          example: https://images.cmp.optimizely.com/6a485f72ba424f9397c71ddf0cfb8f59
        links:
          type: object
          additionalProperties: false
          description: Meta links
          properties:
            self:
              type: string
              description: URL of the user
              example: https://api.cmp.optimizely.com/v3/users/5fe4925ef8a9378056bf4e37
      required:
      - id
      - first_name
      - last_name
      - full_name
      - email
      - image_url
    Pagination:
      type: object
      additionalProperties: false
      description: Pagination related information
      properties:
        next:
          type:
          - string
          - 'null'
          description: URL to the next page
          example: https://api.cmp.optimizely.com/<some-path-to-next-page>?offset=10&page_size=10
        previous:
          type:
          - string
          - 'null'
          description: URL to the previous page
          example: null
      required:
      - next
      - previous
    Error:
      type: object
      additionalProperties: true
      description: Error payload
      properties:
        message:
          type: string
          description: Message describing the error
          example: Not found
        errors:
          type: object
          description: Additional information
          additionalProperties: true
          properties: {}
      required:
      - message
    UserListResponse:
      type: object
      additionalProperties: false
      properties:
        data:
          description: List of users
          type: array
          items:
            allOf:
            - $ref: '#/components/schemas/UserListResponseItem'
            - type: object
              properties:
                links:
                  type: object
                  description: Meta links
                  properties:
                    self:
                      type: string
                      description: URL of the user
                      example: https://api.cmp.optimizely.com/v3/users/9119a313057e401189407116fcd3aa24
                  required:
                  - self
              required:
              - links
        pagination:
          allOf:
          - $ref: '#/components/schemas/Pagination'
          - type: object
            properties:
              next:
                type:
                - string
                - 'null'
                example: https://api.cmp.optimizely.com/v3/users?offset=10&page_size=10
      required:
      - data
      - pagination
    UserListResponseItem:
      type: object
      additionalProperties: false
      properties:
        id:
          type: string
          description: Unique identifier of the user
          example: 5fe4925ef8a9378056bf4e37
        first_name:
          type: string
          description: First name of the user
          example: John
        last_name:
          type: string
          description: Last name of the user
          example: Doe
        full_name:
          type: string
          description: Full name of the user
          example: John Doe
        image_url:
          type:
          - string
          - 'null'
          description: URL of the profile picture of the user - null if the user has not provided an image
          example: https://images.cmp.optimizely.com/6a485f72ba424f9397c71ddf0cfb8f59
        links:
          type: object
          additionalProperties: false
          description: Meta links
          properties:
            self:
              type: string
              description: URL of the user
              example: https://api.cmp.optimizely.com/v3/users/5fe4925ef8a9378056bf4e37
          required:
          - self
        roles:
          type: array
          description: List of roles assigned to the user
          items:
            type: object
            additionalProperties: false
            properties:
              name:
                type: string
                description: Name of the role
                example: Creator
            required:
            - name
      required:
      - id
      - roles
      - first_name
      - last_name
      - full_name
      - image_url
      - links
    ContentMainImage:
      type: object
      additionalProperties: false
      required:
      - width
      - height
      properties:
        width:
          type: integer
          description: Image width in pixels.
        height:
          type: integer
          description: Image height in pixels.
    UserCore:
      type: object
      additionalProperties: false
      required:
      - email
      properties:
        first_name:
          type: string
          description: First name of the user.
          example: Jordan
        last_name:
          type: string
          description: Last name of the user.
          example: Lee
        email:
          type: string
          format: email
          description: User's email address.
          example: jordan.lee@example.com
        service_credentials:
          $ref: '#/components/schemas/ServiceCredentials'
        additional_info:
          $ref: '#/components/schemas/Map'
        identifiers:
          $ref: '#/components/schemas/Map'
    ContentMetadata:
      type: object
      description: Metadata for a content item, such as language and tags.
      properties:
        language:
          type: string
          enum:
          - de
          - en
          - es
          - fr
          - it
          description: Language of the content.
        tags:
          type: object
          description: Arbitrary namespaced tags associated with the content. Values may be strings or arrays of strings (for example, multiple authors).
          additionalProperties: true
    User:
      allOf:
      - $ref: '#/components/schemas/UserCore'
      - type: object
        additionalProperties: false
        required:
        - first_name
        - last_name
        - name
        - service_credentials
        - additional_info
        - identifiers
        properties:
          name:
            type: string
            description: Full name of the user.
            example: Jordan Lee
    ServiceCredential:
      type: object
      additionalProperties: false
      required:
      - service
      properties:
        service:
          type: string
          enum:
          - facebook
          - twitter
          - linkedin
          description: The third-party service this credential belongs to.
      discriminator:
        propertyName: service
    ContentItemMinimal:
      type: object
      additionalProperties: false
      properties:
        title:
          type: string
          description: Title of the content item.
        abstract:
          type: string
          description: Short summary or abstract of the content.
        featured:
          type: boolean
          description: Indicates whether the content is featured.
        approved:
          type: string
          enum:
          - approved
          - unapproved
          - binned
          description: Approval status of the content.
        read:
          type: boolean
          description: Whether the content is marked as read.
        published:
          type: string
          format: date-time
          description: Date and time when the content was published.
        original_url:
          type: string
          format: url
          description: Original source URL of the content.
    Map:
      type: object
      additionalProperties:
        type: string
    ContentTopic:
      type: object
      additionalProperties: false
      required:
      - id
      - title
      - full_details_url
      properties:
        id:
          type: integer
          description: Unique identifier of the topic.
        title:
          type: string
          description: Topic title.
        full_details_url:
          type: string
          format: url
          description: API link to full topic details.
    UserContentList:
      allOf:
      - $ref: '#/components/schemas/ContentList'
      - type: object
        additionalProperties: false
        required:
        - model
        - group
        properties:
          recommendation_id:
            type: string
            format: uuid
            description: Unique identifier for the recommendation set.
          model:
            type: boolean
            description: Indicates whether a recommendation model was applied.
          group:
            type: string
            enum:
            - control
            - test
            description: A/B test group identifier.
    UserStub:
      type: object
      additionalProperties: false
      required:
      - id
      - full_details_url
      properties:
        id:
          type: integer
          description: Unique identifier of the user.
          example: 301
        full_details_url:
          type: string
          format: url
          description: API URL to fetch full user details.
          example: https://api.usea01.idio.episerver.net/1.0/users/301
    ContentQuery:
      type: object
      additionalProperties: false
      required:
      - query
      description: Object containing a Lucene query string used to search or filter content.
      properties:
        query:
          type: string
          description: Lucene query string. Use the platform's Lucene dialect for advanced filtering.
          example: title:AI AND language:en
    ServiceCredentials:
      type: array
      uniqueItems: true
      items:
        $ref: '#/components/schemas/ServiceCredential'
    UserPartial:
      allOf:
      - $ref: '#/components/schemas/UserCore'
      - type: object
        additionalProperties: false
    ContentList:
      description: A paginated list of content items with navigation metadata.
      allOf:
      - $ref: '#/components/schemas/List'
      - type: object
        additionalProperties: false
        required:
        - content
        properties:
          content:
            type: array
            description: The list of content items for the current page.
            uniqueItems: true
            items:
              $ref: '#/components/schemas/ContentItem'
    Message:
      type: object
      additionalProperties: false
      required:
      - message
      description: Generic message response object returned by the API.
      properties:
        message:
          type: string
          description: The message content.
          example: User updated successfully.
    ContentSource:
      type: object
      additionalProperties: false
      required:
      - id
      - title
      - full_details_url
      - display
      description: The source (origin) of the content.
      properties:
        id:
          type: integer
          description: Unique identifier of the source.
        title:
          type: string
          description: Display name of the source.
        full_details_url:
          type: string
          format: url
          description: API URL for full source details.
        display:
          type: string
          enum:
          - full
          - abstract
          - link
          description: How the source should be displayed.
    ContentItem:
      allOf:
      - $ref: '#/components/schemas/ContentItemMinimal'
      - type: object
        additionalProperties: false
        required:
        - id
        - title
        - abstract
        - featured
        - approved
        - read
        - published
        - original_url
        - metadata
        - link_url
        - full_details_url
        - main_image_url
        - main_image
        - source
        - author
        properties:
          id:
            type: integer
            description: Unique identifier of the content item.
          metadata:
            $ref: '#/components/schemas/ContentMetadata'
          topics:
            type: array
            uniqueItems: true
            description: Topic information associated with the content.
            items:
              $ref: '#/components/schemas/ContentTopic'
          link_url:
            type: string
            format: url
            description: URL to the live content link.
          full_details_url:
            type: string
            format: url
            description: API URL for full details of the content.
          main_image_url:
            type: string
            format: url
            description: URL to the main image of the content.
          main_image:
            $ref: '#/components/schemas/ContentMainImage'
          source:
            $ref: '#/components/schemas/ContentSource'
          author:
            $ref: '#/components/schemas/ContentAuthor'
    List:
      type: object
      description: Base pagination metadata object.
      additionalProperties: false
      required:
      - total_hits
      properties:
        total_hits:
          type: integer
          description: Total number of items matching the query.
        next_page:
          type: string
          format: url
          description: Link to the next page of results, if available.
        previous_page:
          type: string
          format: url
          description: Link to the previous page of results, if available.
    ContentAuthor:
      type: object
      additionalProperties: false
      required:
      - id
      - title
      - full_details_url
      properties:
        id:
          type: integer
          description: Unique identifier of the author.
        title:
          type: string
          description: Name of the author.
        full_details_url:
          type: string
          format: url
          description: API URL for full author details.
  responses:
    NotFound:
      description: Not found error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: Resource not found
    ClientError:
      description: Client error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: 'Unsupported arguments: a,b,c'
    Unauthorized:
      description: Authorization error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: Unauthorized
    Forbidden:
      description: Permission error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: You do not have the permission to perform this operation
    UserContentList:
      description: A list of content accompanied by metadata for navigation and recommendation tracking.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/UserContentList'
          example:
            total_hits: 42
            next_page: https://api.usea01.idio.episerver.net/1.0/users/1234/content?page=2&rpp=10
            previous_page: null
            recommendation_id: 8f14e45f-ceea-467a-9575-6c1e3d2a7b9c
            model: true
            group: test
            content:
            - id: 987654
              title: The Future of Enterprise Personalisation
              abstract: How content recommendations drive engagement across digital channels.
              featured: true
              approved: approved
              read: false
              published: '2026-05-14T09:30:00Z'
              original_url: https://www.example.com/blog/future-of-personalisation
              link_url: https://www.example.com/blog/future-of-personalisation
              full_details_url: https://api.usea01.idio.episerver.net/1.0/content/987654
              main_image_url: https://images.example.com/987654/main.jpg
              main_image:
                width: 1200
                height: 630
              metadata:
                language: en
              source:
                id: 55
                title: Company Blog
                full_details_url: https://api.usea01.idio.episerver.net/1.0/sources/55
                display: full
              author:
                id: 21
                title: Jordan Lee
                full_details_url: https://api.usea01.idio.episerver.net/1.0/authors/21
              topics:
              - id: 301
                title: Personalisation
                full_details_url: https://api.usea01.idio.episerver.net/1.0/topics/301
  parameters:
    offset:
      name: offset
      in: query
      description: Starting index of results (zero indexed)
      schema:
        type: integer
        minimum: 0
        default: 0
      example: 5
    page_size:
      name: page_size
      in: query
      description: Number of results to return per page
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 10
      example: 15
    userID:
      name: id
      in: path
      required: true
      description: User identifier (numeric ID or 'identifier:value' format).
      schema:
        type: string
        example: email:john.doe@example.com
    no_fallback:
      name: no_fallback
      in: query
      description: Avoid generic response
      allowEmptyValue: true
      schema:
        type: boolean
    topics:
      name: include_topics
      in: query
      description: Whether to include topic information in the response.
      allowEmptyValue: true
      schema:
        type: boolean
    record:
      name: record
      in: query
      description: Recommendation tracking method
      schema:
        type: string
        enum:
        - 'true'
        - 'false'
        - pending
    rpp:
      name: rpp
      in: query
      description: Results per page for pagination.
      schema:
        type: integer
    page:
      name: page
      in: query
      description: Page number for pagination (1-based index).
      schema:
        type: integer
        example: 2
  securitySchemes:
    Authorization:
      type: apiKey
      name: Authorization
      in: header
    OAuth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://accounts.cmp.optimizely.com/o/oauth2/v1/auth
          tokenUrl: https://accounts.cmp.optimizely.com/o/oauth2/v1/token
          scopes:
            openid: Grants the ability to receive a unique identifier for the user.
            profile: Grants access to user profile information.
            offline_access: Grants the ability to refresh access_token using the refresh token even when user is not present (not logged in).
        clientCredentials:
          tokenUrl: https://accounts.cmp.optimizely.com/o/oauth2/v1/token
          scopes: {}
    key:
      type: apiKey
      in: query
      name: key
      description: API key required for authentication. Must be provided as a query parameter, for example, `?key=YOUR_API_KEY`.
x-refined-from:
- optimizely-campaign-optimizely-campaign-rest-api-openapi.json
- optimizely-content-marketing-platform-optimizely-cmp-open-api-documentation-openapi.json
- optimizely-recommendations-public-api-spec-openapi.yaml