ACT Services

From 3dbrew
Jump to navigation Jump to search


The ACT module handles NNID accounts. This module behaves very similarly to the Wii U implementation (nn::act)

ACT service "act:u"[edit]

These commands are common to both act:u and act:a

Command Header Available since system-version Description
0x00010084 Initialize
0x00020040 GetErrorCode
0x00030000 GetLastResponseCode
0x00040000 ?
0x00050082 GetCommonInfo
0x000600C2 GetAccountDataBlock/GetAccountInfo
0x00070082 GetResultAsync
0x000800C2 GetMiiImageData
0x00090180 SetNfsPassword
0x000A0040? ?
0x000B0042 AcquireEulaList
0x000C0082 AcquireTimeZoneList
0x000D0040 GenerateUuid
0x000E0080 ?
0x000F0140 FindSlotNoByUuid
0x00100000 ?
0x00110080 GetTransferableId
0x00120102 AcquireNexServiceToken
0x00130002 GetNexServiceToken
0x00140382 AcquireIndependentServiceToken
0x00150002 GetIndependentServiceToken
0x00160082 AcquireAccountInfo
0x00170084 AcquireAccountIdByPrincipalId
0x00180044 AcquirePrincipalIdByAccountId
0x00190044 AcquireMii
0x001A0042 AcquireAccountInfoEx
0x001B0084 AcquireOtherTypePrincipalID?
0x001C0342 ?
0x001D0004 InquireMailAddress
0x001E0082 AcquireEula
0x001F0082 AcquireEulaLanguageList
0x00200382 ?
0x00210002 ?
0x00220342 ?

ACT service "act:a"[edit]

These commands are exclusive to act:a

Command Header Available since system-version Description
0x04010080 ?
0x04020000 CreateConsoleAccount
0x04030040 CommitConsoleAccount
0x04040080 UnbindServerAccount
0x04050040 DeleteConsoleAccount
0x04060240 ?
0x04070000 ?
0x04080080 EnableAccountPasswordCache
0x04090040 SetDefaultAccount
0x040A0040 ReplaceAccountId
0x040B0040 GetSupportContext
0x040C0100 ?
0x040D00C0 ?
0x040E02C0 ?
0x040F0280 ?
0x04100040 ?
0x04110040 ?
0x041207C0 UpdateMii
0x041300C2 UpdateMiiImage
0x04140182 InquireAccountIdAvailability
0x04150EC4 BindToNewServerAccount
0x041602C4 BindToExistentServerAccount
0x041702C4 InquireBindingToExistentServerAccount
0x04180042 ?
0x04190042 ?
0x041A01C2 AcquireAccountTokenEx
0x041B0142 AgreeEula
0x041C0042 SyncAccountInfo
0x041D0080 ?
0x041E0182 UpdateAccountPassword
0x041F0042 ReissueAccountPassword
0x04200180 SetAccountPasswordInput
0x04210042 UploadMii
0x04220042 ?
0x04230082 ValidateMailAddress
0x04240044 ?
0x04250042 SendConfirmationMail
0x04260044 ?
0x04270084 ?
0x04280044 ApproveByCreditCard
0x04290082 SendCoppaCodeMail
0x042A0080 ?
0x042B01C4 ?
0x042C0042 ?
0x042D0042 ?
0x042E0080 ?
0x042F0084 UpdateAccountInfoEx
0x04300044 UpdateAccountMailAddress
0x04310042 ?
0x04320042 ?
0x04330042 ?
0x04340003 ?
0x04350042 DeleteServerAccount


This is the service used by regular applications.

Account slots[edit]

Like the friends sysmodule, the ACT module supports multiple accounts internally, although this functionality is not exposed to the users. Unlike the Wii U which supports up to 12 accounts, the 3DS only has 8 account slots.

Some commands require require the account slot as an argument, which is 1-indexed. The value for using the current loaded account is 0xFE.

DataBlocks[edit]

Data blocks can be accessed from specific commands depending on the data that is requested. These follow a similar order to the Wii U ACTInfoTypes.

BlkID Size Command needed Description
0x1 0x1 GetCommonInfo Number of accounts
0x2 0x1 GetCommonInfo Current account slot
0x3 0x1 GetCommonInfo Default account slot
0x4 0x8 GetCommonInfo ?
0x5 0x4 GetAccountInfo PersistentId
0x6 0x8 GetCommonInfo/GetAccountInfo CommonTransferableIdBase on GetCommonInfo / TransferableIdBase on GetAccountInfo
0x7 0x60 GetAccountInfo MiiData
0x8 0x11 GetAccountInfo AccountId (ASCII NUL-terminated Nintendo Network ID)
0x9 0x101 AcquireAccountInfo Mail address
0xA 0x4 GetAccountInfo Birthday {u16 year; u8 month; u8 day;}
0xB 0x3 GetAccountInfo ASCII NUL-terminated Country Name
0xC 0x4 GetAccountInfo PrincipalId
0xE 0x1 GetAccountInfo IsPasswordCacheEnabled
0xF 0x1 GetAccountInfo Does nothing?
0x11 0xA0 GetAccountInfo struct{u32 PersistentID; u32 padding; u64 TransferableIDBase; u8[0x60] MiiData; char16_t[0xB] MachinUserName?; char[0x11] AccountID; u8 padding; struct{u16 year; u8 month; u8 day;}Birthday; u32 PrincipalID;}
0x12 0x4 GetAccountInfo ?
0x13 0x1 GetAccountInfo Gender
0x14 0x1 GetAccountInfo LastAuthenticationResult
0x15 0x11 GetAccountInfo AssignedAccountId (ASCII NUL-terminated Nintendo Network ID)
0x16 0x1 GetAccountInfo ParentalControlSlotNo
0x17 0x4 GetAccountInfo SimpleAddressId (CountryInfo)
0x19 0x8 GetAccountInfo UtcOffset
0x1A 0x1 GetAccountInfo IsCommited
0x1B 0x16 GetAccountInfo MiiName (NUL-terminated UTF-16 Mii name)
0x1C 0x11 GetAccountInfo NfsPassword
0x1D 0x1 GetAccountInfo Bool: if EciVirtualAccount has a value
0x1E 0x41 GetAccountInfo TimeZoneId (ASCII Time Zone Location)
0x1F 0x1 GetAccountInfo IsMiiUpdated
0x20 0x1 GetAccountInfo IsMailAddressValidated
0x21 0x4C GetAccountInfo ?
0x24 0x1 GetAccountInfo IsServerAccountDeleted
0x25 0x101 GetAccountInfo MiiImageUrl (ASCII NUL-terminated URL to account mii image)
0x26 0x4 GetAccountInfo AssignedPrincipalId
0x27 0x4 GetAccountInfo ? (Only accessible with param[1] = 0xFE)
0x28 0x24 GetAccountInfo struct{char[0x21] NnasSubDomain?; char[0x3] NnasNfsEnv;}
0x29 0x24 GetCommonInfo struct{char[0x21] DefaultNnasSubDomain?; char[0x3] DefaultNnasNfsEnv;}
0x2A 0x8 GetCommonInfo ?
0x2B 0x1 GetAccountInfo FpLocalAccountId
0x2C 0x2 GetAccountInfo Age
0x2D 0x1 GetAccountInfo IsEnabledReceiveAds
0x2E 0x1 GetAccountInfo IsOffDeviceAccessEnabled
0x2F 0x4 GetAccountInfo Translated SimpleAddressId (CountryInfo)

HTTPS Requests[edit]

With each request, ACT-sysmodule specifies request-header "X-Nintendo-Device-Model". This is the only *dedicated* request-header that's contains anything Old3DS/New3DS specific. This was implemented with 9.0.0-X, and presumably 8.1.0-0_New3DS. The value is from a string initialized during ACT-sysmodule startup. The value-string is the codename string for all 5 of the model values from Cfg:GetSystemModel. When the output from GetSystemModel is >=5(switch statement default case), it runs this: "len = snprintf(outstr, outmaxsize, "3DS-%u", model);"

Trusted Root CAs[edit]

ACT module uses a RootCertChain for all HTTPS requests, the only trusted root CA is default CertID 0x3.

New3DS[edit]

Even though ACT-sysmodule uses ptm:s, it doesn't use CheckNew3DS at all.