Sitecore Content Hub REST API

The Sitecore Content Hub REST API is a hypermedia API built on HTTP that provides programmatic access to the full range of Content Hub resources, including entities, assets, jobs, search, selections, and audit logs. Developers use it to automate digital asset management workflows, migrate content, build custom integrations, and manage Content Hub configuration. The API supports standard CRUD operations and is authenticated using OAuth 2.0 tokens obtained from the Content Hub identity provider.

OpenAPI Specification

sitecore-content-hub-rest-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Sitecore Content Hub REST API
  description: >-
    The Sitecore Content Hub REST API is a hypermedia API built on HTTP that
    provides programmatic access to the full range of Content Hub resources,
    including entities, assets, jobs, search, selections, upload, and audit logs.
    Developers use it to automate digital asset management workflows, migrate
    content, build custom integrations, and manage Content Hub configuration.
    The API supports standard CRUD operations and is authenticated using OAuth 2.0
    tokens obtained from the Content Hub identity provider. Navigation between
    resources uses hyperlinks rather than hardcoded URL patterns. The base URL is
    tenant-specific and corresponds to the URL of the Content Hub instance followed
    by /api/.
  version: 'v1'
  contact:
    name: Sitecore Support
    url: https://www.sitecore.com/support
  termsOfService: https://www.sitecore.com/legal/terms-of-service
externalDocs:
  description: Sitecore Content Hub REST API Documentation
  url: https://doc.sitecore.com/ch/en/developers/cloud-dev/rest-apis.html
servers:
  - url: https://{tenant}.stylelabs.io/api
    description: Content Hub Production Server
    variables:
      tenant:
        description: The tenant-specific subdomain for the Content Hub instance
        default: your-tenant
tags:
  - name: Audit
    description: >-
      Endpoints for retrieving and querying audit log entries that track changes
      to entities and configuration within the Content Hub instance.
  - name: Download Orders
    description: >-
      Endpoints for creating and managing download orders that package assets
      for delivery, supporting both single and batch asset downloads.
  - name: Entities
    description: >-
      Endpoints for performing CRUD operations on Content Hub entities including
      assets, taxonomy nodes, content items, and all other entity types managed
      within the platform.
  - name: Jobs
    description: >-
      Endpoints for managing background job targets including retrieval, creation,
      update, and deletion of job configurations.
  - name: Querying
    description: >-
      Endpoints for fetching entities that match specific criteria using structured
      query expressions against entity properties and relations.
  - name: Search
    description: >-
      Endpoints for executing search queries against the Content Hub entity index,
      retrieving facet values, and managing search filters.
  - name: Selections
    description: >-
      Endpoints for managing entity selections across selection pools, allowing
      grouping of entities for bulk operations or editorial workflows.
  - name: Upload
    description: >-
      Endpoints for uploading digital assets into Content Hub, including creating
      upload requests, uploading binary content, and completing asset ingest.
security:
  - bearerAuth: []
paths:
  /entities:
    get:
      operationId: listEntities
      summary: List entities
      description: >-
        Retrieves a paginated list of entities from the Content Hub. Supports
        filtering by entity definition, property values, and relations. The
        response includes hyperlinks for navigating to related resources.
      tags:
        - Entities
      parameters:
        - name: definition
          in: query
          description: Filter entities by their entity definition identifier
          required: false
          schema:
            type: string
        - name: skip
          in: query
          description: Number of entities to skip for pagination
          required: false
          schema:
            type: integer
            minimum: 0
            default: 0
        - name: take
          in: query
          description: Maximum number of entities to return
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 25
        - name: culture
          in: query
          description: Culture code for multi-lingual property values (e.g., en-US)
          required: false
          schema:
            type: string
      responses:
        '200':
          description: A paginated list of entities
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntityListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createEntity
      summary: Create an entity
      description: >-
        Creates a new entity in Content Hub according to the specified entity
        definition. The entity type is determined by the definition identifier
        provided in the request body. Properties and relations are set according
        to the definition schema.
      tags:
        - Entities
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEntityRequest'
      responses:
        '201':
          description: Entity created successfully
          headers:
            Location:
              description: The URL of the newly created entity
              schema:
                type: string
                format: uri
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Entity'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'

  /entities/{id}:
    get:
      operationId: getEntity
      summary: Get an entity
      description: >-
        Retrieves a specific entity by its numeric identifier. Returns the entity
        with all its properties, relations, and hypermedia links. Use the culture
        parameter to retrieve localized property values.
      tags:
        - Entities
      parameters:
        - $ref: '#/components/parameters/entityId'
        - name: culture
          in: query
          description: Culture code for localized properties (e.g., en-US)
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Entity details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Entity'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateEntity
      summary: Update an entity
      description: >-
        Performs a full replacement update of an entity. All properties and
        relations are replaced with the values in the request body. Missing
        optional properties will be cleared.
      tags:
        - Entities
      parameters:
        - $ref: '#/components/parameters/entityId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEntityRequest'
      responses:
        '200':
          description: Entity updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Entity'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteEntity
      summary: Delete an entity
      description: >-
        Permanently deletes an entity from Content Hub. This operation is
        irreversible. Assets that are in use or have active relations may
        require the relations to be removed first.
      tags:
        - Entities
      parameters:
        - $ref: '#/components/parameters/entityId'
      responses:
        '204':
          description: Entity deleted successfully
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'

  /entities/{id}/lifecycle:
    put:
      operationId: updateEntityLifecycle
      summary: Update entity lifecycle state
      description: >-
        Updates the lifecycle state of an entity such as an asset. Lifecycle
        state transitions control the publishing workflow of assets within
        Content Hub (e.g., Draft, Approved, Published).
      tags:
        - Entities
      parameters:
        - $ref: '#/components/parameters/entityId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LifecycleRequest'
      responses:
        '200':
          description: Lifecycle state updated
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'

  /entities/query:
    post:
      operationId: queryEntities
      summary: Query entities
      description: >-
        Executes a structured query against the Content Hub entity index. Supports
        filtering by property values, relations, and entity definition using
        a query expression language. Returns matching entities with pagination.
      tags:
        - Querying
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EntityQuery'
      responses:
        '200':
          description: Query results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntityListResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'

  /search:
    post:
      operationId: searchEntities
      summary: Search entities
      description: >-
        Executes a full-text and structured search query across the Content Hub
        entity index. Returns matching entities with facet aggregations for
        interactive filtering. Supports relevance ranking and pagination.
      tags:
        - Search
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchRequest'
      responses:
        '200':
          description: Search results with facets
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'

  /upload:
    post:
      operationId: createUploadRequest
      summary: Create an upload request
      description: >-
        Initiates a new asset upload into Content Hub by creating an upload
        request. Returns a target URL and upload identifier used for the
        subsequent binary file upload step.
      tags:
        - Upload
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UploadRequest'
      responses:
        '200':
          description: Upload request created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'

  /jobs:
    get:
      operationId: listJobs
      summary: List jobs
      description: >-
        Retrieves a list of background job targets configured in the Content Hub
        instance. Jobs handle long-running operations such as asset processing,
        reporting, and data exports.
      tags:
        - Jobs
      parameters:
        - name: skip
          in: query
          description: Number of jobs to skip for pagination
          required: false
          schema:
            type: integer
            minimum: 0
        - name: take
          in: query
          description: Maximum number of jobs to return
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 100
      responses:
        '200':
          description: List of jobs
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'

  /selections:
    get:
      operationId: listSelections
      summary: List selections
      description: >-
        Retrieves all entity selections across selection pools. Selections group
        entities for bulk operations such as download, export, or editorial actions.
      tags:
        - Selections
      responses:
        '200':
          description: List of selections
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Selection'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createSelection
      summary: Create a selection
      description: >-
        Creates a new entity selection in a specified selection pool. Selections
        hold a list of entity identifiers for subsequent bulk operations.
      tags:
        - Selections
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSelectionRequest'
      responses:
        '201':
          description: Selection created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Selection'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'

  /audit:
    get:
      operationId: listAuditEntries
      summary: List audit log entries
      description: >-
        Retrieves and queries audit log entries that record all changes made to
        entities and configuration within the Content Hub instance. Supports
        filtering by entity, user, date range, and operation type.
      tags:
        - Audit
      parameters:
        - name: entityId
          in: query
          description: Filter audit entries by entity identifier
          required: false
          schema:
            type: integer
        - name: userId
          in: query
          description: Filter audit entries by the user who made the change
          required: false
          schema:
            type: string
        - name: from
          in: query
          description: Start date for audit entry filtering (ISO 8601)
          required: false
          schema:
            type: string
            format: date-time
        - name: to
          in: query
          description: End date for audit entry filtering (ISO 8601)
          required: false
          schema:
            type: string
            format: date-time
        - name: skip
          in: query
          description: Number of entries to skip for pagination
          required: false
          schema:
            type: integer
        - name: take
          in: query
          description: Maximum number of entries to return
          required: false
          schema:
            type: integer
            maximum: 100
      responses:
        '200':
          description: List of audit log entries
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuditListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'

  /downloadorders:
    post:
      operationId: createDownloadOrder
      summary: Create a download order
      description: >-
        Creates a download order that packages one or more assets for delivery.
        Download orders can specify renditions, file formats, and delivery options.
        The order is processed asynchronously and the download URL is provided
        upon completion.
      tags:
        - Download Orders
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateDownloadOrderRequest'
      responses:
        '202':
          description: Download order accepted for processing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadOrder'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'

components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        OAuth 2.0 bearer token obtained from the Content Hub identity provider.
        Include the token in the Authorization header as 'Bearer {token}'.

  parameters:
    entityId:
      name: id
      in: path
      description: The numeric identifier of the entity
      required: true
      schema:
        type: integer

  responses:
    Unauthorized:
      description: Authentication token is missing or invalid
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    BadRequest:
      description: The request body or parameters are invalid
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    NotFound:
      description: The requested resource was not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'

  schemas:
    Entity:
      type: object
      description: A Content Hub entity representing any resource such as an asset or taxonomy node
      properties:
        id:
          type: integer
          description: The numeric identifier of the entity
        identifier:
          type: string
          description: The human-readable string identifier of the entity
        definitionName:
          type: string
          description: The name of the entity definition this entity conforms to
        cultures:
          type: array
          description: Culture codes for which the entity has localized data
          items:
            type: string
        properties:
          type: object
          description: Key-value map of entity property names to their values
          additionalProperties: true
        relations:
          type: object
          description: Key-value map of relation names to related entity references
          additionalProperties: true
        systemProperties:
          $ref: '#/components/schemas/SystemProperties'
        links:
          type: object
          description: Hypermedia links for navigating to related resources
          additionalProperties:
            type: string
            format: uri

    SystemProperties:
      type: object
      description: System-managed metadata properties on a Content Hub entity
      properties:
        createdOn:
          type: string
          description: The ISO 8601 timestamp when the entity was created
          format: date-time
        createdBy:
          type: string
          description: The username of the user who created the entity
        modifiedOn:
          type: string
          description: The ISO 8601 timestamp when the entity was last modified
          format: date-time
        modifiedBy:
          type: string
          description: The username of the user who last modified the entity

    EntityListResponse:
      type: object
      description: A paginated list of entities
      properties:
        items:
          type: array
          description: The entities for the current page
          items:
            $ref: '#/components/schemas/Entity'
        totalCount:
          type: integer
          description: The total number of entities matching the query
        skip:
          type: integer
          description: The number of entities skipped
        take:
          type: integer
          description: The maximum number of entities returned

    CreateEntityRequest:
      type: object
      description: Request body for creating or updating an entity
      required:
        - definitionName
      properties:
        definitionName:
          type: string
          description: The name of the entity definition for the new entity
        identifier:
          type: string
          description: Optional custom string identifier for the entity
        cultures:
          type: array
          description: Culture codes for which to set localized properties
          items:
            type: string
        properties:
          type: object
          description: Property name to value mappings for the entity
          additionalProperties: true
        relations:
          type: object
          description: Relation name to entity reference mappings
          additionalProperties: true

    LifecycleRequest:
      type: object
      description: Request body for updating an entity's lifecycle state
      required:
        - state
      properties:
        state:
          type: string
          description: The target lifecycle state for the entity
          enum:
            - Draft
            - InProgress
            - Approved
            - Published
            - Archived

    EntityQuery:
      type: object
      description: A structured query for filtering entities
      properties:
        query:
          type: object
          description: The query expression object for filtering entities
          additionalProperties: true
        skip:
          type: integer
          description: Number of entities to skip
          default: 0
        take:
          type: integer
          description: Maximum number of entities to return
          default: 25
        cultures:
          type: array
          description: Culture codes for localized property values
          items:
            type: string

    SearchRequest:
      type: object
      description: A search request for querying entities with faceting
      properties:
        query:
          type: string
          description: Full-text search query string
        filters:
          type: array
          description: Structured filters to apply to the search
          items:
            type: object
            additionalProperties: true
        skip:
          type: integer
          description: Number of results to skip
          default: 0
        take:
          type: integer
          description: Maximum number of results to return
          default: 25
        facets:
          type: array
          description: Facet field names to include in the response
          items:
            type: string

    SearchResponse:
      type: object
      description: Search results with facet aggregations
      properties:
        items:
          type: array
          description: Matching entities for the current page
          items:
            $ref: '#/components/schemas/Entity'
        totalCount:
          type: integer
          description: Total number of matching entities
        facets:
          type: object
          description: Facet aggregations keyed by facet field name
          additionalProperties:
            type: array
            items:
              $ref: '#/components/schemas/FacetValue'

    FacetValue:
      type: object
      description: A single facet value with its count in search results
      properties:
        value:
          type: string
          description: The facet value
        count:
          type: integer
          description: The number of matching entities with this value

    UploadRequest:
      type: object
      description: Request body for creating an asset upload request
      required:
        - fileName
        - fileSize
      properties:
        fileName:
          type: string
          description: The name of the file being uploaded
        fileSize:
          type: integer
          description: The size of the file in bytes
        fileType:
          type: string
          description: The MIME type of the file being uploaded
        culture:
          type: string
          description: The culture code for the asset metadata

    UploadResponse:
      type: object
      description: Response from creating an upload request with target URLs
      properties:
        uploadId:
          type: string
          description: The unique identifier for the upload session
        uploadUrl:
          type: string
          description: The URL to which the binary file content should be uploaded
          format: uri
        entityId:
          type: integer
          description: The identifier of the entity that will be created upon completion

    JobListResponse:
      type: object
      description: A paginated list of job configurations
      properties:
        items:
          type: array
          description: The job targets
          items:
            $ref: '#/components/schemas/Job'
        totalCount:
          type: integer
          description: Total number of jobs

    Job:
      type: object
      description: A background job target in Content Hub
      properties:
        id:
          type: integer
          description: The numeric identifier of the job
        identifier:
          type: string
          description: The string identifier of the job target
        status:
          type: string
          description: The current status of the job
          enum:
            - Queued
            - Running
            - Completed
            - Failed
        createdOn:
          type: string
          description: The ISO 8601 timestamp when the job was created
          format: date-time
        completedOn:
          type: string
          description: The ISO 8601 timestamp when the job completed
          format: date-time

    Selection:
      type: object
      description: A named selection pool containing entity identifiers
      properties:
        id:
          type: string
          description: The unique identifier of the selection
        name:
          type: string
          description: The name of the selection pool
        entityIds:
          type: array
          description: The entity identifiers included in this selection
          items:
            type: integer
        createdOn:
          type: string
          description: The ISO 8601 timestamp when the selection was created
          format: date-time

    CreateSelectionRequest:
      type: object
      description: Request body for creating a selection
      required:
        - entityIds
      properties:
        name:
          type: string
          description: Optional name for the selection pool
        entityIds:
          type: array
          description: Entity identifiers to include in the selection
          items:
            type: integer

    AuditListResponse:
      type: object
      description: A paginated list of audit log entries
      properties:
        items:
          type: array
          description: The audit entries for the current page
          items:
            $ref: '#/components/schemas/AuditEntry'
        totalCount:
          type: integer
          description: Total number of matching audit entries

    AuditEntry:
      type: object
      description: An audit log entry recording a change within Content Hub
      properties:
        id:
          type: integer
          description: The unique identifier of the audit entry
        entityId:
          type: integer
          description: The identifier of the entity that was changed
        userId:
          type: string
          description: The username of the user who made the change
        operation:
          type: string
          description: The type of operation performed
          enum:
            - Create
            - Update
            - Delete
            - LifecycleChange
        timestamp:
          type: string
          description: The ISO 8601 timestamp of the change
          format: date-time
        changes:
          type: object
          description: The property changes made during this operation
          additionalProperties: true

    DownloadOrder:
      type: object
      description: A download order packaging assets for delivery
      properties:
        id:
          type: string
          description: The unique identifier of the download order
        status:
          type: string
          description: The current processing status of the download order
          enum:
            - Queued
            - Processing
            - Completed
            - Failed
        downloadUrl:
          type: string
          description: The URL from which the packaged assets can be downloaded
          format: uri
        createdOn:
          type: string
          description: The ISO 8601 timestamp when the download order was created
          format: date-time
        completedOn:
          type: string
          description: The ISO 8601 timestamp when the download order was completed
          format: date-time

    CreateDownloadOrderRequest:
      type: object
      description: Request body for creating a download order
      required:
        - entityIds
      properties:
        entityIds:
          type: array
          description: Entity identifiers of assets to include in the download
          items:
            type: integer
        renditionName:
          type: string
          description: The name of the asset rendition to download (e.g., Original, Preview)
        includeMetadata:
          type: boolean
          description: Whether to include metadata alongside the asset files
          default: false

    ErrorResponse:
      type: object
      description: An error response body
      properties:
        message:
          type: string
          description: A human-readable error message
        statusCode:
          type: integer
          description: The HTTP status code
        errors:
          type: array
          description: List of detailed error messages
          items:
            type: string