Documentación

API de Protector

Comprueba cuentas de Discord, enlaces, mensajes e imágenes con el motor de detección que protege miles de servidores. Una clave, JSON sencillo, límites claros.

9 secciones Actualizado el 16 oct 2026

Presentación

La API de Protector es una API REST que responde en JSON. Todos los puntos de acceso parten de la misma dirección:

https://protector-bot.com/api/v1

La API la sirve únicamente protector-bot.com. Nunca da acceso a las máquinas que ejecutan el bot.

Obtener una clave

  1. Inicia sesión con Discord en la página para desarrolladores.
  2. Pulsa Crear una clave y ponle un nombre (por ejemplo, el de tu bot).
  3. Copia la clave enseguida: empieza por pk_ y solo se muestra una vez. Protector solo guarda una huella.

¿Has perdido una clave o crees que se ha filtrado? Revócala en la misma página y crea otra. Puedes tener hasta 5 claves activas.

El Pase API sube todos los límites y desbloquea el análisis de imágenes. Se compra en la tienda de Protector en Discord, por 30 días, y va ligado a tu cuenta de Discord: tus claves pasan automáticamente a los límites del Pase API. Cada nueva compra añade 30 días; recibes un aviso por mensaje privado 3 días antes del final. Sin pase, tus claves siguen funcionando con el plan gratuito.

Autenticación

Envía tu clave en la cabecera Authorization de cada petición:

Authorization: Bearer pk_tu_clave

Mantén la clave en secreto: nunca la pongas en un repositorio público ni en código que se ejecute en el navegador de un visitante.

Planes y límites

GratisPase API
Peticiones por minuto (por clave)10120
Peticiones al mes (por cuenta)500100.000
Imágenes al mesninguna3.000
Lista negra, enlaces, textossísí

Los contadores mensuales se reinician el día 1 de cada mes (UTC). Leer el estado de una imagen (GET /image/{id}) y GET /me no cuentan para la cuota mensual, solo para el límite por minuto.

Cada respuesta lleva estas cabeceras:

X-RateLimit-LimitPeticiones permitidas por minuto para esta clave.
X-RateLimit-RemainingPeticiones restantes en el minuto actual.
X-RateLimit-ResetFin de la ventana de un minuto (marca de tiempo Unix).
X-Quota-Limit / X-Quota-RemainingCuota mensual de tu cuenta y lo que queda.
Retry-AfterEn un 429, segundos que hay que esperar.

Errores

Un error devuelve un JSON con un código error estable y un message legible (en inglés):

{ "error": "rate_limited", "message": "Too many requests for this key. Wait before retrying.", "retry_after": 23 }
EstadoCódigoSignificado
400invalid_requestParámetro ausente o mal formado (ver detail).
401unauthorizedClave ausente, incorrecta o revocada.
403plan_requiredEste punto de acceso necesita el Pase API.
404not_foundPunto de acceso o imagen desconocidos.
405method_not_allowedMétodo HTTP incorrecto.
413payload_too_largeCuerpo demasiado grande (JSON 64 KB, imagen 8 MB).
415unsupported_media_typeContent-Type incorrecto.
429rate_limited / quota_exceededLímite por minuto o cuota mensual alcanzados.
503unavailableLas reglas de detección se están cargando. Vuelve a intentarlo un poco más tarde.

Puntos de acceso

GET /me

Tu plan, sus límites y tu consumo del mes.

curl https://protector-bot.com/api/v1/me \
  -H "Authorization: Bearer pk_tu_clave"
{
  "plan": "pass",
  "limits": { "per_minute": 120, "per_month": 100000, "images_per_month": 3000 },
  "usage": { "month": "2026-10", "requests": 1834, "images": 41 },
  "key": { "name": "Mi bot", "created_at": 1792150000 }
}

GET /blacklist/{user_id}

Indica si una cuenta de Discord está en la lista negra de Protector (cuentas que participaron en raids, nukes o estafas, confirmadas por el equipo de Protector). La respuesta es solo true o false: ni motivo ni pruebas.

ParámetroTipoDescripción
user_idrutaID de usuario de Discord (17 a 20 cifras).
curl https://protector-bot.com/api/v1/blacklist/123456789012345678 \
  -H "Authorization: Bearer pk_tu_clave"
{ "user_id": "123456789012345678", "blacklisted": false }

Una persona en la lista puede impugnar la decisión en la página de impugnación. No uses esta respuesta como único motivo para sancionar a alguien.

Comprueba un enlace: dominios de estafa conocidos, dominios imitadores (letras cirílicas, punycode que se leen «discord» o «steam») y acortadores que llevan a una estafa (se sigue la primera redirección).

CampoTipoDescripción
urlcadenaDirección que comprobar, http(s), 2.000 caracteres como máximo. Sin esquema, se añade https://.
curl https://protector-bot.com/api/v1/link \
  -H "Authorization: Bearer pk_tu_clave" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://dlscordnitro.com/gift"}'
{
  "url": "https://dlscordnitro.com/gift",
  "host": "dlscordnitro.com",
  "dangerous": true,
  "reason": "known_scam_domain",
  "matched": "dlscordnitro.com",
  "final_host": null
}

reason vale known_scam_domain, lookalike_domain, shortener_to_scam o null. Se añade free_host: true cuando la página está en un alojamiento gratuito, donde abundan las páginas trampa: no es peligroso en sí, pero merece una mirada.

POST /text

Analiza un mensaje como lo hace Protector en Discord: palabras explícitas (incluso escritas con puntos, espacios o números, como p.0.r.n), falsos regalos de Nitro y cada enlace que contiene. El texto no se guarda.

CampoTipoDescripción
textcadenaEl mensaje, 4.000 caracteres como máximo (UTF-8).
curl https://protector-bot.com/api/v1/text \
  -H "Authorization: Bearer pk_tu_clave" \
  -H "Content-Type: application/json" \
  -d '{"text": "free nitro for everyone https://dlscordnitro.com/gift"}'
{
  "nsfw": { "flagged": false, "term": null },
  "scam": { "flagged": true, "reason": "known_scam_domain" },
  "links": [
    { "url": "https://dlscordnitro.com/gift", "host": "dlscordnitro.com", "dangerous": true,
      "reason": "known_scam_domain", "matched": "dlscordnitro.com", "final_host": null }
  ]
}

Se analizan hasta 20 enlaces por mensaje. scam.reason es el motivo del primer enlace peligroso, o scam_pattern para un falso regalo sin enlace conocido.

POST /image Pase API

Detecta imágenes explícitas con el modelo de imagen de Protector (en un GIF animado se comprueban varios fotogramas, y las imágenes muy alargadas, por partes). El análisis se hace en segundo plano: recibes un ID y luego lees el resultado.

Envía los bytes en bruto de la imagen como cuerpo, con el Content-Type correspondiente: image/png, image/jpeg, image/gif o image/webp. 8 MB como máximo.

curl https://protector-bot.com/api/v1/image \
  -H "Authorization: Bearer pk_tu_clave" \
  -H "Content-Type: image/png" \
  --data-binary @imagen.png
{ "id": "6f1c0e2a9b4d4c7e8a3f2b1c0d9e8f7a", "status": "queued",
  "poll": "https://protector-bot.com/api/v1/image/6f1c0e2a9b4d4c7e8a3f2b1c0d9e8f7a" }

GET /image/{id}

Lee el resultado. Vuelve a preguntar cada 1 o 2 segundos mientras status sea queued o processing; suele tardar unos segundos.

{
  "id": "6f1c0e2a9b4d4c7e8a3f2b1c0d9e8f7a",
  "status": "done",
  "created_at": 1792160000,
  "result": {
    "nsfw": false,
    "label": "neutral",
    "score": 0.9412,
    "scores": { "drawing": 0.031, "hentai": 0.0021, "neutral": 0.9412, "porn": 0.0154, "sexy": 0.0103 },
    "frames": 1
  }
}

status vale queued, processing, done o failed (entonces error indica el motivo, por ejemplo too_large_to_decode). La imagen se borra en cuanto se analiza; el resultado se guarda 24 horas.

Ejemplos de código

JavaScript (Node.js 18+)

const res = await fetch('https://protector-bot.com/api/v1/text', {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.PROTECTOR_API_KEY}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({ text: message.content }),
});
const data = await res.json();
if (data.scam?.flagged || data.nsfw?.flagged) await message.delete();

Python

import os, requests

r = requests.get(
    f"https://protector-bot.com/api/v1/blacklist/{member.id}",
    headers={"Authorization": f"Bearer {os.environ['PROTECTOR_API_KEY']}"},
    timeout=5,
)
if r.ok and r.json()["blacklisted"]:
    print("Cuenta en la lista negra de Protector")

Uso justo y privacidad

  • Los textos y enlaces que envías se analizan al vuelo y no se guardan. Las imágenes se borran justo después del análisis; el resultado se guarda 24 horas.
  • Protector guarda, para tu cuenta: la huella de cada clave, su nombre, sus fechas de creación y último uso, y el número de peticiones al mes.
  • La respuesta de la lista negra no debe ser la única base de una sanción, ni publicarse ni revenderse. Usar la API para acosar a alguien pone fin al acceso.
  • Detalles en las condiciones de uso y la política de privacidad.

Historial de la API

v1 (16 de octubre de 2026): primera versión. Lista negra, enlaces, textos, imágenes.