Skip to main content
PATCH
/
monitors
/
keywords
/
{id}
Update keyword monitor
curl --request PATCH \
  --url https://xquik.com/api/v1/monitors/keywords/{id} \
  --header 'Content-Type: <content-type>' \
  --header 'x-api-key: <api-key>' \
  --data '
{
  "eventTypes": [
    "<string>"
  ],
  "isActive": true
}
'
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 -c '{
    keyword_monitor_id: .id,
    query: .query,
    event_types: .eventTypes,
    is_active: .isActive,
    created_at: .createdAt,
    next_billing_at: .nextBillingAt,
    verify_endpoint: "/api/v1/monitors/keywords/\(.id)",
    delete_endpoint: "/api/v1/monitors/keywords/\(.id)",
    events_endpoint: "/api/v1/events?keywordMonitorId=\(.id)",
    event_detail_endpoint_pattern: "/api/v1/events/{event_id}",
    webhooks_endpoint: "/api/v1/webhooks",
    deliveries_endpoint_pattern: "/api/v1/webhooks/{webhook_id}/deliveries"
  }'
The cURL, 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, delete_endpoint, events_endpoint, event_detail_endpoint_pattern, webhooks_endpoint, and deliveries_endpoint_pattern before resuming alerts or webhook checks.

Path parameters

id
string
required
The unique keyword monitor ID.

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

At least 1 field is required.
eventTypes
string[]
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.
isActive
boolean
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 List Webhooks 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. Use Get Event for one event’s full payload.

Delivery Audit

Use List Deliveries when webhook delivery evidence must be retained. Join delivery streamEventId to event IDs. Do not use x_event_id as the delivery join key.

Delete Path

Use Delete Keyword Monitor only when the query should stop permanently. Export event and delivery evidence first when support or audit workflows need history.

Response

id
string
Unique keyword monitor ID.
query
string
Normalized X search query.
eventTypes
string[]
Updated event types.
isActive
boolean
Current active status after update.
createdAt
string
ISO 8601 creation timestamp.
nextBillingAt
string
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"
}
Last modified on May 24, 2026