Documentação da API

Introdução

A API da Zubnet oferece acesso programático a 361 modelos de IA para geração de texto, imagem, vídeo, música, voz e código. É totalmente compatível com a especificação da API OpenAI — se você já usa a OpenAI, pode mudar para a Zubnet alterando sua URL base e chave de API.

Base URL

https://api.zubnet.com/v1

Início 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!"}]
  }'
# Usando Python com o SDK da OpenAI
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)

Autenticação

Todas as requisições da API exigem autenticação via token Bearer no cabeçalho Authorization.

Authorization: Bearer YOUR_API_KEY

Você pode gerar chaves de API nas suas account settings. Mantenha suas chaves seguras — elas concedem acesso total à sua conta.

Usando Suas Próprias Chaves de Provedor (BYOK)

Você pode usar suas próprias chaves de API de provedores compatíveis. Adicione-as nas configurações do seu espaço de trabalho e elas serão usadas automaticamente para requisições a esses provedores — sem custo adicional. BYOK está disponível nos planos que o suportam.

Quando uma chave BYOK está configurada para um provedor, ela tem prioridade sobre a chave da plataforma. Nenhuma alteração é necessária nas suas requisições de API — a resolução da chave é totalmente transparente.

Provedores BYOK Compatíveis

Anthropic Google Gemini DeepSeek Mistral Cohere AI21 Nvidia Alibaba Moonshot MiniMax Sambanova Zhipu ElevenLabs Speechify Hume Cartesia Resemble StabilityAI Black Forest Labs Ideogram HiDream PixVerse Vidu Kling Suno ByteDance

Modelos

GET /v1/models

List all available models.

curl https://api.zubnet.com/v1/models \
  -H "Authorization: Bearer $ZUBNET_API_KEY"
Response
{
  "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"
    },
    ...
  ]
}

Completions de Chat

POST /v1/chat/completions

Crie uma completion de chat. Este é o endpoint principal para geração de texto, compatível com o formato de chat completions da OpenAI.

Corpo da Requisição

Parâmetro Tipo Descrição
modelrequired string ID do modelo a usar (ex.: "claude-sonnet-4-20250514", "deepseek-chat", "gemini-2.5-pro")
messagesrequired array Array de objetos de mensagem com role and content
temperatureoptional number Sampling temperature (0-2). Default: 0.7
max_tokensoptional integer Máximo de tokens a gerar (1-128000). Padrão: 4096
streamoptional boolean Transmitir respostas via SSE. Padrão: true
top_poptional number Nucleus sampling parameter (0-1). Default: 1
frequency_penaltyoptional number Penalidade de frequência (-2 a 2). Padrão: 0
presence_penaltyoptional number Penalidade de presença (-2 a 2). Padrão: 0
stopoptional string/array Stop sequences

Exemplo de Requisição

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 é o capital of France?"}
    ],
    "temperature": 0.7,
    "max_tokens": 150
  }'
Response
{
  "id": "chatcmpl-abc123",
  "object": "chat.completion",
  "created": 1699900000,
  "model": "claude-sonnet-4-20250514",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "A capital da França é Paris."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 25,
    "completion_tokens": 8,
    "total_tokens": 33
  }
}

Streaming

Quando stream é true, a resposta é entregue como Server-Sent Events (SSE). Cada evento tem um tipo nomeado e um payload JSON:

Evento Descrição
token Um token/delta de texto do modelo
reasoning-token Um token de raciocínio estendido (para modelos que suportam reasoning)
call Uma chamada de ferramenta/função com nome e parâmetros
message Objeto de mensagem final completo (enviado quando o stream termina)
error Error message if streaming fails
// SSE event format
event: token
data: {"data": "Hello", "attributes": {}}

event: token
data: {"data": " world", "attributes": {}}

event: message
data: {"id": "msg-uuid", "content": "Hello world", ...}

Geração de Código

POST /api/ai/completions/code

Gere código a partir de um prompt em linguagem natural. Retorna uma resposta em streaming via Server-Sent Events (SSE).

Corpo da Requisição

Parâmetro Tipo Descrição
promptrequired string Descrição em linguagem natural do código a gerar
languagerequired string Programming language (e.g., "python", "javascript", "rust")
temperatureoptional number Temperatura de amostragem (0-2)
max_tokensoptional integer Máximo de tokens a gerar (1-128000)

Exemplo de Requisição

curl https://zubnet.com/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 via SSE. Você receberá chunk eventos com conteúdo incremental, seguidos por um document evento final com o código gerado completo.
Final Response Object
{
  "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): ..."
}

Geração de Imagens

POST /v1/images/generations

Gere imagens a partir de prompts de texto usando modelos do FLUX, Stable Diffusion, Ideogram e mais.

Modelos Disponíveis

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

Corpo da Requisição

Parâmetro Tipo Descrição
modelrequired string Modelo de imagem a usar
promptrequired string Descrição textual da imagem a gerar
noptional integer Número de imagens a gerar. Padrão: 1
sizeoptional string Image size (e.g., "1024x1024", "1792x1024")
response_formatoptional string "url" ou "b64_json". Padrão: "url"

Exemplo de Requisição

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"
  }'
Response
{
  "created": 1699900000,
  "data": [
    {
      "url": "https://cdn.zubnet.com/files/abc123.png",
      "revised_prompt": "A serene mountain lake..."
    }
  ]
}

Geração de Vídeo

POST /api/ai/videos

Gere vídeos a partir de prompts de texto ou imagens. Suporta fluxos de texto para vídeo, imagem para vídeo e vídeo para vídeo.

Modelos Disponíveis

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

Corpo da Requisição

Parâmetro Tipo Descrição
modelrequired string Modelo de vídeo a usar
promptrequired* string Descrição textual do vídeo. *Não obrigatório para modelos de lip-sync ou upscale
framesoptional file[] Imagens de entrada para imagem-para-vídeo. Máx. 10MB cada (jpg, png, webp)
videooptional file Vídeo de entrada para vídeo-para-vídeo. Máx. 100MB (mp4, webm, mov)
audiooptional file Arquivo de áudio para modelos de lip-sync. Máx. 25MB
aspect_ratiooptional string Aspect ratio (e.g., "16:9", "9:16", "1:1")
durationoptional integer Duração do vídeo em segundos

Exemplo: Texto para Vídeo

curl https://zubnet.com/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
  }'

Exemplo: Imagem para Vídeo

curl https://zubnet.com/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"
A geração de vídeo é assíncrona. A resposta inclui um state field (“processing”, “completed”, “failed”) and a progress de porcentagem. Consulte o endpoint da biblioteca para verificar o status de conclusão.
Response
{
  "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"
}

Compreensão de Vídeo

Analise conteúdo de vídeo usando IA. Envie uma URL de vídeo para análise e consulte os resultados. Suporta vários tipos de análise.

POST /api/ai/video-understanding

Envie um vídeo para análise com IA. Retorna um ID de tarefa que pode ser consultado para resultados.

Corpo da Requisição

Parâmetro Tipo Descrição
video_urlrequired string URL HTTPS pública do vídeo a analisar
typeoptional string Analysis type: summary (default), topics, chapters, or highlights

Exemplo de Requisição

curl https://zubnet.com/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"
  }'
Response
{
  "job_id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "queued"
}
GET /api/ai/video-understanding/{jobId}

Verifique o status de uma tarefa de análise de vídeo.

Response (completed)
{
  "status": "completed",
  "result": {
    "type": "summary",
    "content": "The video shows a product demonstration..."
  }
}
As URLs de vídeo devem ser links HTTPS acessíveis publicamente. URLs privadas/internas são rejeitadas por segurança. Os resultados são armazenados em cache por 1 hora.

Composição Musical

POST /api/ai/compositions

Gere músicas originais a partir de descrições textuais, letras ou tags de estilo.

Modelos Disponíveis

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

Corpo da Requisição

Parâmetro Tipo Descrição
modelrequired string Modelo de música a usar
promptoptional string Descrição da música ou letras a definir
tagsoptional string Tags de gênero e estilo (ex.: "lo-fi, chill, jazz")
instrumentaloptional boolean Gerar apenas instrumental (sem vocais). Padrão: false

Exemplo de Requisição

curl https://zubnet.com/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
  }'
Os modelos Suno normalmente retornam 2 variantes de composição por requisição. Lyria retorna um único clipe de 30 segundos a 48kHz.
Response
[
  {
    "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.com/files/abc123.mp3"
    }
  },
  {
    "object": "composition",
    "id": "550e8400-e29b-41d4-a716-446655440001",
    // ... second variant
  }
]

Efeitos Sonoros

POST /api/ai/sound-effects

Gere efeitos sonoros a partir de descrições textuais.

Corpo da Requisição

Parâmetro Tipo Descrição
modelrequired string Modelo de efeito sonoro a usar
promptrequired string Descrição do efeito sonoro a gerar

Exemplo de Requisição

curl https://zubnet.com/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"
  }'
Response
{
  "object": "sound_effect",
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "model": "sound-effect-model",
  "cost": 1,
  "output_file": {
    "url": "https://cdn.zubnet.com/files/abc123.mp3"
  }
}

Texto para Fala

POST /v1/audio/speech

Converta texto em áudio de fala natural usando vozes da ElevenLabs, Cartesia, Speechify e mais.

Parâmetro Tipo Descrição
modelrequired string TTS model (e.g., "tts-1", "tts-1-hd", "elevenlabs")
inputrequired string Texto para converter em fala (máx. 5000 caracteres)
voicerequired string ID da voz a usar (ex.: "alloy", "echo", "nova" ou um ID de voz personalizado)
response_formatoptional string Audio format: mp3, opus, aac, flac. Default: mp3

Exemplo de Requisição

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

Transcrição

POST /v1/audio/transcriptions

Transcreva áudio para texto.

Parâmetro Tipo Descrição
modelrequired string Transcription model (e.g., "whisper-1")
filerequired file Arquivo de áudio para transcrever. Máx. 25MB (mp3, mp4, wav, webm, ogg, flac)
languageoptional string Language code (e.g., "en", "fr", "es")

Exemplo de Requisição

curl https://api.zubnet.com/v1/audio/transcriptions \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -F "model=whisper-1" \
  -F "file=@recording.mp3"
Response
{
  "object": "transcription",
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "model": "whisper-1",
  "content": "Olá, esta é uma gravação de teste..."
}

Isolamento de Voz

POST /api/ai/isolated-voices

Extraia vocais limpos do áudio, removendo ruído de fundo e música. Powered by ElevenLabs.

Parâmetro Tipo Descrição
filerequired file Audio file. Max 25MB (mp3, mp4, wav, m4a, webm, ogg, flac)

Exemplo de Requisição

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

Separação de Faixas

POST /api/ai/stem-separations

Separe o áudio em faixas individuais (vocais, bateria, baixo, guitarra, piano, outros). Powered by ElevenLabs.

Parâmetro Tipo Descrição
filerequired file Audio file. Max 25MB (mp3, mp4, wav, m4a, webm, ogg, flac)
stem_variationoptional string Separation mode. Default: "six_stems_v1" (vocals, drums, bass, guitar, piano, other)

Exemplo de Requisição

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

Vozes

Crie e gerencie vozes personalizadas para geração de texto para fala.

POST /api/voices

Crie uma voz personalizada fazendo upload de amostras de áudio.

GET /api/voices

Liste todas as vozes disponíveis no seu espaço de trabalho, incluindo vozes personalizadas que você criou.

PUT /api/voices/{id}

Update a custom voice (name, settings).

DELETE /api/voices/{id}

Delete a custom voice.

IDs de vozes personalizadas podem ser usados no voice parâmetro do endpoint de Texto para Fala.

Embeddings

POST /v1/embeddings

Crie embeddings de texto para busca semântica e similaridade.

Parâmetro Tipo Descrição
modelrequired string Embedding model (e.g., "text-embedding-3-small")
inputrequired string/array Texto para gerar embedding (string ou array de strings)

Exemplo de Requisição

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 Conhecimento

Crie e gerencie bases de conhecimento para geração aumentada por recuperação (RAG). Faça upload de documentos (PDF, DOCX, TXT, Markdown) ou adicione URLs da web e texto bruto, e depois consulte-os nas suas completions de chat.

POST /api/knowledge-bases

Create a new knowledge base.

Corpo da Requisição

Parâmetro Tipo Descrição
namerequired string Nome da base de conhecimento
descriptionoptional string Descrição da base de conhecimento

Exemplo: Criar uma Base de Conhecimento

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

Liste todas as bases de conhecimento no seu espaço de trabalho.

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

Obtenha detalhes de uma base de conhecimento específica, incluindo seus documentos.

DELETE /api/knowledge-bases/{id}

Delete a knowledge base and all its documents.

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

Ingira um documento em uma base de conhecimento. Suporta upload de arquivos, URLs e texto bruto.

Corpo da Requisição

Parâmetro Tipo Descrição
fileoption 1 file Multipart file upload (PDF, DOCX, TXT, MD — max 10MB)
titlerequired string Título do documento (obrigatório para tipos URL e texto)
typeoption 2/3 string "url" ou "text" (para ingestão sem arquivo)
urloption 2 string URL para buscar e ingerir (quando o tipo é "url")
contentoption 3 string Conteúdo de texto bruto para ingerir (quando o tipo é "text")

Exemplo: Ingerir um Arquivo

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

Exemplo: Ingerir uma URL

curl https://zubnet.com/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.com/developers.html"
  }'

Exemplo: Ingerir Texto Bruto

curl https://zubnet.com/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

Liste todos os documentos em uma base de conhecimento.

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

Exclua um documento específico de uma base de conhecimento.

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

Leia o conteúdo de texto extraído de um documento específico.

Reranking

POST /v1/reranking

Reordene uma lista de documentos por relevância a uma consulta. Útil para melhorar resultados de busca, pipelines RAG e sistemas de recomendação.

Modelos Disponíveis

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

Corpo da Requisição

Parâmetro Tipo Descrição
modelrequired string Modelo de reranking a usar
queryrequired string A consulta de busca para classificar documentos
documentsrequired array Array de strings de documentos para reordenar
top_noptional integer Número de resultados principais a retornar. Padrão: todos

Exemplo de Requisição

curl https://api.zubnet.com/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
  }'
Response
{
  "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"
}
Os resultados são ordenados por pontuação de relevância em ordem decrescente. O index campo refere-se à posição de cada documento no array de entrada original.

Biblioteca

A biblioteca é onde todo o conteúdo gerado fica — imagens, vídeos, composições, documentos de código, transcrições e mais. Use-a para listar itens, verificar o status de geração assíncrona, atualizar metadados e gerenciar seu conteúdo.

GET /api/library/{type}

Liste itens da sua biblioteca por tipo de conteúdo.

Tipos de Conteúdo

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

Parâmetros de Consulta

Parâmetro Tipo Descrição
limitoptional integer Results per page (max 100)
starting_afteroptional string Cursor para paginação para frente (UUID do item)
ending_beforeoptional string Cursor para paginação para trás (UUID do item)
sortoptional string Campo e direção de ordenação (ex.: "created_at:desc")
queryoptional string Full-text search (max 255 characters)
modeloptional string Filtrar por modelo usado para geração
Response
{
  "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.com/files/abc123.mp4",
        "size": 8421376,
        "extension": "mp4"
      },
      "created_at": "2026-03-01T12:00:00Z"
    },
    ...
  ]
}
GET /api/library/{type}/{id}

Obtenha um único item da biblioteca por ID. Este é o endpoint principal para polling async generation status.

Estados de Geração

Estado Valor Descrição
draft 0 Ainda não enviado
queued 1 Aguardando processamento
processing 2 Currently generating
completed 3 Done — output_file está disponível
failed 4 Generation failed

Padrão de Consulta

# 1. Start async generation
curl -X POST https://zubnet.com/api/ai/videos \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "veo-3.1-generate-001", "prompt": "A coral reef"}'
# Returns: {"id": "550e8400-...", "state": 1, ...}

# 2. Consultar conclusão
curl https://zubnet.com/api/library/videos/550e8400-... \
  -H "Authorization: Bearer $ZUBNET_API_KEY"
# Returns: {"state": 2, "progress": 45, ...}  (still processing)
# Returns: {"state": 3, "progress": 100, "output_file": {"url": "..."}}  (done!)
A paginação é baseada em cursor. Use o id do último item em starting_after para obter a próxima página. Não há parâmetros de offset/página.
POST /api/library/{type}/{id}

Update a library item's metadata.

Parâmetro Tipo Descrição
titleoptional string Item title
visibilityoptional integer 0 (privado) ou 1 (público)
is_favoritedoptional boolean Adicionar ou remover dos favoritos
metaoptional object Custom metadata (genre, mood, tags, description, author, etc.)
DELETE /api/library/{type}/{id}

Delete a library item and its associated files.

GET /api/library/{type}/count

Obtenha a contagem total de itens para um tipo de conteúdo. Suporta os mesmos query and model filtros do endpoint de listagem.

Assistentes

Assistentes são presets de chat reutilizáveis com nome personalizado, modelo, prompt de sistema e configurações. Use-os para criar personas de IA especializadas para diferentes tarefas.

POST /api/assistants

Create a new assistant.

GET /api/assistants

Liste todos os assistentes no seu espaço de trabalho.

PUT /api/assistants/{id}

Update an assistant's configuration (name, model, system prompt, settings).

DELETE /api/assistants/{id}

Delete an assistant.

Loja MCP

Navegue e ative servidores MCP (Model Context Protocol) para dar aos seus agentes capacidades estendidas de ferramentas — desde busca na web e acesso a dados até execução de código e integrações de terceiros.

GET /api/mcp-store/servers

Navegue pelo catálogo de servidores MCP.

Parâmetros de Consulta

Parâmetro Tipo Descrição
categoryoptional string Filtrar por categoria (search, data, developer, infrastructure, communication, commerce, creative, productivity, social, utilities)
queryoptional string Buscar por nome ou descrição
Response
{
  "object": "list",
  "data": [
    {
      "id": "550e8400-...",
      "name": "GitHub",
      "description": "Access GitHub repositories, issues, and pull requests",
      "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

Ative um servidor MCP para o seu espaço de trabalho. Forneça valores de configuração (chaves de API, etc.) conforme definido pelo config_schema.

Corpo da Requisição

Parâmetro Tipo Descrição
server_idrequired string UUID do servidor MCP a ativar
configoptional object Valores de configuração correspondentes ao config_schema do servidor

Exemplo de Requisição

curl https://zubnet.com/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"
    }
  }'
Response (201 Created)
{
  "id": "act-uuid-...",
  "server_id": "550e8400-...",
  "status": 1,
  "config": {
    "api_key": "••••••••"
  },
  "server": {
    "name": "GitHub",
    ...
  },
  "created_at": "2026-03-01T12:00:00Z"
}
Campos secretos na configuração são mascarados nas respostas da API. Cada espaço de trabalho pode ativar um determinado servidor apenas uma vez. O id é o activation_id que você usa ao vincular servidores MCP a agentes.
GET /api/mcp-store/activations

Liste todos os servidores MCP ativados no seu espaço de trabalho.

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

Atualize a configuração ou status de uma ativação.

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

Desative um servidor MCP do seu espaço de trabalho.

Agentes

Crie e gerencie agentes de IA autônomos que operam em canais de comunicação. Os agentes podem responder a mensagens no Telegram e Discord, executar com gatilhos agendados e aproveitar bases de conhecimento e servidores MCP para capacidades aprimoradas.

POST /api/agents

Create a new agent.

Corpo da Requisição

Parâmetro Tipo Descrição
namerequired string Agent name (max 64 characters)
modelrequired string ID do modelo a usar (ex.: "claude-sonnet-4-20250514", "deepseek-chat")
system_promptoptional string Prompt de sistema personalizado definindo o comportamento e personalidade do agente
modeoptional string "quick" ou "advanced". Default: "quick"
avataroptional string Avatar URL (max 512 characters)

Exemplo de Requisição

curl https://zubnet.com/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"
  }'
Response (201 Created)
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "name": "Support Bot",
  "slug": "support-bot",
  "avatar": null,
  "model": "claude-sonnet-4-20250514",
  "system_prompt": "Você é um agente de suporte amigável...",
  "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.com/files/avatar.jpg"
  },
  "channels": []
}
GET /api/agents

Liste todos os agentes no espaço de trabalho. Suporta paginação e filtragem.

Parâmetro Tipo Descrição
limitquery integer Results per page. Default: 25
cursorquery string Pagination cursor
sortquery string "name", "created_at" ou "last_active_at". Padrão: "created_at"
directionquery string "asc" ou "desc"
statusquery integer Filtrar por status: 0 (inativo), 1 (ativo), 2 (pausado)
Response
{
  "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}

Obtenha detalhes completos de um agente específico, incluindo seus canais, servidores MCP vinculados e bases de conhecimento.

PUT /api/agents/{id}

Atualize um agente. Todos os campos são opcionais — apenas os campos fornecidos são alterados.

Corpo da Requisição

Parâmetro Tipo Descrição
nameoptional string Agent name (max 64)
modeloptional string Model ID
system_promptoptional string|null Prompt de sistema (defina como null para limpar)
statusoptional integer 0 (inativo), 1 (ativo) ou 2 (pausado)
modeoptional string "quick" ou "advanced"
permissionsoptional object Agent permissions (see below)

Objeto de Permissões

{
  "permissions": {
    "time_windows": [
      {
        "days": [1, 2, 3, 4, 5],  // 0=Sun, 6=Sat
        "timezone": "America/New_York",
        "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}

Exclua um agente. Isso também remove todos os seus canais, gatilhos, mensagens e integrações.

Integrações

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

Vincule uma base de conhecimento a um agente para respostas com RAG. Body: { "knowledge_base_id": "uuid" }

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

Desvincule uma base de conhecimento de um agente.

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

Vincule um servidor MCP a um agente para uso estendido de ferramentas. Body: { "activation_id": "uuid" }

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

Desvincule um servidor MCP de um agente.

GET /api/agents/{id}/messages

Recupere o histórico de conversas de um agente.

Parâmetro Tipo Descrição
limitquery integer Número de mensagens a retornar. Padrão: 25, máx.: 100
Response
{
  "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": "Vá em Configurações > Segurança > Alterar Senha...",
      "cost": 0.25,
      "model": "claude-sonnet-4-20250514",
      "created_at": 1709222401
    }
  ]
}
Os agentes requerem que o recurso Agentes esteja habilitado no seu plano. Os limites do plano se aplicam ao número de agentes, canais por agente e gatilhos por agente.

Canais do Agente

Conecte agentes a plataformas de comunicação. Cada agente suporta um canal por tipo (um bot Telegram, um bot Discord).

POST /api/agents/{id}/channels

Adicione um canal de comunicação a um agente.

Corpo da Requisição

Parâmetro Tipo Descrição
typerequired string "telegram" ou "discord"
tokenrequired string Token do bot do Telegram BotFather ou Portal de Desenvolvedor Discord (máx. 256)

Exemplo de Requisição

curl https://zubnet.com/api/agents/550e8400-.../channels \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "telegram",
    "token": "7123456789:AAH..."
  }'
Response (201 Created)
{
  "id": "ch-uuid-...",
  "type": "telegram",
  "status": 1,
  "metadata": {},
  "last_error": null,
  "last_message_at": null,
  "created_at": 1709136000
}
Os tokens de bot são validados com a API da plataforma antes da ativação e criptografados em repouso. Para Telegram, um webhook é configurado automaticamente. Status do canal: 0 = inativo, 1 = ativo, 2 = erro.
GET /api/agents/{id}/channels

Liste todos os canais conectados a um agente.

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

Remova um canal de um agente.

Gatilhos do Agente

Automatize ações do agente com gatilhos. Gatilhos agendados usam expressões cron para executar em horários específicos; gatilhos de evento disparam em resposta a eventos externos.

POST /api/agents/{id}/triggers

Crie um gatilho automatizado para um agente.

Corpo da Requisição

Parâmetro Tipo Descrição
namerequired string Trigger name (max 128)
typerequired string "scheduled" ou "event"
promptrequired string O prompt enviado ao agente quando o gatilho dispara
cron_expressionoptional string Agendamento cron (ex.: "0 9 * * 1-5" para dias úteis às 9h)
timezoneoptional string Fuso horário IANA para avaliação cron. Padrão: "UTC"
channel_idoptional string Canal para enviar a saída do gatilho

Exemplo: Gatilho de Resumo Diário

curl https://zubnet.com/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/New_York"
  }'
Response (201 Created)
{
  "id": "tr-uuid-...",
  "name": "Daily Summary",
  "type": "scheduled",
  "status": 1,
  "cron_expression": "0 18 * * 1-5",
  "timezone": "America/New_York",
  "prompt": "Resuma as métricas principais de hoje...",
  "channel_id": null,
  "last_run_at": null,
  "next_run_at": 1709236800,
  "run_count": 0,
  "created_at": 1709136000
}
GET /api/agents/{id}/triggers

Liste todos os gatilhos de um agente.

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

Atualize um gatilho. Todos os campos são opcionais. Defina status como 0 para desabilitar ou 1 para habilitar.

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

Delete a trigger.

Gatilhos agendados são executados de forma assíncrona via fila de mensagens. Cada execução verifica se o agente está ativo e se o espaço de trabalho tem créditos suficientes antes do processamento.

Espaços de Trabalho

Espaços de trabalho são a unidade organizacional da sua equipe. Cada espaço de trabalho tem seu próprio saldo de créditos, assinatura, chaves de API e membros. Gerencie espaços de trabalho, convide membros da equipe e acompanhe o uso.

POST /api/workspaces

Create a new workspace.

Parâmetro Tipo Descrição
namerequired string Workspace name (max 50 characters)
Response (201 Created)
{
  "id": "550e8400-...",
  "name": "My Team",
  "subscription": null,
  "api_spending_limit": null,
  "api_spending_current": 0,
  "owner": { "id": "...", "email": "..." },
  "created_at": "2026-03-01T12:00:00Z"
}
POST /api/workspaces/{id}

Update a workspace's settings. Requires workspace manage permission.

Parâmetro Tipo Descrição
nameoptional string Workspace name (max 50 characters)
api_spending_limitoptional number Limite mensal de gastos com API (null para ilimitado)
{provider}_api_keyoptional string Chave de API BYOK para um provedor (ex.: openai_api_key, anthropic_api_key)
DELETE /api/workspaces/{id}

Delete a workspace. Requires workspace manage permission.

POST /api/workspaces/{id}/invitations

Convide um usuário para entrar no espaço de trabalho por e-mail. Máximo de 20 convites pendentes por espaço de trabalho.

Parâmetro Tipo Descrição
emailrequired string Endereço de e-mail do usuário a convidar
DELETE /api/workspaces/{id}/invitations/{invitationId}

Cancel a pending invitation.

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

Remova um membro do espaço de trabalho, ou saia do espaço de trabalho usando seu próprio ID de usuário.

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

Liste estatísticas de uso agregadas do espaço de trabalho. Suporta paginação baseada em cursor.

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

Liste entradas de uso detalhadas (itens da biblioteca concluídos com custo > 0). Cada entrada inclui tipo, modelo, título, custo e timestamp.

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

Obtenha a contagem total de itens de uso.

Usage and workspace management endpoints require workspace manage permissão (proprietário ou administrador do espaço de trabalho).

Conversas

Conversas agrupam mensagens de chat em sessões. Crie uma conversa primeiro e depois envie mensagens para ela. As conversas também podem ser gerenciadas através da Biblioteca API usando o conversations content type.

POST /api/ai/conversations

Crie uma nova conversa. Retorna o objeto de conversa com uma lista de mensagens vazia.

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

Envie uma mensagem para uma conversa e receba uma resposta de IA via Server-Sent Events (SSE). Veja a Chat Completions seção para detalhes do formato de eventos SSE.

Corpo da Requisição

Parâmetro Tipo Descrição
modelrequired string Modelo a usar para a resposta
contentoptional string Message text
assistant_idoptional string UUID de um assistente a usar para esta mensagem
parent_idoptional string UUID de uma mensagem pai (para conversas ramificadas)
fileoptional file Attachment (images, documents, audio/video — max 25MB)
recordingoptional file Voice recording (mp3, wav, webm, ogg — max 10MB)

Exemplo de Requisição

curl https://zubnet.com/api/ai/conversations/550e8400-.../messages \
  -H "Authorization: Bearer $ZUBNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4.1",
    "content": "Explain quantum computing in simple terms"
  }'
As mensagens são transmitidas via SSE. Use multipart/form-data ao fazer upload de arquivos. Para listar ou excluir conversas, use a Biblioteca API com tipo conversations.

Conta

Gerencie seu perfil de usuário e gere chaves de API programaticamente.

PUT /api/account

Atualize as informações do seu perfil.

Parâmetro Tipo Descrição
first_nameoptional string First name (max 50 characters)
last_nameoptional string Last name (max 50 characters)
languageoptional string Preferred language code (e.g., "en", "fr")
preferencesoptional object User preference settings
POST /api/account/rest-api-keys

Gere uma nova chave de API. Requer confirmação de senha por segurança. A chave de API completa é retornada apenas uma vez nesta resposta — armazene-a com segurança.

Parâmetro Tipo Descrição
current_passwordrequired string Sua senha atual da conta
Response
{
  "id": "550e8400-...",
  "first_name": "Jane",
  "last_name": "Doe",
  "email": "jane@example.com",
  "api_key": "zub_live_a1b2c3d4e5f6..."
}
The api_key é mostrado completo apenas nesta resposta. Chamadas de API subsequentes retornam uma versão mascarada. Trate-o como uma senha.

Faturamento

Browse available plans, view order history, initiate checkout, and manage subscriptions.

GET /api/billing/plans

List available subscription plans.

Parâmetro Tipo Descrição
billing_cycleoptional string Filtrar por ciclo de faturamento
GET /api/billing/orders

Liste pedidos do espaço de trabalho atual. Suporta paginação baseada em cursor.

Parâmetro Tipo Descrição
statusoptional string Filtrar por status do pedido
billing_cycleoptional string Filtrar por ciclo de faturamento
POST /api/billing/checkout

Inicie um checkout para um plano de assinatura ou compra de créditos. Requer permissão de gerenciamento do espaço de trabalho.

Parâmetro Tipo Descrição
idoptional string UUID do plano para assinar (obrigatório se não houver amount)
amountoptional integer Valor de compra de créditos em centavos (mín. 1000, obrigatório se não houver id)
gatewayoptional string Payment gateway: stripe or paypal
DELETE /api/billing/subscription

Cancele a assinatura atual do espaço de trabalho. Requer permissão de gerenciamento do espaço de trabalho.

Denúncias de Conteúdo

Denuncie conteúdo inadequado ou que viole as políticas na biblioteca pública.

POST /api/content-reports

Envie uma denúncia de conteúdo. Cada usuário pode denunciar um determinado item apenas uma vez.

Parâmetro Tipo Descrição
item_idrequired string UUID do item da biblioteca a denunciar
reasonrequired integer Reason code: 0 (spam), 1 (harassment), 2 (violence), 3 (sexual content), 4 (other)
descriptionoptional string Additional details (max 2000 characters)
Response (201 Created)
{
  "id": "550e8400-e29b-41d4-a716-446655440000"
}
Duplicate reports (same user + same item) return a 409 Conflict error.

Erros

A API usa códigos de status HTTP padrão e retorna mensagens de erro detalhadas.

Código Descrição
400 Bad Request — Invalid parameters
401 Não autorizado — Chave de API inválida ou ausente
403 Proibido — Créditos insuficientes ou modelo não disponível no seu plano
404 Não encontrado — Modelo ou recurso não encontrado
413 Payload Too Large — File exceeds size limit
429 Too Many Requests — Rate limit exceeded
500 Internal Server Error
503 Service Unavailable — Temporary overload
Error Response Format
{
  "error": {
    "message": "Invalid API key provided",
    "type": "authentication_error",
    "code": "invalid_api_key"
  }
}

Limites de Requisição

Os limites de requisição variam por plano. Cabeçalhos são incluídos em cada resposta:

Cabeçalho Descrição
X-RateLimit-Limit Requests allowed per minute
X-RateLimit-Remaining Requisições restantes na janela atual
X-RateLimit-Reset Timestamp Unix de quando o limite é reiniciado

Se você atingir um limite de requisição, aguarde até o momento de reinicialização ou entre em contato conosco para aumentar seus limites.

Precisa de Ajuda?

Estamos Aqui por Você

Dúvidas sobre a API? Confira nosso FAQ ou entre em contato diretamente.