MODA API Docs
Guides
API Reference
Guides
API Reference
  1. 연동 가이드
  • 개요
    • MODA Open API
  • 시작하기
    • API Key 발급
    • 인증 헤더 만들기
    • 요청 서명 만들기
    • 첫 API 호출하기
  • 연동 가이드
    • REST API 연동
    • WebSocket 연동
    • API 요청 수 제한
  1. 연동 가이드

REST API 연동

기본 정보#

항목내용
Base URLhttps://open-api.moda.co.kr
프로토콜HTTPS (TLS 1.2 이상)
데이터 형식JSON
인증JWT (HS512) + HMAC-SHA512 서명

요청 형식#

HTTP Method#

Method용도예시
GET데이터 조회시세, 잔고, 주문 내역
POST데이터 생성주문 생성
PATCH데이터 수정주문 정정
DELETE데이터 삭제—

Query Parameter — GET 요청#

Request Body — POST / PATCH 요청#

인증 헤더 구성은 인증 헤더 만들기, 서명 생성은 요청 서명 만들기를 참고하세요.

응답 형식#

성공 응답#

{
  "status": "success",
  "code": 200,
  "data": { ... }
}

목록 응답#

{
  "status": "success",
  "code": 200,
  "data": {
    "contents": [ { ... } ]
  }
}

에러 응답#

RFC 7807 Problem Details 형식을 사용합니다.
{
  "type": "about:blank",
  "title": "Security Error",
  "status": 401,
  "detail": "요청 서명(X-Signature)이 유효하지 않습니다.",
  "instance": "/open/v1/orders",
  "code": "OA_004",
  "timestamp": "2026-03-03T12:00:00.000Z"
}
Validation 에러의 경우 validation 필드가 추가됩니다.
{
  "type": "about:blank",
  "title": "Validation Failed",
  "status": 400,
  "detail": "입력값 검증에 실패했습니다.",
  "instance": "/open/v1/orders",
  "code": "V0001",
  "timestamp": "2026-03-03T12:00:00.000Z",
  "validation": [
    { "field": "stockCd", "message": "유효하지 않은 종목코드입니다." }
  ]
}

HTTP 상태 코드#

코드설명재시도
200요청 성공—
201리소스 생성 성공—
400잘못된 요청X
401인증 실패X
403권한 없음X
404리소스 없음X
429Rate Limit 초과O (Retry-After 후)
500서버 내부 오류O (지수 백오프)

데이터 타입#

타입설명예시
String문자열"USDKRW"
Number정수 또는 소수1350.50
Boolean참/거짓true
DateTimeISO 8601"2026-03-05T14:30:00.000Z"
Enum정해진 값"BUY", "SELL"

페이징#

차트 데이터 등 목록 API는 offset + limit 기반 페이징을 사용합니다.
파라미터타입설명
offsetstring초기 요청 시 빈 문자열, 이후 마지막 데이터의 타임스탬프
limitint조회할 항목 수

요청 예시#

시세 조회 — JWT 인증 필요#

조회 권한 API Key의 JWT 인증이 필요합니다.

Python#

cURL#

응답 예시
{
  "status": "success",
  "code": 200,
  "data": {
    "contents": [
      { "buy": "1.84823", "sell": "1.84816", "buySize": "100000", "sellSize": "100000" },
      { "buy": "1.84826", "sell": "1.84813", "buySize": "500000", "sellSize": "500000" },
      { "buy": "1.84829", "sell": "1.84810", "buySize": "1000000", "sellSize": "1000000" },
      { "buy": "1.84839", "sell": "1.84801", "buySize": "3000000", "sellSize": "3000000" },
      { "buy": "1.84854", "sell": "1.84786", "buySize": "5000000", "sellSize": "5000000" }
    ]
  }
}

주문 생성 — JWT + 서명 필요 (주문 API)#

JWT + 서명이 모두 필요합니다. 주문 권한 API Key가 필요합니다.

Python#

cURL#

응답 예시
{
  "status": "success",
  "code": 200,
  "data": {
    "orderDateTime": "2026-03-05T14:30:00.000Z",
    "orderNo": "27"
  }
}

Best Practice#

인증 모듈 분리#

JWT 생성과 서명 로직을 별도 모듈로 분리하여 모든 API 호출에서 재사용하세요.
Python — API 클라이언트 예시

시간 동기화#

중요
X-Timestamp 검증은 ±60초입니다. 시스템 시간이 부정확하면 주문 API 서명 인증이 실패합니다.

주문 멱등성 확인#

주의

주문 요청 후 타임아웃이 발생하면 주문이 이미 접수되었을 수 있습니다. 재주문 전에 반드시 주문 내역을 조회하여 중복 주문을 방지하세요.

Secret Key 관리#

환경변수 또는 .env 파일로 관리 (반드시 .gitignore에 추가)
프론트엔드 코드, 공개 저장소에 절대 포함 금지
로그에 Secret Key, JWT 토큰 노출 금지

다음: WebSocket 연동 →
수정일 2026-03-27 05:46:06
이전
첫 API 호출하기
다음
WebSocket 연동
Built with