{
  "opencollection": "1.0.0",
  "info": {
    "name": "Duvo Public Agent Folders Duvo Pulse API",
    "version": "1.0.0"
  },
  "items": [
    {
      "info": {
        "name": "Duvo Pulse",
        "type": "folder"
      },
      "items": [
        {
          "info": {
            "name": "List Pulse Dashboards",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.duvo.ai/v2/artifacts",
            "params": [
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Number of results per page (1-100, default 20)"
              },
              {
                "name": "offset",
                "value": "",
                "type": "query",
                "description": "Number of results to skip"
              },
              {
                "name": "scope",
                "value": "",
                "type": "query",
                "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)."
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "List your Duvo Pulse dashboards (live, agent-generated visualizations of your Duvo data), most recently updated first."
        },
        {
          "info": {
            "name": "Create Pulse Dashboard",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.duvo.ai/v2/artifacts",
            "body": {
              "type": "json",
              "data": "{}"
            }
          },
          "docs": "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."
        },
        {
          "info": {
            "name": "Get Pulse Dashboard",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.duvo.ai/v2/artifacts/:artifactId",
            "params": [
              {
                "name": "artifactId",
                "value": "",
                "type": "path"
              }
            ]
          },
          "docs": "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."
        },
        {
          "info": {
            "name": "Update Pulse Dashboard",
            "type": "http"
          },
          "http": {
            "method": "PATCH",
            "url": "https://api.duvo.ai/v2/artifacts/:artifactId",
            "params": [
              {
                "name": "artifactId",
                "value": "",
                "type": "path"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Update a Duvo Pulse dashboard's settings — rename it or change its auto-refresh frequency. Only the creator can update it."
        },
        {
          "info": {
            "name": "Delete Pulse Dashboard",
            "type": "http"
          },
          "http": {
            "method": "DELETE",
            "url": "https://api.duvo.ai/v2/artifacts/:artifactId",
            "params": [
              {
                "name": "artifactId",
                "value": "",
                "type": "path"
              }
            ]
          },
          "docs": "Delete a Duvo Pulse dashboard. Only the creator can delete it."
        },
        {
          "info": {
            "name": "Get Pulse Dashboard Html",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.duvo.ai/v2/artifacts/:artifactId/render",
            "params": [
              {
                "name": "artifactId",
                "value": "",
                "type": "path"
              }
            ]
          },
          "docs": "Serve a Duvo Pulse dashboard's rendered HTML document (text/html, not JSON). 404 until the first generation turn has produced HTML."
        },
        {
          "info": {
            "name": "Get Pulse Dashboard Pdf",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.duvo.ai/v2/artifacts/:artifactId/export/pdf",
            "params": [
              {
                "name": "theme",
                "value": "",
                "type": "query"
              },
              {
                "name": "artifactId",
                "value": "",
                "type": "path"
              }
            ]
          },
          "docs": "Render a Duvo Pulse dashboard to a PDF document (application/pdf, not JSON). 404 until the first generation turn has produced HTML."
        },
        {
          "info": {
            "name": "Export Pulse Dashboard Html",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.duvo.ai/v2/artifacts/:artifactId/export/html",
            "params": [
              {
                "name": "theme",
                "value": "",
                "type": "query"
              },
              {
                "name": "artifactId",
                "value": "",
                "type": "path"
              }
            ]
          },
          "docs": "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."
        },
        {
          "info": {
            "name": "Publish Pulse Dashboard",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.duvo.ai/v2/artifacts/:artifactId/publish",
            "params": [
              {
                "name": "artifactId",
                "value": "",
                "type": "path"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "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."
        },
        {
          "info": {
            "name": "Duplicate Pulse Dashboard",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.duvo.ai/v2/artifacts/:artifactId/duplicate",
            "params": [
              {
                "name": "artifactId",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Duplicate a Duvo Pulse dashboard, producing an idle clone of the current rendered dashboard. The conversation history, shares, and connections are not copied."
        },
        {
          "info": {
            "name": "List Pulse Dashboard Messages",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.duvo.ai/v2/artifacts/:artifactId/messages",
            "params": [
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Maximum number of messages to return (1-500, default 50)."
              },
              {
                "name": "before",
                "value": "",
                "type": "query",
                "description": "Message id cursor: return the page of messages immediately older than this message. Omit for the most recent page."
              },
              {
                "name": "artifactId",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "List the chat transcript of a Duvo Pulse dashboard's live version (requires edit access). Returns the most recent page by default, oldest first within the page; pass `before` (a message id from a previous page) to walk back through older messages. Messages from other version branches are not included."
        },
        {
          "info": {
            "name": "Send Pulse Dashboard Message",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.duvo.ai/v2/artifacts/:artifactId/messages",
            "params": [
              {
                "name": "artifactId",
                "value": "",
                "type": "path"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            }
          },
          "docs": "Send an instruction to iterate on a Duvo Pulse dashboard (e.g. 'make it a bar chart', 'filter to last 14 days'). The creator can always iterate; teammates can too when the Pulse is published to the team with edit access. The agent regenerates asynchronously — poll GET /artifacts/{artifactId} for status."
        },
        {
          "info": {
            "name": "Refresh Pulse Dashboard",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.duvo.ai/v2/artifacts/:artifactId/refresh",
            "params": [
              {
                "name": "artifactId",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Trigger an on-demand data refresh of a Duvo Pulse dashboard. The dashboard regenerates its connection-sourced values in the background — poll GET /artifacts/{artifactId} for status."
        },
        {
          "info": {
            "name": "Stop Pulse Dashboard Message",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.duvo.ai/v2/artifacts/:artifactId/stop",
            "params": [
              {
                "name": "artifactId",
                "value": "",
                "type": "path"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            }
          },
          "docs": "Stop an in-flight Duvo Pulse generation turn. Only the creator can stop. Flips the dashboard to 'interrupted' and keeps any streamed-so-far reply; stopping when nothing is generating is a successful no-op."
        },
        {
          "info": {
            "name": "List Pulse Dashboard Connections",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.duvo.ai/v2/artifacts/:artifactId/connections",
            "params": [
              {
                "name": "artifactId",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "List the connections (data sources) attached to a Duvo Pulse dashboard (creator only)."
        },
        {
          "info": {
            "name": "Attach Pulse Dashboard Connection",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.duvo.ai/v2/artifacts/:artifactId/connections",
            "params": [
              {
                "name": "artifactId",
                "value": "",
                "type": "path"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Attach one of your connections (data sources) to a Duvo Pulse dashboard so the agent can use its tools (creator only)."
        },
        {
          "info": {
            "name": "Detach Pulse Dashboard Connection",
            "type": "http"
          },
          "http": {
            "method": "DELETE",
            "url": "https://api.duvo.ai/v2/artifacts/:artifactId/connections/:connectionId",
            "params": [
              {
                "name": "artifactId",
                "value": "",
                "type": "path"
              },
              {
                "name": "connectionId",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Detach a connection (data source) from a Duvo Pulse dashboard (creator only)."
        },
        {
          "info": {
            "name": "Answer Pulse Dashboard Question",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.duvo.ai/v2/artifacts/:artifactId/answer",
            "params": [
              {
                "name": "artifactId",
                "value": "",
                "type": "path"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Answer a pending question the Duvo Pulse agent asked and resume the paused run (creator or team editors). Use the toolCallId from the dashboard's message transcript."
        },
        {
          "info": {
            "name": "List Pulse Dashboard Versions",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.duvo.ai/v2/artifacts/:artifactId/revisions",
            "params": [
              {
                "name": "artifactId",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "List the version history of a Duvo Pulse dashboard, newest first (requires edit access). Use the version id with the restore and version-render endpoints."
        },
        {
          "info": {
            "name": "Get Pulse Dashboard Version Html",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.duvo.ai/v2/artifacts/:artifactId/revisions/:revisionId/render",
            "params": [
              {
                "name": "artifactId",
                "value": "",
                "type": "path"
              },
              {
                "name": "revisionId",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Serve a specific version's rendered HTML document for a Duvo Pulse dashboard (text/html, requires edit access)."
        },
        {
          "info": {
            "name": "Restore Pulse Dashboard Version",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.duvo.ai/v2/artifacts/:artifactId/revisions/:revisionId/restore",
            "params": [
              {
                "name": "artifactId",
                "value": "",
                "type": "path"
              },
              {
                "name": "revisionId",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Restore a previous version of a Duvo Pulse dashboard, making it live again (requires edit access). Non-destructive — it moves the head pointer to the chosen version."
        },
        {
          "info": {
            "name": "Move Pulse Dashboard",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.duvo.ai/v2/teams/:teamId/artifacts/:artifactId/move",
            "params": [
              {
                "name": "dryRun",
                "value": "",
                "type": "query",
                "description": "When true, only previews the move: reports which Connections would reconnect vs drop without changing anything."
              },
              {
                "name": "teamId",
                "value": "",
                "type": "path"
              },
              {
                "name": "artifactId",
                "value": "",
                "type": "path"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Move a Pulse dashboard from the team in the URL to another team, keeping only its latest revision (chat history and older revisions are deleted). The caller must be a Manager or above on both teams. Pass dryRun=true to preview which Connections reconnect vs drop without applying changes."
        }
      ]
    }
  ],
  "bundled": true
}