Skip to main content

Overview

Chatflows are the core building blocks in Flowise. These endpoints allow you to create, retrieve, update, and delete chatflows programmatically.
All chatflow endpoints require JWT authentication. See Authentication for details.

List All Chatflows

Retrieve a list of all chatflows in your workspace.
GET /api/v1/chatflows
curl -X GET http://localhost:3000/api/v1/chatflows \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

Query Parameters

type
string
Filter by chatflow type: CHATFLOW, AGENTFLOW, MULTIAGENT, or ASSISTANT
page
number
default:"1"
Page number for pagination
limit
number
default:"10"
Number of items per page

Response

[
  {
    "id": "chatflow-uuid",
    "name": "Customer Support Bot",
    "flowData": "{\"nodes\":[...],\"edges\":[...]}",
    "deployed": true,
    "isPublic": false,
    "apikeyid": "key_abc123",
    "chatbotConfig": "{...}",
    "apiConfig": "{...}",
    "category": "Customer Service",
    "type": "CHATFLOW",
    "workspaceId": "workspace-id",
    "createdDate": "2024-03-15T10:30:00.000Z",
    "updatedDate": "2024-03-15T14:20:00.000Z"
  }
]
id
string
required
Unique identifier for the chatflow
name
string
required
Display name of the chatflow
flowData
string
required
JSON string containing the flow’s nodes and edges
deployed
boolean
Whether the chatflow is deployed
isPublic
boolean
Whether the chatflow is publicly accessible
apikeyid
string
ID of the API key required to access this chatflow
type
string
Chatflow type: CHATFLOW, AGENTFLOW, MULTIAGENT, or ASSISTANT
workspaceId
string
required
ID of the workspace this chatflow belongs to

Get Chatflow by ID

Retrieve a specific chatflow by its ID.
GET /api/v1/chatflows/:id
curl -X GET http://localhost:3000/api/v1/chatflows/CHATFLOW_ID \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

Path Parameters

id
string
required
The unique identifier of the chatflow

Response

Returns a single chatflow object with the same structure as shown in the list response.

Get Chatflows by API Key

Retrieve chatflows accessible by a specific API key.
GET /api/v1/chatflows/apikey/:apikey
curl -X GET http://localhost:3000/api/v1/chatflows/apikey/YOUR_API_KEY

Path Parameters

apikey
string
required
The API key to filter chatflows

Query Parameters

keyonly
boolean
If true, only return chatflows specifically bound to this API key

Response

Returns an array of chatflows that are either:
  • Bound to the specified API key (when apikeyid matches)
  • Not bound to any API key (when apikeyid is null or empty) and keyonly is not set

Create Chatflow

Create a new chatflow.
POST /api/v1/chatflows
curl -X POST http://localhost:3000/api/v1/chatflows \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My New Chatflow",
    "flowData": "{\"nodes\":[],\"edges\":[]}",
    "deployed": false,
    "isPublic": false,
    "type": "CHATFLOW"
  }'

Request Body

name
string
required
Name of the chatflow
flowData
string
required
JSON string containing the flow’s nodes and edges configuration
deployed
boolean
default:"false"
Whether the chatflow should be deployed
isPublic
boolean
default:"false"
Whether the chatflow is publicly accessible
apikeyid
string
ID of the API key to bind to this chatflow
type
string
default:"CHATFLOW"
Type of flow: CHATFLOW, AGENTFLOW, MULTIAGENT, or ASSISTANT
category
string
Category for organizing chatflows
chatbotConfig
string
JSON string with chatbot UI configuration
apiConfig
string
JSON string with API-specific configuration

Response

Returns the created chatflow object with a generated id.
Creating chatflows may be subject to usage limits based on your subscription plan.

Update Chatflow

Update an existing chatflow.
PUT /api/v1/chatflows/:id
curl -X PUT http://localhost:3000/api/v1/chatflows/CHATFLOW_ID \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Updated Chatflow Name",
    "deployed": true
  }'

Path Parameters

id
string
required
The unique identifier of the chatflow to update

Request Body

Include only the fields you want to update. All fields from the create endpoint are supported.

Response

Returns the updated chatflow object.
Updating a chatflow’s rate limiter configuration will automatically update the rate limiter instance.

Delete Chatflow

Delete a chatflow permanently.
DELETE /api/v1/chatflows/:id
curl -X DELETE http://localhost:3000/api/v1/chatflows/CHATFLOW_ID \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

Path Parameters

id
string
required
The unique identifier of the chatflow to delete

Response

{
  "message": "Chatflow deleted successfully"
}
Deleting a chatflow is permanent and cannot be undone. All associated chat messages and history will also be deleted.

Check for Changes

Check if a chatflow has been modified since a specific timestamp.
GET /api/v1/chatflows/has-changed/:id/:lastUpdatedDateTime
curl -X GET http://localhost:3000/api/v1/chatflows/has-changed/CHATFLOW_ID/2024-03-15T10:30:00.000Z \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

Path Parameters

id
string
required
The unique identifier of the chatflow
lastUpdatedDateTime
string
required
ISO 8601 timestamp to compare against

Response

{
  "hasChanged": true,
  "lastUpdatedDate": "2024-03-15T14:20:00.000Z"
}

Code Examples

// List all chatflows
const chatflows = await fetch('http://localhost:3000/api/v1/chatflows', {
  headers: {
    'Authorization': 'Bearer YOUR_JWT_TOKEN'
  }
}).then(res => res.json());

// Create a new chatflow
const newChatflow = await fetch('http://localhost:3000/api/v1/chatflows', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_JWT_TOKEN',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    name: 'My Chatflow',
    flowData: JSON.stringify({ nodes: [], edges: [] }),
    type: 'CHATFLOW'
  })
}).then(res => res.json());

// Update a chatflow
const updated = await fetch(`http://localhost:3000/api/v1/chatflows/${chatflowId}`, {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer YOUR_JWT_TOKEN',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    deployed: true
  })
}).then(res => res.json());

Build docs developers (and LLMs) love