API 레퍼런스
quant-ai는 FastAPI 기반의 REST + WebSocket API를 제공합니다. 모든 응답은 Pydantic v2 모델로 정의되며, FastAPI 자동 스웨거 문서는 http://localhost:8000/docs에서 확인할 수 있습니다.
베이스 URL
| 환경 | 베이스 URL |
|---|---|
| 로컬 | http://localhost:8000 |
| Azure VM | http://20.196.217.226:8000 (배포 IP) |
| WebSocket | ws://<host>/ws/... |
인증
JWT Bearer 토큰 기반 인증입니다. 모든 라우트(/api/auth/*, /health, /metrics, /docs 제외)는 인증이 필요합니다.
헤더 형식
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6...
토큰 발급
POST /api/auth/login으로 access + refresh 토큰을 발급받습니다. 자세한 내용은 auth 참조.
WebSocket 인증
WebSocket은 헤더 대신 ?token=<JWT> query 파라미터로 인증합니다.
const ws = new WebSocket(`ws://localhost:8000/ws/equity/orders?token=${jwt}`);
멀티유저 격리
모든 라우트는 WHERE user_id = current_user.id 필터링을 강제 적용합니다. 다른 user의 리소스에 접근 시도는 일관되게 404 Not Found를 반환합니다 (403이 아닌 404로 응답하여 리소스 존재 여부 노출 방지).
에러 envelope
표준 에러 응답 형식:
{
"detail": {
"error_code": "RISK_RULE_VIOLATION",
"message": "Order exceeds 2% per-trade risk limit (calculated: 3.4%)",
"details": {
"max_pct": 0.02,
"calculated_pct": 0.034
}
}
}
레거시 라우트(/api/auth/* 등)는 평탄한 {"detail": "message"} 형식을 사용합니다.
표준 에러 코드
| 코드 | HTTP | 설명 |
|---|---|---|
INVALID_SYMBOL | 422 | 심볼이 자산군 매핑에 등록되지 않음 |
INVALID_ASSET_CLASS | 422 | crypto/us_equity/kr_equity 외 값 |
INVALID_QUANTITY | 422 | qty ≤ 0 |
INVALID_ORDER_TYPE | 422 | 알 수 없는 order_type |
MARKET_CLOSED | 422 | 시장 마감 시간 |
DUPLICATE_CLIENT_ORDER_ID | 409 | 중복 client_order_id |
RISK_RULE_VIOLATION | 422 | 1-2% / -5% 룰 위반 |
INSUFFICIENT_FUNDS | 422 | 잔고 부족 |
LLM_BUDGET_EXCEEDED | 402 | 사용자 일일 LLM 예산 초과 |
RATE_LIMIT_EXCEEDED | 429 | 일반 rate limit |
RATE_LIMIT_LIVE_DAILY | 429 | LIVE_DAILY_TRADE_LIMIT 초과 |
BROKER_UNAVAILABLE | 502 | 브로커 5xx / 네트워크 오류 |
BROKER_NOT_CONFIGURED | 403 | 사용자 브로커 키 미등록 |
BROKER_REJECTED | 422 | 브로커가 명시적으로 거부 |
REPORT_NOT_FOUND | 404 | 보고서 없음 (또는 다른 user 소유) |
ORDER_NOT_FOUND | 404 | 주문 없음 |
LIVE_NOT_ENABLED | 403 | 라이브 게이트 미통과 |
FEATURE_DISABLED | 503 | feature flag OFF |
FORBIDDEN | 403 | 권한 부족 |
응답 일반 규칙
- 시간: ISO 8601 + UTC (
2026-04-26T13:55:01.123Z) - 가격: 소수 (예:
188.20), 통화는 별도 필드 (currency: "USD") - UUID: 문자열 (예:
"0c3a5b4f-...") - 페이지네이션:
page(1-based) +size+total또는next_cursor
Rate limit
| 엔드포인트 | 한도 |
|---|---|
POST /api/equity/analyze | 사용자별 분당 5회 |
POST /api/equity/orders | 사용자별 분당 30회 |
POST /api/auth/login | IP당 분당 10회 |
429 응답 시 Retry-After 헤더가 포함되지 않을 수 있으므로 12초(분당 5회의 평균 간격) 또는 6초(30회) 대기 후 재시도하세요.
Feature flag
| 변수 | 기본값 | 영향 |
|---|---|---|
FEATURE_LLM_ANALYSIS | true | /api/equity/analyze |
FEATURE_EQUITY_ANALYSIS | true | /api/equity/analyze (alias) |
FEATURE_EQUITY_PAPER | false | `/api/equity/orders |
FEATURE_EQUITY_LIVE | false | /api/equity/live/*, live_mode=true 주문 |
FEATURE_DISABLED 코드의 503 응답은 위 플래그 OFF가 원인입니다.
라우트 카테고리
- auth — 회원가입/로그인/토큰 관리
- equity-analyze — 멀티 에이전트 분석 + 보고서 + trace
- equity-orders — 페이퍼/라이브 주문 + 포지션 + 계좌
- equity-backtest — 주식 전략 백테스트
- equity-live — 라이브 모드 게이팅 (request_confirm/enable/disable/status)
- exchange-keys — 거래소/브로커 API 키 관리
- websockets —
/ws/live,/ws/equity/orders
OpenAPI 스펙
FastAPI 자동 생성 스펙은 다음 경로에서 받을 수 있습니다.
- Swagger UI:
http://localhost:8000/docs - Redoc:
http://localhost:8000/redoc - OpenAPI JSON:
http://localhost:8000/openapi.json