Skip to content

GET /api/v1/stocks/search

의도

종목 검색 (종목명 부분일치 또는 종목코드 정확일치). 검색창 자동완성.

인증

없음 (공개)

입력

  • Query: query — 종목명 또는 종목코드. 빈 값이면 [] 반환

응답

json
[
  { "corp_code": "00126380", "corp_name": "삼성전자", "stock_code": "005930", "market_type": "Y" }
]
  • corp_name ILIKE '%query%' OR stock_code = query, ORDER BY corp_name LIMIT 20
  • 비상장 기업은 dartbrief.stocks 테이블에 없음 (KOSPI=Y / KOSDAQ=K 만 저장)

curl 예제

bash
curl -s "https://api.dartbrief.com/api/v1/stocks/search?query=삼성" | jq

비즈니스 메모

  • HTTP Cache TTL 1분 + 핸들러 인메모리 10분 캐시

GET /api/v1/stocks/active

의도

오늘(KST) summary(AI 한줄요약) 있는 공시가 발생한 종목 — 웹 프리셋 칩용. 하드코딩 추천 8개를 대체. 칩 클릭 → 대시보드 /?corp={corp_code} 필터.

종목 컬렉션의 "활성(오늘 공시 발생)" 부분집합 (/users/active 관용). disclosures + analysis_cache 파생이라 corp_name/stock_code 는 공시 시점 값.

인증

없음 (공개)

입력

  • Query: limit (optional, default 8, min 1, max 20) — 칩 개수 상한. 범위 밖은 clamp
  • (날짜 범위 파라미터 없음 — 항상 오늘(KST) 고정)

응답

json
[
  { "corp_code": "00126380", "corp_name": "삼성전자", "stock_code": "005930" }
]

corp_code 단일 키 dedup (동일 종목의 corp_name/stock_code 이력 달라도 1개), 최근 공시순. 쿼리:

sql
SELECT corp_code, corp_name, stock_code
FROM (
  SELECT DISTINCT ON (d.corp_code)
         d.corp_code, d.corp_name, d.stock_code, d.rcept_dt, d.rcept_no
  FROM dartbrief.disclosures d
  JOIN dartbrief.analysis_cache a
    ON a.rcept_no = d.rcept_no AND a.status = 'COMPLETED' AND a.summary <> ''
  WHERE d.rcept_dt = TO_CHAR((now() AT TIME ZONE 'Asia/Seoul')::date, 'YYYYMMDD')  -- 오늘, KST
  ORDER BY d.corp_code, d.rcept_dt DESC, d.rcept_no DESC   -- corp_code 별 최신 1건 (rcept_no tie-breaker)
) t
ORDER BY t.rcept_dt DESC, t.rcept_no DESC   -- 동률 시 결정적 정렬 (칩 구성 고정)
LIMIT $1;  -- limit (default 8, max 20)

인덱스 idx_disclosures_rcept_dt 활용, 마이그레이션 불필요.

curl 예제

bash
curl -s "https://api.dartbrief.com/api/v1/stocks/active?limit=8" | jq

비즈니스 메모

  • HTTP Cache TTL 5분

관련 화면