duvo.ai Duvo Pulse API

Create, list, iterate on, and delete Duvo Pulse dashboards — live, agent-generated visualizations of your Duvo data

OpenAPI Specification

duvoai-duvo-pulse-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Duvo Public Agent Folders Duvo Pulse API
  description: Public API for programmatic access to Duvo. Authenticate with API keys created in the Duvo dashboard.
  version: 1.0.0
servers:
- url: https://api.duvo.ai
  description: Production server
tags:
- name: Duvo Pulse
  description: Create, list, iterate on, and delete Duvo Pulse dashboards — live, agent-generated visualizations of your Duvo data
paths:
  /v2/artifacts:
    get:
      operationId: listPulseDashboards
      tags:
      - Duvo Pulse
      description: List your Duvo Pulse dashboards (live, agent-generated visualizations of your Duvo data), most recently updated first.
      parameters:
      - schema:
          default: 20
          type: integer
          minimum: 1
          maximum: 100
        in: query
        name: limit
        required: false
        description: Number of results per page (1-100, default 20)
      - schema:
          default: 0
          type: integer
          minimum: 0
          maximum: 9007199254740991
        in: query
        name: offset
        required: false
        description: Number of results to skip
      - schema:
          default: created
          type: string
          enum:
          - created
          - shared
          - team
        in: query
        name: scope
        required: false
        description: 'Which dashboards to return: ''created'' (yours, the default), ''team'' (published to your whole team by a teammate), or ''shared'' (shared with you individually by a teammate).'
      security:
      - bearerAuth: []
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  artifacts:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          format: uuid
                        team_id:
                          type: string
                          format: uuid
                        created_by_user_id:
                          type: string
                          format: uuid
                        title:
                          nullable: true
                          type: string
                        html_code_present:
                          type: boolean
                        status:
                          type: string
                          enum:
                          - not_started
                          - pending
                          - running
                          - completed
                          - failed
                          - interrupted
                        visibility:
                          type: string
                          enum:
                          - private
                          - team
                          - organization
                          - teams
                        publish_permission:
                          type: string
                          enum:
                          - view
                          - edit
                        thumbnail_url:
                          nullable: true
                          type: string
                        refresh_frequency:
                          nullable: true
                          type: string
                          enum:
                          - every_15_minutes
                          - every_30_minutes
                          - hourly
                          - every_6_hours
                          - daily
                          - weekly
                        last_refresh_at:
                          nullable: true
                          type: string
                        next_refresh_at:
                          nullable: true
                          type: string
                        created_at:
                          type: string
                        updated_at:
                          type: string
                      required:
                      - id
                      - team_id
                      - created_by_user_id
                      - title
                      - html_code_present
                      - status
                      - visibility
                      - publish_permission
                      - created_at
                      - updated_at
                      additionalProperties: false
                  total:
                    type: number
                  limit:
                    type: number
                  offset:
                    type: number
                required:
                - artifacts
                - total
                - limit
                - offset
                additionalProperties: false
        '401':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
        '403':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
      summary: List Pulse Dashboards
    post:
      operationId: createPulseDashboard
      tags:
      - Duvo Pulse
      description: Create a new Duvo Pulse dashboard from a natural-language prompt (e.g. 'open cases by queue this week') and dispatch the first generation turn. Generation is asynchronous — poll GET /artifacts/{artifactId} until status is completed.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                message:
                  type: string
                  minLength: 1
                  maxLength: 10000
                connection_ids:
                  maxItems: 10
                  type: array
                  items:
                    type: string
                    format: uuid
              required:
              - message
      responses:
        '201':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  artifact_id:
                    type: string
                    format: uuid
                  user_message:
                    type: object
                    properties:
                      id:
                        type: string
                        format: uuid
                      artifact_id:
                        type: string
                        format: uuid
                      author_user_id:
                        nullable: true
                        type: string
                        format: uuid
                      role:
                        type: string
                        enum:
                        - user
                        - assistant
                      content:
                        type: string
                      created_at:
                        type: string
                      revision_id:
                        nullable: true
                        type: string
                        format: uuid
                      message:
                        nullable: true
                      selected_element:
                        nullable: true
                        type: object
                        properties:
                          selector:
                            type: string
                            minLength: 1
                            maxLength: 2000
                          label:
                            type: string
                            minLength: 1
                            maxLength: 200
                          tag_name:
                            type: string
                            minLength: 1
                            maxLength: 50
                          text:
                            type: string
                            maxLength: 500
                          outer_html:
                            type: string
                            minLength: 1
                            maxLength: 4000
                        required:
                        - selector
                        - label
                        - tag_name
                        - outer_html
                        additionalProperties: false
                    required:
                    - id
                    - artifact_id
                    - role
                    - content
                    - created_at
                    additionalProperties: false
                required:
                - artifact_id
                - user_message
                additionalProperties: false
        '400':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
        '401':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
        '403':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
        '500':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
      summary: Create Pulse Dashboard
  /v2/artifacts/{artifactId}:
    get:
      operationId: getPulseDashboard
      tags:
      - Duvo Pulse
      description: Get a Duvo Pulse dashboard's metadata and generation status. When status is completed and html_code_present is true, fetch the rendered HTML from GET /artifacts/{artifactId}/render; the conversation is served by GET /artifacts/{artifactId}/messages.
      parameters:
      - schema:
          type: string
          format: uuid
        in: path
        name: artifactId
        required: true
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  artifact:
                    type: object
                    properties:
                      id:
                        type: string
                        format: uuid
                      team_id:
                        type: string
                        format: uuid
                      created_by_user_id:
                        type: string
                        format: uuid
                      title:
                        nullable: true
                        type: string
                      html_code_present:
                        type: boolean
                      status:
                        type: string
                        enum:
                        - not_started
                        - pending
                        - running
                        - completed
                        - failed
                        - interrupted
                      visibility:
                        type: string
                        enum:
                        - private
                        - team
                        - organization
                        - teams
                      publish_permission:
                        type: string
                        enum:
                        - view
                        - edit
                      thumbnail_url:
                        nullable: true
                        type: string
                      refresh_frequency:
                        nullable: true
                        type: string
                        enum:
                        - every_15_minutes
                        - every_30_minutes
                        - hourly
                        - every_6_hours
                        - daily
                        - weekly
                      last_refresh_at:
                        nullable: true
                        type: string
                      next_refresh_at:
                        nullable: true
                        type: string
                      created_at:
                        type: string
                      updated_at:
                        type: string
                    required:
                    - id
                    - team_id
                    - created_by_user_id
                    - title
                    - html_code_present
                    - status
                    - visibility
                    - publish_permission
                    - created_at
                    - updated_at
                    additionalProperties: false
                  is_creator:
                    type: boolean
                  can_edit:
                    type: boolean
                required:
                - artifact
                - is_creator
                - can_edit
                additionalProperties: false
        '401':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
        '403':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
        '404':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
      summary: Get Pulse Dashboard
    patch:
      operationId: updatePulseDashboard
      tags:
      - Duvo Pulse
      description: Update a Duvo Pulse dashboard's settings — rename it or change its auto-refresh frequency. Only the creator can update it.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  minLength: 1
                  maxLength: 120
                refresh_frequency:
                  nullable: true
                  type: string
                  enum:
                  - every_15_minutes
                  - every_30_minutes
                  - hourly
                  - every_6_hours
                  - daily
                  - weekly
              additionalProperties: false
      parameters:
      - schema:
          type: string
          format: uuid
        in: path
        name: artifactId
        required: true
      security:
      - bearerAuth: []
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                  team_id:
                    type: string
                    format: uuid
                  created_by_user_id:
                    type: string
                    format: uuid
                  title:
                    nullable: true
                    type: string
                  html_code_present:
                    type: boolean
                  status:
                    type: string
                    enum:
                    - not_started
                    - pending
                    - running
                    - completed
                    - failed
                    - interrupted
                  visibility:
                    type: string
                    enum:
                    - private
                    - team
                    - organization
                    - teams
                  publish_permission:
                    type: string
                    enum:
                    - view
                    - edit
                  thumbnail_url:
                    nullable: true
                    type: string
                  refresh_frequency:
                    nullable: true
                    type: string
                    enum:
                    - every_15_minutes
                    - every_30_minutes
                    - hourly
                    - every_6_hours
                    - daily
                    - weekly
                  last_refresh_at:
                    nullable: true
                    type: string
                  next_refresh_at:
                    nullable: true
                    type: string
                  created_at:
                    type: string
                  updated_at:
                    type: string
                required:
                - id
                - team_id
                - created_by_user_id
                - title
                - html_code_present
                - status
                - visibility
                - publish_permission
                - created_at
                - updated_at
                additionalProperties: false
        '401':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
        '403':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
        '404':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
      summary: Update Pulse Dashboard
    delete:
      operationId: deletePulseDashboard
      tags:
      - Duvo Pulse
      description: Delete a Duvo Pulse dashboard. Only the creator can delete it.
      parameters:
      - schema:
          type: string
          format: uuid
        in: path
        name: artifactId
        required: true
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                    - true
                required:
                - success
                additionalProperties: false
        '401':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
        '403':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
        '404':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
      summary: Delete Pulse Dashboard
  /v2/artifacts/{artifactId}/render:
    get:
      operationId: getPulseDashboardHtml
      tags:
      - Duvo Pulse
      description: Serve a Duvo Pulse dashboard's rendered HTML document (text/html, not JSON). 404 until the first generation turn has produced HTML.
      parameters:
      - schema:
          type: string
          format: uuid
        in: path
        name: artifactId
        required: true
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                type: string
        '401':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
        '403':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
        '404':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
      summary: Get Pulse Dashboard Html
  /v2/artifacts/{artifactId}/export/pdf:
    get:
      operationId: getPulseDashboardPdf
      tags:
      - Duvo Pulse
      description: Render a Duvo Pulse dashboard to a PDF document (application/pdf, not JSON). 404 until the first generation turn has produced HTML.
      parameters:
      - schema:
          default: light
          type: string
          enum:
          - light
          - dark
        in: query
        name: theme
        required: false
      - schema:
          type: string
          format: uuid
        in: path
        name: artifactId
        required: true
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema: {}
        '401':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
        '403':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
        '404':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
      summary: Get Pulse Dashboard Pdf
  /v2/artifacts/{artifactId}/export/html:
    get:
      operationId: exportPulseDashboardHtml
      tags:
      - Duvo Pulse
      description: Render a Duvo Pulse dashboard to a self-contained static HTML snapshot (text/html, data baked in). 404 until the first generation turn has produced HTML.
      parameters:
      - schema:
          default: light
          type: string
          enum:
          - light
          - dark
        in: query
        name: theme
        required: false
      - schema:
          type: string
          format: uuid
        in: path
        name: artifactId
        required: true
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                type: string
        '401':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
        '403':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
        '404':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
      summary: Export Pulse Dashboard Html
  /v2/artifacts/{artifactId}/publish:
    post:
      operationId: publishPulseDashboard
      tags:
      - Duvo Pulse
      description: Publish (share) a Duvo Pulse dashboard to your whole team or your whole organization, or revert it to private (creator only). When publishing, set permission to 'view' (teammates see the dashboard) or 'edit' (teammates can also iterate on it); organization-wide viewers outside the team always get view-only access.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                visibility:
                  type: string
                  enum:
                  - private
                  - team
                  - organization
                permission:
                  type: string
                  enum:
                  - view
                  - edit
              required:
              - visibility
              additionalProperties: false
      parameters:
      - schema:
          type: string
          format: uuid
        in: path
        name: artifactId
        required: true
      security:
      - bearerAuth: []
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                  team_id:
                    type: string
                    format: uuid
                  created_by_user_id:
                    type: string
                    format: uuid
                  title:
                    nullable: true
                    type: string
                  html_code_present:
                    type: boolean
                  status:
                    type: string
                    enum:
                    - not_started
                    - pending
                    - running
                    - completed
                    - failed
                    - interrupted
                  visibility:
                    type: string
                    enum:
                    - private
                    - team
                    - organization
                    - teams
                  publish_permission:
                    type: string
                    enum:
                    - view
                    - edit
                  thumbnail_url:
                    nullable: true
                    type: string
                  refresh_frequency:
                    nullable: true
                    type: string
                    enum:
                    - every_15_minutes
                    - every_30_minutes
                    - hourly
                    - every_6_hours
                    - daily
                    - weekly
                  last_refresh_at:
                    nullable: true
                    type: string
                  next_refresh_at:
                    nullable: true
                    type: string
                  created_at:
                    type: string
                  updated_at:
                    type: string
                required:
                - id
                - team_id
                - created_by_user_id
                - title
                - html_code_present
                - status
                - visibility
                - publish_permission
                - created_at
                - updated_at
                additionalProperties: false
        '400':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
        '401':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
        '403':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
        '404':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                - error
                additionalProperties: false
      summary: Publish Pulse Dashboard
  /v2/artifacts/{artifactId}/duplicate:
    post:
      operationId: duplicatePulseDashboard
      tags:
      - Duvo Pulse
      description: Duplicate a Duvo Pulse dashboard, producing an idle clone of the current rendered dashboard. The conversation history, shares, and connections are not copied.
      parameters:
      - schema:
          type: string
          format: uuid
        in: path
        name: artifactId
        required: true
      security:
      - bearerAuth: []
      responses:
        '201':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                  team_id:
                    type: string
                    format: uuid
                  created_by_user_id:
                    type: string
                    format: uuid
                  title:
                    null

# --- truncated at 32 KB (81 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/duvoai/refs/heads/main/openapi/duvoai-duvo-pulse-api-openapi.yml