{"openapi":"3.0.3","info":{"title":"AIKO API","version":"1.0.0","description":"API pública da AIKO para gerar respostas de IA por chamada HTTP direta, no formato de \"chat completions\". Autenticação via API key, gerada em Configurações → Segurança dentro do app.\n"},"servers":[{"url":"https://api.project-aiko.com"}],"security":[{"bearerAuth":[]}],"paths":{"/v1/chat/completions":{"post":{"operationId":"createChatCompletion","summary":"Gera uma resposta da AIKO a partir de uma lista de mensagens.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompletionRequest"},"examples":{"simples":{"value":{"messages":[{"role":"user","content":"Qual é a capital do Brasil?"}]}},"streaming":{"value":{"stream":true,"messages":[{"role":"user","content":"Escreva um haicai sobre café."}]}}}}}},"responses":{"200":{"description":"Resposta gerada com sucesso (não-streaming). Com `stream:true`, o corpo é `text/event-stream` no formato `chat.completion.chunk`, terminando em `data: [DONE]`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompletionResponse"}},"text/event-stream":{"schema":{"type":"string","description":"Presente somente quando `stream: true` no request. Sequência de eventos `chat.completion.chunk` terminando em `data: [DONE]`. Se ocorrer um erro depois que o stream já começou, um único evento `{\"error\": {...}}` é enviado e o stream termina sem `[DONE]`.\n"}}}},"400":{"description":"Requisição inválida (schema incorreto ou conteúdo total das mensagens acima de 20000 caracteres).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_request":{"value":{"error":{"message":"Request inválido.","type":"invalid_request_error","code":"invalid_request"}}},"content_too_large":{"value":{"error":{"message":"O conteúdo total das mensagens excede o limite de 20000 caracteres.","type":"invalid_request_error","code":"content_too_large"}}}}}}},"401":{"description":"API key ausente ou inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"value":{"error":{"message":"API key ausente ou inválida.","type":"authentication_error","code":"invalid_api_key"}}}}}}},"429":{"description":"Limite de 20 requisições/minuto por API key (ou 100/min por IP sem autenticação), ou cota mensal de tokens excedida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rate_limit_exceeded":{"value":{"error":{"message":"Limite de requisições por minuto excedido.","type":"rate_limit_error","code":"rate_limit_exceeded"}}},"quota_exceeded":{"value":{"error":{"message":"Cota mensal de tokens excedida para esta API key.","type":"insufficient_quota","code":"quota_exceeded"}}}}}}},"500":{"description":"Erro interno ou do provedor de IA ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"provider_error":{"value":{"error":{"message":"Erro ao processar a requisição.","type":"api_error","code":"provider_error"}}}}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"API key gerada em Configurações → Segurança, enviada como header \"Authorization: Bearer aiko_sk_...\".\n"}},"schemas":{"CompletionRequest":{"type":"object","required":["messages"],"properties":{"model":{"type":"string","description":"Ignorado hoje (reservado para uso futuro) — a AIKO decide o modelo internamente."},"stream":{"type":"boolean","default":false,"description":"Quando true, a resposta é enviada via Server-Sent Events."},"messages":{"type":"array","minItems":1,"items":{"$ref":"#/components/schemas/Message"}}}},"Message":{"type":"object","required":["role","content"],"properties":{"role":{"type":"string","enum":["system","user","assistant"]},"content":{"type":"string","minLength":1}}},"CompletionResponse":{"type":"object","properties":{"id":{"type":"string","example":"chatcmpl-..."},"object":{"type":"string","example":"chat.completion"},"created":{"type":"integer"},"model":{"type":"string","example":"aiko"},"choices":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer"},"message":{"type":"object","properties":{"role":{"type":"string","example":"assistant"},"content":{"type":"string"}}},"finish_reason":{"type":"string","example":"stop"}}}},"usage":{"type":"object","properties":{"prompt_tokens":{"type":"integer"},"completion_tokens":{"type":"integer"},"total_tokens":{"type":"integer"}}}}},"ErrorResponse":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"},"type":{"type":"string"},"code":{"type":"string"}}}}}}}}