🎬 FunisGo Api — Documentación para Usuarios

⚠️ Acceso restringido:
Esta API no es pública. Para uso completo, debes contactarme directamente para obtener un token único.
Si pierdes tu token o necesitas regenerarlo, también debes contactarme. No existe un endpoint público para regenerar tokens.

🆕 TOKEN PÚBLICO ANÓNIMO

¡Nueva función! Ahora puedes probar la API sin registro usando nuestro token público.

Token Anónimo: anony_0000_public_56
📝 Notas importantes sobre el token anónimo:

Ejemplo de uso:

Authorization: Bearer anony_0000_public_56

O como query parameter: ?token=anony_0000_public_56

🐙 PROYECTO DE CÓDIGO ABIERTO

Explora el código fuente, contribuye o haz fork del proyecto en GitHub

📝 Nota importante: La versión actual en el repositorio es v2.0.0 (versión anterior).
¡Próximamente se publicará la versión v2.2.0 actualizada con todas las nuevas características!

🐙 Ver Repositorio GitHub (v2.0.0)

🛡️ SISTEMA DE SEGURIDAD INTEGRADO

Protección activa contra amenazas y extracción masiva de datos

🔒 Capa de Seguridad Permisiva: Sistema de seguridad integrado que protege contra amenazas críticas mientras mantiene máxima compatibilidad con streaming
🔍 Detección Automática de Scrapping: El sistema monitorea patrones de uso anómalos que indican extracción masiva de datos
Bloqueo Inmediato: Cuando se detecta scrapping, el token se bloquea automáticamente
📧 Notificación por Email: Recibirás una alerta inmediata cuando se detecte actividad sospechosa
🔄 Reactivación Manual: Los tokens bloqueados requieren reactivación manual por el administrador
🚫 CONSECUENCIAS DEL SCRAPPING:

🚫 ATENCIÓN: Limitaciones del Plan FREE

El plan Free tiene restricciones importantes que debes conocer:

🔒 Límite de 30 reproducciones por día - Después de 30 streams, no podrás reproducir hasta el día siguiente
⏱️ 3,000 requests diarios máximos - Límite global de peticiones a la API
📱 500 requests por sesión - Límite por cada sesión de 1 hora
30 requests por minuto - Control de velocidad para evitar abuso
🛡️ Detección de Scrapping Activa - Monitoreo constante de patrones de uso

¿Necesitas más? Considera el plan Premium para uso ilimitado.

🆕 ¡NUEVO! Ahora los usuarios Premium pueden crear y editar contenido (películas, series y canales).

🔐 Autenticación

Todos los endpoints (excepto /api/plan-comparison y /api/diagnostic) requieren un token válido.

💡 Tip: Puedes usar el token anónimo anony_0000_public_56 para pruebas iniciales sin registro.

Respuestas comunes de autenticación

CódigoRespuestaDescripción
401
{ "error": "Token de acceso requerido" }
No se envió ningún token.
401
{ "error": "Formato de token inválido" }
El token tiene menos de 10 o más de 500 caracteres.
401
{ "error": "Token inválido o no autorizado" }
El token no existe en la base de datos.
401
{ "error": "Cuenta desactivada" }
La cuenta asociada al token fue desactivada.
403
{ "error": "Token bloqueado por detección de scrapping", "blocked_until": "2024-12-31T23:59:59Z", "contact_admin": true }
Token bloqueado por sistema anti-scrapping.
500
{ "error": "Error de autenticación" }
Error interno al verificar el token.

🚦 Respuestas de límites (429 Too Many Requests)

Cuando se exceden los límites, la API responde con 429 y notifica por email automáticamente.

⚠️ IMPORTANTE PARA USUARIOS FREE Y ANÓNIMOS: Estos límites se aplican estrictamente y no hay excepciones.
Tipo de límiteEjemplo de respuestaAplica a
Streams Diarios
{
  "error": "Límite diario de streams excedido (30/30)",
  "limit_type": "daily_streams",
  "current_usage": 30,
  "limit": 30,
  "reset_in": "23h 45m",
  "upgrade_required": true
}
🚫 FREE
🚫 ANÓNIMO: 10/10
Requests Diarios
{
  "error": "Límite diario excedido (3000/3000)",
  "limit_type": "daily",
  "current_usage": 3000,
  "limit": 3000,
  "reset_in": "23h 45m"
}
🚫 FREE
🚫 ANÓNIMO: 200/200
Requests por Sesión
{
  "error": "Límite de sesión excedido (500/500)",
  "limit_type": "session",
  "current_usage": 500,
  "limit": 500,
  "reset_in": "59m 30s"
}
🚫 FREE
🚫 ANÓNIMO: 10/10
Velocidad (por minuto)
{
  "error": "Límite de requests por minuto excedido",
  "limit_type": "rate_limit",
  "current_usage": 31,
  "limit": 30,
  "wait_time": 60
}
🚫 FREE
🚫 ANÓNIMO: 15/15
Detección de Scrapping
{
  "error": "Token bloqueado por detección de scrapping",
  "blocked_until": "2024-12-31T23:59:59Z",
  "contact_admin": true,
  "reason": "Patrón de uso anómalo detectado"
}
✅ Todos los planes

📌 Endpoints públicos (sin token)

GET /api/plan-comparison

Compara los planes Free y Premium.

Respuestas posibles:

CódigoRespuesta
200 OK
{
  "success": true,
  "plans": {
    "free": { ... },
    "premium": { ... }
  }
}

GET /api/diagnostic

Verifica estado del sistema, Firebase y variables de entorno.

Respuestas posibles:

CódigoRespuesta
200 OK
{
  "success": true,
  "system": { ... },
  "security": { ... },
  "endpoints_working": { ... }
}

🔐 Endpoints protegidos (requieren token)

GET /

Información general de la API y uso actual.

Respuestas posibles:

CódigoRespuesta
200 OK
{
  "message": "🎬 API de Streaming - 👋 ¡Bienvenido!",
  "user": "usuario123",
  "plan_type": "free",
  "usage_limits": {
    "daily_usage": "45/3000",
    "session_usage": "12/500",
    "daily_streams_used": "8/30",
    "remaining_streams": 22,
    ...
  },
  ...
}
+ Todas las respuestas de autenticación y límites listadas arriba.

GET /api/user/info

Detalles completos de tu cuenta, plan y límites actuales.

Para usuarios Free: Muestra el contador de streams usados/hoy.

Respuesta ejemplo (Free):

{
  "success": true,
  "user": {
    "username": "usuario_free",
    "email": "user@example.com",
    "plan_type": "free",
    "usage_stats": {
      "daily_usage": "245/3000",
      "session_usage": "45/500",
      "daily_streams": "15/30",    // ¡15 streams restantes!
      "total_streams": 156,
      "daily_reset_in": "5h 30m",
      "session_reset_in": "52m 15s",
      "streams_reset_in": "5h 30m"
    },
    "features": {
      "content_access": "limited",
      "streaming": true,
      "download_links": false,
      // ... más características
    }
  }
}

Respuesta ejemplo (Premium):

{
  "success": true,
  "user": {
    "username": "usuario_premium", 
    "plan_type": "premium",
    "usage_stats": {
      "daily_usage": "1250/30000",
      "session_usage": "45/2000", 
      "daily_streams": "Ilimitado",
      "total_streams": 12560,
      "daily_reset_in": "18h 22m"
    },
    "features": {
      "content_access": "full",
      "streaming": true,
      "download_links": true,
      "content_creation": true,
      "content_editing": true,
      // ... todas las características premium
    }
  }
}

Respuesta ejemplo (Anónimo):

{
  "success": true,
  "user": {
    "username": "anonymous_user",
    "plan_type": "anonymous",
    "usage_stats": {
      "daily_usage": "45/200",
      "session_usage": "3/10",
      "daily_streams": "5/10",    // ¡5 streams restantes!
      "total_streams": 5,
      "daily_reset_in": "12h 15m",
      "session_reset_in": "45m 30s",
      "streams_reset_in": "12h 15m"
    },
    "features": {
      "content_access": "limited",
      "streaming": true,
      "download_links": false,
      "content_creation": false,
      "content_editing": false
    }
  }
}

🆕 CREACIÓN Y EDICIÓN DE CONTENIDO

Exclusivo para usuarios Premium

Los usuarios Premium pueden crear y editar películas, series y canales.

POST /api/peliculas PREMIUM

Crear nueva película. Requiere estructura válida según documentación.

Estructura requerida:

{
  "title": "Título obligatorio",
  "image_url": "URL obligatoria", 
  "sinopsis": "Descripción",
  "details": {
    "year": "2024",
    "genres": ["Acción", "Aventura"],
    "rating": "8.5/10",
    "actors": ["Actor 1", "Actor 2"],
    "duration": "120 min",
    "director": "Director"
  },
  "play_links": [
    {
      "server": "Server 1",
      "url": "https://ejemplo.com/stream"
    }
  ],
  "type": "Anime",        // Opcional
  "add": "yes"           // Opcional - para marcar como recién agregado
}

Respuestas posibles:

CódigoRespuesta
201 Created
{
  "success": true,
  "message": "Película creada exitosamente",
  "id": "titulo-normalizado-2024",
  "data": { ... }
}
400 Bad Request
{
  "error": "Estructura de película inválida",
  "details": ["El campo 'title' es obligatorio", ...]
}
409 Conflict
{
  "error": "Ya existe una película con este ID",
  "suggested_id": "titulo-normalizado-2024-1234567890"
}
403 Forbidden
{
  "error": "Esta característica no está disponible en tu plan free",
  "feature_required": "content_creation",
  "upgrade_required": true,
  "current_plan": "free",
  "required_plan": "premium"
}

PUT /api/peliculas/<id> PREMIUM

Actualizar película existente.

Respuestas posibles:

CódigoRespuesta
200 OK
{
  "success": true,
  "message": "Película actualizada exitosamente",
  "id": "pelicula-id",
  "data": { ... }
}
404 Not Found
{ "error": "Película no encontrada" }
403 Forbidden
{ "error": "Esta característica no está disponible en tu plan free", ... }

POST /api/series PREMIUM

Crear nueva serie. Requiere estructura válida con temporadas y episodios.

Estructura requerida:

{
  "title": "Título obligatorio",
  "image_url": "URL obligatoria",
  "sinopsis": "Descripción",
  "details": {
    "year": "2024", 
    "genres": ["Drama", "Suspenso"],
    "rating": "8.8/10",
    "total_seasons": 3,
    "status": "En emisión"
  },
  "seasons": {
    "season-1": {
      "season_number": 1,
      "episode_count": 8,
      "year": "2024",
      "episodes": {
        "episode-1": {
          "episode_number": 1,
          "title": "Capítulo 1",
          "duration": "45 min",
          "sinopsis": "Sinopsis del episodio",
          "play_links": [
            {
              "server": "Server 1", 
              "url": "https://ejemplo.com/stream"
            }
          ]
        }
      }
    }
  },
  "type": "Anime",        // Opcional
  "add": "yes"           // Opcional - para marcar como recién agregado
}

Respuestas posibles:

CódigoRespuesta
201 Created
{
  "success": true,
  "message": "Serie creada exitosamente", 
  "id": "titulo-normalizado",
  "data": { ... }
}
400 Bad Request
{
  "error": "Estructura de serie inválida",
  "details": ["El campo 'title' es obligatorio", ...]
}
403 Forbidden
{ "error": "Esta característica no está disponible en tu plan free", ... }

PUT /api/series/<id> PREMIUM

Actualizar serie existente.

Respuestas posibles:

CódigoRespuesta
200 OK
{
  "success": true,
  "message": "Serie actualizada exitosamente",
  "id": "serie-id", 
  "data": { ... }
}
404 Not Found
{ "error": "Serie no encontrada" }

POST /api/canales PREMIUM

Crear nuevo canal.

Estructura requerida:

{
  "name": "Nombre obligatorio",
  "image_url": "URL obligatoria", 
  "status": "En vivo",
  "category": "Cine",
  "country": "México",
  "stream_options": [
    {
      "option_name": "Opción 1",
      "stream_url": "https://ejemplo.com/live"
    }
  ]
}

Respuestas posibles:

CódigoRespuesta
201 Created
{
  "success": true,
  "message": "Canal creado exitosamente",
  "id": "nombre-canal-normalizado",
  "data": { ... }
}
400 Bad Request
{
  "error": "Estructura de canal inválida", 
  "details": ["El campo 'name' es obligatorio", ...]
}
403 Forbidden
{ "error": "Esta característica no está disponible en tu plan free", ... }

PUT /api/canales/<id> PREMIUM

Actualizar canal existente.

Respuestas posibles:

CódigoRespuesta
200 OK
{
  "success": true,
  "message": "Canal actualizado exitosamente",
  "id": "canal-id",
  "data": { ... }
}
404 Not Found
{ "error": "Canal no encontrado" }

📋 Endpoints de Consulta - Lo que REALMENTE puedes hacer

GET /api/peliculas

Free: ✅ Acceso COMPLETO a información y enlaces

Anónimo: ✅ Acceso COMPLETO a información y enlaces

Pero: 🚫 Límites de reproducción según plan

Parámetros:

Respuesta ejemplo (Free):

{
  "success": true,
  "count": 10,
  "page": 1,
  "limit": 10,
  "plan_restrictions": true,
  "data": [
    {
      "id": "pelicula-123",
      "title": "Avengers Endgame",
      "poster": "https://...",
      "description": "Los Vengadores se reunen...",
      "year": "2019",
      "genre": "Acción, Aventura",
      "play_links": [
        {
          "server": "Server 1",
          "url": "https://stream.com/avengers"  // ✅ ENLACE DISPONIBLE
        }
      ],
      "streaming_available": true
    }
  ]
}

GET /api/peliculas/<id>

Free/Anónimo: ✅ Acceso COMPLETO a información detallada y enlaces

Respuesta cuando NO existe:

{ "error": "Película no encontrada" }

GET /api/series

Free/Anónimo: ✅ Acceso COMPLETO a información y enlaces

Pero: 🚫 Cada episodio cuenta como 1 stream

Respuesta ejemplo:

{
  "success": true,
  "count": 5,
  "plan_restrictions": false,
  "data": [
    {
      "id": "serie-456",
      "title": "Stranger Things",
      "poster": "https://...",
      "description": "En los años 80...",
      "total_seasons": 4,
      "seasons": [
        {
          "season_number": 1,
          "episode_count": 8,
          "episodes": [
            {
              "episode_number": 1,
              "title": "Capítulo 1",
              "play_links": [ ... ]  // ✅ ENLACES DISPONIBLES
            }
          ]
        }
      ]
    }
  ]
}

GET /api/series/<id>

Free/Anónimo: ✅ Acceso COMPLETO a información detallada y enlaces

GET /api/canales

Free/Anónimo: ✅ Acceso COMPLETO a información y enlaces

Pero: 🚫 Cada conexión a canal cuenta como 1 stream

GET /api/canales/<id>

Free/Anónimo: ✅ Acceso COMPLETO a información detallada y enlaces

GET /api/buscar?q=termino

Búsqueda en películas, series y canales.

Free/Anónimo: Límite de 5 resultados por búsqueda

Parámetros:

Respuesta ejemplo:

{
  "success": true,
  "termino": "avengers",
  "count": 3,
  "search_limit": 5,
  "plan_type": "free",
  "data": [
    {
      "id": "avengers-123",
      "title": "Avengers Endgame",
      "tipo": "pelicula",
      // ... datos completos con enlaces
    }
  ]
}

GET /api/stream/<id>

⚠️ ESTE ENDPOINT CONSUME STREAMS: Cada llamada exitosa resta 1 de tu límite diario.

Para series: Requiere parámetros adicionales:

Respuesta exitosa:

{
  "success": true,
  "streaming_url": "https://ejemplo.com/stream/123",
  "content_type": "pelicula",
  "expires_in": 3600,
  "quality": "HD",
  "stream_counted": true  // ✅ Se restó 1 de tu límite
}

Respuesta cuando alcanzas el límite:

{
  "error": "Límite diario de streams excedido (30/30)",
  "limit_type": "daily_streams",
  "current_usage": 30,
  "limit": 30,
  "reset_in": "14h 22m",
  "upgrade_required": true
}

Para series (ejemplo):

GET /api/stream/serie-123?season=1&episode=2

GET /api/estadisticas

Estadísticas del catálogo disponible.

Respuesta ejemplo:

{
  "success": true,
  "data": {
    "total_peliculas": 150,
    "total_series": 45,
    "total_canales": 25,
    "total_contenido": 195
  }
}

GET /api/contenido/recientes

Contenido recientemente agregado (con add: "yes").

Parámetros:

GET /api/contenido/animes

Contenido de tipo Anime (con type: "Anime").

📊 Planes Disponibles - Comparación ACTUALIZADA

PÚBLICO

Token Anónimo

$0 USD
🔓 ACCESO PÚBLICO CON LÍMITES
Ideal para: Pruebas iniciales sin registro

Plan Free

$0 USD
🆕 ¡MEJORADO! Límites aumentados
Ideal para: Desarrollo y pruebas avanzadas
SIN LÍMITES

Plan Premium

$5 USD
Ideal para: Producción y uso comercial

❓ Preguntas Frecuentes - LÍMITES Y TOKEN ANÓNIMO

¿Qué es el token anónimo y para qué sirve?
Es un token público (anony_0000_public_56) que permite probar la API sin registro. Ideal para desarrolladores que quieren evaluar la API antes de crear una cuenta.

¿Puedo usar la API Free para mi aplicación?
Sí, con los nuevos límites mejorados (3,000 requests y 30 streams diarios) es más viable para aplicaciones pequeñas.

¿Los límites se reinician?
Sí, todos los límites se reinician cada 24 horas automáticamente.

¿Qué pasa si me quedo sin streams?
No podrás reproducir contenido hasta el día siguiente. Solo podrás ver información.

¿Cómo sé cuántos streams me quedan?
Usa GET /api/user/info para ver tus contadores en tiempo real.

¿Puedo ver los enlaces de streaming en el plan Free/Anónimo?
SÍ, puedes verlos, pero tendrás límites en su uso (30 para Free, 10 para Anónimo).

¿Qué cuenta como un "stream"?
Cada llamada exitosa a /api/stream/ cuenta como 1 stream, sin importar la duración.

¿Qué es el detector de scrapping?
Es un sistema de seguridad que monitorea patrones de uso anómalos y bloquea automáticamente tokens que realizan extracción masiva de datos.

¿Qué pasa si mi token es bloqueado por scrapping?
Deberás contactar al administrador para reactivación manual. No hay reactivación automática.

¿La API tiene medidas de seguridad?
, la API cuenta con una capa de seguridad integrada que protege contra amenazas críticas mientras mantiene compatibilidad con streaming. Incluye detección de scrapping, protección contra inyecciones críticas y sistema de rate limiting configurable.

¿Puedo usar el token anónimo en producción?
No recomendado. Es público y puede ser bloqueado por abuso. Para producción, obtén un token personal Free o Premium.

¿Qué ventajas tiene registrarse vs usar el token anónimo?
Registrándose obtienes: límites más generosos, soporte por email, y la posibilidad de actualizar a Premium para características avanzadas.