{"record":{"id":"33a709d04eb3764a","repo":"FlowiseAI/Flowise","slug":"no-api-key-provided","errorCode":null,"errorMessage":"No API key provided","messagePattern":"No API key provided","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/components/nodes/documentloaders/FireCrawl/FireCrawl.ts","lineNumber":142,"sourceCode":"}\n\ninterface ExtractStatusResponse {\n    success: boolean\n    data: any\n    status: 'completed' | 'pending' | 'processing' | 'failed' | 'cancelled'\n    expiresAt: string\n}\n\n// FirecrawlApp class (not exported)\nclass FirecrawlApp {\n    private apiKey: string\n    private apiUrl: string\n\n    constructor({ apiKey = null, apiUrl = null }: FirecrawlAppConfig) {\n        this.apiKey = apiKey || ''\n        this.apiUrl = apiUrl || 'https://api.firecrawl.dev'\n        if (!this.apiKey) {\n            throw new Error('No API key provided')\n        }\n    }\n\n    async scrapeUrl(url: string, params: Params | null = null): Promise<ScrapeResponse> {\n        const headers = this.prepareHeaders()\n\n        // Create a clean payload with only valid parameters\n        const validParams: any = {\n            url,\n            formats: ['markdown'],\n            onlyMainContent: true\n        }\n\n        // Add optional parameters if they exist\n        if (params?.scrapeOptions) {\n            if (params.scrapeOptions.includeTags) {\n                validParams.includeTags = Array.isArray(params.scrapeOptions.includeTags)\n                    ? params.scrapeOptions.includeTags","sourceCodeStart":124,"sourceCodeEnd":160,"githubUrl":"https://github.com/FlowiseAI/Flowise/blob/abe4a8601a058047b350c260676826e21dd14101/packages/components/nodes/documentloaders/FireCrawl/FireCrawl.ts#L124-L160","documentation":"FirecrawlApp constructor requires a non-empty apiKey. The credential is read from nodeData and if it resolves to null, undefined, or empty string, this throws immediately - before any network call. apiUrl defaults to https://api.firecrawl.dev.","triggerScenarios":"FireCrawl credential not attached to the node; credential exists but the apiKey field is blank; getCredentialParam returned undefined because the credential key name does not match.","commonSituations":"User added the node but forgot to attach a FireCrawl credential; API key was revoked on the FireCrawl dashboard; environment-specific credential mapping points at the wrong entry.","solutions":["Create a FireCrawl credential in Flowise with the key from https://firecrawl.dev/dashboard and attach it to the node.","Confirm getCredentialParam('apiKey', ...) reads the same field name stored in the credential.","If automating, ensure the credential is provisioned before the flow runs."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"function assertApiKey(key: unknown): asserts key is string {\n  if (typeof key !== 'string' || key.trim() === '') {\n    throw new Error('FireCrawl apiKey is missing - attach a FireCrawl credential to the node')\n  }\n}\n// const apiKey = getCredentialParam('apiKey', credentialData, nodeData)\n// assertApiKey(apiKey) before new FirecrawlApp({ apiKey })","typeGuard":"function hasApiKey(cred: unknown): cred is { apiKey: string } {\n  return typeof cred === 'object' && cred !== null\n    && typeof (cred as any).apiKey === 'string' && (cred as any).apiKey.trim() !== ''\n}","tryCatchPattern":null,"preventionTips":["Attach a FireCrawl credential with a non-empty apiKey before running the flow.","Verify the apiKey field name matches what getCredentialParam reads.","Rotate and re-store the key if it was revoked on the FireCrawl dashboard."],"tags":["authentication","configuration","firecrawl","api-key"],"backgroundTag":null,"analyzedSha":"abe4a8601a058047b350c260676826e21dd14101","analyzedAt":"2026-08-12T16:04:40.823Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}