dotCMS AI API

AI-powered content generation and analysis endpoints

Operations 23

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 /api/v1/ai/providers List dotAI providers and their config fields · List dotAI provider configuration metadata #
Ask an LLM
“Which AI providers can dotAI use and do they support chat, embeddings or images?”
“What configuration fields does each dotAI provider capability require?”
Tell an agent
List every registered dotAI provider with the capabilities it supports.
Show the providerConfig fields each AI provider needs for chat, embeddings and images.
POST /api/v1/ai/providers/test/{capability} Test a dotAI provider connection · Test a dotAI provider connection #
Ask an LLM
“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?”
Tell an agent
Test the AI provider connection for the {capability} capability.
Verify the {capability} provider config works for site {siteId} using the stored credentials.
GET /api/v1/ai/completions/config Get the AI service configuration · Get AI service configuration #
Ask an LLM
“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?”
Tell an agent
Show the current AI service configuration.
Get the AI configuration saved for site {siteId}.
PUT /api/v1/ai/completions/config Save AI provider configuration for a site · Save AI provider configuration #
Ask an LLM
“How do I save new AI provider settings for a site?”
“Will saving the AI config overwrite credentials that show as masked asterisks?”
Tell an agent
Save this AI provider configuration for site {siteId}.
Update the AI provider settings for the current host.
POST /api/v1/ai/completions/rawPrompt Send a raw prompt to the AI without content lookup · Generate AI completions from raw prompt #
Ask an LLM
“Can I send a prompt straight to the model without dotCMS adding content context?”
“Does the raw prompt endpoint support streaming responses?”
Tell an agent
Send the raw prompt {prompt} directly to the AI model with no content preprocessing.
Run raw prompt {prompt} on model {model} at temperature {temperature}.
POST /api/v1/ai/completions Generate an AI answer grounded in site content · Generate AI completions from content #
Ask an LLM
“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?”
Tell an agent
Summarize what our content says about {prompt} using the {indexName} index.
Answer {prompt} from {contentType} content only, streaming the completion.
GET /api/v1/ai/embeddings/count Count embeddings matching query-string filters · Count 1 #
Ask an LLM
“How many embeddings exist for a given content type or site?”
“Can I count embeddings for one contentlet by identifier or inode?”
Tell an agent
Count the embeddings for content type {contentType} on site {site}.
Tell me how many embeddings contentlet {identifier} has in index {indexName}.
POST /api/v1/ai/embeddings/count Count embeddings using a JSON filter body · Count #
Ask an LLM
“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?”
Tell an agent
Post a filter and count embeddings in index {indexName} for field {fieldVar}.
Count embeddings via JSON body for content type {contentType} in language {language}.
POST /api/v1/ai/embeddings Create embeddings for content matching a query · Embed #
Ask an LLM
“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?”
Tell an agent
Build embeddings for content matching {query} into index {indexName}.
Embed the fields {fields} of content returned by {query}.
DELETE /api/v1/ai/embeddings Delete stored content embeddings · Delete #
Ask an LLM
“How do I remove embeddings I no longer want in the AI index?”
“Can I delete embeddings without dropping the whole embeddings database?”
Tell an agent destructive · confirm first
Delete the matching content embeddings.
Remove stored embeddings but keep the embeddings tables in place.
DELETE /api/v1/ai/embeddings/db Drop and recreate the embeddings tables · Drop and recreate tables #
Ask an LLM
“How do I completely reset the dotAI embeddings database?”
“Is there a way to wipe all embeddings and rebuild the tables from scratch?”
Tell an agent destructive · confirm first
Drop and recreate the embeddings database tables.
Wipe all embeddings and reset the vector tables.
GET /api/v1/ai/embeddings/indexCount Count embeddings per index · Index count #
Ask an LLM
“Which embedding indexes exist and how many entries does each hold?”
“What is the size of each dotAI index?”
Tell an agent
Show the embeddings count for every index.
List the AI indexes with their sizes.
GET /api/v1/ai/embeddings/test Test the embeddings endpoint · Text resource #
Ask an LLM
“Is the embeddings resource up and responding?”
“How can I smoke-test the embeddings service?”
Tell an agent
Ping the embeddings test endpoint.
Run the embeddings service health test.
GET /api/v1/ai/image/generate Generate an image from a prompt in the URL · Index by inode 1 #
Ask an LLM
“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?”
Tell an agent
Generate an image via GET for the prompt {prompt}.
Make a quick AI picture of {prompt} using the query-string endpoint.
POST /api/v1/ai/image/generate Generate AI images with size and model options · Handle image request #
Ask an LLM
“How do I generate several AI images at once in a specific size?”
“Can I pick the image model when generating images?”
Tell an agent
Generate {numberOfImages} images of {prompt} at size {size}.
Create an image of {prompt} with model {model}.
GET /api/v1/ai/image/test Test the image generation endpoint · Index by inode #
Ask an LLM
“Is AI image generation reachable on my instance?”
“How do I smoke-test the image service?”
Tell an agent
Ping the image generation test endpoint.
Check that the AI image service responds.
GET /api/v1/ai/search/related Find content related to a contentlet · Related by get #
Ask an LLM
“How can I find content semantically similar to a given contentlet?”
“Can I get related content by inode in a specific language?”
Tell an agent
Find content related to contentlet {identifier}.
Show related items for inode {inode} in index {indexName}.
POST /api/v1/ai/search/related Find related content using a posted JSON body · Related by post #
Ask an LLM
“Can I request related-content matches by posting JSON instead of query parameters?”
“Is there a POST variant for semantic related-content lookup?”
Tell an agent
Post a JSON request to find related content.
Look up semantically related content through the POST related endpoint.
GET /api/v1/ai/search Semantic search of content via query string · Search by get #
Ask an LLM
“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?”
Tell an agent
Semantically search content for {query}.
AI-search {query} on site {site} returning {searchLimit} results.
POST /api/v1/ai/search Semantic search of content via JSON body · Search by post #
Ask an LLM
“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?”
Tell an agent
Post a semantic search for {prompt} in index {indexName}.
Search {contentType} content for {prompt} using a JSON body with threshold {threshold}.
GET /api/v1/ai/search/test Test the AI search endpoint · Test response #
Ask an LLM
“Is the AI search service responding?”
“How do I smoke-test semantic search?”
Tell an agent
Ping the AI search test endpoint.
Check that AI search is up.
GET /api/v1/ai/text/generate Generate text from a prompt in the URL · Do get #
Ask an LLM
“Can I generate AI text with a GET request and a prompt parameter?”
“What's the simplest call to get generated text back?”
Tell an agent
Generate text via GET for the prompt {prompt}.
Write a quick blurb about {prompt} using the query-string text endpoint.
POST /api/v1/ai/text/generate Generate text with model and length options · Do post #
Ask an LLM
“How do I generate text with a set response length and temperature?”
“Can the text generator return a specific response format?”
Tell an agent
Generate text for {prompt} limited to {responseLengthTokens} tokens.
Write copy about {prompt} in format {responseFormat}.

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/dotcms:dotcms-ai-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

dotcms-ai-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: dotCMS REST AI API
  version: '3'
  description: AI-powered content generation and analysis endpoints
servers:
- url: /
  description: dotCMS Server
tags:
- name: AI
  description: AI-powered content generation and analysis endpoints
paths:
  /api/v1/ai/providers:
    get:
      tags:
      - AI
      summary: List dotAI provider configuration metadata
      description: Returns, for every registered dotAI provider, the capabilities it supports (chat/embeddings/image) and the providerConfig fields each supported capability requires or accepts.
      operationId: listAiProviders
      responses:
        '200':
          description: Provider metadata retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEntityAiProviderListView'
        '401':
          description: Unauthorized - authentication required
          content:
            application/json: {}
  /api/v1/ai/providers/test/{capability}:
    post:
      tags:
      - AI
      summary: Test a dotAI provider connection
      description: Builds the provider client for the given capability from the posted configuration and issues one minimal real request against the provider (a short chat reply, a one-line embedding, or a single test image). Masked credential fields ("*****") in the posted config are resolved against the real value already stored for siteId before testing. Returns success=false with a message on any validation or provider error rather than an HTTP error status, so the caller can always render the result.
      operationId: testAiProviderConnection
      parameters:
      - name: capability
        in: path
        required: true
        schema:
          type: string
      - name: siteId
        in: query
        schema:
          type: string
      requestBody:
        description: Provider config section to test
        content:
          application/json:
            schema:
              type: string
      responses:
        '200':
          description: Test executed — check the success field for the outcome
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEntityAiTestConnectionView'
        '400':
          description: Unknown capability or malformed request body
          content:
            application/json: {}
        '401':
          description: Unauthorized - authentication required
          content:
            application/json: {}
        '403':
          description: Forbidden - requires CMS admin, or access denied to site
          content:
            application/json: {}
  /api/v1/ai/completions/config:
    get:
      tags:
      - AI
      summary: Get AI service configuration
      description: Retrieves the current AI service configuration. Accepts an optional siteId query parameter (site identifier / UUID, or the literal SYSTEM_HOST). Hostname values are not supported — use the site identifier. When siteId is omitted or cannot be resolved, falls back to the site derived from the HTTP Host header.
      operationId: getAiConfig
      parameters:
      - name: siteId
        in: query
        schema:
          type: string
      responses:
        '200':
          description: Configuration retrieved successfully
          content:
            application/json:
              schema:
                type: string
        '401':
          description: Unauthorized - User not authenticated
        '403':
          description: Forbidden - User lacks permission for the requested site
        '500':
          description: Internal server error
    put:
      tags:
      - AI
      summary: Save AI provider configuration
      description: Saves the providerConfig JSON for the target site. Accepts an optional siteId query parameter (site identifier / UUID, or the literal SYSTEM_HOST). Hostname values are not supported — use the site identifier. When siteId is omitted, saves to the site derived from the HTTP Host header. An unresolvable siteId returns 400. Credential fields set to "*****" are preserved from the existing stored configuration. Requires CMS admin.
      operationId: saveAiConfig
      parameters:
      - name: siteId
        in: query
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: string
      responses:
        '200':
          description: Configuration saved successfully
        '400':
          description: Missing or invalid request body, or site not found
        '403':
          description: Forbidden - requires CMS admin or access denied to site
        '500':
          description: Internal server error
  /api/v1/ai/completions/rawPrompt:
    post:
      tags:
      - AI
      summary: Generate AI completions from raw prompt
      description: Processes raw prompts directly through the AI service without content preprocessing. Supports both streaming and non-streaming responses.
      operationId: rawPrompt
      requestBody:
        description: Completion form with raw prompt and configuration
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/CompletionsForm'
      responses:
        '200':
          description: Raw completion generated successfully
          content:
            application/json:
              schema:
                type: object
        '400':
          description: Bad request - Missing or invalid prompt
        '401':
          description: Unauthorized - User not authenticated
        '500':
          description: Internal server error
  /api/v1/ai/completions:
    post:
      tags:
      - AI
      summary: Generate AI completions from content
      description: Creates AI-powered content summaries and completions based on provided prompts. Supports both streaming and non-streaming responses.
      operationId: summarizeFromContent
      requestBody:
        description: Completion form with prompt and configuration
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/CompletionsForm'
      responses:
        '200':
          description: Completion generated successfully
          content:
            application/json:
              schema:
                type: object
        '400':
          description: Bad request - Missing or invalid prompt
        '401':
          description: Unauthorized - User not authenticated
        '500':
          description: Internal server error
  /api/v1/ai/embeddings/count:
    get:
      tags:
      - AI
      operationId: count_1
      parameters:
      - name: site
        in: query
        schema:
          type: string
      - name: contentType
        in: query
        schema:
          type: string
      - name: indexName
        in: query
        schema:
          type: string
      - name: language
        in: query
        schema:
          type: string
      - name: identifier
        in: query
        schema:
          type: string
      - name: inode
        in: query
        schema:
          type: string
      - name: fieldVar
        in: query
        schema:
          type: string
      responses:
        default:
          description: default response
          content:
            application/json: {}
      summary: Count 1
      x-summary-source: derived
    post:
      tags:
      - AI
      operationId: count
      requestBody:
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/CompletionsForm'
      responses:
        default:
          description: default response
          content:
            application/json: {}
      summary: Count
      x-summary-source: derived
  /api/v1/ai/embeddings:
    post:
      tags:
      - AI
      operationId: embed
      requestBody:
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/EmbeddingsForm'
      responses:
        default:
          description: default response
          content:
            application/json: {}
      summary: Embed
      x-summary-source: derived
    delete:
      tags:
      - AI
      operationId: delete
      requestBody:
        content:
          '*/*':
            schema:
              type: object
              properties:
                asMap:
                  type: object
                  additionalProperties:
                    type: object
                empty:
                  type: boolean
              additionalProperties:
                type: object
      responses:
        default:
          description: default response
          content:
            application/json: {}
      summary: Delete
      x-summary-source: derived
  /api/v1/ai/embeddings/db:
    delete:
      tags:
      - AI
      operationId: dropAndRecreateTables
      requestBody:
        content:
          '*/*':
            schema:
              type: object
              properties:
                asMap:
                  type: object
                  additionalProperties:
                    type: object
                empty:
                  type: boolean
              additionalProperties:
                type: object
      responses:
        default:
          description: default response
          content:
            application/json: {}
      summary: Drop and recreate tables
      x-summary-source: derived
  /api/v1/ai/embeddings/indexCount:
    get:
      tags:
      - AI
      operationId: indexCount
      responses:
        default:
          description: default response
          content:
            application/json: {}
      summary: Index count
      x-summary-source: derived
  /api/v1/ai/embeddings/test:
    get:
      tags:
      - AI
      operationId: textResource
      responses:
        default:
          description: default response
          content:
            application/json: {}
      summary: Text resource
      x-summary-source: derived
  /api/v1/ai/image/generate:
    get:
      tags:
      - AI
      operationId: indexByInode_1
      parameters:
      - name: prompt
        in: query
        schema:
          type: string
      responses:
        default:
          description: default response
          content:
            application/json: {}
      summary: Index by inode 1
      x-summary-source: derived
    post:
      tags:
      - AI
      operationId: handleImageRequest
      requestBody:
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/AIImageRequestDTO'
      responses:
        default:
          description: default response
          content:
            application/json: {}
      summary: Handle image request
      x-summary-source: derived
  /api/v1/ai/image/test:
    get:
      tags:
      - AI
      operationId: indexByInode
      responses:
        default:
          description: default response
          content:
            application/json: {}
      summary: Index by inode
      x-summary-source: derived
  /api/v1/ai/search/related:
    get:
      tags:
      - AI
      operationId: relatedByGet
      parameters:
      - name: language
        in: query
        schema:
          type: integer
          format: int64
      - name: identifier
        in: query
        schema:
          type: string
      - name: inode
        in: query
        schema:
          type: string
      - name: indexName
        in: query
        schema:
          type: string
      - name: fieldVar
        in: query
        schema:
          type: string
      responses:
        default:
          description: default response
          content:
            application/json: {}
      summary: Related by get
      x-summary-source: derived
    post:
      tags:
      - AI
      operationId: relatedByPost
      requestBody:
        content:
          '*/*':
            schema:
              type: object
              properties:
                asMap:
                  type: object
                  additionalProperties:
                    type: object
                empty:
                  type: boolean
              additionalProperties:
                type: object
      responses:
        default:
          description: default response
          content:
            application/json: {}
      summary: Related by post
      x-summary-source: derived
  /api/v1/ai/search:
    get:
      tags:
      - AI
      operationId: searchByGet
      parameters:
      - name: query
        in: query
        schema:
          type: string
      - name: searchLimit
        in: query
        schema:
          type: integer
          format: int32
          default: 1000
      - name: searchOffset
        in: query
        schema:
          type: integer
          format: int32
          default: 0
      - name: site
        in: query
        schema:
          type: string
      - name: contentType
        in: query
        schema:
          type: string
      - name: indexName
        in: query
        schema:
          type: string
          default: default
      - name: threshold
        in: query
        schema:
          type: number
          format: float
          default: 0.25
      - name: stream
        in: query
        schema:
          type: boolean
          default: false
      - name: responseLength
        in: query
        schema:
          type: integer
          format: int32
          default: 1024
      - name: operator
        in: query
        schema:
          type: string
          default: <=>
      - name: language
        in: query
        schema:
          type: string
      responses:
        default:
          description: default response
          content:
            application/octet-stream: {}
            application/json: {}
      summary: Search by get
      x-summary-source: derived
    post:
      tags:
      - AI
      operationId: searchByPost
      requestBody:
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/CompletionsForm'
      responses:
        default:
          description: default response
          content:
            application/json: {}
      summary: Search by post
      x-summary-source: derived
  /api/v1/ai/search/test:
    get:
      tags:
      - AI
      operationId: testResponse
      responses:
        default:
          description: default response
          content:
            application/json: {}
      summary: Test response
      x-summary-source: derived
  /api/v1/ai/text/generate:
    get:
      tags:
      - AI
      operationId: doGet
      parameters:
      - name: prompt
        in: query
        schema:
          type: string
      responses:
        default:
          description: default response
          content:
            application/json: {}
      summary: Do get
      x-summary-source: derived
    post:
      tags:
      - AI
      operationId: doPost
      requestBody:
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/CompletionsForm'
      responses:
        default:
          description: default response
          content:
            application/json: {}
      summary: Do post
      x-summary-source: derived
components:
  schemas:
    AIImageRequestDTO:
      type: object
      properties:
        prompt:
          type: string
        numberOfImages:
          type: integer
          format: int32
        size:
          type: string
        model:
          type: string
    MessageEntity:
      type: object
      properties:
        message:
          type: string
    CompletionsForm:
      type: object
      properties:
        prompt:
          type: string
        searchLimit:
          maximum: 1000
          minimum: 1
          type: integer
          format: int32
        searchOffset:
          minimum: 0
          type: integer
          format: int32
        responseLengthTokens:
          minimum: 128
          type: integer
          format: int32
        language:
          type: integer
          format: int64
        stream:
          type: boolean
        fieldVar:
          type: string
        indexName:
          type: string
        contentType:
          type: array
          items:
            type: string
        threshold:
          type: number
          format: float
        temperature:
          maximum: 2
          minimum: 0
          type: number
          format: float
        model:
          type: string
        operator:
          type: string
        site:
          type: string
        user:
          $ref: '#/components/schemas/User'
        responseFormat:
          type: object
          additionalProperties:
            type: object
    Role:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
        roleKey:
          type: string
        parent:
          type: string
        editPermissions:
          type: boolean
        editUsers:
          type: boolean
        editLayouts:
          type: boolean
        locked:
          type: boolean
        system:
          type: boolean
        roleChildren:
          type: array
          items:
            type: string
        fqn:
          type: string
        dbfqn:
          type: string
        user:
          type: boolean
    Pagination:
      type: object
      properties:
        currentPage:
          type: integer
          format: int32
        perPage:
          type: integer
          format: int32
        totalEntries:
          type: integer
          format: int64
    ProviderMetadata:
      type: object
      properties:
        provider:
          type: string
        supportedCapabilities:
          uniqueItems: true
          type: array
          items:
            type: string
            enum:
            - CHAT
            - EMBEDDINGS
            - IMAGE
        fields:
          type: object
          additionalProperties:
            type: array
            items:
              $ref: '#/components/schemas/ProviderField'
    ResponseEntityAiTestConnectionView:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorEntity'
        entity:
          $ref: '#/components/schemas/TestConnectionResult'
        messages:
          type: array
          items:
            $ref: '#/components/schemas/MessageEntity'
        i18nMessagesMap:
          type: object
          additionalProperties:
            type: string
        permissions:
          type: array
          items:
            type: string
        pagination:
          $ref: '#/components/schemas/Pagination'
    ErrorEntity:
      type: object
      properties:
        errorCode:
          type: string
        message:
          type: string
        fieldName:
          type: string
    EmbeddingsForm:
      type: object
      properties:
        query:
          type: string
        limit:
          maximum: 1000
          minimum: 1
          type: integer
          format: int32
        offset:
          minimum: 0
          type: integer
          format: int32
        indexName:
          type: string
        model:
          type: string
        velocityTemplate:
          type: string
        fields:
          type: array
          items:
            type: string
        userId:
          type: string
        requestHostId:
          type: string
    ResponseEntityAiProviderListView:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorEntity'
        entity:
          type: array
          items:
            $ref: '#/components/schemas/ProviderMetadata'
        messages:
          type: array
          items:
            $ref: '#/components/schemas/MessageEntity'
        i18nMessagesMap:
          type: object
          additionalProperties:
            type: string
        permissions:
          type: array
          items:
            type: string
        pagination:
          $ref: '#/components/schemas/Pagination'
    User:
      type: object
      properties:
        modificationDate:
          type: string
          format: date-time
        companyId:
          type: string
        resolution:
          type: string
        refreshRate:
          type: string
        defaultUser:
          type: boolean
        recipientName:
          type: string
        actualCompanyId:
          type: string
        female:
          type: boolean
        passwordExpired:
          type: boolean
        recipientId:
          type: string
        userRole:
          $ref: '#/components/schemas/Role'
        anonymousUser:
          type: boolean
        timeZoneId:
          type: string
        languageId:
          type: string
        recipientInternetAddress:
          type: string
        multipleRecipients:
          type: boolean
        fullName:
          type: string
        timeZone:
          type: object
          properties:
            dstsavings:
              type: integer
              format: int32
            rawOffset:
              type: integer
              format: int32
            id:
              type: string
            displayName:
              type: string
        locale:
          type: object
          properties:
            script:
              type: string
            variant:
              type: string
            unicodeLocaleAttributes:
              uniqueItems: true
              type: array
              items:
                type: string
            unicodeLocaleKeys:
              uniqueItems: true
              type: array
              items:
                type: string
            displayLanguage:
              type: string
            displayScript:
              type: string
            displayCountry:
              type: string
            displayVariant:
              type: string
            displayName:
              type: string
            country:
              type: string
            extensionKeys:
              uniqueItems: true
              type: array
              items:
                type: string
            iso3Language:
              type: string
            iso3Country:
              type: string
            language:
              type: string
        recipientAddress:
          type: string
        passwordEncrypted:
          type: boolean
        passwordExpirationDate:
          type: string
          format: date-time
        favoriteActivity:
          type: string
        favoriteBibleVerse:
          type: string
        agreedToTermsOfUse:
          type: boolean
        deleteInProgress:
          type: boolean
        male:
          type: boolean
        skinId:
          type: string
        loginDate:
          type: string
          format: date-time
        loginIP:
          type: string
        lastLoginDate:
          type: string
          format: date-time
        lastLoginIP:
          type: string
        createDate:
          type: string
          format: date-time
        deleteDate:
          type: string
          format: date-time
        passwordReset:
          type: boolean
        smsId:
          type: string
        aimId:
          type: string
        icqId:
          type: string
        msnId:
          type: string
        ymId:
          type: string
        favoriteFood:
          type: string
        favoriteMovie:
          type: string
        favoriteMusic:
          type: string
        dottedSkins:
          type: boolean
        roundedSkins:
          type: boolean
        greeting:
          type: string
        layoutIds:
          type: string
        comments:
          type: string
        emailAddress:
          type: string
        active:
          type: boolean
        firstName:
          type: string
        lastName:
          type: string
        middleName:
          type: string
        nickName:
          type: string
        birthday:
          type: string
          format: date-time
        additionalInfo:
          type: object
          additionalProperties:
            type: object
        failedLoginAttempts:
          type: integer
          format: int32
        userId:
          type: string
        password:
          type: string
        modified:
          type: boolean
        new:
          type: boolean
    TestConnectionResult:
      type: object
      properties:
        success:
          type: boolean
        message:
          type: string
    ProviderField:
      type: object
      properties:
        name:
          type: string
        type:
          type: string
          enum:
          - STRING
          - NUMBER
          - SECRET
        required:
          type: boolean
        hint:
          type: string
        requiredUnless:
          type: string