API Reference
NameCheq Brand Availability API · v1
The NameCheq API lets you check whether a brand name or username is available across 15 major social platforms in a single request — from your own code, CI pipeline, or internal tool. It's designed to be simple: one POST, one JSON response.
15 platforms
Checked in parallel in a single request
Secure
Bearer key auth. Keys hashed at rest. TLS only.
100 req/day
Per key. Resets at midnight UTC.
Authentication
All requests are authenticated with an API key passed as a Bearer token in theAuthorizationheader. Keys start with nc_live_.
Header
Authorization: Bearer nc_live_YOUR_KEYKey Security
- Your key is shown once when generated — save it immediately.
- Store it in an environment variable, never in your source code or version control.
- Revoke and regenerate keys from your Profile → API tab at any time.
- Keys are stored as SHA-256 hashes — we cannot recover a lost key.
Quickstart
Get your API key from Profile → API tab, then make your first request:
curl -X POST \
https://oxmpzqoioetwxdpwiwmx.supabase.co/functions/v1/api-query \
-H "Authorization: Bearer nc_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "acme"}'Replace nc_live_YOUR_KEY with your actual key. The response arrives in ~1–3 seconds as platform checks run in parallel.
https://oxmpzqoioetwxdpwiwmx.supabase.co/functions/v1/api-queryChecks brand name availability across up to 15 platforms. Results are fetched in parallel — typical response time is 1–3 seconds.
Request Body
Content-Type: application/json
namestringrequiredThe brand name or username to check. Alphanumeric, dots, hyphens, and underscores only. Casing is ignored — the value is lowercased before checking.
acmemy-brandbrand.coplatformsstring[]Optional array of platforms to check. If omitted, all 15 platforms are checked. Invalid platform names are silently ignored. Must include at least one valid platform.
Response Schema
On success (200), the API returns a JSON object:
{
"name": "acme",
"results": [
{ "platform": "Instagram", "status": "taken", "handle": "@acme" },
{ "platform": "X / Twitter", "status": "available", "handle": "@acme" },
{ "platform": "GitHub", "status": "taken", "handle": "@acme" },
{ "platform": "TikTok", "status": "available", "handle": "@acme" },
{ "platform": "YouTube", "status": "taken", "handle": "@acme" }
],
"meta": {
"checked": 5,
"elapsed_ms": 1843,
"requests_remaining": 97
}
}namestringThe normalised name that was checked (lowercased, sanitised).
resultsobject[]One entry per platform checked, in the order returned.
results[].platformstring — Platform name (e.g. "Instagram")results[].statusstring — One of:unknown means the check timed out or the platform returned an ambiguous response. Retry the request, or check manually.
results[].handlestring — The handle string for that platform (e.g. "@acme" or "acme.substack.com")metaobjectRequest metadata.
meta.checkedint — Number of platforms checkedmeta.elapsed_msint — Total check duration in millisecondsmeta.requests_remainingint — Remaining requests today for this keyThe response headers also include X-RateLimit-Limit and X-RateLimit-Remaining.
Rate Limits
Daily limit
100 req / day
Per API key
Reset
Midnight UTC
Every 24 hours
Concurrency
Unlimited
Parallel calls OK
When the limit is reached the API returns 429. Monitor meta.requests_remaining in each response to track usage. Generating multiple API keys spreads your limit across keys independently.
Error Codes
| Status | Error | Description |
|---|---|---|
| 400 | name is required | Missing or empty name field in request body |
| 400 | Invalid name | Name contains no valid characters after sanitisation |
| 400 | No valid platforms | platforms array was provided but contains no recognised names |
| 401 | Invalid API key format | Key doesn't start with nc_live_ |
| 401 | Invalid or revoked API key | Key not found or has been revoked |
| 403 | API access requires a Business plan | Key is valid but owner's subscription is not active Business |
| 405 | Method not allowed | Only POST is accepted |
| 429 | Daily rate limit reached | 100 req/day limit hit. Resets at midnight UTC. |
| 500 | Internal error | Server-side failure. Retry after a short wait. |
Rate limit error response example:
{
"error": "Daily rate limit reached (100 requests/day). Resets at midnight UTC.",
"limit": 100,
"used": 100
}Auth error response example:
{
"error": "Invalid or revoked API key"
}curl Examples
Check all 15 platforms
curl -X POST \
https://oxmpzqoioetwxdpwiwmx.supabase.co/functions/v1/api-query \
-H "Authorization: Bearer nc_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "acme"}'Check specific platforms only
curl -X POST \
https://oxmpzqoioetwxdpwiwmx.supabase.co/functions/v1/api-query \
-H "Authorization: Bearer nc_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "acme",
"platforms": ["Instagram", "GitHub", "X / Twitter"]
}'JavaScript / TypeScript
const response = await fetch(
'https://oxmpzqoioetwxdpwiwmx.supabase.co/functions/v1/api-query',
{
method: 'POST',
headers: {
'Authorization': 'Bearer nc_live_YOUR_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({ name: 'acme' }),
}
);
const data = await response.json();
// data.results → array of { platform, status, handle }
const available = data.results
.filter(r => r.status === 'available')
.map(r => r.platform);
console.log('Available on:', available);Python
Install requests with pip install requests
import requests
response = requests.post(
'https://oxmpzqoioetwxdpwiwmx.supabase.co/functions/v1/api-query',
headers={
'Authorization': 'Bearer nc_live_YOUR_KEY',
'Content-Type': 'application/json',
},
json={'name': 'acme'},
)
data = response.json()
for result in data['results']:
icon = '✅' if result['status'] == 'available' else '❌'
print(f"{icon} {result['platform']}: {result['handle']}")Supported Platforms
Use these exact strings in the platforms array. Values are case-sensitive.
InstagramX / TwitterTikTokYouTubeLinkedInFacebookGitHubSnapchatPinterestThreadsTelegramTwitchMediumSubstackProduct HuntReady to integrate?
Get a Business plan to unlock API access. Generate up to 5 keys, each with 100 requests/day.