Skip to main content
Prerequisites
  • API Key — contact your PlayWave operations representative to request one
  • PlayWave Launcher (Dev build) — request a dev build from your PlayWave operations representative for testing
  • Roblox Studio installed

Step 1 — Allow HTTP Requests

1

Open Experience Settings

In Roblox Studio, go to File → Experience Settings.
Roblox Studio File menu with Experience Settings highlighted
2

Enable HTTP Requests

Click Security in the left menu, then toggle Allow HTTP Requests on.
Experience Settings Security tab with Allow HTTP Requests toggled on

Step 2 — Install the PlayWave plugin

1

Open the Toolbox

Click Toolbox in the top-right corner of Roblox Studio. In the Toolbox panel, switch to the Plugins tab and search for playwave.
Roblox Studio Toolbox searching for PlayWave plugin
2

Install & Update

Click the PlayWave plugin, then click Install.
PlayWave plugin detail page with Install button

Step 3 — Run PlayWave Setup

1

Open the Plugins menu

Click the Plugins tab in the top menu bar. You should see the PlayWave Setup button.
Roblox Studio Plugins tab showing PlayWave Setup button
2

Configure and install

Click PlayWave Setup. Enter your API Key, select the Environment, then click Install.
EnvironmentStatus
DevAvailable
QAComing soon
LiveComing soon
PlayWave Settings dialog with API Key field and environment selection

Step 4 — Verify the installed scripts

After installation, the following scripts are automatically created:
Roblox Studio Explorer showing PlayWaveSetup and PlayWaveClient scripts
ServerScriptService
PlayWaveSetup
ApiKey (StringValue)
ApiUrl (StringValue)
PlayWaveServer (ModuleScript)
StarterPlayer
StarterPlayerScripts
PlayWaveClient (LocalScript)

Step 5 — Write callback functions

PlayWaveSetup (Server)

The server script initializes PlayWave and defines the onPcCafe callback. This callback runs when a PC cafe user is verified.
local PlayWaveServer = require(script.PlayWaveServer)

local apiKey = script:WaitForChild("ApiKey").Value
local apiUrl = script:WaitForChild("ApiUrl").Value

PlayWaveServer.init({
    apiKey = apiKey,
    apiUrl = apiUrl,

    onPcCafe = function(player)
        -- Grant PC cafe benefits here (XP boost, items, coins, etc.)
        print("[PlayWave] PC cafe benefit granted:", player.Name)
    end,

    -- Optional: fires once per player when verification ends, regardless of cafe status
    onVerified = function(player, isPcCafe, reason)
        print("[PlayWave] Verified:", player.Name, isPcCafe, reason)
    end,
})
onPcCafe only fires for PC cafe users. If you also need a signal for non-cafe players (e.g. to dismiss a loading state), use onVerified — it fires exactly once per player. See the onVerified callback guide for details.

PlayWaveClient (Client)

The client script sends a ready signal and listens for benefit events.
local ReplicatedStorage = game:GetService("ReplicatedStorage")

local evFolder         = ReplicatedStorage:WaitForChild("PlayWaveEvents", 30)
local clientReadyEvent = evFolder and evFolder:WaitForChild("PlayWaveClientReady", 30)

if clientReadyEvent then
    clientReadyEvent:FireServer()
else
    warn("[PlayWave] PlayWaveClientReady event not found.")
end

local benefitEvent = evFolder and evFolder:WaitForChild("PlayWaveBenefit", 30)
if benefitEvent then
    benefitEvent.OnClientEvent:Connect(function(benefitType)
        if benefitType == "PC_CAFE" then
            -- Handle PC cafe benefit on client (e.g., show UI notification)
        end
    end)
end
The onPcCafe callback on the server is where you grant gameplay benefits (XP boost, items, etc.). The PlayWaveBenefit event on the client is for UI notifications only.

Step 6 — Test

1

Test in Roblox Studio

Press Play to test locally. Since there’s no LaunchData, it will connect as a normal user without OTT.
2

Test with PlayWave Launcher

Launch the game through the PlayWave launcher — LaunchData will contain the OTT. Check the verification logs in the Output console.
Users who connect without the PlayWave launcher won’t have an OTT, so verification is skipped. They can still play the game normally without PC cafe benefits.

Teleport integration (multi-Place) Important

For multi-Place Experiences, billing will not apply after moving to a SubPlace without teleport integration, which can result in revenue loss.
In Experiences that use a Lobby Place to teleport players into SubPlaces, PlayWave authentication is lost during the transition. You must include session data in TeleportOptions to maintain authentication.
1

Update to the latest plugin

Install the latest PlayWave plugin from the Toolbox, then click Install SDK to update the scripts.
Clicking Install SDK will reset existing callback scripts. Back up your code before proceeding.
2

Install PlayWave SDK on each Place

PlayWave SDK must be installed on every SubPlace that is a teleport destination.
3

Modify the teleport logic

Update your teleport code to include PlayWave session data in TeleportOptions.
-- ServerScriptService/TeleportHandler (Script Example)
local Players = game:GetService("Players")
local TeleportService = game:GetService("TeleportService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")

local SUB_PLACE_ID = 130143450994652

local PlayWaveServer = require(
    game:GetService("ServerScriptService")
        :WaitForChild("PlayWaveSetup")
        :WaitForChild("PlayWaveServer")
)

local teleportEvent = Instance.new("RemoteEvent")
teleportEvent.Name = "RequestTeleport"
teleportEvent.Parent = ReplicatedStorage

teleportEvent.OnServerEvent:Connect(function(player)
    local teleportOptions = Instance.new("TeleportOptions")
    PlayWaveServer.prepareForTeleport(player, teleportOptions)
    TeleportService:TeleportAsync(SUB_PLACE_ID, {player}, teleportOptions)
end)
For a detailed guide on teleport integration, see Teleport integration guide.

Next steps

Session lifecycle

Understand how sessions, heartbeats, and termination work.

Manual setup

Set up PlayWave manually without the plugin.