FlowiseAI/Flowise · error · InternalFlowiseError
Error: chatflowsController.checkIfChatflowHasChanged - id no
Error message
Error: chatflowsController.checkIfChatflowHasChanged - id not provided!
What it means
Thrown by checkIfChatflowHasChanged when req.params.id is missing. PRECONDITION_FAILED (412) — the first of two guards; the handler also separately validates lastUpdatedDateTime immediately after. Used by clients to poll whether a chatflow was updated since a timestamp.
Source
Thrown at packages/server/src/controllers/chatflows/index.ts:277
const getSinglePublicChatbotConfig = async (req: Request, res: Response, next: NextFunction) => {
try {
if (typeof req.params === 'undefined' || !req.params.id) {
throw new InternalFlowiseError(
StatusCodes.PRECONDITION_FAILED,
`Error: chatflowsController.getSinglePublicChatbotConfig - id not provided!`
)
}
const apiResponse = await chatflowsService.getSinglePublicChatbotConfig(req.params.id)
return res.json(apiResponse)
} catch (error) {
next(error)
}
}
const checkIfChatflowHasChanged = async (req: Request, res: Response, next: NextFunction) => {
try {
if (typeof req.params === 'undefined' || !req.params.id) {
throw new InternalFlowiseError(
StatusCodes.PRECONDITION_FAILED,
`Error: chatflowsController.checkIfChatflowHasChanged - id not provided!`
)
}
if (!req.params.lastUpdatedDateTime) {
throw new InternalFlowiseError(
StatusCodes.PRECONDITION_FAILED,
`Error: chatflowsController.checkIfChatflowHasChanged - lastUpdatedDateTime not provided!`
)
}
const workspaceId = req.user?.activeWorkspaceId
if (!workspaceId) {
throw new InternalFlowiseError(
StatusCodes.NOT_FOUND,
'Error: chatflowsController.checkIfChatflowHasChanged - active workspace ID not found!'
)
}
const apiResponse = await chatflowsService.checkIfChatflowHasChanged(req.params.id, req.params.lastUpdatedDateTime, workspaceId)View on GitHub (pinned to abe4a8601a)
Solutions
- Ensure the request URL has a non-empty id segment.
- Guard the client call against an undefined id.
- Remember this endpoint also requires lastUpdatedDateTime — provide both.
Example fix
// before
await api.get(`/api/v1/chatflows//has-changed?lastUpdatedDateTime=${ts}`)
// after
if (!id) throw new Error('id required')
await api.get(`/api/v1/chatflows/${id}/has-changed?lastUpdatedDateTime=${ts}`) Defensive patterns
Strategy: validation
Validate before calling
function validHasChangedParams(id: unknown, ts: unknown): boolean {
return typeof id === 'string' && id.length > 0 && typeof ts === 'string' && ts.length > 0
}
if (!validHasChangedParams(id, lastUpdatedDateTime)) {
throw new Error('id and lastUpdatedDateTime required for has-changed poll')
} Type guard
function isHasChangedParams(p: unknown): p is { id: string; lastUpdatedDateTime: string } {
return typeof p === 'object' && p !== null
&& typeof (p as any).id === 'string' && (p as any).id.length > 0
&& typeof (p as any).lastUpdatedDateTime === 'string' && (p as any).lastUpdatedDateTime.length > 0
} Prevention
- Pass both id and lastUpdatedDateTime on every has-changed poll.
- Start the polling loop only after the chatflow id is known.
- Pin the SDK/server version so param names stay stable.
When it happens
Trigger: Calling the has-changed polling endpoint without an id segment; client sent only lastUpdatedDateTime in the body/query but no id in the path.
Common situations: Polling loop started before an id was known; SDK path change; URL template using an undefined id.
Related errors
- Error: chatMessagesController.abortChatMessage - chatflowid
- Error: chatflowsController.checkIfChatflowIsValidForStreamin
- Error: chatflowsController.checkIfChatflowIsValidForUploads
- Error: chatflowsController.deleteChatflow - id not provided!
- Error: chatflowsController.getChatflowByApiKey - apikey not
AI-assisted analysis of FlowiseAI/Flowise@abe4a8601a (2026-08-12).
Data as JSON: /api/errors/0d34f3f54aa4be3f.
Report an issue: GitHub.