Skip to content

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
  1. 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.

  2. 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.

  3. 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:

    1. In Creator Dashboard, open OAuth 2.0 Apps and create an app for your game.

    2. 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
    3. Allow the openid and profile scopes.

    4. 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.

  4. 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.

  5. 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.

  6. 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_key with the key as its value. Set its domain to api.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.

  7. The SDK is a ModuleScript named Rolink with two children, Http and Signal. It belongs in ServerScriptService, because it only runs on the server. Download it as a Roblox model file:

    Download Rolink.rbxmx

    In the Explorer, right-click ServerScriptService, choose Insert from File, and pick Rolink.rbxmx. The Rolink module appears under ServerScriptService, with Http and Signal inside it.

    To update the SDK later, download the file again. In Studio, delete the old Rolink before you insert the new one. With Rojo, replace the file.

  8. 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.

  9. 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 then
    print(`Rolink project {project.name} on {project.cluster}. Players link at {project.linkUrl}`)
    else
    warn(project) -- "[Rolink] <code>: <message> (HTTP <status>)"
    end
    local function check(player: Player)
    local found, result = pcall(rolink.GetWallet, rolink, player.UserId)
    if not found then
    warn(result)
    elseif result then
    print(`{player.Name} linked {result}`)
    else
    print(`{player.Name} has not linked a wallet`)
    end
    end
    Players.PlayerAdded:Connect(check)
    for _, player in Players:GetPlayers() do
    task.spawn(check, player)
    end

    Press 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 shows could 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.

  10. If the script prints something you don’t expect, call the API yourself. Every /v1 route needs the x-api-key header. GET /v1/project tells 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": null means that account hasn’t linked a wallet in this project. Check that you signed in on the linking page with the same Roblox account. A 401 unauthorized error means the key is mistyped or revoked.