API Documentation

Integrate NameSniper into your apps, agents, and workflows

Authentication

Every request authenticates with an API key. Pay-per-call access for agents (x402) is coming soon.

API Key

Pass your key in the Authorization header. API access requires a Pro ($9.99/mo) or Business ($24.99/mo)plan.

Header
Authorization: Bearer ns_sk_...

Generate and manage keys in your Dashboard → API Keys.

Keys stop validating if the plan drops below Pro, or if the account holds more keys than the new plan allows (the newest keep working). They stay listed and resume on upgrade, so nothing needs regenerating.

Base URL

https://namesniper.pro/api/v1

All endpoint paths below are relative to this base URL.

Platform IDs

Every platforms array takes these lowercase ids (note twitter for X). Unknown ids return 400 with the valid list; an empty or omitted list checks the standard grid, and Telegram must be requested explicitly.

IDPlatform
youtubeYouTube
tiktokTikTok
instagramInstagram
twitterX (Twitter)
githubGitHub
npmnpm
twitchTwitch
threadsThreads
blueskyBluesky
pinterestPinterest
snapchatSnapchat
kickKick
substackSubstack
linktreeLinktree
robloxRoblox
telegramTelegram

Endpoints

POST/api/v1/check

Full Check (Flagship)

The all-in-one endpoint. Checks domains, social media, brand score, and trademark in a single call. Every field except name is optional.

Request body
{
  "name": "coolbrand",
  "platforms": ["github", "twitter", "youtube"],
  "domains": ["com", "io", "dev"],
  "brandScore": true,
  "trademark": true
}
Response
{
  "success": true,
  "data": {
    "name": "coolbrand",
    "domains": {
      "results": [ ... ],
      "summary": { "available": 15, "taken": 4 }
    },
    "social": {
      "results": [ ... ],
      "summary": { "available": 10, "taken": 4 }
    },
    "brandScore": { "overall": 82, "band": "wide-open", "provisional": false, ... },
    "trademark": { "summary": { "overallRisk": "low", ... }, ... }
  },
  "meta": {
    "plan": "pro",
    "duration": 3200,
    "timestamp": "2026-02-11T12:00:00Z"
  }
}
POST/api/v1/check/domains

Domain Check

Check domain availability across specific TLDs using the 3-tier verification system. Set details: true to attach a registration record to each taken TLD (registrar, registered/expires dates, status, drop stage) read from the registry - registrant identity is usually redacted.

Request body
{
  "name": "coolbrand",
  "tlds": ["com", "io", "dev"],
  "details": true
}
POST/api/v1/check/social

Social Media Check

Check username availability across specific social platforms with parallel processing.

Request body
{
  "name": "coolbrand",
  "platforms": ["github", "twitter", "youtube"]
}
POST/api/v1/brand-score

Brand Score

Score how ownable a brand name is (0-100) based on weighted availability across .com, premium domains, priority social handles, and USPTO trademark risk. Higher scores mean more channels are open to claim.

Request body
{
  "name": "coolbrand"
}
POST/api/v1/trademark

Trademark Check

Screen for USPTO trademark conflicts with risk assessment and legal guidance.

Request body
{
  "name": "coolbrand",
  "includeVariations": true
}
POST/api/v1/alternatives

Smart Alternatives

Generate professional brand name variations using prefixes, suffixes, and creative patterns.

Request body
{
  "name": "coolbrand",
  "count": 8
}
POST/api/v1/generate

AI Name Generation

Generate creative brand names from a business description using AI.

Request body
{
  "description": "productivity tool for remote teams",
  "count": 10,
  "style": "modern"
}
GET/api/v1/usage

Usage Stats

Returns your current plan, rate limits, and API usage statistics. No request body required.

Monitoring API

Watch taken usernames and get notified when they become available. Requires an API key (Pro or Business).

POST/api/v1/watch

Create Watch

Start monitoring a username across one or more platforms. Get notified when it becomes available. skipped lists pairs already being watched; skippedInvalid lists those that fail the platform's username rules.

Request body
{
  "username": "coolbrand",
  "platforms": ["github", "twitter", "instagram"]
}
Response
{
  "success": true,
  "data": {
    "created": [
      { "id": "clx...", "username": "coolbrand", "platform": "github", "status": "watching", "createdAt": "..." }
    ],
    "skipped": ["twitter"],
    "skippedInvalid": []
  },
  "meta": { "slots": { "used": 4, "limit": 20 } }
}
GET/api/v1/watch

List Watches

List all monitored handles with status, last check time, and slot usage.

PATCH/api/v1/watch/:id

Pause / Resume Watch

Pause or resume monitoring for a specific watch. status is either paused or watching.

Request body
{
  "status": "paused"
}
DELETE/api/v1/watch/:id

Remove Watch

Stop monitoring and delete a watch. Frees up a slot.

GET/api/v1/notifications

List Notifications

Retrieve in-app notifications with pagination. Use ?unread=true to filter.

Query params: unread (bool), limit (max 100), offset

PATCH/api/v1/notifications/:id

Mark Notification Read

Mark a single notification as read.

POST/api/v1/notifications/read-all

Mark All Read

Mark all unread in-app notifications as read.

POST/api/v1/webhooks

Register Webhook

Create a webhook endpoint for alert delivery (https URLs on public hosts only). The signing secret is returned only on creation.

Request body
{
  "url": "https://example.com/hook",
  "events": ["handle_available", "handle_change"]
}
Response
{
  "success": true,
  "data": {
    "id": "clx...",
    "url": "https://example.com/hook",
    "secret": "abc123...",
    "events": ["handle_available", "handle_change"],
    "active": true
  }
}
GET/api/v1/webhooks

List Webhooks

List all registered webhook endpoints with status and failure info.

PATCH/api/v1/webhooks/:id

Update Webhook

Update a webhook endpoint. Send active: true to re-enable one that was auto-disabled after repeated delivery failures.

Request body
{
  "active": true
}
DELETE/api/v1/webhooks/:id

Remove Webhook

Delete a webhook endpoint.

Monitoring Limits

PlanWatch SlotsCheck FrequencyNotificationsWebhooksHistory
Free224hIn-app, Email07 days
Sniper101hIn-app, Email, Webhook130 days
Pro201hAll230 days
Business5015minAll1090 days

Every supported platform is monitorable. Instagram, TikTok, X and Threads watching uses verified sources (Pro and Business).

Webhook Payload

When a monitored handle changes status, webhooks receive a signed POST request. The event is handle_available or handle_change.

Payload
{
  "event": "handle_available",
  "timestamp": "2026-02-12T10:30:00Z",
  "data": {
    "watchId": "clx...",
    "username": "coolbrand",
    "platform": "instagram",
    "platformName": "Instagram",
    "oldStatus": "taken",
    "newStatus": "available",
    "profileUrl": "https://www.instagram.com/coolbrand"
  }
}

Each delivery carries an X-NameSniper-Event header with the event name and an X-NameSniper-Signature header with an HMAC-SHA256 signature of the raw body using your webhook secret. Verify this to ensure authenticity.

Discord and Slack incoming-webhook URLs are detected automatically and receive a native message (embed / Block Kit) instead of this envelope, so a pasted Discord or Slack webhook just works.

Verification (Node.js)
const crypto = require('crypto');

function verifySignature(body, secret, signature) {
  const expected = 'sha256=' +
    crypto.createHmac('sha256', secret).update(body).digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(expected), Buffer.from(signature)
  );
}

Webhooks are auto-disabled after 10 consecutive delivery failures. Re-enable from the dashboard or via PATCH /api/v1/webhooks/:id with {"active": true}.

Rate Limits

PlanRequests / minRequests / hrDaily limit
Pro203001,000
Business408003,000

Limits are per account, not per key: every key on the account draws on the same budget. They are counted per edge location, so treat the numbers as approximate rather than exact ceilings.

Every successful response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset for the per-minute window (Reset is a Unix timestamp in seconds). When a limit is exceeded the API returns 429 with a Retry-After header giving the seconds to wait: the remainder of the window for a per-minute or per-hour limit, or the time to the 00:00 UTC rollover for the daily limit.

High-accuracy escalations (verified Instagram/TikTok/X data) carry a fair-use allowance: 2,000/month on Pro, 10,000/month on Business. Beyond the allowance, checks continue at standard accuracy - they never fail.

MCP Server

Connect NameSniper to any MCP-compatible AI agent or IDE with a single config block.

Remote MCP (recommended)

mcp.json
{
  "namesniper": {
    "type": "url",
    "url": "https://namesniper.pro/mcp",
    "headers": {
      "Authorization": "Bearer ns_sk_..."
    }
  }
}

Via npm

Terminal
npx namesniper-mcp

The npm package reads your API key from the NAMESNIPER_API_KEY environment variable.

Available MCP Tools (server v1.1.1)

ToolDescription
namesniper_checkAll-in-one: domains + social + brand score + trademark
namesniper_check_domainsDomain availability across TLDs (optional registry details)
namesniper_check_socialUsername availability across platforms
namesniper_generateAI brand name generation (API key)
namesniper_trademarkUSPTO trademark screening (API key)
namesniper_alternativesSmart name variations
namesniper_watchStart monitoring a handle (API key)
namesniper_watchesList monitored handles and status (API key)
namesniper_unwatchStop monitoring a handle (API key)
namesniper_telegram_priceTelegram username on-chain sale history
namesniper_roblox_rarityRoblox username rarity rating

Code Examples

curl
curl -X POST https://namesniper.pro/api/v1/check \
  -H "Authorization: Bearer ns_sk_..." \
  -H "Content-Type: application/json" \
  -d '{"name":"coolbrand"}'
JavaScript (fetch)
const res = await fetch('https://namesniper.pro/api/v1/check', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ns_sk_...',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ name: 'coolbrand' }),
});
const data = await res.json();
Python (requests)
import requests

r = requests.post(
    'https://namesniper.pro/api/v1/check',
    headers={'Authorization': 'Bearer ns_sk_...'},
    json={'name': 'coolbrand'},
)
data = r.json()

Error Handling

All errors follow a consistent JSON shape:

{
  "success": false,
  "error": "Rate limit exceeded"
}

error is always a string. Some responses add an optional machine-readable code field, and 429s include a Retry-After header.

StatusMeaningWhat to do
400 Bad RequestInvalid request body - missing name, bad format, or invalid parameters.
401 UnauthorizedMissing or malformed Authorization header.
403 ForbiddenInvalid or revoked API key, or your plan does not include API access.
429 Too Many RequestsRate limit or daily limit exceeded. Check the Retry-After header for when to retry.
500 Server ErrorSomething went wrong on our end. Retry after a short delay or contact support.

Ready to integrate?

Grab your API key and start checking brand names programmatically in minutes.