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.
Authorization: Bearer kyra_live_seu_api_key_aqui
Base URL
Todas as requisições devem ser feitas para:
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:
// 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
GETLista todos os templates disponíveis para criação de agentes. Cada template representa um tipo específico de agente com capacidades especializadas.
Endpoint
GET /v1/templates
Exemplo de Requisição
curl https://v3.iakyra.com/v1/templates \
-H "Authorization: Bearer sua_api_key_aqui"
{
"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
POSTGerencie 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.
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.
curl -X DELETE https://v3.iakyra.com/v1/agents/agent-4e696070-d9cb-45c9-9bad-f4591c90ca0a \
-H "Authorization: Bearer sua_api_key_aqui"
Conversas
POSTCrie 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)agebirth_dategenderprofessionweightheightbody_fat_percentagegoalgoal_detailsmedical_historyallergiesprevious_injurieschronic_diseasessurgeriesrestrictionsphysical_activity_leveltraining_experiencetraining_frequencypreferred_training_typedietary_restrictionsfood_preferencessupplementsnotescurl -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 GETEnvie 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).
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.
curl https://v3.iakyra.com/v1/conversations/cf2e0fb1-6b56-456f-9966-8350b279e91f/messages \
-H "Authorization: Bearer sua_api_key_aqui"
Upload de Imagens
POSTFaç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
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"
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:
Authorization: Bearer kyra_live_seu_api_key_aqui
Exemplo de Requisição Autenticada
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:
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
{
"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
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);
}