Delphi Conversations API

Create conversations, stream responses, view history, and manage conversation lifecycle.

OpenAPI Specification

delphi-conversations-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Delphi Audience Conversations API
  version: v3
  x-provenance:
    generated: '2026-07-18'
    method: generated
    source: https://docs.delphi.ai/advanced/actions/api-immortal-only.md and the per-resource reference pages (audience, conversations, clone, questions, tags, usage, voice, search). Hand-built from the published REST reference; Delphi does not publish a machine-readable OpenAPI.
  description: The Delphi API lets you integrate your Digital Mind (an AI clone trained on your content) directly into your own app, platform, or workflow. Create conversations, stream text and voice responses, manage your audience and its contextual memory, organize contacts with tags, search your clone's knowledge base for RAG, and track per-user usage. API access is available on the Immortal plan. All endpoints authenticate with an API key passed in the x-api-key header and are scoped to a single clone.
  contact:
    name: Delphi Support
    email: support@delphi.ai
    url: https://docs.delphi.ai/advanced/actions/api-immortal-only
  termsOfService: https://delphi.ai/terms
servers:
- url: https://api.delphi.ai
  description: Production
security:
- ApiKeyAuth: []
tags:
- name: Conversations
  description: Create conversations, stream responses, view history, and manage conversation lifecycle.
paths:
  /v3/conversation:
    post:
      operationId: createConversation
      tags:
      - Conversations
      summary: Create a conversation
      description: Start a new conversation with your clone. Returns a conversation ID and the clone's initial greeting.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                user_email:
                  type: string
                  description: Email of the user starting the chat. If omitted, an anonymous conversation is created.
            example:
              user_email: user@example.com
      responses:
        '200':
          description: Conversation created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConversationCreated'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
  /v3/stream:
    post:
      operationId: streamResponse
      tags:
      - Conversations
      summary: Stream a response
      description: Send a message and receive the clone's response as a real-time stream of Server-Sent Events. The stream ends with a [DONE] event.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - conversation_id
              - message
              properties:
                conversation_id:
                  type: string
                  description: UUID of the conversation
                message:
                  type: string
                  description: The user's message
                file_urls:
                  type: array
                  items:
                    type: string
                  description: URLs of user-uploaded files for context
                slug:
                  type: string
                  description: Your clone's slug
            example:
              conversation_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
              message: What are your top 3 tips for getting started?
      responses:
        '200':
          description: Server-Sent Events stream of response chunks
          content:
            text/event-stream:
              schema:
                type: string
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
  /v3/conversation/list:
    get:
      operationId: listConversations
      tags:
      - Conversations
      summary: List conversations
      description: Retrieve all conversations for a specific user, sorted newest first. Only active (non-deleted) conversations are returned.
      parameters:
      - name: email
        in: query
        required: true
        schema:
          type: string
        description: The user's email address
      responses:
        '200':
          description: List of conversations
          content:
            application/json:
              schema:
                type: object
                properties:
                  conversations:
                    type: array
                    items:
                      $ref: '#/components/schemas/ConversationSummary'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
  /v3/conversation/{conversation_id}/history:
    get:
      operationId: getConversationHistory
      tags:
      - Conversations
      summary: Get conversation history
      description: Retrieve the full message history for a conversation, in chronological order (oldest first).
      parameters:
      - name: conversation_id
        in: path
        required: true
        schema:
          type: string
        description: UUID of the conversation
      - name: include_citations
        in: query
        required: false
        schema:
          type: boolean
          default: false
        description: Include source citations
      responses:
        '200':
          description: Conversation message history
          content:
            application/json:
              schema:
                type: object
                properties:
                  messages:
                    type: array
                    items:
                      $ref: '#/components/schemas/Message'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
  /v3/conversation/{conversation_id}/title:
    put:
      operationId: updateConversationTitle
      tags:
      - Conversations
      summary: Update conversation title
      description: Set or update the title of a conversation.
      parameters:
      - name: conversation_id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - title
              properties:
                title:
                  type: string
                  minLength: 1
                  maxLength: 500
                  description: New title (1-500 characters)
            example:
              title: Getting started tips
      responses:
        '200':
          description: Title updated
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                  title:
                    type: string
                  updated_at:
                    type: string
                    format: date-time
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
  /v3/conversation/{conversation_id}/append-clone-message:
    post:
      operationId: appendCloneMessage
      tags:
      - Conversations
      summary: Append a clone message
      description: Add a clone message to an existing conversation. Useful for seeding conversations or injecting a custom clone message mid-conversation.
      parameters:
      - name: conversation_id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - text
              properties:
                text:
                  type: string
                  minLength: 1
                  maxLength: 50000
                  description: Message text (1-50,000 characters)
            example:
              text: Welcome! Here are some things you can ask me about.
      responses:
        '200':
          description: Clone message appended
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Message'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
  /v3/conversation/{conversation_id}:
    delete:
      operationId: deleteConversation
      tags:
      - Conversations
      summary: Delete a conversation
      description: Soft-delete a conversation. It will no longer appear in list results; the conversation is hidden, not permanently removed.
      parameters:
      - name: conversation_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Conversation archived
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: archived
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  responses:
    Unauthorized:
      description: Missing or invalid API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: Too many requests — 120 requests per 60 seconds per API key exceeded
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Message:
      type: object
      properties:
        id:
          type: string
        text:
          type: string
        sender:
          type: string
          enum:
          - CLONE
          - USER
        created_at:
          type: string
          format: date-time
        citations:
          type: array
          items:
            $ref: '#/components/schemas/Citation'
    Citation:
      type: object
      properties:
        url:
          type: string
        text:
          type: string
        type:
          type: string
          enum:
          - WEB
          - PDF
          - TWITTER
        title:
          type:
          - string
          - 'null'
        page_num:
          type:
          - number
          - 'null'
        timestamp:
          type:
          - number
          - 'null'
        tweet_id:
          type:
          - string
          - 'null'
        citation_url:
          type:
          - string
          - 'null'
    ConversationSummary:
      type: object
      properties:
        id:
          type: string
        title:
          type:
          - string
          - 'null'
        created_at:
          type: string
          format: date-time
        medium:
          type: string
          example: API
    Error:
      type: object
      properties:
        error:
          type: string
          description: Error message
    ConversationCreated:
      type: object
      properties:
        conversation_id:
          type: string
        created_at:
          type: string
          format: date-time
        initial_message:
          type: string
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: API key scoped to a single clone. Available on the Immortal plan; request one from support@delphi.ai.