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.
{
"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.
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.
Authorization: Bearer rk_your_api_key_hereCreating an API key
- Open Settings → API Keys in the dashboard
- Click Create Key and give it a name
- Copy the key immediately — it is shown only once
- Store it securely (environment variable, secret manager)
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
{
"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
| Parameter | Type | Description |
|---|---|---|
lead_generation | goal | Finds people actively looking for solutions your product provides. High score = high purchase intent. |
competitor_tracking | goal | Monitors mentions of competitors. Surfaces frustrated customers and comparison threads. |
brand_monitoring | goal | Tracks direct mentions of your brand, product name, or URL across platforms. |
market_research | goal | Finds discussions about trends, pain points, and opinions in your niche. |
support_monitoring | goal | Identifies users reporting problems with your product so you can respond quickly. |
custom | goal | Define 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
| Parameter | Type | Description |
|---|---|---|
every_30m | frequency | Scan every 30 minutes |
hourly | frequency | Scan every hour |
every_3h | frequency | Scan every 3 hours |
every_6h | frequency | Scan every 6 hours |
every_12h | frequency | Scan every 12 hours |
daily | frequency | Scan 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.
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
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
Tone options
helpful— friendly, informative, problem-solvingcasual— conversational, approachableprofessional— formal, business-appropriatetechnical— precise, detailed, data-drivenempathetic— warm, understanding, supportivewitty— sharp, slightly humorouscustom— provide your own instructions viareplyInstructions
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
- BullMQ job is created for each platform at schedule time
- Platform search API is queried with task keywords
- Raw results are deduped against previously seen posts
- AI scores each new post (batched for efficiency)
- Relevant mentions are saved and appear in the feed
- 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
- Go to Settings → Accounts
- Click Add Account
- Enter the platform, username, and AdsPower profile ID
- Replymer will verify the account is accessible and set status to
active
Account health
active— ready to postrate_limited— platform is throttling; Replymer backs off automaticallysuspended— account banned; manual intervention requirederror— browser profile issue; check AdsPower
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
| Plan | Price | Replies/mo | Overage |
|---|---|---|---|
| Starter | $39/mo | 50 | $0.50/reply |
| Growth | $99/mo | 200 | $0.40/reply |
| Scale | $399/mo | 1,000 | $0.30/reply |
| Business | $999/mo | 3,000 | $0.25/reply |
| Enterprise | $1,999/mo | 10,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
https://replymer.ai/api/v1Response format
{ "data": { ... } }{
"items": [ ... ],
"hasMore": true,
"nextCursor": "2024-01-15T12:00:00.000Z"
}{
"error": {
"code": "NOT_FOUND",
"message": "Task not found"
}
}HTTP status codes
| Parameter | Type | Description |
|---|---|---|
200 | OK | Request succeeded |
201 | Created | Resource created successfully |
202 | Accepted | Async job queued (e.g. manual scan) |
400 | Bad Request | Invalid parameters or body |
401 | Unauthorized | Missing, invalid, or revoked API key |
403 | Forbidden | Key valid but access denied |
404 | Not Found | Resource does not exist |
500 | Server Error | Unexpected internal error |
Pagination
List endpoints use cursor-based pagination. Pass nextCursor from the previous response as the cursor query param in the next request.
GET /api/v1/mentions?limit=50&cursor=2024-01-15T12:00:00.000Z| Parameter | Type | Description |
|---|---|---|
limit | integer | Items per page. Default: 50. Max: 100. |
cursor | ISO 8601 | Cursor from the previous page's nextCursor field. |
hasMore | boolean | Response field — true if more pages exist. |
nextCursor | string | null | Response field — pass as cursor in the next request. |
API: Workspace
Returns workspace info, reply usage, overage balance, and task counts.
curl https://replymer.ai/api/v1/workspace \
-H "Authorization: Bearer rk_your_key"{
"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
List all tasks. Returns non-removed tasks by default. Filter with ?status=paused.
| Parameter | Type | Description |
|---|---|---|
status | active | paused | removed | Filter by task status. Defaults to all non-removed. |
curl "https://replymer.ai/api/v1/tasks?status=active" \
-H "Authorization: Bearer rk_your_key"Create a new task.
| Parameter | Type | Description |
|---|---|---|
namerequired | string | Task name |
goalrequired | string | lead_generation | competitor_tracking | brand_monitoring | market_research | support_monitoring | custom |
platforms | string[] | Platforms to monitor: twitter, reddit. Default: ["twitter", "reddit"] |
keywords | string[] | Search keywords for the platforms |
negativeKeywords | string[] | Keywords that exclude a post from results |
scheduleFrequency | string | every_30m | hourly | every_3h | every_6h | every_12h | daily. Default: hourly |
scheduleTimezone | string | IANA timezone for active hours. Default: UTC |
activeHoursStart | integer 0–23 | Start of active scanning window (hour) |
activeHoursEnd | integer 0–23 | End of active scanning window (hour) |
relevanceThreshold | integer 0–100 | Minimum score to show in feed. Default: 60 |
replyTone | string | helpful | casual | professional | technical | empathetic | witty | custom. Default: helpful |
replyLanguage | string | en | es | fr | de | pt | ja | ko | zh | ar | hi | auto. Default: en |
replyInstructions | string | Custom system prompt for reply generation (use with tone: custom) |
autoReply | boolean | Automatically publish replies without manual approval. Default: false |
autoReplyAccountId | string | Managed account ID to use for auto-publishing |
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 a single task including mention and scan counts.
Update task settings. Send only the fields you want to change.
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" }'Soft-delete a task (sets status: “removed”). Data is preserved and queryable with ?status=removed.
API: Mentions
List mentions with filtering and cursor-based pagination.
| Parameter | Type | Description |
|---|---|---|
taskId | string | Filter to a specific task |
status | string | relevant | irrelevant | replied | skipped | queued | new |
platform | string | twitter | reddit |
minScore | integer | Minimum relevance score (0–100) |
maxScore | integer | Maximum relevance score (0–100) |
limit | integer | Items per page. Default: 50, max: 100. |
cursor | string | Pagination cursor |
curl "https://replymer.ai/api/v1/mentions?taskId=task_abc&minScore=80&platform=reddit" \
-H "Authorization: Bearer rk_your_key"Get a single mention with its replies.
Update a mention's status. Valid values: relevant, irrelevant, skipped, queued.
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
List reply drafts with filtering and pagination.
| Parameter | Type | Description |
|---|---|---|
taskId | string | Filter to a specific task |
status | string | draft | approved | publishing | published | failed | rejected |
limit | integer | Default: 50, max: 100 |
cursor | string | Pagination cursor |
curl "https://replymer.ai/api/v1/replies?status=draft" \
-H "Authorization: Bearer rk_your_key"Get a single reply with its mention context.
Approve, reject, or edit a reply draft.
| Parameter | Type | Description |
|---|---|---|
actionrequired | string | approve | reject | edit |
content | string | New reply text (required when action = edit) |
| Action | Effect |
|---|---|
approve | Sets status to approved, queues reply for publishing |
reject | Sets status to rejected, returns mention to relevant |
edit | Updates content, resets status to draft |
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" }'# 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
Trigger a manual scan for a task. Returns 202 Accepted immediately — scanning happens asynchronously.
| Parameter | Type | Description |
|---|---|---|
taskIdrequired | string | ID of the task to scan |
curl -X POST https://replymer.ai/api/v1/scan \
-H "Authorization: Bearer rk_your_key" \
-H "Content-Type: application/json" \
-d '{ "taskId": "task_abc123" }'{
"data": {
"taskId": "task_abc123",
"jobs": [
{ "platform": "twitter", "jobId": "scan-task_abc123-twitter-1705312800000" },
{ "platform": "reddit", "jobId": "scan-task_abc123-reddit-1705312800000" }
]
}
}List recent scan executions.
| Parameter | Type | Description |
|---|---|---|
taskId | string | Filter to a specific task |
platform | string | twitter | reddit |
limit | integer | Default: 20, max: 100 |
cursor | string | Pagination cursor |
API: Key Management
Dashboard API — requires session auth, not API key auth
List all active API keys for the workspace. Returns only the prefix — the full key is never stored or returned after creation.
Create a new API key. The full key is returned exactly once.
| Parameter | Type | Description |
|---|---|---|
namerequired | string | Display name |
expiresAt | ISO 8601 | Optional expiry date. Default: never expires. |
{
"id": "key_abc",
"name": "My automation",
"keyPrefix": "rk_a1b2c3",
"key": "rk_a1b2c3d4e5f6...",
"createdAt": "2024-01-15T09:00:00.000Z"
}Revoke an API key immediately. All subsequent requests with that key return 401.
Common patterns
Poll for new mentions after a manual scan
// 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
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.
Bearer rk_your_key