KB증권 Open API 자동매매 — 개인 개방 현황과 신청법
"내 증권사는 KB인데, 자동매매를 하려면 계좌를 옮겨야 하나요?" 상담에서 꾸준히 들어오던 질문입니다. 지금까지의 답은 "네, 옮기셔야 합니다"였습니다. 개인이 쓸 수 있는 국내 주식 API는 한국투자증권·키움증권·LS증권·대신증권 정도로 사실상 굳어 있었기 때문입니다.
그런데 2026년 들어 이 지도가 바뀌었습니다. 토스증권이 개인용 Open API를 열었고, KB증권이 2026년 7월 20일 개인 고객 대상 오픈베타를 시작했습니다. 이 글은 KB증권 건에서 지금 확인할 수 있는 사실과, 아직 확인할 수 없는 것을 분명히 나눠서 정리합니다. 그 다음 "그래서 나는 뭘로 만들어야 하나"에 코드로 답합니다.
이 글의 순서
- KB증권이 무엇을 열었나 — 확인된 사실
- 아직 확인 안 된 것 — 여기에 속지 말 것
- 2026-08-27 업데이트 — 공식 개발자 포털이 열렸다
- 신청 절차
- 국내 증권사 개인 Open API 지도 2026
- "내 증권사엔 API가 없다"면 선택지 3개
- KB 문서를 기다리는 동안 만드는 법 (실제 코드)
- 증권사를 갈아탈 수 있게 짜는 구조
- 체크리스트
1. KB증권이 무엇을 열었나 — 확인된 사실
KB증권은 2026년 8월 4일, 지난달 20일부터 개인 고객 대상 Open API를 오픈베타 형태로 운영 중이라고 발표했습니다. 복수 매체 보도에서 공통으로 확인되는 항목은 아래와 같습니다.
| 항목 | 발표 내용 (2026-08-04 기준) |
|---|---|
| 개시 시점 | 2026년 7월 20일 오픈베타 시작 |
| 대상 | 개인 고객 (기존에는 법인·제휴사 중심의 B2B 연동) |
| 시세 | 국내·해외주식 시세 조회 |
| 주문 | 주문 · 정정 · 취소 |
| 계좌 | 잔고 조회 · 체결 내역 조회 |
| 신청 | 홈페이지 「고객서비스 > Open API」 → 본인인증 → 온라인 신청 |
| 지원 | 유튜브 이용 가이드 제공 예정 |
| 확대 | 오픈베타 이후 제공 범위·이용 대상 단계적 확대 예정 |
자동매매 관점에서 이 목록을 읽는 법은 간단합니다. 봇 한 바퀴가 도는 데 필요한 네 가지가 다 있느냐를 봅니다 — ① 시세를 읽고 ② 주문을 내고 ③ 잔고를 확인하고 ④ 체결을 확인하는 것. 발표된 범위만 놓고 보면 네 가지가 모두 들어 있습니다. 구조적으로는 키움·KIS와 같은 계열의 REST API로 보는 것이 타당합니다.
2. 아직 확인 안 된 것 — 여기에 속지 말 것
보도자료에는 기능 목록이 있지만 개발 스펙은 없습니다. 그리고 오픈베타 단계에서는 개발 가이드가 신청자에게 제공되는 형태라, 검색으로 나오는 "KB증권 API 엔드포인트" 류의 정보는 추정일 가능성이 큽니다. 알고랩 기준으로 공개 자료만으로는 확정할 수 없는 항목은 다음과 같습니다.
| 확정 못 한 항목 | 왜 중요한가 |
|---|---|
| 운영 도메인·엔드포인트 경로 | 코드 첫 줄이 여기서 시작합니다 |
인증 방식 (appkey/appsecret → access_token 여부) | 토큰 캐싱 설계가 달라집니다 |
| 초당·분당 호출 한도 | 한도를 모르면 봇의 호출량 설계를 못 합니다 |
| 모의투자 지원 여부 | 실계좌로 첫 주문을 던져야 하느냐가 갈립니다 |
| 실시간 시세 WebSocket 제공 여부 | 폴링만 되면 전략 설계가 제한됩니다 |
| API 이용료·수수료 조건 | 총 비용 구조가 달라집니다 |
추정 스펙으로 먼저 코드를 짜지 마십시오.
알고랩이 증권사 연동에서 가장 많이 목격한 사고가 이것입니다.
블로그에 떠도는 도메인·tr_id 값을 그대로 박아 두고 개발을 진행하다가,
정작 문서를 받아 보니 필드명과 인증 절차가 통째로 다른 경우입니다.
신청 → 문서 수령 → 설계 순서를 지키는 편이 훨씬 빠릅니다.
2-1. 2026-08-27 업데이트 — 공식 개발자 포털이 열렸다
이 글을 처음 쓴 시점에는 보도자료뿐이었지만,
2026-08-27 확인 기준으로 KB증권의 개인 Open API 전용 포털
openapi.kbsec.com이 공개돼 있습니다.
위 표에서 확정 못 했던 항목 중 두 개가 여기서 확인됩니다.
| 항목 | 2026-08-27 확인 상태 |
|---|---|
| 공식 창구 | 전용 포털 openapi.kbsec.com — 서비스 소개·이용안내 / 개발가이드 / API문서·오류코드 / 공지·FAQ·Q&A 메뉴 구성 |
| 인증 방식 | ✅ 확인됨 — 신청 승인 후 appKey·appSecret을 발급받고, 토큰 기반 인증 체계로 호출한다고 명시 |
| 서비스 범위 | ✅ 확인됨 — 투자정보·계좌정보·잔고·주문·체결. 기능 영역은 시세·종목·계좌·잔고·주문·체결로 구분 |
| 운영 도메인·엔드포인트 경로 | ❌ 아직 — 소개 페이지에는 경로가 없고 API문서 메뉴 안에서 확인 |
| 초당·분당 호출 한도 | ❌ 아직 — 공개 페이지에 수치 없음 |
| 모의투자 지원 여부 | ❌ 아직 — 공개 페이지에 언급 없음 |
| 실시간 시세 WebSocket | ❌ 아직 — 공개 페이지에 언급 없음 |
| API 이용료·수수료 조건 | ❌ 아직 — 공개 페이지에 언급 없음 |
인증 방식이 확인됐다는 것의 의미 —
appKey·appSecret으로 토큰을 받아 쓰는 구조라면
한국투자증권 KIS·키움 REST와 같은 계열입니다.
즉 토큰 캐싱·만료 처리·재발급 로직을 기존에 쓰던 그대로 재사용할 수 있습니다.
KIS에서 이 부분을 어떻게 짜는지는
접근토큰 만료와 갱신에 정리해 두었습니다.
토큰 계열이 아닌 자체 서명 방식(업비트의 JWT 같은)이었다면 설계를 새로 해야 했을 텐데, 그 리스크는 사라졌습니다.
여전히 도메인과 엔드포인트 경로는 로그인 이후 문서에서 확인해야 합니다.
포털의 소개 페이지에는 base URL도 tr_id류 식별자도 나와 있지 않습니다.
검색으로 나오는 "KB증권 API 엔드포인트" 정보는 여전히 추정일 가능성이 큽니다.
아래 4번의 신청 절차를 먼저 밟고 API문서 메뉴의 현재 명세로 대조하십시오.
오픈베타는 후속 업그레이드로 제공 범위가 단계적으로 확대된다고 안내돼 있어,
지금 없는 기능이 나중에 생길 수 있다는 점도 같이 감안해야 합니다.
3. 신청 절차
발표된 경로는 KB증권 홈페이지 → 고객서비스 → Open API → 본인인증 → 온라인 신청입니다. KIS Developers처럼 개발자 전용 포털에 따로 회원가입하는 방식이 아니라, 이미 계좌를 가진 본인이 홈페이지에서 바로 신청하는 구조라는 점이 다릅니다. 실무적으로는 이런 순서가 됩니다.
- KB증권 계좌가 있어야 합니다 (없으면 비대면 개설 먼저)
- 홈페이지 「고객서비스 > Open API」에서 본인인증
- Open API 이용 신청 및 약관 동의
- 인증키 발급 — 여기서 받는 값은 절대 코드에 하드코딩하지 말고
.env같은 별도 파일로 뺍니다 - 제공되는 개발 가이드로 도메인·엔드포인트·한도 확인
- 가능하면 소액 실계좌로 첫 주문 1주를 흘려 봅니다
오픈베타에서 반드시 챙길 것. 베타 기간에는 스펙이 조용히 바뀔 수 있습니다. 도메인·엔드포인트·한도 값을 코드 안에 흩어 두지 말고 설정 파일 한 곳에 모아 두십시오. 나중에 값 하나만 바꾸면 되는 구조와, 코드를 뒤져야 하는 구조는 운영 비용이 완전히 다릅니다.
4. 국내 증권사 개인 Open API 지도 2026
KB증권 합류를 포함해, 개인이 접근할 수 있는 국내 증권사 API를 진입점 기준으로 정리하면 이렇습니다. 기능 비교는 증권사 API 비교 글에 따로 있고, 여기서는 "문이 열려 있느냐"만 봅니다.
| 증권사 | 방식 | 개인 진입점 | 문서 공개 |
|---|---|---|---|
| 한국투자증권 | REST + WebSocket | KIS Developers 포털 회원가입 → appkey/appsecret | 전면 공개 · 공식 깃허브 샘플 |
| 키움증권 | REST + WebSocket (구 OpenAPI+ 병행) | 키움 개발자 사이트 신청 | 전면 공개 |
| LS증권 | xingAPI + OPEN API(REST) | 계좌 개설 → xingAPI 사용신청 → OPEN API 신청 | 공개 |
| 대신증권 | CREON Plus (COM 기반) | 계좌 개설 → CREON Plus 설치 | 공개 · Windows·32bit 제약 |
| 토스증권 | REST | 앱·홈페이지 신청 | 공개 (OpenAPI 스펙 문서) |
| DB증권 | REST + WebSocket | openapi.dbsec.co.kr API 사용신청 → Appkey/Appsecret | 공개 · 파이썬 샘플·테스트베드 |
| KB증권 | 발표 기준 미공개 | 홈페이지 「고객서비스 > Open API」 | 오픈베타 — 신청자 대상 가이드 |
| NH투자증권 | 보도상 준비 중으로 언급 — 공식 안내 확인 필요 | ||
| 삼성 · 미래에셋 · 신한 · 하나 | 개인 개발자용 매매 API의 공개 진입점을 확인하지 못했습니다 — 각사 고객센터 문의 | ||
확인 캐치. 위 표는 2026년 8월 11일 기준으로 공개 자료에서 확인한 진입점이며, 제공 여부·자격·범위는 증권사 사정으로 예고 없이 바뀝니다. 특히 "확인하지 못했다"는 "없다"는 뜻이 아닙니다 — 법인·제휴 채널로만 열려 있거나, 안내 페이지가 로그인 뒤에 있을 수 있습니다. 계좌를 옮기기 전에 반드시 해당 증권사 공식 안내와 고객센터로 직접 확인하십시오.
5. "내 증권사엔 API가 없다"면 선택지 3개
① 매매용 계좌를 하나 더 만든다 — 권장
가장 현실적인 답입니다. 기존 계좌를 해지할 필요가 없습니다. 장기 보유 계좌는 그대로 두고, 봇이 돌릴 자금만 API가 열린 증권사 계좌로 옮기면 됩니다. 비대면 개설이라 하루면 끝나고, 오히려 운영 계좌와 봇 계좌를 물리적으로 분리하는 편이 사고 시 손실 범위를 가둘 수 있어 안전합니다.
② HTS 화면 자동화 — 권하지 않습니다
"API가 없으면 HTS를 마우스로 조작하게 만들면 되지 않나"라는 발상입니다. 기술적으로는 가능합니다.
# 이런 코드입니다 — 그리고 이것이 문제의 전부입니다
import pyautogui, time
pyautogui.click(x=412, y=338) # '종목코드' 입력칸의 좌표
pyautogui.typewrite('005930') # 화면 배치가 바뀌면 여기서 끝
pyautogui.click(x=530, y=612) # '매수' 버튼의 좌표
time.sleep(1)
# 주문이 실제로 접수됐는지 확인할 방법이 없다 —
# 팝업이 떴는지, 잔고가 부족했는지, 화면이 그냥 안 눌렸는지 알 수 없음
실패하는 이유는 좌표가 아니라 확인 불가능성입니다.
REST API는 주문을 넣으면 rt_cd나 return_code 같은
성공/실패 코드와 주문번호를 돌려줍니다. 화면 자동화는 아무것도 돌려주지 않습니다.
여기에 증권사 보안 프로그램·세션 만료·업데이트로 인한 화면 변경이 겹칩니다.
실계좌에 붙이는 순간 "주문이 나갔는지 모르는 봇"이 됩니다.
③ 대신증권 CREON처럼 API는 있지만 제약이 있는 경우
대신증권 CREON Plus는 REST가 아니라 COM 객체 방식입니다. 코드 모양이 아예 다릅니다.
# 대신증권 CREON — Windows COM 방식 (32bit 파이썬 필요)
import win32com.client
obj = win32com.client.Dispatch("CpUtil.CpCybos")
print(obj.IsConnect) # 1이면 CREON Plus에 접속된 상태
stock = win32com.client.Dispatch("DsCbo1.StockMst")
stock.SetInputValue(0, "A005930")
stock.BlockRequest()
print(stock.GetHeaderValue(11)) # 현재가
Windows에서 CREON Plus가 실행 중이어야 하고, 64bit 파이썬으로는 붙지 않습니다. 리눅스 서버에 올려 무인 운영하려던 계획이 여기서 막힙니다. "API가 있다"와 "내 환경에서 24시간 돌릴 수 있다"는 다른 이야기입니다.
계좌 구조·운영 환경·전략에 따라 답이 달라집니다. 현재 쓰는 증권사와 하려는 매매만 알려 주시면 어디로 여는 게 맞는지 정리해 드립니다. 24시간 빠른 답변 가능합니다.
무료로 물어보기 →6. KB 문서를 기다리는 동안 만드는 법 (실제 코드)
KB증권 가이드를 받기 전에도 봇의 90%는 미리 만들 수 있습니다. 전략·리스크·스케줄러·로깅은 증권사와 무관하기 때문입니다. 남은 10%인 통신 부분만 지금 문서가 열려 있는 증권사로 먼저 검증해 두면 됩니다.
한국투자증권 KIS — 토큰 발급
import requests, json
BASE = "https://openapi.koreainvestment.com:9443" # 실전
# 모의투자는 https://openapivts.koreainvestment.com:29443
res = requests.post(
f"{BASE}/oauth2/tokenP",
headers={"content-type": "application/json"},
data=json.dumps({
"grant_type": "client_credentials",
"appkey": APP_KEY, # .env에서 읽어 올 것
"appsecret": APP_SECRET,
}),
timeout=10,
)
tok = res.json()
print(tok["access_token"][:20], tok["access_token_token_expired"])
이 access_token은 유효시간이 1일이라 매 호출마다 새로 받으면 안 됩니다.
재발급 규칙은 토큰 만료·재발급 규칙에 정리해 두었습니다.
주문 헤더 — 증권사마다 바뀌는 부분은 사실 여기뿐
headers = {
"content-type": "application/json; charset=utf-8",
"authorization": f"Bearer {access_token}",
"appkey": APP_KEY,
"appsecret": APP_SECRET,
"tr_id": "TTTC0802U", # 국내주식 현금 매수 (모의는 VTTC0802U)
"custtype": "P", # 개인
}
body = {
"CANO": CANO, # 계좌번호 앞 8자리
"ACNT_PRDT_CD": "01", # 뒤 2자리
"PDNO": "005930",
"ORD_DVSN": "01", # 01 = 시장가
"ORD_QTY": "1",
"ORD_UNPR": "0",
}
이 구조를 이해해 두면 KB증권 문서를 받았을 때 읽는 시간이 30분으로 줄어듭니다. 국내 증권사 REST API는 대체로 「인증키 → 토큰 → 헤더에 토큰+거래구분 → 본문에 계좌·종목·수량」 형태로 수렴하기 때문입니다. 바뀌는 것은 도메인, 경로, 거래 구분값의 이름, 응답 필드명 정도입니다.
DB증권 — 같은 패턴의 다른 예
# DB증권 Open API — 토큰 발급 엔드포인트
TOKEN_URL = "https://openapi.dbsec.co.kr:8443/oauth2/token"
# 발급 절차: openapi.dbsec.co.kr에서 API 사용신청 → Appkey / Appsecret 수령
# 제공 예시: 국내주식 주문(시장가) · 현재가 조회 · 주식잔고조회 · 해외주식 실시간 체결가(WebSocket)
도메인만 다르고 /oauth2/token이라는 모양은 같습니다.
토스증권 Open API도 큰 틀은 같습니다.
즉 증권사 하나로 한 번 제대로 만들어 두면 다음 증권사는 훨씬 빠릅니다.
7. 증권사를 갈아탈 수 있게 짜는 구조
오픈베타 시기에 특히 중요합니다. KB증권 스펙이 바뀌거나, 한도가 안 맞아 다른 증권사로 옮겨야 할 가능성을 미리 열어 두는 것입니다. 방법은 하나입니다 — 전략 코드가 증권사 이름을 모르게 만드는 것.
from abc import ABC, abstractmethod
class Broker(ABC):
"""전략은 이 인터페이스만 안다. 증권사 이름을 모른다."""
@abstractmethod
def buy(self, code: str, qty: int) -> str: ... # → 주문번호
@abstractmethod
def positions(self) -> list[dict]: ... # → 보유 종목
class KisBroker(Broker):
BASE = "https://openapi.koreainvestment.com:9443"
ORDER = "/uapi/domestic-stock/v1/trading/order-cash"
TR_BUY = "TTTC0802U"
def buy(self, code, qty):
r = requests.post(self.BASE + self.ORDER,
headers=self._headers(self.TR_BUY),
data=json.dumps({...}), timeout=10)
j = r.json()
if j["rt_cd"] != "0": # KIS는 rt_cd "0"이 성공
raise BrokerError(j["msg_cd"], j["msg1"])
return j["output"]["ODNO"] # 주문번호
class KbBroker(Broker):
"""KB증권 가이드 수령 후 이 클래스만 채운다. 전략 코드는 한 줄도 안 바뀐다."""
def buy(self, code, qty):
raise NotImplementedError("KB Open API 가이드 확인 후 구현")
# 전략 쪽
broker: Broker = KisBroker() # 나중에 KbBroker()로 한 줄 교체
broker.buy("005930", 1)
이 한 장의 추상화가 이 글의 실질적인 결론입니다. 증권사 API 지형이 1년 사이에 두 곳이나 늘어났다는 것은, 앞으로도 계속 바뀐다는 뜻입니다. 증권사에 종속된 봇은 증권사가 바뀔 때마다 다시 만들어야 하고, 인터페이스로 분리한 봇은 클래스 하나만 추가하면 됩니다.
8. 체크리스트
- KB증권 계좌가 이미 있는지 확인했는가 (없으면 비대면 개설이 먼저)
- 홈페이지 「고객서비스 > Open API」에서 신청을 접수했는가
- 발급받은 인증키를
.env로 분리했는가 — 코드·깃허브에 절대 올리지 않는다 - 추정 스펙으로 개발을 시작하지 않았는가 — 공식 가이드 수령이 먼저
- 도메인·경로·한도를 설정 파일 한 곳에 모았는가 (베타 중 변경 대비)
- 주문·잔고를
Broker인터페이스로 추상화했는가 - 잔고 조회가 한 번에 다 안 나오는 경우처럼 페이지 잘림 처리를 넣었는가
- 첫 실거래는 1주·소액으로 시작하는가
확인 캐치 (중요). 이 글의 KB증권 관련 내용은 2026년 8월 11일 기준으로 공개된 발표·보도 자료에서 확인한 사실만 담았고, 엔드포인트·인증 방식·호출 한도·이용료는 의도적으로 쓰지 않았습니다(공개 문서로 확인되지 않아서입니다). 오픈베타 서비스의 제공 범위·자격·스펙은 예고 없이 바뀔 수 있으므로 반드시 KB증권 공식 안내와 제공되는 개발 가이드로 확인하십시오. 본 글은 특정 종목·수익률·시장 방향에 대한 어떠한 예측이나 투자 권유도 담고 있지 않으며, 투자 판단과 책임은 본인에게 있습니다.
마무리
정리하면 세 줄입니다. KB증권은 2026년 7월 20일 개인 대상 Open API를 오픈베타로 열었고, 시세·주문·정정·취소·잔고·체결이 발표된 범위이며, 신청은 홈페이지 「고객서비스 > Open API」입니다. 개발 스펙은 신청해서 가이드를 받은 뒤에 확정하는 것이 맞습니다.
그동안 "증권사 때문에 자동매매를 못 한다"고 접어 두셨던 분이라면, 지금이 다시 볼 시점입니다. 선택지가 4곳에서 7곳으로 늘었습니다. 무엇을 만들지부터 정하고 싶다면 제작 비용·견적 기준을 먼저 보시는 편이 순서에 맞습니다.