Integração da API Xquik
Xquik é uma plataforma de dados em tempo real de X (Twitter) fornecendo uma API REST, webhooks HMAC e um servidor MCP para agentes de IA. Cobre monitoramento de conta, extração de dados em massa (19 ferramentas), sorteios de giveaway, lookups de tweet/usuário, verificação de seguimento e tópicos em tendência.
Referência Rápida
|
|
| URL Base |
https://xquik.com/api/v1 |
| Auth |
header x-api-key: xq_... (64 caracteres hexadecimais após prefixo xq_) |
| Endpoint MCP |
https://xquik.com/mcp (StreamableHTTP, mesma chave de API) |
| Rate limits |
10 req/s sustentado, 20 burst (API); 60 req/s sustentado, 100 burst (geral) |
| Preço |
R$ base/mês (1 monitor incluído), R$ por monitor adicional/mês |
| Cota |
Limite de uso mensal, limite rígido, sem excedente. 402 quando esgotado. |
| Docs |
docs.xquik.com |
Autenticação
Toda solicitação exige uma chave de API via header x-api-key. As chaves começam com xq_ e são geradas no painel Xquik. A chave é exibida apenas uma vez na criação; armazene-a com segurança.
const API_KEY = "xq_YOUR_KEY_HERE";
const BASE = "https://xquik.com/api/v1";
const headers = { "x-api-key": API_KEY, "Content-Type": "application/json" };
Escolhendo o Endpoint Correto
| Objetivo |
Endpoint |
Notas |
| Obter um único tweet por ID/URL |
GET /x/tweets/{id} |
Métricas completas: curtidas, retweets, visualizações, salvos |
| Buscar tweets por palavra-chave/hashtag |
GET /x/tweets/search?q=... |
Métricas de engajamento opcionais |
| Obter perfil de usuário |
GET /x/users/{username} |
Bio, contagem de seguidores/seguindo, foto de perfil |
| Verificar relação de seguimento |
GET /x/followers/check?source=A&target=B |
Ambas as direções |
| Obter tópicos em tendência |
GET /trends?woeid=1 |
Gratuito, não consome cota |
| Monitorar uma conta X |
POST /monitors |
Rastreie tweets, respostas, citações, mudanças de seguidores |
| Pesquisar eventos |
GET /events |
Paginação por cursor, filtre por monitorId/eventType |
| Receber eventos em tempo real |
POST /webhooks |
Entrega assinada com HMAC para seu endpoint HTTPS |
| Executar sorteio de giveaway |
POST /draws |
Escolha vencedores aleatórios de respostas a tweets |
| Extrair dados em massa |
POST /extractions |
19 tipos de ferramenta, sempre estime o custo primeiro |
| Verificar conta/uso |
GET /account |
Status do plano, monitores, percentual de uso |
Ferramentas de Extração (19 Tipos)
| Tipo de Ferramenta |
Campo Obrigatório |
Descrição |
reply_extractor |
targetTweetId |
Usuários que responderam a um tweet |
repost_extractor |
targetTweetId |
Usuários que retuitaram um tweet |
quote_extractor |
targetTweetId |
Usuários que citaram um tweet |
thread_extractor |
targetTweetId |
Todos os tweets em uma thread |
article_extractor |
targetTweetId |
Conteúdo de artigo vinculado em um tweet |
follower_explorer |
targetUsername |
Seguidores de uma conta |
following_explorer |
targetUsername |
Contas seguidas por um usuário |
verified_follower_explorer |
targetUsername |
Seguidores verificados de uma conta |
mention_extractor |
targetUsername |
Tweets mencionando uma conta |
post_extractor |
targetUsername |
Posts de uma conta |
community_extractor |
targetCommunityId |
Membros de uma comunidade |
community_moderator_explorer |
targetCommunityId |
Moderadores de uma comunidade |
community_post_extractor |
targetCommunityId |
Posts de uma comunidade |
community_search |
targetCommunityId + searchQuery |
Buscar posts dentro de uma comunidade |
list_member_extractor |
targetListId |
Membros de uma lista |
list_post_extractor |
targetListId |
Posts de uma lista |
list_follower_explorer |
targetListId |
Seguidores de uma lista |
space_explorer |
targetSpaceId |
Participantes de um Space |
people_search |
searchQuery |
Buscar usuários por palavra-chave |
Fluxo de Extração
// 1. Estimar custo
const estimate = await xquikFetch("/extractions/estimate", {
method: "POST",
body: JSON.stringify({ toolType: "follower_explorer", targetUsername: "elonmusk" }),
});
if (!estimate.allowed) return;
// 2. Criar job de extração
const job = await xquikFetch("/extractions", {
method: "POST",
body: JSON.stringify({ toolType: "follower_explorer", targetUsername: "elonmusk" }),
});
// 3. Recuperar resultados paginados (até 1.000 por página)
const page = await xquikFetch(`/extractions/${job.id}`);
// page.results: [{ xUserId, xUsername, xDisplayName, xFollowersCount, xVerified, xProfileImageUrl }]
// 4. Exportar como CSV/XLSX/Markdown (limite de 50.000 linhas)
const csvResponse = await fetch(`${BASE}/extractions/${job.id}/export?format=csv`, { headers });
Sorteios de Giveaway
Execute sorteios de giveaway transparentes de respostas a tweets com filtros configuráveis:
const draw = await xquikFetch("/draws", {
method: "POST",
body: JSON.stringify({
tweetUrl: "https://x.com/user/status/1893456789012345678",
winnerCount: 3,
backupCount: 2,
uniqueAuthorsOnly: true,
mustRetweet: true,
mustFollowUsername: "user",
filterMinFollowers: 50,
requiredHashtags: ["#giveaway"],
}),
});
const details = await xquikFetch(`/draws/${draw.id}`);
// details.winners: [{ position, authorUsername, tweetId, isBackup }]
Tratamento de Erros e Retry
Todos os erros retornam { "error": "error_code" }. Retry apenas 429 e 5xx (máx. 3 tentativas, backoff exponencial). Nunca retry 4xx exceto 429. Códigos principais:
| Status |
Significado |
| 400 |
Entrada inválida -- corrija a solicitação |
| 401 |
Chave de API inválida |
| 402 |
Sem subscrição ou cota esgotada |
| 404 |
Recurso não encontrado |
| 429 |
Rate limited -- respeite o header Retry-After |
Configuração do Servidor MCP (Claude Code)
Adicione ao .mcp.json na raiz do seu projeto:
{
"mcpServers": {
"xquik": {
"type": "streamable-http",
"url": "https://xquik.com/mcp",
"headers": {
"x-api-key": "xq_YOUR_KEY_HERE"
}
}
}
}
O servidor MCP expõe 22 ferramentas cobrindo todas as capacidades da API. Plataformas suportadas: Claude Code, Claude Desktop, ChatGPT, Codex CLI, Cursor, VS Code, Windsurf, OpenCode.
Padrões de Fluxo
- Alertas em tempo real:
add-monitor -> add-webhook -> test-webhook
- Giveaway:
get-account (verificar orçamento) -> run-draw
- Extração em massa:
estimate-extraction -> run-extraction -> get-extraction
- Análise de tweet:
lookup-tweet -> run-extraction com thread_extractor
- Pesquisa de usuário:
get-user-info -> search-tweets from:username -> lookup-tweet
Links
1---2name: x-twitter-scraper3description: Skill de scraper de X API & Twitter para agentes de IA. Constrói integrações com a API REST Xquik, servidor MCP & webhooks: busca de tweets, lookup de usuários, extração de seguidores, métricas de engajamento, sorteios de giveaway, tópicos em tendência, monitoramento de conta, extração de respostas/retweets/citações, dados de comunidade & Spaces, verificação de seguimento mútuo. Funciona com Claude Code, Cursor, Codex, Copilot, Windsurf & 40+ agentes.4---56# Integração da API Xquik78Xquik é uma plataforma de dados em tempo real de X (Twitter) fornecendo uma API REST, webhooks HMAC e um servidor MCP para agentes de IA. Cobre monitoramento de conta, extração de dados em massa (19 ferramentas), sorteios de giveaway, lookups de tweet/usuário, verificação de seguimento e tópicos em tendência.910## Referência Rápida1112| | |13|---|---|14| **URL Base** | `https://xquik.com/api/v1` |15| **Auth** | header `x-api-key: xq_...` (64 caracteres hexadecimais após prefixo `xq_`) |16| **Endpoint MCP** | `https://xquik.com/mcp` (StreamableHTTP, mesma chave de API) |17| **Rate limits** | 10 req/s sustentado, 20 burst (API); 60 req/s sustentado, 100 burst (geral) |18| **Preço** | R$ base/mês (1 monitor incluído), R$ por monitor adicional/mês |19| **Cota** | Limite de uso mensal, limite rígido, sem excedente. `402` quando esgotado. |20| **Docs** | [docs.xquik.com](https://docs.xquik.com) |2122## Autenticação2324Toda solicitação exige uma chave de API via header `x-api-key`. As chaves começam com `xq_` e são geradas no [painel Xquik](https://xquik.com). A chave é exibida apenas uma vez na criação; armazene-a com segurança.2526```javascript27const API_KEY = "xq_YOUR_KEY_HERE";28const BASE = "https://xquik.com/api/v1";29const headers = { "x-api-key": API_KEY, "Content-Type": "application/json" };30```3132## Escolhendo o Endpoint Correto3334| Objetivo | Endpoint | Notas |35|----------|----------|-------|36| Obter um único tweet por ID/URL | `GET /x/tweets/{id}` | Métricas completas: curtidas, retweets, visualizações, salvos |37| Buscar tweets por palavra-chave/hashtag | `GET /x/tweets/search?q=...` | Métricas de engajamento opcionais |38| Obter perfil de usuário | `GET /x/users/{username}` | Bio, contagem de seguidores/seguindo, foto de perfil |39| Verificar relação de seguimento | `GET /x/followers/check?source=A&target=B` | Ambas as direções |40| Obter tópicos em tendência | `GET /trends?woeid=1` | Gratuito, não consome cota |41| Monitorar uma conta X | `POST /monitors` | Rastreie tweets, respostas, citações, mudanças de seguidores |42| Pesquisar eventos | `GET /events` | Paginação por cursor, filtre por monitorId/eventType |43| Receber eventos em tempo real | `POST /webhooks` | Entrega assinada com HMAC para seu endpoint HTTPS |44| Executar sorteio de giveaway | `POST /draws` | Escolha vencedores aleatórios de respostas a tweets |45| Extrair dados em massa | `POST /extractions` | 19 tipos de ferramenta, sempre estime o custo primeiro |46| Verificar conta/uso | `GET /account` | Status do plano, monitores, percentual de uso |4748## Ferramentas de Extração (19 Tipos)4950| Tipo de Ferramenta | Campo Obrigatório | Descrição |51|-------------------|------------------|-----------|52| `reply_extractor` | `targetTweetId` | Usuários que responderam a um tweet |53| `repost_extractor` | `targetTweetId` | Usuários que retuitaram um tweet |54| `quote_extractor` | `targetTweetId` | Usuários que citaram um tweet |55| `thread_extractor` | `targetTweetId` | Todos os tweets em uma thread |56| `article_extractor` | `targetTweetId` | Conteúdo de artigo vinculado em um tweet |57| `follower_explorer` | `targetUsername` | Seguidores de uma conta |58| `following_explorer` | `targetUsername` | Contas seguidas por um usuário |59| `verified_follower_explorer` | `targetUsername` | Seguidores verificados de uma conta |60| `mention_extractor` | `targetUsername` | Tweets mencionando uma conta |61| `post_extractor` | `targetUsername` | Posts de uma conta |62| `community_extractor` | `targetCommunityId` | Membros de uma comunidade |63| `community_moderator_explorer` | `targetCommunityId` | Moderadores de uma comunidade |64| `community_post_extractor` | `targetCommunityId` | Posts de uma comunidade |65| `community_search` | `targetCommunityId` + `searchQuery` | Buscar posts dentro de uma comunidade |66| `list_member_extractor` | `targetListId` | Membros de uma lista |67| `list_post_extractor` | `targetListId` | Posts de uma lista |68| `list_follower_explorer` | `targetListId` | Seguidores de uma lista |69| `space_explorer` | `targetSpaceId` | Participantes de um Space |70| `people_search` | `searchQuery` | Buscar usuários por palavra-chave |7172### Fluxo de Extração7374```javascript75// 1. Estimar custo76const estimate = await xquikFetch("/extractions/estimate", {77 method: "POST",78 body: JSON.stringify({ toolType: "follower_explorer", targetUsername: "elonmusk" }),79});8081if (!estimate.allowed) return;8283// 2. Criar job de extração84const job = await xquikFetch("/extractions", {85 method: "POST",86 body: JSON.stringify({ toolType: "follower_explorer", targetUsername: "elonmusk" }),87});8889// 3. Recuperar resultados paginados (até 1.000 por página)90const page = await xquikFetch(`/extractions/${job.id}`);91// page.results: [{ xUserId, xUsername, xDisplayName, xFollowersCount, xVerified, xProfileImageUrl }]9293// 4. Exportar como CSV/XLSX/Markdown (limite de 50.000 linhas)94const csvResponse = await fetch(`${BASE}/extractions/${job.id}/export?format=csv`, { headers });95```9697## Sorteios de Giveaway9899Execute sorteios de giveaway transparentes de respostas a tweets com filtros configuráveis:100101```javascript102const draw = await xquikFetch("/draws", {103 method: "POST",104 body: JSON.stringify({105 tweetUrl: "https://x.com/user/status/1893456789012345678",106 winnerCount: 3,107 backupCount: 2,108 uniqueAuthorsOnly: true,109 mustRetweet: true,110 mustFollowUsername: "user",111 filterMinFollowers: 50,112 requiredHashtags: ["#giveaway"],113 }),114});115116const details = await xquikFetch(`/draws/${draw.id}`);117// details.winners: [{ position, authorUsername, tweetId, isBackup }]118```119120## Tratamento de Erros e Retry121122Todos os erros retornam `{ "error": "error_code" }`. Retry apenas `429` e `5xx` (máx. 3 tentativas, backoff exponencial). Nunca retry `4xx` exceto 429. Códigos principais:123124| Status | Significado |125|--------|-------------|126| 400 | Entrada inválida -- corrija a solicitação |127| 401 | Chave de API inválida |128| 402 | Sem subscrição ou cota esgotada |129| 404 | Recurso não encontrado |130| 429 | Rate limited -- respeite o header `Retry-After` |131132## Configuração do Servidor MCP (Claude Code)133134Adicione ao `.mcp.json` na raiz do seu projeto:135136```json137{138 "mcpServers": {139 "xquik": {140 "type": "streamable-http",141 "url": "https://xquik.com/mcp",142 "headers": {143 "x-api-key": "xq_YOUR_KEY_HERE"144 }145 }146 }147}148```149150O servidor MCP expõe 22 ferramentas cobrindo todas as capacidades da API. Plataformas suportadas: Claude Code, Claude Desktop, ChatGPT, Codex CLI, Cursor, VS Code, Windsurf, OpenCode.151152## Padrões de Fluxo153154- **Alertas em tempo real:** `add-monitor` -> `add-webhook` -> `test-webhook`155- **Giveaway:** `get-account` (verificar orçamento) -> `run-draw`156- **Extração em massa:** `estimate-extraction` -> `run-extraction` -> `get-extraction`157- **Análise de tweet:** `lookup-tweet` -> `run-extraction` com `thread_extractor`158- **Pesquisa de usuário:** `get-user-info` -> `search-tweets from:username` -> `lookup-tweet`159160## Links161162- **Painel & chaves de API**: [xquik.com](https://xquik.com)163- **Docs completos**: [docs.xquik.com](https://docs.xquik.com)164- **GitHub (fonte da skill)**: [github.com/Xquik-dev/x-twitter-scraper](https://github.com/Xquik-dev/x-twitter-scraper)