Skip to content

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

MethodPathPurpose
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:

FieldTypeDescription
idinteger
dashboard_name_enstring
dashboard_name_arstring, nullable
description_enstring, nullable
description_arstring, nullable
sharedinteger[]User ids that can view the board (also applied to its tiles).
created_atstring (date-time)
userintegerOwner 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)

FieldTypeRequiredDescription
idintegerno
dashboard_name_enstringno
dashboard_name_arstring, nullableno
description_enstring, nullableno
description_arstring, nullableno
sharedinteger[]noUser ids that can view the board (also applied to its tiles).
created_atstring (date-time)no
userintegernoOwner id.
json
{
  "dashboard_name_en": "Sales overview",
  "description_en": "Weekly sales KPIs"
}

Response 201 — Created.

FieldTypeDescription
idinteger
dashboard_name_enstring
dashboard_name_arstring, nullable
description_enstring, nullable
description_arstring, nullable
sharedinteger[]User ids that can view the board (also applied to its tiles).
created_atstring (date-time)
userintegerOwner 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

FieldTypeRequiredDescription
idintegeryes

Response 200 — Tiles (array) — or {"message": "No charts found"} when empty.

Array of:

FieldTypeDescription
idinteger
chart_namestring
chart_typestringbar, line, pie, doughnut, radar, scatter, bubble, a metric type, or html_artifact.
chat_sessionsinteger[]Chat sessions that produced/discuss this chart.
category_idintegerBoard id.
workflow_idstring
node_idstringThe workflow step that produced the chart.
mgidstring, nullableChart document id (see GET /microservices/dashboard-data/).
sharedinteger[]
metadataobjectTile settings (position, size, aggregated tabs, artifact id, source connection).
locked_versionintegerPin the tile to a chart-history version (0 = live).
created_atstring (date-time)
userinteger

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

FieldTypeRequiredDescription
idintegeryes

Response 201 — The new board.

FieldTypeDescription
idinteger
dashboard_name_enstring
dashboard_name_arstring, nullable
description_enstring, nullable
description_arstring, nullable
sharedinteger[]User ids that can view the board (also applied to its tiles).
created_atstring (date-time)
userintegerOwner 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

FieldTypeRequiredDescription
idintegeryes

Request body (application/json)

FieldTypeRequiredDescription
idintegerno
dashboard_name_enstringno
dashboard_name_arstring, nullableno
description_enstring, nullableno
description_arstring, nullableno
sharedinteger[]noUser ids that can view the board (also applied to its tiles).
created_atstring (date-time)no
userintegernoOwner id.
json
{
  "shared": [
    57,
    61
  ]
}

Response 200 — Updated.

FieldTypeDescription
idinteger
dashboard_name_enstring
dashboard_name_arstring, nullable
description_enstring, nullable
description_arstring, nullable
sharedinteger[]User ids that can view the board (also applied to its tiles).
created_atstring (date-time)
userintegerOwner 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

FieldTypeRequiredDescription
idintegeryes

Response 200 — Deleted.

FieldTypeDescription
messagestring
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:

FieldTypeDescription
idinteger
chart_namestring
chart_typestringbar, line, pie, doughnut, radar, scatter, bubble, a metric type, or html_artifact.
chat_sessionsinteger[]Chat sessions that produced/discuss this chart.
category_idintegerBoard id.
workflow_idstring
node_idstringThe workflow step that produced the chart.
mgidstring, nullableChart document id (see GET /microservices/dashboard-data/).
sharedinteger[]
metadataobjectTile settings (position, size, aggregated tabs, artifact id, source connection).
locked_versionintegerPin the tile to a chart-history version (0 = live).
created_atstring (date-time)
userinteger

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)

FieldTypeRequiredDescription
chart_namestringyes
chart_typestringyes
category_idintegeryes
workflow_idstringyes
node_idstringyes
mgidstringno
chat_sessionsinteger[]no
sharedinteger[]no
metadataobjectno
locked_versionintegernoDefault: 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.

FieldTypeDescription
idinteger
chart_namestring
chart_typestringbar, line, pie, doughnut, radar, scatter, bubble, a metric type, or html_artifact.
chat_sessionsinteger[]Chat sessions that produced/discuss this chart.
category_idintegerBoard id.
workflow_idstring
node_idstringThe workflow step that produced the chart.
mgidstring, nullableChart document id (see GET /microservices/dashboard-data/).
sharedinteger[]
metadataobjectTile settings (position, size, aggregated tabs, artifact id, source connection).
locked_versionintegerPin the tile to a chart-history version (0 = live).
created_atstring (date-time)
userinteger
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

FieldTypeRequiredDescription
idintegeryes

Request body (application/json)

FieldTypeRequiredDescription
idintegerno
chart_namestringno
chart_typestringnobar, line, pie, doughnut, radar, scatter, bubble, a metric type, or html_artifact.
chat_sessionsinteger[]noChat sessions that produced/discuss this chart.
category_idintegernoBoard id.
workflow_idstringno
node_idstringnoThe workflow step that produced the chart.
mgidstring, nullablenoChart document id (see GET /microservices/dashboard-data/).
sharedinteger[]no
metadataobjectnoTile settings (position, size, aggregated tabs, artifact id, source connection).
locked_versionintegernoPin the tile to a chart-history version (0 = live).
created_atstring (date-time)no
userintegerno
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).

FieldTypeDescription
idinteger
chart_namestring
chart_typestringbar, line, pie, doughnut, radar, scatter, bubble, a metric type, or html_artifact.
chat_sessionsinteger[]Chat sessions that produced/discuss this chart.
category_idintegerBoard id.
workflow_idstring
node_idstringThe workflow step that produced the chart.
mgidstring, nullableChart document id (see GET /microservices/dashboard-data/).
sharedinteger[]
metadataobjectTile settings (position, size, aggregated tabs, artifact id, source connection).
locked_versionintegerPin the tile to a chart-history version (0 = live).
created_atstring (date-time)
userinteger
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

FieldTypeRequiredDescription
idintegeryes

Request body (application/json)

FieldTypeRequiredDescription
idintegerno
chart_namestringno
chart_typestringnobar, line, pie, doughnut, radar, scatter, bubble, a metric type, or html_artifact.
chat_sessionsinteger[]noChat sessions that produced/discuss this chart.
category_idintegernoBoard id.
workflow_idstringno
node_idstringnoThe workflow step that produced the chart.
mgidstring, nullablenoChart document id (see GET /microservices/dashboard-data/).
sharedinteger[]no
metadataobjectnoTile settings (position, size, aggregated tabs, artifact id, source connection).
locked_versionintegernoPin the tile to a chart-history version (0 = live).
created_atstring (date-time)no
userintegerno
json
{
  "metadata": {
    "position": {
      "x": 6,
      "y": 0
    },
    "size": {
      "width": 6,
      "height": 4
    }
  }
}

Response 200 — Updated.

FieldTypeDescription
idinteger
chart_namestring
chart_typestringbar, line, pie, doughnut, radar, scatter, bubble, a metric type, or html_artifact.
chat_sessionsinteger[]Chat sessions that produced/discuss this chart.
category_idintegerBoard id.
workflow_idstring
node_idstringThe workflow step that produced the chart.
mgidstring, nullableChart document id (see GET /microservices/dashboard-data/).
sharedinteger[]
metadataobjectTile settings (position, size, aggregated tabs, artifact id, source connection).
locked_versionintegerPin the tile to a chart-history version (0 = live).
created_atstring (date-time)
userinteger
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

FieldTypeRequiredDescription
idintegeryes

Response 200 — Removed.

FieldTypeDescription
messagestring
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:

FieldTypeDescription
mgidstring
namestring
chart_typestring
workflow_idstring
category_idinteger

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

FieldTypeRequiredDescription
mgidstringyes

Response 200 — Usages.

FieldTypeDescription
mgidstring
usagesobject[]
usages[].chart_idinteger
usages[].chart_namestring
usages[].category_idinteger
usages[].category_namestring
usages[].workflow_idstring
usages[].rolestring ("primary", "aggregated")
usages[].tab_indexinteger
usages[].node_namestring

Response 400mgid 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)

FieldTypeRequiredDescription
mgidstringyes
workflow_idstringno
exclude_chart_idintegernoA tile to leave alone (the caller handles it).

Response 200 — What was removed.

FieldTypeDescription
removedobject[]

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

FieldTypeRequiredDescription
mgidstringyes
collectionstring ("chart_data", "llm_structure", "user_dataframe", "rules_dataframe")yes
workflow_idstringno
versionintegerno

Response 200 — The document.

FieldTypeDescription
_idstring
workflow_idstring
mgidstring
user_idstring
step_idstring
chart_typestring
chartobjectRenderable payload: a chart carries {type, labels, datasets} (Chart.js style); a metric carries {type, data, raw_value, html, risk_level}.
versioninteger
filter_schemaobjectFilterable columns and their options.
filter_favouritesobject[]
applied_filtersobject[]The caller's current filters for this chart.
updated_atstring (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

FieldTypeRequiredDescription
workflow_idstringyes
mgidstringyes
history_onlybooleanno

Response 200 — Deleted (or nothing to delete).

FieldTypeDescription
messagestring
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)

FieldTypeRequiredDescription
workflow_idstringyes
step_idstringyes

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)

FieldTypeRequiredDescription
mgidstringyes
querystringyes
workflow_idstringnoResolved from mgid when omitted.
chat_historyobject[]no
typestringnoDefault: "chat".
filtered_dataobject[]no
view_versionintegernoDefault: 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)

FieldTypeRequiredDescription
workflow_idstringyes
mgidstringyes
filtersobject[]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)

FieldTypeRequiredDescription
workflow_idstringyes
mgidstringyes
applied_filtersobject[]yes

Response 200 — Saved.

FieldTypeDescription
successboolean
applied_filtersobject[]

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)

FieldTypeRequiredDescription
itemsobject[]yes
items[].workflow_idstringno
items[].mgidstringno

Response 200 — Filters keyed by chart.

FieldTypeDescription
applied_filtersobject

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)

FieldTypeRequiredDescription
workflow_idstringyes
mgidstringyes
filter_favouritesobject[]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

FieldTypeRequiredDescription
workflow_idstringyes
mgidstringyes
versionintegernoDefault: 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

FieldTypeRequiredDescription
mgidstringyes
workflow_idstringno

Response 200 — Versions.

FieldTypeDescription
versionsobject[]
total_versionsinteger

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

FieldTypeRequiredDescription
versionintegeryes

Query parameters

FieldTypeRequiredDescription
mgidstringyes
workflow_idstringno

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

FieldTypeRequiredDescription
versionintegeryes

Query parameters

FieldTypeRequiredDescription
mgidstringyes
workflow_idstringno

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

FieldTypeRequiredDescription
originstring ("agent-chat", "super-agent", "co-writer", "data-search", "code-gen")no
kindstring ("image", "csv", "pdf", "html", "doc", "sheet", "slides", "text")no
sessionintegernoOnly files from this chat session.
refreshbooleanno

Response 200 — Files.

Array of:

FieldTypeDescription
uidstring (uuid)
namestring
media_pathstringPass to GET /api/v1/media/sign/ to download.
kindstring ("image", "csv", "pdf", "html", "doc", "sheet", "slides", "text")
kind_labelstring
originstring ("agent-chat", "super-agent", "co-writer", "data-search", "code-gen")
origin_labelstring
source_segmentstring
size_bytesinteger
workflow_idstring, nullable
workflow_run_idstring, nullable
chat_session_idinteger, nullable
node_idstring, nullable
file_modified_atstring (date-time)
created_atstring (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:

FieldTypeDescription
idinteger
userinteger
titlestring
querystring
documentsstring (uuid)[]
feedbackobject[]
output_channelsany[]
y_coordinates_inputany[]
y_coordinates_outputany[]
activeboolean
semanticboolean
set_strategyboolean
created_atstring (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)

FieldTypeRequiredDescription
idintegerno
userintegerno
titlestringno
querystringno
documentsstring (uuid)[]no
feedbackobject[]no
output_channelsany[]no
y_coordinates_inputany[]no
y_coordinates_outputany[]no
activebooleanno
semanticbooleanno
set_strategybooleanno
created_atstring (date-time)no

Response 201 — Created.

FieldTypeDescription
idinteger
userinteger
titlestring
querystring
documentsstring (uuid)[]
feedbackobject[]
output_channelsany[]
y_coordinates_inputany[]
y_coordinates_outputany[]
activeboolean
semanticboolean
set_strategyboolean
created_atstring (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

FieldTypeRequiredDescription
idintegeryes

Response 200 — The flow.

FieldTypeDescription
idinteger
userinteger
titlestring
querystring
documentsstring (uuid)[]
feedbackobject[]
output_channelsany[]
y_coordinates_inputany[]
y_coordinates_outputany[]
activeboolean
semanticboolean
set_strategyboolean
created_atstring (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

FieldTypeRequiredDescription
idintegeryes

Request body (application/json)

FieldTypeRequiredDescription
idintegerno
userintegerno
titlestringno
querystringno
documentsstring (uuid)[]no
feedbackobject[]no
output_channelsany[]no
y_coordinates_inputany[]no
y_coordinates_outputany[]no
activebooleanno
semanticbooleanno
set_strategybooleanno
created_atstring (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

FieldTypeRequiredDescription
idintegeryes

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)

FieldTypeRequiredDescription
flow_idintegerno
querystringnoWithout flow_id.
documentsstring (uuid)[]no
feedbackobject[]no
session_idintegerno

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)

FieldTypeRequiredDescription
flow_idintegeryes
strategystringyesJSON-encoded strategy.
feedbackstringno
newstringno"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)

FieldTypeRequiredDescription
flow_idintegeryes
session_idintegerno

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"

Finblade documentation