에토스AI 문서v0.5.1

API 레퍼런스

에토스AI의 채팅 백엔드 API입니다. 서버에서 프로바이더로 라우팅하고 텍스트를 스트리밍합니다.

POST /api/chat

대화 메시지 배열과 모델 ID를 받아, 선택된 모델의 응답을 스트리밍(plain text)으로 반환합니다.

Request Body (application/json)

필드타입설명
messages{ role, content }[]대화 이력. roleuser 또는 assistant.
modelstring모델 ID (예: claude-sonnet-5). 생략 시 기본 모델.
conversationIdstring?기존 대화 ID. 생략하면 새 대화를 만들어 스트림 메타로 ID를 반환 (로그인 시).
projectIdstring?새 대화를 프로젝트에 귀속. 프로젝트 지침이 시스템 프롬프트에 자동 주입됩니다.
useRagboolean?지식베이스 검색 결과를 근거로 주입 (로그인 시).

Response

Content-Type: text/plain; charset=utf-8 의 스트림. 토큰이 생성되는 대로 이어붙여 렌더링합니다. 오류는 본문에 **[오류]** ... 형태로 포함됩니다. 스트림 끝에는 구분자(0x1F) 뒤에 사용량 메타 JSON({ model, input, output, conversationId?, ragSources? })이 붙습니다 — 화면 표시는 구분자 앞까지만 사용하세요.

예시 · cURL

curl -N -X POST http://localhost:3000/api/chat \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-fable-5",
    "messages": [{ "role": "user", "content": "안녕하세요" }]
  }'

예시 · fetch (스트리밍)

const res = await fetch("/api/chat", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    model: "gpt-4.1",
    messages: [{ role: "user", content: "요약해줘" }],
  }),
});
const reader = res.body!.getReader();
const dec = new TextDecoder();
let text = "";
while (true) {
  const { done, value } = await reader.read();
  if (done) break;
  text += dec.decode(value, { stream: true });
  // text 를 화면에 업데이트
}

상태 코드

코드의미
200스트림 정상
400잘못된 요청 · 알 수 없는 모델 · 빈 메시지
429워크스페이스 월 토큰 한도 초과
500해당 프로바이더 API 키 미설정

그 외 앱 API 한눈에

모두 세션 쿠키 인증(로그인 필요). 워크스페이스/본인 소유 범위로 격리됩니다.

엔드포인트설명
GET /api/models선택 가능한 모델 목록. Anthropic 은 실제 API로 라이브 조회 (공개 경로)
GET·POST /api/conversations, GET·PATCH·DELETE /api/conversations/:id대화 목록·생성·조회(메시지)·이름변경·삭제. /import 로 localStorage 1회 이관
POST /api/rag/upload, GET /api/rag/documents, POST /api/rag/chat지식베이스 문서 업로드(≤20MB)·목록·근거 인용 질의 (pgvector)
GET·POST /api/projects, PATCH·DELETE /api/projects/:id프로젝트(대화 폴더 + 자동 적용 지침) 관리
GET·POST /api/schedules, POST /api/schedules/:id/run예약 리포트 등록·즉시 실행. 크론은 GET /api/cron/run (CRON_SECRET)
POST /api/data-chat데이터 Q&A (NDJSON 스트림). datasourceId 지정 시 실데이터 SQL 질의
GET·POST /api/admin/datasources회사 PostgreSQL 연결 등록(비밀번호 암호화 저장·읽기전용) — 관리자
/api/admin/* (company·users·departments·tokens·usage)조직 관리 — 관리자 전용. /api/super·/api/super/:id 는 수퍼 관리자