Platform · 암호화폐

빗썸 자동매매 봇
Bithumb API 맞춤 제작

빗썸(Bithumb)의 KRW·BTC 마켓에서 24시간 동작하는 자동매매 봇을 맞춤 제작합니다. 국내 두 번째로 큰 원화 마켓을 보유한 거래소로, 업비트와 함께 운영하면 거래소 간 차익거래(김치프리미엄 포함) 전략도 가능합니다. 빗썸 고유의 호가 단위 규칙·nonce 시간 보정·자기매칭 자동 취소 등 함정을 모두 반영해 안정성 있게 제작합니다.

한 줄 요약

빗썸 API 2.0은 JWT 토큰을 Authorization: Bearer 헤더에 실어 호출합니다. 토큰 페이로드에 access_key·nonce·timestamp를 넣고 HS256으로 시크릿 키 서명하는데, 파라미터가 있는 요청은 여기에 query_hash(쿼리 문자열의 SHA512)와 query_hash_alg: "SHA512"를 반드시 추가해야 합니다. 이걸 빠뜨리면 401invalid_query_payload가 돌아옵니다.

⚠️ 업비트 코드를 그대로 옮기면 주문에서 막힙니다 — 빗썸 주문은 POST /v2/orders이고 파라미터명이 ord_type이 아니라 order_type입니다.

빗썸 자동매매 주요 유형

기술 구조

항목사양
API 문서apidocs.bithumb.com (한국어 + 영어)
인증API Key + Secret Key + nonce(timestamp) HMAC-SHA512 서명
언어Python 3.10+ 64bit, requests / aiohttp
마켓KRW (원화), BTC
운영 시간24시간 365일 (휴장 없음)
API 버전API 1.0 (HMAC) / API 2.0 (JWT) — 두 버전 모두 지원
수수료등급별 0.04~0.25% (메이커 ~0.04~0.05%)

빗썸 고유 함정 — 알고랩이 미리 처리합니다: nonce 시간이 ±5초 이상 어긋나면 5300 unauthorized 발생 → 서버 시간 자동 보정 로직 필수. 가격대별 호가 단위 규칙(공식 문서 일부 부정확)은 실측 검증 데이터 기반으로 적용. 자기매칭 자동 취소(5600) 회피를 위한 호가 충돌 사전 검증까지 기본 포함.

핵심 기능 구성 요소

빗썸 API는 실제로 어떻게 호출하나

아래는 2026년 8월 기준 빗썸 API 2.0(JWT) 기준입니다. REST 기본 주소는 https://api.bithumb.com이고, 시세 같은 Public API는 인증 없이, 자산·주문 같은 Private API는 JWT 토큰이 필요합니다.

항목
REST 주소https://api.bithumb.com
인증 (API 2.0)Authorization: Bearer <JWT> · 서명 알고리즘 HS256
JWT 필수 필드access_key · nonce · timestamp
파라미터 있을 때 추가query_hash(SHA512) · query_hash_alg: "SHA512"
전체 자산 조회GET /v1/accounts
주문 요청POST /v2/orders

1. 인증 토큰 만들기 — 파라미터가 있으면 규칙이 달라진다

파라미터가 없는 요청(예: 전체 자산 조회)은 페이로드 세 필드로 끝납니다.

import jwt, uuid, time, requests

API_URL = "https://api.bithumb.com"

payload = {
    "access_key": ACCESS_KEY,
    "nonce": str(uuid.uuid4()),          # 요청마다 새로 만든다
    "timestamp": round(time.time() * 1000),   # 밀리초
}
token = jwt.encode(payload, SECRET_KEY)      # HS256

res = requests.get(API_URL + "/v1/accounts",
                   headers={"Authorization": f"Bearer {token}"}, timeout=5)

파라미터가 있는 요청은 여기에 두 필드가 더 붙습니다. 쿼리 문자열을 SHA512로 해시한 값이 query_hash입니다.

import hashlib
from urllib.parse import urlencode

param = {"market": "KRW-BTC"}
query = urlencode(param).encode()
query_hash = hashlib.sha512(query).hexdigest()

payload = {
    "access_key": ACCESS_KEY,
    "nonce": str(uuid.uuid4()),
    "timestamp": round(time.time() * 1000),
    "query_hash": query_hash,
    "query_hash_alg": "SHA512",      # 문자열 고정값
}
token = jwt.encode(payload, SECRET_KEY)

res = requests.get(API_URL + "/v1/orders/chance",
                   params=param,
                   headers={"Authorization": f"Bearer {token}"}, timeout=5)

서명은 HS256, query_hashSHA512 — 둘이 다릅니다. 토큰 서명 알고리즘과 쿼리 해시 알고리즘을 같은 것으로 맞추려다 실패하는 경우가 많습니다. 또 하나, 해시를 만든 쿼리 문자열과 실제로 보낸 쿼리가 한 글자라도 다르면 검증에 실패합니다. urlencode()를 두 번 부르지 말고 한 번 만든 값을 해시와 요청 양쪽에 그대로 쓰십시오. 배열 파라미터는 key[]=value 형태로 펼쳐야 합니다.

2. 주문 — 업비트 코드를 옮기면 여기서 막힌다

빗썸 주문은 POST /v2/orders입니다. 파라미터명이 order_type이라는 점이 가장 자주 걸립니다.

파라미터비고
marketKRW-BTC 형식필수
sidebid(매수) / ask(매도)필수
order_typelimit / price / market / best필수
price문자열지정가, 시장가 매수 시 필수
volume문자열지정가, 시장가 매도 시 필수
time_in_forceioc / fok / post_only선택
client_order_id사용자 지정 ID선택 · 중복 주문 방지에 유용

시장가 주문의 방향별 차이를 놓치지 마십시오. 시장가 매수얼마어치 살지(price)를 넣고, 시장가 매도몇 개 팔지(volume)를 넣습니다. 둘을 반대로 넣으면 파라미터 오류가 납니다. 또한 price·volume문자열입니다 — 실수형으로 보내면 부동소수점 표기 때문에 값이 틀어질 수 있습니다.

3. 401이 떴을 때 확인 순서

빗썸은 오류를 error.nameerror.message로 돌려줍니다. 이름만 보면 원인이 거의 특정됩니다.

{
  "error": {
    "name": "invalid_query_payload",
    "message": "Jwt의 query를 검증하는데 실패하였습니다."
  }
}
HTTPname먼저 확인할 것
401invalid_query_payloadquery_hash를 만든 문자열과 실제 전송 쿼리가 같은가
401jwt_verification시크릿 키가 맞는가, 서명이 HS256인가
401expired_jwttimestamp가 밀리초인가, 서버 시계가 어긋나지 않았나
401NotAllowIPIP 화이트리스트에 현재 서버 IP가 등록됐나
401out_of_scope해당 API Key에 주문·출금 권한이 있는가
400invalid_price가격이 호가 단위에 맞는가
400cross_trading내 기존 주문과 체결될 호가를 냈다 (자기매칭)
404order_not_found취소·조회하려는 주문 ID가 유효한가
422order_not_ready접수 처리 중 — 즉시 재시도 대신 잠시 대기

cross_trading은 빗썸 봇에서 특히 자주 보는 항목입니다. 내 매수 호가와 내 매도 호가가 겹치면 주문이 취소되므로, 그리드 봇처럼 양방향 호가를 동시에 거는 전략은 주문 전에 자기 호가 충돌을 먼저 검사해야 합니다. 그리드 설계 자체는 그리드 매매 봇 가이드에 정리돼 있습니다.

확인 캐치. 위 엔드포인트·파라미터명·에러 코드는 2026년 8월 13일 기준 빗썸 공식 API 문서(apidocs.bithumb.com)를 근거로 정리했습니다. 아래 표의 수수료·호가 단위·호출 한도 수치는 거래소 정책에 따라 수시로 바뀌므로 코드에 상수로 박지 말고 설정으로 분리한 뒤 공식 고지에서 현재 값을 확인하십시오. 본 페이지는 자동매매 프로그램 제작 서비스 안내이며, 투자중개·투자자문이 아니고 수익률이나 시세 방향에 대한 예측을 담고 있지 않습니다.

제작 비용·기간 가이드

유형예상 비용제작 기간
단일 코인 지표 기반 봇70~130만원7~10일
다중 코인 + 리스크 관리 + 알림130~220만원10~14일
그리드 봇180~300만원14~20일
차익거래 (빗썸 + 업비트/바이낸스)250~450만원14~21일
김치프리미엄 알림 + 자동 진입150~300만원10~16일

자주 묻는 질문

invalid_query_payload 오류는 왜 나나요?

JWT 안의 query_hash와 실제로 보낸 쿼리가 다를 때 납니다. 쿼리 문자열을 두 번 만들면 파라미터 순서·인코딩이 미세하게 달라져 검증에 실패합니다. 한 번 만든 문자열을 해시와 요청에 같이 쓰십시오. 배열은 key[]=value로 펼쳐야 합니다.

업비트 봇 코드를 빗썸에 그대로 쓸 수 있나요?

인증 구조는 비슷하지만 주문에서 갈립니다. 빗썸은 POST /v2/ordersorder_type을 쓰고, 시장가 매수는 price(금액)·시장가 매도는 volume(수량)을 넣습니다. 두 값 모두 문자열입니다. 거래소별 어댑터를 나누는 편이 안전합니다. 업비트 쪽 구현은 업비트 자동매매를 참고하십시오.

업비트와 비교하면 뭐가 나은가요?

업비트가 거래량·유동성 1위이지만, 빗썸은 일부 알트코인 거래량과 수수료 등급제에서 차별화됩니다. 차익거래 시에는 두 거래소를 동시에 운영하는 게 가장 흔한 구조입니다. 알고랩은 두 API 모두 익숙해 병행 봇 제작이 효율적입니다.

API 1.0(HMAC)과 2.0(JWT) 중 뭐 써야 하나요?

안정성·기존 코드 호환성이 우선이면 1.0, 신규 기능·OAuth 흐름이 필요하면 2.0입니다. 신규 제작 의뢰 시 알고랩이 요구사항 보고 결정해드립니다. 두 API를 모두 지원하는 봇으로 제작도 가능합니다.

빗썸이 거래정지·임시 점검할 때는 어떻게 처리되나요?

API 응답으로 거래정지 종목·점검 시간을 자동 감지해 신규 진입을 차단합니다. 보유 종목은 그대로 유지하고 점검 종료 후 재시작 시 보유·미체결 상태를 자동 인계합니다.

김치프리미엄 차익거래가 실제로 가능한가요?

API 차원에서는 충분히 구현 가능합니다. 다만 출금 한도·트래블룰·거래소별 입출금 시간 차이 등 운영 측면 제약이 있어, 매매 자동화는 알고랩이 맡고 자금 이동·출금은 의뢰자가 수동으로 운영하는 구조가 일반적입니다. 자세한 견적은 상담에서.

제작 사례

빗썸 자동매매 제작 사례는 포트폴리오에서 확인하실 수 있습니다. 업비트와 함께 운영하는 차익거래 사례도 다수 보유하고 있습니다.

빗썸 단독·차익거래 모두 상담 가능

전략 아이디어가 구체적이지 않아도 괜찮습니다.
알고랩이 24시간 빠르게 답변드립니다.

무료 상담 시작하기 요금제 보기