국내 증권사 API 요청 Generator
증권사·종목·매수/매도·주문 유형·가격·수량을 고르면 토큰 발급과 주문 전송 요청이 curl·Python·TypeScript로 나옵니다.
국내 증권사 Open API로 해외주식 주문을 보내려면 증권사마다 엔드포인트·헤더·코드값이 전부 다르고, 공식 문서는 국내주식 위주라 해외주식 주문의 코드표 하나를 찾는 데만 반나절이 갑니다. 이 페이지는 다섯 증권사의 그 조각을 한 폼에 모았습니다.
01 호출 순서
02 요청 만들기
curl -X POST "https://openapi.koreainvestment.com:9443/oauth2/tokenP" \
-H "content-type: application/json; charset=utf-8" \
-d "{
\"grant_type\": \"client_credentials\",
\"appkey\": \"$KIS_APPKEY\",
\"appsecret\": \"$KIS_APPSECRET\"
}"curl -X POST "https://openapi.koreainvestment.com:9443/uapi/overseas-stock/v1/trading/order" \
-H "content-type: application/json; charset=utf-8" \
-H "authorization: Bearer $KIS_TOKEN" \
-H "appkey: $KIS_APPKEY" \
-H "appsecret: $KIS_APPSECRET" \
-H "tr_id: TTTT1002U" \
-H "custtype: P" \
-d "{
\"CANO\": \"$KIS_CANO\",
\"ACNT_PRDT_CD\": \"01\",
\"OVRS_EXCG_CD\": \"NASD\",
\"PDNO\": \"AAPL\",
\"ORD_QTY\": \"7\",
\"OVRS_ORD_UNPR\": \"43.21\",
\"ORD_SVR_DVSN_CD\": \"0\",
\"ORD_DVSN\": \"34\"
}"- 모의투자(VTTT…)는 지정가(00)만 됩니다 — LOC·MOC 분기는 실전 계좌에서 처음 실행됩니다.
- OVRS_EXCG_CD를 NASD로 고정하면 뉴욕·아멕스 상장 종목 주문이 실패합니다. 티커와 거래소 코드를 한 쌍으로 저장하세요.
한국투자증권 — 공식 GitHub 예제가 1차 출처
포털 apiportal.koreainvestment.com · 토큰 24시간 (발급은 1분당 1회) · IP 문서상 없음 · 코드값 확인 2026-10-23
공식 저장소 koreainvestment/open-trading-api의 overseas_stock_functions.py에 해외주식 주문 함수가 그대로 있어 코드값을 1차 출처에서 확인할 수 있습니다. 엔드포인트는/uapi/overseas-stock/v1/trading/order 하나이고, 매수·매도와 국가는 헤더 tr_id로 가릅니다(미국 매수 TTTT1002U · 매도 TTTT1006U, 모의투자는 앞글자 V).
ORD_DVSN (주문구분, 미국)
| 코드 | 의미 | 매수 | 매도 |
|---|---|---|---|
| 00 | 지정가 | O | O |
| 32 | LOO (장개시 지정가) | O | O |
| 34 | LOC (장마감 지정가) | O | O |
| 31 | MOO (장개시 시장가) | X | O |
| 33 | MOC (장마감 시장가) | X | O |
거래소 코드 OVRS_EXCG_CD
NASD(나스닥) · NYSE(뉴욕) · AMEX(아멕스). NASD로 고정하면 뉴욕·아멕스 상장 종목 주문이 실패하므로 티커와 거래소를 한 쌍으로 저장하세요.
주의
- 모의투자는 지정가(00)만 받습니다 — LOC·MOC 분기는 실전 계좌에서 처음 실행됩니다.
- 미국 매수에는 시장가가 없습니다. 바로 사려면 지정가에 여유를 두는 방식으로 대체합니다.
- 가격(
OVRS_ORD_UNPR)·수량은 문자열이고 가격은 소수 둘째 자리까지 고정합니다. - 응답
rt_cd0은 접수일 뿐 체결이 아닙니다. 정정·취소에 쓰는 주문번호ODNO를 보관하세요. - 토큰 발급(
/oauth2/tokenP)은 1분당 1회 제한 — 호출마다 새로 받으면 막힙니다. - 공식 예제의 주석과 코드가 모의 매도 tr_id에서 다릅니다(주석 VTTT1001U, 코드 VTTT1006U) — 모의 매도는 표로 관리하세요.
키움증권 — REST, 매수와 매도의 주문유형이 다르다
포털 openapi.kiwoom.com · 토큰 응답의 expires_dt까지 · IP 지정 단말기 등록 필수 (등록한 PC에서만 토큰 발급) · 코드값 확인 2026-10-24
구 OpenAPI+(윈도우 OCX)와 별개로 REST(api.kiwoom.com, 모의 mockapi.kiwoom.com)가 열렸습니다. 미국주식 주문은 POST /api/us/ordr에 헤더 api-id로 TR을 지정합니다(매수 ust20000 · 매도 ust20001 · 정정 ust20002 · 취소 ust20003, 예약 ust21200~). 아래 코드표는 포털 명세(로그인 없이 열람 가능)에서 옮겼습니다.
trde_tp (매매구분)
| 코드 | 의미 | 매수 ust20000 | 매도 ust20001 |
|---|---|---|---|
| 00 | 지정가 | O | O |
| 03 | 시장가 | O | O |
| 30 | LOC | O | O |
| 33 | MOC | X | O |
| 34 · 35 | STOP LIMIT · STOP (stop_pric 필수) | X | O |
| 26 · 27 · 36 · 37 | VWAP·TWAP 지정가·시장가 | O | O |
거래소 코드 stex_tp
ND(나스닥) · NY(뉴욕) · NA(아멕스).
주의
- 지정 단말기 등록이 필수 — 등록한 PC 밖에서는 토큰 자체가 발급되지 않습니다. 서버에서 돌리려면 그 서버를 등록합니다.
- 주문가능수량은 예수금만으로 계산하지 말고 ust31490(증거금률 반영)으로 확인하세요 — 아니면 접수 뒤 거부됩니다.
- 가격
ord_uv는 소수점을 보존한 문자열로 보냅니다. 시장가 계열이면 비웁니다. - 헤더
api-id에 TR 코드,authorization에 Bearer 토큰. 연속조회는cont-yn·next-key. - 응답에
ord_no(주문번호)·fc_entra(외화예수금)·trst_prof_ch(사용증거금)가 옵니다.
LS증권 — TR 하나에 신규·취소가 같이
포털 openapi.ls-sec.co.kr · 토큰 익일 오전 7시까지 · IP 문서상 없음 · 코드값 확인 2026-10-24
구 xingAPI(COM)와 별개인 신 OpenAPI(REST, openapi.ls-sec.co.kr:8080)에서 미국주식 주문은POST /overseas-stock/order 하나로 가고 헤더 tr_cd가 TR을 가릅니다 — COSAT00301(신규·취소) · COSAT00311(정정) · COSAT00400(예약) · COSMT00300(매도상환). 바디는 COSAT00301InBlock1으로 한 번 감쌉니다. 코드표는 포털 명세에서 옮겼습니다.
OrdPtnCode (주문유형) · OrdprcPtnCode (호가유형)
| 필드 | 코드 | 의미 |
|---|---|---|
| OrdPtnCode | 01 · 02 · 08 | 매도 · 매수 · 취소(OrgOrdNo 필수) |
| OrdprcPtnCode | 00 · M1 · M2 | 지정가 · LOO · LOC (매수·매도) |
| OrdprcPtnCode | 03 · M3 · M4 | 시장가 · MOO · MOC — 가이드가 “매도인경우 호가유형 확대”로 분류(매도 전용) |
거래소 코드 OrdMktCode
명세에 81(뉴욕) · 82(나스닥) 둘뿐입니다. 아멕스 상장 종목은 명세에 코드가 없고, 거래소 분류 85 종목은 81·82 어느 쪽으로도 03053(종목 없음)이 난 사례가 있습니다.
주의
- 모든 TR이 POST이고 초당 호출 한도가 TR마다 다릅니다(주문 10 · 예약 1).
mac_address헤더는 법인만 필수(12자리). - 수량은 정수만 — 0.1주를 보내면 IGW40011. 가격은 숫자형, 시장가면 0.
- 주간거래 세션은 지정가만 받습니다(rsp_cd 00891).
- 접수에 성공해도
rsp_cd가 00000이 아닐 수 있습니다 — OutBlock2의 주문번호로 성공을 판정하세요. - 토큰은 익일 오전 7시에 만료되는 절대 시각입니다. 폼 파라미터명은
appsecretkey.
토스증권 — 가장 단순한 전문, MOC는 없다
포털 corp.tossinvest.com/ko/open-api · 토큰 응답의 expires_in (재발급 시 이전 토큰 즉시 무효) · IP 허용 IP 필수 — 미등록이면 403 · 코드값 확인 2026-10-23
POST /api/v1/orders에 symbol · side · orderType · timeInForce · quantity · price만 보내고 거래소 필드가 없습니다. 장마감 조건 CLS는 LIMIT에만 붙어 LOC는 되지만 MOC(시장가+CLS)는 보낼 수 없습니다. 계정은 X-Tossinvest-Account 헤더로 지정합니다. 이 코드값은 실계좌 전송으로 검증된 것입니다.
다른 증권사에 없는 것
clientOrderId(36자 이하)가 멱등키입니다 — 같은 값으로 다시 보내면 중복 주문이 나지 않습니다. 날짜·순번으로 결정적으로 만들면 재시도가 안전합니다.- 허용 IP 등록 필수 — 미등록 IP는 403. IP가 바뀌는 환경(일반 서버리스)에선 고정 IP 경유가 필요합니다.
- 토큰을 재발급하면 이전 토큰이 즉시 무효입니다. 프로세스 둘이 각자 발급하면 서로 끊습니다.
주의
- 접수(200)가 승인은 아닙니다. 현재가 대비 괴리가 큰 LOC 매수가 접수 뒤 거부된 실측이 있습니다(+39% 접수 · +48% 거부, 브로커 재량).
- 수량·가격은 문자열, 가격은 소수 둘째 자리.
- 브라우저에서 직접 호출은 불가합니다(CORS preflight 차단) — 서버나 로컬 스크립트에서 보냅니다.
메리츠증권 — 2026년 10월에 열린 신참, LOC·MOC 모두
포털 github.com/meritz-securities/open-api · 토큰 응답의 expires_in (기본 12시간) · IP 문서상 없음 · 코드값 확인 2026-10-23
2026-10-12 베타 · 10-26 정식. POST /trading/v1/overseas/orders/buy · /sell로 경로가 갈리고,oder_cls_code 01 지정가 · 32 LOC · 34 MOC, 조건 oder_cond_cls_code는 지정가 0 · 장마감 7입니다. 거래소는 벤더 식별번호 ovrs_exch_vndr_idno로 보냅니다(나스닥 0537 · 아멕스 0066, 뉴욕은 미확인). 공식 예제 저장소 meritz-securities/open-api가 출처입니다.
응답 규칙
- 오류는 종류와 무관하게 HTTP 500이고 본문
rsp_cd로 가립니다. 성공도 HTTP가 아니라rsp_cd(0000 · 0001 등)로 판정합니다. - 토큰 무효 EGW00121 · EGW00123이면 재발급 1회. 권한 없음 0760은 재발급으로 안 풀립니다(포털에서 해외주식 권한 신청).
- 접수 응답
warn_cls_code1·3은 경고 —warn_cnfr_yn: "Y"를 붙여 다시 보내면 접수됩니다. 2는 보류.
주의
- 모든 호출에
mac_address(12자리) 헤더가 필수(없으면 IGW50024). 서버에서 돌릴 땐 결정적인 값을 만들어 넣습니다. - 상태 조회(
/orders/detail)는 주문일자(한국 날짜)와 주문번호가 함께 필요합니다. - 수량은 숫자, 가격은 문자열(소수 4자리까지). IP 화이트리스트는 문서상 없습니다.
키·토큰·계좌번호는 입력칸이 없습니다. $KIS_TOKEN처럼 환경변수 자리만 비워 두니, 본인 PC에서 값을 채워 실행하세요. 이 페이지는 어떤 값도 서버로 보내지 않습니다.
03 증권사를 바꿀 때 꼭 다시 볼 것
- 접수 ≠ 승인 ≠ 체결. 200 응답은 주문번호를 받았다는 뜻입니다. 전송 뒤 주문번호로 상태를 다시 조회하는 단계가 모든 증권사에 필요합니다.
- 거래소 코드 체계가 전부 다릅니다. 한투 NASD/NYSE/AMEX · 키움 ND/NY/NA · LS 82/81 · 메리츠 벤더코드 · 토스는 필드 없음. 나스닥으로 하드코딩한 코드는 뉴욕·아멕스 상장 종목에서 처음 실패합니다.
- 토큰 만료 시각이 다릅니다. 한투 24시간(발급 1분 1회) · LS 익일 07시(절대 시각) · 토스 재발급 시 이전 토큰 즉시 무효 · 메리츠 EGW00121/123이면 재발급 · 키움 등록 단말기에서만 발급.
- 가격·수량의 자료형. 한투·토스는 문자열, LS는 숫자(소수 수량 거절), 메리츠는 수량 숫자·가격 문자열, 키움은 소수점 보존 문자열. 직렬화 기본값에 맡기면 한 곳에서 꼭 틀어집니다.
- 시장가·MOC 허용 범위. 한투와 LS는 시장가 계열을 매도 전용으로 분류하고, 토스는 MOC가 없습니다. 생성기가 조합별로 알려줍니다.
04 여기 없는 증권사
- NH투자증권 — 2026-08 Namuh PLUG / N2 PLUG로 열렸고 해외주식 주문도 포함됩니다. 명세 정본이 포털 안의 llms.txt라 공개 확인이 안 돼 다음 갱신에 넣습니다.
- KB증권 — 2026-07 개인 오픈베타(국내외 주문 포함). 명세가 신청자에게만 제공돼 예제를 검증할 수 없어 정식 오픈 뒤 재검토합니다.
- 대신증권 — Creon Plus는 윈도우 COM이라 HTTP 요청으로 표현되지 않습니다.
- 유안타·삼성·미래에셋 — 개인용 REST Open API를 공개 자료로 확인하지 못했습니다.
코드값은 증권사가 공지 없이 바꿀 수 있습니다. 설명에 적힌 확인일과 출처를 보고, 실제 주문 전엔 한 번은 포털 명세와 대조하세요. 틀린 값을 발견하면 문의로 알려 주시면 고칩니다.