Difference between revisions of "ACT Services"

From 3dbrew
Jump to navigation Jump to search
m (Expand on ACT data blocks)
 
(12 intermediate revisions by 6 users not shown)
Line 1: Line 1:
 
[[Category:Services]]
 
[[Category:Services]]
  
The ACT module handles NNID accounts.
+
The ACT module handles NNID accounts. This module behaves very similarly to the [https://github.com/devkitPro/wut/blob/master/cafe/nn_act.def Wii U] implementation (nn::act)
  
 
= ACT service "act:u" =
 
= ACT service "act:u" =
Line 14: Line 14:
 
| 0x00010084
 
| 0x00010084
 
|  
 
|  
| Initialize
+
| [[ACT:Initialize|Initialize]]
 
|-
 
|-
 
| 0x00020040
 
| 0x00020040
 
|  
 
|  
| GetErrorCode
+
| [[ACT:GetErrorCode|GetErrorCode]]
 +
|-
 +
| 0x00030000
 +
|
 +
| GetLastResponseCode
 +
|-
 +
| 0x00040000
 +
|
 +
| ?
 +
|-
 +
| 0x00050082
 +
|
 +
| [[ACTU:GetCommonInfo|GetCommonInfo]]
 
|-
 
|-
 
| 0x000600C2
 
| 0x000600C2
 
|  
 
|  
| [[ACTU:GetAccountDataBlock|GetAccountDataBlock]]
+
| [[ACTU:GetAccountDataBlock|GetAccountDataBlock]]/GetAccountInfo
 +
|-
 +
| 0x00070082
 +
|
 +
| GetResultAsync
 +
|-
 +
| 0x000800C2
 +
|
 +
| GetMiiImageData
 +
|-
 +
| 0x00090180
 +
|
 +
| SetNfsPassword
 +
|-
 +
| 0x000A0040?
 +
|
 +
| ?
 +
|-
 +
| 0x000B0042
 +
|
 +
| AcquireEulaList
 +
|-
 +
| 0x000C0082
 +
|
 +
| AcquireTimeZoneList
 
|-
 
|-
 
| 0x000D0040
 
| 0x000D0040
 
|  
 
|  
 
| GenerateUuid
 
| 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
 +
|
 +
| ?
 +
|-
 
|}
 
|}
  
Line 37: Line 158:
 
!  Available since system-version
 
!  Available since system-version
 
!  Description
 
!  Description
 +
|-
 +
| 0x04010080
 +
|
 +
| ?
 +
|-
 +
| 0x04020000
 +
|
 +
| [[ACTA:CreateConsoleAccount|CreateConsoleAccount]]
 +
|-
 +
| 0x04030040
 +
|
 +
| CommitConsoleAccount
 +
|-
 +
| 0x04040080
 +
|
 +
| [[ACTA:UnbindServerAccount|UnbindServerAccount]]
 +
|-
 +
| 0x04050040
 +
|
 +
| DeleteConsoleAccount
 +
|-
 +
| 0x04060240
 +
|
 +
| ?
 +
|-
 +
| 0x04070000
 +
|
 +
| ?
 +
|-
 +
| 0x04080080
 +
|
 +
| EnableAccountPasswordCache
 +
|-
 +
| 0x04090040
 +
|
 +
| [[ACTA:SetDefaultAccount|SetDefaultAccount]]
 +
|-
 +
| 0x040A0040
 +
|
 +
| ReplaceAccountId
 +
|-
 +
| 0x040B0040
 +
|
 +
| GetSupportContext
 +
|-
 +
| 0x040C0100
 +
|
 +
| ?
 +
|-
 +
| 0x040D00C0
 +
|
 +
| ?
 +
|-
 +
| 0x040E02C0
 +
|
 +
| ?
 +
|-
 +
| 0x040F0280
 +
|
 +
| ?
 +
|-
 +
| 0x04100040
 +
|
 +
| ?
 +
|-
 +
| 0x04110040
 +
|
 +
| ?
 +
|-
 +
| 0x041207C0
 +
|
 +
| [[ACTA:UpdateMii|UpdateMii]]
 
|-
 
|-
 
| 0x041300C2
 
| 0x041300C2
 
|  
 
|  
 
| UpdateMiiImage
 
| UpdateMiiImage
 +
|-
 +
| 0x04140182
 +
|
 +
| InquireAccountIdAvailability
 +
|-
 +
| 0x04150EC4
 +
|
 +
| BindToNewServerAccount
 +
|-
 +
| 0x041602C4
 +
|
 +
| BindToExistentServerAccount
 +
|-
 +
| 0x041702C4
 +
|
 +
| InquireBindingToExistentServerAccount
 +
|-
 +
| 0x04180042
 +
|
 +
| ?
 +
|-
 +
| 0x04190042
 +
|
 +
| ?
 +
|-
 +
| 0x041A01C2
 +
|
 +
| AcquireAccountTokenEx
 
|-
 
|-
 
| 0x041B0142
 
| 0x041B0142
 
|  
 
|  
 
| AgreeEula
 
| AgreeEula
 +
|-
 +
| 0x041C0042
 +
|
 +
| SyncAccountInfo
 +
|-
 +
| 0x041D0080
 +
|
 +
| ?
 +
|-
 +
| 0x041E0182
 +
|
 +
| UpdateAccountPassword
 +
|-
 +
| 0x041F0042
 +
|
 +
| ReissueAccountPassword
 +
|-
 +
| 0x04200180
 +
|
 +
| SetAccountPasswordInput
 
|-
 
|-
 
| 0x04210042
 
| 0x04210042
 
|  
 
|  
 
| UploadMii
 
| UploadMii
 +
|-
 +
| 0x04220042
 +
|
 +
| ?
 
|-
 
|-
 
| 0x04230082
 
| 0x04230082
 
|  
 
|  
 
| ValidateMailAddress
 
| 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
 
|}
 
|}
  
Line 58: Line 375:
 
This is the service used by regular applications.
 
This is the service used by regular applications.
  
=HTTPS Requests=
+
= 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 [https://github.com/decaf-emu/decaf-emu/blob/master/src/libdecaf/src/nn/act/nn_act_enum.h ACTInfoTypes].
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
!  BlkID
 +
!  Size
 +
!  Command needed
 +
!  Description
 +
|-
 +
| 0x1
 +
| 0x1
 +
| [[ACTU:GetCommonInfo|GetCommonInfo]]
 +
| Number of accounts
 +
|-
 +
| 0x2
 +
| 0x1
 +
| [[ACTU:GetCommonInfo|GetCommonInfo]]
 +
| Current account slot
 +
|-
 +
| 0x3
 +
| 0x1
 +
| [[ACTU:GetCommonInfo|GetCommonInfo]]
 +
| Default account slot
 +
|-
 +
| 0x4
 +
| 0x8
 +
| [[ACTU:GetCommonInfo|GetCommonInfo]]
 +
| ?
 +
|-
 +
| 0x5
 +
| 0x4
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| PersistentId
 +
|-
 +
| 0x6
 +
| 0x8
 +
| [[ACTU:GetCommonInfo|GetCommonInfo]]/[[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| CommonTransferableIdBase on GetCommonInfo / TransferableIdBase on GetAccountInfo
 +
|-
 +
| 0x7
 +
| 0x60
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| [[Mii#Mii_format|MiiData]]
 +
|-
 +
| 0x8
 +
| 0x11
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| AccountId (ASCII NUL-terminated Nintendo Network ID)
 +
|-
 +
| 0x9
 +
| 0x101
 +
| AcquireAccountInfo
 +
| Mail address
 +
|-
 +
| 0xA
 +
| 0x4
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| Birthday {u16 year; u8 month; u8 day;}
 +
|-
 +
| 0xB
 +
| 0x3
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| ASCII NUL-terminated Country Name
 +
|-
 +
| 0xC
 +
| 0x4
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| PrincipalId
 +
|-
 +
| 0xE
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| IsPasswordCacheEnabled
 +
|-
 +
| 0xF
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| Does nothing?
 +
|-
 +
| 0x11
 +
| 0xA0
 +
| [[ACTU:GetAccountDataBlock|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
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| ?
 +
|-
 +
| 0x13
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| Gender
 +
|-
 +
| 0x14
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| LastAuthenticationResult
 +
|-
 +
| 0x15
 +
| 0x11
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| AssignedAccountId (ASCII NUL-terminated Nintendo Network ID)
 +
|-
 +
| 0x16
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| ParentalControlSlotNo
 +
|-
 +
| 0x17
 +
| 0x4
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| SimpleAddressId ([[Config_Savegame#CountryInfo|CountryInfo]])
 +
|-
 +
| 0x19
 +
| 0x8
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| UtcOffset
 +
|-
 +
| 0x1A
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| IsCommited
 +
|-
 +
| 0x1B
 +
| 0x16
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| MiiName (NUL-terminated UTF-16 Mii name)
 +
|-
 +
| 0x1C
 +
| 0x11
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| NfsPassword
 +
|-
 +
| 0x1D
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| Bool: if EciVirtualAccount has a value
 +
|-
 +
| 0x1E
 +
| 0x41
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| TimeZoneId (ASCII Time Zone Location)
 +
|-
 +
| 0x1F
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| IsMiiUpdated
 +
|-
 +
| 0x20
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| IsMailAddressValidated
 +
|-
 +
| 0x21
 +
| 0x4C
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| ?
 +
|-
 +
| 0x24
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| IsServerAccountDeleted
 +
|-
 +
| 0x25
 +
| 0x101
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| MiiImageUrl (ASCII NUL-terminated URL to account mii image)
 +
|-
 +
| 0x26
 +
| 0x4
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| AssignedPrincipalId
 +
|-
 +
| 0x27
 +
| 0x4
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| ? (Only accessible with param[1] = 0xFE)
 +
|-
 +
| 0x28
 +
| 0x24
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| struct{char[0x21] NnasSubDomain?; char[0x3] NnasNfsEnv;}
 +
|-
 +
| 0x29
 +
| 0x24
 +
| [[ACTU:GetCommonInfo|GetCommonInfo]]
 +
| struct{char[0x21] DefaultNnasSubDomain?; char[0x3] DefaultNnasNfsEnv;}
 +
|-
 +
| 0x2A
 +
| 0x8
 +
| [[ACTU:GetCommonInfo|GetCommonInfo]]
 +
| ?
 +
|-
 +
| 0x2B
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| FpLocalAccountId
 +
|-
 +
| 0x2C
 +
| 0x2
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| Age
 +
|-
 +
| 0x2D
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| IsEnabledReceiveAds
 +
|-
 +
| 0x2E
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| IsOffDeviceAccessEnabled
 +
|-
 +
| 0x2F
 +
| 0x4
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| [[Cfg:TranslateCountryInfo|Translated]] SimpleAddressId ([[Config_Savegame#CountryInfo|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-20|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 [[Cfg:GetSystemModel|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);"
 
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-20|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 [[Cfg:GetSystemModel|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==
+
== Trusted Root CAs ==
 
ACT module uses a [[HTTP_Services|RootCertChain]] for all HTTPS requests, the only trusted root CA is [[SSLC:RootCertChainAddDefaultCert|default]] CertID 0x3.
 
ACT module uses a [[HTTP_Services|RootCertChain]] for all HTTPS requests, the only trusted root CA is [[SSLC:RootCertChainAddDefaultCert|default]] CertID 0x3.
  
=New3DS=
+
= New3DS =
 
Even though ACT-sysmodule uses [[PTM_Services|ptm:s]], it doesn't use CheckNew3DS at all.
 
Even though ACT-sysmodule uses [[PTM_Services|ptm:s]], it doesn't use CheckNew3DS at all.

Latest revision as of 20:30, 2 March 2024


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.