dotCMS · OpenAPI Overlay 1.0.0

API Evangelist conversational phrasing for dotCMS REST AI API

24 actions 24 updates phrasing extends openapi/dotcms-ai-api-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for dotCMS's API. It is a proposal applied on top of the contract, not a document dotCMS publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelist-phrasing

Targets 24 · first 16 shown; the file carries all of them

$.info
$.paths['/api/v1/ai/providers'].get
$.paths['/api/v1/ai/providers/test/{capability}'].post
$.paths['/api/v1/ai/completions/config'].get
$.paths['/api/v1/ai/completions/config'].put
$.paths['/api/v1/ai/completions/rawPrompt'].post
$.paths['/api/v1/ai/completions'].post
$.paths['/api/v1/ai/embeddings/count'].get
$.paths['/api/v1/ai/embeddings/count'].post
$.paths['/api/v1/ai/embeddings'].post
$.paths['/api/v1/ai/embeddings'].delete
$.paths['/api/v1/ai/embeddings/db'].delete
$.paths['/api/v1/ai/embeddings/indexCount'].get
$.paths['/api/v1/ai/embeddings/test'].get
$.paths['/api/v1/ai/image/generate'].get
$.paths['/api/v1/ai/image/generate'].post

OpenAPI Overlay

Raw ↑
# Generated by API Evangelist (build-phrasing.py). Our phrasing, not observed demand.
overlay: 1.0.0
info:
  title: API Evangelist conversational phrasing for dotCMS REST AI API
  version: 1.0.0
extends: openapi/dotcms-ai-api-openapi.yml
actions:
- target: $.info
  update:
    x-apievangelist-phrasing:
      method: generated
      generated: '2026-09-26'
      generator: build-phrasing.py
      label: Generated by API Evangelist
      operations: 23
- target: $.paths['/api/v1/ai/providers'].get
  update:
    x-apievangelist-phrasing:
      intent: List dotAI providers and their config fields
      effect: read
      questions:
      - Which AI providers can dotAI use and do they support chat, embeddings or images?
      - What configuration fields does each dotAI provider capability require?
      instructions:
      - text: List every registered dotAI provider with the capabilities it supports.
      - text: Show the providerConfig fields each AI provider needs for chat, embeddings and images.
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/providers/test/{capability}'].post
  update:
    x-apievangelist-phrasing:
      intent: Test a dotAI provider connection
      effect: read
      questions:
      - How can I check that my AI provider credentials actually work before saving them?
      - Does the connection test make a real request to the provider for embeddings or images?
      instructions:
      - text: Test the AI provider connection for the {capability} capability.
        slots:
          capability: path.capability
      - text: Verify the {capability} provider config works for site {siteId} using the stored credentials.
        slots:
          capability: path.capability
          siteId: query.siteId
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/completions/config'].get
  update:
    x-apievangelist-phrasing:
      intent: Get the AI service configuration
      effect: read
      questions:
      - What AI configuration is currently set for my site?
      - Can I read the system-wide AI settings using SYSTEM_HOST instead of a site id?
      instructions:
      - text: Show the current AI service configuration.
      - text: Get the AI configuration saved for site {siteId}.
        slots:
          siteId: query.siteId
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/completions/config'].put
  update:
    x-apievangelist-phrasing:
      intent: Save AI provider configuration for a site
      effect: write
      questions:
      - How do I save new AI provider settings for a site?
      - Will saving the AI config overwrite credentials that show as masked asterisks?
      instructions:
      - text: Save this AI provider configuration for site {siteId}.
        slots:
          siteId: query.siteId
      - text: Update the AI provider settings for the current host.
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/completions/rawPrompt'].post
  update:
    x-apievangelist-phrasing:
      intent: Send a raw prompt to the AI without content lookup
      effect: read
      questions:
      - Can I send a prompt straight to the model without dotCMS adding content context?
      - Does the raw prompt endpoint support streaming responses?
      instructions:
      - text: Send the raw prompt {prompt} directly to the AI model with no content preprocessing.
        slots:
          prompt: requestBody.prompt
      - text: Run raw prompt {prompt} on model {model} at temperature {temperature}.
        slots:
          prompt: requestBody.prompt
          model: requestBody.model
          temperature: requestBody.temperature
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/completions'].post
  update:
    x-apievangelist-phrasing:
      intent: Generate an AI answer grounded in site content
      effect: read
      questions:
      - How do I get an AI summary built from content in my dotCMS embeddings index?
      - Can I restrict an AI completion to a specific content type and index?
      instructions:
      - text: Summarize what our content says about {prompt} using the {indexName} index.
        slots:
          prompt: requestBody.prompt
          indexName: requestBody.indexName
      - text: Answer {prompt} from {contentType} content only, streaming the completion.
        slots:
          prompt: requestBody.prompt
          contentType: requestBody.contentType
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/embeddings/count'].get
  update:
    x-apievangelist-phrasing:
      intent: Count embeddings matching query-string filters
      effect: read
      questions:
      - How many embeddings exist for a given content type or site?
      - Can I count embeddings for one contentlet by identifier or inode?
      instructions:
      - text: Count the embeddings for content type {contentType} on site {site}.
        slots:
          contentType: query.contentType
          site: query.site
      - text: Tell me how many embeddings contentlet {identifier} has in index {indexName}.
        slots:
          identifier: query.identifier
          indexName: query.indexName
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/embeddings/count'].post
  update:
    x-apievangelist-phrasing:
      intent: Count embeddings using a JSON filter body
      effect: read
      questions:
      - Can I count embeddings by posting a JSON search form instead of query parameters?
      - How many embeddings would match a posted filter on index and field?
      instructions:
      - text: Post a filter and count embeddings in index {indexName} for field {fieldVar}.
        slots:
          indexName: requestBody.indexName
          fieldVar: requestBody.fieldVar
      - text: Count embeddings via JSON body for content type {contentType} in language {language}.
        slots:
          contentType: requestBody.contentType
          language: requestBody.language
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/embeddings'].post
  update:
    x-apievangelist-phrasing:
      intent: Create embeddings for content matching a query
      effect: write
      questions:
      - How do I generate vector embeddings for content so dotAI can search it?
      - Can I choose which fields get embedded and which index they go into?
      instructions:
      - text: Build embeddings for content matching {query} into index {indexName}.
        slots:
          query: requestBody.query
          indexName: requestBody.indexName
      - text: Embed the fields {fields} of content returned by {query}.
        slots:
          fields: requestBody.fields
          query: requestBody.query
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/embeddings'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete stored content embeddings
      effect: destructive
      questions:
      - How do I remove embeddings I no longer want in the AI index?
      - Can I delete embeddings without dropping the whole embeddings database?
      instructions:
      - text: Delete the matching content embeddings.
      - text: Remove stored embeddings but keep the embeddings tables in place.
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/embeddings/db'].delete
  update:
    x-apievangelist-phrasing:
      intent: Drop and recreate the embeddings tables
      effect: destructive
      questions:
      - How do I completely reset the dotAI embeddings database?
      - Is there a way to wipe all embeddings and rebuild the tables from scratch?
      instructions:
      - text: Drop and recreate the embeddings database tables.
      - text: Wipe all embeddings and reset the vector tables.
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/embeddings/indexCount'].get
  update:
    x-apievangelist-phrasing:
      intent: Count embeddings per index
      effect: read
      questions:
      - Which embedding indexes exist and how many entries does each hold?
      - What is the size of each dotAI index?
      instructions:
      - text: Show the embeddings count for every index.
      - text: List the AI indexes with their sizes.
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/embeddings/test'].get
  update:
    x-apievangelist-phrasing:
      intent: Test the embeddings endpoint
      effect: read
      questions:
      - Is the embeddings resource up and responding?
      - How can I smoke-test the embeddings service?
      instructions:
      - text: Ping the embeddings test endpoint.
      - text: Run the embeddings service health test.
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/image/generate'].get
  update:
    x-apievangelist-phrasing:
      intent: Generate an image from a prompt in the URL
      effect: read
      questions:
      - Can I generate an AI image with a simple GET and a prompt query parameter?
      - What's the quickest way to create one image from a text prompt?
      instructions:
      - text: Generate an image via GET for the prompt {prompt}.
        slots:
          prompt: query.prompt
      - text: Make a quick AI picture of {prompt} using the query-string endpoint.
        slots:
          prompt: query.prompt
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/image/generate'].post
  update:
    x-apievangelist-phrasing:
      intent: Generate AI images with size and model options
      effect: write
      questions:
      - How do I generate several AI images at once in a specific size?
      - Can I pick the image model when generating images?
      instructions:
      - text: Generate {numberOfImages} images of {prompt} at size {size}.
        slots:
          numberOfImages: requestBody.numberOfImages
          prompt: requestBody.prompt
          size: requestBody.size
      - text: Create an image of {prompt} with model {model}.
        slots:
          prompt: requestBody.prompt
          model: requestBody.model
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/image/test'].get
  update:
    x-apievangelist-phrasing:
      intent: Test the image generation endpoint
      effect: read
      questions:
      - Is AI image generation reachable on my instance?
      - How do I smoke-test the image service?
      instructions:
      - text: Ping the image generation test endpoint.
      - text: Check that the AI image service responds.
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/search/related'].get
  update:
    x-apievangelist-phrasing:
      intent: Find content related to a contentlet
      effect: read
      questions:
      - How can I find content semantically similar to a given contentlet?
      - Can I get related content by inode in a specific language?
      instructions:
      - text: Find content related to contentlet {identifier}.
        slots:
          identifier: query.identifier
      - text: Show related items for inode {inode} in index {indexName}.
        slots:
          inode: query.inode
          indexName: query.indexName
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/search/related'].post
  update:
    x-apievangelist-phrasing:
      intent: Find related content using a posted JSON body
      effect: read
      questions:
      - Can I request related-content matches by posting JSON instead of query parameters?
      - Is there a POST variant for semantic related-content lookup?
      instructions:
      - text: Post a JSON request to find related content.
      - text: Look up semantically related content through the POST related endpoint.
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/search'].get
  update:
    x-apievangelist-phrasing:
      intent: Semantic search of content via query string
      effect: read
      questions:
      - How do I run a semantic AI search over my content with a simple GET?
      - Can I set a similarity threshold and result limit on AI search?
      instructions:
      - text: Semantically search content for {query}.
        slots:
          query: query.query
      - text: AI-search {query} on site {site} returning {searchLimit} results.
        slots:
          query: query.query
          site: query.site
          searchLimit: query.searchLimit
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/search'].post
  update:
    x-apievangelist-phrasing:
      intent: Semantic search of content via JSON body
      effect: read
      questions:
      - Can I post a full search form to the AI search endpoint?
      - Does the POST semantic search let me filter by content type and operator?
      instructions:
      - text: Post a semantic search for {prompt} in index {indexName}.
        slots:
          prompt: requestBody.prompt
          indexName: requestBody.indexName
      - text: Search {contentType} content for {prompt} using a JSON body with threshold {threshold}.
        slots:
          contentType: requestBody.contentType
          prompt: requestBody.prompt
          threshold: requestBody.threshold
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/search/test'].get
  update:
    x-apievangelist-phrasing:
      intent: Test the AI search endpoint
      effect: read
      questions:
      - Is the AI search service responding?
      - How do I smoke-test semantic search?
      instructions:
      - text: Ping the AI search test endpoint.
      - text: Check that AI search is up.
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/text/generate'].get
  update:
    x-apievangelist-phrasing:
      intent: Generate text from a prompt in the URL
      effect: read
      questions:
      - Can I generate AI text with a GET request and a prompt parameter?
      - What's the simplest call to get generated text back?
      instructions:
      - text: Generate text via GET for the prompt {prompt}.
        slots:
          prompt: query.prompt
      - text: Write a quick blurb about {prompt} using the query-string text endpoint.
        slots:
          prompt: query.prompt
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/ai/text/generate'].post
  update:
    x-apievangelist-phrasing:
      intent: Generate text with model and length options
      effect: read
      questions:
      - How do I generate text with a set response length and temperature?
      - Can the text generator return a specific response format?
      instructions:
      - text: Generate text for {prompt} limited to {responseLengthTokens} tokens.
        slots:
          prompt: requestBody.prompt
          responseLengthTokens: requestBody.responseLengthTokens
      - text: Write copy about {prompt} in format {responseFormat}.
        slots:
          prompt: requestBody.prompt
          responseFormat: requestBody.responseFormat
      method: generated
      generated: '2026-09-26'