Skip to main content

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.

Use Xquik in Make when a scenario needs X (Twitter) search, account lookups, trends, publishing, extraction jobs, monitors, or webhook automation without an X Developer app. Make discontinued its native X app in 2025. Start with a private Make custom app so your team can keep scenarios focused, test auth safely, and decide later whether to request public app review.

Prerequisites

  • Xquik API key
  • Make organization with Custom Apps access
  • HTTPS Make webhook URL for instant monitor-event scenarios
  • Optional Slack, Sheets, Airtable, or CRM module for downstream steps

App Shape

SurfaceInitial scope
ConnectionAPI key parameter named apiKey, injected as x-api-key
Base URLhttps://xquik.com/api/v1
ModulesSearch Tweets, Get Tweet, Get User, Get Trends, Create Tweet, Create Extraction, Create Monitor, Create Webhook, Make an API Call
TriggersMonitor Event instant webhook, Extraction Completed polling
Error handlingMap 401, 402, 429, and 5xx to short scenario messages
Make custom apps split this into a connection, base request settings, modules, and optional webhook components. Use Xquik’s /account endpoint as the connection test because it validates the API key without mutating data.

Connection

Create a connection parameter that stores the API key as a password field:
[
  {
    "name": "apiKey",
    "label": "Xquik API Key",
    "type": "password",
    "required": true,
    "editable": true,
    "help": "Create an API key in the Xquik dashboard."
  }
]
Use GET /account to validate the connection:
{
  "url": "https://xquik.com/api/v1/account",
  "method": "GET",
  "headers": {
    "x-api-key": "{{parameters.apiKey}}"
  },
  "response": {
    "metadata": {
      "type": "email",
      "value": "{{body.email}}"
    },
    "error": {
      "message": "{{body.message || body.error || 'Xquik authentication failed.'}}"
    }
  },
  "log": {
    "sanitize": ["request.headers.x-api-key"]
  }
}

Base Request Pattern

Use one base request pattern for JSON modules:
{
  "baseUrl": "https://xquik.com/api/v1",
  "headers": {
    "x-api-key": "{{connection.apiKey}}",
    "content-type": "application/json"
  },
  "response": {
    "error": {
      "message": "{{body.message || body.error || 'Xquik request failed.'}}"
    }
  },
  "log": {
    "sanitize": ["request.headers.x-api-key"]
  }
}
Handle status codes consistently:
StatusMake scenario message
401Authentication failed. Check the Xquik API key.
402Subscription or credits required. Update billing in Xquik.
429Rate limited. Respect the Retry-After header before retrying.
5xxXquik service unavailable. Retry with exponential backoff.

Starter Modules

ModuleMake typeMethod and pathNotes
Search TweetsSearchGET /x/tweets/searchInputs: q, limit, optional cursor
Get TweetActionGET /x/tweets/{id}Input: tweet ID
Get UserActionGET /x/users/{id}Input: user ID or username
Get TrendsSearchGET /x/trendsInputs: optional woeid and count
Create TweetActionPOST /x/tweetsInputs: account, text, optional media URLs
Create ExtractionActionPOST /extractionsInputs: toolType, query fields, result limit
Create MonitorActionPOST /monitorsInputs: username and event types
Create WebhookActionPOST /webhooksInputs: callback URL and event types
Make an API CallUniversalAny /api/v1 pathEscape hatch for endpoints not yet modeled
Example Search Tweets module communication:
{
  "url": "/x/tweets/search",
  "method": "GET",
  "qs": {
    "q": "{{parameters.q}}",
    "limit": "{{parameters.limit || 25}}",
    "cursor": "{{parameters.cursor}}"
  },
  "response": {
    "iterate": "{{body.tweets}}",
    "output": {
      "id": "{{item.id}}",
      "text": "{{item.text}}",
      "authorUsername": "{{item.author.username}}",
      "url": "{{item.url}}"
    }
  }
}

Instant Trigger: Monitor Events

Use a dedicated Make webhook for monitor events. Register that webhook URL in Xquik:
{
  "url": "https://xquik.com/api/v1/webhooks",
  "method": "POST",
  "body": {
    "url": "{{webhook.url}}",
    "eventTypes": ["tweet.new", "tweet.reply", "tweet.quote", "tweet.retweet"]
  }
}
Then create or confirm the monitor:
{
  "url": "https://xquik.com/api/v1/monitors",
  "method": "POST",
  "body": {
    "username": "xquikcom",
    "eventTypes": ["tweet.new", "tweet.reply", "tweet.quote", "tweet.retweet"]
  }
}
Map webhook output fields for downstream modules:
Make fieldXquik payload field
Event typeeventType
Occurred atoccurredAt
Usernameusername
Tweet IDdata.id
Textdata.text
Author usernamedata.author.userName
Keep the webhook secret returned by Xquik. If the scenario includes a verification step before routing, verify x-xquik-signature with that secret before sending alerts.

Polling Trigger: Extraction Completed

Use a polling trigger when users want bulk results without webhook setup:
{
  "url": "/extractions",
  "method": "GET",
  "qs": {
    "status": "completed",
    "limit": 25
  },
  "response": {
    "iterate": "{{body.extractions}}",
    "uid": "{{item.id}}",
    "output": {
      "id": "{{item.id}}",
      "status": "{{item.status}}",
      "toolType": "{{item.toolType}}",
      "createdAt": "{{item.createdAt}}",
      "completedAt": "{{item.completedAt}}"
    }
  }
}
Fetch the job detail with GET /extractions/{id} and loop through nextCursor when hasMore is true.

Recipes

Social Listening To Slack

StepMake module
1Xquik Monitor Event instant trigger
2Text parser or filter for topic keywords
3Slack Create a Message
4Data store upsert by tweet ID

Daily Topic Research To Sheets

StepMake module
1Scheduler
2Xquik Search Tweets
3Iterator
4Google Sheets Add a Row

Bulk Extraction To CRM

StepMake module
1Scheduler or manual trigger
2Xquik Create Extraction
3Sleep or polling trigger
4Xquik Get Extraction
5CRM upsert by user ID

Test Checklist

  • Connection test rejects invalid API keys with a clear 401 message.
  • Every module sanitizes x-api-key in logs.
  • Search modules return arrays and stable IDs for Make deduplication.
  • Instant trigger maps tweet.new, tweet.reply, tweet.quote, and tweet.retweet.
  • Extraction polling stops when no new completed jobs are returned.
  • 429 errors tell users to wait for Retry-After.
  • The Universal module accepts any /api/v1 path but still injects the API key.

Next Steps