베팅 기록
사용 사례
이 엔드포인트들을 사용하여 브랜드 및 플레이어의 베팅 내역을 조회합니다. 두 가지 별도의 엔드포인트 그룹이 있습니다:
- 라이브/슬롯 베팅 (
/api/bet) -- 라이브 카지노(Live Casino) 및 슬롯(Slot) 게임 프로바이더의 라운드 기반 베팅입니다. - 스포츠 베팅 (
/api/sports-bet) -- 프리매치(Pre-match) 및 인플레이(In-play) 스포츠 베팅으로, 단일 베팅 내에 여러 선택지(레그, Leg)를 포함할 수 있습니다.
일반적인 사용 사례: 플레이어 계정 명세서 생성, 프로바이더 정산 대사, 특정 거래 감사, 고객 지원 조사 등.
전체 흐름 -- 라이브/슬롯 베팅
단계 1 -- 베팅 목록 조회
GET /api/bet/list
라이브 카지노 및 슬롯 베팅의 페이지네이션된 목록을 선택적 필터와 함께 반환합니다.
쿼리 파라미터:
| 파라미터 | 타입 | 기본값 | 제약 조건 | 설명 |
|---|---|---|---|---|
page | integer | 1 | >= 1 | 페이지 번호 |
size | integer | 20 | 1--100 | 페이지당 항목 수 |
brand_id | integer | -- | 선택 사항 | 특정 브랜드의 베팅으로 필터링 |
player_id | integer | -- | 선택 사항 | 특정 플레이어의 베팅으로 필터링 |
status | integer | -- | 선택 사항 | 베팅 상태로 필터링 (아래 상태 코드 참조) |
provider_code | string | -- | 선택 사항 | 게임 프로바이더 코드로 필터링 (예: "evolution") |
베팅 상태 코드:
| 값 | 의미 |
|---|---|
0 | 대기 중 (라운드 진행 중) |
1 | 정산 완료 (라운드 완료) |
2 | 취소 / 롤백 |
요청 예시 -- 특정 플레이어의 모든 베팅:
GET /api/bet/list?page=1&size=20&player_id=8801
요청 예시 -- 브랜드의 정산 완료된 베팅, 프로바이더별 필터링:
GET /api/bet/list?page=1&size=50&brand_id=42&status=1&provider_code=evolution
응답:
{
"total": 4820,
"page": 1,
"page_size": 20,
"items": [
{
"id": 120001,
"team_id": 7,
"brand_id": 42,
"player_id": 8801,
"provider_id": 3,
"provider_code": "evolution",
"game_id": 501,
"game_code": "baccarat_main",
"transaction_id": "evo_txn_00112233",
"round_id": "evo_rnd_99887766",
"bet_amount": "10000.00",
"payout_amount": "0.00",
"win_loss": "-10000.00",
"status": 1,
"result_type": 0,
"balance_before": "55200.00",
"balance_after": "45200.00",
"settled_at": "2026-04-06T10:15:32Z",
"created_at": "2026-04-06T10:15:00Z"
}
]
}
| 필드 | 설명 |
|---|---|
transaction_id | 프로바이더에서 제공하는 고유 거래 식별자 |
round_id | 프로바이더에서 제공하는 게임 라운드 식별자 |
bet_amount | 베팅 금액 |
payout_amount | 지급 금액 (패배 시 0) |
win_loss | 순 결과: payout_amount - bet_amount (음수 = 패배) |
result_type | 프로바이더별 결과 분류; 해당 없는 경우 null |
balance_before / balance_after | 해당 베팅 전후의 플레이어 월렛 잔액 |
settled_at | 라운드 정산 시점; 대기 중인 베팅의 경우 null |
단계 2 -- 베팅 상세 조회
GET /api/bet/{bet_id}
내부 ID를 기준으로 단일 베팅 기록을 반환합니다.
경로 파라미터: bet_id -- 베팅의 숫자 ID.
응답: 단일 BetResponse 객체 (목록 응답의 항목과 동일한 형태).
{
"id": 120001,
"team_id": 7,
"brand_id": 42,
"player_id": 8801,
"provider_id": 3,
"provider_code": "evolution",
"game_id": 501,
"game_code": "baccarat_main",
"transaction_id": "evo_txn_00112233",
"round_id": "evo_rnd_99887766",
"bet_amount": "10000.00",
"payout_amount": "0.00",
"win_loss": "-10000.00",
"status": 1,
"result_type": 0,
"balance_before": "55200.00",
"balance_after": "45200.00",
"settled_at": "2026-04-06T10:15:32Z",
"created_at": "2026-04-06T10:15:00Z"
}
해당 베팅이 존재하지 않거나 다른 팀에 속한 경우 404 Not Found가 반환됩니다.
전체 흐름 -- 스포츠 베팅
단계 3 -- 스포츠 베팅 목록 조회
GET /api/sports-bet/list
스포츠 베팅의 페이지네이션된 목록을 선택적 필터와 함께 반환합니다.
쿼리 파라미터:
| 파라미터 | 타입 | 기본값 | 제약 조건 | 설명 |
|---|---|---|---|---|
page | integer | 1 | >= 1 | 페이지 번호 |
size | integer | 20 | 1--100 | 페이지당 항목 수 |
brand_id | integer | -- | 선택 사항 | 특정 브랜드의 베팅으로 필터링 |
player_id | integer | -- | 선택 사항 | 특정 플레이어의 베팅으로 필터링 |
status | integer | -- | 선택 사항 | 베팅 상태로 필터링 (라이브/슬롯 베팅과 동일한 코드) |
요청 예시:
GET /api/sports-bet/list?page=1&size=20&brand_id=42&status=1
응답:
{
"total": 891,
"page": 1,
"page_size": 20,
"items": [
{
"id": 30001,
"team_id": 7,
"brand_id": 42,
"player_id": 8801,
"provider_id": 12,
"provider_code": "betconstruct",
"bet_id": "bc_bet_44556677",
"odds": "2.50",
"stake": "20000.00",
"payout": "50000.00",
"win_loss": "30000.00",
"parlay": 1,
"status": 1,
"balance_before": "100000.00",
"balance_after": "130000.00",
"settled_at": "2026-04-06T14:30:00Z",
"created_at": "2026-04-06T12:00:00Z"
}
]
}
| 필드 | 설명 |
|---|---|
bet_id | 스포츠 프로바이더에서 제공하는 외부 베팅 식별자 |
odds | 베팅의 종합 배당률 (단일 레그 베팅에서 배당률이 레그에 있는 경우 null일 수 있음) |
stake | 베팅 금액 |
payout | 지급 금액 (패배 시 0) |
win_loss | 순 결과: payout - stake |
parlay | 1 = 팔레이(다중 레그), 0 = 단일 |
단계 4 -- 스포츠 베팅 상세 조회
GET /api/sports-bet/{sports_bet_id}
단일 스포츠 베팅과 레그(선택지) 상세 정보를 반환합니다.
경로 파라미터: sports_bet_id -- 스포츠 베팅의 숫자 ID.
응답:
{
"id": 30001,
"team_id": 7,
"brand_id": 42,
"player_id": 8801,
"provider_id": 12,
"provider_code": "betconstruct",
"bet_id": "bc_bet_44556677",
"odds": "2.50",
"stake": "20000.00",
"payout": "50000.00",
"win_loss": "30000.00",
"parlay": 1,
"status": 1,
"balance_before": "100000.00",
"balance_after": "130000.00",
"settled_at": "2026-04-06T14:30:00Z",
"created_at": "2026-04-06T12:00:00Z",
"lines": [
{
"id": 60001,
"sports_bet_id": 30001,
"line_id": "bc_line_1122",
"event_name": "Manchester United vs Arsenal",
"league_name": "Premier League",
"market": "Match Winner",
"home_name": "Manchester United",
"away_name": "Arsenal",
"odds": "2.50",
"score": "2-1",
"status": 1,
"is_live": 0,
"created_at": "2026-04-06T12:00:00Z"
}
]
}
레그(Line) 필드:
| 필드 | 설명 |
|---|---|
line_id | 프로바이더의 해당 선택지 식별자 |
event_name | 경기 또는 이벤트명 |
league_name | 대회 또는 리그명 |
market | 베팅 마켓 (예: "Match Winner", "Over/Under 2.5") |
home_name / away_name | 팀명 |
odds | 해당 선택지의 배당률 |
score | 최종 스코어 문자열 (해당하는 경우) |
status | 레그 정산 상태 (베팅 상태와 동일한 코드) |
is_live | 1 = 인플레이 베팅, 0 = 프리매치 |
해당 스포츠 베팅이 존재하지 않거나 다른 팀에 속한 경우 404 Not Found가 반환됩니다.
주요 참고 사항
- 라이브/슬롯 베팅과 스포츠 베팅은 별도의 엔드포인트에 있습니다. 라이브 카지노 및 슬롯에는
/api/bet/list를, 스포츠에는/api/sports-bet/list를 사용합니다. 통합된 단일 목록 엔드포인트는 없습니다. - **
size파라미터(page_size아님)**가 모든 베팅 목록 엔드포인트에서 페이지당 항목 수를 제어합니다. 최대값은100입니다. - **대기 중인 베팅(
status: 0)은settled_at: null**이며, 라운드가 완료될 때까지payout_amount/payout은"0.00"입니다. win_loss는 패배 베팅에서 음수입니다 (예:-10000.00은 플레이어가 10,000을 잃었음을 의미).parlay: 1인 스포츠 베팅은lines배열에 여러 레그를 포함합니다. 단일 베팅(parlay: 0)은 일반적으로 하나의 레그를 가집니다.- **라이브/슬롯 베팅의
game_id,game_code,round_id,result_type**은 프로바이더 연동에 따라null일 수 있습니다. - 결과는 최신 순으로 정렬됩니다 (
id기준 내림차순).