API:sendChat says You can also add a third parameter consisting of a callback function which will be passed the results of the sendChat() call instead of sending the commands to the game. The results of the sendChat command will be an ARRAY of operations, and each individual object will be just like an object you receive during a chat:message event (see above). You can use this, for example, to perform a roll using the Roll20 roll engine, then get the results of the roll immediately. You could then perform additional modifications to the roll before sending it to the players in the game. It says you can send the results on to the players, but I can't figure out how to do it! I am playing Earthdawn, and have an api script that accepts a step number and a target number. It translates the step number into dice, and uses sendChat to send them to be rolled. The results come back via a callback to be compared against the target number. What I want to do is take the result of the roll, display it just exactly like it normally does if I had not used a callback, but then add something such as "you succeeded" or "you failed". I have tried using sendChat to resend ops, opsp0[, ops[0].content, and Rollresult, but they all result in ether an error or gibberish. Is there something else I should be sending? I have come up with two workarounds, one is to not display the individual dice rolls with their fancy dice backgrounds, etc. and just say something like "you rolled a 15 and succeeded with one extra success" or "You rolled a 4 and Failed". This is not really what I wanted to do, but it is easy and it works. The other idea I have is to not have the roll come back via a callback, but have them just display as normal, but have my script monitoring for rollresults and when it sees a roll that looks right, compare it against the target number that it has been remembering. This seems clunky and a lot of work. But it seems like it ought not be this hard. Isn't there some way to simply tell it to display the rollResult exactly as it normally would if it had not been intercepted by a callback? Thanks sendChat(msg.who, rollMsg, function( ops ) { // This is a callback function that sendChat will callback as soon as it finishes rolling the dice. // NOTE THAT THIS IS THE START OF A CALLBACK FUNCTION log(ops[0]); var RollResult = JSON.parse(ops[0].content); log(RollResult.total); var result = RollResult.total - parseInt( textArray[4] ); // sendChat( ops[0].who, ops[0].content ); // Send the message we just intercepted to all the users. //sendChat( ops[0].who, RollResult ); sendChat( ops[0].who, "Rolled a " + RollResult.total); if( result < 0 ) { sendChat( msg.who, "FAILURE! Failed by " + (result * -1).toString() + "." ); } else if ( result < 5 ) { sendChat( msg.who, "SUCCESS!" );