ACT Services

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 HeaderAvailable since system-versionDescription
0x00010084Initialize
0x00020040GetErrorCode
0x00030000GetLastResponseCode
0x00040000?
0x00050082GetCommonInfo
0x000600C2GetAccountDataBlock/GetAccountInfo
0x00070082GetResultAsync
0x000800C2GetMiiImageData
0x00090180SetNfsPassword
0x000A0040??
0x000B0042AcquireEulaList
0x000C0082AcquireTimeZoneList
0x000D0040GenerateUuid
0x000E0080?
0x000F0140FindSlotNoByUuid
0x00100000SaveData
0x00110080GetTransferableId
0x00120102AcquireNexServiceToken
0x00130002GetNexServiceToken
0x00140382AcquireIndependentServiceToken
0x00150002GetIndependentServiceToken
0x00160082AcquireAccountInfo
0x00170084AcquireAccountIdByPrincipalId
0x00180044AcquirePrincipalIdByAccountId
0x00190044AcquireMii
0x001A0042AcquireAccountInfoEx
0x001B0084AcquireOtherTypePrincipalID?
0x001C0342?
0x001D0004InquireMailAddress
0x001E0082AcquireEula
0x001F0082AcquireEulaLanguageList
0x00200382?
0x00210002?
0x00220342?

ACT service “act:a” #

These commands are exclusive to act:a

Command HeaderAvailable since system-versionDescription
0x04010080?
0x04020000CreateConsoleAccount
0x04030040CommitConsoleAccount
0x04040080UnbindServerAccount
0x04050040DeleteConsoleAccount
0x04060240?
0x04070000UnloadConsoleAccount
0x04080080EnableAccountPasswordCache
0x04090040SetDefaultAccount
0x040A0040ReplaceAccountId
0x040B0040GetSupportContext
0x040C0100?
0x040D00C0?
0x040E02C0?
0x040F0280?
0x04100040?
0x04110040?
0x041207C0UpdateMii
0x041300C2UpdateMiiImage
0x04140182InquireAccountIdAvailability
0x04150EC4BindToNewServerAccount
0x041602C4BindToExistentServerAccount
0x041702C4InquireBindingToExistentServerAccount
0x04180042?
0x04190042?
0x041A01C2AcquireAccountTokenEx
0x041B0142AgreeEula
0x041C0042SyncAccountInfo
0x041D0080?
0x041E0182UpdateAccountPassword
0x041F0042ReissueAccountPassword
0x04200180SetAccountPasswordInput
0x04210042UploadMii
0x04220042?
0x04230082ValidateMailAddress
0x04240044?
0x04250042SendConfirmationMail
0x04260044?
0x04270084?
0x04280044ApproveByCreditCard
0x04290082SendCoppaCodeMail
0x042A0080?
0x042B01C4?
0x042C0042?
0x042D0042?
0x042E0080?
0x042F0084UpdateAccountInfoEx
0x04300044UpdateAccountMailAddress
0x04310042?
0x04320042?
0x04330042?
0x04340003?
0x04350042DeleteServerAccount

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.

BlkIDSizeCommand neededDescription
0x10x1GetCommonInfoNumber of accounts
0x20x1GetCommonInfoCurrent account slot
0x30x1GetCommonInfoDefault account slot
0x40x8GetCommonInfo?
0x50x4GetAccountInfoPersistentId
0x60x8GetCommonInfo/ GetAccountInfoCommonTransferableIdBase on GetCommonInfo / TransferableIdBase on GetAccountInfo
0x70x60GetAccountInfoMiiData
0x80x11GetAccountInfoAccountId (ASCII NUL-terminated Nintendo Network ID)
0x90x101AcquireAccountInfoMail address
0xA0x4GetAccountInfoBirthday {u16 year; u8 month; u8 day;}
0xB0x3GetAccountInfoASCII NUL-terminated Country Name
0xC0x4GetAccountInfoPrincipalId
0xE0x1GetAccountInfoIsPasswordCacheEnabled
0xF0x1GetAccountInfoDoes nothing?
0x110xA0GetAccountInfostruct{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;}
0x120x4GetAccountInfo?
0x130x1GetAccountInfoGender
0x140x1GetAccountInfoLastAuthenticationResult
0x150x11GetAccountInfoAssignedAccountId (ASCII NUL-terminated Nintendo Network ID)
0x160x1GetAccountInfoParentalControlSlotNo
0x170x4GetAccountInfoSimpleAddressId ( CountryInfo)
0x190x8GetAccountInfoUtcOffset
0x1A0x1GetAccountInfoIsCommited
0x1B0x16GetAccountInfoMiiName (NUL-terminated UTF-16 Mii name)
0x1C0x11GetAccountInfoNfsPassword
0x1D0x1GetAccountInfoBool: if EciVirtualAccount has a value
0x1E0x41GetAccountInfoTimeZoneId (ASCII Time Zone Location)
0x1F0x1GetAccountInfoIsMiiUpdated
0x200x1GetAccountInfoIsMailAddressValidated
0x210x4CGetAccountInfo?
0x240x1GetAccountInfoIsServerAccountDeleted
0x250x101GetAccountInfoMiiImageUrl (ASCII NUL-terminated URL to account mii image)
0x260x4GetAccountInfoAssignedPrincipalId
0x270x4GetAccountInfo? (Only accessible with param[1] = 0xFE)
0x280x24GetAccountInfostruct{char[0x21] NnasSubDomain?; char[0x3] NnasNfsEnv;}
0x290x24GetCommonInfostruct{char[0x21] DefaultNnasSubDomain?; char[0x3] DefaultNnasNfsEnv;}
0x2A0x8GetCommonInfo?
0x2B0x1GetAccountInfoFpLocalAccountId
0x2C0x2GetAccountInfoAge
0x2D0x1GetAccountInfoIsEnabledReceiveAds
0x2E0x1GetAccountInfoIsOffDeviceAccessEnabled
0x2F0x4GetAccountInfoTranslated 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.

Category:Services