Create, test, publish, and manage Dreamlit notification workflows from AI clients.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Use only after explicit user confirmation and a prior prepare_publish result to publish or schedule a Dreamlit workflow. Side effect: installs live database/repeating/auth triggers, schedules or sends broadcasts, and may enable notification delivery; sandbox mode can hold notifications for inspection. Returns the published workflow status and app URLs. Do not call speculatively or without carrying forward the prepare_publish safety fields.
Workflow id to publish.
Whether to publish in sandbox mode so notifications are held for inspection.
Workflow updatedAt timestamp returned by prepare_publish, used as a safety check.
Editable version id returned by prepare_publish, used as a safety check.
Published version id returned by prepare_publish, used as a safety check.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
Use only after explicit user confirmation and a prior prepare_publish result to publish or schedule a Dreamlit workflow. Side effect: installs live database/repeating/auth triggers, schedules or sends broadcasts, and may enable notification delivery; sandbox mode can hold notifications for inspection. Returns the published workflow status and app URLs. Do not call speculatively or without carrying forward the prepare_publish safety fields.
| Argument | Type | Description |
|---|---|---|
| workflowId* | string | Workflow id to publish. |
| isSandboxed | boolean | Whether to publish in sandbox mode so notifications are held for inspection. |
| expectedUpdatedAtIso | any | Workflow updatedAt timestamp returned by prepare_publish, used as a safety check. |
| expectedEditableVersionId | any | Editable version id returned by prepare_publish, used as a safety check. |
| expectedPublishedVersionId | any | Published version id returned by prepare_publish, used as a safety check. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to publish."
},
"isSandboxed": {
"type": "boolean",
"description": "Whether to publish in sandbox mode so notifications are held for inspection."
},
"expectedUpdatedAtIso": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
},
"expectedEditableVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Editable version id returned by prepare_publish, used as a safety check."
},
"expectedPublishedVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Published version id returned by prepare_publish, used as a safety check."
}
}
}Creates a new Dreamlit workflow draft or updates an existing draft from an outcome-oriented natural-language prompt. Use after get_status; use get_workflow_and_preview_url first when editing an existing workflow, then describe the steps to change by what they do, not by step id. Each call continues the workflow's current chat; pass startNewChat to start fresh. Broadcasts that are scheduled, sent, or cancelled can't be edited; duplicate them in the Dreamlit web app instead. Existing Supabase Auth workflows can be edited except for the immutable trigger step; creating Supabase Auth workflows must happen through Supabase Auth email setup in the Dreamlit web app. Side effect: may create or modify a draft, but does not publish or install live triggers. Returns the workflow/draft result, action-required or handoff details when more input is needed, and relevant app URLs. Do not use for publishing, direct database changes, or low-level graph edits.
| Argument | Type | Description |
|---|---|---|
| name | string | Name for a new workflow draft. Use when the user names the workflow; otherwise Dreamlit picks one. Only valid when creating; use rename_workflow to rename an existing workflow. |
| prompt* | string | Outcome-oriented workflow authoring request. Describe the event or schedule, audience, recipient, message goal, data needed, timing, business rules, and unsubscribe intent. When editing, refer to existing steps by what they do (for example, the query that finds returning customers, or the email with subject "Welcome back"), never by step id. Let Dreamlit choose email styling unless the user gives specific style direction. For broadcasts, request a future send time instead of an immediate send. |
| projectId | string | Target project id for creating a new workflow draft. |
| workflowId |
Read-only. Use to query Dreamlit analytics for overview metrics, notification rows, recipient engagement, or workflow run rows with filters, sorting, and cursor pagination. Returns bounded structured analytics data, effective query metadata, pagination details when rows are included, and relevant app URLs. Do not use for CSV exports, bulk dumps, workflow edits, publishing, or low-level database access.
| Argument | Type | Description |
|---|---|---|
| sort | object | Optional row sort. Overview ignores sorting. |
| view* | string | Analytics surface to query: overview cards, notification rows, recipient rows, or workflow run rows. |
| limit | integer | Maximum rows to return. Defaults to 25 and is capped at 100. |
| range | object | Optional explicit timestamp range. Overrides window and is applied to the view's primary timestamp. |
| cursor | string | Opaque pagination cursor from a previous get_analytics response. |
| window | string | Relative analytics window. Defaults to 30d. Ignored when range is provided. |
| channel | string | Notification channel for overview and notification analytics. Defaults to email. Recipient analytics are email-only. |
Read-only. Use first when the agent needs Dreamlit product guidance, prompting guidance, approved workspace context, project setup, schema hints, workflow state, or relevant app URLs. Returns a compact context pack with concepts, recommended tool flow, actor/workspace/project data, optional authoring context, optional workflow context, and appUrls. Workflow summaries include liveStatus, and broadcasts include an authoritative broadcast.state. Database tables that Dreamlit can see but not read rows from (row level security with no policy for Dreamlit) carry a warning and fixSql; run fixSql, or ask the user to run it, in the Supabase SQL editor. If Dreamlit couldn't read a connection's tables, that connection has tablesError instead of an empty list meaning no tables. Do not use this to create, update, publish, or unpublish workflows.
| Argument | Type | Description |
|---|---|---|
| projectId | string | Optional project id. Include it to return project setup, schema hints, and authoring context. |
| workflowId | string | Optional workflow id. Include it to return concise workflow state and preview URL. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Optional project id. Include it to return project setup, schema hints, and authoring context."
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Optional workflow id. Include it to return concise workflow state and preview URL."
}
}
}Read-only. Use before editing, verifying, or preparing publish for an existing workflow. Returns normalized draft and published workflow structure, liveStatus, the Dreamlit preview/builder URL, and status URLs. Broadcasts also include a broadcast object with state (draft, scheduled, sending, sent, cancelled, or failed), the run's scheduledFor, and cancelledAt or completedAt; this, not published or the trigger's sendAt, says whether the broadcast will send. Step ids are for reading only; when asking create_or_update_workflow for changes, describe steps by what they do. Do not use to create, update, publish, or unpublish workflows.
| Argument | Type | Description |
|---|---|---|
| workflowId* | string | Workflow id to inspect before editing, verifying, or publishing. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to inspect before editing, verifying, or publishing."
}
}
}Read-only. Use when the user wants to inspect saved project brand styles for generated email drafts. Returns paginated project brand style summaries, ids, default status, style metadata, and app URLs. Do not use to create, update, delete, or expose raw style provenance.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of brand styles to return for this page. |
| offset | integer | Zero-based brand style offset for pagination. Use nextOffset from the previous response to fetch the next page. |
| projectId | string | Project id to list brand styles from. Required when access is ambiguous. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 100,
"minimum": 1,
"description": "Maximum number of brand styles to return for this page."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based brand style offset for pagination. Use nextOffset from the previous response to fetch the next page."
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Project id to list brand styles from. Required when access is ambiguous."
}
}
}Read-only. Use when the target project is unknown or the user names a project instead of providing an id. Returns accessible Dreamlit projects in the approved workspace with project and workflow-list URLs. Do not use to inspect workflow structure or author changes.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of projects to return. |
| search | string | Optional project name search string. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Maximum number of projects to return."
},
"search": {
"type": "string",
"maxLength": 200,
"description": "Optional project name search string."
}
}
}Read-only. Use to find workflows in a project by name, description, or trigger type before inspection or editing. Trigger filters include database, auth email, repeating, broadcast, and no-trigger workflows. Returns paginated workflow summaries, published/sandbox state, liveStatus, trigger type, folder (the folder name in the list the workflow shows in, or null), workflow URLs, totalCount, hasMore, and nextOffset. Broadcasts also include a broadcast object with state (draft, scheduled, sending, sent, cancelled, or failed), scheduledFor, and cancelledAt or completedAt; for broadcasts, broadcast.state and liveStatus are authoritative over published, because a cancelled broadcast stays published but will not send. Do not use as the final source of truth before editing; call get_workflow_and_preview_url for full structure.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of workflows to return for this page. |
| offset | integer | Zero-based workflow offset for pagination. Use nextOffset from the previous response to fetch the next page. |
| search | string | Optional workflow name or description search string. |
| projectId | string | Project id to list workflows from. Required when access is ambiguous. |
| triggerFilters | array | Optional trigger type filters. Use broadcast only for one-time audience emails. |
Use when the user asks to put a workflow or broadcast in a folder, move it to another folder, or take it out of a folder. Folders are per list: the Published and Drafts lists on the Workflows page and the Sent and Drafts lists on the Broadcasts page each have their own folders, and this moves the workflow within the list it shows in now. Folders are flat; a "/" is just part of the name. A draft's folder does not carry over when it is published. Side effect: may create the folder; never deletes folders and does not change the draft, published version, or live triggers. Returns the folder, the list, and app URLs. Do not use to rename or delete folders.
| Argument | Type | Description |
|---|---|---|
| folder* | any | Folder name, up to 64 characters. Matching ignores case and leading or trailing spaces; Dreamlit creates the folder if it doesn't exist yet. Pass null to take the workflow out of its folder. |
| workflowId* | string | Workflow id to move. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"workflowId",
"folder"
],
"properties": {
"folder": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Folder name, up to 64 characters. Matching ignores case and leading or trailing spaces; Dreamlit creates the folder if it doesn't exist yet. Pass null to take the workflow out of its folder."
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to move."
}
}
}Read-only validation step before publishing. Use after the user asks to publish and after inspecting the workflow if needed. Returns validation status, publish mode, preview URL, and a confirmation payload with version/timestamp safety checks for confirm_publish. Does not publish or schedule anything by itself.
| Argument | Type | Description |
|---|---|---|
| workflowId* | string | Workflow id to validate and prepare for explicit publish approval. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to validate and prepare for explicit publish approval."
}
}
}Use when the user asks to rename an existing Dreamlit workflow. Side effect: changes only the workflow name; the draft, published version, and live triggers are unchanged. Returns the updated name and app URLs. Do not use to edit workflow content or to name a new workflow; pass name to create_or_update_workflow instead.
| Argument | Type | Description |
|---|---|---|
| name* | string | New workflow name. Leading and trailing spaces are removed; it can't be blank. |
| workflowId* | string | Workflow id to rename. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"workflowId",
"name"
],
"properties": {
"name": {
"type": "string",
"description": "New workflow name. Leading and trailing spaces are removed; it can't be blank."
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to rename."
}
}
}Side effect when confirmSend is true: sends one current draft email or Slack message for review, but does not publish, schedule, or edit the workflow. Use after authoring or inspection when the user wants to verify an important message before publishing. Returns sent-test details, app URLs, a confirmation request, or a clarification request with user-facing message choices. If the test has no data because row level security hides a source table's rows from Dreamlit, returns error code table_rows_hidden_by_rls with unreadableTables[].fixSql to run, or ask the user to run, in the Supabase SQL editor. Do not expose test target ids as copy; ask users to choose by message label and confirm before sending.
| Argument | Type | Description |
|---|---|---|
| rowData | object | Optional sample data for rendering draft message variables during the test. If omitted, Dreamlit uses the same default preview data as the web builder when available. |
| workflowId* | string | Workflow id whose editable draft message should be tested. |
| confirmSend | boolean | Set to true only after the user explicitly confirms sending this selected test message. If omitted or false, Dreamlit returns confirmation_required and does not send. |
| messageType | string | Optional message type filter when selecting a draft message to test. |
| testTargetId | string | Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label. |
| testRecipientEmail |
Use after explicit user intent to unpublish a Dreamlit workflow. Side effect: disables live triggers or schedules so no new runs start. Runs already in progress keep sending unless inProgressRuns is "stop". If the workflow has in-progress runs and inProgressRuns is omitted, returns clarification_required with the count and changes nothing: ask the user whether to stop those runs or let them finish, then call again with their choice. Returns updated workflow status, stopped run counts (allRunsStopped, remainingRunCount), and app URLs. If some runs could not be stopped, ask the user, then call again with inProgressRuns "stop": on an already-unpublished workflow it only stops the runs still in progress. Do not use for deleting drafts, canceling one broadcast run, or editing workflow content.
| Argument | Type | Description |
|---|---|---|
| workflowId* | string | Workflow id to unpublish and disable live triggers or schedules. |
| inProgressRuns | string | What happens to runs already in progress, including runs waiting at a wait step. "stop" stops them so they send nothing more; "let_finish" lets them keep going and send. Required when the workflow has in-progress runs: ask the user, then call again with their choice. On an already-unpublished workflow, "stop" stops the runs still in progress. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to unpublish and disable live triggers or schedules."
},
"inProgressRuns": {
"enum": [
"stop",
"let_finish"
],
"type": "string",
"description": "What happens to runs already in progress, including runs waiting at a wait step. \"stop\" stops them so they send nothing more; \"let_finish\" lets them keep going and send. Required when the workflow has in-progress runs: ask the user, then call again with their choice. On an already-unpublished workflow, \"stop\" stops the runs still in progress."
}
}
}| string |
| Existing workflow id to continue editing. Use get_workflow_and_preview_url first when changing an existing workflow. |
| startNewChat | boolean | Start a fresh Dreamlit chat for this request instead of continuing the workflow's current chat. The new chat still sees the current draft but not earlier turns. Use when switching to an unrelated change, after long turns with pasted SQL or HTML, or when Dreamlit keeps misreading the request. Ignored when creating a workflow. |
| userCurrentTimeIso | string | User's current time as an ISO timestamp with offset, useful for relative schedule requests. |
| userCurrentTimeZoneId | string | IANA timezone id for the user, useful for repeating workflows and scheduled broadcasts. |
| userEmailStepComments | array | Optional inline comments for revising email step content. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"prompt"
],
"properties": {
"name": {
"type": "string",
"description": "Name for a new workflow draft. Use when the user names the workflow; otherwise Dreamlit picks one. Only valid when creating; use rename_workflow to rename an existing workflow."
},
"prompt": {
"type": "string",
"minLength": 1,
"description": "Outcome-oriented workflow authoring request. Describe the event or schedule, audience, recipient, message goal, data needed, timing, business rules, and unsubscribe intent. When editing, refer to existing steps by what they do (for example, the query that finds returning customers, or the email with subject \"Welcome back\"), never by step id. Let Dreamlit choose email styling unless the user gives specific style direction. For broadcasts, request a future send time instead of an immediate send."
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Target project id for creating a new workflow draft."
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Existing workflow id to continue editing. Use get_workflow_and_preview_url first when changing an existing workflow."
},
"startNewChat": {
"type": "boolean",
"description": "Start a fresh Dreamlit chat for this request instead of continuing the workflow's current chat. The new chat still sees the current draft but not earlier turns. Use when switching to an unrelated change, after long turns with pasted SQL or HTML, or when Dreamlit keeps misreading the request. Ignored when creating a workflow."
},
"userCurrentTimeIso": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"description": "User's current time as an ISO timestamp with offset, useful for relative schedule requests."
},
"userCurrentTimeZoneId": {
"type": "string",
"minLength": 1,
"description": "IANA timezone id for the user, useful for repeating workflows and scheduled broadcasts."
},
"userEmailStepComments": {
"type": "array",
"items": {
"type": "object",
"required": [
"workflowStepId",
"comment",
"onCodeLineText",
"userHighlightedText"
],
"properties": {
"comment": {
"type": "string",
"minLength": 1,
"description": "User's requested change."
},
"onCodeLineText": {
"type": "string",
"minLength": 1,
"description": "Nearby email editor text for anchoring the comment."
},
"workflowStepId": {
"type": "string",
"minLength": 1,
"description": "Workflow step id that the user commented on."
},
"userHighlightedText": {
"type": "string",
"minLength": 1,
"description": "Specific text selected by the user."
}
}
},
"description": "Optional inline comments for revising email step content."
}
}
}| filters | object | Optional analytics filters. Unsupported combinations return a clear error. |
| include | array | Optional response sections to include. Defaults depend on the requested view. |
| timeZone | string | IANA timezone for daily series bucketing. Defaults to UTC. |
| projectId | string | Project id to query analytics from. Required when access is ambiguous. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"view"
],
"properties": {
"sort": {
"type": "object",
"required": [
"field"
],
"properties": {
"dir": {
"enum": [
"asc",
"desc"
],
"type": "string",
"description": "Sort direction. Defaults to desc."
},
"field": {
"enum": [
"timestamp",
"sentTo",
"subject",
"workflow",
"engagement",
"recipient",
"lastSentAt",
"sent",
"opened",
"clicked",
"bounced",
"complained"
],
"type": "string",
"description": "Sort field. Valid fields depend on the requested view."
}
},
"description": "Optional row sort. Overview ignores sorting."
},
"view": {
"enum": [
"overview",
"notifications",
"recipients",
"workflow_runs"
],
"type": "string",
"description": "Analytics surface to query: overview cards, notification rows, recipient rows, or workflow run rows."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum rows to return. Defaults to 25 and is capped at 100."
},
"range": {
"type": "object",
"properties": {
"to": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"description": "Inclusive ISO timestamp upper bound."
},
"from": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"description": "Inclusive ISO timestamp lower bound."
}
},
"description": "Optional explicit timestamp range. Overrides window and is applied to the view's primary timestamp."
},
"cursor": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Opaque pagination cursor from a previous get_analytics response."
},
"window": {
"enum": [
"1h",
"24h",
"7d",
"14d",
"30d",
"90d",
"all"
],
"type": "string",
"description": "Relative analytics window. Defaults to 30d. Ignored when range is provided."
},
"channel": {
"enum": [
"email",
"slack"
],
"type": "string",
"description": "Notification channel for overview and notification analytics. Defaults to email. Recipient analytics are email-only."
},
"filters": {
"type": "object",
"properties": {
"topicIds": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"maxItems": 100,
"description": "Email unsubscribe topic ids to include."
},
"recipient": {
"type": "string",
"maxLength": 320,
"description": "Email recipient search string."
},
"startedAt": {
"type": "object",
"properties": {
"to": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"description": "Inclusive ISO timestamp upper bound."
},
"from": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"description": "Inclusive ISO timestamp lower bound."
}
},
"description": "Workflow run started timestamp range. Only applies to workflow_runs."
},
"engagement": {
"enum": [
"undelivered",
"bounced",
"complained",
"clicked",
"opened"
],
"type": "string",
"description": "Email engagement filter."
},
"runStatuses": {
"type": "array",
"items": {
"enum": [
"RUNNING",
"PAUSED",
"COMPLETED",
"FAILED",
"SKIPPED",
"CANCELLED"
],
"type": "string"
},
"maxItems": 6,
"description": "Workflow run statuses to include. Only applies to workflow_runs."
},
"workflowIds": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"maxItems": 100,
"description": "Workflow ids to include."
},
"workflowRunId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow run id to include for notification analytics."
},
"slackWebhookIds": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"maxItems": 100,
"description": "Slack webhook ids to include for Slack notification analytics."
},
"workflowStepRunId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow step run id to include for notification analytics."
},
"notificationStatuses": {
"type": "array",
"items": {
"enum": [
"sent",
"pending",
"releasable",
"failed",
"canceled",
"suppressed",
"opted_out"
],
"type": "string"
},
"maxItems": 7,
"description": "Email notification lifecycle statuses to include."
}
},
"description": "Optional analytics filters. Unsupported combinations return a clear error."
},
"include": {
"type": "array",
"items": {
"enum": [
"summary",
"series",
"rows",
"recentEvents",
"segments"
],
"type": "string"
},
"maxItems": 5,
"description": "Optional response sections to include. Defaults depend on the requested view."
},
"timeZone": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "IANA timezone for daily series bucketing. Defaults to UTC."
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Project id to query analytics from. Required when access is ambiguous."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"default": 80,
"maximum": 100,
"minimum": 1,
"description": "Maximum number of workflows to return for this page."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based workflow offset for pagination. Use nextOffset from the previous response to fetch the next page."
},
"search": {
"type": "string",
"maxLength": 200,
"description": "Optional workflow name or description search string."
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Project id to list workflows from. Required when access is ambiguous."
},
"triggerFilters": {
"type": "array",
"items": {
"enum": [
"auth_email",
"database",
"broadcast",
"repeating",
"none"
],
"type": "string"
},
"description": "Optional trigger type filters. Use broadcast only for one-time audience emails."
}
}
}| string |
| Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"workflowId"
],
"properties": {
"rowData": {
"type": "object",
"description": "Optional sample data for rendering draft message variables during the test. If omitted, Dreamlit uses the same default preview data as the web builder when available.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id whose editable draft message should be tested."
},
"confirmSend": {
"type": "boolean",
"description": "Set to true only after the user explicitly confirms sending this selected test message. If omitted or false, Dreamlit returns confirmation_required and does not send."
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string",
"description": "Optional message type filter when selecting a draft message to test."
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label."
},
"testRecipientEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address."
}
}
}