nhplug-sdk
🏛️ NH투자증권 공식 Open API(NHPLUG) 지원 저장소입니다. · 포털 www.nhplug.com · 문의 apisupport@nhsec.com 대화형 AI(Claude 등)로 쓰려면 →
nhplug-mcp| 코드로 개발·자동매매하려면 → 이 저장소(nhplug-sdk)
NH투자증권 NHPLUG REST Open API 를 파이썬으로 쉽게 쓰기 위한 샘플코드 · 전략 파이프라인 · 문서 모음입니다. Python 개발자와 AI 코딩 도구(Antigravity·Cursor·Claude) 모두를 위한 개발자 키트입니다.
대화형으로 API 를 쓰고 싶다면 로컬 MCP
plug-support/nhplug-mcp를, 코드로 개발하려면 이 저장소를 사용하세요. 두 도구는 호출 식별자가 다릅니다 — SDK 는 URI 경로(/krstock/quote/v1/currentPrice), MCP 는 operationId(krstockQuoteCurrentPrice). MCP 로 쓰던 이름을 SDK 에 그대로 넣으면 동작하지 않습니다.
구성
nhplug/ # 공용 클라이언트 (인증·토큰캐시·Input_0 봉투 자동 처리)
snippets/ # ① 함수 단위 실행 샘플 (기능당 폴더 = 호출 파일 + chk_ 검증 파일)
│ ├── auth/issue_token
│ ├── common/list_accounts
│ ├── krstock/{current_price, current_daily, balance, buyable_quantity, sellable_quantity, order_cash_buy, order_cash_sell, realtime_execution}
│ │ └ realtime_execution = 실시간 체결가 WebSocket 구독 예제
│ └── gbstock/{current_price, balance, buyable_amount, sellable_quantity, order_buy} # 해외주식
│ └ 해외는 매수/매도 가능수량이 buyableAmount 한 API(pcs_dit)로 통합 — AGENTS.md 참고
examples/ # ② 카테고리 통합 예제 (krstock_functions.py + _examples.py)
pipeline/ # ③ 설계→검증→실행 파이프라인 (골격)
instruments/ # 종목마스터(.mst) 구조체 문서(headers/*.h) + 파서 + 28종 일괄 검증
scripts/ # fetch_docs.py — 도메인에서 최신 명세를 docs/ 로 내려받기
docs/ # 명세 로컬 사본(fetch_docs 로 생성, 커밋 안 함) — 정본은 도메인
AGENTS.md # AI 에이전트 규칙(인증·봉투·환경·안전·주문형식) — 자동 로드
설치
pip install nhplug # 공용 클라이언트 + 실시간(WebSocket) + 종목마스터 파서
pip install "nhplug[instruments]" # 종목마스터를 pandas DataFrame 으로 받고 싶을 때
from nhplug import call
from nhplug.realtime import subscribe
from nhplug.instruments import load_master
call("/krstock/quote/v1/currentPrice", {"iem_cd": "005930", "market_cd": "KRX"})
load_master("m_new_stock") # 전 종목 마스터 (자동 다운로드·캐시)
subscribe(["005930"], print, max_messages=5) # 실시간 체결가
패키지 이름은
nhplug, 저장소 이름은nhplug-sdk입니다. 샘플코드(snippets/·examples/)는 패키지에 포함되지 않으니 아래처럼 저장소를 받아 참고하세요.
저장소로 시작 (샘플코드 실행)
git clone https://github.com/plug-support/nhplug-sdk
cd nhplug-sdk
# 의존성 설치 (uv 권장)
uv sync # 또는: pip install requests python-dotenv
# 자격증명 설정
cp .env.example .env # .env 에 APP_KEY / APP_SECRET / BASE_URL 입력
# (선택) 도메인에서 최신 API 명세를 docs/ 로 내려받기 (AI 컨텍스트·오프라인용)
python scripts/fetch_docs.py
동작 확인 (함수 단위 샘플)
# 토큰 발급 → 현재가 → 계좌목록 순으로 확인
python snippets/auth/issue_token/chk_issue_token.py
python snippets/krstock/current_price/chk_current_price.py
python snippets/common/list_accounts/chk_list_accounts.py
통합 예제
cd examples/krstock
python krstock_examples.py
설정 — 파일 하나만 관리하면 됩니다
자격증명과 도메인은 .env 한 곳에서 읽습니다. 코드마다 따로 지정할 필요가 없습니다.
| 순위 | 위치 | 용도 |
|---|---|---|
| 1 | 실제 환경변수 | CI·컨테이너·claude_desktop_config.json 등이 항상 이깁니다 |
| 2 | NHPLUG_ENV_FILE=경로 |
팀 공용 설정 파일을 직접 지정 |
| 3 | 프로젝트 .env |
현재 폴더에서 위로 올라가며 탐색 — 프로젝트별로 다르게 쓸 때 |
| 4 | ~/.nhplug/.env |
한 번 만들면 모든 프로젝트에 공통 적용 (권장) |
빈 값은 다음 순위에서 보충되므로, 전역에 공통 설정을 두고 프로젝트에서 필요한 줄만 덮어쓸 수 있습니다.
# 전역 설정 (한 번만)
mkdir -p ~/.nhplug && cp .env.example ~/.nhplug/.env # Windows: %USERPROFILE%\.nhplug\.env
from nhplug import loaded_files, get_base_url, get_auth_url
loaded_files() # 어떤 설정 파일을 읽었는지 확인 (문제 생기면 여기부터)
브랜드(도메인) — 나무(Namuh) / N2
API·필드·엔드포인트는 완전히 동일하고 접속 도메인만 다릅니다. 아래 예시는 나무(nhplug.com) 기준입니다.
| 브랜드 | 운영(Live) | 모의투자(Mock) | 문서·포털 |
|---|---|---|---|
| 나무(Namuh) | api.nhplug.com:8443 |
moapi.nhplug.com:8443 |
www.nhplug.com |
| N2 | api.n2plug.com:8443 |
moapi.n2plug.com:8443 |
www.n2plug.com |
⚠️ N2 고객은
.env에서 세 줄을 모두 n2plug 로 바꾸세요. 하나라도 빠지면 그 기능만 조용히 나무 도메인으로 갑니다.NHPLUG_BASE_URL=https://api.n2plug.com:8443 # 호출 (모의투자는 moapi.n2plug.com:8443) NHPLUG_AUTH_URL=https://api.n2plug.com:8443 # 토큰 — 안 바꾸면 인증 실패 NHPLUG_INSTRUMENTS_BASE=https://www.n2plug.com/instruments # 종목마스터실시간(WebSocket) 주소는
NHPLUG_BASE_URL에서 자동으로 유도되므로 따로 설정하지 않아도 됩니다.
환경변수
| 변수 | 설명 |
|---|---|
NHPLUG_APP_KEY / NHPLUG_APP_SECRET |
발급받은 앱키/시크릿 (APP_KEY/APP_SECRET 도 허용) |
NHPLUG_BASE_URL |
호출 대상. 기본 https://api.nhplug.com:8443(운영) · 교육·시뮬레이션은 https://moapi.nhplug.com:8443 |
NHPLUG_AUTH_URL |
토큰 발급 URL. 기본 https://api.nhplug.com:8443(운영 전용 — moapi 미제공) |
NHPLUG_DEFAULT_ACCOUNT |
잔고 샘플 등에서 사용할 기본 계좌번호 |
NHPLUG_INSTRUMENTS_BASE |
종목마스터(.mst) 다운로드 기준 URL. 기본 https://www.nhplug.com/instruments · N2 는 https://www.n2plug.com/instruments |
NHPLUG_INSTRUMENTS_CACHE_DIR |
종목마스터 캐시 위치. 기본 ~/.nhplug/instruments/ |
NHPLUG_WS_URL |
실시간 WebSocket 주소를 직접 지정. 없으면 NHPLUG_BASE_URL 호스트에서 유도(국내 7070 · 해외 7080 · 모의 17070) |
계좌구분(acct_type) — 환경에 맞는 계좌 고르기
계좌목록(/n2/acctinfo)은 여러 구분의 계좌를 섞어서 내려줍니다. 계좌구분이 사용 환경을 결정합니다.
acct_type |
용도 | 사용 도메인 |
|---|---|---|
01 |
🔴 운영 (일반) | api.nhplug.com:8443 |
02 |
🔴 운영 (주문대리인) | api.nhplug.com:8443 |
03 |
🟢 모의투자 | moapi.nhplug.com:8443 |
⚠️ 운영 도메인에
03계좌를, 모의투자 도메인에01·02계좌를 쓰면 실패합니다. 목록의 첫 계좌를 그대로 쓰지 마세요.
from snippets.common.list_accounts.list_accounts import usable_accounts, current_env
current_env() # 'live' | 'mock' — NHPLUG_BASE_URL 기준
usable_accounts() # 현재 환경에서 쓸 수 있는 계좌만
python snippets/common/list_accounts/list_accounts.py # 계좌별 환경·사용가능 여부 표로 출력
오류 처리 · 토큰 캐시
from nhplug import call, NhplugError
try:
data = call("/krstock/quote/v1/currentPrice", {"iem_cd": "005930", "market_cd": "KRX"})
except NhplugError as e:
print(e.category, e.code, e.message) # business / rate_limit / auth / network / http
- HTTP 200 이어도
rsp_cd가 성공 코드가 아니면 예외입니다. 실패를 성공으로 오판하지 않습니다.- 기본 성공 코드:
00000·00166·00221·13578(+rsp_msg에 "완료" 가 포함되면 성공으로 처리하는 안전망) - 성공 코드 교체:
NHPLUG_SUCCESS_CODES=00000,00166,00221,13578,... - 예외 없이 원본 응답이 필요하면:
call(..., raise_on_error=False)
- 기본 성공 코드:
- 토큰은 24시간 유효하며
~/.nhplug/token-*.json에 캐시되어 스크립트를 여러 번 실행해도 재발급하지 않습니다(재발급 1회 = 보안 알림 1건).- 파일 권한은 OS 기본값을 따릅니다(별도
chmod없음). 공용 계정·공유 서버에서는NHPLUG_TOKEN_CACHE_DIR로 접근이 제한된 경로를 지정하거나NHPLUG_TOKEN_CACHE=0으로 끄세요. - 끄기:
NHPLUG_TOKEN_CACHE=0· 위치 변경:NHPLUG_TOKEN_CACHE_DIR - 재발급은 401(토큰 무효) 일 때만 합니다.
429재시도에는 기존 토큰을 그대로 사용합니다.
- 파일 권한은 OS 기본값을 따릅니다(별도
- 429(호출 유량 초과) 는 자동 재시도하지 않고
category="rate_limit"예외로 알립니다(실측 한도 초당 5회 수준). 호출 간격을 늘려 주세요.
⚠️ 안전
- 기본 호출 대상은 운영(api). 개발·교육·시뮬레이션은 모의투자(
moapi) 로 전환하세요. 접근토큰은 운영 전용이라, moapi 호출에도 토큰은 api 에서 발급됩니다. - 주문 샘플은 기본 드라이런입니다. 실주문은
dry_run=False로, 반드시 모의투자(moapi)에서 검증 후. - 앱키/시크릿은 코드에 넣지 말고
.env로 관리(.gitignore처리됨).
가이드
- Antigravity 로 바이브코딩하기 — 명세만으로 AI IDE(Antigravity·Cursor)에서 NH Open API 개발·테스트하는 준비와 절차
라이선스 · 문의
MIT · apisupport@nhsec.com
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nhplug-0.1.0.tar.gz.
File metadata
- Download URL: nhplug-0.1.0.tar.gz
- Upload date:
- Size: 38.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82e02ebd6c83e7328f5453425390d1c6d07106d36f3f063650287d2b7d99a6d4
|
|
| MD5 |
36ffd06a4c2a988f65b1a935ce3bd840
|
|
| BLAKE2b-256 |
f54ca54d37563970e367df1744acd0ed30a1cc74d6df14b5ff79237be0c4ee3b
|
File details
Details for the file nhplug-0.1.0-py3-none-any.whl.
File metadata
- Download URL: nhplug-0.1.0-py3-none-any.whl
- Upload date:
- Size: 61.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b8eb030e9605440097343f33e97aa6e9d8e2045a4db274f014556a568c6ea5ad
|
|
| MD5 |
e8d644c5d1556ef11e238a408462e90b
|
|
| BLAKE2b-256 |
a3f4a7d4772fbfd9d5d5a82300de62a1230e2660acbd389be8b3007ce14f4026
|