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
/blacklist/{user_id}¿Está esta cuenta de Discord en la lista negra de Protector?
POST/link¿Es este enlace una estafa o una página de phishing?
POST/textPalabras explícitas, falsos regalos de Nitro y enlaces peligrosos en un mensaje.
POST/imageDetección de imágenes explícitas (Pase API).
La API la sirve únicamente protector-bot.com. Nunca da acceso a las máquinas que ejecutan el bot.
Obtener una clave
- Inicia sesión con Discord en la página para desarrolladores.
- Pulsa Crear una clave y ponle un nombre (por ejemplo, el de tu bot).
- 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
| Gratis | Pase API | |
|---|---|---|
| Peticiones por minuto (por clave) | 10 | 120 |
| Peticiones al mes (por cuenta) | 500 | 100.000 |
| Imágenes al mes | ninguna | 3.000 |
| Lista negra, enlaces, textos | sí | 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-Limit | Peticiones permitidas por minuto para esta clave. |
X-RateLimit-Remaining | Peticiones restantes en el minuto actual. |
X-RateLimit-Reset | Fin de la ventana de un minuto (marca de tiempo Unix). |
X-Quota-Limit / X-Quota-Remaining | Cuota mensual de tu cuenta y lo que queda. |
Retry-After | En 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 }
| Estado | Código | Significado |
|---|---|---|
| 400 | invalid_request | Parámetro ausente o mal formado (ver detail). |
| 401 | unauthorized | Clave ausente, incorrecta o revocada. |
| 403 | plan_required | Este punto de acceso necesita el Pase API. |
| 404 | not_found | Punto de acceso o imagen desconocidos. |
| 405 | method_not_allowed | Método HTTP incorrecto. |
| 413 | payload_too_large | Cuerpo demasiado grande (JSON 64 KB, imagen 8 MB). |
| 415 | unsupported_media_type | Content-Type incorrecto. |
| 429 | rate_limited / quota_exceeded | Límite por minuto o cuota mensual alcanzados. |
| 503 | unavailable | Las 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ámetro | Tipo | Descripción |
|---|---|---|
user_id | ruta | ID 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.
POST /link
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).
| Campo | Tipo | Descripción |
|---|---|---|
url | cadena | Direcció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.
| Campo | Tipo | Descripción |
|---|---|---|
text | cadena | El 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.
