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

  1. Ensure the request URL has a non-empty id segment.
  2. Guard the client call against an undefined id.
  3. 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

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


AI-assisted analysis of FlowiseAI/Flowise@abe4a8601a (2026-08-12). Data as JSON: /api/errors/0d34f3f54aa4be3f. Report an issue: GitHub.