Introduction

AI-powered social mention monitoring & automated replies

Replymer monitors social media platforms (X and Reddit) for mentions that match your goals, scores them for relevance, and publishes AI-generated replies through your managed browser accounts — all automatically.

Monitor

Continuously scans X and Reddit for relevant conversations using your keywords

Score

AI scores each mention 0–100 based on your task goal — lead gen, brand monitoring, etc.

Reply

Generates and publishes contextual replies via your managed accounts

Key concepts

  • Task — the primary unit of work. Defines what to monitor, where, how often, and what to do with findings.
  • Mention — a social post that matched your task keywords, scored for relevance.
  • Reply — an AI-generated response draft, awaiting your approval or published automatically.
  • Managed Account — a connected social account (X or Reddit) used to post replies.
  • Workspace — your account namespace. API keys are workspace-scoped.

Platforms

  • X — search API + scraping via managed browser profiles
  • Reddit — Reddit search API, subreddit monitoring

Quick Start

Get your first task running in under 5 minutes.

1. Create an account

Sign up at replymer.ai. You receive 3 free trial replies to get started — no credit card required.

2. Add a managed account

Go to Settings → Accounts and connect an X or Reddit account. Replymer uses browser automation to post replies on your behalf — your account must be active and in good standing.

3. Create your first task

Click New Task in the sidebar (or ask the AI Agent). Choose a goal, add keywords that describe your product or the conversations you want to find, and pick the platforms to monitor.

json — task example
{
  "name": "Lead Gen — SaaS Founders",
  "goal": "lead_generation",
  "platforms": ["twitter", "reddit"],
  "keywords": [
    "project management tool",
    "trello alternative",
    "asana vs notion"
  ],
  "scheduleFrequency": "hourly",
  "relevanceThreshold": 65,
  "replyTone": "helpful"
}

4. Review mentions

Once the first scan runs (within a minute of creating the task), relevant mentions appear in the Mentions feed. Each mention has a relevance score (0–100) and an AI explanation.

5. Approve and publish replies

AI-generated reply drafts appear in the Replies queue. Review, edit if needed, and approve — or enable Auto-Reply on the task to publish automatically.

💡
Enable Auto-Reply only after reviewing a few manual replies to ensure quality and tone match your brand voice.

Authentication

API keys for programmatic access

The public API uses Bearer token authentication. Generate an API key from the dashboard and pass it in every request header.

http
Authorization: Bearer rk_your_api_key_here

Creating an API key

  1. Open Settings → API Keys in the dashboard
  2. Click Create Key and give it a name
  3. Copy the key immediately — it is shown only once
  4. Store it securely (environment variable, secret manager)
⚠️
API keys are workspace-scoped. Every request operates within the workspace where the key was created. Never commit keys to version control.

Key format

All keys start with rk_ followed by a random string. In the dashboard you only see the prefix (e.g. rk_a1b2c3••••••••) — the full key is stored as a SHA-256 hash.

Revoking a key

Go to Settings → API Keys, click the trash icon next to the key. All subsequent requests with that key return 401 Unauthorizedimmediately.

Authentication errors

json
{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Missing or invalid API key"
  }
}

Tasks

The primary unit of monitoring work

A task defines what to monitor, where, and why. The goal field shapes how the AI scores relevance — the same mention might score 90 for a lead-gen task but 20 for a brand-monitoring task.

Goals

ParameterTypeDescription
lead_generationgoalFinds people actively looking for solutions your product provides. High score = high purchase intent.
competitor_trackinggoalMonitors mentions of competitors. Surfaces frustrated customers and comparison threads.
brand_monitoringgoalTracks direct mentions of your brand, product name, or URL across platforms.
market_researchgoalFinds discussions about trends, pain points, and opinions in your niche.
support_monitoringgoalIdentifies users reporting problems with your product so you can respond quickly.
customgoalDefine a custom scoring prompt for unique use cases not covered above.

Keywords

Keywords are the raw search terms sent to platform search APIs. Use specific, meaningful phrases — not single words. Examples:

  • ✅ “project management tool for remote teams”
  • ✅ “trello alternative with time tracking”
  • ❌ “project” — too generic, returns too much noise

Relevance threshold

Only mentions with a relevance score ≥ threshold appear in the feed. Default is 60. Lower = more mentions (higher noise), higher = fewer but more targeted mentions.

Schedule

ParameterTypeDescription
every_30mfrequencyScan every 30 minutes
hourlyfrequencyScan every hour
every_3hfrequencyScan every 3 hours
every_6hfrequencyScan every 6 hours
every_12hfrequencyScan every 12 hours
dailyfrequencyScan once per day

You can optionally restrict scanning to active hours (e.g. 9am–6pm in your timezone) to avoid replying to old posts during off-hours.

Auto-Reply

When enabled, Replymer automatically publishes replies for all relevant mentions above the threshold without waiting for manual approval. Set autoReplyAccountId to specify which managed account to use.

ℹ️
Even with Auto-Reply enabled, you can review published replies in the Replies tab and see their quality and spam risk scores.

Mentions

Social posts found during scans

When a scan runs, it fetches posts matching your keywords from the target platforms, then the AI scores each one for relevance to your task goal. Mentions above your threshold appear in the feed.

Status lifecycle

newJust found, not yet processed by the scoring pipeline
relevantScore ≥ threshold — shown in the feed, ready for reply generation
irrelevantScore < threshold — hidden by default, accessible via filter
queuedReply has been generated and is awaiting approval or auto-publish
repliedReply was successfully published
skippedManually dismissed — will not generate a reply

Relevance score

The score (0–100) is computed by the AI with the task goal as context. A score of 90+ means the post is highly relevant — the author is likely a perfect prospect or direct brand mention. The AI also provides a short relevanceReason explaining the score.

Sentiment

Each mention is classified as positive, negative, neutral, or question. Questions and negatives are often the highest-value targets for lead-gen and support tasks.

Replies

AI-generated response drafts

For each relevant mention, Replymer generates a reply draft using the task's tone and instructions. Drafts go through quality scoring before appearing in the approval queue.

Quality scoring

  • Quality score (0–100) — measures how helpful, natural, and on-topic the reply is
  • Spam risk score (0–100) — measures how promotional or spammy the reply looks; lower is better
  • Naturalness score (0–100) — measures how human and authentic the reply sounds; higher is better

Replies with spam risk > 60 or naturalness < 40 are automatically discarded. Auto-approved replies require quality ≥ 70, spam ≤ 30, and naturalness ≥ 60.

Reply status lifecycle

draftGenerated, waiting for manual review or auto-publish
approvedApproved by user, queued for publishing
publishingCurrently being posted via managed account
publishedSuccessfully posted — publishedUrl available
failedPublishing failed (account issue, rate limit, etc.)
rejectedManually rejected — mention returned to relevant

Tone options

  • helpful — friendly, informative, problem-solving
  • casual — conversational, approachable
  • professional — formal, business-appropriate
  • technical — precise, detailed, data-driven
  • empathetic — warm, understanding, supportive
  • witty — sharp, slightly humorous
  • custom — provide your own instructions via replyInstructions

Scanning

How mention discovery works

Scans are the execution units — each scan runs the search for one platform and one task. A task with two platforms creates two scan jobs per scheduled run.

Scan pipeline

  1. BullMQ job is created for each platform at schedule time
  2. Platform search API is queried with task keywords
  3. Raw results are deduped against previously seen posts
  4. AI scores each new post (batched for efficiency)
  5. Relevant mentions are saved and appear in the feed
  6. Reply generation is queued for all relevant mentions (if not manual-only)

Cost

Scans and AI scoring are free — included with every plan. You only pay for published replies that exceed your monthly plan limit.

Manual scans

Trigger an immediate scan via the dashboard or the API. Useful after updating keywords or for testing. Manual scans run in addition to the schedule.

Managed Accounts

Social accounts used for posting replies

Replymer publishes replies via browser automation (AdsPower profiles). Each managed account represents one social media account (X or Reddit) that is linked to your workspace.

Adding an account

  1. Go to Settings → Accounts
  2. Click Add Account
  3. Enter the platform, username, and AdsPower profile ID
  4. Replymer will verify the account is accessible and set status to active

Account health

  • active — ready to post
  • rate_limited — platform is throttling; Replymer backs off automatically
  • suspended — account banned; manual intervention required
  • error — browser profile issue; check AdsPower
⚠️
Keep managed accounts warm — use them for real interactions, not just automated replies. Accounts that only post automated content get flagged more easily by platforms.

Billing & Replies

Simple reply-based pricing

Replymer uses a simple reply-based pricing model. Scanning and AI generation are free with every plan — you only pay for published replies.

How it works

  • Each plan includes a monthly reply allowance (e.g. Growth = 200 replies/month)
  • Scans, AI scoring, and reply generation are unlimited and free
  • Only successfully published replies count against your limit
  • Overage replies are charged from your overage credit balance at your plan's rate

Plans

PlanPriceReplies/moOverage
Starter$39/mo50$0.50/reply
Growth$99/mo200$0.40/reply
Scale$399/mo1,000$0.30/reply
Business$999/mo3,000$0.25/reply
Enterprise$1,999/mo10,000$0.15/reply

Overage credits

If you exceed your monthly reply limit, additional replies are charged from your overage credit balance. Top up any time from the Billing page — available in $10, $25, $50, and $100 increments. Credits never expire.

Free trial

Every new workspace receives 3 free trial replies automatically — no credit card required. Use them to test the full pipeline before subscribing.

API Overview

Programmatic access to all Replymer functionality

Base URL:https://replymer.ai/api/v1
ℹ️
The machine-readable OpenAPI 3.1 spec is available at /api/v1/openapi.json. Import it into Postman, Insomnia, or any OpenAPI-compatible tool.

Response format

json — single object
{ "data": { ... } }
json — paginated list
{
  "items": [ ... ],
  "hasMore": true,
  "nextCursor": "2024-01-15T12:00:00.000Z"
}
json — error
{
  "error": {
    "code": "NOT_FOUND",
    "message": "Task not found"
  }
}

HTTP status codes

ParameterTypeDescription
200OKRequest succeeded
201CreatedResource created successfully
202AcceptedAsync job queued (e.g. manual scan)
400Bad RequestInvalid parameters or body
401UnauthorizedMissing, invalid, or revoked API key
403ForbiddenKey valid but access denied
404Not FoundResource does not exist
500Server ErrorUnexpected internal error

Pagination

List endpoints use cursor-based pagination. Pass nextCursor from the previous response as the cursor query param in the next request.

http
GET /api/v1/mentions?limit=50&cursor=2024-01-15T12:00:00.000Z
ParameterTypeDescription
limitintegerItems per page. Default: 50. Max: 100.
cursorISO 8601Cursor from the previous page's nextCursor field.
hasMorebooleanResponse field — true if more pages exist.
nextCursorstring | nullResponse field — pass as cursor in the next request.

API: Workspace

GET/api/v1/workspace

Returns workspace info, reply usage, overage balance, and task counts.

curl
curl https://replymer.ai/api/v1/workspace \
  -H "Authorization: Bearer rk_your_key"
json — response
{
  "data": {
    "id": "clxyz...",
    "name": "My Workspace",
    "slug": "my-workspace",
    "balanceUsd": 10.00,
    "totalSpentUsd": 24.00,
    "subscriptionPlan": "growth",
    "repliesUsedThisPeriod": 42,
    "monthlyReplyLimit": 200,
    "freeTrialRepliesLeft": 0,
    "overageRateUsd": 0.40,
    "defaultReplyTone": "helpful",
    "defaultReplyLanguage": "en",
    "tasks": { "active": 3, "paused": 1 },
    "last24hScans": 48
  }
}

API: Tasks

GET/api/v1/tasks

List all tasks. Returns non-removed tasks by default. Filter with ?status=paused.

ParameterTypeDescription
statusactive | paused | removedFilter by task status. Defaults to all non-removed.
curl
curl "https://replymer.ai/api/v1/tasks?status=active" \
  -H "Authorization: Bearer rk_your_key"
POST/api/v1/tasks

Create a new task.

ParameterTypeDescription
namerequiredstringTask name
goalrequiredstringlead_generation | competitor_tracking | brand_monitoring | market_research | support_monitoring | custom
platformsstring[]Platforms to monitor: twitter, reddit. Default: ["twitter", "reddit"]
keywordsstring[]Search keywords for the platforms
negativeKeywordsstring[]Keywords that exclude a post from results
scheduleFrequencystringevery_30m | hourly | every_3h | every_6h | every_12h | daily. Default: hourly
scheduleTimezonestringIANA timezone for active hours. Default: UTC
activeHoursStartinteger 0–23Start of active scanning window (hour)
activeHoursEndinteger 0–23End of active scanning window (hour)
relevanceThresholdinteger 0–100Minimum score to show in feed. Default: 60
replyTonestringhelpful | casual | professional | technical | empathetic | witty | custom. Default: helpful
replyLanguagestringen | es | fr | de | pt | ja | ko | zh | ar | hi | auto. Default: en
replyInstructionsstringCustom system prompt for reply generation (use with tone: custom)
autoReplybooleanAutomatically publish replies without manual approval. Default: false
autoReplyAccountIdstringManaged account ID to use for auto-publishing
curl
curl -X POST https://replymer.ai/api/v1/tasks \
  -H "Authorization: Bearer rk_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Lead Gen — SaaS Founders",
    "goal": "lead_generation",
    "platforms": ["twitter", "reddit"],
    "keywords": ["project management tool", "trello alternative"],
    "scheduleFrequency": "hourly",
    "relevanceThreshold": 65
  }'
GET/api/v1/tasks/:taskId

Get a single task including mention and scan counts.

PATCH/api/v1/tasks/:taskId

Update task settings. Send only the fields you want to change.

curl — pause a task
curl -X PATCH https://replymer.ai/api/v1/tasks/task_abc123 \
  -H "Authorization: Bearer rk_your_key" \
  -H "Content-Type: application/json" \
  -d '{ "status": "paused" }'
DELETE/api/v1/tasks/:taskId

Soft-delete a task (sets status: “removed”). Data is preserved and queryable with ?status=removed.

API: Mentions

GET/api/v1/mentions

List mentions with filtering and cursor-based pagination.

ParameterTypeDescription
taskIdstringFilter to a specific task
statusstringrelevant | irrelevant | replied | skipped | queued | new
platformstringtwitter | reddit
minScoreintegerMinimum relevance score (0–100)
maxScoreintegerMaximum relevance score (0–100)
limitintegerItems per page. Default: 50, max: 100.
cursorstringPagination cursor
curl
curl "https://replymer.ai/api/v1/mentions?taskId=task_abc&minScore=80&platform=reddit" \
  -H "Authorization: Bearer rk_your_key"
GET/api/v1/mentions/:mentionId

Get a single mention with its replies.

PATCH/api/v1/mentions/:mentionId

Update a mention's status. Valid values: relevant, irrelevant, skipped, queued.

curl
curl -X PATCH https://replymer.ai/api/v1/mentions/mention_xyz \
  -H "Authorization: Bearer rk_your_key" \
  -H "Content-Type: application/json" \
  -d '{ "status": "skipped" }'

API: Replies

GET/api/v1/replies

List reply drafts with filtering and pagination.

ParameterTypeDescription
taskIdstringFilter to a specific task
statusstringdraft | approved | publishing | published | failed | rejected
limitintegerDefault: 50, max: 100
cursorstringPagination cursor
curl
curl "https://replymer.ai/api/v1/replies?status=draft" \
  -H "Authorization: Bearer rk_your_key"
GET/api/v1/replies/:replyId

Get a single reply with its mention context.

PATCH/api/v1/replies/:replyId

Approve, reject, or edit a reply draft.

ParameterTypeDescription
actionrequiredstringapprove | reject | edit
contentstringNew reply text (required when action = edit)
ActionEffect
approveSets status to approved, queues reply for publishing
rejectSets status to rejected, returns mention to relevant
editUpdates content, resets status to draft
curl — approve
curl -X PATCH https://replymer.ai/api/v1/replies/reply_123 \
  -H "Authorization: Bearer rk_your_key" \
  -H "Content-Type: application/json" \
  -d '{ "action": "approve" }'
curl — edit then approve
# First edit the content
curl -X PATCH https://replymer.ai/api/v1/replies/reply_123 \
  -H "Authorization: Bearer rk_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "action": "edit",
    "content": "Great question! We built this exact feature in v2..."
  }'

# Then approve
curl -X PATCH https://replymer.ai/api/v1/replies/reply_123 \
  -H "Authorization: Bearer rk_your_key" \
  -H "Content-Type: application/json" \
  -d '{ "action": "approve" }'

API: Scans

POST/api/v1/scan

Trigger a manual scan for a task. Returns 202 Accepted immediately — scanning happens asynchronously.

ParameterTypeDescription
taskIdrequiredstringID of the task to scan
curl
curl -X POST https://replymer.ai/api/v1/scan \
  -H "Authorization: Bearer rk_your_key" \
  -H "Content-Type: application/json" \
  -d '{ "taskId": "task_abc123" }'
json — response 202
{
  "data": {
    "taskId": "task_abc123",
    "jobs": [
      { "platform": "twitter", "jobId": "scan-task_abc123-twitter-1705312800000" },
      { "platform": "reddit",  "jobId": "scan-task_abc123-reddit-1705312800000" }
    ]
  }
}
GET/api/v1/scans

List recent scan executions.

ParameterTypeDescription
taskIdstringFilter to a specific task
platformstringtwitter | reddit
limitintegerDefault: 20, max: 100
cursorstringPagination cursor

API: Key Management

Dashboard API — requires session auth, not API key auth

ℹ️
These endpoints are part of the internal dashboard API and require a logged-in session (cookie-based auth). They are not accessible with Bearer API keys.
GET/api/v1/api/workspaces/:workspaceId/api-keys

List all active API keys for the workspace. Returns only the prefix — the full key is never stored or returned after creation.

POST/api/v1/api/workspaces/:workspaceId/api-keys

Create a new API key. The full key is returned exactly once.

ParameterTypeDescription
namerequiredstringDisplay name
expiresAtISO 8601Optional expiry date. Default: never expires.
json — response (key shown once only)
{
  "id": "key_abc",
  "name": "My automation",
  "keyPrefix": "rk_a1b2c3",
  "key": "rk_a1b2c3d4e5f6...",
  "createdAt": "2024-01-15T09:00:00.000Z"
}
DELETE/api/v1/api/workspaces/:workspaceId/api-keys/:keyId

Revoke an API key immediately. All subsequent requests with that key return 401.

Common patterns

Poll for new mentions after a manual scan

javascript
// Trigger scan
await fetch("https://replymer.ai/api/v1/scan", {
  method: "POST",
  headers: {
    "Authorization": "Bearer rk_your_key",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ taskId: "task_abc123" }),
});

// Wait ~30s for scan to complete, then fetch results
await new Promise(r => setTimeout(r, 30_000));

const { items } = await fetch(
  "https://replymer.ai/api/v1/mentions?taskId=task_abc123&status=relevant&minScore=70",
  { headers: { "Authorization": "Bearer rk_your_key" } }
).then(r => r.json());

Approve all draft replies for a task

javascript
let cursor = null;

do {
  const url = new URL("https://replymer.ai/api/v1/replies");
  url.searchParams.set("taskId", "task_abc123");
  url.searchParams.set("status", "draft");
  if (cursor) url.searchParams.set("cursor", cursor);

  const { items, hasMore, nextCursor } = await fetch(url, {
    headers: { "Authorization": "Bearer rk_your_key" },
  }).then(r => r.json());

  for (const reply of items) {
    await fetch(`https://replymer.ai/api/v1/replies/${reply.id}`, {
      method: "PATCH",
      headers: {
        "Authorization": "Bearer rk_your_key",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({ action: "approve" }),
    });
  }

  cursor = hasMore ? nextCursor : null;
} while (cursor);

Interactive API Explorer

Try API endpoints directly from your browser using the Swagger UI below.

ℹ️
Authorize with your API key using the "Authorize" button in the top-right of the explorer. Use the format: Bearer rk_your_key
© 2026 Replymer