API v1.0.0 KYRA API MASTER

API Reference

Introdução à Kyra API, conceitos e como navegar pela documentação. Encontre aqui guias de início rápido, exemplos práticos e a referência completa de endpoints para integrar a Kyra ao seu produto com confiança.

Guia de Início Rápido

Aprenda o básico para fazer sua primeira requisição em menos de 5 minutos.

Base URL

https://v3.iakyra.com/v1

Começando

Guia rápido para começar a usar a KYRA API Master. Aprenda a autenticar requisições, usar a Base URL e fazer sua primeira chamada à API.

Autenticação

Todas as requisições para a API requerem autenticação via API Key no header Authorization.

BASH
Authorization: Bearer kyra_live_seu_api_key_aqui

Base URL

Todas as requisições devem ser feitas para:

PRODUCTION
https://v3.iakyra.com/v1

Para desenvolvimento: http://localhost:8081/v1

Obter sua API Key

Para obter sua API Key, você precisa ter uma conta com plano Master ativado e API access habilitado. Entre em contato com o suporte para obter acesso.

Exemplo Básico

Aqui está um exemplo completo de como usar a API, desde listar templates até enviar mensagens:

JAVASCRIPT
// 1. Listar templates disponíveis
const templatesResponse = await fetch('https://v3.iakyra.com/v1/templates', {
  headers: {
    'Authorization': 'Bearer sua_api_key_aqui'
  }
});

const { data: templatesData } = await templatesResponse.json();
console.log('Templates disponíveis:', templatesData.templates);

// 2. Escolher um template (exemplo: Análise Postural)
const posturalTemplate = templatesData.templates.find(
  t => t.personaType === 'analise_postural'
);

// 3. Criar um agente usando o template
const createAgent = await fetch('https://v3.iakyra.com/v1/agents', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer sua_api_key_aqui'
  },
  body: JSON.stringify({
    templateId: posturalTemplate.id,
    agentName: 'meu-primeiro-agente'
  })
});

const agentData = await createAgent.json();
const agentId = agentData.data.agentId;

// 4. Criar uma conversa
const createConversation = await fetch('https://v3.iakyra.com/v1/conversations', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer sua_api_key_aqui'
  },
  body: JSON.stringify({
    agentId: agentId,
    title: 'Minha Primeira Conversa'
  })
});

const conversationData = await createConversation.json();
const conversationId = conversationData.data.conversationId;

// 5. Enviar uma mensagem
const sendMessage = await fetch(`https://v3.iakyra.com/v1/conversations/${conversationId}/messages`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer sua_api_key_aqui'
  },
  body: JSON.stringify({
    message: 'Olá! Como posso melhorar minha postura?'
  })
});

const messageResponse = await sendMessage.json();
console.log(messageResponse.data.content);

Templates

GET

Lista todos os templates disponíveis para criação de agentes. Cada template representa um tipo específico de agente com capacidades especializadas.

Endpoint

GET
GET /v1/templates

Exemplo de Requisição

BASH
curl https://v3.iakyra.com/v1/templates \
  -H "Authorization: Bearer sua_api_key_aqui"
JSON
{
  "success": true,
  "data": {
    "templates": [
      {
        "id": "c7ce2f00-a08d-491f-a6a1-7168ca31b532",
        "name": "Análise Postural",
        "description": "Agente especializado em análise postural através de imagens",
        "personaType": "analise_postural"
      }
    ],
    "count": 9
  }
}

Templates Disponíveis

TEMPLATE PERSONA TYPE DESCRIÇÃO
Análise Postural analise_postural Análise postural através de imagens
Plano de Treino plano_treino Criação de planos de treino personalizados
Estratégia Alimentar estrategia_alimentar Desenvolvimento de estratégias nutricionais
Marketing e Vendas marketing_vendas Assistente para marketing e vendas
Consultoria consultoria Agente de consultoria geral
Agente de Corrida agente_corrida Especialista em treinamento de corrida
Análise de Exames analise_exames Análise e interpretação de exames médicos
Social Media social_media Criação de conteúdo para redes sociais

Agentes

POST

Gerencie seus agentes de IA. Crie agentes a partir de templates e delete quando não precisar mais. Cada agente criado é único e independente.

POST /v1/agents

Cria um novo agente de IA a partir de um template. Cada agente é único e independente.

Parâmetros

templateId OBRIGATÓRIO

ID do template do agente que será usado como base. Use GET /v1/templates para listar templates disponíveis.

agentName OPCIONAL

Nome personalizado para o agente. Se não fornecido, será gerado automaticamente.

BASH
curl -X POST https://v3.iakyra.com/v1/agents \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sua_api_key_aqui" \
  -d '{
    "templateId": "c7ce2f00-a08d-491f-a6a1-7168ca31b532",
    "agentName": "meu-agente-personalizado"
  }'

DELETE /v1/agents/:agentId

Deleta um agente permanentemente. O agente será removido da plataforma KYRA AI e do banco de dados.

BASH
curl -X DELETE https://v3.iakyra.com/v1/agents/agent-4e696070-d9cb-45c9-9bad-f4591c90ca0a \
  -H "Authorization: Bearer sua_api_key_aqui"

Conversas

POST

Crie conversas com seus agentes e inclua informações de anamnese para respostas personalizadas.

POST /v1/conversations

Cria uma nova conversa com um agente específico. Você pode opcionalmente incluir dados de anamnese do aluno para que o agente tenha contexto desde o início.

Parâmetros

agentId OBRIGATÓRIO

ID do agente que será usado na conversa.

title OPCIONAL

Título da conversa. Se não fornecido, será gerado automaticamente.

anamnesis OPCIONAL

Dados de anamnese do aluno para contexto personalizado. A anamnese é enviada como mensagem de sistema para o agente, permitindo que ele tenha contexto desde o início da conversa.

Campos disponíveis na anamnese:

name (obrigatório)
age
birth_date
gender
profession
weight
height
body_fat_percentage
goal
goal_details
medical_history
allergies
previous_injuries
chronic_diseases
surgeries
restrictions
physical_activity_level
training_experience
training_frequency
preferred_training_type
dietary_restrictions
food_preferences
supplements
notes
BASH
curl -X POST https://v3.iakyra.com/v1/conversations \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sua_api_key_aqui" \
  -d '{
    "agentId": "agent-4e696070-d9cb-45c9-9bad-f4591c90ca0a",
    "title": "Avaliação Postural - João Silva",
    "anamnesis": {
      "name": "João Silva",
      "age": 30,
      "weight": 80,
      "height": 175,
      "goal": "Ganhar massa muscular"
    }
  }'

Mensagens

POST GET

Envie mensagens para seus agentes e recupere o histórico de conversas. Suporta texto e imagens para análise multimodal.

POST /v1/conversations/:conversationId/messages

Envia uma mensagem para o agente da conversa. Suporta texto e imagens para análise multimodal.

Parâmetros

message OBRIGATÓRIO

Texto da mensagem a ser enviada.

images OPCIONAL

Array de URLs de imagens (use o endpoint de upload para obter as URLs).

BASH
curl -X POST https://v3.iakyra.com/v1/conversations/cf2e0fb1-6b56-456f-9966-8350b279e91f/messages \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sua_api_key_aqui" \
  -d '{
    "message": "Olá! Como posso melhorar minha postura?",
    "images": ["https://seu-bucket.supabase.co/chat-images/path/to/image.jpg"]
  }'

GET /v1/conversations/:conversationId/messages

Recupera todas as mensagens de uma conversa em ordem cronológica.

BASH
curl https://v3.iakyra.com/v1/conversations/cf2e0fb1-6b56-456f-9966-8350b279e91f/messages \
  -H "Authorization: Bearer sua_api_key_aqui"

Upload de Imagens

POST

Faça upload de imagens para análise postural e outras funcionalidades multimodais.

Limites

  • • Máximo de 4 arquivos por requisição
  • • Máximo de 10MB por arquivo
  • • Máximo de 40MB total
  • • Formatos aceitos: JPG, PNG, WebP
BASH
curl -X POST https://v3.iakyra.com/v1/upload/images \
  -H "Authorization: Bearer sua_api_key_aqui" \
  -F "files=@/caminho/para/imagem1.jpg" \
  -F "files=@/caminho/para/imagem2.jpg"
JAVASCRIPT
const formData = new FormData();
formData.append('files', file1);
formData.append('files', file2);

const response = await fetch('https://v3.iakyra.com/v1/upload/images', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer sua_api_key_aqui'
  },
  body: formData
});

const result = await response.json();
console.log(result.data.files);

Infraestrutura

Detalhes sobre autenticação, rate limiting, tratamento de erros e códigos de status da API.

Autenticação

Todas as requisições para a API requerem autenticação via API Key no header Authorization. Use o formato Bearer token para autenticar suas requisições.

Como Obter sua API Key

Para obter sua API Key, você precisa ter uma conta com plano Master ativado e API access habilitado. Entre em contato com o suporte para obter acesso.

Formato da Autenticação

Envie sua API Key no header Authorization usando o formato Bearer token:

HEADER
Authorization: Bearer kyra_live_seu_api_key_aqui

Exemplo de Requisição Autenticada

BASH
curl https://v3.iakyra.com/v1/templates \
  -H "Authorization: Bearer kyra_live_sua_api_key_aqui" \
  -H "Content-Type: application/json"

Validação da API Key

A API valida automaticamente:

  • Se a API Key é válida e existe no sistema
  • Se o acesso à API está habilitado para a conta
  • Se o plano permite uso da API

Se qualquer validação falhar, a API retornará um erro 401 Unauthorized ou 403 Forbidden.

Rate Limiting

A API implementa limites de requisições para garantir estabilidade, prevenir abuso e garantir que todos os usuários tenham acesso justo aos recursos. Os limites são aplicados por API Key e contam todas as requisições feitas para qualquer endpoint.

Limites Aplicados

PERÍODO LIMITE DESCRIÇÃO
Por minuto 60 requisições Máximo de 60 requisições em qualquer janela de 60 segundos
Por hora 1.000 requisições Máximo de 1.000 requisições em qualquer janela de 60 minutos
Por dia 10.000 requisições Máximo de 10.000 requisições em qualquer janela de 24 horas

Headers de Rate Limit

Todas as respostas da API incluem headers informativos sobre os limites. Use esses headers para monitorar seu uso e evitar atingir os limites:

HEADERS
X-RateLimit-Limit-Minute: 60
X-RateLimit-Remaining-Minute: 53
X-RateLimit-Limit-Hour: 1000
X-RateLimit-Remaining-Hour: 993
X-RateLimit-Limit-Day: 10000
X-RateLimit-Remaining-Day: 9993

Códigos de Status

A API retorna códigos de status HTTP padrão para indicar o resultado de cada requisição. Todos os códigos seguem o padrão HTTP.

CÓDIGO DESCRIÇÃO QUANDO OCORRE
200 OK Requisição bem-sucedida
201 Created Recurso criado com sucesso (agentes, conversas)
400 Bad Request Requisição inválida (campos faltando ou inválidos)
401 Unauthorized API Key inválida ou não fornecida
403 Forbidden Sem permissão (acesso API desabilitado ou sem ownership)
404 Not Found Recurso não encontrado (agente, conversa, template)
429 Too Many Requests Rate limit excedido (verificar header Retry-After)
413 Payload Too Large Upload muito grande (limite de 40MB total ou 10MB por arquivo)
503 Service Unavailable Serviço KYRA AI não disponível temporariamente
500 Internal Server Error Erro interno do servidor

Tratamento de Erros

A API retorna respostas de erro padronizadas com informações detalhadas sobre o problema. Todas as respostas de erro seguem o formato ErrorResponse.

Formato da Resposta de Erro

JSON
{
  "error": "Error Type",
  "message": "Descrição detalhada do erro",
  "code": "ERROR_CODE"
}

Códigos de Erro Específicos

CÓDIGO DESCRIÇÃO HTTP STATUS
INVALID_REQUEST Campos obrigatórios faltando ou inválidos 400
UNAUTHORIZED API Key inválida ou não fornecida 401
FORBIDDEN Sem permissão para acessar o recurso 403
NOT_FOUND Recurso não encontrado 404
PAYLOAD_TOO_LARGE Upload muito grande (limite excedido) 413
SERVICE_UNAVAILABLE Serviço KYRA AI não disponível 503
DATABASE_ERROR Erro ao acessar o banco de dados 500
INTERNAL_ERROR Erro interno do servidor 500
DELETE_FAILED Falha ao deletar agente da plataforma KYRA AI 500

Exemplo de Tratamento de Erro

JAVASCRIPT
try {
  const response = await fetch('https://v3.iakyra.com/v1/agents', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer sua_api_key_aqui'
    },
    body: JSON.stringify({ templateId: '...' })
  });

  if (!response.ok) {
    const errorData = await response.json();
    console.error('Erro:', errorData.error);
    console.error('Código:', errorData.code);
    // Tratar erro conforme código
    if (errorData.code === 'UNAUTHORIZED') {
      // API Key inválida
    } else if (errorData.code === 'INVALID_REQUEST') {
      // Campos faltando
    }
    return;
  }

  const data = await response.json();
  console.log('Sucesso:', data.data);
} catch (error) {
  console.error('Erro de rede:', error);
}