Open API 이용 안내


메리츠증권 비대면 계좌 개설

  • Open API는 메리츠증권 계좌를 보유한 개인 고객이 이용할 수 있습니다.
  • 서비스 이용을 위해 먼저 비대면 계좌를 개설해 주세요!
  1. 비대면 계좌 개설 아이콘
    비대면 계좌 개설
  2. 본인확인 아이콘
    본인확인 휴대폰인증, 신분증촬영, 계좌정보입력
  3. 계좌 개설 완료 아이콘
    계좌 개설 완료

Open API 신청 방법

01. Open API 포털 접속

  • 메리츠증권 Open API 포털에 접속한 후 '로그인' 버튼을 클릭합니다.
메리츠증권 Open API 포털 메인 화면 — 우측 상단 로그인 버튼

02. Open API 포털 로그인

  • 간편인증을 통해 로그인 후, Open API 서비스를 이용할 수 있습니다.
메리츠증권 Open API 포털 로그인 화면 — 간편인증 로그인 버튼

03. Open API 신청

  • 로그인 후 메인 페이지 우측 상단의 'API 신청' 버튼을 클릭하여 Open API 서비스 이용 신청을 진행합니다.
메리츠증권 Open API 포털 메인 화면 — 우측 상단 API 신청 버튼

04. 신청 정보 입력

  • Open API를 이용할 계좌를 선택한 후, 계좌 비밀번호를 입력합니다.
  • 이용약관 및 위험고지서를 확인·동의 및 계약서류 제공방식 선택 후 '거래신청' 버튼을 클릭합니다.
Open API 신청 정보 입력 화면 — 계좌 선택, 비밀번호 입력, 약관 동의, 계약서류 제공방식 선택 Open API 신청 정보 입력 화면 — 유의사항 및 거래신청 버튼

05. App Key 및 App Secret 발급

  • 1) Open API 약정신청 완료 메시지 확인
  • 2) 신청현황에서 App Key 및 App Secret 발급·확인
Open API 신청 완료 화면
App Key와 App Secret 화면

Open API 해지 방법

01. Open API 약정 해지

  • API 신청 페이지로 이동
  • 계좌번호 선택 및 비밀번호 입력 후 조회
  • '약정해지' 버튼 클릭
  • 약정 해지 완료 시, 발급된 App Key도 자동 폐기
Open API 해지 화면 — 계좌 선택, 비밀번호 입력, 조회 버튼

02. App Key

  • 신청현황 페이지로 이동
  • '키 폐기' 버튼을 클릭하여 기존 App Key 폐기
  • 'App Key 발급' 버튼을 클릭하여 새로운 App Key 및 App Secret 발급
App Key와 App Secret 화면 — 키 폐기 버튼, App Key 발급 버튼

접근 토큰(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 적용예제를 참고하세요.