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.
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/v1All 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.
| ID | Platform |
|---|---|
| youtube | YouTube |
| tiktok | TikTok |
| X (Twitter) | |
| github | GitHub |
| npm | npm |
| twitch | Twitch |
| threads | Threads |
| bluesky | Bluesky |
| snapchat | Snapchat |
| kick | Kick |
| substack | Substack |
| linktree | Linktree |
| roblox | Roblox |
| telegram | Telegram |
Endpoints
/api/v1/checkFull 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.
{
"name": "coolbrand",
"platforms": ["github", "twitter", "youtube"],
"domains": ["com", "io", "dev"],
"brandScore": true,
"trademark": true
}{
"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"
}
}/api/v1/check/domainsDomain 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.
{
"name": "coolbrand",
"tlds": ["com", "io", "dev"],
"details": true
}/api/v1/check/socialSocial Media Check
Check username availability across specific social platforms with parallel processing.
{
"name": "coolbrand",
"platforms": ["github", "twitter", "youtube"]
}/api/v1/brand-scoreBrand 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.
{
"name": "coolbrand"
}/api/v1/trademarkTrademark Check
Screen for USPTO trademark conflicts with risk assessment and legal guidance.
{
"name": "coolbrand",
"includeVariations": true
}/api/v1/alternativesSmart Alternatives
Generate professional brand name variations using prefixes, suffixes, and creative patterns.
{
"name": "coolbrand",
"count": 8
}/api/v1/generateAI Name Generation
Generate creative brand names from a business description using AI.
{
"description": "productivity tool for remote teams",
"count": 10,
"style": "modern"
}/api/v1/usageUsage 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).
/api/v1/watchCreate 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.
{
"username": "coolbrand",
"platforms": ["github", "twitter", "instagram"]
}{
"success": true,
"data": {
"created": [
{ "id": "clx...", "username": "coolbrand", "platform": "github", "status": "watching", "createdAt": "..." }
],
"skipped": ["twitter"],
"skippedInvalid": []
},
"meta": { "slots": { "used": 4, "limit": 20 } }
}/api/v1/watchList Watches
List all monitored handles with status, last check time, and slot usage.
/api/v1/watch/:idPause / Resume Watch
Pause or resume monitoring for a specific watch. status is either paused or watching.
{
"status": "paused"
}/api/v1/watch/:idRemove Watch
Stop monitoring and delete a watch. Frees up a slot.
/api/v1/notificationsList Notifications
Retrieve in-app notifications with pagination. Use ?unread=true to filter.
Query params: unread (bool), limit (max 100), offset
/api/v1/notifications/:idMark Notification Read
Mark a single notification as read.
/api/v1/notifications/read-allMark All Read
Mark all unread in-app notifications as read.
/api/v1/webhooksRegister Webhook
Create a webhook endpoint for alert delivery (https URLs on public hosts only). The signing secret is returned only on creation.
{
"url": "https://example.com/hook",
"events": ["handle_available", "handle_change"]
}{
"success": true,
"data": {
"id": "clx...",
"url": "https://example.com/hook",
"secret": "abc123...",
"events": ["handle_available", "handle_change"],
"active": true
}
}/api/v1/webhooksList Webhooks
List all registered webhook endpoints with status and failure info.
/api/v1/webhooks/:idUpdate Webhook
Update a webhook endpoint. Send active: true to re-enable one that was auto-disabled after repeated delivery failures.
{
"active": true
}/api/v1/webhooks/:idRemove Webhook
Delete a webhook endpoint.
Monitoring Limits
| Plan | Watch Slots | Check Frequency | Notifications | Webhooks | History |
|---|---|---|---|---|---|
| Free | 2 | 24h | In-app, Email | 0 | 7 days |
| Sniper | 10 | 1h | In-app, Email, Webhook | 1 | 30 days |
| Pro | 20 | 1h | All | 2 | 30 days |
| Business | 50 | 15min | All | 10 | 90 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.
{
"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.
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
| Plan | Requests / min | Requests / hr | Daily limit |
|---|---|---|---|
| Pro | 20 | 300 | 1,000 |
| Business | 40 | 800 | 3,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)
{
"namesniper": {
"type": "url",
"url": "https://namesniper.pro/mcp",
"headers": {
"Authorization": "Bearer ns_sk_..."
}
}
}Via npm
npx namesniper-mcpThe npm package reads your API key from the NAMESNIPER_API_KEY environment variable.
Available MCP Tools (server v1.1.1)
| Tool | Description |
|---|---|
| namesniper_check | All-in-one: domains + social + brand score + trademark |
| namesniper_check_domains | Domain availability across TLDs (optional registry details) |
| namesniper_check_social | Username availability across platforms |
| namesniper_generate | AI brand name generation (API key) |
| namesniper_trademark | USPTO trademark screening (API key) |
| namesniper_alternatives | Smart name variations |
| namesniper_watch | Start monitoring a handle (API key) |
| namesniper_watches | List monitored handles and status (API key) |
| namesniper_unwatch | Stop monitoring a handle (API key) |
| namesniper_telegram_price | Telegram username on-chain sale history |
| namesniper_roblox_rarity | Roblox username rarity rating |
Code Examples
curl -X POST https://namesniper.pro/api/v1/check \
-H "Authorization: Bearer ns_sk_..." \
-H "Content-Type: application/json" \
-d '{"name":"coolbrand"}'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();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.
| Status | Meaning | What to do |
|---|---|---|
| 400 Bad Request | Invalid request body - missing name, bad format, or invalid parameters. | |
| 401 Unauthorized | Missing or malformed Authorization header. | |
| 403 Forbidden | Invalid or revoked API key, or your plan does not include API access. | |
| 429 Too Many Requests | Rate limit or daily limit exceeded. Check the Retry-After header for when to retry. | |
| 500 Server Error | Something 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.