Appearance
User & profile
Account identity, linked platforms, names, friends, and activity. Types: UserMe, LinkedProfile.
Default app ID: Main Auth 4391c956-…. Headers are standard ticket headers unless noted.
Current user
GET
https://public-ubiservices.ubi.com/v3/users/meFull user record for the ticket: userId, nameOnPlatform, dateCreated, dateOfBirth, email flags, country, and related account fields.
Response
UserMe plus additional account flags.
GET
https://public-ubiservices.ubi.com/v3/users/{userId}?fields=Same record by id. Optional fields is a field filter used by account.ubisoft.com.
PUT
https://public-ubiservices.ubi.com/v3/users/{userId}Save user fields (account site saveUserProfile). Body is the remaining user payload after profileId is taken from the path.
POST
https://public-ubiservices.ubi.com/v3/users/{userId}/validateUpdateDry-run for that save. Body is the same remaining user fields.
Delete account
DELETE
https://public-ubiservices.ubi.com/v3/users/mePermanently deletes your account. Official UI also runs extra confirmation; do not call this from a tool unless that is explicitly the user's action.
Exchange to the account-management app ID first.
DELETE
https://public-ubiservices.ubi.com/v3/users/{userId}Same delete keyed by user id (account site deleteUserAccountById).
Create account
POST
https://public-ubiservices.ubi.com/v3/usersCreate a new Ubisoft account (validateCreation on the website). Body includes email, password, country, legal opt-ins, age. Some SDK clients instead POST /v1/users with email, confirmedEmail, password, nameOnPlatform, dateOfBirth, country, preferredLanguage, legalOptinsKey, isDateOfBirthApprox.
Linked profiles
GET
https://public-ubiservices.ubi.com/v3/users/{userId}/ProfilesAlso GET /v3/users/me/profiles for the current user, and GET /v3/profiles/{profileId} for one profile.
URL parameters
| Name | Meaning |
|---|---|
userId | Ubisoft user UUID from Session or /v3/users/me |
Response
ts
type ProfilesResponse = {
profiles: LinkedProfile[]
}LinkedProfile: profileId, platformType (uplay / xbl / psn / steam / amazon / discord / epic), idOnPlatform, nameOnPlatform.
Unlink platform
DELETE
https://public-ubiservices.ubi.com/v3/users/{userId}/profiles/{profileId}Unlink one platform (Epic, Discord, …) from your user. profileId comes from linked profiles. 200 or 204.
Optional body (account site):
ts
type UnlinkBody = {
platformType: PlatformType
nameOnPlatform: string
}Initial / ghost profiles
GET
https://public-ubiservices.ubi.com/v3/users/{userId}/InitialProfilesPlatforms Ubisoft has seen even if they are not in /Profiles. account.ubisoft.com calls the same path with lowercase /initialProfiles.
Ghost linked: an XBL or PSN row appears here but not in /Profiles. Compare the two lists.
Lookup by name
GET
https://public-ubiservices.ubi.com/v3/profiles?nameOnPlatform={name}&platformType=uplayResolve a username on a platform.
Query
| Name | Notes |
|---|---|
nameOnPlatform | Exact display name |
platformType | Usually uplay; other PlatformType values work for that network |
Response
{ profiles: LinkedProfile[] }. Empty list if nobody matches.
Profiles by userId
GET
https://public-ubiservices.ubi.com/v3/profiles?userids={userId}Same LinkedProfile[] keyed by Ubisoft userId. userids can be comma-separated for a small batch.
account.ubisoft.com also sends userIds, profileIds, namesOnPlatform, and idsOnPlatform (comma-separated) on GET /v3/profiles, with platformType.
V2 profiles
GET
https://public-ubiservices.ubi.com/v2/profiles?userId={userId}Older profile payload. Prefer v3 unless you are matching a legacy client.
Rename
PUT
https://public-ubiservices.ubi.com/v3/profiles/{profileId}Change nameOnPlatform on a profile you own (rate-limited / cooldown on Ubisoft's side).
Body
ts
type RenameBody = {
nameOnPlatform: string
}Call validate first if you want the same checks the official UI runs.
Validate rename
POST
https://public-ubiservices.ubi.com/v3/profiles/{profileId}/validateUpdateDry-run for a username change. Body matches rename. Errors here are cheaper than a rejected PUT.
Persona / nickname
PUT
https://public-ubiservices.ubi.com/v1/profiles/{profileId}/persona?spaceId={spaceId}Per-space nickname (not the account-wide uplay name).
Query
spaceId — e.g. R6 primary.
Body
ts
type PersonaBody = {
nickname: string
obj: { enabled: boolean }
}Current profile v1
GET
https://public-ubiservices.ubi.com/v1/profiles/meSmall payload whose useful field is userId. Used to recover the user UUID from a ticket when you did not keep the Session.
Application history
GET
https://public-ubiservices.ubi.com/v1/profiles/applications?profileIds={id}&limit={n}GET
https://public-ubiservices.ubi.com/v3/profiles/applications?profileIds={id}&limit={n}Games / applications associated with a profile. v3 is the newer schema; v1 still answers. limit is a page size.
Games played
GET
https://public-ubiservices.ubi.com/v1/profiles/me/gamesplayedPer-title play history for the current user.
Connect website variant (same path on Connect, plus a per-profile URL):
GET
https://connect.ubisoft.com/v1/profiles/me/gamesplayedGET
https://connect.ubisoft.com/v1/profiles/{profileId}/gamesplayedQuery used by account.ubisoft.com: spaceIds, spacePlatformTypes, applicationPlatformTypes (comma-separated), limit.
Response
GamesPlayedEntry[]: spaceId, platformType, firstPlayed / lastPlayed (date + location), sessionsCount.
Visibility of this data to other users is gated by the gamesplayed consent.
Metaprogression
Connect economy level / XP for a profile (not Siege clearance).
GET
https://public-ubiservices.ubi.com/v1/profiles/{profileId}/global/ubiconnect/economy/api/metaprogressionts
type Metaprogression = {
level: number
xp: number
}Friends
GET
https://public-ubiservices.ubi.com/v2/profiles/me/friendsGET
https://public-ubiservices.ubi.com/v3/profiles/{profileId}/friendsDELETE
https://public-ubiservices.ubi.com/v3/profiles/{profileId}/friends/{friendProfileId}Friends list: profileId, username, date modified, relationship state. Subject to friends consent.
Send a request: GraphQL SendFriendRequestMutation.
Parties
GET
https://public-ubiservices.ubi.com/v1/profiles/{userId}/parties?spaceId={spaceId}Active parties for a user in a space.
ts
type PartiesResponse = {
parties: Array<{ partyId: string }>
}Invites use GraphQL SendPartyInvitationMutation with this partyId. Exchange to the party app ID.
Action log
GET
https://public-ubiservices.ubi.com/v3/profiles/me/actionLog?offset=0&limit=10Login / device history for your account.
Query
offset, limit — start at 0 / 10 and page. account.ubisoft.com defaults limit to 5.
Response
ActionLogEntry[]: applicationId, ipAddress, dateCreated, sessionId, credentialType, platformDeviceId.