# romcp data-store read preview

`roblox_read_data_store` performs one exact Open Cloud GET without needing a Studio connection. Configure the Open Cloud key in the romcp settings UI or environment with `universe-datastores.objects:read` permission for the requested universe.

Example input (replace the universe and key with your explicit target):

```json
{
  "universeId": 123,
  "dataStore": "PlayerData",
  "scope": "global",
  "key": "Player_42",
  "fields": [
    ["Receipts", "purchase-id"],
    ["Inventory", "0"]
  ]
}
```

Fields are arrays of literal property names; array indexes use zero-based strings. A missing field returns `found: false`, distinct from stored `false` or `null`. Only selected values, target, state, and available revision metadata reach the tool response. Tagged nonfinite numbers remain unchanged. No save data is persisted by this service.

The read has a 20-second timeout, an 8 MiB streamed input limit, a 64 KiB selected result limit, and no automatic retries or redirects. Identifiers containing `@`, control characters, or exact dot segments are currently unsupported. Historical revisions, lists, writes, and receipt adapters are not implemented in this preview.

The same operation is available at `POST /v1/cloud/data-stores/read` on the opt-in local developer API, using its separate bearer token. It requires no Studio connection. The SDK exports `DataStoreRead` and `DataStoreResult` and exposes:

```ts
import { createClient } from 'dominus-cli/sdk';
const romcp = createClient({
  baseUrl: 'http://127.0.0.1:18089/v1',
  token: process.env.DOMINUS_API_TOKEN!,
  timeoutMs: 30000,
});
const result = await romcp.dataStores.read({
  universeId: 123,
  dataStore: 'PlayerData',
  scope: 'global',
  key: 'Player_42',
  fields: [['Receipts', 'purchase-id']],
});
```

Keep the Open Cloud key configured in the romcp server. Never send it as the API token. Public API cloud failures use `CLOUD_ERROR` with HTTP 502 and a sanitized explanation; a Roblox 404 remains inconclusive purchase evidence. Invalid request schemas use `INVALID_REQUEST` with HTTP 400. The published package name remains `dominus-cli` during the branding transition.

Saved data is evidence from the game's own schema, not platform transaction history. Missing records, missing entries, and permission failures do not establish whether a purchase occurred. A receipt-verification feature must understand how the game records and fulfills receipts.

Contract checked against the [official Roblox OpenAPI schema](https://raw.githubusercontent.com/Roblox/creator-docs/main/content/en-us/reference/cloud/cloud.docs.json) and [data-store guide](https://create.roblox.com/docs/cloud/guides/data-stores). Validation uses synthetic responses; no live player data was read.
