...phew , that was a long title, but I figured completeness was important. This is a possible underlying Roll20 bug that I found while troubleshooting an issue I found on the official Blades in the Dark sheet (that bug report is here ). The repetition steps from that thread that seem to be a general problem are: GM and at least one player belong to and are logged into a campaign. The character sheet for this campaign has an event listener for sheet:opened, and the callback for that listener calls getAttrs for some arbitrary attributes (ex: version and character_sheet ), and console.log s them out. GM makes a character, adds it to All Players' journals, gives All Players edit access. GM sets values on the sheet for the Attributes & Abilities that the sheet:opened listener tries to fetch. GM closes and reopens the character (not sure if this is necessary, but I've been doing it). (crucially) at least one player does not open the character sheet. GM opens the character to the character sheet and hits Show to Players. Result: the console.log statement inside the listener will show undefined values for the attributes it fetches. There may be other ways to reproduce; I haven't tried every possible permutation of it. My guess is that there's an async issue, in which, when a player opens a sheet themselves, Roll20 fires off the sheet:opened event only after waiting to fetch attributes from the server, but that wait doesn't happen when Show to Players happens.