REST API and webhooks

Twitter DM API for the accounts you already use.

A Twitter direct message API for outreach: send X DMs, read replies and run campaigns from your own code. ReachHunt gives you one API key, a clean JSON API and a webhook for every new message. Messages go out from your connected X accounts, so there is no X developer app to set up.

  • No X dev app
  • 92 endpoints
  • 42 webhooks
Send a DM
curl -X POST "https://api.reachhunt.ai/api/v1/conversations/$CONVERSATION_ID/messages" \
  -H "Authorization: Bearer $REACHHUNT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "accountId": "4f1c9a2e-6b7d-4c3a-9e51-0a8b7c6d5e4f",
    "text": "Hi Jane, loved your thread on outbound. Open to a quick chat?"
  }'
Response (shortened)
{
  "status": true,
  "data": {
    "messageId": "1850271846350467072",
    "message": { "text": "Hi Jane, loved your thread on outbound…" }
  },
  "error": null
}
Why ReachHunt

A DM API without the X developer portal.

The official X API is built for apps that act for their users. ReachHunt is built for teams doing outreach from their own accounts, so the outreach parts come included.

ReachHunt API compared with the official X API for sending DMs
ReachHunt APIOfficial X API
What you sign up forA ReachHunt workspaceAn X developer account and app
Who sends the DMYour connected X accountsUsers who authorize your app
Lead lists from followers, retweets and likesBuild it yourself
DM sequences that stop on replyBuild it yourself
Per-account limits and warm-upBuild it yourself
Webhook for every new DMDepends on your access level
Shared inbox for your team
LinkedIn on the same API
Endpoints

Everything outreach needs, in one API.

92 operations across accounts, inbox, leads and campaigns. Every item carries a platform of x or linkedin, so the same code works for both networks.

  • Accounts and limits

    List connected X accounts and check each one’s daily DM limit, what it used, its warm-up and when a paused account can send again.

  • Conversations

    List and read threads, find or start a conversation with a lead, answer message requests, and close, reopen or assign threads.

  • Messages

    Send DMs, react to messages, and schedule a message to go out later or cancel it.

  • Lead lists and imports

    Create lists, add leads, and import followers, following, retweets, comments, post likes or X list members in the background.

  • Campaigns

    Create DM sequences, start, pause, resume or stop them, and read each lead’s progress and replies.

  • Webhooks

    42 event types, from message.received to campaign.lead_replied, sent to your HTTPS endpoint as they happen.

Quick start

Send your first X DM in four requests.

Create a key in Settings → API, export it as REACHHUNT_API_KEY, and follow along.

  1. 1

    Pick the account to send from

    List your connected accounts and keep the id of an X account whose status is connected.

    List accounts
    curl "https://api.reachhunt.ai/api/v1/accounts" \
      -H "Authorization: Bearer $REACHHUNT_API_KEY"
  2. 2

    Pick a lead

    List your lead lists, then the leads in one of them, and keep the id of a lead on X.

    List leads
    curl "https://api.reachhunt.ai/api/v1/leads" \
      -H "Authorization: Bearer $REACHHUNT_API_KEY"
    
    curl "https://api.reachhunt.ai/api/v1/leads/$LEAD_LIST_ID/prospects" \
      -H "Authorization: Bearer $REACHHUNT_API_KEY"
  3. 3

    Find or start the conversation

    If you have never messaged this person, ReachHunt creates a draft that becomes a real conversation when the first message goes out. The response tells you with canSend whether the person accepts DMs from you.

    Get or create a conversation
    curl -X POST "https://api.reachhunt.ai/api/v1/conversations/get-or-create" \
      -H "Authorization: Bearer $REACHHUNT_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"accountId": "ACCOUNT_ID", "prospectId": "LEAD_ID"}'
  4. 4

    Send the message

    URL-encode the conversation ID in the path. X conversation IDs contain a colon, which becomes %3A. The response has the new messageId.

    Send a DM
    curl -X POST "https://api.reachhunt.ai/api/v1/conversations/$CONVERSATION_ID/messages" \
      -H "Authorization: Bearer $REACHHUNT_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "accountId": "4f1c9a2e-6b7d-4c3a-9e51-0a8b7c6d5e4f",
        "text": "Hi Jane, loved your thread on outbound. Open to a quick chat?"
      }'
Webhooks

Get every reply the moment it lands.

Add an HTTPS endpoint in Settings → Webhooks, pick the events it should receive, and add a secret header so your server can check each request. A workspace can have up to 10 webhooks.

Every event has the same envelope and a unique id. Retries keep the id, so deduplicate on it and you never handle the same reply twice.

  • Post to Slack when a lead replies
  • Sync replies, tags and deal values to your CRM
  • Answer each new DM with your own AI model
message.received (shortened)
{
  "id": "evt_9f1c3b7a-2d4e-4c6a-8b1f-0e3d5c7a9b21",
  "type": "message.received",
  "apiVersion": "1",
  "createdAt": "2026-10-19T10:32:00.000Z",
  "data": {
    "account": { "platform": "x", "handle": "acmecorp" },
    "contact": { "platform": "x", "handle": "janedoe", "name": "Jane Doe" },
    "message": {
      "conversationId": "1290876543:1850271846",
      "text": "Sounds good, does Thursday work?"
    }
  }
}
Limits

Account safety, built into every call.

Safety works per account, not per key, so the app, campaigns, the API and MCP all share the same healthy pace.

  • Smart daily limits

    Each X account sends at a safe daily pace that no script can push past, however many keys you create.

  • Warm-up for new accounts

    A newly connected account ramps up step by step, and the API shows its progress.

  • Auto-pause protection

    ReachHunt pauses an account on its own when it needs a break, and the API tells you when it’s ready again.

  • canSend before you send

    Before you message someone, the API tells you whether their DMs are open to you.

Build your way

Code, no-code or plain English.

  • REST API

    JSON over HTTPS with a Bearer key. Every response uses the same status, data and error envelope, so one error handler covers all 92 operations.

  • n8n node

    Install n8n-nodes-reachhunt from community nodes. Send DMs and run campaigns from any workflow, or start one when a lead replies with the ReachHunt Trigger.

  • MCP server

    Connect Claude, ChatGPT or Cursor to the same operations and run them by asking, with no code at all.

FAQ

Twitter DM API questions, answered.

Still have a question?

Book a demo

No. It is ReachHunt’s own API. It works through the X accounts you connect to ReachHunt with our browser extension, and ReachHunt is not affiliated with X Corp. Your API key comes from ReachHunt, not from the X developer portal.

Now live

Your next customer is one DM away.

Connect an account, build a list and switch on your AI agent — in about the time it took to read this page.

  • 14-day free trial
  • No card required
  • 2-minute setup