Developer docs

Callback integration

Build the vote link your players click, then handle the request RSPS List sends your server after each confirmed vote. Two steps. Rewards fire automatically.

1
Build your vote link

When a player clicks Vote in your game client, redirect them here. Swap your-server for your listing slug and fill in the two parameters dynamically from your session.

URL
https://rspslist.com/server/your-server/vote/?callback=anything&username=Zezima
callbackstringrequired

Delivered to your callback endpoint exactly as you set it. Put whatever your game server needs here: a character name, a session token, or any other value your reward system uses to identify the voter.

usernamestringrequired

The player's in-game name. Must be included for the vote to count.

When username is in the vote link, the player lands directly on the vote page with their name pre-filled. Servers with at least 3 total votes also unlock the review and vouch system, so eligible players get the chance to leave feedback alongside their vote.

2
Handle the callback on your server

After a vote clears, RSPS List sends a GET request to the callback URL you entered in your listing settings. Grab your secret key from the dashboard before you go live.

Check secret first, then use callback to reward the voter, then return HTTP 200.

URL
GET https://yourdomain.com/vote?callback=anything&ip=1.2.3.4&secret=YOUR_SECRET
callbackstringoptional

The value you put in the vote link. Use it to look up and reward the player in your game.

ipstringoptional

The IP address of the voter. Handy for logging and spotting abuse.

secretstringrequired

Your private key from the dashboard. Reject every request where this does not match. It is the only thing proving the call came from RSPS List.

PHP
<?php
$secret = "YOUR_SECRET_KEY";

if (!isset($_GET['secret']) || $_GET['secret'] !== $secret) {
    http_response_code(403);
    exit("Unauthorized");
}

$player = $_GET['callback'] ?? 'unknown';
$ip     = $_GET['ip']       ?? 'unknown';

// give the player their in-game vote reward here
// giveReward($player);

http_response_code(200);
echo "ok";
?>
Node.js
import express from "express";

const app = express();
const SECRET = "YOUR_SECRET_KEY";

app.get("/vote", (req, res) => {
  const { callback, ip, secret } = req.query;

  if (secret !== SECRET) {
    return res.status(403).send("Unauthorized");
  }

  // give the player their in-game vote reward here
  console.log(`Vote from ${callback} (IP ${ip})`);

  res.status(200).send("ok");
});

app.listen(3000);
Java
@RestController
public class VoteCallbackController {

    private static final String SECRET = "YOUR_SECRET_KEY";

    @GetMapping("/vote")
    public ResponseEntity<String> onVote(
            @RequestParam String callback,
            @RequestParam String ip,
            @RequestParam String secret
    ) {
        if (!SECRET.equals(secret)) {
            return ResponseEntity.status(403).body("Unauthorized");
        }

        // give the player their in-game vote reward here
        System.out.println("Vote from " + callback);

        return ResponseEntity.ok("ok");
    }
}
3
Test before going live

Fire a test request from your terminal and confirm you get HTTP 200 back and your reward logic runs:

curl
curl "https://yourdomain.com/vote?callback=TestPlayer&ip=1.2.3.4&secret=YOUR_SECRET_KEY"
Always validate the secret before touching the player record
Use HTTPS only: plain HTTP exposes your secret in transit
Return HTTP 200 to confirm receipt or RSPS List may retry
Log every incoming request during initial setup
Handle duplicate requests gracefully (network retries happen)
One callback URL per server listing