Appearance
Apps & dashboards
Apps are workflows published with a simple form-style front end; Dashboards collect chart outputs from workflow runs into categories and let users filter and regenerate them. This page also covers the legacy "flow app" runner used by older apps.
Endpoints
| Method | Path | Purpose |
|---|---|---|
| GET | /dashboard/category/ | List dashboards (boards) |
| POST | /dashboard/category/ | Create a board |
| GET | /dashboard/category/{id}/ | Tiles on a board |
| POST | /dashboard/category/{id}/ | Duplicate a board |
| PUT | /dashboard/category/{id}/ | Rename, describe or share a board |
| DELETE | /dashboard/category/{id}/ | Delete a board |
| GET | /dashboard/chart/ | All my tiles (the catalogue) |
| POST | /dashboard/chart/ | Add a tile to a board |
| PUT | /dashboard/chart/{id}/ | Update a tile |
| PATCH | /dashboard/chart/{id}/ | Partially update a tile |
| DELETE | /dashboard/chart/{id}/ | Remove a tile |
| GET | /dashboard/chart/mgids/ | My chart documents in use |
| GET | /dashboard/chart/mgid-usage/ | Where a chart document is used |
| POST | /dashboard/chart/remove-mgid-everywhere/ | Remove a chart document from every tile |
| GET | /microservices/dashboard-data/ | Read a chart document |
| DELETE | /microservices/dashboard-data/ | Delete chart data |
| POST | /microservices/dashboard-data/delete-step/ | Delete every chart a workflow step produced |
| POST | /microservices/dashboard-chat/ | Ask a question about a chart |
| POST | /microservices/dashboard-chart-filter/ | Regenerate a chart with filters |
| PATCH | /microservices/dashboard-applied-filters/ | Save my filters for a chart |
| POST | /microservices/dashboard-applied-filters/batch/ | Read my filters for several charts |
| PATCH | /microservices/dashboard-filter-favourites/ | Save favourite filter sets for a chart |
| GET | /microservices/dashboard-insights/ | AI insights for a chart |
| GET | /microservices/dashboard-history/ | Chart history versions |
| GET | /microservices/dashboard-history/{version}/ | One chart history version |
| DELETE | /microservices/dashboard-history/{version}/ | Delete a chart history version |
| GET | /artifacts/ | Files the platform generated for me |
| GET | /workflow/ | List research flows (legacy) |
| POST | /workflow/ | Create a research flow (legacy) |
| GET | /workflow/{id}/ | Get a research flow (legacy) |
| PUT | /workflow/{id}/ | Update a research flow (legacy) |
| DELETE | /workflow/{id}/ | Delete a research flow (legacy) |
| POST | /workflow/strategy/generate/ | Generate a research strategy (legacy) |
| POST | /workflow/strategy/save/ | Save a research strategy (legacy) |
| POST | /workflow/run/stream/ | Run a research flow (legacy, streamed) |
GET /dashboard/category/
List dashboards (boards)
Boards you own plus boards shared with you, newest first.
Auth: Session token · In the app: Apps → Dashboard tab
Response 200 — Boards.
Array of:
| Field | Type | Description |
|---|---|---|
id | integer | |
dashboard_name_en | string | |
dashboard_name_ar | string, nullable | |
description_en | string, nullable | |
description_ar | string, nullable | |
shared | integer[] | User ids that can view the board (also applied to its tiles). |
created_at | string (date-time) | |
user | integer | Owner id. |
Example
bash
curl -X GET "https://api.example.com/dashboard/category/" \
-H "Authorization: Token $FINBLADE_TOKEN"POST /dashboard/category/
Create a board
Auth: Session token
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | no | |
dashboard_name_en | string | no | |
dashboard_name_ar | string, nullable | no | |
description_en | string, nullable | no | |
description_ar | string, nullable | no | |
shared | integer[] | no | User ids that can view the board (also applied to its tiles). |
created_at | string (date-time) | no | |
user | integer | no | Owner id. |
json
{
"dashboard_name_en": "Sales overview",
"description_en": "Weekly sales KPIs"
}Response 201 — Created.
| Field | Type | Description |
|---|---|---|
id | integer | |
dashboard_name_en | string | |
dashboard_name_ar | string, nullable | |
description_en | string, nullable | |
description_ar | string, nullable | |
shared | integer[] | User ids that can view the board (also applied to its tiles). |
created_at | string (date-time) | |
user | integer | Owner id. |
json
{
"id": 3,
"dashboard_name_en": "Sales overview",
"dashboard_name_ar": "نظرة عامة على المبيعات",
"description_en": "Weekly sales KPIs",
"description_ar": null,
"shared": [
57
],
"created_at": "2026-08-01T09:00:00Z",
"user": 42
}Response 400 — Validation errors.
json
{
"username": [
"A user with that username already exists."
]
}Example
bash
curl -X POST "https://api.example.com/dashboard/category/" \
-H "Authorization: Token $FINBLADE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"dashboard_name_en":"Sales overview","description_en":"Weekly sales KPIs"}'GET /dashboard/category/{id}/
Tiles on a board
Charts on the board that you own or that are shared with you. An empty board answers {"message": "No charts found"}.
Auth: Session token
Path parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | yes |
Response 200 — Tiles (array) — or {"message": "No charts found"} when empty.
Array of:
| Field | Type | Description |
|---|---|---|
id | integer | |
chart_name | string | |
chart_type | string | bar, line, pie, doughnut, radar, scatter, bubble, a metric type, or html_artifact. |
chat_sessions | integer[] | Chat sessions that produced/discuss this chart. |
category_id | integer | Board id. |
workflow_id | string | |
node_id | string | The workflow step that produced the chart. |
mgid | string, nullable | Chart document id (see GET /microservices/dashboard-data/). |
shared | integer[] | |
metadata | object | Tile settings (position, size, aggregated tabs, artifact id, source connection). |
locked_version | integer | Pin the tile to a chart-history version (0 = live). |
created_at | string (date-time) | |
user | integer |
Example
bash
curl -X GET "https://api.example.com/dashboard/category/3/" \
-H "Authorization: Token $FINBLADE_TOKEN"POST /dashboard/category/{id}/
Duplicate a board
Copies the board and all its tiles as <name> (Copy).
Auth: Session token
Path parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | yes |
Response 201 — The new board.
| Field | Type | Description |
|---|---|---|
id | integer | |
dashboard_name_en | string | |
dashboard_name_ar | string, nullable | |
description_en | string, nullable | |
description_ar | string, nullable | |
shared | integer[] | User ids that can view the board (also applied to its tiles). |
created_at | string (date-time) | |
user | integer | Owner id. |
json
{
"id": 3,
"dashboard_name_en": "Sales overview",
"dashboard_name_ar": "نظرة عامة على المبيعات",
"description_en": "Weekly sales KPIs",
"description_ar": null,
"shared": [
57
],
"created_at": "2026-08-01T09:00:00Z",
"user": 42
}Example
bash
curl -X POST "https://api.example.com/dashboard/category/<id>/" \
-H "Authorization: Token $FINBLADE_TOKEN"PUT /dashboard/category/{id}/
Rename, describe or share a board
Partial update. Changing shared propagates to every tile on the board.
Auth: Session token
Path parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | yes |
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | no | |
dashboard_name_en | string | no | |
dashboard_name_ar | string, nullable | no | |
description_en | string, nullable | no | |
description_ar | string, nullable | no | |
shared | integer[] | no | User ids that can view the board (also applied to its tiles). |
created_at | string (date-time) | no | |
user | integer | no | Owner id. |
json
{
"shared": [
57,
61
]
}Response 200 — Updated.
| Field | Type | Description |
|---|---|---|
id | integer | |
dashboard_name_en | string | |
dashboard_name_ar | string, nullable | |
description_en | string, nullable | |
description_ar | string, nullable | |
shared | integer[] | User ids that can view the board (also applied to its tiles). |
created_at | string (date-time) | |
user | integer | Owner id. |
json
{
"id": 3,
"dashboard_name_en": "Sales overview",
"dashboard_name_ar": "نظرة عامة على المبيعات",
"description_en": "Weekly sales KPIs",
"description_ar": null,
"shared": [
57
],
"created_at": "2026-08-01T09:00:00Z",
"user": 42
}Response 403 — No access.
json
{
"detail": "Authentication credentials were not provided."
}Example
bash
curl -X PUT "https://api.example.com/dashboard/category/<id>/" \
-H "Authorization: Token $FINBLADE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"shared":[57,61]}'DELETE /dashboard/category/{id}/
Delete a board
Deletes the board and its tiles; chart data used by no other tile is deleted too.
Auth: Session token
Path parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | yes |
Response 200 — Deleted.
| Field | Type | Description |
|---|---|---|
message | string |
json
{
"message": "OK"
}Example
bash
curl -X DELETE "https://api.example.com/dashboard/category/<id>/" \
-H "Authorization: Token $FINBLADE_TOKEN"GET /dashboard/chart/
All my tiles (the catalogue)
Every chart tile you own or that is shared with you, across boards. The app uses this as the catalogue of dashboards a chat can reference.
Auth: Session token · In the app: Apps → Dashboard; Chat AI → dashboard picker
Response 200 — Tiles.
Array of:
| Field | Type | Description |
|---|---|---|
id | integer | |
chart_name | string | |
chart_type | string | bar, line, pie, doughnut, radar, scatter, bubble, a metric type, or html_artifact. |
chat_sessions | integer[] | Chat sessions that produced/discuss this chart. |
category_id | integer | Board id. |
workflow_id | string | |
node_id | string | The workflow step that produced the chart. |
mgid | string, nullable | Chart document id (see GET /microservices/dashboard-data/). |
shared | integer[] | |
metadata | object | Tile settings (position, size, aggregated tabs, artifact id, source connection). |
locked_version | integer | Pin the tile to a chart-history version (0 = live). |
created_at | string (date-time) | |
user | integer |
Example
bash
curl -X GET "https://api.example.com/dashboard/chart/" \
-H "Authorization: Token $FINBLADE_TOKEN"POST /dashboard/chart/
Add a tile to a board
Pin a chart document (from a workflow run or a Chat AI turn) or a Studio artifact to a board.
Auth: Session token · In the app: Save chart to dashboard
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
chart_name | string | yes | |
chart_type | string | yes | |
category_id | integer | yes | |
workflow_id | string | yes | |
node_id | string | yes | |
mgid | string | no | |
chat_sessions | integer[] | no | |
shared | integer[] | no | |
metadata | object | no | |
locked_version | integer | no | Default: 0. |
json
{
"chart_name": "Orders by month",
"chart_type": "bar",
"category_id": 3,
"workflow_id": "7d4c2b1a-0e9f-4a3b-8c7d-6e5f4a3b2c1d",
"node_id": "step4",
"mgid": "mg_5f3e2d1c"
}Response 201 — Created.
| Field | Type | Description |
|---|---|---|
id | integer | |
chart_name | string | |
chart_type | string | bar, line, pie, doughnut, radar, scatter, bubble, a metric type, or html_artifact. |
chat_sessions | integer[] | Chat sessions that produced/discuss this chart. |
category_id | integer | Board id. |
workflow_id | string | |
node_id | string | The workflow step that produced the chart. |
mgid | string, nullable | Chart document id (see GET /microservices/dashboard-data/). |
shared | integer[] | |
metadata | object | Tile settings (position, size, aggregated tabs, artifact id, source connection). |
locked_version | integer | Pin the tile to a chart-history version (0 = live). |
created_at | string (date-time) | |
user | integer |
json
{
"id": 91,
"chart_name": "Orders by month",
"chart_type": "bar",
"chat_sessions": [
9174
],
"category_id": 3,
"workflow_id": "7d4c2b1a-0e9f-4a3b-8c7d-6e5f4a3b2c1d",
"node_id": "step4",
"mgid": "mg_5f3e2d1c",
"shared": [
57
],
"metadata": {
"position": {
"x": 0,
"y": 0
},
"size": {
"width": 6,
"height": 4
}
},
"locked_version": 0,
"created_at": "2026-09-01T09:00:00Z",
"user": 42
}Response 400 — Validation errors.
json
{
"username": [
"A user with that username already exists."
]
}Example
bash
curl -X POST "https://api.example.com/dashboard/chart/" \
-H "Authorization: Token $FINBLADE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"chart_name":"Orders by month","chart_type":"bar","category_id":3,"workflow_id":"7d4c2b1a-0e9f-4a3b-8c7d-6e5f4a3b2c1d","node_id":"step4","mgid":"mg_5f3e2d1c"}'PUT /dashboard/chart/{id}/
Update a tile
Auth: Session token
Path parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | yes |
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | no | |
chart_name | string | no | |
chart_type | string | no | bar, line, pie, doughnut, radar, scatter, bubble, a metric type, or html_artifact. |
chat_sessions | integer[] | no | Chat sessions that produced/discuss this chart. |
category_id | integer | no | Board id. |
workflow_id | string | no | |
node_id | string | no | The workflow step that produced the chart. |
mgid | string, nullable | no | Chart document id (see GET /microservices/dashboard-data/). |
shared | integer[] | no | |
metadata | object | no | Tile settings (position, size, aggregated tabs, artifact id, source connection). |
locked_version | integer | no | Pin the tile to a chart-history version (0 = live). |
created_at | string (date-time) | no | |
user | integer | no |
json
{
"id": 91,
"chart_name": "Orders by month",
"chart_type": "bar",
"chat_sessions": [
9174
],
"category_id": 3,
"workflow_id": "7d4c2b1a-0e9f-4a3b-8c7d-6e5f4a3b2c1d",
"node_id": "step4",
"mgid": "mg_5f3e2d1c",
"shared": [
57
],
"metadata": {
"position": {
"x": 0,
"y": 0
},
"size": {
"width": 6,
"height": 4
}
},
"locked_version": 0,
"created_at": "2026-09-01T09:00:00Z",
"user": 42
}Response 201 — Updated (note the 201 status).
| Field | Type | Description |
|---|---|---|
id | integer | |
chart_name | string | |
chart_type | string | bar, line, pie, doughnut, radar, scatter, bubble, a metric type, or html_artifact. |
chat_sessions | integer[] | Chat sessions that produced/discuss this chart. |
category_id | integer | Board id. |
workflow_id | string | |
node_id | string | The workflow step that produced the chart. |
mgid | string, nullable | Chart document id (see GET /microservices/dashboard-data/). |
shared | integer[] | |
metadata | object | Tile settings (position, size, aggregated tabs, artifact id, source connection). |
locked_version | integer | Pin the tile to a chart-history version (0 = live). |
created_at | string (date-time) | |
user | integer |
json
{
"id": 91,
"chart_name": "Orders by month",
"chart_type": "bar",
"chat_sessions": [
9174
],
"category_id": 3,
"workflow_id": "7d4c2b1a-0e9f-4a3b-8c7d-6e5f4a3b2c1d",
"node_id": "step4",
"mgid": "mg_5f3e2d1c",
"shared": [
57
],
"metadata": {
"position": {
"x": 0,
"y": 0
},
"size": {
"width": 6,
"height": 4
}
},
"locked_version": 0,
"created_at": "2026-09-01T09:00:00Z",
"user": 42
}Example
bash
curl -X PUT "https://api.example.com/dashboard/chart/<id>/" \
-H "Authorization: Token $FINBLADE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"id":91,"chart_name":"Orders by month","chart_type":"bar","chat_sessions":[9174],"category_id":3,"workflow_id":"7d4c2b1a-0e9f-4a3b-8c7d-6e5f4a3b2c1d","node_id":"step4","mgid":"mg_5f3e2d1c","shared":[57],"metadata":{"position":{"x":0,"y":0},"size":{"width":6,"height":4}},"locked_version":0,"created_at":"2026-09-01T09:00:00Z","user":42}'PATCH /dashboard/chart/{id}/
Partially update a tile
Used for position/size/name changes and version locking.
Auth: Session token
Path parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | yes |
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | no | |
chart_name | string | no | |
chart_type | string | no | bar, line, pie, doughnut, radar, scatter, bubble, a metric type, or html_artifact. |
chat_sessions | integer[] | no | Chat sessions that produced/discuss this chart. |
category_id | integer | no | Board id. |
workflow_id | string | no | |
node_id | string | no | The workflow step that produced the chart. |
mgid | string, nullable | no | Chart document id (see GET /microservices/dashboard-data/). |
shared | integer[] | no | |
metadata | object | no | Tile settings (position, size, aggregated tabs, artifact id, source connection). |
locked_version | integer | no | Pin the tile to a chart-history version (0 = live). |
created_at | string (date-time) | no | |
user | integer | no |
json
{
"metadata": {
"position": {
"x": 6,
"y": 0
},
"size": {
"width": 6,
"height": 4
}
}
}Response 200 — Updated.
| Field | Type | Description |
|---|---|---|
id | integer | |
chart_name | string | |
chart_type | string | bar, line, pie, doughnut, radar, scatter, bubble, a metric type, or html_artifact. |
chat_sessions | integer[] | Chat sessions that produced/discuss this chart. |
category_id | integer | Board id. |
workflow_id | string | |
node_id | string | The workflow step that produced the chart. |
mgid | string, nullable | Chart document id (see GET /microservices/dashboard-data/). |
shared | integer[] | |
metadata | object | Tile settings (position, size, aggregated tabs, artifact id, source connection). |
locked_version | integer | Pin the tile to a chart-history version (0 = live). |
created_at | string (date-time) | |
user | integer |
json
{
"id": 91,
"chart_name": "Orders by month",
"chart_type": "bar",
"chat_sessions": [
9174
],
"category_id": 3,
"workflow_id": "7d4c2b1a-0e9f-4a3b-8c7d-6e5f4a3b2c1d",
"node_id": "step4",
"mgid": "mg_5f3e2d1c",
"shared": [
57
],
"metadata": {
"position": {
"x": 0,
"y": 0
},
"size": {
"width": 6,
"height": 4
}
},
"locked_version": 0,
"created_at": "2026-09-01T09:00:00Z",
"user": 42
}Example
bash
curl -X PATCH "https://api.example.com/dashboard/chart/<id>/" \
-H "Authorization: Token $FINBLADE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"metadata":{"position":{"x":6,"y":0},"size":{"width":6,"height":4}}}'DELETE /dashboard/chart/{id}/
Remove a tile
Auth: Session token
Path parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | yes |
Response 200 — Removed.
| Field | Type | Description |
|---|---|---|
message | string |
json
{
"message": "OK"
}Example
bash
curl -X DELETE "https://api.example.com/dashboard/chart/<id>/" \
-H "Authorization: Token $FINBLADE_TOKEN"GET /dashboard/chart/mgids/
My chart documents in use
The mgids referenced by your tiles, with their board.
Auth: Session token
Response 200 — Rows.
Array of:
| Field | Type | Description |
|---|---|---|
mgid | string | |
name | string | |
chart_type | string | |
workflow_id | string | |
category_id | integer |
Example
bash
curl -X GET "https://api.example.com/dashboard/chart/mgids/" \
-H "Authorization: Token $FINBLADE_TOKEN"GET /dashboard/chart/mgid-usage/
Where a chart document is used
Every tile (primary or as an aggregated tab) that shows the chart mgid — consulted before deleting chart data.
Auth: Session token
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
mgid | string | yes |
Response 200 — Usages.
| Field | Type | Description |
|---|---|---|
mgid | string | |
usages | object[] | |
usages[].chart_id | integer | |
usages[].chart_name | string | |
usages[].category_id | integer | |
usages[].category_name | string | |
usages[].workflow_id | string | |
usages[].role | string ("primary", "aggregated") | |
usages[].tab_index | integer | |
usages[].node_name | string |
Response 400 — mgid missing.
json
{
"error": "path is required"
}Example
bash
curl -X GET "https://api.example.com/dashboard/chart/mgid-usage/?mgid=mg_5f3e2d1c" \
-H "Authorization: Token $FINBLADE_TOKEN"POST /dashboard/chart/remove-mgid-everywhere/
Remove a chart document from every tile
Auth: Session token
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
mgid | string | yes | |
workflow_id | string | no | |
exclude_chart_id | integer | no | A tile to leave alone (the caller handles it). |
Response 200 — What was removed.
| Field | Type | Description |
|---|---|---|
removed | object[] |
Example
bash
curl -X POST "https://api.example.com/dashboard/chart/remove-mgid-everywhere/" \
-H "Authorization: Token $FINBLADE_TOKEN"GET /microservices/dashboard-data/
Read a chart document
The stored chart behind a tile or a Chat AI reply. collection selects which document: chart_data (the renderable chart, plus your filters), llm_structure, user_dataframe or rules_dataframe. Pass version to read a chart-history version instead of the live chart.
Auth: Session token · In the app: Dashboard tiles; charts inside Chat AI replies
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
mgid | string | yes | |
collection | string ("chart_data", "llm_structure", "user_dataframe", "rules_dataframe") | yes | |
workflow_id | string | no | |
version | integer | no |
Response 200 — The document.
| Field | Type | Description |
|---|---|---|
_id | string | |
workflow_id | string | |
mgid | string | |
user_id | string | |
step_id | string | |
chart_type | string | |
chart | object | Renderable payload: a chart carries {type, labels, datasets} (Chart.js style); a metric carries {type, data, raw_value, html, risk_level}. |
version | integer | |
filter_schema | object | Filterable columns and their options. |
filter_favourites | object[] | |
applied_filters | object[] | The caller's current filters for this chart. |
updated_at | string (date-time) |
json
{
"_id": "66f2a1b9c0d4e5f6a7b8c9d0",
"workflow_id": "7d4c2b1a-0e9f-4a3b-8c7d-6e5f4a3b2c1d",
"mgid": "mg_5f3e2d1c",
"user_id": "42",
"step_id": "step4",
"chart_type": "bar",
"chart": {
"type": "bar",
"labels": [
"Jan",
"Feb",
"Mar"
],
"datasets": [
{
"label": "Orders",
"data": [
120,
140,
165
]
}
]
},
"version": 0,
"filter_schema": {
"region": {
"type": "select",
"options": [
"East",
"West"
]
}
},
"filter_favourites": [],
"applied_filters": [],
"updated_at": "2026-09-21T08:00:09Z"
}Response 400 — Missing mgid/collection or unknown collection.
json
{
"error": "path is required"
}Response 404 — No such chart (or not yours / not shared with you).
json
{
"error": "path is required"
}Response 503 — Dashboard store unavailable.
Example
bash
curl -X GET "https://api.example.com/microservices/dashboard-data/?mgid=mg_5f3e2d1c&collection=chart_data" \
-H "Authorization: Token $FINBLADE_TOKEN"DELETE /microservices/dashboard-data/
Delete chart data
Owner of the workflow or of the chart. history_only=true deletes only the chart-history versions and keeps the live chart.
Auth: Session token
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
workflow_id | string | yes | |
mgid | string | yes | |
history_only | boolean | no |
Response 200 — Deleted (or nothing to delete).
| Field | Type | Description |
|---|---|---|
message | string |
json
{
"message": "OK"
}Response 403 — Not allowed.
Example
bash
curl -X DELETE "https://api.example.com/microservices/dashboard-data/" \
-H "Authorization: Token $FINBLADE_TOKEN"POST /microservices/dashboard-data/delete-step/
Delete every chart a workflow step produced
Auth: Session token
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
workflow_id | string | yes | |
step_id | string | yes |
Response 200 — Deleted.
Response 404 — Workflow not found.
Example
bash
curl -X POST "https://api.example.com/microservices/dashboard-data/delete-step/" \
-H "Authorization: Token $FINBLADE_TOKEN"POST /microservices/dashboard-chat/
Ask a question about a chart
Streams an answer about the chart's data (optionally the currently filtered rows). The response is proxied from the dashboard service as-is.
Auth: Session token · In the app: Dashboard tile → Chat
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
mgid | string | yes | |
query | string | yes | |
workflow_id | string | no | Resolved from mgid when omitted. |
chat_history | object[] | no | |
type | string | no | Default: "chat". |
filtered_data | object[] | no | |
view_version | integer | no | Default: 0. |
Response 200 — Streamed answer.
Content type: text/event-stream
Response 400 — Missing fields.
Response 404 — Chart not found.
Example
bash
curl -X POST "https://api.example.com/microservices/dashboard-chat/" \
-H "Authorization: Token $FINBLADE_TOKEN"POST /microservices/dashboard-chart-filter/
Regenerate a chart with filters
Auth: Session token
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
workflow_id | string | yes | |
mgid | string | yes | |
filters | object[] | no |
Response 200 — The regenerated chart document (service response).
Example
bash
curl -X POST "https://api.example.com/microservices/dashboard-chart-filter/" \
-H "Authorization: Token $FINBLADE_TOKEN"PATCH /microservices/dashboard-applied-filters/
Save my filters for a chart
Auth: Session token
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
workflow_id | string | yes | |
mgid | string | yes | |
applied_filters | object[] | yes |
Response 200 — Saved.
| Field | Type | Description |
|---|---|---|
success | boolean | |
applied_filters | object[] |
Example
bash
curl -X PATCH "https://api.example.com/microservices/dashboard-applied-filters/" \
-H "Authorization: Token $FINBLADE_TOKEN"POST /microservices/dashboard-applied-filters/batch/
Read my filters for several charts
Auth: Session token
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
items | object[] | yes | |
items[].workflow_id | string | no | |
items[].mgid | string | no |
Response 200 — Filters keyed by chart.
| Field | Type | Description |
|---|---|---|
applied_filters | object |
Example
bash
curl -X POST "https://api.example.com/microservices/dashboard-applied-filters/batch/" \
-H "Authorization: Token $FINBLADE_TOKEN"PATCH /microservices/dashboard-filter-favourites/
Save favourite filter sets for a chart
Auth: Session token
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
workflow_id | string | yes | |
mgid | string | yes | |
filter_favourites | object[] | yes |
Response 200 — Saved.
Example
bash
curl -X PATCH "https://api.example.com/microservices/dashboard-filter-favourites/" \
-H "Authorization: Token $FINBLADE_TOKEN"GET /microservices/dashboard-insights/
AI insights for a chart
Auth: Session token
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
workflow_id | string | yes | |
mgid | string | yes | |
version | integer | no | Default: 0. |
Response 200 — Insights (service response).
Example
bash
curl -X GET "https://api.example.com/microservices/dashboard-insights/" \
-H "Authorization: Token $FINBLADE_TOKEN"GET /microservices/dashboard-history/
Chart history versions
Versions saved each time a chart was regenerated with filters; version 0 is the original.
Auth: Session token
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
mgid | string | yes | |
workflow_id | string | no |
Response 200 — Versions.
| Field | Type | Description |
|---|---|---|
versions | object[] | |
total_versions | integer |
Example
bash
curl -X GET "https://api.example.com/microservices/dashboard-history/" \
-H "Authorization: Token $FINBLADE_TOKEN"GET /microservices/dashboard-history/{version}/
One chart history version
Auth: Session token
Path parameters
| Field | Type | Required | Description |
|---|---|---|---|
version | integer | yes |
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
mgid | string | yes | |
workflow_id | string | no |
Response 200 — The version document.
Response 404 — No such version.
Example
bash
curl -X GET "https://api.example.com/microservices/dashboard-history/<version>/" \
-H "Authorization: Token $FINBLADE_TOKEN"DELETE /microservices/dashboard-history/{version}/
Delete a chart history version
Version 0 (the original) cannot be deleted.
Auth: Session token
Path parameters
| Field | Type | Required | Description |
|---|---|---|---|
version | integer | yes |
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
mgid | string | yes | |
workflow_id | string | no |
Response 204 — Deleted.
Response 400 — Version 0.
Response 404 — No such version.
Example
bash
curl -X DELETE "https://api.example.com/microservices/dashboard-history/<version>/" \
-H "Authorization: Token $FINBLADE_TOKEN"GET /artifacts/
Files the platform generated for me
Documents, images, spreadsheets and pages produced by chats, agents and workflows, plus chart tiles. Re-indexed from disk at most every 30 s (refresh=1 forces it).
Auth: Session token · In the app: My Data → Generated files
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
origin | string ("agent-chat", "super-agent", "co-writer", "data-search", "code-gen") | no | |
kind | string ("image", "csv", "pdf", "html", "doc", "sheet", "slides", "text") | no | |
session | integer | no | Only files from this chat session. |
refresh | boolean | no |
Response 200 — Files.
Array of:
| Field | Type | Description |
|---|---|---|
uid | string (uuid) | |
name | string | |
media_path | string | Pass to GET /api/v1/media/sign/ to download. |
kind | string ("image", "csv", "pdf", "html", "doc", "sheet", "slides", "text") | |
kind_label | string | |
origin | string ("agent-chat", "super-agent", "co-writer", "data-search", "code-gen") | |
origin_label | string | |
source_segment | string | |
size_bytes | integer | |
workflow_id | string, nullable | |
workflow_run_id | string, nullable | |
chat_session_id | integer, nullable | |
node_id | string, nullable | |
file_modified_at | string (date-time) | |
created_at | string (date-time) |
Example
bash
curl -X GET "https://api.example.com/artifacts/" \
-H "Authorization: Token $FINBLADE_TOKEN"GET /workflow/
List research flows (legacy)
The "flows" of the legacy Semantic Search page — a saved question over a document set with an AI-generated strategy. Kept for existing users; new automations belong in Workflow AI.
Auth: Session token
Response 200 — Flows.
Array of:
| Field | Type | Description |
|---|---|---|
id | integer | |
user | integer | |
title | string | |
query | string | |
documents | string (uuid)[] | |
feedback | object[] | |
output_channels | any[] | |
y_coordinates_input | any[] | |
y_coordinates_output | any[] | |
active | boolean | |
semantic | boolean | |
set_strategy | boolean | |
created_at | string (date-time) |
Example
bash
curl -X GET "https://api.example.com/workflow/" \
-H "Authorization: Token $FINBLADE_TOKEN"POST /workflow/
Create a research flow (legacy)
Auth: Session token
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | no | |
user | integer | no | |
title | string | no | |
query | string | no | |
documents | string (uuid)[] | no | |
feedback | object[] | no | |
output_channels | any[] | no | |
y_coordinates_input | any[] | no | |
y_coordinates_output | any[] | no | |
active | boolean | no | |
semantic | boolean | no | |
set_strategy | boolean | no | |
created_at | string (date-time) | no |
Response 201 — Created.
| Field | Type | Description |
|---|---|---|
id | integer | |
user | integer | |
title | string | |
query | string | |
documents | string (uuid)[] | |
feedback | object[] | |
output_channels | any[] | |
y_coordinates_input | any[] | |
y_coordinates_output | any[] | |
active | boolean | |
semantic | boolean | |
set_strategy | boolean | |
created_at | string (date-time) |
Example
bash
curl -X POST "https://api.example.com/workflow/" \
-H "Authorization: Token $FINBLADE_TOKEN"GET /workflow/{id}/
Get a research flow (legacy)
Auth: Session token
Path parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | yes |
Response 200 — The flow.
| Field | Type | Description |
|---|---|---|
id | integer | |
user | integer | |
title | string | |
query | string | |
documents | string (uuid)[] | |
feedback | object[] | |
output_channels | any[] | |
y_coordinates_input | any[] | |
y_coordinates_output | any[] | |
active | boolean | |
semantic | boolean | |
set_strategy | boolean | |
created_at | string (date-time) |
Example
bash
curl -X GET "https://api.example.com/workflow/<id>/" \
-H "Authorization: Token $FINBLADE_TOKEN"PUT /workflow/{id}/
Update a research flow (legacy)
Auth: Session token
Path parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | yes |
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | no | |
user | integer | no | |
title | string | no | |
query | string | no | |
documents | string (uuid)[] | no | |
feedback | object[] | no | |
output_channels | any[] | no | |
y_coordinates_input | any[] | no | |
y_coordinates_output | any[] | no | |
active | boolean | no | |
semantic | boolean | no | |
set_strategy | boolean | no | |
created_at | string (date-time) | no |
Response 200 — Updated.
Example
bash
curl -X PUT "https://api.example.com/workflow/<id>/" \
-H "Authorization: Token $FINBLADE_TOKEN"DELETE /workflow/{id}/
Delete a research flow (legacy)
Auth: Session token
Path parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | yes |
Response 204 — Deleted.
Example
bash
curl -X DELETE "https://api.example.com/workflow/<id>/" \
-H "Authorization: Token $FINBLADE_TOKEN"POST /workflow/strategy/generate/
Generate a research strategy (legacy)
Asks the model to plan how to answer the flow's question over its documents (steps, sub-queries, actions).
Auth: Session token
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
flow_id | integer | no | |
query | string | no | Without flow_id. |
documents | string (uuid)[] | no | |
feedback | object[] | no | |
session_id | integer | no |
Response 200 — The strategy (model output).
Example
bash
curl -X POST "https://api.example.com/workflow/strategy/generate/" \
-H "Authorization: Token $FINBLADE_TOKEN"POST /workflow/strategy/save/
Save a research strategy (legacy)
Auth: Session token
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
flow_id | integer | yes | |
strategy | string | yes | JSON-encoded strategy. |
feedback | string | no | |
new | string | no | "True" to replace previous feedback. |
Response 200 — Saved ("saved").
Example
bash
curl -X POST "https://api.example.com/workflow/strategy/save/" \
-H "Authorization: Token $FINBLADE_TOKEN"POST /workflow/run/stream/
Run a research flow (legacy, streamed)
Auth: Session token
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
flow_id | integer | yes | |
session_id | integer | no |
Response 200 — Streamed answer text.
Content type: text/event-stream
Example
bash
curl -X POST "https://api.example.com/workflow/run/stream/" \
-H "Authorization: Token $FINBLADE_TOKEN"