Prerequisites
- Xquik API key
- Zapier account with Platform CLI access
- Node.js 18+
- HTTPS callback URLs for REST Hook testing
Integration Shape
Auth
API key field named
apiKey, injected as x-api-key.Base URL
https://xquik.com/api/v1Request Helper
JSON requests, structured Xquik errors, and
Retry-After handling.Actions
Search Tweets, Get Tweet, Get User, Get Trends, Create Tweet, Create Reply,
Create Extraction, Create Monitor, and Create Webhook.
Triggers
New Matching Tweet polling, Monitor Event instant trigger, Extraction
Completed polling, and Webhook Delivery Failure polling.
API Key Auth
Add a custom auth field and inject it into every Xquik request:Shared Error Handling
Normalize Xquik responses in one helper so every action reports the same remediation:throwForXquikError(z, response) after each z.request.
Starter Actions
Search Tweets
Call
GET /x/tweets/search with q; use cursor for page loops and keep limit on bounded resumes.Get Tweet
Call
GET /x/tweets/{id} with a tweet ID.Get User
Call
GET /x/users/{id} with a user ID.Get Trends
Call
GET /x/trends with optional woeid and count.Create Tweet
Call
POST /x/tweets with account, text, and optional public media URLs.Create Reply
Call
POST /x/tweets with account, text, and reply_to_tweet_id.Create Extraction
Call
POST /extractions with toolType, query fields, and result limit.Create Monitor
Call
POST /monitors with username and event types.Create Webhook
Call
POST /webhooks with callback URL and event types.Result Handoff
Use Zapier samples andoutputFields so later Zap steps map stable values. Return compact objects from actions and arrays from triggers; do not pass full API responses into Zap history, Slack messages, CRM rows, or retry queues. Use snake_case storage keys for handoff rows even when direct API responses use camelCase.
Search Tweets action
Return tweet rows with
id, text, author__username, createdAt, and optional url; store tweet_id, author_username, created_at, has_next_page, and next_cursor when a Zap loops pages.User profile rows
Return source
id as user_id, plus username, name, followers, verified, profile_picture, has_next_page, next_cursor, and the lookup or search input.Trend rows
Return each trend
name, rank, query, and description. Keep response count, woeid, and the selected region with the Zap run.Tweet or Reply write
Return
tweetId, charged, and chargedCredits on 200 Success; store them as tweet_id, charged, and charged_credits. For 202 x_write_unconfirmed, store write_action_id, status, charged, and charged_credits, then poll GET /x/write-actions/{id} before retrying.Media attachments
For tweets or replies, pass public URLs in
media; do not send media_ids. For DMs, upload first, pass 1 media_id in media_ids, store message_id, and leave reply_to_message_id unset.Monitor and webhook setup
Return monitor
id, username, xUserId, eventTypes, isActive, and nextBillingAt; return webhook id, url, eventTypes, and one-time secret. For Zap storage rows, map production deliveryId to delivery_id for receiver retry de-dupe and streamEventId to stream_event_id when one monitor event should process once across endpoint changes.REST Hook trigger
Return
id, deliveryId, and streamEventId; choose deliveryId for endpoint retry de-dupe or streamEventId when one monitor event should process once across webhook changes.Stored Event Replay
Call
GET /events with after when a Zap needs replay. Map id, monitorId, monitorType, occurredAt, hasMore, and nextCursor to event_id, monitor_id, monitor_type, occurred_at, has_more, and next_cursor.Receiver acceptance
Return
2xx after accepting duplicate deliveryId or streamEventId; keep endpoint signing values, raw request body, raw signature, and full headers out of Zap history, tables, Slack messages, CRM rows, and retry queues.Extraction polling trigger
Return completed job
id, toolType, and status; store extraction_id, tool_type, status, has_more, and next_cursor before batch Zaps fetch detail rows.Trigger 1: New Matching Tweet
Use polling for query-based alerts. Return a stable array of tweet records and let Zapier deduplicate byid.
Trigger 2: Monitor Event REST Hook
Use REST Hooks for monitor events so Zapier receives new tweets, replies, quotes, and retweets immediately.Subscribe
Unsubscribe
Perform
performList to return one recent monitor event with the same schema. Zapier requires sample output fields that match live webhook payloads.
Trigger 3: Extraction Completed
Use polling when users want bulk jobs without webhook setup:Trigger 4: Webhook Delivery Failure
Use polling for operations teams that need delivery alerts:Test Coverage
Add focused Zapier tests before sharing the private app:Auth Header Injection
Every request includes
x-api-key from bundle.authData.apiKey.Invalid Key
401 returns “Authentication failed. Check the Xquik API key.”Rate Limit
429 includes Retry-After in the user-facing message when present.REST Hook Subscribe
POST /webhooks sends bundle.targetUrl and selected event types.REST Hook Unsubscribe
DELETE /webhooks/{id} uses bundle.subscribeData.id.Sample Output
Trigger samples include
id, eventType, occurredAt, tweet text, and author username.Search Action
Search returns an array of tweets with stable IDs.
Launch Checklist
- Keep the first version private until auth, REST Hook lifecycle, sample output, and rate-limit behavior are verified.
- Use clear labels in the Zap editor: Search Tweets, Create Tweet, Monitor Event, Extraction Completed.
- Document which actions consume credits before publishing to a broader team.
- Add more endpoints only when Zap history shows repeated manual API Request steps.
Next Steps
- Read API Reference for auth, rate limits, and errors.
- Read Webhooks for payload shape and retries.
- Read Extraction Workflow for job creation and result pagination.
- Use n8n when the team prefers visual workflows without a custom Zapier app.