Skip to main content
GET
/
events
List events
curl --request GET \
  --url https://xquik.com/api/v1/events \
  --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
Listing stored events is free. Event and webhook deliveries are included in active monitor billing.
curl "https://xquik.com/api/v1/events?limit=10&monitorId=7" \
  -H "x-api-key: xq_YOUR_KEY_HERE" \
  | jq '. as $page | .events[] | {
    event_id: .id,
    event_type: .type,
    monitor_type: .monitorType,
    monitor_id: .monitorId,
    keyword_monitor_id: (.keywordMonitorId // null),
    username: (.username // null),
    query: (.query // null),
    occurred_at: .occurredAt,
    tweet_id: (.data.id // null),
    tweet_text: (.data.text // null),
    author_username: (.data.author.userName // null),
    event_detail_endpoint: ("/api/v1/events/" + .id),
    delivery_join_key: .id,
    has_more: $page.hasMore,
    next_cursor: ($page.nextCursor // null)
  }'
These examples emit one stored event row per line. Store event_id, monitor_type, monitor_id, event_type, occurred_at, tweet fields from data, event_detail_endpoint, delivery_join_key, and next_cursor; pass nextCursor as after until hasMore is false.

Source filter examples

Use monitorId for account monitor events and keywordMonitorId for keyword monitor events. Do not pass a keyword monitor ID as monitorId; that filter matches account monitor events only.
curl "https://xquik.com/api/v1/events?limit=50&monitorId=7" \
  -H "x-api-key: xq_YOUR_KEY_HERE" \
  | jq '{events: [.events[] | {id, type, monitorId, username}], hasMore, nextCursor}'

Query parameters

limit
number
Results per page. Default 50, max 100.
monitorId
string
Filter account-monitor events by account monitor ID. Use keywordMonitorId for keyword-monitor events. Omit both filters to return events from all monitors.
keywordMonitorId
string
Filter keyword-monitor events by keyword monitor ID. Use the id returned by keyword monitor endpoints.
eventType
string
Filter by event type. Valid types: tweet.new, tweet.quote, tweet.reply, tweet.retweet, tweet.media, tweet.link, tweet.poll, tweet.mention, tweet.hashtag, tweet.longform, profile.avatar.changed, profile.banner.changed, profile.name.changed, profile.username.changed, profile.bio.changed, profile.location.changed, profile.url.changed, profile.verified.changed, profile.protected.changed, profile.pinned_tweet.changed, profile.unavailable.changed. Omit to return all types.
after
string
Cursor for pagination. Pass the nextCursor value from a previous response to fetch the next page.

Headers

x-api-key
string
required
Your API key.

Response

events
array
List of event objects matching the query.
hasMore
boolean
true if additional pages exist beyond this result set.
nextCursor
string
Pagination cursor. Pass as the after query parameter to fetch the next page. Present only when hasMore is true.
{
  "events": [
    {
      "id": "9001",
      "type": "tweet.new",
      "monitorId": "7",
      "monitorType": "account",
      "username": "elonmusk",
      "occurredAt": "2026-02-24T14:22:00.000Z",
      "data": {
        "id": "1893456789012345678",
        "text": "The future is now.",
        "author": {
          "id": "44196397",
          "userName": "elonmusk",
          "name": "Elon Musk"
        },
        "isRetweet": false,
        "isReply": false,
        "isQuote": false,
        "createdAt": "2026-02-24T14:22:00.000Z"
      }
    },
    {
      "id": "9002",
      "type": "tweet.reply",
      "monitorId": "7",
      "monitorType": "account",
      "username": "elonmusk",
      "occurredAt": "2026-02-24T15:05:30.000Z",
      "data": {
        "id": "1893456789012345999",
        "text": "Absolutely. Shipping next week.",
        "author": {
          "id": "44196397",
          "userName": "elonmusk",
          "name": "Elon Musk"
        },
        "isRetweet": false,
        "isReply": true,
        "isQuote": false,
        "inReplyToId": "1893456789012345900",
        "createdAt": "2026-02-24T15:05:30.000Z"
      }
    }
  ],
  "hasMore": true,
  "nextCursor": "MjAyNi0wMi0yNFQxNTowNTozMC4wMDBafDkwMDI="
}

Event inventory handoff

Use this endpoint when an agent, dashboard, or support workflow needs a compact inventory of stored monitor events before looking up details or webhook delivery status.

Event Row

Store event_id, event_type, occurred_at, and event_detail_endpoint. Use Get Event when a later step needs the full event payload.

Monitor Source

Store monitor_type, monitor_id, keyword_monitor_id, username, and query so account and keyword monitor events stay separate in exports. Use monitorId for account-monitor filters and keywordMonitorId for keyword-monitor filters.

Tweet Fields

Store tweet_id, tweet_text, and author_username from data when the event contains tweet content. Other event types can leave those fields empty.

Delivery Join

Store delivery_join_key as the event ID. In webhook delivery rows, match it to streamEventId from List Deliveries.

Delivery Status

After joining deliveries, store status, attempts, lastStatusCode, lastError, createdAt, and deliveredAt with the event row.

Cursor Checkpoint

Store next_cursor only when has_more is true. Pass it as after for the next page and stop when has_more is false.

Pagination

Events use cursor-based pagination. Each response includes hasMore and (when true) a nextCursor value. Pass nextCursor as the after query parameter to retrieve the next page.
curl "https://xquik.com/api/v1/events?limit=10&monitorId=7" \
  -H "x-api-key: xq_YOUR_KEY_HERE" \
  | jq '{event_ids: [.events[].id], has_more: .hasMore, next_cursor: (.nextCursor // null)}'
Continue fetching pages until hasMore is false. Cursors are opaque strings. Do not parse or construct them manually.
Last modified on May 24, 2026