ACT Services
The ACT module handles NNID accounts. This module behaves very similarly to the Wii U implementation (nn::act)
ACT service "act:u"
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 | SaveData | |
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"
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 | UnloadConsoleAccount | |
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
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
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
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
ACT module uses a RootCertChain for all HTTPS requests, the only trusted root CA is default CertID 0x3.
New3DS
Even though ACT-sysmodule uses ptm:s, it doesn't use CheckNew3DS at all.