API DocsOverview

전역 규칙

API 사용을 위한 전역 규칙, 헤더, 오류 처리 및 모범 사례

필수 헤더 (인증이 필요한 엔드포인트)

모든 보호된 엔드포인트에는 Authorization 헤더가 필요합니다. 다음 헤더가 필요합니다:

헤더필수 여부
AuthorizationBearer <token>필수 — /api/v1/auths/signin/api/v1/auths/signup 을 제외한 모든 엔드포인트
Content-Typeapplication/jsonJSON 본문 요청에 필수
Content-Type(multipart 자동 설정)파일 업로드 요청에 필수 — 수동으로 설정하지 마세요, 브라우저가 자동으로 설정합니다

오류 응답 형식

백엔드의 모든 오류는 다음 구조를 따릅니다:

json
{
"detail": "사람이 읽을 수 있는 오류 메시지"
}

일반 HTTP 상태 코드

상태 코드의미
400잘못된 요청 — 필드 누락 또는 유효하지 않음
401Authorization 헤더 누락 또는 토큰 유효하지 않음/만료됨
403금지됨 — 역할 또는 권한 부족
404리소스를 찾을 수 없음
500내부 서버 오류

성공 응답 형식

대부분의 엔드포인트는 리소스 객체를 JSON으로 반환합니다. 삭제 작업은 일반적으로 다음을 반환합니다:

json
true

또는 삭제된 객체를 반환합니다. 각 엔드포인트별 구체적인 응답 형태를 확인하세요.

SSE (Server-Sent Events) — 스트리밍 응답

채팅 완성 및 일부 작업 엔드포인트는 text/event-stream 으로 응답을 스트리밍합니다. 각 청크는 표준 SSE 프레임입니다:

text
data: {"id":"...","choices":[{"delta":{"content":"hello"}}]}


data: [DONE]

중요: 인증이 필요한 스트림에는 브라우저 EventSource API를 사용하지 마세요 — EventSource 는 커스텀 헤더를 설정할 수 없습니다. ReadableStream 리더와 함께 fetch 를 사용하세요.

자세한 스트리밍 예제는 SSE 소비 가이드를 참조하세요.

WebSocket / Socket.IO — 실시간 상태 이벤트

백엔드는 Socket.IO(일반 WebSocket이 아님)를 통해 실시간 상태 이벤트를 전송합니다. 이 이벤트는 RAG 검색 및 에이전틱 툴 호출 중 진행 상황 업데이트를 전송하는 데 사용됩니다.

연결

javascript
import { io } from 'socket.io-client';

const socket = io('https://<backend-host>', {
auth: { token: '<jwt_or_api_key>' },
transports: ['websocket'],
});

서버가 전송하는 주요 이벤트

이벤트페이로드설명
status{ action, description, done }검색 / 툴 실행 중 단계별 진행 상황
source소스 객체 배열응답에 연결된 검색된 지식 청크
follow-up문자열 배열응답 후 후속 질문 제안

이벤트 수신

이벤트를 놓치지 않도록 채팅 요청을 보내기 전에 수신을 설정하세요:

javascript
socket.on('status', (data) => console.log(data.description));
socket.on('source', (sources) => renderSources(sources));
socket.on('follow-up', (questions) => renderFollowUps(questions));

중요: Socket.IO 연결 시 사용하는 session_id 는 채팅 완성 요청 본문의 session_id 필드와 일치해야 합니다. 서버는 이를 통해 올바른 클라이언트로 이벤트를 라우팅합니다.