Context
When working on automating data erasure requests on my external tool, I continued to run into issues with the “global” data store: My game is old, and I used to store data with the GetGlobalDataStore()
API, which results in some very odd storage situations. Obviously this is fine for most cases, since we don’t use this actively in production anymore. BUT, we need to support data erasure requests.
What works
I was able to get https://apis.roblox.com/cloud/v2/universes/204387960/data-stores/__global__3a0c3317-5845-4d63-bd11-1acc26b8a6c3-1/entries
to return this:
{
"dataStoreEntries": [{
"path": "universes/204387960/data-stores/__global__3a0c3317-5845-4d63-bd11-1acc26b8a6c3-1/entries/10_1000066653",
"id": "10_1000066653"
}, {
"path": "universes/204387960/data-stores/__global__3a0c3317-5845-4d63-bd11-1acc26b8a6c3-1/entries/10_1000126927",
"id": "10_1000126927"
}, {
"path": "universes/204387960/data-stores/__global__3a0c3317-5845-4d63-bd11-1acc26b8a6c3-1/entries/10_1000181361",
"id": "10_1000181361"
}, {
"path": "universes/204387960/data-stores/__global__3a0c3317-5845-4d63-bd11-1acc26b8a6c3-1/entries/10_1000254116",
"id": "10_1000254116"
}, {
"path": "universes/204387960/data-stores/__global__3a0c3317-5845-4d63-bd11-1acc26b8a6c3-1/entries/10_1000363760",
"id": "10_1000363760"
}, {
"path": "universes/204387960/data-stores/__global__3a0c3317-5845-4d63-bd11-1acc26b8a6c3-1/entries/10_100045080",
"id": "10_100045080"
}, {
"path": "universes/204387960/data-stores/__global__3a0c3317-5845-4d63-bd11-1acc26b8a6c3-1/entries/10_1000499454",
"id": "10_1000499454"
}, {
"path": "universes/204387960/data-stores/__global__3a0c3317-5845-4d63-bd11-1acc26b8a6c3-1/entries/10_1000519401",
"id": "10_1000519401"
}, {
"path": "universes/204387960/data-stores/__global__3a0c3317-5845-4d63-bd11-1acc26b8a6c3-1/entries/10_1000540798",
"id": "10_1000540798"
}, {
"path": "universes/204387960/data-stores/__global__3a0c3317-5845-4d63-bd11-1acc26b8a6c3-1/entries/10_1000546847",
"id": "10_1000546847"
}],
"nextPageToken": "0#u/10_1000546847"
}
Which exactly matches what I expected, confirming that this is, in fact, the correct datastore I’m attempting to reference. Here’s an example using a studio plugin to do essentially the same thing, but of course with in-studio APIs:
Where the issues start
Now, if I try to do anything beyond just listing the entries, I start to run into issues:
Attempting to retrieve one of the entries
When calling https://apis.roblox.com/cloud/v2/universes/204387960/data-stores/__global__3a0c3317-5845-4d63-bd11-1acc26b8a6c3-1/entries/10_1000066653
to retrieve information about the first entry, I get a 404:
{
"code": 5,
"message": "Entry not found."
}
Attempting to use a filter to find an entry
When calling https://apis.roblox.com/cloud/v2/universes/204387960/data-stores/__global__3a0c3317-5845-4d63-bd11-1acc26b8a6c3-1/entries?filter=id.startsWith("1Ban1_18247660")
, I get returned an empty table:
{}
which I know is incorrect, because my in-studio tooling is able to identify three keys that start with this string:
Even just trying to use a simple filter id that would match the results above doesn’t work - https://apis.roblox.com/cloud/v2/universes/204387960/data-stores/__global__3a0c3317-5845-4d63-bd11-1acc26b8a6c3-1/entries?filter=id.startsWith("10_")
:
{}
Conclusion
I think something is up with this datastore that may differ from other datastores. I’ve tested accessing entries of other datastores and haven’t run into any issues. Would love to coordinate and help provide any other additional information to help debug.
My end goal is to be able to call " Delete Data Store Entry" on entries in this global datastore so I can follow data erasure request procedures.