콘텐츠로 이동

리더보드 API

사전 준비

리더보드 API를 사용하려면 다음 항목이 준비되어야 합니다.

  1. Client ID와 Client Secret 발급: 보안키 설정에서 발급합니다.
  2. API 호출을 위한 Access Token(JWT) 발급: 위 1에서 발급한 Client ID와 Client Secret으로 OAuth Token 발급하기 API를 호출합니다. Access Token의 유효 기간은 1시간입니다.
  3. 사용할 리더보드 ID 확인: Hive 콘솔 > 리더보드 > 랭킹 관리
Note

리더보드 API는 JWT 인증 방식으로 동작합니다. 모든 API 요청 헤더인 X-Access-Token에 Access Token을 반드시 포함해야 합니다.

Request URL

서버 URL
LIVE api-leaderboard.withhive.com
SANDBOX sandbox-api-leaderboard.withhive.com

공통 응답

모든 API 응답에는 JWT 검증 결과인 token_validation 필드가 포함됩니다.

필드명 설명 타입
token_validation JWT 검증 결과 json
token_validation.result_code JWT 검증 결과 코드 (0 = 성공, 상세는 JWT 검증 오류 코드 참고) integer
token_validation.result_msg JWT 검증 결과 메시지 string

JWT 검증 실패 예시

{
    "reason": "Access Token 만료",
    "token_validation": {
        "result_code": 2408,
        "result_msg": "The access token is expired. Please refresh your token."
    }
}

Response codes

API 공통 응답 코드입니다.

코드 값 설명
200 성공 -
400 Bad Request 잘못된 leaderboardId 혹은 Param 입력, 또는 Access Token에 해당하는 OAuth Client 정보가 없음(token_validation.result_code: 2400)
401 Unauthorized Access Token 형식 오류(2405), 요청 헤더의 X-Access-Token 누락(2406), 서명 오류(2407), 만료(2408), 또는 Grant Type 불일치(2410)
403 Forbidden Access Token을 발급받은 게임의 리더보드가 아님
500 Internal Server Error 서버 내부적으로 문제가 발생함
Note

JWT 검증에 실패하면 token_validation 필드로 상세한 오류 정보를 확인할 수 있습니다. 자세한 내용은 JWT 검증 오류 코드를 참고하세요.

점수 입력

리더보드에 점수를 저장합니다.

Request URL

LIVE URL https://api-leaderboard.withhive.com/v2/leaderboards/{leaderboardId}/score
SANDBOX URL https://sandbox-api-leaderboard.withhive.com/v2/leaderboards/{leaderboardId}/score
HTTP METHOD POST
CONTENT-TYPE application/json

Path parameters

필드명 설명 타입 필수 여부
leaderboardId 리더보드 ID string Y

Header parameters

필드명 설명 타입 필수 여부
X-Access-Token 앱 서버 인증을 위한 OAuth 2.0 Access Token
(OAuth Token 발급하기 참고)
string Y

Request body

필드명 설명 타입 필수 여부
playerId 계정 식별자 long Y
score 랭킹에 등록할 점수입니다. 최대 15자리(999,999,999,999,999)를 입력할 수 있습니다. integer Y
achievementTimeUtc 점수 발생 시간(UTC+0 기준)입니다. yyyy-MM-dd'T'HH:mm:ss.SSS 형식입니다. string Y
extraData 계정 부가 정보(닉네임, 레벨, 국가 등)입니다. 최대 256자를 입력할 수 있습니다. string N

Response

200 OK인 경우, Body에는 공통 응답의 token_validation만 포함됩니다.

Request sample

curl --location 'https://sandbox-api-leaderboard.withhive.com/v2/leaderboards/1/score'
--header 'Content-Type: application/json'
--header 'X-Access-Token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InByb2plY3RfYWJjMTIzIn0...'
--data '{
"playerId": 1000,
"score": 87,
"achievementTimeUtc": "2023-12-19T15:01:01.004",
"extraData": "Lv.14|유저1|KR"
}'

Response sample

{
    "token_validation": {
        "result_code": 0,
        "result_msg": "success"
    }
}

점수 삭제

리더보드에 등록한 사용자 정보를 삭제합니다.

Request URL

LIVE URL https://api-leaderboard.withhive.com/v2/leaderboards/{leaderboardId}/players/{playerId}
SANDBOX URL https://sandbox-api-leaderboard.withhive.com/v2/leaderboards/{leaderboardId}/players/{playerId}
HTTP METHOD DELETE
CONTENT-TYPE application/json

Path parameters

필드명 설명 타입 필수 여부
leaderboardId 리더보드 ID string Y
playerId 계정 식별자 string Y

Header parameters

필드명 설명 타입 필수 여부
X-Access-Token 앱 서버 인증을 위한 OAuth 2.0 Access Token
(OAuth Token 발급하기 참고)
string Y

Response

200 OK인 경우, Body에는 공통 응답의 token_validation만 포함됩니다.

Request sample

curl --location
--request DELETE 'https://sandbox-api-leaderboard.withhive.com/v2/leaderboards/1/players/1004'
--header 'X-Access-Token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InByb2plY3RfYWJjMTIzIn0...'
--data ''

Response sample

{
    "token_validation": {
        "result_code": 0,
        "result_msg": "success"
    }
}

랭킹 조회: 페이지 단위 조회

상위 랭킹부터 페이지 단위로 조회합니다.

Request URL

LIVE URL https://api-leaderboard.withhive.com/v2/leaderboards/{leaderboardId}/ranks
SANDBOX URL https://sandbox-api-leaderboard.withhive.com/v2/leaderboards/{leaderboardId}/ranks
HTTP METHOD GET
CONTENT-TYPE application/json

Path parameters

필드명 설명 타입 필수 여부
leaderboardId 리더보드 ID string Y

Header parameters

필드명 설명 타입 필수 여부
X-Access-Token 앱 서버 인증을 위한 OAuth 2.0 Access Token
(OAuth Token 발급하기 참고)
string Y

Query parameters

필드명 설명 타입 필수 여부
page 요청 페이지 번호입니다. 1부터 시작하며 기본값은 1입니다. 값이 5이면 5페이지 내용만 조회합니다. integer N
rowcount 페이지당 표시할 랭킹 정보 수입니다. 최대 100건이며 기본값은 100입니다. integer N
requesttimeutc 조회 기준 시간(UTC+0 기준)입니다. 기본값은 현재 시간입니다. yyyy-MM-dd'T'HH:mm:ss.SSS 형식입니다. string N
playerid playerid 계정의 랭킹 정보가 존재한다면, 해당 플레이어 랭킹 정보도 함께 조회 long N

Response

필드명 설명 타입
rankingList 랭킹 데이터 목록 json array
rankingList[].rank 순위 integer
rankingList[].playerId 계정 식별자 long
rankingList[].score 점수 long
rankingList[].achievementTimeUtc 점수를 등록한 시간(UTC+0 기준)입니다. yyyy-MM-dd'T'HH:mm:ss.SSS 형식입니다. string
rankingList[].extraData 계정 부가 정보(닉네임, 레벨, 국가 등) string
playerRank Query Parameter에 입력한 playerid 사용자 랭킹 정보(Query Parameter에 playerid 정보가 있을 경우에만 이 값을 반환함) json
playerRank.rank 순위 integer
playerRank.playerId 계정 식별자 long
playerRank.score 점수 long
playerRank.achievementTimeUtc 점수가 등록된 시간(UTC+0 기준), yyyy-MM-dd'T'HH:mm:ss.SSS 형식 string
playerRank.extraData 계정 부가 정보(닉네임, 레벨, 국가 등) string
token_validation JWT 검증 결과 (공통 응답 참고) json

Request sample

curl --location 'https://sandbox-api-leaderboard.withhive.com/v2/leaderboards/1/ranks?page=1&rowcount=100&playerid=1000&requesttimeutc=2023-12-19T15%3A01%3A01.004'
--header 'X-Access-Token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InByb2plY3RfYWJjMTIzIn0...'

Response sample

{
    "rankingList": [
        {
            "rank": 1,
            "playerId": 1001,
            "score": 89,
            "achievementTimeUtc": "2023-12-19T15:02:02.004",
            "extraData": "Lv.50|유저1|KR"
        }, {
            "rank": 2,
            "playerId": 1000,
            "score": 87,
            "achievementTimeUtc": "2023-12-19T15:01:01.004",
            "extraData": "Lv.50|유저14|KR"
        }
    ],
    "playerRank": {
        "rank": 2,
        "playerId": 1000,
        "score": 87,
        "achievementTimeUtc": "2023-12-19T15:01:01.004",
       "extraData": "Lv.50|유저14|KR"
    },
    "token_validation": {
        "result_code": 0,
        "result_msg": "success"
    }
}

Query Parameter에 playerid를 입력하지 않았다면, 결과값에 playerRank 자체를 받지 않습니다. 입력했더라도 해당 계정의 랭킹 정보가 존재하지 않는다면, playerRank는 아래와 같은 형식으로 반환됩니다.

"playerRank": null

랭킹 조회: 특정 사용자 랭킹 정보 조회

특정 사용자 랭킹 정보를 조회합니다.

Request URL

LIVE URL https://api-leaderboard.withhive.com/v2/leaderboards/{leaderboardId}/players/{playerId}/ranks
SANDBOX URL https://sandbox-api-leaderboard.withhive.com/v2/leaderboards/{leaderboardId}/players/{playerId}/ranks
HTTP METHOD GET
CONTENT-TYPE application/json

Path parameters

필드명 설명 타입 필수 여부
leaderboardId 리더보드 ID string Y
playerId 계정 식별자 string Y

Header parameters

필드명 설명 타입 필수 여부
X-Access-Token 앱 서버 인증을 위한 OAuth 2.0 Access Token
(OAuth Token 발급하기 참고)
string Y

Query parameters

필드명 설명 타입 필수 여부
requesttimeutc 조회 기준 시간(UTC+0 기준), yyyy-MM-dd'T'HH:mm:ss.SSS 형식 string N

Response

필드명 설명 타입
playerRank.rank 순위 integer
playerRank.playerId 계정 식별자 long
playerRank.score 점수 long
playerRank.achievementTimeUtc 점수가 등록된 시간(UTC+0 기준), yyyy-MM-dd'T'HH:mm:ss.SSS 형식 string
playerRank.extraData 계정 부가 정보(닉네임, 레벨, 국가 등) string
token_validation JWT 검증 결과 (공통 응답 참고) json

Request sample

curl --location 'https://sandbox-api-leaderboard.withhive.com/v2/leaderboards/1/players/1000/ranks?requesttimeutc=2023-12-19T15%3A01%3A01.004'
--header 'X-Access-Token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InByb2plY3RfYWJjMTIzIn0...'

Response sample

{
    "playerRank": {
        "rank": 2,
        "playerId": 1000,
        "score": 87,
        "achievementTimeUtc": "2023-12-19T15:01:01.004",
        "extraData": "Lv.50|유저14|KR"
    },
    "token_validation": {
        "result_code": 0,
        "result_msg": "success"
    }
}

랭킹 조회: 특정 사용자 주변 랭킹 정보 조회

특정 사용자 주변의 랭킹 정보를 조회합니다. 특정 사용자를 기준으로 상위 50명 또는 하위 50명에 해당하는 랭킹 정보를 얻을 수 있습니다.

Request URL

Live URL https://api-leaderboard.withhive.com/v2/leaderboards/{leaderboardId}/players/{playerId}/ranks
Sandbox URL https://sandbox-api-leaderboard.withhive.com/v2/leaderboards/{leaderboardId}/players/{playerId}/ranks
HTTP Method GET
Content-Type application/json

Path parameters

필드명 설명 타입 필수 여부
leaderboardId 리더보드 ID string Y
playerId 계정 식별자 string Y

Header parameters

필드명 설명 타입 필수 여부
X-Access-Token 앱 서버 인증을 위한 OAuth 2.0 Access Token
(OAuth Token 발급하기 참고)
string Y

Query parameters

필드명 설명 타입 필수 여부
nearby playerId 주변 랭킹 수입니다. 최대 100개입니다. integer Y
requesttimeutc 조회 기준 시간(UTC+0 기준), yyyy-MM-dd'T'HH:mm:ss.SSS 형식 string N

Response

필드명 설명 타입
rankingList 랭킹 데이터 목록 json array
rankingList[].rank 순위 integer
rankingList[].playerId 계정 식별자 long
rankingList[].score 점수 long
rankingList[].achievementTimeUtc 점수가 등록된 시간(UTC+0 기준), yyyy-MM-dd'T'HH:mm:ss.SSS 형식 string
rankingList[].extraData 계정 부가 정보(닉네임, 레벨, 국가 등) string
playerRank Path Parameter에 입력한 playerid 사용자 랭킹 정보 json
playerRank.rank 순위 integer
playerRank.playerId 계정 식별자 long
playerRank.score 점수 long
playerRank.achievementTimeUtc 점수가 등록된 시간(UTC+0 기준), yyyy-MM-dd'T'HH:mm:ss.SSS 형식 string
playerRank.extraData 계정 부가 정보(닉네임, 레벨, 국가 등) string
token_validation JWT 검증 결과 (공통 응답 참고) json

Request sample

curl --location 'https://sandbox-api-leaderboard.withhive.com/v2/leaderboards/1/players/1000/ranks?nearby=100&requesttimeutc=2023-12-19T15%3A01%3A01.004'
 --header 'X-Access-Token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InByb2plY3RfYWJjMTIzIn0...'

Response sample

{
    "rankingList": [
        {
            "rank": 1,
            "playerId": 1001,
            "score": 89,
            "achievementTimeUtc": "2023-12-19T15:02:02.004",
            "extraData": "Lv.50|유저1|KR"
        }, {
            "rank": 2,
            "playerId": 1000,
            "score": 87,
            "achievementTimeUtc": "2023-12-19T15:01:01.004",
            "extraData": "Lv.50|유저2|KR"
        }, {
            "rank": 3,
            "playerId": 1002,
            "score": 70,
            "achievementTimeUtc": "2023-12-19T15:02:02.004",
            "extraData": "Lv.50|유저3|KR"
        }
    ],
    "playerRank": {
        "rank": 2,
        "playerId": 1000,
        "score": 87,
        "achievementTimeUtc": "2023-12-19T15:01:01.004",
        "extraData": "Lv.50|유저2|KR"
    },
    "token_validation": {
        "result_code": 0,
        "result_msg": "success"
    }
}

리더보드 사용자 수 조회

리더보드에 등록된 사용자 전체 수를 조회합니다.

Request URL

Live URL https://api-leaderboard.withhive.com/v2/leaderboards/{leaderboardId}/players/count
Sandbox URL https://sandbox-api-leaderboard.withhive.com/v2/leaderboards/{leaderboardId}/players/count
HTTP Method GET
Content-Type application/json

Path Parameters

필드명 설명 타입 필수 여부
leaderboardId 리더보드 ID string Y

Header parameters

필드명 설명 타입 필수 여부
X-Access-Token 앱 서버 인증을 위한 OAuth 2.0 Access Token
(OAuth Token 발급하기 참고)
string Y

Query parameters

필드명 설명 타입 필수 여부
requesttimeutc 조회 기준 시간(UTC+0 기준), 입력이 없을 경우 현재 시간 기준, yyyy-MM-dd'T'HH:mm:ss.SSS 형식 string N

Response

필드명 설명 타입
count 등록된 사용자의 수 integer
token_validation JWT 검증 결과 (공통 응답 참고) json

Request sample

curl --location 'https://sandbox-api-leaderboard.withhive.com/v2/leaderboards/1/players/count?requesttimeutc=2023-12-19T15%3A01%3A01.004'
--header 'X-Access-Token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InByb2plY3RfYWJjMTIzIn0...'

Response sample

{
    "count": 3,
    "token_validation": {
        "result_code": 0,
        "result_msg": "success"
    }
}