Private API Signature
Private API는 Public API랑 다르게 "이 요청은 진짜 네가 보낸 게 맞아!"라는 걸 증명하는 인증 과정이 필요
1. 인증 과정
| 요소 | 설명 |
| API Key (Connect Key) | "나야!" 하고 보여주는 아이디 같은 것 |
| API Secret (Secret Key) | "내가 진짜 나라는 걸 증명할게!" 하는 비밀번호 |
| Nonce | 요청을 보낼 때마다 사용하는 딱 한 번만 쓸 수 있는 숫자. 같은 요청을 두 번 보내는 공격(Replay Attack)을 막기 위해 사용. 보통 현재 시간을 이용해서 생성 |
2. 예시 확인
' 2025-05-17 [1] Preview & Bithumb API '에서 다룬 bithumb API 정보에서 API 사용 예시를 확인 가능하다.

위 이미지에서 오른쪽 PRIVATE API에 있는 '자산'을 클릭하면 아래와 같은 예시가 나와있다.
Python을 클릭하여 필요한 예시를 확인할 수 있다.

그 아래에 Response 예시도 확인 가능하다.
- 200 OK

- 400 Bad Request

3. 필요한 Module 설치
- 예시에서 사용한 jwt는 설치가 필요한 module이다.
- ' 2025-05-19 [2] PyCharm 실행 ~ Public API Test'에서 진행한 것과 같이 jwt module을 설치한다.
- Terminal을 실행하여 pip install pyjwt 입력

- Successfully installed pyjwt 문구 확인

4. Code 작성
config.py
- ### 대신 실제 자신의 Key 입력
api_key = "##############################################"
api_secret = "####################################################################################"
bithumb_private_api_test.py
- 아래 보강된 예시코드 입력
- 보강 내용 : json형식 출력, try-except 추가
# bithumb_private_api_test.py
# 1. 필요한 라이브러리 설치하기
# 파이참 터미널에서 아래 명령어를 먼저 실행!
# pip install pyjwt
import jwt
import uuid
import time
import requests
import json
# 2. config.py 파일에서 API 키 가져오기
try:
from config import api_key, api_secret
except ImportError:
print("config.py 파일을 생성하고 API 키를 입력해주세요.")
exit()
# 3. API 요청 정보 설정
api_url = "https://api.bithumb.com"
endpoint = "/v1/accounts" # 최신 v1 엔드포인트 사용
# 4. JWT(JSON Web Token) 생성
payload = {
'access_key': api_key,
'nonce': str(uuid.uuid4()),
'timestamp': str(round(time.time() * 1000)) # timestamp는 문자열이어야 함
}
# pyjwt를 사용해서 토큰 생성 (알고리즘은 HS256 사용)
jwt_token = jwt.encode(payload, api_secret, algorithm="HS256")
authorization_token = f'Bearer {jwt_token}'
headers = {
'Authorization': authorization_token
}
# 5. API 호출 (v1/accounts는 GET 방식)
try:
print("빗썸 v1 API로 계정 정보를 요청합니다...")
response = requests.get(api_url + endpoint, headers=headers)
response.raise_for_status() # 200 OK가 아니면 에러 발생
print("\n요청 성공! 🎉")
print("계정 정보:")
# 응답 내용 (JSON 형식) 가져오기
print(json.dumps(response.json(), indent=4, ensure_ascii=False))
except Exception as err:
print("\n요청 실패 ㅠㅠ")
print(f"에러 원인: {err}")
# 응답이 있는 경우 상세 내용 출력
if 'response' in locals() and response:
print(f"상태 코드: {response.status_code}")
print(f"응답 내용: {response.text}")
5. 결과 확인
- 아래와 같이 결과가 출력되면 성공!

- 항목 별 설명
| 항목 | 설명 |
| curreny | 화폐 단위 or 종목 이름 - KRW : 원화 - ETH : 이더리움 |
| balance | 보유하고 있는 총 수량 (거래 가능한 수량 + 거래 중인 수량) - 숫자가 아니라 문자열인 점 주의 |
| locked | 현재 거래에 묶여있는 수량 - 매수 매도를 걸어두면 1 |
| avg_buy_price | 평균 매수 단가(평단가) |
| avg_buy_price_modified | 사용자가 직접 수정한 평단가 (빗썸 웹사이트에서는 사용자가 직접 평단가를 수정할 수 있는 기능 존재) |
| unit_curreny | 위에 있는 모든 가격 정보(or 평단가)의 기준이 되는 화폐 단위 |
현재까지 진행 상태
- Project 환경 구축 완료
- Public API로 시장 정보 가져오기 성공
- Private API로 내 자산 정보 가져오기 성공
다음 단계
- 코드 정리 및 함수화 (Refactoring)
끝!!
'프로젝트 > 코인 투자 매크로' 카테고리의 다른 글
| 2025-06-06 [6] 가상 자산 관리 및 거래 내역 (0) | 2025.06.06 |
|---|---|
| 2025-06-04 [5] 투자 방법 설계 (2) | 2025.06.04 |
| 2025-06-01 [4] bithumb_api_client.py (2) | 2025.06.01 |
| 2025-05-19 [2] PyCharm 실행 ~ Public API Test (2) | 2025.05.19 |
| 2025-05-17 [1] Preview & Bithumb API (1) | 2025.05.17 |