OpenAPI schema for Memory Store Queue endpoints diverges from live API on three fields

The published Open Cloud OpenAPI schema (Roblox/creator-docs/content/en-us/reference/cloud/openapi.json, currently at commit 0cbea0571b465d97ce870109666d6435e1491449) describes three fields on the Memory Store Queue endpoints that do not match the running API at apis.roblox.com. A typed client generated or hand-written against the schema reads undefined from response bodies that the server actually populates under different keys, and accepts client-side request shapes that the server rejects with 400. Reproduced 2026-05-07.

Drift 1: dequeue response array key

GET /cloud/v2/universes/{universeId}/memory-store/queues/{queueId}/items:read returns the items array under key queueItems. The schema’s ReadMemoryStoreQueueItemsResponse.properties declares it under items.

Drift 2: dequeue response read-identifier key

The same response returns the read identifier under key id. The schema declares it under readId. This is the value the caller passes back to :discard to acknowledge the read, so the entire dequeue then discard flow breaks silently when the client is written against the schema.

Drift 3: data is server-required, schema marks it optional

POST /cloud/v2/universes/{universeId}/memory-store/queues/{queueId}/items rejects requests without a data field, and rejects data: null identically, with HTTP 400 {"error":"INVALID_ARGUMENT","message":"The required field 'data' is missing."}. The MemoryStoreQueueItem schema does not list data in a required array, so a generated client treats it as optional and only discovers the constraint at runtime.

Reproduction

const headers = { "x-api-key": "...", "content-type": "application/json" };
const base = "https://apis.roblox.com/cloud/v2/universes/{universeId}/memory-store/queues/{queueId}/items";

// Drift 3: server rejects missing data with 400
await fetch(base, { method: "POST", headers, body: JSON.stringify({ priority: 1 }) });

// Then enqueue a real item and dequeue it to observe drifts 1 and 2
await fetch(base, { method: "POST", headers, body: JSON.stringify({ data: "hello", priority: 1 }) });
const r = await fetch(`${base}:read?count=1`, { method: "GET", headers });
console.log(await r.text());
// observed: {"queueItems":[{...}],"id":"..."}
// per schema: {"items":[{...}],"readId":"..."}