Content AI APIs (2025.09-experimental)

Download OpenAPI specification:Download

API definitions for Content AI services. To configure a client to access these APIs, visit the Adobe Developer Console and add the "AEM Content AI Services" card to your project. Note : The use of these APIs is subject to co-innovation arrangements with Adobe or licensing once available for public use. Please contact your Adobe representative for more details.

Configurations API

The Configurations API serves as the central configuration hub and entry point for Content AI. This API enables organizations to define end-to-end workflows that govern content acquisition, processing, indexing, and generative AI behavior, providing comprehensive control over how sites are discovered, content is ingested into Content AI indexes, and how generative search responses are constructed.

Key Features:

  • Site Acquisition Configuration: Defines comprehensive workflows for site discovery and content acquisition (of content not already managed by AEM), including crawling parameters, source identification, and content ingestion pipelines that systematically process websites and feed content into the Content AI indexing infrastructure.

  • AI Answers Behavior Configuration: Controls all aspects of AI Answers API behavior, including prompt engineering, response generation parameters, retrieval strategies, and AI model configurations that determine how natural language queries are processed and answered.

  • Multi-Step Workflow Orchestration: Manages sophisticated 4-step pipelines encompassing discovery (site crawling), parser (content extraction), index (content organization), and generative (AI configuration) steps, enabling end-to-end content processing automation.

  • Solution-Wide Configuration Management: Acts as the foundational configuration layer that orchestrates multiple Content AI services, enabling organizations to build comprehensive content intelligence solutions by defining how different services interact and collaborate within the ecosystem.

  • Configuration Versioning and Lifecycle Management: Supports configuration versioning, updates through JSON Patch operations, and complete lifecycle management, ensuring organizations can evolve their Content AI configurations while maintaining stability.

Get all configurations

Retrieve latest configurations

SecurityBearerAuth
Request
query Parameters
cursor
string (Cursor) non-empty

When the number of results for a request exceeds the allowed limit, the response will include a cursor. That value can then be sent via this parameter on a subsequent request to retrieve the next set of items.

limit
integer <int32> (Limit) [ 1 .. 50 ]

For a paginated request, this parameter defines the maximum number of items to retrieve.

status
string
Default: "active"

Filter configurations by their archival status.

  • active (default): Returns only active (non-archived) configurations
  • archived: Returns only archived configurations
  • all: Returns both active and archived configurations
Enum: "active" "archived" "all"
header Parameters
If-None-Match
string

The If-None-Match header field makes the request method conditional on a recipient cache or origin server either not having any current representation of the target resource, when the field value is "*", or having a selected representation with an entity tag that does not match any of those listed in the field value.

For more details, please head over to RFC9110.

Responses
200

Successful response containing configuration list.

304

Not Modified

401

Unauthorized

403

Forbidden

406

Unacceptable. Indicates that the target resource does not have a current representation that would be acceptable to the user agent, according to the proactive negotiation header fields received in the request.

500

The server encountered an unexpected error. Retrying the request after a certain time could help.

503

The service is temporarily unavailable. Please try again later.

get/configurations
Request samples
Response samples
application/json

Example response for listing all configurations

{
  • "items": [
    ]
}

Create a configuration entry

Accepts a list of configuration step values and creates a new configuration version.

SecurityBearerAuth
Request
Request Body schema: application/json

Configuration steps to be created.

required
Array of objects (Step) non-empty
Responses
201

Successful response with the configuration details.

400

Bad Request. The Problem Details object will provide more information about the exact cause.

401

Unauthorized

403

Forbidden

406

Unacceptable. Indicates that the target resource does not have a current representation that would be acceptable to the user agent, according to the proactive negotiation header fields received in the request.

415

Unsupported Media Type. When provided as a response to a PATCH request, the response will provide an Accept-Patch response header to notify the client what patch document media types are supported.

500

The server encountered an unexpected error. Retrying the request after a certain time could help.

503

The service is temporarily unavailable. Please try again later.

post/configurations
Request samples
application/json

Basic configuration request with index, discovery, and generative steps

{}
Response samples
application/json

Response for creating a basic configuration with index, discovery, and generative steps

{
  • "uid": "75ff59f7-4610-43bb-acd1-3043bd6fdb40",
  • "versionId": "6c2352cd-fb5c-43e5-a59c-c25f24862c72",
  • "steps": [
    ],
  • "updatedAt": "2025-08-11T13:48:55.300+00:00",
  • "archived": false
}

Get configuration by unique ID

Retrieve a configuration by its unique identifier, showing the latest version of the configuration.

SecurityBearerAuth
Request
path Parameters
uid
required
string non-empty

Unique identifier for the configuration, stable across versions.

header Parameters
If-None-Match
string

The If-None-Match header field makes the request method conditional on a recipient cache or origin server either not having any current representation of the target resource, when the field value is "*", or having a selected representation with an entity tag that does not match any of those listed in the field value.

For more details, please head over to RFC9110.

Responses
200

Successful response containing configuration details

304

Not Modified

400

Bad Request. The Problem Details object will provide more information about the exact cause.

401

Unauthorized

403

Forbidden

404

Not Found

406

Unacceptable. Indicates that the target resource does not have a current representation that would be acceptable to the user agent, according to the proactive negotiation header fields received in the request.

500

The server encountered an unexpected error. Retrying the request after a certain time could help.

503

The service is temporarily unavailable. Please try again later.

get/configurations/{uid}
Request samples
Response samples
application/json

Example response for getting a single configuration by UID

{
  • "uid": "75ff59f7-4610-43bb-acd1-3043bd6fdb40",
  • "versionId": "49737ba0-7bee-4089-ad92-717064cb38e1",
  • "steps": [
    ],
  • "updatedAt": "2025-08-11T13:48:55.300+00:00",
  • "archived": true,
  • "archivedAt": "2025-08-11T13:48:55.300+00:00"
}

Updates a configuration.

Accepts a modified configuration object to update an existing configuration. Use this endpoint when you have many updates and can provide the full configuration object. This replaces the entire configuration with the provided data.

SecurityBearerAuth
Request
path Parameters
uid
required
string non-empty

Unique identifier for the configuration, stable across versions.

header Parameters
If-Match
required
string

The If-Match header field makes the request method conditional on the recipient origin server either having at least one current representation of the target resource, when the field value is "*", or having a current representation of the target resource that has an entity tag matching a member of the list of entity tags provided in the field value.

For more details, please head over to RFC9110.

Request Body schema: application/json
required

Configuration object containing the updated configuration details.

required
Array of objects (Step)

The different steps in the workflow

archived
boolean
Default: false

Indicates whether the configuration has been archived

Responses
200

Successful response with the configuration details.

400

Bad Request. The Problem Details object will provide more information about the exact cause.

401

Unauthorized

403

Forbidden

404

Not Found

406

Unacceptable. Indicates that the target resource does not have a current representation that would be acceptable to the user agent, according to the proactive negotiation header fields received in the request.

412

Precondition Failed

415

Unsupported Media Type. When provided as a response to a PATCH request, the response will provide an Accept-Patch response header to notify the client what patch document media types are supported.

428

Precondition Required

500

The server encountered an unexpected error. Retrying the request after a certain time could help.

503

The service is temporarily unavailable. Please try again later.

put/configurations/{uid}
Request samples
application/json

PUT request to update a configuration with modified cron schedule and generative step description

{
  • "steps": [
    ]
}
Response samples
application/json

Response for PUT request updating a configuration

{
  • "uid": "75ff59f7-4610-43bb-acd1-3043bd6fdb40",
  • "versionId": "8a8471cf-8cff-519a-be03-828175dc49f2",
  • "steps": [
    ],
  • "updatedAt": "2025-08-13T13:03:52.925+00:00",
  • "archived": false
}

Patches a configuration

Accepts a list of JSON Patch operations for fine-grained updates to an existing configuration. Use this endpoint when you need to make specific, targeted changes without replacing the entire object. Supports standard JSON Patch operations like replace, add, etc.

SecurityBearerAuth
Request
path Parameters
uid
required
string non-empty

Unique identifier for the configuration, stable across versions.

header Parameters
If-Match
required
string

The If-Match header field makes the request method conditional on the recipient origin server either having at least one current representation of the target resource, when the field value is "*", or having a current representation of the target resource that has an entity tag matching a member of the list of entity tags provided in the field value.

For more details, please head over to RFC9110.

Request Body schema: application/json-patch+json
required

Configuration object containing the updated configuration details.

Array
op
required
string

The operation to perform

path
required
string non-empty

The location where information should be added

required
string or number or Array of any or object

The information to place at the location indicated by the path parameter

Responses
200

Successful response with the configuration details.

400

Bad Request. The Problem Details object will provide more information about the exact cause.

401

Unauthorized

403

Forbidden

404

Not Found

406

Unacceptable. Indicates that the target resource does not have a current representation that would be acceptable to the user agent, according to the proactive negotiation header fields received in the request.

412

Precondition Failed

415

Unsupported Media Type. When provided as a response to a PATCH request, the response will provide an Accept-Patch response header to notify the client what patch document media types are supported.

428

Precondition Required

500

The server encountered an unexpected error. Retrying the request after a certain time could help.

503

The service is temporarily unavailable. Please try again later.

patch/configurations/{uid}
Request samples
application/json-patch+json

PATCH request to partially update a configuration using JSON Patch operations

[
  • {
    },
  • {
    },
  • {
    },
  • {
    }
]
Response samples
application/json

Response for PATCH request updating a configuration

{
  • "uid": "75ff59f7-4610-43bb-acd1-3043bd6fdb40",
  • "versionId": "49737ba0-7bee-4089-ad92-717064cb38e1",
  • "steps": [
    ],
  • "updatedAt": "2025-08-13T13:03:52.925+00:00",
  • "archived": true,
  • "archivedAt": "2025-08-13T13:03:52.925+00:00"
}

Indexes API

The Indexes API provides endpoints that facilitate interaction with the search infrastructure for a given tenant. It enables clients to discover available indexes managed by Content AI and retrieve configuration information about each index. This information supports effective query creation and efficient data retrieval from the search endpoint.

Key Features:

  • List Available Indexes: Get a complete list of all Content AI indexes that are currently available for the provided tenant. This feature helps users identify data sources for search operations.

  • List Index Configuration: Retrieve configuration of a specified index, including various vector and lexical spaces that are defined along with their description. This information is essential for constructing queries to the search API. Users can use the descriptions provided to decide which space to use in their queries.

List Indexes

Lists all indexes.

SecurityBearerAuth or ApiKeyAuth
Request
header Parameters
If-None-Match
string

The If-None-Match header field makes the request method conditional on a recipient cache or origin server either not having any current representation of the target resource, when the field value is "*", or having a selected representation with an entity tag that does not match any of those listed in the field value.

For more details, please head over to RFC9110.

Responses
200

OK

304

Not Modified

401

Unauthorized

403

Forbidden

406

Unacceptable. Indicates that the target resource does not have a current representation that would be acceptable to the user agent, according to the proactive negotiation header fields received in the request.

500

The server encountered an unexpected error. Retrying the request after a certain time could help.

503

The service is temporarily unavailable. Please try again later.

get/indexes
Request samples
Response samples
application/json

Example of a response to get the list of indexes in the system.

{
  • "indexes": [
    ]
}

Get an index

Gets an abstracted configuration of the index

SecurityBearerAuth or ApiKeyAuth
Request
path Parameters
index
required
string

The name of the index

header Parameters
If-None-Match
string

The If-None-Match header field makes the request method conditional on a recipient cache or origin server either not having any current representation of the target resource, when the field value is "*", or having a selected representation with an entity tag that does not match any of those listed in the field value.

For more details, please head over to RFC9110.

Responses
200

OK

304

Not Modified

401

Unauthorized

403

Forbidden

404

Not Found

406

Unacceptable. Indicates that the target resource does not have a current representation that would be acceptable to the user agent, according to the proactive negotiation header fields received in the request.

500

The server encountered an unexpected error. Retrying the request after a certain time could help.

503

The service is temporarily unavailable. Please try again later.

get/indexes/{index}
Request samples
Response samples
application/json

Example of a response to get an index config. This can be used to get the descriptions of the various spaces configured for the index.

{
  • "vectorSpaces": {
    },
  • "lexicalSpaces": {
    }
}

AI Search API

The AI Search API enables powerful retrieval of content across one or more indexes for a given tenant. It supports a wide range of modern information retrieval needs through fulltext, semantic, and hybrid (composed) queries. With support for complex filtering, flexible query composition, and advanced search parameters, this API provides users with the tools needed for sophisticated and efficient data discovery.

Key Features:

  • Multiple Query Types: Supports semantic, fulltext, and filter queries individually or in combination, allowing retrieval by meaning, keywords, or structured criteria.

  • Query Composition: Enables hybrid searches by composing multiple queries—such as combining filters with fulltext and vector searches—for highly precise and relevant results. Vector and fulltext queries can also be combined to leverage the strengths of both approaches.

  • Flexible Filtering: Allows users to define filter groups, apply filters alone, or combine filters as pre-filters within either a vector or a fulltext query for targeted results.

  • Search Features: Includes cursor-based pagination for efficient navigation through large result sets, and sorting to order results as needed (e.g., by score, timestamp etc).

  • Vector Query Enhancements: For vector-based (semantic) queries, supports retrieval of both original documents and chunked (subdocument) representations for greater result detail.

  • Multi-Index Search: Enables searching across multiple indexes simultaneously, maximizing coverage and simplifying cross-dataset discovery.

  • Configurable Vector and Lexical Spaces: Users can explicitly select which vector (semantic) or lexical (fulltext) space within an index to use for each query, supporting rapid A/B testing and comparative evaluation of different configurations. This is a very powerful feature that gives the ability to evaluate and fine-tune various parts of the Index configuration in parallel.

Search endpoint

Search for content using hybrid, vector, filter or fulltext search.

SecurityBearerAuth or ApiKeyAuth
Request
Request Body schema: application/json
required

Content AI search query

required
object (ContentAISearchIndexConfig)
required
object (ContentAIQuery)
object (ContentAIQueryOptions)
Responses
200

OK

400

Bad Request. The Problem Details object will provide more information about the exact cause.

401

Unauthorized

403

Forbidden

406

Unacceptable. Indicates that the target resource does not have a current representation that would be acceptable to the user agent, according to the proactive negotiation header fields received in the request.

415

Unsupported Media Type. When provided as a response to a PATCH request, the response will provide an Accept-Patch response header to notify the client what patch document media types are supported.

422

Unprocessable Entity. The server understands the patch document and the syntax of the patch document appears to be valid, but the server is incapable of processing the request. This might include attempts to modify a resource in a way that would cause the resource to become invalid.

429

Too Many Requests

500

The server encountered an unexpected error. Retrying the request after a certain time could help.

503

The service is temporarily unavailable. Please try again later.

post/search
Request samples
application/json

This example demonstrates query composition with vector and fulltext queries. The query is executed across 2 indexes. It combines a vector search for the phrase "What are the benefits of electric cars" with a fulltext search for the word "recycled". The queries are executed under OR operator which means results from both the queries would be returned based on relative order.

{
  • "searchIndexConfig": {
    },
  • "query": {
    },
  • "queryOptions": {
    }
}
Response samples
application/json

Example of a Content AI Response for a search query.

{
  • "totalResults": 5,
  • "results": [
    ],
  • "cursor": "WzAuMDAxNDk2MzcwOSwibXNjX2ZhbnRhc2lhX21lZGl0ZXJyYW5lYW5fXzV3cCJd"
}

AI Answers API

The AI Answers API provides AI-powered natural language response generation using advanced Retrieval-Augmented Generation (RAG) mechanisms. This API transforms user queries and contextual metadata into comprehensive, brand-customized answers by leveraging hybrid search capabilities to retrieve relevant content and generate contextually appropriate responses through configurable prompt instructions.

Key Features:

  • RAG-Powered Response Generation: Utilizes sophisticated Retrieval-Augmented Generation (RAG) techniques that combine the user's natural language query with metadata to locate and retrieve the most relevant excerpts from site pages before generating comprehensive, contextually accurate answers.

  • Hybrid Search Integration: Leverages Content AI services' powerful hybrid search capabilities that combine semantic understanding with metadata-based composition, ensuring retrieved content is both semantically relevant and contextually appropriate for the user's specific needs.

  • Dual Response Modes: Supports both blocking (synchronous) and streaming (SSE) response patterns, enabling flexible integration approaches— from simple request-response workflows to real-time streaming experiences that provide progressive answer generation.

  • Brand Customization Support: Enables configurable prompt instructions that allow organizations to customize the tone, style, and approach of generated responses, ensuring answers align with brand voice, compliance requirements, and specific organizational communication standards.

  • Contextual Metadata Processing: Accepts flexible metadata parameters that enhance query understanding and content retrieval precision, supporting geography-specific responses, user role-based filtering, and other contextual customizations.

  • Citation and Follow-up Generation: Automatically generates source citations from retrieved documents and suggests relevant follow-up questions, providing users with transparency into answer sources and natural conversation continuation pathways.

  • QMA Tracking Integration: Creates unique QMA (Query/Metadata/Answer) identifiers for each interaction, enabling seamless integration with feedback collection systems and comprehensive analytics tracking across the generative search ecosystem.

Api Integrator Search

Submit a blocking generative query request with contextual metadata

SecurityBearerAuth or ApiKeyAuth
Request
Request Body schema: application/json
required
query
required
string (Query) >= 3 characters

Natural language user query

integratorId
required
string (Configuration UID or Integrator Id) non-empty

Configuration UID setup in the Admin service by creating a configuration entry or Integrator alias that maps to data source that it's internally configured.

object (Metadata)

Contextual metadata map for query. The format is key-value pair. It depends on the data source configuration.

Responses
200

Successful search response

400

Bad Request. The Problem Details object will provide more information about the exact cause.

401

Unauthorized

403

Forbidden

404

The configuration uid or integrator id is not found.

406

Unacceptable. Indicates that the target resource does not have a current representation that would be acceptable to the user agent, according to the proactive negotiation header fields received in the request.

415

Unsupported Media Type. When provided as a response to a PATCH request, the response will provide an Accept-Patch response header to notify the client what patch document media types are supported.

500

The server encountered an unexpected error. Retrying the request after a certain time could help.

503

The service is temporarily unavailable. Please try again later.

post/gensearch
Request samples
application/json
{
  • "query": "How do I create a new project?",
  • "integratorId": "stable-uid"
}
Response samples
application/json
{
  • "query": "string",
  • "result": "",
  • "links": [ ],
  • "questions": [ ],
  • "type": "start",
  • "qmaId": "string"
}

HTTP 2.0 SSE Stream Query

Submit a streaming generative query request with contextual metadata

SecurityBearerAuth or ApiKeyAuth
Request
Request Body schema: application/json
query
required
string (Query) >= 3 characters

Natural language user query

integratorId
required
string (Configuration UID or Integrator Id) non-empty

Configuration UID setup in the Admin service by creating a configuration entry or Integrator alias that maps to data source that it's internally configured.

object (Metadata)

Contextual metadata map for query. The format is key-value pair. It depends on the data source configuration.

Responses
200

Successful generative search response

400

Bad Request. The Problem Details object will provide more information about the exact cause.

401

Unauthorized

403

Forbidden

404

The configuration uid or integrator id is not found.

406

Unacceptable. Indicates that the target resource does not have a current representation that would be acceptable to the user agent, according to the proactive negotiation header fields received in the request.

415

Unsupported Media Type. When provided as a response to a PATCH request, the response will provide an Accept-Patch response header to notify the client what patch document media types are supported.

500

The server encountered an unexpected error. Retrying the request after a certain time could help.

503

The service is temporarily unavailable. Please try again later.

post/gensearch/stream
Request samples
application/json
{
  • "query": "How do I create a new project?",
  • "integratorId": "stable-uid"
}
Response samples
application/json
{
  • "query": "string",
  • "result": "",
  • "links": [ ],
  • "questions": [ ],
  • "type": "start",
  • "qmaId": "string"
}

Feedback API

The Feedback API provides endpoints that enable end-users to provide structured feedback on generative search results. This API captures user satisfaction through boolean ratings (like/dislike) and optional detailed reasoning, creating a critical feedback loop for improving the quality of AI-generated answers over time.

Key Features:

  • Binary Feedback Collection: Captures user satisfaction as a simple boolean value (liked: true/false), easily mappable to common UI patterns like thumbs up/down, like/dislike buttons etc.

  • Detailed Reasoning Capture: Accepts optional reason parameter allowing users to provide specific explanations for their feedback, enabling deeper understanding of why answers were considered helpful or inadequate.

  • QMA Context Association: Links feedback directly to specific QMA (Query/Metadata/Answer) combinations, ensuring that user ratings are associated with the exact context of the original user query, provided metadata, and generated response from the generative search API.

  • Evaluation Engine Integration: Serves as the foundational data source for building sophisticated evaluation engines that analyze feedback patterns to identify areas for improvement in answer quality, relevance, and user satisfaction across different query types and contexts.

Update a feedback entry (like/dislike and reason)

This operation allows the end-user to update the user rating of a feedback entry stored in the feedback collection.

SecurityBearerAuth or ApiKeyAuth
Request
path Parameters
uId
required
string

The unique configuration identifier

Example: inside
qmaId
required
string <uuid>

The QMA (Query/Metadata/Answer) entry identifier to which the feedback is attached

Example: 163409be-2fff-4d11-ae25-2ca4f3044e07
header Parameters
If-Match
required
string

The If-Match header field makes the request method conditional on the recipient origin server either having at least one current representation of the target resource, when the field value is "*", or having a current representation of the target resource that has an entity tag matching a member of the list of entity tags provided in the field value.

For more details, please head over to RFC9110.

Request Body schema: application/json
required
liked
required
boolean

Whether the end-user liked the content or not.

reason
string

The reason why the end-user liked or disliked the content.

Responses
200

OK — returns the updated feedback

400

Bad Request. The Problem Details object will provide more information about the exact cause.

401

Unauthorized

403

Forbidden

404

Not Found

406

Unacceptable. Indicates that the target resource does not have a current representation that would be acceptable to the user agent, according to the proactive negotiation header fields received in the request.

412

Precondition Failed

428

Precondition Required

500

The server encountered an unexpected error. Retrying the request after a certain time could help.

put/configurations/{uId}/qmas/{qmaId}/feedback
Request samples
application/json
{
  • "liked": false,
  • "reason": "The answer is not relevant to my question."
}
Response samples
application/json
{
  • "liked": false,
  • "reason": "The answer is not relevant to my question."
}

Create a feedback entry (like/dislike and reason)

This operation allows the end-user to create the user rating of a feedback entry stored in the feedback collection.

SecurityBearerAuth or ApiKeyAuth
Request
path Parameters
uId
required
string

The unique configuration identifier

Example: inside
qmaId
required
string <uuid>

The QMA (Query/Metadata/Answer) entry identifier to which the feedback is attached

Example: 163409be-2fff-4d11-ae25-2ca4f3044e07
Request Body schema: application/json
required
liked
required
boolean

Whether the end-user liked the content or not.

reason
string

The reason why the end-user liked or disliked the content.

Responses
200

OK — returns the created feedback

400

Bad Request. The Problem Details object will provide more information about the exact cause.

401

Unauthorized

403

Forbidden

404

Not Found

406

Unacceptable. Indicates that the target resource does not have a current representation that would be acceptable to the user agent, according to the proactive negotiation header fields received in the request.

500

The server encountered an unexpected error. Retrying the request after a certain time could help.

post/configurations/{uId}/qmas/{qmaId}/feedback
Request samples
application/json
{
  • "liked": false,
  • "reason": "The answer is not relevant to my question."
}
Response samples
application/json
{
  • "liked": false,
  • "reason": "The answer is not relevant to my question."
}