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
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 | Difference betwwen server time and device time (in nanoseconds) | ||||||||||||||||||||||||||||||||||||||||||
0x5 | 0x4 | GetAccountInfo | PersistentId | ||||||||||||||||||||||||||||||||||||||||||
0x6 | 0x8 | GetCommonInfo/GetAccountInfo | CommonTransferableIdBase on GetCommonInfo / TransferableIdBase on GetAccountInfo | ||||||||||||||||||||||||||||||||||||||||||
0x7 | 0x60 | GetAccountInfo | MiiData | ||||||||||||||||||||||||||||||||||||||||||
0x8 | 0x11 | GetAccountInfo | AccountId (ASCII NULL-terminated Nintendo Network ID) | ||||||||||||||||||||||||||||||||||||||||||
0x9 | 0x101 | AcquireAccountInfo | Mail address | ||||||||||||||||||||||||||||||||||||||||||
0xA | 0x4 | GetAccountInfo | Birthdate
| ||||||||||||||||||||||||||||||||||||||||||
0xB | 0x3 | GetAccountInfo | ASCII NULL-terminated Country Name | ||||||||||||||||||||||||||||||||||||||||||
0xC | 0x4 | GetAccountInfo | PrincipalId | ||||||||||||||||||||||||||||||||||||||||||
0xE | 0x1 | GetAccountInfo | IsPasswordCacheEnabled | ||||||||||||||||||||||||||||||||||||||||||
0xF | 0x1 | GetAccountInfo | Does not return anything. | ||||||||||||||||||||||||||||||||||||||||||
0x11 | 0xA0 | GetAccountInfo |
| ||||||||||||||||||||||||||||||||||||||||||
0x12 | 0x4 | GetAccountInfo |
| ||||||||||||||||||||||||||||||||||||||||||
0x13 | 0x1 | GetAccountInfo | Gender | ||||||||||||||||||||||||||||||||||||||||||
0x14 | 0x1 | GetAccountInfo | LastAuthenticationResult | ||||||||||||||||||||||||||||||||||||||||||
0x15 | 0x11 | GetAccountInfo | AssignedAccountId (ASCII NULL-terminated Nintendo Network ID) | ||||||||||||||||||||||||||||||||||||||||||
0x16 | 0x1 | GetAccountInfo | ParentalControlSlotNo | ||||||||||||||||||||||||||||||||||||||||||
0x17 | 0x4 | GetAccountInfo | SimpleAddressId (CountryInfo) | ||||||||||||||||||||||||||||||||||||||||||
0x19 | 0x8 | GetAccountInfo | UtcOffset | ||||||||||||||||||||||||||||||||||||||||||
0x1A | 0x1 | GetAccountInfo | IsCommited | ||||||||||||||||||||||||||||||||||||||||||
0x1B | 0x16 | GetAccountInfo | 10-character UTF-16 Mii Name (10 characters + NULL termination) | ||||||||||||||||||||||||||||||||||||||||||
0x1C | 0x11 | GetAccountInfo | ASCII NULL-termiinated NfsPassword | ||||||||||||||||||||||||||||||||||||||||||
0x1D | 0x1 | GetAccountInfo | HasEciVirtualAccount (checks whether EciVirtualAccount has a value) | ||||||||||||||||||||||||||||||||||||||||||
0x1E | 0x41 | GetAccountInfo | TimeZoneId (ASCII Time Zone Location) | ||||||||||||||||||||||||||||||||||||||||||
0x1F | 0x1 | GetAccountInfo | IsMiiUpdated | ||||||||||||||||||||||||||||||||||||||||||
0x20 | 0x1 | GetAccountInfo | IsMailAddressValidated | ||||||||||||||||||||||||||||||||||||||||||
0x21 | 0x4C | GetAccountInfo | (Developer units only) Account access token
| ||||||||||||||||||||||||||||||||||||||||||
0x24 | 0x1 | GetAccountInfo | IsServerAccountDeleted | ||||||||||||||||||||||||||||||||||||||||||
0x25 | 0x101 | GetAccountInfo | MiiImageUrl (ASCII NULL-terminated URL to account mii image) | ||||||||||||||||||||||||||||||||||||||||||
0x26 | 0x4 | GetAccountInfo | AssignedPrincipalId | ||||||||||||||||||||||||||||||||||||||||||
0x27 | 0x4 | GetAccountInfo | Account Access token state, only accessible with account slot = 0xFE: (0: uninitialized, 1: expired, 2: valid) | ||||||||||||||||||||||||||||||||||||||||||
0x28 | 0x24 | GetAccountInfo | Account server environment
| ||||||||||||||||||||||||||||||||||||||||||
0x29 | 0x24 | GetCommonInfo | Server environment of default account
| ||||||||||||||||||||||||||||||||||||||||||
0x2A | 0x8 | GetCommonInfo | first 8 bytes of SHA256 ( AM:GetDeviceId() as 4 little endian bytes + 'A2257354' )
| ||||||||||||||||||||||||||||||||||||||||||
0x2B | 0x1 | GetAccountInfo | FpLocalAccountId (local account ID of friends sysmodule) | ||||||||||||||||||||||||||||||||||||||||||
0x2C | 0x2 | GetAccountInfo | Age (calculated using server time, not device time) | ||||||||||||||||||||||||||||||||||||||||||
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.