Documentación API

Introducción

La API de Zubnet te da acceso programático a más de 350 modelos de IA para generación de texto, imágenes, video, música, voz y código. Es completamente compatible con la especificación de la API de OpenAI — si ya estás usando OpenAI, puedes cambiar a Zubnet modificando tu URL base y clave API.

URL Base

https://api.zubnet.com/v1

Inicio Rápido

# Using curl
curl https://api.zubnet.com/v1/chat/completions \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-20250514",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'
# Using Python with OpenAI SDK
from openai import OpenAI

client = OpenAI(
    api_key="your-zubnet-api-key",
    base_url="https://api.zubnet.com/v1"
)

response = client.chat.completions.create(
    model="claude-sonnet-4-20250514",
    messages=[{"role": "user", "content": "Hello!"}]
)

print(response.choices[0].message.content)

Autenticación

Todas las solicitudes a la API requieren autenticación mediante un token Bearer en el encabezado Authorization.

Authorization: Bearer YOUR_API_KEY

Puedes generar claves API desde la configuración de tu cuenta. Mantén tus claves seguras — otorgan acceso completo a tu cuenta.

Uso de Claves Propias de Proveedores (BYOK)

También puedes usar tus propias claves API de proveedores como Anthropic, Google y más de 40 otros. Agrégalas en la configuración de tu workspace y se usarán automáticamente para solicitudes a esos proveedores — sin ningún recargo.

Modelos

GET /v1/models

Lista todos los modelos disponibles.

curl https://api.zubnet.com/v1/models \
  -H "Authorization: Bearer $ZUBNET_API_KEY"
Respuesta
{
  "object": "list",
  "data": [
    {
      "id": "claude-sonnet-4-20250514",
      "object": "model",
      "created": 1699900000,
      "owned_by": "anthropic"
    },
    {
      "id": "deepseek-chat",
      "object": "model",
      "created": 1699900000,
      "owned_by": "deepseek"
    },
    ...
  ]
}

Completaciones de Chat

POST /v1/chat/completions

Crea una completación de chat. Este es el endpoint principal para generación de texto, compatible con el formato de completaciones de chat de OpenAI.

Cuerpo de la Solicitud

Parámetro Tipo Descripción
modelrequerido string ID del modelo a usar (ej., "claude-sonnet-4-20250514", "deepseek-chat", "gemini-2.5-pro")
messagesrequerido array Array de objetos de mensaje con role y content
temperatureopcional number Temperatura de muestreo (0-2). Por defecto: 0.7
max_tokensopcional integer Máximo de tokens a generar (1-128000). Por defecto: 4096
streamopcional boolean Transmitir respuestas vía SSE. Por defecto: true
top_popcional number Parámetro de muestreo nucleus (0-1). Por defecto: 1
frequency_penaltyopcional number Penalización de frecuencia (-2 a 2). Por defecto: 0
presence_penaltyopcional number Penalización de presencia (-2 a 2). Por defecto: 0
stopopcional string/array Secuencias de parada

Ejemplo de Solicitud

curl https://api.zubnet.com/v1/chat/completions \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-20250514",
    "messages": [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "What is the capital of France?"}
    ],
    "temperature": 0.7,
    "max_tokens": 150
  }'
Respuesta
{
  "id": "chatcmpl-abc123",
  "object": "chat.completion",
  "created": 1699900000,
  "model": "claude-sonnet-4-20250514",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "The capital of France is Paris."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 25,
    "completion_tokens": 8,
    "total_tokens": 33
  }
}

Generación de Código

POST /api/ai/completions/code

Genera código a partir de un prompt en lenguaje natural. Devuelve una respuesta en streaming vía Server-Sent Events (SSE).

Cuerpo de la Solicitud

Parámetro Tipo Descripción
promptrequerido string Descripción en lenguaje natural del código a generar
languagerequerido string Lenguaje de programación (ej., "python", "javascript", "rust")
temperatureopcional number Temperatura de muestreo (0-2)
max_tokensopcional integer Máximo de tokens a generar (1-128000)

Ejemplo de Solicitud

curl https://app.zubnet.ai/api/ai/completions/code \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A function that checks if a number is prime",
    "language": "python"
  }'
Este endpoint transmite vía SSE. Recibirás eventos chunk con contenido incremental, seguidos de un evento document final con el código generado completo.
Objeto de Respuesta Final
{
  "object": "code_document",
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "model": "claude-sonnet-4-20250514",
  "cost": 1,
  "title": "Prime Number Checker",
  "content": "def is_prime(n): ..."
}

Generación de Imágenes

POST /v1/images/generations

Genera imágenes a partir de prompts de texto usando modelos de FLUX, Stable Diffusion, Ideogram y más.

Modelos Disponibles

flux-pro-1.1-ultra flux-pro-1.1 flux-2-pro flux-kontext-pro gen4_image ideogram-v3 hidream-i1-full

Cuerpo de la Solicitud

Parámetro Tipo Descripción
modelrequerido string Modelo de imagen a usar
promptrequerido string Descripción de texto de la imagen a generar
nopcional integer Número de imágenes a generar. Por defecto: 1
sizeopcional string Tamaño de imagen (ej., "1024x1024", "1792x1024")
response_formatopcional string "url" o "b64_json". Por defecto: "url"

Ejemplo de Solicitud

curl https://api.zubnet.com/v1/images/generations \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "flux-pro-1.1-ultra",
    "prompt": "A serene mountain lake at sunset, photorealistic",
    "n": 1,
    "size": "1024x1024"
  }'
Respuesta
{
  "created": 1699900000,
  "data": [
    {
      "url": "https://cdn.zubnet.ai/files/abc123.png",
      "revised_prompt": "A serene mountain lake..."
    }
  ]
}

Generación de Videos

POST /api/ai/videos

Genera videos a partir de prompts de texto o imágenes. Soporta flujos de trabajo de texto a video, imagen a video y video a video.

Modelos Disponibles

veo-3.1-generate-001 veo-3.0-generate-001 kling-v2-5-turbo kling-v2-1-pro gen4_turbo gen4_aleph vidu-q2-pro pixverse-v4

Cuerpo de la Solicitud

Parámetro Tipo Descripción
modelrequerido string Modelo de video a usar
promptrequerido* string Descripción de texto del video. *No requerido para modelos de lip-sync o upscale
framesopcional file[] Imágenes de entrada para imagen a video. Máx 10MB cada una (jpg, png, webp)
videoopcional file Video de entrada para video a video. Máx 100MB (mp4, webm, mov)
audioopcional file Archivo de audio para modelos de lip-sync. Máx 25MB
aspect_ratioopcional string Relación de aspecto (ej., "16:9", "9:16", "1:1")
durationopcional integer Duración del video en segundos

Ejemplo: Texto a Video

curl https://app.zubnet.ai/api/ai/videos \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "veo-3.1-generate-001",
    "prompt": "A drone shot flying over a coral reef at golden hour",
    "aspect_ratio": "16:9",
    "duration": 8
  }'

Ejemplo: Imagen a Video

curl https://app.zubnet.ai/api/ai/videos \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -F "model=kling-v2-5-turbo" \
  -F "prompt=Camera slowly zooms in" \
  -F "frames=@my-image.png"
La generación de video es asíncrona. La respuesta incluye un campo state (“processing”, “completed”, “failed”) y un porcentaje de progress. Consulta el endpoint de la biblioteca para verificar el estado de finalización.
Respuesta
{
  "object": "video",
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "model": "veo-3.1-generate-001",
  "state": "processing",
  "progress": 0,
  "cost": 5,
  "output_file": null,
  "created_at": "2026-02-25T12:00:00Z"
}

Comprensión de Video

Analice contenido de video con IA. Envíe una URL de video para análisis y consulte los resultados. Soporta múltiples tipos de análisis.

POST /api/ai/video-understanding

Enviar un video para análisis por IA. Retorna un identificador de tarea que puede consultar para obtener resultados.

Cuerpo de la Solicitud

Parámetro Tipo Descripción
video_urlrequerido string URL HTTPS pública del video a analizar
typeopcional string Tipo de análisis: summary (predeterminado), topics, chapters o highlights

Ejemplo de Solicitud

curl https://app.zubnet.ai/api/ai/video-understanding \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "https://example.com/video.mp4",
    "type": "summary"
  }'
Respuesta
{
  "job_id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "queued"
}
GET /api/ai/video-understanding/{jobId}

Verificar el estado de una tarea de análisis de video.

Respuesta (completada)
{
  "status": "completed",
  "result": {
    "type": "summary",
    "content": "El video muestra una demostración de producto..."
  }
}
Las URL de video deben ser enlaces HTTPS accesibles públicamente. Las URL privadas/internas se rechazan por seguridad. Los resultados se almacenan en caché durante 1 hora.

Composición Musical

POST /api/ai/compositions

Genera música original a partir de descripciones de texto, letras o etiquetas de estilo.

Modelos Disponibles

suno/v5 suno/v4.5-plus suno/v4.5 suno/v4 lyria-002

Cuerpo de la Solicitud

Parámetro Tipo Descripción
modelrequerido string Modelo de música a usar
promptopcional string Descripción de la música o letras a musicalizar
tagsopcional string Etiquetas de género y estilo (ej., "lo-fi, chill, jazz")
instrumentalopcional boolean Generar solo instrumental (sin voces). Por defecto: false

Ejemplo de Solicitud

curl https://app.zubnet.ai/api/ai/compositions \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "suno/v5",
    "prompt": "An upbeat synthwave track about coding at 3am",
    "tags": "synthwave, electronic, upbeat",
    "instrumental": true
  }'
Los modelos Suno típicamente devuelven 2 variantes de composición por solicitud. Lyria devuelve un solo clip de 30 segundos a 48kHz.
Respuesta
[
  {
    "object": "composition",
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "model": "suno/v5",
    "title": "Midnight Code",
    "tags": "synthwave, electronic, upbeat",
    "cost": 2,
    "output_file": {
      "url": "https://cdn.zubnet.ai/files/abc123.mp3"
    }
  },
  {
    "object": "composition",
    "id": "550e8400-e29b-41d4-a716-446655440001",
    // ... segunda variante
  }
]

Efectos de Sonido

POST /api/ai/sound-effects

Generar efectos de sonido a partir de descripciones de texto.

Cuerpo de la solicitud

Parámetro Type Descripción
modelrequerido string Modelo de efectos de sonido
promptrequerido string Descripción del efecto de sonido a generar

Ejemplo de solicitud

curl https://app.zubnet.ai/api/ai/sound-effects \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sound-effect-model",
    "prompt": "Thunder rumbling in the distance followed by heavy rain"
  }'
Respuesta
{
  "object": "sound_effect",
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "model": "sound-effect-model",
  "cost": 1,
  "output_file": {
    "url": "https://cdn.zubnet.ai/files/abc123.mp3"
  }
}

Texto a Voz

POST /v1/audio/speech

Convierte texto en audio de voz con sonido natural usando voces de ElevenLabs, Cartesia, Speechify y más.

Parámetro Tipo Descripción
modelrequerido string Modelo TTS (ej., "tts-1", "tts-1-hd", "elevenlabs")
inputrequerido string Texto a convertir en voz (máx 5000 caracteres)
voicerequerido string ID de voz a usar (ej., "alloy", "echo", "nova", o un ID de voz personalizado)
response_formatopcional string Formato de audio: mp3, opus, aac, flac. Por defecto: mp3

Ejemplo de Solicitud

curl https://api.zubnet.com/v1/audio/speech \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "tts-1-hd",
    "input": "Welcome to Zubnet, the future of AI.",
    "voice": "nova"
  }' --output speech.mp3

Transcripción

POST /v1/audio/transcriptions

Transcribe audio a texto.

Parámetro Tipo Descripción
modelrequerido string Modelo de transcripción (ej., "whisper-1")
filerequerido file Archivo de audio a transcribir. Máx 25MB (mp3, mp4, wav, webm, ogg, flac)
languageopcional string Código de idioma (ej., "en", "fr", "es")

Ejemplo de Solicitud

curl https://api.zubnet.com/v1/audio/transcriptions \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -F "model=whisper-1" \
  -F "file=@recording.mp3"
Respuesta
{
  "object": "transcription",
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "model": "whisper-1",
  "content": "Hello, this is a test recording..."
}

Aislamiento de Voz

POST /api/ai/isolated-voices

Extrae voces limpias del audio, eliminando ruido de fondo y música. Desarrollado por ElevenLabs.

Parámetro Tipo Descripción
filerequerido file Archivo de audio. Máx 25MB (mp3, mp4, wav, m4a, webm, ogg, flac)

Ejemplo de Solicitud

curl https://app.zubnet.ai/api/ai/isolated-voices \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -F "file=@noisy-recording.mp3"
Respuesta
{
  "object": "isolated_voice",
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "cost": 1,
  "input_file": {
    "url": "https://cdn.zubnet.ai/files/input.mp3"
  },
  "output_file": {
    "url": "https://cdn.zubnet.ai/files/isolated.mp3"
  }
}

Separación de Pistas

POST /api/ai/stem-separations

Separa el audio en pistas individuales (voces, batería, bajo, guitarra, piano, otros). Desarrollado por ElevenLabs.

Parámetro Tipo Descripción
filerequerido file Archivo de audio. Máx 25MB (mp3, mp4, wav, m4a, webm, ogg, flac)
stem_variationopcional string Modo de separación. Por defecto: "six_stems_v1" (voces, batería, bajo, guitarra, piano, otros)

Ejemplo de Solicitud

curl https://app.zubnet.ai/api/ai/stem-separations \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -F "file=@song.mp3"
Respuesta
{
  "object": "stem_separation",
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "cost": 1,
  "input_file": {
    "url": "https://cdn.zubnet.ai/files/song.mp3"
  },
  "output_file": {
    "url": "https://cdn.zubnet.ai/files/stems.zip"
  }
}

Voces

Cree y gestione voces personalizadas para la síntesis de voz.

POST /api/voices

Crear una voz personalizada.

GET /api/voices

Listar todas las voces disponibles en su espacio de trabajo.

PUT /api/voices/{id}

Actualizar una voz personalizada.

DELETE /api/voices/{id}

Eliminar una voz personalizada.

Los IDs de voces personalizadas se pueden usar en el parámetro voice del endpoint Texto a Voz.

Embeddings

POST /v1/embeddings

Crea embeddings de texto para búsqueda semántica y similitud.

Parámetro Tipo Descripción
modelrequerido string Modelo de embedding (ej., "text-embedding-3-small")
inputrequerido string/array Texto a convertir en embedding (string o array de strings)

Ejemplo de Solicitud

curl https://api.zubnet.com/v1/embeddings \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "text-embedding-3-small",
    "input": "The quick brown fox jumps over the lazy dog"
  }'

Bases de conocimiento

Crea y gestiona bases de conocimiento para la generación aumentada por recuperación (RAG). Sube documentos (PDF, DOCX, TXT, Markdown) o añade URLs y texto sin formato, y luego consúltalos en tus completions de chat.

POST /api/knowledge-bases

Crear una nueva base de conocimiento.

Cuerpo de la solicitud

Parámetro Tipo Descripción
namerequerido string Nombre de la base de conocimiento
descriptionopcional string Descripción de la base de conocimiento

Ejemplo: Crear una base de conocimiento

curl https://app.zubnet.ai/api/knowledge-bases \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My KB",
    "description": "Optional description"
  }'
Respuesta
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "name": "My KB",
  "description": "Optional description",
  "status": "active"
}
GET /api/knowledge-bases

Listar todas las bases de conocimiento en tu espacio de trabajo.

Respuesta
[
  {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "name": "My KB",
    "description": "Optional description",
    "status": "active"
  },
  ...
]
GET /api/knowledge-bases/{id}

Obtener los detalles de una base de conocimiento específica, incluyendo sus documentos.

DELETE /api/knowledge-bases/{id}

Eliminar una base de conocimiento y todos sus documentos.

POST /api/knowledge-bases/{id}/documents

Ingerir un documento en una base de conocimiento. Soporta carga de archivos, URLs y texto sin formato.

Cuerpo de la solicitud

Parámetro Tipo Descripción
fileopción 1 file Carga multipart (PDF, DOCX, TXT, MD — máx 10 MB)
titlerequerido string Título del documento (requerido para los tipos URL y texto)
typeopción 2/3 string "url" o "text" (para ingesta sin archivo)
urlopción 2 string URL a recuperar e ingerir (cuando el tipo es "url")
contentopción 3 string Contenido de texto sin formato a ingerir (cuando el tipo es "text")

Ejemplo: Ingerir un archivo

curl https://app.zubnet.ai/api/knowledge-bases/550e8400-.../documents \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -F "file=@report.pdf"

Ejemplo: Ingerir una URL

curl https://app.zubnet.ai/api/knowledge-bases/550e8400-.../documents \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Zubnet Docs",
    "type": "url",
    "url": "https://zubnet.ai/developers.html"
  }'

Ejemplo: Ingerir texto sin formato

curl https://app.zubnet.ai/api/knowledge-bases/550e8400-.../documents \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Company Policy",
    "type": "text",
    "content": "All employees must complete security training annually..."
  }'
GET /api/knowledge-bases/{id}/documents

Listar todos los documentos de una base de conocimiento.

DELETE /api/knowledge-bases/{id}/documents/{docId}

Eliminar un documento específico de una base de conocimiento.

GET /api/knowledge-bases/{id}/documents/{docId}/content

Leer el contenido textual extraído de un documento específico.

Reranking

POST /v1/reranking

Reordenar una lista de documentos por relevancia respecto a una consulta. Útil para mejorar resultados de búsqueda, pipelines RAG y sistemas de recomendación.

Modelos disponibles

rerank-v4.0-pro rerank-v4.0-fast jina-reranker-v3 jina-reranker-m0 rerank-2.5 rerank-2.5-lite

Cuerpo de la solicitud

Parámetro Tipo Descripción
modelrequerido string Modelo de reranking a utilizar
queryrequerido string La consulta de búsqueda para clasificar los documentos
documentsrequerido array Array de cadenas de documentos a reordenar
top_nopcional integer Número de resultados a devolver. Por defecto: todos

Ejemplo de solicitud

curl https://api.zubnet.ai/v1/reranking \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "rerank-v4.0-pro",
    "query": "How do I reset my password?",
    "documents": [
      "To reset your password, go to Settings > Security > Change Password.",
      "Our pricing plans start at $9/month for individuals.",
      "Password requirements: minimum 8 characters, one uppercase letter.",
      "Contact support at help@example.com for account issues."
    ],
    "top_n": 3
  }'
Respuesta
{
  "object": "list",
  "results": [
    {
      "index": 0,
      "relevance_score": 0.953
    },
    {
      "index": 2,
      "relevance_score": 0.714
    },
    {
      "index": 3,
      "relevance_score": 0.389
    }
  ],
  "model": "rerank-v4.0-pro"
}
Los resultados se ordenan por puntuación de relevancia en orden descendente. El campo index se refiere a la posición de cada documento en el array de entrada original.

Biblioteca

La biblioteca es donde vive todo el contenido generado — imágenes, videos, composiciones, documentos de código, transcripciones y más. Úsela para listar elementos, verificar el estado de generación asíncrona, actualizar metadatos y gestionar su contenido.

GET /api/library/{type}

Listar elementos en su biblioteca por tipo de contenido.

Tipos de Contenido

images videos compositions sound-effects documents code-documents speeches transcriptions isolated-voices stem-separations conversations

Parámetros de Consulta

Parámetro Tipo Descripción
limitopcional integer Resultados por página (máx. 100)
starting_afteropcional string Cursor para paginación hacia adelante (UUID del elemento)
ending_beforeopcional string Cursor para paginación hacia atrás (UUID del elemento)
sortopcional string Campo y dirección de ordenación (ej., "created_at:desc")
queryopcional string Búsqueda de texto completo (máx. 255 caracteres)
modelopcional string Filtrar por modelo utilizado para la generación
Respuesta
{
  "object": "list",
  "data": [
    {
      "id": "550e8400-...",
      "object": "video",
      "model": "veo-3.1-generate-001",
      "title": "Coral reef drone shot",
      "state": 3,
      "progress": 100,
      "cost": 5,
      "output_file": {
        "url": "https://cdn.zubnet.ai/files/abc123.mp4",
        "size": 8421376,
        "extension": "mp4"
      },
      "created_at": "2026-03-01T12:00:00Z"
    },
    ...
  ]
}
GET /api/library/{type}/{id}

Obtener un elemento de la biblioteca por ID. Este es el endpoint principal para consultar el estado de generación asíncrona.

Estados de Generación

Estado Valor Descripción
draft 0 Aún no enviado
queued 1 En espera de procesamiento
processing 2 Generando actualmente
completed 3 Listo — output_file disponible
failed 4 La generación falló

Patrón de Consulta

# 1. Iniciar generación asíncrona
curl -X POST https://app.zubnet.ai/api/ai/videos \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "veo-3.1-generate-001", "prompt": "Un arrecife de coral"}'
# Retorna: {"id": "550e8400-...", "state": 1, ...}

# 2. Consultar estado hasta completar
curl https://app.zubnet.ai/api/library/videos/550e8400-... \
  -H "Authorization: Bearer $ZUBNET_API_KEY"
# Retorna: {"state": 2, "progress": 45, ...}  (procesando)
# Retorna: {"state": 3, "progress": 100, "output_file": {"url": "..."}}  (listo)
La paginación es basada en cursor. Use el id del último elemento en starting_after para obtener la siguiente página. No hay parámetros de offset/página.
POST /api/library/{type}/{id}

Actualizar los metadatos de un elemento de la biblioteca.

Parámetro Tipo Descripción
titleopcional string Título del elemento
visibilityopcional integer 0 (privado) o 1 (público)
is_favoritedopcional boolean Agregar o quitar de favoritos
metaopcional object Metadatos personalizados (género, estado de ánimo, etiquetas, descripción, autor, etc.)
DELETE /api/library/{type}/{id}

Eliminar un elemento de la biblioteca y sus archivos asociados.

GET /api/library/{type}/count

Obtener el total de elementos para un tipo de contenido. Soporta los mismos filtros query y model que el endpoint de listado.

Asistentes

Los asistentes son preajustes de chat reutilizables con un nombre, modelo, prompt de sistema y configuraciones personalizados. Úselos para crear personas de IA especializadas para diferentes tareas.

POST /api/assistants

Crear un nuevo asistente.

GET /api/assistants

Listar todos los asistentes en su espacio de trabajo.

PUT /api/assistants/{id}

Actualizar la configuración de un asistente (nombre, modelo, prompt de sistema, ajustes).

DELETE /api/assistants/{id}

Eliminar un asistente.

Tienda MCP

Explore y active servidores MCP (Model Context Protocol) para dar a sus agentes capacidades de herramientas extendidas — desde búsqueda web y acceso a datos hasta ejecución de código e integraciones de terceros.

GET /api/mcp-store/servers

Explorar el catálogo de servidores MCP.

Parámetros de Consulta

Parámetro Tipo Descripción
categoryopcional string Filtrar por categoría (search, data, developer, infrastructure, communication, commerce, creative, productivity, social, utilities)
queryopcional string Buscar por nombre o descripción
Respuesta
{
  "object": "list",
  "data": [
    {
      "id": "550e8400-...",
      "name": "GitHub",
      "description": "Acceder a repositorios, issues y pull requests de GitHub",
      "category": "developer",
      "config_schema": [
        {"name": "api_key", "type": "secret", "label": "API Key", "required": true}
      ],
      "tools": ["list_repos", "create_issue", "search_code"],
      "is_official": true
    },
    ...
  ]
}
POST /api/mcp-store/activations

Activar un servidor MCP para su espacio de trabajo. Proporcione valores de configuración (claves API, etc.) según lo definido por el config_schema del servidor.

Cuerpo de la Solicitud

Parámetro Tipo Descripción
server_idrequerido string UUID del servidor MCP a activar
configopcional object Valores de configuración que coincidan con el config_schema del servidor

Ejemplo de Solicitud

curl https://app.zubnet.ai/api/mcp-store/activations \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "server_id": "550e8400-e29b-41d4-a716-446655440000",
    "config": {
      "api_key": "ghp_xxxxxxxxxxxx"
    }
  }'
Respuesta (201 Created)
{
  "id": "act-uuid-...",
  "server_id": "550e8400-...",
  "status": 1,
  "config": {
    "api_key": "••••••••"
  },
  "server": {
    "name": "GitHub",
    ...
  },
  "created_at": "2026-03-01T12:00:00Z"
}
Los campos secretos en la configuración están enmascarados en las respuestas de la API. Cada espacio de trabajo solo puede activar un servidor dado una vez. El id devuelto es el activation_id que usa al vincular servidores MCP a agentes.
GET /api/mcp-store/activations

Listar todos los servidores MCP activados en su espacio de trabajo.

PUT /api/mcp-store/activations/{id}

Actualizar la configuración o estado de una activación.

DELETE /api/mcp-store/activations/{id}

Desactivar un servidor MCP de su espacio de trabajo.

Agentes

Cree y gestione agentes de IA autónomos que operan a través de canales de comunicación. Los agentes pueden responder mensajes en Telegram y Discord, ejecutarse mediante disparadores programados y aprovechar bases de conocimiento y servidores MCP para capacidades extendidas.

POST /api/agents

Crear un nuevo agente.

Cuerpo de la solicitud

Parámetro Tipo Descripción
namerequerido string Nombre del agente (máx. 64 caracteres)
modelrequerido string ID del modelo (ej. "claude-sonnet-4-20250514", "deepseek-chat")
system_promptopcional string Prompt de sistema que define el comportamiento y personalidad del agente
modeopcional string "quick" o "advanced". Por defecto: "quick"
avataropcional string URL del avatar (máx. 512 caracteres)

Ejemplo de solicitud

curl https://app.zubnet.ai/api/agents \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Support Bot",
    "model": "claude-sonnet-4-20250514",
    "system_prompt": "You are a friendly support agent. Answer questions clearly and concisely.",
    "mode": "advanced"
  }'
Respuesta (201 Created)
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "name": "Support Bot",
  "slug": "support-bot",
  "avatar": null,
  "model": "claude-sonnet-4-20250514",
  "system_prompt": "You are a friendly support agent...",
  "status": 1,
  "mode": "advanced",
  "permissions": {
    "time_windows": [],
    "frequency_cap": {
      "max_messages_per_hour": 60,
      "max_messages_per_day": 500
    },
    "channel_preferences": {},
    "allowed_actions": {
      "can_use_tools": true,
      "can_access_kb": true,
      "max_tool_calls_per_message": 5
    }
  },
  "cost": 0,
  "last_active_at": null,
  "created_at": 1709136000,
  "updated_at": null,
  "user": {
    "id": "a1b2c3d4-...",
    "first_name": "Jane",
    "last_name": "Doe",
    "avatar": "https://cdn.zubnet.ai/files/avatar.jpg"
  },
  "channels": []
}
GET /api/agents

Listar todos los agentes del espacio de trabajo. Soporta paginación y filtrado.

Parámetro Tipo Descripción
limitquery integer Resultados por página. Por defecto: 25
cursorquery string Cursor de paginación
sortquery string "name", "created_at" o "last_active_at". Por defecto: "created_at"
directionquery string "asc" o "desc"
statusquery integer Filtrar por estado: 0 (inactivo), 1 (activo), 2 (pausado)
Respuesta
{
  "object": "list",
  "data": [
    {
      "id": "550e8400-...",
      "name": "Support Bot",
      "slug": "support-bot",
      "model": "claude-sonnet-4-20250514",
      "status": 1,
      "mode": "advanced",
      "cost": 12.50,
      "last_active_at": 1709222400,
      "created_at": 1709136000,
      ...
    }
  ]
}
GET /api/agents/{id}

Obtener los detalles completos de un agente, incluyendo sus canales, servidores MCP y bases de conocimiento vinculados.

PUT /api/agents/{id}

Actualizar un agente. Todos los campos son opcionales — solo se modifican los campos proporcionados.

Cuerpo de la solicitud

Parámetro Tipo Descripción
nameopcional string Nombre del agente (máx. 64)
modelopcional string ID del modelo
system_promptopcional string|null Prompt de sistema (null para borrar)
statusopcional integer 0 (inactivo), 1 (activo) o 2 (pausado)
modeopcional string "quick" o "advanced"
permissionsopcional object Permisos del agente (ver abajo)

Objeto de Permisos

{
  "permissions": {
    "time_windows": [
      {
        "days": [1, 2, 3, 4, 5],  // 0=Dom, 6=Sáb
        "timezone": "America/Mexico_City",
        "start_hour": 9,            // 0-23
        "end_hour": 17              // 1-24
      }
    ],
    "frequency_cap": {
      "max_messages_per_hour": 60,    // 1-1000
      "max_messages_per_day": 500     // 1-10000
    },
    "channel_preferences": {
      "default_channel": "telegram",
      "proactive_channels": ["telegram", "discord"]
    },
    "allowed_actions": {
      "can_use_tools": true,
      "can_access_kb": true,
      "max_tool_calls_per_message": 5  // 0-50
    }
  }
}
DELETE /api/agents/{id}

Eliminar un agente. Esto también elimina todos sus canales, disparadores, mensajes e integraciones.

Integraciones

POST /api/agents/{id}/knowledge-bases

Vincular una base de conocimiento a un agente para respuestas con RAG. Cuerpo: { "knowledge_base_id": "uuid" }

DELETE /api/agents/{id}/knowledge-bases/{kid}

Desvincular una base de conocimiento de un agente.

POST /api/agents/{id}/mcp-servers

Vincular un servidor MCP a un agente para herramientas extendidas. Cuerpo: { "activation_id": "uuid" }

DELETE /api/agents/{id}/mcp-servers/{activationId}

Desvincular un servidor MCP de un agente.

GET /api/agents/{id}/messages

Recuperar el historial de conversaciones de un agente.

Parámetro Tipo Descripción
limitquery integer Número de mensajes a devolver. Por defecto: 25, máx.: 100
Respuesta
{
  "object": "list",
  "data": [
    {
      "id": "msg-uuid-...",
      "direction": "inbound",
      "content": "How do I reset my password?",
      "external_user_name": "john_doe",
      "cost": 0,
      "model": null,
      "created_at": 1709222400
    },
    {
      "id": "msg-uuid-...",
      "direction": "outbound",
      "content": "Go to Settings > Security > Change Password...",
      "cost": 0.25,
      "model": "claude-sonnet-4-20250514",
      "created_at": 1709222401
    }
  ]
}
Los agentes requieren que la función Agentes esté habilitada en su plan. Los límites del plan se aplican al número de agentes, canales por agente y disparadores por agente.

Canales de Agente

Conecte agentes a plataformas de comunicación. Cada agente soporta un canal por tipo (un bot de Telegram, un bot de Discord).

POST /api/agents/{id}/channels

Agregar un canal de comunicación a un agente.

Cuerpo de la solicitud

Parámetro Tipo Descripción
typerequerido string "telegram" o "discord"
tokenrequerido string Token del bot de Telegram BotFather o Discord Developer Portal (máx. 256)

Ejemplo de solicitud

curl https://app.zubnet.ai/api/agents/550e8400-.../channels \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "telegram",
    "token": "7123456789:AAH..."
  }'
Respuesta (201 Created)
{
  "id": "ch-uuid-...",
  "type": "telegram",
  "status": 1,
  "metadata": {},
  "last_error": null,
  "last_message_at": null,
  "created_at": 1709136000
}
Los tokens de bot se validan contra la API de la plataforma antes de la activación y se cifran en reposo. Para Telegram, se configura automáticamente un webhook. Estado del canal: 0 = inactivo, 1 = activo, 2 = error.
GET /api/agents/{id}/channels

Listar todos los canales conectados a un agente.

DELETE /api/agents/{id}/channels/{channelId}

Eliminar un canal de un agente.

Disparadores de Agente

Automatice las acciones de los agentes con disparadores. Los disparadores programados usan expresiones cron para ejecutarse en horarios específicos; los disparadores de evento se activan en respuesta a eventos externos.

POST /api/agents/{id}/triggers

Crear un disparador automatizado para un agente.

Cuerpo de la solicitud

Parámetro Tipo Descripción
namerequerido string Nombre del disparador (máx. 128)
typerequerido string "scheduled" o "event"
promptrequerido string El prompt enviado al agente cuando se activa el disparador
cron_expressionopcional string Expresión cron (ej. "0 9 * * 1-5" para días laborales a las 9am)
timezoneopcional string Zona horaria IANA para la evaluación cron. Por defecto: "UTC"
channel_idopcional string Canal al cual enviar la salida del disparador

Ejemplo: Disparador de resumen diario

curl https://app.zubnet.ai/api/agents/550e8400-.../triggers \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Daily Summary",
    "type": "scheduled",
    "prompt": "Summarize the key metrics for today and send them to the team.",
    "cron_expression": "0 18 * * 1-5",
    "timezone": "America/Mexico_City"
  }'
Respuesta (201 Created)
{
  "id": "tr-uuid-...",
  "name": "Daily Summary",
  "type": "scheduled",
  "status": 1,
  "cron_expression": "0 18 * * 1-5",
  "timezone": "America/Mexico_City",
  "prompt": "Summarize the key metrics for today...",
  "channel_id": null,
  "last_run_at": null,
  "next_run_at": 1709236800,
  "run_count": 0,
  "created_at": 1709136000
}
GET /api/agents/{id}/triggers

Listar todos los disparadores de un agente.

PUT /api/agents/{id}/triggers/{triggerId}

Actualizar un disparador. Todos los campos son opcionales. Establezca status a 0 para desactivar o 1 para activar.

DELETE /api/agents/{id}/triggers/{triggerId}

Eliminar un disparador.

Los disparadores programados se ejecutan de forma asíncrona a través de una cola de mensajes. Cada ejecución verifica que el agente esté activo y que el espacio de trabajo tenga créditos suficientes antes del procesamiento.

Espacios de Trabajo

Los espacios de trabajo son la unidad organizativa de su equipo. Cada espacio tiene su propio saldo de créditos, suscripción, claves API y miembros. Gestione espacios, invite miembros y realice seguimiento del uso.

POST /api/workspaces

Crear un nuevo espacio de trabajo.

Parámetro Tipo Descripción
namerequerido string Nombre del espacio de trabajo (máx. 50 caracteres)
Respuesta (201 Created)
{
  "id": "550e8400-...",
  "name": "Mi Equipo",
  "subscription": null,
  "api_spending_limit": null,
  "api_spending_current": 0,
  "owner": { "id": "...", "email": "..." },
  "created_at": "2026-03-01T12:00:00Z"
}
POST /api/workspaces/{id}

Actualizar la configuración de un espacio de trabajo. Requiere permiso de gestión.

Parámetro Tipo Descripción
nameopcional string Nombre del espacio (máx. 50 caracteres)
api_spending_limitopcional number Límite de gasto API mensual (null para ilimitado)
{provider}_api_keyopcional string Clave API BYOK para un proveedor (ej. openai_api_key, anthropic_api_key)
DELETE /api/workspaces/{id}

Eliminar un espacio de trabajo. Requiere permiso de gestión.

POST /api/workspaces/{id}/invitations

Invitar a un usuario a unirse al espacio por correo electrónico. Máximo 20 invitaciones pendientes por espacio.

Parámetro Tipo Descripción
emailrequerido string Dirección de correo del usuario a invitar
DELETE /api/workspaces/{id}/invitations/{invitationId}

Cancelar una invitación pendiente.

DELETE /api/workspaces/{id}/users/{userId}

Eliminar un miembro del espacio, o abandonar el espacio usando su propio ID de usuario.

GET /api/workspaces/{id}/logs/usage

Listar estadísticas de uso agregadas. Paginación por cursor.

GET /api/workspaces/{id}/logs/usage/items

Listar entradas de uso detalladas (elementos completados con costo > 0). Cada entrada incluye tipo, modelo, título, costo y marca de tiempo.

GET /api/workspaces/{id}/logs/usage/items/count

Obtener el total de elementos de uso.

Los endpoints de uso y gestión de espacios requieren permiso de gestión del espacio (propietario o admin).

Conversaciones

Las conversaciones agrupan mensajes de chat en sesiones. Cree primero una conversación y luego envíe mensajes. Las conversaciones también se pueden gestionar a través de la API de Biblioteca usando el tipo conversations.

POST /api/ai/conversations

Crear una nueva conversación. Retorna el objeto conversación con una lista de mensajes vacía.

Respuesta
{
  "object": "conversation",
  "id": "550e8400-...",
  "title": null,
  "cost": 0,
  "messages": [],
  "created_at": "2026-03-01T12:00:00Z"
}
POST /api/ai/conversations/{id}/messages

Enviar un mensaje a una conversación y recibir una respuesta de IA vía Server-Sent Events (SSE). Consulte la sección Completaciones de Chat para detalles del formato SSE.

Cuerpo de la Solicitud

Parámetro Tipo Descripción
modelrequerido string Modelo a utilizar para la respuesta
contentopcional string Texto del mensaje
assistant_idopcional string UUID de un asistente a utilizar para este mensaje
parent_idopcional string UUID de un mensaje padre (para conversaciones ramificadas)
fileopcional file Archivo adjunto (imágenes, documentos, audio/video — máx. 25MB)
recordingopcional file Grabación de voz (mp3, wav, webm, ogg — máx. 10MB)

Ejemplo de Solicitud

curl https://app.zubnet.ai/api/ai/conversations/550e8400-.../messages \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4.1",
    "content": "Explique la computación cuántica en términos simples"
  }'
Los mensajes se transmiten vía SSE. Use multipart/form-data al subir archivos. Para listar o eliminar conversaciones, use la API de Biblioteca con tipo conversations.

Cuenta

Gestione su perfil de usuario y genere claves API programáticamente.

PUT /api/account

Actualizar su información de perfil.

Parámetro Tipo Descripción
first_nameopcional string Nombre (máx. 50 caracteres)
last_nameopcional string Apellido (máx. 50 caracteres)
languageopcional string Código de idioma preferido (ej. "en", "es")
preferencesopcional object Configuración de preferencias del usuario
POST /api/account/rest-api-keys

Generar una nueva clave API. Requiere confirmación de contraseña. La clave completa se muestra solo una vez en esta respuesta — guárdela de forma segura.

Parámetro Tipo Descripción
current_passwordrequerido string Su contraseña actual
Respuesta
{
  "id": "550e8400-...",
  "first_name": "Jane",
  "last_name": "Doe",
  "email": "jane@example.com",
  "api_key": "zub_live_a1b2c3d4e5f6..."
}
El valor de api_key se muestra completo solo en esta respuesta. Las llamadas posteriores devuelven una versión enmascarada. Trátela como una contraseña.

Facturación

Explore los planes disponibles, consulte el historial de pedidos, inicie un pago y gestione suscripciones.

GET /api/billing/plans

Listar los planes de suscripción disponibles.

Parámetro Tipo Descripción
billing_cycleopcional string Filtrar por ciclo de facturación
GET /api/billing/orders

Listar los pedidos del espacio de trabajo actual. Paginación por cursor.

Parámetro Tipo Descripción
statusopcional string Filtrar por estado del pedido
billing_cycleopcional string Filtrar por ciclo de facturación
POST /api/billing/checkout

Iniciar un pago para un plan de suscripción o compra de créditos. Requiere permiso de gestión del espacio.

Parámetro Tipo Descripción
idopcional string UUID del plan (requerido si no hay amount)
amountopcional integer Monto de compra de créditos en centavos (mín. 1000, requerido si no hay id)
gatewayopcional string Pasarela de pago: stripe o paypal
DELETE /api/billing/subscription

Cancelar la suscripción del espacio de trabajo actual. Requiere permiso de gestión.

Reportes de Contenido

Reportar contenido inapropiado o que viola las políticas en la biblioteca pública.

POST /api/content-reports

Enviar un reporte de contenido. Cada usuario solo puede reportar un elemento dado una vez.

Parámetro Tipo Descripción
item_idrequerido string UUID del elemento de biblioteca a reportar
reasonrequerido integer Código de razón: 0 (spam), 1 (acoso), 2 (violencia), 3 (contenido sexual), 4 (otro)
descriptionopcional string Detalles adicionales (máx. 2000 caracteres)
Respuesta (201 Created)
{
  "id": "550e8400-e29b-41d4-a716-446655440000"
}
Los reportes duplicados (mismo usuario + mismo elemento) retornan un error 409 Conflict.

Errores

La API usa códigos de estado HTTP estándar y devuelve mensajes de error detallados.

Código Descripción
400 Solicitud Incorrecta — Parámetros inválidos
401 No Autorizado — Clave API inválida o faltante
403 Prohibido — Créditos insuficientes o modelo no disponible en tu plan
404 No Encontrado — Modelo o recurso no encontrado
413 Carga Demasiado Grande — El archivo excede el límite de tamaño
429 Demasiadas Solicitudes — Límite de solicitudes excedido
500 Error Interno del Servidor
503 Servicio No Disponible — Sobrecarga temporal
Formato de Respuesta de Error
{
  "error": {
    "message": "Invalid API key provided",
    "type": "authentication_error",
    "code": "invalid_api_key"
  }
}

Límites de Solicitud

Los límites de solicitud varían según el plan. Los encabezados se incluyen en cada respuesta:

Encabezado Descripción
X-RateLimit-Limit Solicitudes permitidas por minuto
X-RateLimit-Remaining Solicitudes restantes en la ventana actual
X-RateLimit-Reset Marca de tiempo Unix cuando se restablece el límite

Si alcanzas un límite de solicitudes, espera hasta el momento de restablecimiento o contáctanos para aumentar tus límites.

¿Necesitas Ayuda?

Estamos Aquí para Ti

¿Preguntas sobre la API? Consulta nuestras FAQ o contáctanos directamente.