firecrawl/firecrawl · warning · FirecrawlError
Failed to start LLMs.txt generation. No job ID returned.
Error message
Failed to start LLMs.txt generation. No job ID returned.
What it means
Thrown by generateLLMsText() (v1, deprecated) when the POST /v1/llmstxt start call returned success but the body has no `id`. Without a job id the SDK cannot poll, so it throws FirecrawlError 500. Indicates a malformed or stub response from a server that does not implement llmstxt.
Source
Thrown at apps/js-sdk/firecrawl/src/v1/index.ts:1954
}
/**
* Generates LLMs.txt for a given URL and polls until completion.
* @param url - The URL to generate LLMs.txt from.
* @param params - Parameters for the LLMs.txt generation operation.
* @returns The final generation results.
* @deprecated /v1/llmstxt is deprecated and will not be replaced.
*/
async generateLLMsText(url: string, params?: GenerateLLMsTextParams): Promise<GenerateLLMsTextStatusResponse | ErrorResponse> {
try {
const response = await this.asyncGenerateLLMsText(url, params);
if (!response.success || 'error' in response) {
return { success: false, error: 'error' in response ? response.error : 'Unknown error' };
}
if (!response.id) {
throw new FirecrawlError(`Failed to start LLMs.txt generation. No job ID returned.`, 500);
}
const jobId = response.id;
let generationStatus;
while (true) {
generationStatus = await this.checkGenerateLLMsTextStatus(jobId);
if ('error' in generationStatus && !generationStatus.success) {
return generationStatus;
}
if (generationStatus.status === "completed") {
return generationStatus;
}
if (generationStatus.status === "failed") {
throw new FirecrawlError(View on GitHub (pinned to 656bffcc28)
Solutions
- Confirm the server implements /v1/llmstxt (curl it directly).
- Use asyncGenerateLLMsText() and inspect the raw response.
- Consider migrating off llmstxt entirely since the API is deprecated.
- Match SDK and server versions.
Example fix
// before
const r = await app.generateLLMsText('https://example.com');
// after: inspect the raw start response
const start = await app.asyncGenerateLLMsText('https://example.com');
if (!start.success || !('id' in start) || !start.id) {
throw new Error(`no job id; raw=${JSON.stringify(start)}`);
} Defensive patterns
Strategy: type-guard
Validate before calling
const start = await app.asyncGenerateLLMsText(url, params);
if (!start?.success || typeof (start as any).id !== 'string' || !(start as any).id) throw new Error('no id'); Type guard
function isLLMsTextStart(r: any): r is { success: true; id: string } {
return r && r.success === true && typeof r.id === 'string' && r.id.length > 0;
} Try / catch
try { await app.generateLLMsText(url); }
catch (e) { if (/No job ID returned/.test(e.message)) console.error('server did not return id — check llmstxt support'); } Prevention
- Confirm the server implements /v1/llmstxt.
- Validate start response before polling.
- Plan migration off the deprecated llmstxt API.
When it happens
Trigger: Self-hosted server without the /v1/llmstxt route; server older than the feature; gateway stripping fields; endpoint stub that returns { success: true } and nothing else.
Common situations: Self-hosted Firecrawl predating llmstxt; wrong apiUrl; SDK/server version skew; note the API itself is deprecated and will not be replaced.
Related errors
- Failed to start research. No job ID returned.
- LLMs.txt generation job ${generationStatus.status}. Error: $
- Research job ${researchStatus.status}. Error: ${researchStat
- Failed to parse Firecrawl response as GenerateLLMsTextStatus
- Failed to map URLs
AI-assisted analysis of firecrawl/firecrawl@656bffcc28 (2026-08-12).
Data as JSON: /api/errors/de386af3052b04ce.
Report an issue: GitHub.