---
title: "One platform brand: jurisdiction, licences, KYC, risk score"
method: GET
path: "/v1/brands/{name_key}"
tags: ["Entities"]
---

# One platform brand: jurisdiction, licences, KYC, risk score

`GET /v1/brands/{name_key}`

## Request

- Base URL: `https://intelapi.publicaml.org`
- URL: `https://intelapi.publicaml.org/v1/brands/{name_key}`
- Auth: one of:
  - API key in header `X-API-Key`
  - none

The venue as a REGULATED BUSINESS rather than as a graph: where it is registered, where it is actually controlled, who licensed it and under which act, what its published KYC thresholds are, which jurisdiction lists its countries are on, and what all of that scores (`brand_risk.risk_score`, 0..100, decision #050).

`name_key` is the value every brand summary carries (`brand.name_key` in /v1/entities, and `brand.detail` is this path ready to use). The key of a LABEL is accepted too — `/v1/brands/stake` finds the same venue as `/v1/brands/stake-com` — and `matched_by` says which way it resolved, so landing on a different brand than expected is visible rather than silent. A numeric `entity_id` also works, but it is tried AFTER the name.

Everything here is computed on read for `as_of` and nothing is stored: a country enters a list and leaves it, a licence is issued and surrendered. Facts come from primary registers only — `source` and `evidence_url` on every record name the register entry, which is why `legal_name` is often null: ask an overview site which legal entity is behind a casino brand and it will invent one.

Open to anonymous callers; one unit.

## Path parameters

- `name_key` string, required

## Query parameters

- `as_of` string, date

## Response `200`

The brand's regulatory record.

- object
  - `brand` object: The platform brand this cluster is bound to (`clusters.entity_id`), with its regulatory attributes. Absent when the cluster is bound to no brand.
    - `entity_id` integer
    - `name_key` string
    - `display_name` string, nullable
    - `legal_name` string, nullable: The operating legal entity as the REGISTER spells it. Filled only from a primary register, which is why it is often null: overview sites invent legal entities.
    - `website_url` string, nullable
    - `logo_url` string, nullable
    - `domicile_country` string, nullable: ISO-3166-1 alpha-2 of REGISTRATION of the head operating entity.
    - `management_country` string, nullable: Country of ACTUAL CONTROL, and a different fact — filled only on a regulator's or a court's finding. Neither of the two is the conservative one: Bybit registers in SC and is managed from AE, Garantex registers in EE and is managed from RU.
    - `brand_risk` object
      - `risk_score` integer, nullable: The field to read. max(sanction of the organisation, jurisdiction); null = no component at all.
      - `complete` boolean: false = risk_score is a lower bound and can only go up.
      - `high_risk` boolean, nullable: Derived (risk_score >= high_risk_min), kept for compatibility. null when risk_score is null — nothing was known to derive it from.
      - `high_risk_legacy` boolean, nullable: The pre-scale boolean, computed from the FATF and EU lists only, published so a divergence is visible.
      - `designated` boolean: The ORGANISATION itself carries an active designation.
      - `past_designations` integer
      - `reasons` object[]: What produced the score, worst first: {kind: designation, count, status, score} and {kind: jurisdiction, code, list, status, valid_from, score}.
    - `jurisdiction` object: The verdict for `as_of`, computed on read and never stored: the union of domicile, management and the issuing countries of currently valid licences; worst status wins; `valid_in` (passporting) is ignored.
      - `as_of` string, date
      - `risk_score` integer, nullable
      - `complete` boolean
      - `high_risk` boolean, nullable: null = no countries, or a country with no list row for the date — unknown, not clean.
      - `unchecked` string[]: Countries with no row for as_of in an external list — the reason `complete` is false, named.
      - `domicile` object, nullable
        - `code` string
        - `name` string, nullable
        - `kind` string, nullable: `country` or `bloc`.
        - `risk_score` integer
        - `complete` boolean
        - `high_risk` boolean, nullable
        - `lists` object: Per list (fatf, eu-high-risk, weak-supervision) the row valid on the date — status, validity, source, evidence_url, its score — or null when there is none.
      - `management` object, nullable
        - `code` string
        - `name` string, nullable
        - `kind` string, nullable: `country` or `bloc`.
        - `risk_score` integer
        - `complete` boolean
        - `high_risk` boolean, nullable
        - `lists` object: Per list (fatf, eu-high-risk, weak-supervision) the row valid on the date — status, validity, source, evidence_url, its score — or null when there is none.
      - `licence_countries` object[]
        - `code` string
        - `name` string, nullable
        - `kind` string, nullable: `country` or `bloc`.
        - `risk_score` integer
        - `complete` boolean
        - `high_risk` boolean, nullable
        - `lists` object: Per list (fatf, eu-high-risk, weak-supervision) the row valid on the date — status, validity, source, evidence_url, its score — or null when there is none.
      - `high_risk_basis` object[]: Deduplicated by (country, list), worst first.
    - `regulatory` object
      - `claims` object[]: Regulatory records, the negative ones included: `kind` is licence / authorisation / registration / aml-registration / designation / warning / enforcement / not-registered, with `authority`, `act_ref`, `issuing_country`, `holder_legal_name`, validity window, and `source` + `evidence_url` naming the register entry. A designation lives here, one row per act.
      - `kyc` object[]: Published KYC periods: kyc_level, threshold, validity, `current` for the one in force, and its evidence.
  - `brand_risk_policy` object: The scale, its weights and its rule texts. Same object GET /v1/admin/brands/jurisdictions serves — one source, so the public answer and the console cannot drift.

## Other responses

- `400`: Malformed request.
- `429`: Rate limited: anonymous callers, and keys issued with a quota of their own. Authenticate to remove the limit.
- `500`: Server error.

---

[API](https://skmtc.dev/publicaml/apis/publicaml-intelligence-api.md) · [All operations](https://skmtc.dev/publicaml/apis/publicaml-intelligence-api/llms.txt) · [OpenAPI document](https://skmtc.dev/publicaml/apis/publicaml-intelligence-api/revisions/7c0c6315088c?raw)
