Skip to main content
POST
/
monitors
/
keywords
Create keyword monitor API
curl --request POST \
  --url https://xquik.com/api/v1/monitors/keywords \
  --header 'Content-Type: <content-type>' \
  --header 'x-api-key: <api-key>' \
  --data '
{
  "query": "<string>",
  "eventTypes": [
    "<string>"
  ]
}
'

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.

Requires 22 available credits - active keyword monitors bill 21 credits per hour
Keyword monitors are unlimited. Active monitors check every 1 second. Webhook and event deliveries are included in active monitor billing.
curl -X POST https://xquik.com/api/v1/monitors/keywords \
  -H "x-api-key: xq_YOUR_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "xquik api",
    "eventTypes": ["tweet.new"]
  }' | jq

Keyword monitor handoff

Use POST /monitors/keywords when a queue, CRM, warehouse, Slack alert, or agent needs real-time tweet alerts for an X search query. Create the monitor first, then create a signed webhook with POST /webhooks and test it with POST /webhooks/{id}/test.

Monitor ID

Store id as monitorId for GET /events, updates, pauses, and deletes.

Normalized Query

Store query; Xquik includes it on keyword monitor events and signed webhook payloads.

Event Filter

Store eventTypes; subscribe webhooks to matching event types so expected tweets deliver.

Active State

Read isActive and nextBillingAt before enabling alerts or estimating hourly monitor burn.

Stored Event Join

Use monitorType: "keyword", keywordMonitorId, and query from GET /events to join stored events back to the monitor.

Webhook Delivery Join

Use deliveryId for receiver idempotency and streamEventId to join the signed webhook back to GET /events/{id}. Store eventType, occurredAt, and data with the downstream job.
Active keyword monitors check every 1 second and cost 21 credits per active monitor-hour. Creation or reactivation requires 22 available credits. Pause with PATCH /monitors/keywords/{id} and { "isActive": false } when the alert should stop.

Headers

x-api-key
string
required
Your API key. Session cookie authentication is also supported. Generate a key from the dashboard.
Content-Type
string
required
Must be application/json.

Body

query
string
required
X search query to monitor. Whitespace is normalized. Maximum length is 160 characters.
eventTypes
string[]
required
Array of event types to subscribe to. At least 1 required. See Valid Event Types below.

Valid event types

tweet.new

Matching tweet returned by the query. Used when no reply, quote, or retweet signal is present.

tweet.quote

Matching quote tweet returned by the query. Include this when quote activity should create keyword monitor events and webhook deliveries.

tweet.reply

Matching reply returned by the query. Include this when support routing, conversation tracking, or alerting needs replies.

tweet.retweet

Matching retweet returned by the query. Include this when repost activity should create keyword monitor events and webhook deliveries.

Response

id
string
Unique keyword monitor ID.
query
string
Normalized query being monitored.
eventTypes
string[]
Event types this monitor is subscribed to.
isActive
boolean
Whether the monitor is currently active.
createdAt
string
ISO 8601 creation timestamp.
nextBillingAt
string
Next hourly credit charge time. New active monitors are due immediately.
{
  "id": "21",
  "query": "xquik api",
  "eventTypes": ["tweet.new"],
  "isActive": true,
  "createdAt": "2026-02-24T10:30:00.000Z",
  "nextBillingAt": "2026-02-24T10:30:00.000Z"
}
If a keyword monitor for the same query exists but is paused, creating it again reactivates that monitor with the new event types.
Next steps: List Keyword Monitors to see all keyword monitors, or Create Webhook to receive matching events.
Last modified on May 15, 2026