Added

Workflow Data App Tiles

Render Bobsled workflow outputs directly inside Data Apps. Workflow-backed tiles let API consumers attach a LangGraph workflow to a dashboard tile, pass typed scalar inputs, and display the selected workflow step output as a chart or table without rebuilding the workflow in SQL.

What's New

  • New workflow tile data-source variant alongside query, static, and agent-replay
  • New public endpoint to execute the workflow behind a Data App tile and return chart-ready output
  • Optional inputs object for workflow parameters and outputStepId for selecting a specific terminal or intermediate step
  • Typed failure envelopes for workflow timeouts, failed steps, workflow errors, and outputs that cannot be rendered as chart data
  • Account-level workflow-tiles feature flag gate for creating, updating, and running workflow tiles

New Endpoint

  • POST /api/v1/accounts/{accountId}/data-products/{dataProductId}/data-apps/{dataAppId}/tiles/{tileId}/run-workflow

The endpoint invokes the workflow referenced by a workflow tile and returns either parsed rows/markdown output or a typed failure. Tile execution is read-only at the persistence layer and uses viewer-level workspace read authorization.

Modified Endpoints

The public Data Apps create, update, and tile-management endpoints now accept workflow in tile dataSource payloads when the workflow-tiles feature flag is enabled for the account:

  • POST /api/v1/accounts/{accountId}/data-products/{dataProductId}/data-apps
  • PATCH /api/v1/accounts/{accountId}/data-products/{dataProductId}/data-apps/{dataAppId}
  • POST /api/v1/accounts/{accountId}/data-products/{dataProductId}/data-apps/{dataAppId}/tiles
  • PUT /api/v1/accounts/{accountId}/data-products/{dataProductId}/data-apps/{dataAppId}/tiles
  • PATCH /api/v1/accounts/{accountId}/data-products/{dataProductId}/data-apps/{dataAppId}/tiles/{tileId}

Tile Data-Source Schema

The public payload uses the Data Product ID from the URL as the workflow workspace identity, so workspaceId is not included in the tile body.

{
  "type": "workflow",
  "workflowId": "018f4b87-5a22-77bd-98df-8d8ca2e0cb91",
  "inputs": {
    "region": "north-america",
    "limit": 25,
    "includeInactive": false
  },
  "outputStepId": "summarize_revenue"
}

inputs values may be strings, numbers, booleans, or null. outputStepId is optional; if omitted, the system uses the workflow's terminal output.

Request Format

The run endpoint accepts an empty body and an optional cache-bust query parameter reserved for future cache support:

POST .../run-workflow
POST .../run-workflow?bust=1

Response Format - Success

Tabular workflow output returns chart-ready rows and display metadata:

{
  "ok": true,
  "headers": ["month", "revenue"],
  "rows": [
    { "month": "Jan", "revenue": 100 },
    { "month": "Feb", "revenue": 120 }
  ],
  "display": {
    "chartType": "line",
    "dimension": "month",
    "metrics": ["revenue"]
  },
  "stepId": "summarize_revenue",
  "workflowStatus": "success",
  "durationMs": 18234,
  "fromCache": false
}

Markdown workflow output is returned in a markdown-specific success envelope:

{
  "ok": true,
  "format": "markdown",
  "markdown": "## Revenue summary\n\nRevenue increased 20% month over month.",
  "stepId": "summarize_revenue",
  "workflowStatus": "success",
  "durationMs": 18234,
  "fromCache": false
}

Response Format - Typed Failure

Workflow execution failures return a 200 response with ok: false so clients can render targeted tile error states:

{
  "ok": false,
  "reason": "step-failed",
  "message": "Workflow step failed before producing chartable output.",
  "durationMs": 120000,
  "fromCache": false
}

Possible reasons: timeout, no-chartable-output, workflow-error, step-failed.

Error Responses

The endpoint also returns standard HTTP errors for operational failures:

  • 400 - tile is not type workflow or the stored workflow workspace does not match the Data Product path
  • 403 - viewer lacks read access to the workspace
  • 404 - data app or tile not found, or the workflow-tiles feature flag is off for this account
  • 500 - unexpected internal error

Getting Started

  1. Enable the workflow-tiles feature flag for the target account.
  2. Create or update a Data App tile with dataSource.type set to workflow.
  3. Provide the workflow ID, any scalar inputs required by the workflow, and optionally the output step ID to render.
  4. Load the dashboard or call the run endpoint directly to execute the workflow and render the returned rows or markdown.