duvo.ai Duvo Pulse API
Create, list, iterate on, and delete Duvo Pulse dashboards — live, agent-generated visualizations of your Duvo data
Create, list, iterate on, and delete Duvo Pulse dashboards — live, agent-generated visualizations of your Duvo data
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