Brand Management
Use Case
Use these endpoints to set up and manage Brands under your Team account. A Brand represents a distinct operator property (website, app, or product) that integrates with the Ruby platform. Each Brand has its own API credentials, wallet mode, prepaid balance, and provider whitelist.
Typical workflows:
- Onboarding a new Brand: create the brand, configure its provider whitelist, and fund its prepaid balance.
- Ongoing operations: update brand settings, top up the prepaid balance, adjust the provider whitelist.
Complete Flow
Step 1 — Create a Brand
POST /api/brand/create
Creates a new Brand and generates its API credentials (api_key and api_secret).
Request body:
{
"name": "Ace Casino",
"code": "ace",
"wallet_mode": "seamless",
"callback_url": "https://ace-casino.example.com/ruby/callback",
"currency": "KRW"
}
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Display name of the brand (max 100 chars) |
code | string | Yes | Unique code within your team (max 50 chars) |
wallet_mode | string | Yes | "seamless" or "transfer" |
callback_url | string | No | Required when wallet_mode is "seamless". Must not have a trailing slash. |
currency | string | No | Default currency code. Defaults to "KRW". |
Response (201 Created):
{
"id": 42,
"team_id": 7,
"name": "Ace Casino",
"code": "ace",
"api_key": "brk_a1b2c3d4e5f6",
"api_secret": "brs_9z8y7x6w5v4u3t2s1r0q",
"wallet_mode": "seamless",
"callback_url": "https://ace-casino.example.com/ruby/callback",
"ggr_limit_enabled": 0,
"prepaid_balance": "0.00",
"currency": "KRW",
"status": 1,
"created_at": "2026-04-06T09:00:00Z",
"updated_at": "2026-04-06T09:00:00Z"
}
Important:
api_secretis returned only in this response. It is not stored in retrievable form. Copy and store it securely immediately after creation. If lost, you must rotate credentials by contacting Ruby support.
Step 2 — List Brands
GET /api/brand/list
Returns a paginated list of all Brands under your Team.
Query parameters:
| Parameter | Type | Default | Constraints | Description |
|---|---|---|---|---|
page | integer | 1 | ≥ 1 | Page number |
page_size | integer | 20 | 1–100 | Items per page |
Example request:
GET /api/brand/list?page=1&page_size=20
Response:
{
"total": 3,
"page": 1,
"page_size": 20,
"items": [
{
"id": 42,
"team_id": 7,
"name": "Ace Casino",
"code": "ace",
"api_key": "brk_a1b2c3d4e5f6",
"wallet_mode": "seamless",
"callback_url": "https://ace-casino.example.com/ruby/callback",
"ggr_limit_enabled": 0,
"prepaid_balance": "50000.00",
"currency": "KRW",
"status": 1,
"created_at": "2026-04-06T09:00:00Z",
"updated_at": "2026-04-06T09:00:00Z"
}
]
}
Note: api_secret is never included in list or detail responses.
Step 3 — Update a Brand
PUT /api/brand/{brand_id}
Updates one or more settings on an existing Brand. All fields are optional — only include fields you want to change.
Path parameter: brand_id — the numeric ID of the Brand.
Request body:
{
"name": "Ace Casino VIP",
"wallet_mode": "seamless",
"callback_url": "https://ace-casino.example.com/ruby/v2/callback",
"ggr_limit_enabled": 1,
"status": 1
}
| Field | Type | Description |
|---|---|---|
name | string | New display name (max 100 chars) |
wallet_mode | string | "seamless" or "transfer" |
callback_url | string | Seamless callback URL (max 500 chars) |
ggr_limit_enabled | integer | 0 = disabled, 1 = enabled |
status | integer | 0 = disabled, 1 = active |
Response (200 OK): Full BrandResponse object (same shape as list items, no api_secret).
Brand changes propagate automatically across the platform via an internal event. No manual cache refresh is required on your side.
Step 4 — Recharge Prepaid Balance
POST /api/brand/{brand_id}/recharge
Adds funds to a Brand's prepaid balance. Used in transfer wallet mode to ensure players have funds available for game rounds.
Path parameter: brand_id — the numeric ID of the Brand.
Request body:
{
"amount": "100000.00"
}
| Field | Type | Required | Description |
|---|---|---|---|
amount | decimal string | Yes | Amount to add. Must be greater than 0. |
Response (200 OK): Full BrandResponse with updated prepaid_balance.
{
"id": 42,
"prepaid_balance": "150000.00",
...
}
Step 5 — Get Provider Whitelist
GET /api/brand/{brand_id}/providers
Returns the list of game providers currently enabled for the Brand.
Path parameter: brand_id — the numeric ID of the Brand.
Response:
[
{
"id": 101,
"provider_id": 3,
"provider_code": "evolution",
"status": 1
},
{
"id": 102,
"provider_id": 7,
"provider_code": "pragmatic",
"status": 1
}
]
Step 6 — Update Provider Whitelist
POST /api/brand/{brand_id}/providers
Replaces the Brand's entire provider whitelist in a single operation.
Path parameter: brand_id — the numeric ID of the Brand.
Request body:
{
"provider_ids": [3, 7, 12]
}
| Field | Type | Required | Description |
|---|---|---|---|
provider_ids | array of integers | Yes | Complete list of provider IDs to enable. Replaces the current whitelist entirely. |
Response: Updated whitelist array (same shape as the GET response above).
Full replacement semantics: The existing whitelist is discarded and replaced with the submitted list. To add a single provider, first GET the current list, append the new
provider_id, then POST the complete list back.
Important Notes
api_secretis shown only once. Store it immediately after brand creation. It cannot be retrieved again through the API.- Provider IDs are required to configure the whitelist and limits. Contact your Ruby account manager to obtain the list of available provider IDs and codes for your team.
- Whitelist is full-replacement. Submitting an empty
provider_idsarray ([]) disables all providers for the brand. status: 0disables the brand. Players under a disabled brand will not be able to access games.- Changes propagate automatically. After any create, update, or provider whitelist change, the platform emits an internal event. Connected services update without any action needed from your side.
callback_urlmust not have a trailing slash whenwallet_modeis"seamless". Example:https://example.com/ruby/callback, nothttps://example.com/ruby/callback/.