Namesight
Probar gratis

API REST

Ejecuta análisis desde tu propio código. La API está disponible a partir del plan Pro, se autentica con una clave bearer y se paga con créditos.

Última actualización: 6 de septiembre de 2026

Autenticación

Crea una clave en Ajustes → Claves de API. La clave en texto plano se muestra una sola vez y no puede recuperarse después; solo se guarda su prefijo en forma legible. Envíala como token bearer en cada petición.

curl https://api.namesight.app/v1/usage \
  -H "Authorization: Bearer ns_live_..."

Cada clave lleva un conjunto de ámbitos. Una petición que necesita un ámbito que la clave no tiene se rechaza con 403, de modo que una clave entregada a una integración de solo lectura no puede iniciar un análisis de pago.

ÁmbitoPermite
scans:writePOST /v1/scans — iniciar un análisis, lo que gasta créditos
scans:readGET /v1/scans, GET /v1/scans/{id}, GET /v1/usage
reference:readLos endpoints de consulta /v1/ref/*
reports:writePOST /v1/scans/{id}/shares — crear un enlace público de compartición
ideas:writePOST /v1/ideas — el generador de nombres
projects:readGET /v1/projects — listar proyectos para archivar un análisis
webhooks:manageLos endpoints /v1/webhooks

Créditos y cuota

Todos los análisis se pagan con créditos, los inicies aquí o en la aplicación web. Un análisis cuesta la suma de los módulos que ejecuta: 100 créditos con los cinco módulos por defecto y menos si dejas alguno fuera. Tu plan otorga créditos cada mes y los no usados se acumulan.

El cargo se registra antes de encolar cualquier trabajo, así que un análisis que no puede pagarse nunca se ejecuta ni deja ningún registro. Si el encolado falla después del cargo, los créditos se reembolsan automáticamente.

  • Saldo insuficiente → 429 con un cuerpo de problema que explica el faltante
  • Plan sin acceso a la API → 402 y una URL de mejora de plan
  • Gasto de créditos desactivado en el espacio de trabajo → 403

Iniciar un análisis

POST /v1/scans encola un análisis y responde 202 de inmediato. El análisis es asíncrono: la respuesta lleva un scanId, no el resultado.

curl -X POST https://api.namesight.app/v1/scans \
  -H "Authorization: Bearer ns_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "lumina labs",
    "regions": ["TR", "EM", "US"],
    "niceClasses": [9, 41],
    "tlds": ["com", "io"],
    "modules": ["trademark", "domain", "social"]
  }'
{ "scanId": "scn_...", "totalJobs": 12, "creditsSpent": 100, "balance": 1900 }
CampoObligatorioSignificado
nameEl nombre de marca a comprobar, de 2 a 64 caracteres
regionsnoOficinas de marcas donde buscar. Por defecto, la de tu espacio de trabajo
niceClassesnoClases de productos/servicios 1–45. Reduce los resultados de marcas a conflictos reales
tldsnoExtensiones de dominio, sin el punto inicial
modulesnotrademark, domain, social, dev, appstore
adaptersnoLimitar a adaptadores de fuente concretos por id
projectIdnoArchivar el análisis dentro de un proyecto existente
options.similarSearchnoBúsqueda difusa de marcas parecidas (Pro y superiores)

Leer el resultado

Consulta GET /v1/scans/{id} hasta que status sea completed o completed_partial. Un análisis típico termina en menos de un minuto; consulta aproximadamente una vez por segundo y amplía el intervalo mientras esperas, para que un análisis largo no consuma tu límite de peticiones.

curl https://api.namesight.app/v1/scans/scn_... \
  -H "Authorization: Bearer ns_live_..."
statusSignifica
queuedAceptado, aún no se ha contactado con ninguna fuente
runningAlgunas comprobaciones están hechas; doneJobs / totalJobs muestra el progreso
completedTodas las comprobaciones han terminado
completed_partialTerminado, pero al menos una fuente no pudo verificarse
failedEl análisis no pudo ejecutarse

Cada entrada de checks es una fuente respondiendo sobre un objetivo, con su propio veredicto, el sourceUrl del que se leyó y la marca de tiempo fetchedAt. El objeto summary aparece cuando el análisis termina y contiene la puntuación, la banda de riesgo y el recuento de marcas.

verdictSignifica
availableLa fuente indica que el nombre está libre
takenEn uso — un identificador registrado, un dominio que resuelve
conflictUna marca vigente que se solapa con las clases solicitadas
riskyEn uso de una forma que puede o no bloquearte
unknownLa fuente no pudo verificarse
errorLa fuente falló; errorCode indica cómo

Datos de referencia

Cuatro endpoints de consulta describen lo que puede contener una petición de análisis. Necesitan el ámbito reference:read y no cuestan nada.

EndpointDevuelve
GET /v1/ref/nice-classesLas 45 clases de la clasificación de Niza
GET /v1/ref/regionsOficinas de marcas en las que puede buscar un análisis
GET /v1/ref/tldsExtensiones de dominio agrupadas por nivel
GET /v1/ref/adaptersTodos los adaptadores de fuente, con su módulo

Errores y límites de peticiones

Los errores son documentos de problema RFC 9457 enviados como application/problem+json. El campo type identifica el fallo, detail lo explica y algunos llevan datos adicionales como upgradeUrl.

{
  "type": "https://namesight.app/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."
}
EstadoCuándo
400El cuerpo de la petición no pasó la validación
401Clave ausente, desconocida, revocada o caducada
402El plan no incluye la API pública
403A la clave le falta un ámbito, o el gasto de créditos está desactivado
404No existe ese análisis en este espacio de trabajo
403 (key-cap-exceeded)Esta clave alcanzó su tope mensual de créditos; súbelo en Ajustes → Claves API
409Se reutilizó un Idempotency-Key con un cuerpo distinto
429Se superó el límite de peticiones o el saldo de créditos

Los límites de peticiones se cuentan por clave sobre un minuto deslizante y se informan en cada respuesta, de modo que puedas reducir el ritmo antes de que te rechacen.

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

Actuar sobre un análisis, y el resto

Además de iniciar y leer un análisis, una clave puede repetirlo, reintentar las fuentes que no respondieron, borrarlo, compartir su informe, listar los proyectos del espacio y generar ideas de nombres. Cada acción exige el scope indicado.

Método y rutaScopeQué hace
POST /v1/scans/{id}/rescanscans:writeInicia un análisis nuevo con el mismo nombre y ajustes. Se cobra como uno nuevo; el original se conserva.
POST /v1/scans/{id}/retry-unknownsscans:writeVuelve a encolar solo las comprobaciones que acabaron unknown o con error, saltando la caché. Gratis.
DELETE /v1/scans/{id}scans:writeElimina el análisis, sus comprobaciones y sus enlaces. No se devuelven créditos.
POST /v1/scans/{id}/sharesreports:writeDevuelve una URL pública del informe. Cualquiera que la tenga puede leerlo; el plan limita su duración.
GET /v1/projectsprojects:readLos proyectos del espacio, con sus clases, oficinas y TLD por defecto.
POST /v1/ideasideas:writeEjecuta el generador de nombres a partir de un brief, un nombre semilla o temas. Gratis.
GET /v1/usage/eventsscans:readCada llamada a la API del espacio en los últimos días, fallos incluidos.

Reintentar sin riesgo: envía una cabecera Idempotency-Key (cualquier cadena única) con POST /v1/scans o un rescan. Un reintento con la misma clave en 24 horas repite la primera respuesta — con Idempotent-Replayed: true — en vez de iniciar y cobrar un segundo análisis. La misma clave con otro cuerpo se rechaza con 409.

curl -X POST https://api.namesight.app/v1/scans \
  -H "Authorization: Bearer ns_live_..." \
  -H "Idempotency-Key: 4f7c2c1e-order-1187" \
  -H "Content-Type: application/json" \
  -d '{"name":"Lumina Labs","modules":["trademark","domain"]}'

Esperar sin sondear: GET /v1/scans/{id}?wait=60000 mantiene la petición hasta que el análisis termina o vence la espera (máximo 60 segundos), y responde con el análisis tal como está. Una petición, una ranura del límite, sin bucle.

Paginación: GET /v1/scans responde con items y nextCursor. Devuelve nextCursor como cursor para la página siguiente; null indica la última. status filtra por uno o más estados separados por comas.

Webhooks

En lugar de sondear, registra un endpoint https y recibe un POST firmado cuando termine un análisis. Los endpoints se gestionan en Ajustes → API o mediante /v1/webhooks con el scope webhooks:manage; un espacio puede tener diez. El secreto de firma se muestra una sola vez, al crearlo y al rotarlo.

EventoCuándodata contiene
scan.completedUn análisis llegó a completed, completed_partial o failedscanId, status, kind, rawName, queryName, projectId, score, band, unknownCount, trademarkLiveConflicts, totalJobs, doneJobs, createdAt, completedAt, url

Cada entrega lleva cuatro cabeceras: x-namesight-event, x-namesight-delivery (el mismo id en cada reintento, para deduplicar), x-namesight-timestamp (segundos unix) y x-namesight-signature. La firma es v1= seguido del HMAC-SHA256 en hexadecimal de "<timestamp>.<cuerpo crudo>" con tu secreto. Verifícala contra el cuerpo crudo de la petición y rechaza marcas de tiempo de más de cinco minutos.

import { createHmac, timingSafeEqual } from "node:crypto";

// Express-style handler; keep the RAW body — a re-serialised JSON will not match.
app.post("/hooks/namesight", express.raw({ type: "*/*" }), (req, res) => {
  const ts = req.header("x-namesight-timestamp");
  const sig = req.header("x-namesight-signature");            // "v1=<hex>"
  const body = req.body.toString("utf8");
  const expected = "v1=" + createHmac("sha256", process.env.NAMESIGHT_WEBHOOK_SECRET)
    .update(`${ts}.${body}`).digest("hex");
  const fresh = Math.abs(Date.now() / 1000 - Number(ts)) < 300;
  if (!fresh || expected.length !== sig.length || !timingSafeEqual(Buffer.from(expected), Buffer.from(sig))) {
    return res.status(401).end();
  }
  const event = JSON.parse(body);                              // { id, event, createdAt, test, data }
  res.status(202).end();                                       // ack first, work later
  if (!event.test) handleScanCompleted(event.data);            // data.scanId, data.status, data.score, data.url
});

Responde con cualquier 2xx en diez segundos y haz el trabajo después. Cualquier otra respuesta se reintenta cuatro veces más: a los 30 segundos, 2, 10 y 60 minutos. Diez entregas seguidas que fallan en todos sus intentos desactivan el endpoint; reactivarlo pone el contador a cero. El botón de prueba envía un scan.completed sintético con test: true.

OpenAPI

La descripción completa legible por máquina se sirve en /v1/openapi.json. No requiere autenticación, así que puedes generar un cliente a partir de ella antes incluso de tener una clave.