Skip to main content
GET
/
extractions
List extractions
curl --request GET \
  --url https://xquik.com/api/v1/extractions \
  --header 'x-api-key: <api-key>'

Documentation Index

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

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

Free - does not consume credits
curl -X GET "https://xquik.com/api/v1/extractions?limit=20&toolType=reply_extractor" \
  -H "x-api-key: xq_YOUR_KEY_HERE" | jq

Headers

x-api-key
string
required
Your API key. Session cookie authentication is also supported. Generate a key from the dashboard.

Query parameters

limit
number
Number of extractions to return per page. Default: 50. Maximum: 100.
toolType
string
Filter by tool type. One of: article_extractor, community_extractor, community_moderator_explorer, community_post_extractor, community_search, favoriters, follower_explorer, following_explorer, list_follower_explorer, list_member_extractor, list_post_extractor, mention_extractor, people_search, post_extractor, quote_extractor, reply_extractor, repost_extractor, space_explorer, thread_extractor, tweet_search_extractor, user_likes, user_media, verified_follower_explorer.
status
string
Filter by job status. One of: completed, failed, running.
after
string
Cursor for pagination. Use the nextCursor value from the previous response to fetch the next page.

Response

extractions
object[]
Array of extraction job summaries.
hasMore
boolean
Whether more results exist beyond this page.
nextCursor
string
Cursor to pass as the after parameter for the next page. Only present when hasMore is true.
{
  "extractions": [
    {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "toolType": "reply_extractor",
      "status": "completed",
      "totalResults": 150,
      "createdAt": "2026-02-24T10:00:00.000Z",
      "completedAt": "2026-02-24T10:00:12.000Z"
    },
    {
      "id": "b2c3d4e5-f6a1-7890-abcd-ef2345678901",
      "toolType": "follower_explorer",
      "status": "completed",
      "totalResults": 4832,
      "createdAt": "2026-02-23T18:30:00.000Z",
      "completedAt": "2026-02-23T18:31:45.000Z"
    },
    {
      "id": "c3d4e5f6-a1b2-7890-abcd-ef3456789012",
      "toolType": "repost_extractor",
      "status": "failed",
      "totalResults": 0,
      "createdAt": "2026-02-23T12:00:00.000Z"
    }
  ],
  "hasMore": true,
  "nextCursor": "eyJjIjoiMjAyNi0wMi0yM1QxMjowMDowMC4wMDBaIiwiaSI6Ijc3NzY4In0"
}

Pagination

Results are ordered by creation date (newest first). To iterate through all extractions:
  1. Make the initial request without the after parameter.
  2. Check hasMore in the response. If true, use nextCursor as the after value in the next request.
  3. Repeat until hasMore is false.
import { appendFile } from "node:fs/promises";

let cursor = undefined;
let pageIndex = 0;

do {
  const params = new URLSearchParams({
    limit: "100",
    status: "completed",
  });
  if (cursor) params.set("after", cursor);
  const pageCursor = cursor ?? null;

  const response = await fetch(`https://xquik.com/api/v1/extractions?${params}`, {
    headers: { "x-api-key": "xq_YOUR_KEY_HERE" },
  });
  const data = await response.json();

  const rows = data.extractions.map((job) => ({
    extraction_id: job.id,
    tool_type: job.toolType,
    status: job.status,
    total_results: job.totalResults,
    created_at: job.createdAt,
    completed_at: job.completedAt ?? null,
    detail_path: `/api/v1/extractions/${job.id}`,
    export_path:
      job.status === "completed"
        ? `/api/v1/extractions/${job.id}/export?format=csv`
        : null,
    page_index: pageIndex,
    page_cursor: pageCursor,
    next_cursor: data.nextCursor ?? null,
    has_more: data.hasMore,
    handoff_format: "jsonl",
  }));

  if (rows.length > 0) {
    await appendFile(
      "xquik-extraction-jobs.jsonl",
      `${rows.map((row) => JSON.stringify(row)).join("\n")}\n`,
    );
  }

  cursor = data.hasMore ? data.nextCursor : undefined;
  pageIndex += 1;
} while (cursor);

Job inventory handoff

Use GET /extractions as the job inventory step before fetching details or exporting files. Treat nextCursor as opaque and pass it back as after; do not dump raw job lists into shared logs.

Page checkpoint

Store page_index, page_cursor, next_cursor, has_more, limit, tool_type_filter, and status_filter after each successful page.

Completed jobs

Store completed job id, toolType, totalResults, completedAt, detail_path, and export_path for the next fetch or file export.

Running or failed jobs

Keep status, createdAt, and id so dashboards can retry failed jobs or poll running jobs without rereading older pages.

Next API step

Use Get Extraction for paginated JSON rows, or Export Extraction for files.
Store page checkpoints separately from job rows:
{
  "page_index": 2,
  "page_cursor": "eyJjIjoiMjAyNi0wMi0yM1QxODozMTo0NS4wMDBaIiwiaSI6Ijc3NzY4In0",
  "next_cursor": "eyJjIjoiMjAyNi0wMi0yM1QxMjowMDowMC4wMDBaIiwiaSI6Ijc3NzY0In0",
  "has_more": true,
  "limit": 100,
  "tool_type_filter": "reply_extractor",
  "status_filter": "completed",
  "handoff_format": "jsonl"
}
Next steps: Get Extraction to retrieve full results for a specific job, or Create Extraction to run a new extraction.
Last modified on May 20, 2026