Namescope
Try free

REST API

Run scans from your own code. The API is available on the Pro plan and above, authenticates with a bearer key, and is paid for with credits.

Last updated: 4 September 2026

Authentication

Create a key under Settings → API keys. The plaintext key is shown once and cannot be recovered afterwards; only its prefix is stored in a readable form. Send it as a bearer token on every request.

curl https://api.namescope.dev/v1/usage \
  -H "Authorization: Bearer ns_live_..."

Every key carries a set of scopes. A request that needs a scope the key does not have is refused with 403, so a key you hand to a read-only integration cannot start a paid scan.

ScopeGrants
scans:writePOST /v1/scans — starting a scan, which spends credits
scans:readGET /v1/scans, GET /v1/scans/{id}, GET /v1/usage
reference:readThe /v1/ref/* lookup endpoints

Credits and quota

Every scan is paid for with credits, whether you start it here or in the web app. A scan costs the sum of the modules it runs: 100 credits with all five default modules, and less when you leave one out. Your plan grants a credit allowance each month; unspent credits roll over.

The charge is written before any work is queued, so a scan that cannot be paid for never runs and never leaves a row behind. If queueing fails after the charge, the credits are refunded automatically.

  • Balance too low → 429 with a problem body explaining the shortfall
  • Plan without API access → 402 and an upgrade URL
  • Credit spending switched off for the workspace → 403

Starting a scan

POST /v1/scans queues a scan and answers 202 straight away. Scanning is asynchronous: the response carries a scanId, not the result.

curl -X POST https://api.namescope.dev/v1/scans \
  -H "Authorization: Bearer ns_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "tion studios",
    "regions": ["TR", "EM", "US"],
    "niceClasses": [9, 41],
    "tlds": ["com", "io"],
    "modules": ["trademark", "domain", "social"]
  }'
{ "scanId": "scn_...", "totalJobs": 12, "creditsSpent": 100, "balance": 1900 }
FieldRequiredMeaning
nameyesThe brand name to check, 2–64 characters
regionsnoTrademark offices to search. Defaults to your workspace default
niceClassesnoGoods/services classes 1–45. Narrows trademark hits to real conflicts
tldsnoDomain extensions, without the leading dot
modulesnotrademark, domain, social, dev, appstore
adaptersnoRestrict to specific source adapters by id
projectIdnoFile the scan under an existing project
options.alternativesnoAlso generate and light-scan alternative names
options.similarSearchnoFuzzy trademark query for near-miss marks (Pro and above)

Reading the result

Poll GET /v1/scans/{id} until status is completed or completed_partial. A typical scan finishes in under a minute; poll about once a second and widen the interval as you wait, so a long scan does not eat your rate limit.

curl https://api.namescope.dev/v1/scans/scn_... \
  -H "Authorization: Bearer ns_live_..."
statusMeans
queuedAccepted, no source contacted yet
runningSome checks are done; doneJobs / totalJobs shows progress
completedEvery check finished
completed_partialFinished, but at least one source could not be verified
failedThe scan could not be run

Each entry in checks is one source answering about one target, with its own verdict, the sourceUrl it was read from and the fetchedAt timestamp. The summary object appears once the scan finishes and carries the score, the risk band and the trademark tally.

verdictMeans
availableThe source says the name is free
takenIn use — a registered handle, a resolving domain
conflictA live trademark that overlaps the requested classes
riskyIn use in a way that may or may not block you
unknownThe source could not be verified
errorThe source failed; errorCode says how

Reference data

Four lookup endpoints describe what a scan request may contain. They need the reference:read scope and cost nothing.

EndpointReturns
GET /v1/ref/nice-classesThe 45 Nice classification classes
GET /v1/ref/regionsTrademark offices a scan can search
GET /v1/ref/tldsDomain extensions grouped by tier
GET /v1/ref/adaptersEvery source adapter, with its module

Errors and rate limits

Errors are RFC 9457 problem documents sent as application/problem+json. The type field identifies the failure, detail explains it, and some carry extras such as upgradeUrl.

{
  "type": "https://namescope.dev/errors/quota-exceeded",
  "title": "Quota exceeded",
  "status": 429,
  "detail": "Not enough credits (balance 0, need 100). Top up or switch off a module to continue."
}
StatusWhen
400The request body did not validate
401Key missing, unknown, revoked or expired
402The plan does not include the public API
403The key lacks a scope, or credit spending is off
404No such scan in this workspace
429Rate limit or credit balance exceeded

Rate limits are counted per key over a sliding minute and reported on every response, so you can back off before being refused.

x-ratelimit-limit: 60
x-ratelimit-remaining: 58
x-ratelimit-reset: 41

OpenAPI

The full machine-readable description is served at /v1/openapi.json. It needs no authentication, so you can generate a client from it before you have a key.