Someone Ash Styles requested this API Mod script snippit in the Roll20 official discord and it seems better to give the code-snippint for copy-pasting from Roll20 Community Forums so I will re-share this here. This is a version where I made very slight modifications of a snippit The Aaron wrote and shared here long-ago. This is a way to detect when someone rolls a Natural 20 or a Natural 1, it shares a bold color-text message into the chat room. Maybe you can modify the code to do other celebrations. AnnounceNats.js AKA AnnouncRoll.js // Github: <a href="https://github.com/shdwjk/Roll20API/blob/master/AnnouncRoll/AnnouncRoll.js" rel="nofollow">https://github.com/shdwjk/Roll20API/blob/master/AnnouncRoll/AnnouncRoll.js</a> // By: The Aaron, Arcane Scriptomancer // Contact: <a href="https://app.roll20.net/users/104025/the-aaron" rel="nofollow">https://app.roll20.net/users/104025/the-aaron</a> var AnnounceRoll = AnnounceRoll || (function() { 'use strict'; var version = '0.2.2', lastUpdate = 1427604233, checkInstall = function() { log('-=> AnnounceRoll v'+version+' <=- ['+(new Date(lastUpdate*1000))+']'); }, handleInput = function(msg) { var rolldata,out=[]; if (msg.type !== "rollresult") { return; } rolldata = JSON.parse(msg.content); _.each(rolldata.rolls,function(r){ if('R' === r.type && 20 === r.sides) { _.each(r.results, function(roll){ switch(roll.v) { case 1: out.push('<div style="color: #009900;font-weight: bold">Nat 1.. What wizardry is this? (Narrative)</div>'); break; case 20: out.push('<div style="color: #009900;font-weight: bold">NATURAL 20! (Narrative opportunity)</div>'); break; } }); } }); if(out.length) { sendChat('',out.join('')); } }, registerEventHandlers = function() { on('chat:message', handleInput); }; return { CheckInstall: checkInstall, RegisterEventHandlers: registerEventHandlers }; }()); on('ready',function() { 'use strict'; AnnounceRoll.CheckInstall(); AnnounceRoll.RegisterEventHandlers(); });