Hello everyone! I am trying to create an API script that has the following functionality: When I have a token selected, I can click a macro that will run a script to search for handouts with a name similar to the token, and then reveal that handout to all players. Then, provide a feedback message if it was performed properly. I have had success with searching for and identifying handouts based on the token selected, but I cannot figure out how to change the visibility of a handout via API. I have seen some -really- old threads that state that this is not possible; is this still the case? Is there not a way to change the visibility of a handout via API? My current workaround is to match with a similar name, then whisper me a link to the handout which I can then click (I haven't been able to figure out how to have it just open either), and then click to reveal the handout. Below is my current working code. I will say, it does currently output all relevant handout names that it finds which is kind of helpful in the event it finds multiples that are similar. // API Script to Open Handout Based on Similar Selected Token Name (Whisper to GM) on("ready", function() { log("Open Handout by Similar Token Name script loaded."); on("chat:message", function(msg) { // Check if the command is from the API and is the correct command if (msg.type === "api" && msg.content.startsWith("!openHandout")) { var selectedTokens = getSelected(msg); if (selectedTokens.length === 0) { sendChat("System", "Please select a token."); return; } var tokenName = selectedTokens[0].get("name"); var handoutsFound = []; // Search for handouts with names similar to the token name findObjs({ type: "handout" }).forEach(function(handout) { // Check for a partial match (case insensitive) if (handout.get("name").toLowerCase().includes(tokenName.toLowerCase())) { handoutsFound.push(handout); // Add matching handout to the array } }); // Notify the GM with clickable links if (handoutsFound.length > 0) { handoutsFound.forEach(function(handout) { let handoutId = handout.id; sendChat("System", `/w gm You can view the handout here: [${handout.get("name")}](<a href="http://journal.roll20.net/handout/${handoutId})`" rel="nofollow">http://journal.roll20.net/handout/${handoutId})`</a>); }); } else { sendChat("System", `No handouts found with similar names to "${tokenName}".`); } } }); }); // Helper function to get selected tokens function getSelected(msg) { if (msg.selected) { return msg.selected.map(function(o) { return getObj("graphic", o._id); }).filter(function(obj) { return obj !== undefined; }); } return []; }