Appearance
Bans & privileges
Penalties and grant/deny flags. Shared type: ActivePenalties.
spaceId: R6 primary. Marketplace privilege ID: privilege IDs.
Active penalties
GET
https://public-ubiservices.ubi.com/v1/spaces/{spaceId}/title/r6s/profiles/me/active_penaltiesBans on the authenticated profile (/me).
Response
ts
type ActivePenalties = {
profile_id: string
bans: Array<{
expiration_date: string
level: string
queue: string[]
source: string // e.g. "cheating"
}>
}queue lists affected modes (PVP_Ranked_Game, PVE_COOP_Game, …). Empty bans means no active penalty on this surface.
Player privileges
GET
https://public-ubiservices.ubi.com/v2/profiles/{userId}/playerprivileges?spaceId={spaceId}&privilegeIds={privilegeId}Privilege check with full reasons[].
Query
| Name | Notes |
|---|---|
spaceId | R6 primary for Siege |
privilegeIds | e.g. marketplace 2798fec3-9010-4a24-b902-f21fa1b25e1f |
Response (per privilege)
ts
type Privilege = {
privilegeId: string
isGranted: boolean
isDefault?: boolean
lastModifiedAt?: string
displayValues?: unknown
reasons: Array<{
isGranted: boolean
isDefault?: boolean
lastModifiedAt?: string
displayValues?: unknown
}>
}GraphQL privilege
Same HTTP endpoint as the marketplace: POST /v1/profiles/me/uplay/graphql.
Operation GetPlayerPrivilege → viewer.game.meta.privileges[].isGranted.
Use this when you are already on the GraphQL stack; use REST privileges when you need reasons[].