Skip to main content

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"
}
FieldTypeRequiredDescription
namestringYesDisplay name of the brand (max 100 chars)
codestringYesUnique code within your team (max 50 chars)
wallet_modestringYes"seamless" or "transfer"
callback_urlstringNoRequired when wallet_mode is "seamless". Must not have a trailing slash.
currencystringNoDefault 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_secret is 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:

ParameterTypeDefaultConstraintsDescription
pageinteger1≥ 1Page number
page_sizeinteger201–100Items 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
}
FieldTypeDescription
namestringNew display name (max 100 chars)
wallet_modestring"seamless" or "transfer"
callback_urlstringSeamless callback URL (max 500 chars)
ggr_limit_enabledinteger0 = disabled, 1 = enabled
statusinteger0 = 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"
}
FieldTypeRequiredDescription
amountdecimal stringYesAmount 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]
}
FieldTypeRequiredDescription
provider_idsarray of integersYesComplete 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_secret is 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_ids array ([]) disables all providers for the brand.
  • status: 0 disables 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_url must not have a trailing slash when wallet_mode is "seamless". Example: https://example.com/ruby/callback, not https://example.com/ruby/callback/.