Quickstart
This guide takes you from an empty project to a server script that prints your own linked wallet address. Everything runs against Solana devnet, so no real funds are involved.
You need:
- A Roblox account and an experience you can edit in Roblox Studio
- A Solana browser wallet that can sign messages, such as Phantom, Solflare or Backpack. You sign in to the dashboard with it, and link it to your Roblox account in step 8. It needs no funds.
- Rojo, only if you manage your game’s code with it
-
Sign in to the dashboard
Section titled “Sign in to the dashboard”Open the Rolink dashboard and choose your wallet from the detected wallets. Approve the sign-in message in your wallet. Signing is free and doesn’t send a transaction.
Your wallet address is your Rolink account, so sign in with the same wallet next time. Your dashboard session lasts 12 hours.
-
Create a project
Section titled “Create a project”Create one project per Roblox experience. Fill in:
- Project name. Players see it on the linking page and in the message their wallet asks them to sign.
- Solana cluster. Choose Devnet for this guide. The cluster can’t be changed later, so you’ll create a separate mainnet project when you launch.
Rolink gives the project a slug based on its name, such as
my-roblox-game. The slug is part of your linking page’s address. During the beta, each developer can have up to 5 projects. -
Set up Roblox sign-in
Section titled “Set up Roblox sign-in”Players sign in with Roblox on your linking page through your game’s own Roblox OAuth app. Rolink has no Roblox app of its own, so you create one under your name:
-
In Creator Dashboard, open OAuth 2.0 Apps and create an app for your game.
-
Add this redirect URL. It’s the same for every game, and your project’s Settings page shows it with a copy button:
https://api.rolink.tech/auth/roblox/callback -
Allow the
openidandprofilescopes. -
Back in the Rolink dashboard, open your project’s Settings, then Roblox sign-in. Paste the app’s client ID and client secret, and choose Save. The card shows on once both are saved.
Rolink stores the secret encrypted and never shows it again. Until Roblox reviews your app, it works for up to 10 users, which is enough to test. Get it reviewed before you send players to your linking page. Link wallets explains what players see.
-
-
Create an API key
Section titled “Create an API key”Open the project’s API keys page, give the key a name (for example “Studio”), and choose Create key. Copy the key right away. It starts with
rlk_live_, and Rolink keeps only a hash of it, so it can’t be shown again. If you lose it, create another and revoke the old one. -
Allow HTTP requests
Section titled “Allow HTTP requests”In Studio, open File > Experience Settings > Security and turn on Allow HTTP Requests. The SDK reaches Rolink through
HttpService. If the setting is unavailable, publish the place first. -
Store the key as a Secret
Section titled “Store the key as a Secret”Keep the key in a Roblox Secret, never in a script.
- For live servers, open your experience in Creator Dashboard, go to Secrets, and create a secret named
rolink_api_keywith the key as its value. Set its domain toapi.rolink.tech, so the secret can only be sent to Rolink. - For Studio, add the same secret under File > Experience Settings > Security > Local Secrets. Studio sessions use Local Secrets, not the ones in Creator Dashboard.
Set up Roblox explains both in more detail.
- For live servers, open your experience in Creator Dashboard, go to Secrets, and create a secret named
-
Add the SDK to your place
Section titled “Add the SDK to your place”The SDK is a ModuleScript named
Download Rolink.rbxmxRolinkwith two children,HttpandSignal. It belongs inServerScriptService, because it only runs on the server. Download it as a Roblox model file:In the Explorer, right-click
ServerScriptService, choose Insert from File, and pickRolink.rbxmx. TheRolinkmodule appears underServerScriptService, withHttpandSignalinside it.Put
Rolink.rbxmxin your Rojo project and point an entry underServerScriptServiceat it. Rojo syncs the model file as theRolinkmodule with its children.default.project.json {"name": "my-game","tree": {"$className": "DataModel","ServerScriptService": {"Rolink": { "$path": "Rolink.rbxmx" }}}}To update the SDK later, download the file again. In Studio, delete the old
Rolinkbefore you insert the new one. With Rojo, replace the file. -
Link your own wallet
Section titled “Link your own wallet”Every project has a hosted linking page. Open the project’s Overview page in the dashboard and copy the URL under Linking page. It looks like this:
https://api.rolink.tech/link/<project-slug>Open it in the browser where your wallet is installed. Choose Continue with Roblox and sign in with the account you use in Studio, so the script in the next step finds your wallet. Roblox’s consent screen shows the app you created in step 3. Then choose your wallet, connect it, and sign the message. Signing is free and doesn’t send a transaction.
If the page says “This game hasn’t set up Roblox sign-in yet.”, the client ID or secret from step 3 isn’t saved.
This is the page your players will use. Link wallets describes what they see and sign.
-
Read the wallet from a server script
Section titled “Read the wallet from a server script”Add a Script to
ServerScriptService:ServerScriptService/WalletCheck.server.luau local HttpService = game:GetService("HttpService")local Players = game:GetService("Players")local ServerScriptService = game:GetService("ServerScriptService")local Rolink = require(ServerScriptService.Rolink)local rolink = Rolink.new({apiKey = HttpService:GetSecret("rolink_api_key"),})-- Checks the key and shows which project it belongs to.local ok, project = pcall(rolink.GetProject, rolink)if ok thenprint(`Rolink project {project.name} on {project.cluster}. Players link at {project.linkUrl}`)elsewarn(project) -- "[Rolink] <code>: <message> (HTTP <status>)"endlocal function check(player: Player)local found, result = pcall(rolink.GetWallet, rolink, player.UserId)if not found thenwarn(result)elseif result thenprint(`{player.Name} linked {result}`)elseprint(`{player.Name} has not linked a wallet`)endendPlayers.PlayerAdded:Connect(check)for _, player in Players:GetPlayers() dotask.spawn(check, player)endPress Play. The Output window shows your project and the address you linked in step 8.
SDK methods yield and raise on failure, so wrap them in
pcall. If Output also showscould not subscribe to topic "rolink", live events aren’t reaching this session, but wallet lookups and reads still work. Live events are optional, and you turn them on in the dashboard as described in Live events. -
Check the API directly
Section titled “Check the API directly”If the script prints something you don’t expect, call the API yourself. Every
/v1route needs thex-api-keyheader.GET /v1/projecttells you which project a key belongs to:Terminal window curl -H "x-api-key: <your API key>" https://api.rolink.tech/v1/project{"id": "prj_…","name": "My Roblox Game","slug": "my-roblox-game","cluster": "devnet","walletAddress": null,"linkUrl": "https://api.rolink.tech/link/my-roblox-game","events": false}To see what Rolink has stored for your account, ask for your wallet with your Roblox user ID. It’s the number in your profile URL,
roblox.com/users/<id>/profile.Terminal window curl -H "x-api-key: <your API key>" https://api.rolink.tech/v1/players/<your user ID>/wallet{ "userId": 123456789, "address": "9xQe…", "linkedAt": 1767225600000 }"address": nullmeans that account hasn’t linked a wallet in this project. Check that you signed in on the linking page with the same Roblox account. A401 unauthorizederror means the key is mistyped or revoked.
Next steps
Section titled “Next steps”- Set up Roblox for live servers and live events.
- Dashboard and projects to see everything a project controls.
- Read on-chain data to show balances and check NFT ownership.
- Send transactions from your project’s managed wallet, within limits you set.
