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 PATCH https://xquik.com/api/v1/monitors/keywords/21 \
-H "x-api-key: xq_YOUR_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{
"eventTypes": ["tweet.new", "tweet.reply"],
"isActive": true
}' | jq
The Node.js, Python, and Go examples convert the updated keyword monitor into
one state row. Store keyword_monitor_id, query, event_types,
is_active, next_billing_at, verify_endpoint, and events_endpoint before
resuming alerts or webhook checks.
Path parameters
The unique keyword monitor ID.
Your API key. Session cookie authentication is also supported. Generate a key from the dashboard .
Must be application/json.
Body
At least 1 field is required.
Updated array of event types. Must contain at least 1 valid keyword monitor
type: tweet.new, tweet.quote, tweet.reply, tweet.retweet,
tweet.media, tweet.link, tweet.poll, tweet.mention,
tweet.hashtag, tweet.longform.
Set to false to pause monitoring, or true to resume. Paused keyword monitors do not consume hourly monitor credits.
The monitored query is immutable. Delete this monitor and create another one to track a different query.
Update handoff
Use this endpoint when a keyword alert changes scope, needs a temporary pause,
or must resume without creating a new monitor ID.
Returned State Store returned id, query, eventTypes, isActive, createdAt, and
nextBillingAt as the current keyword monitor configuration.
Event Filter eventTypes replaces the current filter. Keep webhook subscriptions aligned
with the monitor event types you expect to deliver.
Pause Monitoring isActive: false pauses keyword polling, stored events, future webhook
deliveries, and hourly monitor billing for this monitor.
Resume Monitoring isActive: true resumes polling for matching future tweets. Check
nextBillingAt, then run Test Webhook
before relying on production alerts.
Query Change PATCH cannot change query. Delete this monitor and create a new keyword
monitor when the X search query changes.
Downstream Join Keep using keywordMonitorId and query from
List Events to reconcile stored events and
signed webhook payloads after the update.
Response
200 OK
400 Invalid Input
401 Unauthenticated
404 Not Found
429 Rate Limited
Unique keyword monitor ID.
Normalized X search query.
Current active status after update.
ISO 8601 creation timestamp.
Next hourly credit charge time for active monitor billing.
{
"id" : "21" ,
"query" : "xquik api" ,
"eventTypes" : [ "tweet.new" , "tweet.reply" ],
"isActive" : true ,
"createdAt" : "2026-02-24T10:30:00.000Z" ,
"nextBillingAt" : "2026-02-24T11:30:00.000Z"
}
{ "error" : "invalid_input" , "message" : "Empty body, invalid event types, or invalid isActive type" }
Empty body, invalid eventTypes values, or invalid isActive type. { "error" : "invalid_id" , "message" : "Invalid ID format." }
The provided monitor ID is not a valid format. { "error" : "unauthenticated" , "message" : "Missing or invalid API key" }
Missing or invalid API key. { "error" : "not_found" , "message" : "Monitor not found" }
No keyword monitor exists with this ID, or it belongs to a different account. { "error" : "rate_limit_exceeded" , "message" : "Too many requests. Try again later." , "retryAfter" : 60 }
Too many requests. Wait for the Retry-After header before retrying.