FlowiseAI/Flowise · error · InternalFlowiseError

Error: chatflowsController.clearWebhookSecret - id not provi

Error message

Error: chatflowsController.clearWebhookSecret - id not provided!

What it means

Thrown by clearWebhookSecret when req.params.id is falsy. The endpoint removes a previously-set webhook secret for a specific chatflow; without an id the service cannot target the record. Returned as PRECONDITION_FAILED (412). Structurally identical to the setWebhookSecret id guard.

Source

Thrown at packages/server/src/controllers/chatflows/index.ts:324

                StatusCodes.PRECONDITION_FAILED,
                `Error: chatflowsController.setWebhookSecret - id not provided!`
            )
        }
        const workspaceId = req.user?.activeWorkspaceId
        if (!workspaceId) {
            throw new InternalFlowiseError(StatusCodes.UNAUTHORIZED, `Error: chatflowsController.setWebhookSecret - workspace not found!`)
        }
        const apiResponse = await chatflowsService.setWebhookSecret(req.params.id, workspaceId)
        return res.json(apiResponse)
    } catch (error) {
        next(error)
    }
}

const clearWebhookSecret = async (req: Request, res: Response, next: NextFunction) => {
    try {
        if (!req.params.id) {
            throw new InternalFlowiseError(
                StatusCodes.PRECONDITION_FAILED,
                `Error: chatflowsController.clearWebhookSecret - id not provided!`
            )
        }
        const workspaceId = req.user?.activeWorkspaceId
        if (!workspaceId) {
            throw new InternalFlowiseError(StatusCodes.UNAUTHORIZED, `Error: chatflowsController.clearWebhookSecret - workspace not found!`)
        }
        await chatflowsService.clearWebhookSecret(req.params.id, workspaceId)
        return res.sendStatus(StatusCodes.NO_CONTENT)
    } catch (error) {
        next(error)
    }
}

const getScheduleStatus = async (req: Request, res: Response, next: NextFunction) => {
    try {
        if (!req.params?.id) {

View on GitHub (pinned to abe4a8601a)

Solutions

  1. Include the target chatflow id in the request path.
  2. Guard the client call behind an id-presence check.
  3. Confirm the route declares :id.

Example fix

// before
await fetch(`/api/v1/chatflows//webhook-secret`, { method: 'DELETE' })
// after
await fetch(`/api/v1/chatflows/${encodeURIComponent(chatflowId)}/webhook-secret`, { method: 'DELETE' })
Defensive patterns

Strategy: validation

Validate before calling

function clearWebhookSecret(id: string) {
  if (!id) throw new Error('chatflow id required before clearing webhook secret')
  return fetch(`/api/v1/chatflows/${encodeURIComponent(id)}/webhook-secret`, { method: 'DELETE' })
}

Type guard

const isNonEmptyString = (v: unknown): v is string => typeof v === 'string' && v.trim().length > 0

Try / catch

try { await clearWebhookSecret(id) } catch (e) { if (e.statusCode === 412) throw new Error('provide a chatflow id') }

Prevention

When it happens

Trigger: A DELETE request to the clear-webhook-secret route with no :id in the path, or a route definition missing :id so the param is undefined.

Common situations: Client calls the endpoint before a chatflow id is selected, URL template left unfilled, or router mounted the handler on a bare path.

Related errors


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