Skip to content

게임 · 로비 · 통화 ​

이 오퍼레이터에 켜진 게임 목록과 통화 표를 조회하고, 게임별 사이트 베팅 한도와 게임 로비 출력(메뉴 · 테이블 · 배너)을 설정합니다.

GET /games ​

GET {API_BASE}/operator/v1/games?lang=en

이 오퍼레이터에 켜진 게임 목록입니다. 사이트의 게임 메뉴를 만들 때 씁니다. 순서는 플랫폼이 정한 게임 정렬 순서입니다.

쿼리 ​

파라미터타입필수설명
langstring게임 이름 언어. ko en zh ja th vi(POST /launch 의 lang 과 같은 규칙). 비우면 ko. 그 언어 이름이 없으면 영어 → 한국어 → 게임 코드 순으로 대신합니다.

요청 예시 ​

http
GET /operator/v1/games?lang=en HTTP/1.1
Host: {API_HOST}
X-Operator: acme
X-Api-Key: ak_5d2c9e0f7a1b3c4d5e6f708192a3b4c5d6e7f809
X-Timestamp: 1792368067512
X-Nonce: 1c7e5a9b3d2f4e6a8b0c1d2e
X-Signature: 7a0c…(64자리 16진수)

응답 ​

200 OK

json
{
  "games": [
    {
      "game_code": "holdem_nlh",
      "name": "Texas Hold'em",
      "category": "poker",
      "kind": "table",
      "live": false,
      "thumbnail": {
        "square": "https://{GAME_ORIGIN}/thumbs/holdem_nlh.webp",
        "wide": "https://{GAME_ORIGIN}/thumbs/holdem_nlh.webp"
      },
      "min_bet": 2000,
      "max_bet": 100000,
      "currency": "PHP",
      "status": "open",
      "bet_limits": { "PHP": { "min": 1000, "max": 100000 } },
      "table_create": false,
      "lobby": {}
    },
    {
      "game_code": "live_baccarat",
      "name": "Live Baccarat",
      "category": "live",
      "kind": "round",
      "live": true,
      "thumbnail": {
        "square": "https://{GAME_ORIGIN}/thumbs/live_baccarat.webp",
        "wide": "https://{GAME_ORIGIN}/thumbs/live_baccarat.webp"
      },
      "min_bet": 10000,
      "max_bet": 5000000,
      "currency": "PHP",
      "status": "open",
      "bet_limits": {},
      "table_create": false,
      "lobby": {
        "hide_tables": true,
        "banner": {
          "sha256": "9b2f0c4e6a8d1b3f5e7a9c0b2d4f6e8a1c3e5b7d9f0a2c4e6b8d0f1a3c5e7b9d",
          "title": "Weekend Baccarat Event",
          "link_url": "https://www.acme.example/events/baccarat",
          "width": 1920,
          "height": 480
        }
      }
    }
  ]
}
필드타입설명
game_codestring게임 코드. 게임 코드 참고
namestringlang 언어의 게임 이름
categorystring분류: poker · card · board · live
kindstringtable(P2P, 플레이어끼리) · round(뱅크형, 하우스와 대결). 연동 개요 참고
liveboolean딜러 영상이 있는 라이브 게임인지
thumbnail.square · thumbnail.widestring썸네일 주소(현재 두 값이 같습니다). 아래 썸네일 참고
min_bet · max_betinteger이 사이트 플레이어가 지금 들어갈 수 있는 테이블들의 베팅 크기 범위(기본 통화, 최소 단위). 아래 베팅 크기 참고. 들어갈 수 있는 테이블이 없으면 둘 다 0
currencystringmin_bet · max_bet 의 통화 = 오퍼레이터 기본 통화(사용 통화 중 첫 번째)
statusstringopen · maintenance(점검 중 — 실행하면 503 GAME_MAINTENANCE)
bet_limitsobject사이트 베팅 한도 {통화: {min?, max?}}. 정하지 않은 통화는 키가 없고, 0(제한 없음)인 쪽은 min · max 키가 빠집니다. PUT /games/{game_code}/bet-limits 로 정합니다.
table_createboolean이 게임으로 전용 테이블을 만들 수 있는지(독립운영이고 본사가 허용한 게임). POST /tables 참고
lobbyobject게임 로비 출력. 기본값(모두 보임, 배너 없음)이면 {}. 아래 표 참고

lobby 객체 (값이 기본값이면 키가 빠집니다)

필드타입설명
hide_menubooleantrue 면 게임 로비의 게임 목록에서 이 게임을 숨깁니다.
hide_tablesbooleantrue 면 게임 로비의 테이블 목록에서 이 게임의 테이블을 숨깁니다.
bannerobject게임 로비에서 이 게임의 테이블 목록 위에 보이는 배너. sha256 · title · link_url · width · height (PUT /games/{game_code}/lobby 의 값)

베팅 크기 ​

min_bet · max_bet, 그리고 사이트 베팅 한도는 테이블마다 정해진 베팅 크기 하나를 기준으로 비교합니다.

게임 종류테이블의 베팅 크기테이블 limits 키
뱅크형(바카라 · 블랙잭 · 레드독 등)최소 베팅 ~ 최대 베팅 구간min_bet ~ max_bet
홀덤 · 오마하 · 라이브 홀덤빅 블라인드bb
스피드 홀덤베팅 금액bet
통잇판돈stake
맞고 · 고스톱점당 금액point_value
섯다 · 바둑이앤티ante

테이블 limits 의 키는 GET /tables 에서 볼 수 있습니다.

썸네일 ​

thumbnail 은 게임 화면 오리진 아래의 /thumbs/{game_code}.webp 주소입니다. 인증 없이 열리는 공개 주소입니다.

협의 사항

게임 썸네일 · 아이콘 이미지의 제공 방식(크기 · 형식 · 제공 시기)은 계약 시 협의합니다. 사이트 게임 메뉴에는 협의한 이미지를 쓰고, 이 필드는 참고용으로만 쓰세요.

오류 ​

인증 · 공통 오류만 있습니다(오류 코드).

GET /currencies ​

GET {API_BASE}/operator/v1/currencies

플랫폼이 쓰는 통화 표입니다. 금액은 모두 통화의 최소 단위 정수이므로(공통 규약), 화면에 표시할 때 exponent 만큼 소수 자리를 나눕니다.

  • 플랫폼의 모든 통화가 옵니다. 이 오퍼레이터가 쓸 수 있는 통화는 온보딩 때 등록한 사용 통화이며 GET /settings 의 currencies 로 확인합니다.
  • 순서는 정해져 있지 않습니다. 코드로 찾아 쓰세요.

응답 ​

200 OK

json
{
  "currencies": [
    { "code": "KRW", "exponent": 0, "symbol": "₩" },
    { "code": "USD", "exponent": 2, "symbol": "$" },
    { "code": "PHP", "exponent": 2, "symbol": "₱" }
  ]
}
필드타입설명
codestring통화 코드
exponentinteger소수 자리 수. 금액 12345 는 exponent: 2 면 123.45, 0 이면 12345
symbolstring표시용 기호

금액 1단위 = 10^exponent 최소 단위입니다(예: PHP 는 100 = ₱1). 사이트 베팅 한도 · 테이블 한도 · 레이크 상한처럼 설정으로 보내는 금액은 1단위의 배수만 받습니다(₱10.50 같은 소수 금액 불가).

오류 ​

인증 · 공통 오류만 있습니다(오류 코드).

PUT /games/{game_code}/bet-limits ​

PUT {API_BASE}/operator/v1/games/{game_code}/bet-limits

게임 하나의 사이트 베팅 한도를 통화별로 정합니다. 관리 화면용입니다.

사이트 베팅 한도는 어떤 테이블을 이 사이트 플레이어에게 줄지 정하는 범위입니다. 테이블의 베팅 크기가 범위 안에 드는 테이블만 이 사이트 플레이어의 로비에 보이고 들어갈 수 있습니다. 한 판 안의 베팅 검증은 테이블 자체 한도로 합니다.

  • 한 번에 통화 하나를 바꿉니다. 다른 통화의 한도는 그대로 둡니다.
  • min · max 를 둘 다 0 으로 보내면 그 통화의 한도를 지웁니다(제한 없음).
  • 이미 앉아 있는 플레이어는 자리를 뜰 때까지 계속합니다. 새 입장과 로비 목록에만 반영되며, 반영까지 최대 30초 걸릴 수 있습니다.

경로 · 요청 필드 ​

필드위치타입필수설명
game_code경로string필수이 오퍼레이터에 켜진 게임 코드
currency본문string필수오퍼레이터 사용 통화 중 하나
min본문integer베팅 크기 하한(최소 단위). 0 = 하한 없음
max본문integer베팅 크기 상한(최소 단위). 0 = 상한 없음
  • min · max 는 0 이상이고, 둘 다 0 보다 크면 min ≤ max 여야 합니다.
  • 금액 1단위(10^exponent)의 배수여야 합니다.

요청 예시 ​

http
PUT /operator/v1/games/holdem_nlh/bet-limits HTTP/1.1
Host: {API_HOST}
Content-Type: application/json; charset=utf-8
X-Operator: acme
X-Api-Key: ak_5d2c9e0f7a1b3c4d5e6f708192a3b4c5d6e7f809
X-Timestamp: 1792368067512
X-Nonce: 5e8a1f3c7b9d2e4f6a0b1c2d
X-Signature: 0d9e…(64자리 16진수)

{ "currency": "PHP", "min": 1000, "max": 100000 }

응답 ​

200 OK — 그 게임의 바뀐 뒤 전체 한도

json
{
  "game_code": "holdem_nlh",
  "bet_limits": {
    "PHP": { "min": 1000, "max": 100000 },
    "USD": { "max": 2000 }
  }
}

오류 ​

HTTPerror.code원인
400INVALID_REQUESTJSON 오류, 또는 details.fields: currency(사용 통화 아님) · min(음수, min > max, 1단위 배수 아님) · max(음수, 1단위 배수 아님)
404GAME_NOT_FOUND이 오퍼레이터에 켜진 게임이 아님

PUT /games/{game_code}/lobby ​

PUT {API_BASE}/operator/v1/games/{game_code}/lobby

게임 로비(게임 화면 안의 로비)에서 이 게임을 어떻게 보여 줄지 정합니다. 관리 화면용입니다. 저장하면 다음 로비 요청부터 바로 반영됩니다.

  • menu: false 면 게임 로비의 게임 목록에서 이 게임이 빠집니다.
  • tables: false 면 게임 로비의 테이블 목록에서 이 게임의 테이블이 빠집니다.
  • banner 가 있으면 그 게임의 테이블 목록 위에 배너를 띄웁니다. 그림은 먼저 PUT /lobby-banners 로 올려 sha256 을 받아 둡니다.

세 값을 모두 보내세요

요청은 전체 교체입니다. menu · tables 를 빼면 false(숨김)로 저장되고, banner 를 빼면 배너가 지워집니다. 보이게 하려면 true 를 명시하세요.

경로 · 요청 필드 ​

필드위치타입필수설명
game_code경로string필수이 오퍼레이터에 켜진 게임 코드
menu본문boolean필수true = 게임 목록에 보임
tables본문boolean필수true = 테이블 목록에 보임
banner본문object | null배너. null 이면 배너 없음
banner.sha256본문string필수(배너가 있을 때)PUT /lobby-banners 가 돌려준 값(소문자 16진수 64자)
banner.title본문string배너 설명(대체 텍스트). 앞뒤 공백을 지우고 200자 이하
banner.link_url본문string배너를 누르면 열 주소. http:// · https:// 주소이거나 빈 값(링크 없음)
banner.width · banner.height본문integer그림 크기(픽셀). PUT /lobby-banners 응답 값을 그대로 넣으세요. 0~4096 으로 맞춰 저장됩니다.

요청 예시 ​

json
{
  "menu": true,
  "tables": false,
  "banner": {
    "sha256": "9b2f0c4e6a8d1b3f5e7a9c0b2d4f6e8a1c3e5b7d9f0a2c4e6b8d0f1a3c5e7b9d",
    "title": "Weekend Baccarat Event",
    "link_url": "https://www.acme.example/events/baccarat",
    "width": 1920,
    "height": 480
  }
}

응답 ​

200 OK — 저장한 값(GET /games 의 lobby 와 같은 모양)

json
{
  "game_code": "live_baccarat",
  "lobby": {
    "hide_tables": true,
    "banner": {
      "sha256": "9b2f0c4e6a8d1b3f5e7a9c0b2d4f6e8a1c3e5b7d9f0a2c4e6b8d0f1a3c5e7b9d",
      "title": "Weekend Baccarat Event",
      "link_url": "https://www.acme.example/events/baccarat",
      "width": 1920,
      "height": 480
    }
  }
}

오류 ​

HTTPerror.code원인
400INVALID_REQUESTJSON 오류, 또는 details.fields: banner.title(200자 초과) · banner.link_url(http(s) 주소 아님) · banner.sha256(형식 오류)
404BANNER_NOT_FOUND그 sha256 의 그림이 없음 — 먼저 PUT /lobby-banners 로 올리세요
404GAME_NOT_FOUND이 오퍼레이터에 켜진 게임이 아님

PUT /lobby-banners ​

PUT {API_BASE}/operator/v1/lobby-banners

게임 로비 배너 그림을 올리고 그림 번호(sha256)를 받습니다. 관리 화면용입니다. 그림만 올리는 단계이며, 실제로 띄우려면 받은 값을 PUT /games/{game_code}/lobby 의 banner 에 넣습니다.

  • 같은 그림을 다시 올리면 같은 sha256 이 돌아옵니다(한 번만 저장).
  • 이 엔드포인트만 요청 본문 상한이 768KB 입니다(다른 엔드포인트는 64KB). base64 로 늘어난 크기를 포함한 값이므로, 원본 그림은 512KB 이하로 준비하세요.

요청 필드 ​

필드타입필수설명
imagestring필수그림의 base64 문자열, 또는 data URL(data:image/png;base64,…)

그림 조건:

  • 형식: JPEG · PNG · WebP · GIF (내용으로 판별)
  • 크기: 디코딩한 원본 512KB 이하
  • 가로 · 세로: 각각 1~4096 픽셀 (권장: 가로 1920 이하)

요청 예시 ​

json
{ "image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgH…" }

응답 ​

200 OK

json
{
  "sha256": "9b2f0c4e6a8d1b3f5e7a9c0b2d4f6e8a1c3e5b7d9f0a2c4e6b8d0f1a3c5e7b9d",
  "width": 1920,
  "height": 480
}
필드타입설명
sha256string그림 번호(그림 내용의 SHA-256, 소문자 16진수 64자)
width · heightinteger그림 크기(픽셀)

공개 주소 ​

올린 그림은 게임 로비가 다음 주소로 받습니다. 인증 없이 열리는 공개 주소이며, 내용이 바뀌면 sha256 도 바뀌므로 1년 동안 캐시됩니다.

GET {API_BASE}/play/v1/lobby-banners/{sha256}

공개해도 되는 그림만 올리세요

배너 그림은 sha256 을 아는 누구나 받을 수 있고, 올린 그림을 지우는 API 는 없습니다. 개인정보나 미공개 내용이 담긴 그림은 올리지 마세요.

오류 ​

HTTPerror.code원인
400INVALID_REQUESTJSON 오류
400BAD_IMAGEbase64 가 아니거나, 지원하지 않는 형식, 512KB 초과, 가로 · 세로 4096 초과
401INVALID_SIGNATURE본문이 768KB 를 넘어 잘린 경우도 서명 불일치로 실패합니다

문서 v1.0.0 · Operator API v1