Parallect.ai
API Reference

Jobs & Results

Poll research job status and retrieve synthesized results

Jobs & Results

GET /v1/threads/:threadId/jobs/:jobId -- Poll Job Status

Check the status of a research job and retrieve results when complete.

curl https://parallect.ai/api/v1/threads/THREAD_ID/jobs/JOB_ID \
  -H "Authorization: Bearer YOUR_API_KEY"

Response (Running)

{
  "id": "<job_id>",
  "threadId": "<thread_id>",
  "status": "running",
  "budgetTier": "M",
  "budgetCapCents": 1500,
  "query": "What are the latest advances in CRISPR gene therapy?",
  "synthesisMarkdown": null,
  "synthesisClaimsJson": null,
  "totalCustomerCostCents": 0,
  "durationSeconds": null,
  "createdAt": "2026-03-16T10:00:00Z",
  "completedAt": null,
  "steps": []
}

Response (Completed)

{
  "id": "<job_id>",
  "threadId": "<thread_id>",
  "status": "completed",
  "budgetTier": "M",
  "budgetCapCents": 1500,
  "query": "What are the latest advances in CRISPR gene therapy?",
  "synthesisMarkdown": "# CRISPR Gene Therapy: Latest Advances\n\n...",
  "synthesisClaimsJson": [
    {
      "claim": "Base editing efficiency exceeds 90% in recent trials",
      "confidence": "high",
      "supportingProviders": ["perplexity", "gemini"],
      "contradictingProviders": []
    }
  ],
  "totalCustomerCostCents": 406,
  "durationSeconds": 187,
  "createdAt": "2026-03-16T10:00:00Z",
  "completedAt": "2026-03-16T10:03:07Z",
  "steps": [
    {
      "id": "<step_id>",
      "provider": "perplexity",
      "status": "completed",
      "reportMarkdown": "## Perplexity Research Report\n\n...",
      "citations": [...],
      "durationSeconds": 45,
      "errorMessage": null,
      "createdAt": "2026-03-16T10:00:01Z",
      "completedAt": "2026-03-16T10:00:46Z"
    },
    {
      "id": "<step_id>",
      "provider": "gemini",
      "status": "completed",
      "reportMarkdown": "## Gemini Research Report\n\n...",
      "citations": [...],
      "durationSeconds": 142,
      "errorMessage": null,
      "createdAt": "2026-03-16T10:00:01Z",
      "completedAt": "2026-03-16T10:02:23Z"
    }
  ]
}

Job Status Values

StatusDescription
pendingJob created, waiting to start
runningProviders are actively researching
synthesizingPreparing final report
completedFinal report available
failedUnrecoverable error
cancelledJob was stopped before completion

POST /v1/threads/:threadId/jobs/:jobId/pursue -- Pursue Follow-On

Start a new research job based on a suggested follow-on topic.

curl -X POST https://parallect.ai/api/v1/threads/THREAD_ID/jobs/JOB_ID/pursue \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "topic": "What are the regulatory hurdles for CRISPR therapies?" }'

Parameters

FieldTypeRequiredDescription
topicstringYesThe follow-on topic to pursue
budgetstringNoBudget tier (default: S)
modestringNofast (default) or methodical
providersstring[]NoOverride default providers
spideringbooleanNoEnable topic spidering

Response (201)

{
  "id": "<job_id>",
  "threadId": "<thread_id>",
  "parentJobId": "<parent_job_id>",
  "topic": "What are the regulatory hurdles for CRISPR therapies?",
  "status": "pending",
  "budgetTier": "S",
  "researchMode": "fast",
  "createdAt": "2026-03-16T10:10:00Z"
}

Polling Strategy

Research jobs typically take:

  • Fast mode: 10-30 seconds
  • Methodical mode: 2-10 minutes

Recommended polling interval: 5 seconds with exponential backoff up to 30 seconds.

async function waitForResult(threadId: string, jobId: string) {
  let interval = 5000;
  while (true) {
    const res = await fetch(`https://parallect.ai/api/v1/threads/${threadId}/jobs/${jobId}`, {
      headers: { Authorization: `Bearer ${API_KEY}` },
    });
    const job = await res.json();
    if (job.status === "completed" || job.status === "failed") return job;
    await new Promise((r) => setTimeout(r, interval));
    interval = Math.min(interval * 1.5, 30000);
  }
}

On this page