regarding copying scripts, you can bump this to ask for feature: <a href="https://app.roll20.net/forum/post/2342853/api-scripts-copy-with-copy-game#post-6418713" rel="nofollow">https://app.roll20.net/forum/post/2342853/api-scripts-copy-with-copy-game#post-6418713</a> or you can bump this to allow us to write a *#$ @#@$ script copier ourselves: <a href="https://app.roll20.net/forum/post/6957027/internals-provide-a-url-to-trigger-scriptrestart-and-clearing-errorlock" rel="nofollow">https://app.roll20.net/forum/post/6957027/internals-provide-a-url-to-trigger-scriptrestart-and-clearing-errorlock</a> The second link is where I asked for resetting the script host to be a URL. I already have the code to upload scripts to a game, but I didn't bother to write a shrink wrapped tool, because it isn't worth it to me without reloading the scripts automatically too. If someone is interested in writing their own tool to download scripts and copy them to another game, you would need (currently) to do some parsing of HTML and use the URLs mentioned in the following: #!/bin/bash rm roll20*.cookies curl \ --verbose \ -c roll20.cookies \ -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \ -H 'Accept-Encoding: br, gzip, deflate' \ -H 'Host: app.roll20.net' \ -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15' \ -H 'Accept-Language: en-us' \ -d @login.txt \ -o roll20_login.respose <a href="https://app.roll20.net/sessions/create" rel="nofollow">https://app.roll20.net/sessions/create</a> \ --next \ --verbose \ -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \ -H 'Host: app.roll20.net' \ -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15' \ -H 'Accept-Language: en-us' \ -H 'Referer: <a href="https://app.roll20.net/sessions/create" rel="nofollow">https://app.roll20.net/sessions/create</a>' \ <a href="https://app.roll20.net/campaigns/save_script/3917794/313170" rel="nofollow">https://app.roll20.net/campaigns/save_script/3917794/313170</a> \ --data-urlencode 'name=script.js' \ --data-urlencode <a href="mailto:content@script.js" rel="nofollow">content@script.js</a> where: login.txt has your user name and password like email=your.name%40gmail.com&password=XXX script.js is the script text you want to upload 3917794 is the id of a room, which you can parse out of the html from the web page 313170 is the id of a script, which you can parse out of the html (it is part of the id of the tab where the script is stored) (but as I said, it won't actually load the scripts until you restart the script host.) Turns out the "restart the sandbox" is done via Firebase, so I am not gonna bother doing this. Uploading the script text is pretty easy though, as you can see above.