Open API 이용 안내
메리츠증권 비대면 계좌 개설
- Open API는 메리츠증권 계좌를 보유한 개인 고객이 이용할 수 있습니다.
- 서비스 이용을 위해 먼저 비대면 계좌를 개설해 주세요!
-
비대면 계좌 개설

-
본인확인 휴대폰인증, 신분증촬영, 계좌정보입력

-
계좌 개설 완료

Open API 신청 방법
01. Open API 포털 접속
- 메리츠증권 Open API 포털에 접속한 후 '로그인' 버튼을 클릭합니다.
02. Open API 포털 로그인
- 간편인증을 통해 로그인 후, Open API 서비스를 이용할 수 있습니다.
03. Open API 신청
- 로그인 후 메인 페이지 우측 상단의 'API 신청' 버튼을 클릭하여 Open API 서비스 이용 신청을 진행합니다.
04. 신청 정보 입력
- Open API를 이용할 계좌를 선택한 후, 계좌 비밀번호를 입력합니다.
- 이용약관 및 위험고지서를 확인·동의 및 계약서류 제공방식 선택 후 '거래신청' 버튼을 클릭합니다.
05. App Key 및 App Secret 발급
- 1) Open API 약정신청 완료 메시지 확인
- 2) 신청현황에서 App Key 및 App Secret 발급·확인
Open API 해지 방법
01. Open API 약정 해지
- API 신청 페이지로 이동
- 계좌번호 선택 및 비밀번호 입력 후 조회
- '약정해지' 버튼 클릭
- 약정 해지 완료 시, 발급된 App Key도 자동 폐기
02. App Key
- 신청현황 페이지로 이동
- '키 폐기' 버튼을 클릭하여 기존 App Key 폐기
- 'App Key 발급' 버튼을 클릭하여 새로운 App Key 및 App Secret 발급
접근 토큰(Access Token) 발급 방법
- Open API 를 호출하려면 접근 토큰이 필요합니다. 신청현황에서 발급받은 APP KEY·APP SECRET 으로 토큰 발급 API(POST /oauth2/token)를 호출해 받습니다.
- 아래 예제는 Python 3 와 requests 패키지만 사용합니다. (pip install requests)
- 발급에 실패하면 rsp_cd로 원인을 확인합니다. EGW00103(유효하지 않은 client_id)은 APP KEY 오타이거나 비밀번호 변경, ID변경 또는 ID등록의 경우에 발생할 수 있습니다.
01. APP KEY · APP SECRET 입력
APP_KEY = "서비스 신청 시 발급받은 App Key" APP_SECRET = "서비스 신청 시 발급받은 App Secret"
- Open API 신청 후 발급된 APP KEY와 APP SECRET을 입력합니다.
- APP SECRET 은 발급 화면에서만 확인할 수 있습니다. 소스코드 저장소 등에 남기지 않도록 환경변수나 별도 파일로 관리하세요.
02. Access Token 발급 요청
import requests
BASE_URL = "https://openapi.imeritz.com:9443"
URL = BASE_URL + "/oauth2/token"
headers = {"content-type": "application/x-www-form-urlencoded"}
values = {"grant_type": "client_credentials",
"client_id": APP_KEY, "client_secret": APP_SECRET,
"scope": "login"}
response = requests.post(URL, headers=headers, data=values, timeout=15)
- APP KEY(client_id)와 APP SECRET(client_secret)을 포함하여 Access Token 발급 API를 호출합니다.
- grant_type 은 "client_credentials", scope 는 "login" 고정값이며, 본문은 application/x-www-form-urlencoded 형식으로 보냅니다.
03. Access Token 확인
if response.status_code != 200:
# 발급 실패 — 본문의 rsp_cd 에 원인이 담겨 옵니다.
# 예: {"rsp_cd": "EGW00103", "rsp_msg": "유효하지 않은 client_id입니다."}
raise RuntimeError(f"토큰 발급 실패 HTTP {response.status_code}: {response.text}")
result = response.json()
ACCESS_TOKEN = result["access_token"] # 이후 API 호출의 authorization 헤더에 사용
EXPIRES_IN = result["expires_in"] # 유효기간(초)
print(ACCESS_TOKEN, EXPIRES_IN)
- 응답값에서 발급된 Access Token(access_token)과 유효기간(expires_in, 초)을 확인합니다. token_type 은 "Bearer" 입니다.
- 발급에 실패하면 rsp_cd로 원인을 확인합니다. EGW00103(유효하지 않은 client_id)은 APP KEY 오타이거나 비밀번호 변경, ID변경 또는 ID등록의 경우에 발생할 수 있습니다.
04. PYTHON 전체 코드 예시
import time
import requests
# APP KEY와 APP SECRET 입력
APP_KEY = "발급받은 APP_KEY"
APP_SECRET = "발급받은 APP_SECRET"
BASE_URL = "https://openapi.imeritz.com:9443"
_token, _token_expires = None, 0.0
def get_token():
"""접근 토큰 발급 — 만료 전까지 재사용합니다 (호출마다 새로 발급하지 않습니다)"""
global _token, _token_expires
if _token and time.time() < _token_expires:
return _token
response = requests.post(
BASE_URL + "/oauth2/token",
headers={"content-type": "application/x-www-form-urlencoded"},
data={"grant_type": "client_credentials",
"client_id": APP_KEY, "client_secret": APP_SECRET,
"scope": "login"},
timeout=15)
if response.status_code != 200:
raise RuntimeError(f"토큰 발급 실패 HTTP {response.status_code}: {response.text}")
result = response.json()
_token = result["access_token"]
_token_expires = time.time() + int(result["expires_in"]) - 60 # 만료 60초 전에 재발급
return _token
ACCESS_TOKEN = get_token()
print(ACCESS_TOKEN)
- 접근 토큰 유효기간 : 발급 응답의 expires_in(초) 동안 유효합니다. 만료 전까지 재사용하고, 만료(rsp_cd EGW00123)·무효(EGW00121) 응답을 받으면 APP KEY·APP SECRET 으로 재발급한 뒤 이용합니다.
- 토큰 폐기 API(POST /oauth2/revoke)를 호출하면 해당 APP KEY 로 발급된 토큰이 즉시 무효화됩니다. 필요한 경우에만 사용하세요.
05. 발급받은 토큰으로 API 호출
import uuid
def mac_address():
"""호출 단말의 MAC 주소 — 12자리 대문자 16진수 (예: "A1B2C3D4E5F6"). 이 헤더가 없으면 요청이 거부됩니다"""
n = uuid.getnode()
return "".join(f"{(n >> s) & 0xFF:02X}" for s in range(40, -1, -8))
headers = {"authorization": f"Bearer {get_token()}", # 접근 토큰
"mac_address": mac_address()} # 필수 헤더
# 예: 주식 현재가 조회 — GET /market/v1/prices (조회 API 는 GET + 쿼리스트링)
response = requests.get(BASE_URL + "/market/v1/prices",
params={"mrkt_div_code": "J", "iscd": "005930"},
headers=headers, timeout=15)
print(response.json())
- 모든 API 호출에 authorization(Bearer 접근 토큰)과 mac_address 헤더를 넣습니다. 조회 API 는 GET + 쿼리스트링, 주문 API 는 POST + JSON 본문입니다.
- 오류는 종류와 관계없이 HTTP 500 으로 오며, 원인은 응답 본문의 rsp_cd·rsp_msg·rsp_sub_msg 에 담깁니다. 시세·주문·계좌 조회 예제는 Open API 적용예제를 참고하세요.
메뉴