state, most likely. It's a variable that API scripts can write to (and read from) that keeps its value between sessions. You could create a script that spits out the contents of state in one game and an API command to set state in another. Something like this: on('ready', function() { sendChat('API state', JSON.stringify(state)); }); on('chat:message', function(msg) { var parsedState; if(!playerIsGM(msg.playerid)) return; if (msg.content.indexOf('!setstate ') === 0) { try { parsedState = JSON.parse(msg.content.substring(10)); _.extend(state, parsedState); sendChat('System', 'state variable updated successfully!'); } catch(e) { sendChat('System', 'Could not parse state string'); sendChat('System', e.stack); } } }); Install the first script in the old campaign and the second script in the new campaign. The API will spit out the entire contents of the state variable to chat in the old campaign. Copy that (all of it!) and in the new campaign type "!setstate " and paste the text you copied. If you get a message that the state variable was updated, you're done. Note: the above scripts are untested. Note: depending on the scripts you have installed in the old campaign, the first script might spit out a considerable amount of text. In order for the second script to work, the text you give it must be a valid JSON string, and the easiest way to do that is to make sure you copy the entire output from the first script.