Skip to content

AddBrand

An optional symbol_set_ids array assigns the initial symbol catalogue. If it is omitted or empty, the new brand starts with no available symbols. When the Main Server has negotiated license brand policy version 1, a positive license allowance also limits new brand creation. A created brand remains pending API admission until the next authenticated license snapshot.

{"command":"AddBrand","data":{"brand":"demo","dark_logo":"dark.svg","light_logo":"light.svg","favicon":"favicon.ico","terminal_host":"demo.example.com","affiliate_host":"affiliate.example.com","enable":1,"symbol_set_ids":[2,3]}}

Only SuperAdmin can create brands and assign global SymbolSets.

Description: Creates a brand configuration.

Access Control

SESSION_ADMIN with super_admin = 1. A brand admin cannot create brands.

HTTP Route

POST /brand

Request Parameters

Name Type Required Description
brand string Yes Brand name
dark_logo string Yes Dark logo path or URL
light_logo string Yes Light logo path or URL
favicon string Yes Favicon path or URL
terminal_host string Legacy: Yes; policy v1: No Legacy mode requires 1–128 characters. Under negotiated policy v1 it may be omitted or empty, with a maximum of 128 characters; an omitted host defaults to empty.
affiliate_host string Legacy: Yes; policy v1: No Legacy mode requires 1–128 characters. Under negotiated policy v1 it may be omitted or empty, with a maximum of 128 characters; an omitted host defaults to empty. A configured Affiliate Cabinet hostname has no scheme, port, or path and is served from its root.
enable int Yes Enable flag, 0 or 1
can_open_demo int No Allows customer self-service DEMO account opening when set to 1
can_open_real int No Allows customer self-service REAL account opening when set to 1
kyc_required_for_real int No Requires approved customer KYC before REAL account opening when set to 1
authorize_after_registration int No Returns a customer JWT after successful public registration when set to 1; defaults to 0
default_language string No Default terminal language; defaults to en
settings object No Additional brand settings object

Request Example

{
  "brand": "IonMarkets",
  "dark_logo": "/images/ion-dark.svg",
  "light_logo": "/images/ion-light.svg",
  "favicon": "/images/favicon.ico",
  "terminal_host": "terminal.ionmarkets.com",
  "affiliate_host": "affiliate.ionmarkets.com",
  "enable": 1,
  "can_open_demo": 1,
  "can_open_real": 0,
  "kyc_required_for_real": 1,
  "authorize_after_registration": 1,
  "default_language": "de",
  "settings": {
    "primary_color": "#111111"
  }
}

Default terminal language

default_language defines the language used when a visitor opens a terminal URL without a language prefix. It must contain one of the supported two-letter codes:

en, ru, de, es, fr, pt, zh, cn, tr, hu, ja, pl, ko, vi, jp, id, th, fa, ms, it, cs, ro, ar.

The server normalizes the value to lowercase. A missing or unsupported value falls back to en.

For a brand with default_language: "de", /sign/in redirects to /de/sign/in. A URL that already starts with a supported language, such as /en/sign/in, is served without a redirect. Query parameters are preserved.

Response Example

{
  "data": "OK"
}

Error Examples

{
  "error": "INVALID_DATA",
  "message": "enable must be between 0 and 1"
}
{
  "error": "BRAND_ADD_ERROR",
  "message": "..."
}

When a negotiated policy-v1 license has a positive allowance and the limit is full, AddBrand rejects the new brand with HTTP/TCP status 403:

{
  "error": "BRAND_LIMIT_REACHED",
  "message": "The license brand allowance has been reached"
}

The server counts existing non-deleted local brands toward the allowance, including disabled brands. An allowance of 0 is unlimited under policy v1. Lowering the limit does not remove or disable already admitted brands; it blocks creation of additional brands until usage falls below the limit. Legacy license behavior remains unchanged when policy v1 has not been negotiated.