Extended protocols
The following games have additional methods in the datastore protocol:
- Animal Crossing: Happy Home Designer
- Miitopia (3DS)
- Pokemon Bank
- Pokemon (Generation 6)
- Pokemon (Generation 7)
- Real Escape Game
- Splatoon 2
- Super Mario Maker
- Super Mario Maker 2
- Super Mario Odyssey
- Super Smash Bros. 4
- Super Smash Bros. Ultimate
- Xenoblade Chronicles X
This remainder of this page describes the methods that are not specific to any game.
Methods
(1) PrepareGetObjectV1
Request
| Type | Name |
|---|---|
| DataStorePrepareGetParamV1 | param |
Response
| Type | Name |
|---|---|
| DataStoreReqGetInfoV1 | pReqGetInfo |
(2) PreparePostObjectV1
Request
| Type | Name |
|---|---|
| DataStorePreparePostParamV1 | param |
Response
| Type | Name |
|---|---|
| DataStoreReqPostInfoV1 | pReqPostInfo |
(3) CompletePostObjectV1
Request
| Type | Name |
|---|---|
| DataStoreCompletePostParamV1 | param |
Response
This method does not return anything.
(4) DeleteObject
Request
| Type | Name |
|---|---|
| DataStoreDeleteParam | param |
Response
This method does not return anything.
(5) DeleteObjects
Request
| Type | Name |
|---|---|
| List<DataStoreDeleteParam> | params |
| Bool | transactional |
Response
(6) ChangeMetaV1
Request
| Type | Name |
|---|---|
| DataStoreChangeMetaParamV1 | param |
Response
This method does not return anything.
(7) ChangeMetasV1
Request
| Type | Name |
|---|---|
| List<Uint64> | dataIds |
| List<DataStoreChangeMetaParamV1> | params |
| Bool | transactional |
Response
(8) GetMeta
Request
| Type | Name |
|---|---|
| DataStoreGetMetaParam | param |
Response
| Type | Name |
|---|---|
| DataStoreMetaInfo | pMetaInfo |
(9) GetMetas
Request
| Type | Name |
|---|---|
| List<Uint64> | dataIds |
| DataStoreGetMetaParam | param |
Response
| Type | Name |
|---|---|
| List<DataStoreMetaInfo> | pMetaInfo |
| List<Result> | pResults |
(10) PrepareUpdateObject
Request
| Type | Name |
|---|---|
| DataStorePrepareUpdateParam | param |
Response
| Type | Name |
|---|---|
| DataStoreReqUpdateInfo | pReqUpdateInfo |
(11) CompleteUpdateObject
Request
| Type | Name |
|---|---|
| DataStoreCompleteUpdateParam | param |
Response
This method does not return anything.
(12) SearchObject
Request
| Type | Name |
|---|---|
| DataStoreSearchParam | param |
Response
| Type | Name |
|---|---|
| DataStoreSearchResult | pSearchResult |
(13) GetNotificationUrl
Request
| Type | Name |
|---|---|
| DataStoreGetNotificationUrlParam | param |
Response
| Type | Name |
|---|---|
| DataStoreReqGetNotificationUrlInfo | info |
(14) GetNewArrivedNotificationsV1
Request
| Type | Name |
|---|---|
| DataStoreGetNewArrivedNotificationsParam | param |
Response
| Type | Name |
|---|---|
| List<DataStoreNotificationV1> | pResult |
| Bool | pHasNext |
(15) RateObject
Request
| Type | Name |
|---|---|
| DataStoreRatingTarget | target |
| DataStoreRateObjectParam | param |
| Bool | fetchRatings |
Response
| Type | Name |
|---|---|
| DataStoreRatingInfo | pRating |
(16) GetRating
Request
| Type | Name |
|---|---|
| DataStoreRatingTarget | target |
| Uint64 | accessPassword |
Response
| Type | Name |
|---|---|
| DataStoreRatingInfo | pRating |
(17) GetRatings
Request
| Type | Name |
|---|---|
| List<Uint64> | dataIds |
| Uint64 | accessPassword |
Response
| Type | Name |
|---|---|
| List<List<DataStoreRatingInfoWithSlot>> | pRatings |
| List<Result> | pResults |
(18) ResetRating
Request
| Type | Name |
|---|---|
| DataStoreRatingTarget | target |
| Uint64 | updatePassword |
Response
This method does not return anything.
(19) ResetRatings
Request
| Type | Name |
|---|---|
| List<Uint64> | dataIds |
| Bool | transactional |
Response
(20) GetSpecificMetaV1
Request
| Type | Name |
|---|---|
| DataStoreGetSpecificMetaParamV1 | param |
Response
| Type | Name |
|---|---|
| List<DataStoreSpecificMetaInfoV1> | pMetaInfos |
(21) PostMetaBinary
Request
| Type | Name |
|---|---|
| DataStorePreparePostParam | param |
Response
| Type | Name |
|---|---|
| Uint64 | dataId |
(22) TouchObject
Request
| Type | Name |
|---|---|
| DataStoreTouchObjectParam | param |
Response
This method does not return anything.
(23) GetRatingWithLog
Request
| Type | Name |
|---|---|
| DataStoreRatingTarget | target |
| Uint64 | accessPassword |
Response
| Type | Name |
|---|---|
| DataStoreRatingInfo | pRating |
| DataStoreRatingLog | pRatingLog |
(24) PreparePostObject
Request
| Type | Name |
|---|---|
| DataStorePreparePostParam | param |
Response
| Type | Name |
|---|---|
| DataStoreReqPostInfo | pReqPostInfo |
(25) PrepareGetObject
Request
| Type | Name |
|---|---|
| DataStorePrepareGetParam | param |
Response
| Type | Name |
|---|---|
| DataStoreReqGetInfo | pReqGetInfo |
(26) CompletePostObject
Request
| Type | Name |
|---|---|
| DataStoreCompletePostParam | param |
Response
This method does not return anything.
(27) GetNewArrivedNotifications
Request
| Type | Name |
|---|---|
| DataStoreGetNewArrivedNotificationsParam | param |
Response
| Type | Name |
|---|---|
| List<DataStoreNotification> | pResult |
| Bool | pHasNext |
(28) GetSpecificMeta
Request
| Type | Name |
|---|---|
| DataStoreGetSpecificMetaParam | param |
Response
| Type | Name |
|---|---|
| List<DataStoreSpecificMetaInfo> | pMetaInfos |
(29) GetPersistenceInfo
Request
| Type | Name |
|---|---|
| PID | ownerId |
| Uint16 | persistenceSlotId |
Response
| Type | Name |
|---|---|
| DataStorePersistenceInfo | pPersistenceInfo |
(30) GetPersistenceInfos
Request
Response
| Type | Name |
|---|---|
| List<DataStorePersistenceInfo> | pPersistenceInfo |
| List<Result> | pResults |
(31) PerpetuateObject
Request
| Type | Name |
|---|---|
| Uint16 | persistenceSlotId |
| Uint64 | dataId |
| Bool | deleteLastObject |
Response
This method does not return anything.
(32) UnperpetuateObject
Request
| Type | Name |
|---|---|
| Uint16 | persistenceSlotId |
| Bool | deleteLastObject |
Response
This method does not return anything.
(33) PrepareGetObjectOrMetaBinary
Request
| Type | Name |
|---|---|
| DataStorePrepareGetParam | param |
Response
| Type | Name |
|---|---|
| DataStoreReqGetInfo | pReqGetInfo |
| DataStoreReqGetAdditionalMeta | pReqGetAdditionalMeta |
(34) GetPasswordInfo
Request
| Type | Name |
|---|---|
| Uint64 | dataId |
Response
| Type | Name |
|---|---|
| DataStorePasswordInfo | pPasswordInfo |
(35) GetPasswordInfos
Request
| Type | Name |
|---|---|
| List<Uint64> | dataIds |
Response
| Type | Name |
|---|---|
| List<DataStorePasswordInfo> | pPasswordInfos |
| List<Result> | pResults |
(36) GetMetasMultipleParam
Request
| Type | Name |
|---|---|
| List<DataStoreGetMetaParam> | params |
Response
| Type | Name |
|---|---|
| List<DataStoreMetaInfo> | pMetaInfo |
| List<Result> | pResults |
(37) CompletePostObjects
Request
| Type | Name |
|---|---|
| List<Uint64> | dataIds |
Response
This method does not return anything.
(38) ChangeMeta
Request
| Type | Name |
|---|---|
| DataStoreChangeMetaParam | param |
Response
This method does not return anything.
(39) ChangeMetas
Request
| Type | Name |
|---|---|
| List<Uint64> | dataIds |
| List<DataStoreChangeMetaParam> | params |
| Bool | transactional |
Response
(40) RateObjects
Request
| Type | Name |
|---|---|
| List<DataStoreRatingTarget> | targets |
| List<DataStoreRateObjectParam> | params |
| Bool | transactional |
| Bool | fetchRatings |
Response
| Type | Name |
|---|---|
| List<DataStoreRatingInfo> | pRatings |
| List<Result> | pResults |
(41) PostMetaBinaryWithDataId
Request
| Type | Name |
|---|---|
| Uint64 | dataId |
| DataStorePreparePostParam | param |
Response
This method does not return anything.
(42) PostMetaBinariesWithDataId
Request
| Type | Name |
|---|---|
| List<Uint64> | dataIds |
| List<DataStorePreparePostParam> | params |
| Bool | transactional |
Response
(43) RateObjectWithPosting
Request
| Type | Name |
|---|---|
| DataStoreRatingTarget | target |
| DataStoreRateObjectParam | rateParam |
| DataStorePreparePostParam | postParam |
| Bool | fetchRatings |
Response
| Type | Name |
|---|---|
| DataStoreRatingInfo | pRating |
(44) RateObjectsWithPosting
Request
| Type | Name |
|---|---|
| List<DataStoreRatingTarget> | targets |
| List<DataStoreRateObjectParam> | rateParams |
| List<DataStorePreparePostParam> | postParams |
| Bool | transactional |
| Bool | fetchRatings |
Response
| Type | Name |
|---|---|
| List<DataStoreRatingInfo> | pRatings |
| List<Result> | pResults |
(45) GetObjectInfos
Request
| Type | Name |
|---|---|
| List<Uint64> | dataIds |
Response
| Type | Name |
|---|---|
| List<DataStoreReqGetInfo> | pInfos |
| List<Result> | pResults |
(46) SearchObjectLight
Request
| Type | Name |
|---|---|
| DataStoreSearchParam | param |
Response
| Type | Name |
|---|---|
| DataStoreSearchResult | pSearchResult |
Types
DataStorePrepareGetParamV1 (Structure)
| Type | Name |
|---|---|
| Uint32 | dataId |
| Uint32 | lockId |
DataStorePrepareGetParam (Structure)
| Type | Name |
|---|---|
| Uint64 | dataId |
| Uint32 | lockId |
| DataStorePersistenceTarget | persistenceTarget |
| Uint64 | accessPassword |
In NEX version 3.5, one more field was added:
DataStoreReqGetInfoV1 (Structure)
| Type | Name |
|---|---|
| String | url |
| List<DataStoreKeyValue> | requestHeaders |
| Uint32 | size |
| Buffer | rootCaCert |
DataStoreReqGetInfo (Structure)
| Type | Name |
|---|---|
| String | url |
| List<DataStoreKeyValue> | requestHeaders |
| Uint32 | size |
| Buffer | rootCaCert |
In NEX version 3.5, one more field was added:
| Type | Name |
|---|---|
| Uint64 | dataId |
DataStoreReqGetAdditionalMeta (Structure)
DataStorePreparePostParamV1 (Structure)
| Type | Name |
|---|---|
| Uint32 | size |
| String | name |
| Uint16 | dataType |
| qBuffer | metaBinary |
| DataStorePermission | permission |
| DataStorePermission | delPermission |
| Uint32 | flag |
| Uint16 | period |
| Uint32 | referDataId |
| List<String> | tags |
| List<DataStoreRatingInitParamWithSlot> | ratingInitParams |
DataStorePreparePostParam (Structure)
| Type | Name |
|---|---|
| Uint32 | size |
| String | name |
| Uint16 | dataType |
| qBuffer | metaBinary |
| DataStorePermission | permission |
| DataStorePermission | delPermission |
| Uint32 | flag |
| Uint16 | period |
| Uint32 | referDataId |
| List<String> | tags |
| List<DataStoreRatingInitParamWithSlot> | ratingInitParams |
| DataStorePersistenceInitParam | persistenceInitParam |
In NEX version 3.5, one more field was added:
DataStoreReqPostInfoV1 (Structure)
| Type | Name |
|---|---|
| Uint32 | dataId |
| String | url |
| List<DataStoreKeyValue> | requestHeaders |
| List<DataStoreKeyValue> | formFields |
| Buffer | rootCaCert |
DataStoreReqPostInfo (Structure)
| Type | Name |
|---|---|
| Uint64 | dataId |
| String | url |
| List<DataStoreKeyValue> | requestHeaders |
| List<DataStoreKeyValue> | formFields |
| Buffer | rootCaCert |
DataStoreCompletePostParamV1 (Structure)
| Type | Name |
|---|---|
| Uint32 | dataId |
| Bool | isSuccess |
DataStoreCompletePostParam (Structure)
| Type | Name |
|---|---|
| Uint64 | dataId |
| Bool | isSuccess |
DataStoreDeleteParam (Structure)
| Type | Name |
|---|---|
| Uint64 | dataId |
| Uint64 | updatePassword |
DataStoreChangeMetaParamV1 (Structure)
| Type | Name |
|---|---|
| Uint64 | dataId |
| Uint32 | modifiesFlag |
| String | name |
| DataStorePermission | permission |
| DataStorePermission | delPermission |
| Uint16 | period |
| qBuffer | metaBinary |
| List<String> | tags |
| Uint64 | updatePassword |
DataStoreChangeMetaParam (Structure)
| Type | Name |
|---|---|
| Uint64 | dataId |
| Uint32 | modifiesFlag |
| String | name |
| DataStorePermission | permission |
| DataStorePermission | delPermission |
| Uint16 | period |
| qBuffer | metaBinary |
| List<String> | tags |
| Uint64 | updatePassword |
| Uint32 | referredCnt |
| Uint16 | dataType |
| Uint8 | status |
| DataStoreChangeMetaCompareParam | compareParam |
Revision 1:
| Type | Name |
|---|---|
| DataStorePersistenceTarget | persistenceTarget |
DataStoreGetMetaParam (Structure)
| Type | Name |
|---|---|
| Uint64 | dataId |
| DataStorePersistenceTarget | persistenceTarget |
| Uint8 | resultOption |
| Uint64 | accessPassword |
DataStoreRatingInfo (Structure)
| Type | Name |
|---|---|
| Sint64 | totalValue |
| Uint32 | count |
| Sint64 | initialValue |
DataStoreRatingInfoWithSlot (Structure)
| Type | Name |
|---|---|
| Sint8 | slot |
| DataStoreRatingInfo | rating |
DataStoreMetaInfo (Structure)
| Type | Name |
|---|---|
| Uint64 | dataId |
| PID | ownerId |
| Uint32 | size |
| String | name |
| Uint16 | dataType |
| qBuffer | metaBinary |
| DataStorePermission | permission |
| DataStorePermission | delPermission |
| DateTime | createdTime |
| DateTime | updatedTime |
| Uint16 | period |
| Uint8 | status |
| Uint32 | referredCnt |
| Uint32 | referDataId |
| Uint32 | flag |
| DateTime | referredTime |
| DateTime | expireTime |
| List<String> | tags |
| List<DataStoreRatingInfoWithSlot> | ratings |
DataStorePrepareUpdateParam (Structure)
Up to NEX version 2.x, this structure looks as follows:
| Type | Name |
|---|---|
| Uint32 | dataId |
| Uint32 | size |
In NEX version 3.0, the data ID was set to a Uint64 and one more field was added:
| Type | Name |
|---|---|
| Uint64 | dataId |
| Uint32 | size |
| Uint64 | updatePassword |
In NEX version 3.5, one more field was added:
DataStoreReqUpdateInfo (Structure)
Up to NEX version 2.x, this structure looks as follows:
| Type | Name |
|---|---|
| Uint16 | version |
| String | url |
| List<DataStoreKeyValue> | requestHeaders |
| List<DataStoreKeyValue> | formFields |
| Buffer | rootCaCert |
In NEX version 3.0, the version was set to a Uint32:
| Type | Name |
|---|---|
| Uint32 | version |
| String | url |
| List<DataStoreKeyValue> | requestHeaders |
| List<DataStoreKeyValue> | formFields |
| Buffer | rootCaCert |
DataStoreCompleteUpdateParam (Structure)
Up to NEX version 2.x, this structure looks as follows:
| Type | Name |
|---|---|
| Uint32 | dataId |
| Uint16 | version |
| Bool | isSuccess |
In NEX version 3.0, the data ID was set to a Uint64 and the version was set to a Uint32:
| Type | Name |
|---|---|
| Uint64 | dataId |
| Uint32 | version |
| Bool | isSuccess |
DataStoreSearchParam (Structure)
| Type | Name |
|---|---|
| Uint8 | searchTarget |
| List<PID> | ownerIds |
| Uint8 | ownerType |
| List<PID> | destinationIds |
| Uint16 | dataType |
| DateTime | createdAfter |
| DateTime | createdBefore |
| DateTime | updatedAfter |
| DateTime | updatedBefore |
| Uint32 | referDataId |
| List<String> | tags |
| Uint8 | resultOrderColumn |
| Uint8 | resultOrder |
| ResultRange | resultRange |
| Uint8 | resultOption |
| Uint32 | minimalRatingFrequency |
Revision 1:
| Type | Name |
|---|---|
| Bool | useCache |
Revision 2:
| Type | Name |
|---|---|
| List<Uint16> | dataTypes |
In revision 3, a total count enabled field was added. Note that this field was inserted before the data types field:
| Type | Name |
|---|---|
| Uint8 | searchTarget |
| List<PID> | ownerIds |
| Uint8 | ownerType |
| List<PID> | destinationIds |
| Uint16 | dataType |
| DateTime | createdAfter |
| DateTime | createdBefore |
| DateTime | updatedAfter |
| DateTime | updatedBefore |
| Uint32 | referDataId |
| List<String> | tags |
| Uint8 | resultOrderColumn |
| Uint8 | resultOrder |
| ResultRange | resultRange |
| Uint8 | resultOption |
| Uint32 | minimalRatingFrequency |
| Bool | useCache |
| Bool | totalCountEnabled |
| List<Uint16> | dataTypes |
In NEX version 4.0, the revision number was set back to 0 with no other changes.
DataStoreSearchResult (Structure)
| Type | Name |
|---|---|
| Uint32 | totalCount |
| List<DataStoreMetaInfo> | result |
| Uint8 | totalCountType |
Total count types:
| Type | Description |
|---|---|
| 0 | Total number of results (if all results are returned) |
| 1 | Total number of results (if not all results are returned) |
| 3 | Disabled |
DataStoreGetNotificationUrlParam (Structure)
| Type | Name |
|---|---|
| String | previousUrl |
DataStoreReqGetNotificationUrlInfo (Structure)
DataStoreGetNewArrivedNotificationsParam (Structure)
| Type | Name |
|---|---|
| Uint64 | lastNotificationId |
| Uint16 | limit |
DataStoreNotificationV1 (Structure)
| Type | Name |
|---|---|
| Uint64 | notificationId |
| Uint32 | dataId |
DataStoreNotification (Structure)
| Type | Name |
|---|---|
| Uint64 | notificationId |
| Uint64 | dataId |
DataStoreRateObjectParam (Structure)
| Type | Name |
|---|---|
| Sint32 | ratingValue |
| Uint64 | accessPassword |
DataStoreRatingTarget (Structure)
| Type | Name |
|---|---|
| Uint64 | dataId |
| Sint8 | slot |
DataStoreGetSpecificMetaParamV1 (Structure)
| Type | Name |
|---|---|
| List<Uint32> | dataIds |
DataStoreGetSpecificMetaParam (Structure)
| Type | Name |
|---|---|
| List<Uint64> | dataIds |
DataStoreSpecificMetaInfoV1 (Structure)
| Type | Name |
|---|---|
| Uint32 | dataId |
| PID | ownerId |
| Uint32 | size |
| Uint16 | dataType |
| Uint16 | version |
DataStoreSpecificMetaInfo (Structure)
| Type | Name |
|---|---|
| Uint64 | dataId |
| PID | ownerId |
| Uint32 | size |
| Uint16 | dataType |
| Uint32 | version |
DataStoreTouchObjectParam (Structure)
| Type | Name |
|---|---|
| Uint64 | dataId |
| Uint32 | lockId |
| Uint64 | accessPassword |
DataStoreRatingLog (Structure)
DataStorePersistenceInfo (Structure)
| Type | Name |
|---|---|
| PID | ownerId |
| Uint16 | persistenceSlotId |
| Uint64 | dataId |
DataStorePasswordInfo (Structure)
| Type | Name |
|---|---|
| Uint64 | dataId |
| Uint64 | accessPassword |
| Uint64 | updatePassword |
DataStorePersistenceTarget (Structure)
| Type | Name |
|---|---|
| PID | ownerId |
| Uint16 | persistenceSlotId |
DataStoreKeyValue (Structure)
DataStorePermission (Structure)
Permission types:
| Value | Description |
|---|---|
| 0 | Everyone |
| 1 | Friends |
| 2 | Recipient IDs |
| 3 | Owner only |
DataStoreRatingInitParamWithSlot (Structure)
| Type | Name |
|---|---|
| Sint8 | slot |
| DataStoreRatingInitParam | param |
DataStorePersistenceInitParam (Structure)
| Type | Name |
|---|---|
| Uint16 | persistenceSlotId |
| Bool | deleteLastObject |
DataStoreChangeMetaCompareParam (Structure)
| Type | Name |
|---|---|
| Uint32 | comparisonFlag |
| String | name |
| DataStorePermission | permission |
| DataStorePermission | delPermission |
| Uint16 | period |
| qBuffer | metaBinary |
| List<String> | tags |
| Uint32 | referredCnt |
| Uint16 | dataType |
| Uint8 | status |
DataStoreRatingInitParam (Structure)
| Type | Name |
|---|---|
| Uint8 | flag |
| Uint8 | internalFlag |
| Uint8 | lockType |
| Sint64 | initialValue |
| Sint32 | rangeMin |
| Sint32 | rangeMax |
| Sint8 | periodHour |
| Sint16 | periodDuration |
Result options
In DataStore resultOption is a set of flags which determine what extra data gets returned when requesting an objects metadata. The following flags are used
| Flag | Description |
|---|---|
0x1 | Populate the objects tags field |
0x2 | Populate the objects ratings field |
0x4 | Populate the objects metaBinary field |
Modifies flag
In DataStore modifiesFlag is a set of flags which determine what data gets updated when changing an objects metadata. The following flags are used. None of these changes update the objects updatedTime field besides flag 0x40, which updates the S3 object itself. updatedTime likely refers to only the object, then, and not the metadata.
| Flag | Description |
|---|---|
0x001 | Update objects name field |
0x002 | Update objects access permission field |
0x004 | Update objects delete permission field |
0x008 | Update objects period field |
0x010 | Update objects metaBinary field |
0x020 | Update objects tags field. Replaced, not appended |
0x040 | Refresh objects expire time using the period field. If also using flag 0x8, this uses the NEW period |
0x080 | Update objects name field |
0x100 | Update objects referredCnt field. Set, not added |
0x200 | Update objects status field. Anything besides 0 seems to result in DataStore::NotFound on future requests |
Period
DataStore objects are really just S3 objects. The period field of an object is the number of days the object is valid for before it expires and is deleted from S3. Objects can be “refreshed” to update their expire time, which also updates the objects updatedTime field. Not all games respect this value, however, and will either set their own expire time or never expire objects even if a period is set for them.