Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.writerzroom.com/llms.txt

Use this file to discover all available pages before exploring further.

Why Status Polling Exists

Generation does not complete in the initial create request. You poll the status endpoint using the request_id returned from the original generation call. This keeps the API predictable for long-running content jobs.

Request

GET https://api.writerzroom.com/v1/generate/status/{request_id}
Authorization: Bearer YOUR_API_KEY

Response — In Progress

{
  "request_id": "req_xyz789",
  "status": "processing",
  "stage": "writer",
  "progress": 60
}

Response — Completed

{
  "request_id": "req_xyz789",
  "status": "completed",
  "content": {
    "id": "cnt_abc123",
    "title": "The Future of AI in Content Marketing",
    "body": "...",
    "word_count": 1842,
    "created_at": "2026-03-10T20:03:42Z"
  }
}

Response — Failed

{
  "request_id": "req_xyz789",
  "status": "failed",
  "error": "Missing required input field: audience"
}

How to Poll

async function pollStatus(requestId, apiKey) {
  const maxAttempts = 30;
  const intervalMs = 8000;

  for (let i = 0; i < maxAttempts; i++) {
    const res = await fetch(
      `https://api.writerzroom.com/v1/generate/status/${requestId}`,
      { headers: { Authorization: `Bearer ${apiKey}` } }
    );
    const data = await res.json();

    if (data.status === 'completed') return data.content;
    if (data.status === 'failed') throw new Error(data.error);

    await new Promise(r => setTimeout(r, intervalMs));
  }
  throw new Error('Generation timed out');
}
Poll every 5–10 seconds with a maximum of 20–30 attempts covering ~3 minutes. If status is still processing after that, log the request_id and contact support.
Last modified on April 21, 2026