{
  "info": {
    "name": "bitForum Crypto API",
    "description": "bitForum 코인 관련 API 엔드포인트 (https://api.bitforum.io)",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://localhost:4000",
      "type": "string"
    },
    {
      "key": "symbol",
      "value": "btc",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "Tickers",
      "description": "현재가 관련 API",
      "item": [
        {
          "name": "전체 Ticker 목록",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/crypto/tickers",
              "host": ["{{baseUrl}}"],
              "path": ["api", "crypto", "tickers"]
            },
            "description": "등록된 모든 코인의 현재가 목록을 조회합니다."
          }
        },
        {
          "name": "주요 Ticker 목록",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/crypto/tickers/featured",
              "host": ["{{baseUrl}}"],
              "path": ["api", "crypto", "tickers", "featured"]
            },
            "description": "주요(Featured) 코인의 현재가 목록을 조회합니다."
          }
        },
        {
          "name": "Ticker 상세",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/crypto/{{symbol}}/ticker",
              "host": ["{{baseUrl}}"],
              "path": ["api", "crypto", "{{symbol}}", "ticker"]
            },
            "description": "특정 코인의 현재가 상세 정보를 조회합니다.\n\nRoute Params:\n- symbol: 코인 심볼 (예: btc, eth, xrp)"
          }
        }
      ]
    },
    {
      "name": "Candles",
      "description": "캔들(차트) 관련 API",
      "item": [
        {
          "name": "초(Seconds) 캔들",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/crypto/{{symbol}}/candles/seconds?count=200",
              "host": ["{{baseUrl}}"],
              "path": ["api", "crypto", "{{symbol}}", "candles", "seconds"],
              "query": [
                {
                  "key": "count",
                  "value": "200",
                  "description": "조회할 캔들 수 (1~200, 기본값: 200)"
                }
              ]
            },
            "description": "특정 코인의 초 단위 캔들 데이터를 조회합니다.\n\n최근 3개월 이내 데이터만 조회 가능합니다."
          }
        },
        {
          "name": "분(Minutes) 캔들",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/crypto/{{symbol}}/candles/minutes/1?count=200",
              "host": ["{{baseUrl}}"],
              "path": ["api", "crypto", "{{symbol}}", "candles", "minutes", "1"],
              "query": [
                {
                  "key": "count",
                  "value": "200",
                  "description": "조회할 캔들 수 (1~200, 기본값: 200)"
                }
              ]
            },
            "description": "특정 코인의 분 단위 캔들 데이터를 조회합니다.\n\nRoute Params:\n- unit: 캔들 집계 단위 (1, 3, 5, 10, 15, 30, 60, 240분)"
          }
        },
        {
          "name": "일(Days) 캔들",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/crypto/{{symbol}}/candles/days?count=200",
              "host": ["{{baseUrl}}"],
              "path": ["api", "crypto", "{{symbol}}", "candles", "days"],
              "query": [
                {
                  "key": "count",
                  "value": "200",
                  "description": "조회할 캔들 수 (1~200, 기본값: 200)"
                }
              ]
            },
            "description": "특정 코인의 일 단위 캔들 데이터를 조회합니다.\n\n추가 필드: prevClosingPrice, changePrice, changeRate"
          }
        },
        {
          "name": "주(Weeks) 캔들",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/crypto/{{symbol}}/candles/weeks?count=200",
              "host": ["{{baseUrl}}"],
              "path": ["api", "crypto", "{{symbol}}", "candles", "weeks"],
              "query": [
                {
                  "key": "count",
                  "value": "200",
                  "description": "조회할 캔들 수 (1~200, 기본값: 200)"
                }
              ]
            },
            "description": "특정 코인의 주 단위 캔들 데이터를 조회합니다.\n\n추가 필드: firstDayOfPeriod (캔들 집계 시작일)"
          }
        },
        {
          "name": "월(Months) 캔들",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/crypto/{{symbol}}/candles/months?count=200",
              "host": ["{{baseUrl}}"],
              "path": ["api", "crypto", "{{symbol}}", "candles", "months"],
              "query": [
                {
                  "key": "count",
                  "value": "200",
                  "description": "조회할 캔들 수 (1~200, 기본값: 200)"
                }
              ]
            },
            "description": "특정 코인의 월 단위 캔들 데이터를 조회합니다.\n\n추가 필드: firstDayOfPeriod (캔들 집계 시작일)"
          }
        },
        {
          "name": "연(Years) 캔들",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/crypto/{{symbol}}/candles/years?count=200",
              "host": ["{{baseUrl}}"],
              "path": ["api", "crypto", "{{symbol}}", "candles", "years"],
              "query": [
                {
                  "key": "count",
                  "value": "200",
                  "description": "조회할 캔들 수 (1~200, 기본값: 200)"
                }
              ]
            },
            "description": "특정 코인의 연 단위 캔들 데이터를 조회합니다.\n\n추가 필드: firstDayOfPeriod (캔들 집계 시작일)"
          }
        },
        {
          "name": "실시간(Live) 캔들",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/crypto/{{symbol}}/candles/live/m1",
              "host": ["{{baseUrl}}"],
              "path": ["api", "crypto", "{{symbol}}", "candles", "live", "m1"]
            },
            "description": "특정 코인의 실시간 캔들 데이터를 조회합니다 (Redis 캐시).\n\nRoute Params:\n- interval: 캔들 간격 (예: m1, m3, m5, m10, m15, m30, m60, m240)"
          }
        }
      ]
    },
    {
      "name": "Trades",
      "description": "체결 내역 관련 API",
      "item": [
        {
          "name": "최근 체결 내역",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/crypto/{{symbol}}/trades?count=50",
              "host": ["{{baseUrl}}"],
              "path": ["api", "crypto", "{{symbol}}", "trades"],
              "query": [
                {
                  "key": "count",
                  "value": "50",
                  "description": "조회할 체결 수 (1~100, 기본값: 50)"
                }
              ]
            },
            "description": "특정 코인의 최근 체결 내역을 조회합니다 (Upbit REST API)."
          }
        },
        {
          "name": "실시간(Live) 체결",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/crypto/{{symbol}}/trades/live",
              "host": ["{{baseUrl}}"],
              "path": ["api", "crypto", "{{symbol}}", "trades", "live"]
            },
            "description": "특정 코인의 실시간 체결 데이터를 조회합니다 (Redis 캐시, WebSocket 수신 데이터)."
          }
        }
      ]
    },
    {
      "name": "Orderbook",
      "description": "호가 정보 관련 API",
      "item": [
        {
          "name": "호가 정보",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/crypto/{{symbol}}/orderbook",
              "host": ["{{baseUrl}}"],
              "path": ["api", "crypto", "{{symbol}}", "orderbook"]
            },
            "description": "특정 코인의 호가(매수/매도) 정보를 조회합니다 (Upbit REST API)."
          }
        },
        {
          "name": "실시간(Live) 호가",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/crypto/{{symbol}}/orderbook/live",
              "host": ["{{baseUrl}}"],
              "path": ["api", "crypto", "{{symbol}}", "orderbook", "live"]
            },
            "description": "특정 코인의 실시간 호가 데이터를 조회합니다 (Redis 캐시, WebSocket 수신 데이터)."
          }
        }
      ]
    },
    {
      "name": "Markets",
      "description": "마켓 목록 관련 API",
      "item": [
        {
          "name": "전체 마켓 목록",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/crypto/markets",
              "host": ["{{baseUrl}}"],
              "path": ["api", "crypto", "markets"]
            },
            "description": "Upbit에 등록된 전체 마켓(거래쌍) 목록을 조회합니다.\n\n마켓 이벤트(유의 종목, 경보) 정보를 포함합니다."
          }
        }
      ]
    },
    {
      "name": "SignalR Hub (WebSocket)",
      "description": "실시간 데이터 Push — SignalR Hub\n\nWebSocket URL: wss://localhost:4000/hubs/crypto\n운영: wss://api.bitforum.io/hubs/crypto\n\n── 연결 방법 (Postman WebSocket 탭) ──\n\n1. Postman > New > WebSocket 선택\n2. URL: wss://localhost:4000/hubs/crypto 입력 후 Connect\n3. 핸드셰이크 메시지 전송:\n   {\"protocol\":\"json\",\"version\":1}\\x1e\n4. 구독 메시지 전송 (아래 예시 참고)\n\n── Hub 메서드 (클라이언트 → 서버) ──\n\nSubscribeSymbol: 특정 코인 구독 (ticker/trade/orderbook/candle)\n  {\"type\":1,\"target\":\"SubscribeSymbol\",\"arguments\":[\"btc\"]}\\x1e\n\nUnsubscribeSymbol: 특정 코인 구독 해제\n  {\"type\":1,\"target\":\"UnsubscribeSymbol\",\"arguments\":[\"btc\"]}\\x1e\n\nSubscribeTickers: 전체 Ticker 목록 구독\n  {\"type\":1,\"target\":\"SubscribeTickers\",\"arguments\":[]}\\x1e\n\nUnsubscribeTickers: 전체 Ticker 목록 구독 해제\n  {\"type\":1,\"target\":\"UnsubscribeTickers\",\"arguments\":[]}\\x1e\n\n── 수신 이벤트 (서버 → 클라이언트) ──\n\nReceiveTicker: 개별 코인 현재가\nReceiveTickers: 전체 코인 현재가 목록\nReceiveTrade: 체결\nReceiveOrderbook: 호가\nReceiveCandle: 캔들\n\n참고: \\x1e 는 SignalR Record Separator (U+001E) — 메시지 끝 구분자",
      "item": [
        {
          "name": "negotiate (연결 협상)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/hubs/crypto/negotiate?negotiateVersion=1",
              "host": ["{{baseUrl}}"],
              "path": ["hubs", "crypto", "negotiate"],
              "query": [
                {
                  "key": "negotiateVersion",
                  "value": "1",
                  "description": "SignalR negotiate 프로토콜 버전"
                }
              ]
            },
            "description": "SignalR Hub 연결 전 협상 엔드포인트.\n\n응답으로 connectionId, availableTransports 등을 반환합니다.\nWebSocket 연결 시 자동으로 호출되지만, 직접 테스트도 가능합니다."
          }
        },
        {
          "name": "[WSS] SubscribeSymbol",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/hubs/crypto",
              "host": ["{{baseUrl}}"],
              "path": ["hubs", "crypto"]
            },
            "description": "WebSocket 연결 후 전송할 메시지:\n\n1. 핸드셰이크:\n{\"protocol\":\"json\",\"version\":1}\\x1e\n\n2. 구독:\n{\"type\":1,\"target\":\"SubscribeSymbol\",\"arguments\":[\"btc\"]}\\x1e\n\n구독 후 수신 이벤트:\n- ReceiveTicker: 해당 코인 현재가\n- ReceiveTrade: 해당 코인 체결\n- ReceiveOrderbook: 해당 코인 호가\n- ReceiveCandle: 해당 코인 캔들\n\n구독 해제:\n{\"type\":1,\"target\":\"UnsubscribeSymbol\",\"arguments\":[\"btc\"]}\\x1e\n\n※ Postman WebSocket 탭에서 wss://localhost:4000/hubs/crypto 로 직접 연결하세요."
          }
        },
        {
          "name": "[WSS] SubscribeTickers",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/hubs/crypto",
              "host": ["{{baseUrl}}"],
              "path": ["hubs", "crypto"]
            },
            "description": "WebSocket 연결 후 전송할 메시지:\n\n1. 핸드셰이크:\n{\"protocol\":\"json\",\"version\":1}\\x1e\n\n2. 전체 Ticker 구독:\n{\"type\":1,\"target\":\"SubscribeTickers\",\"arguments\":[]}\\x1e\n\n구독 후 수신 이벤트:\n- ReceiveTickers: 전체 코인 현재가 목록 (주기적 갱신)\n- ReceiveTicker: 개별 코인 현재가 (변동 시)\n\n구독 해제:\n{\"type\":1,\"target\":\"UnsubscribeTickers\",\"arguments\":[]}\\x1e\n\n※ Postman WebSocket 탭에서 wss://localhost:4000/hubs/crypto 로 직접 연결하세요."
          }
        }
      ]
    }
  ]
}