RuneTopic API » Integration / Documentation

Below we will show some examples of how to integrate RuneTopic's Voting & Store system into your RSPS using simple HTTP requests. This guide will help you set up reward handling based on replies from our API when checking for verified votes and donations. Keep in mind that the examples are mostly for logic/explanation and will require some editing to work with your source. If you need help, reach out in our discord server. API Last Updated: 3/11/25


Voting Rewards » Verify | Integrate

Use this Java class to check if a player has voted and process their rewards.

package runetopic.api;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import org.json.JSONObject;

import runetopic.model.entity.player.Player;

public class VoteChecker implements Runnable {
    private static final String SERVER_ID = "your_server_id";
    private static final String SERVER_API_KEY = "your_secret_api_key";
    private final Player player;

    public VoteChecker(Player player) {
        this.player = player;
    }

    @Override
    public void run() {
        try {
            String playerName = player.getDisplayName();
            String apiUrl = "https://www.runetopic.com/voting-callback?"
                    + "serverID=" + SERVER_ID + "&serverAPIKey=" + SERVER_API_KEY
                    + "&username=" + playerName;

            URL url = new URL(apiUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setRequestProperty("User-Agent", "Mozilla/5.0");

            int responseCode = conn.getResponseCode();
            if (responseCode == 200) {
                BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                StringBuilder response = new StringBuilder();
                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    response.append(inputLine);
                }
                in.close();

                JSONObject jsonResponse = new JSONObject(response.toString());

                if (jsonResponse.getBoolean("success")) {
                    player.sendMessage("Thank you for voting and supporting the server - Enjoy the rewards!");
                    player.getItems().addItem(995, 500000); // Example: 500K GP reward, etc.
                } else {
                    player.sendMessage("Oops! Looks like you have not voted yet.. Please vote, and try again.");
                }
            } else {
                player.sendMessage("Unable to check your vote status right now.. Try again shortly.");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
                            

Store / Donation » Check | Integrate

Use this Java class example to verify if a player has an unclaimed donation reward waiting to be claimed.

package runetopic.api;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import org.json.JSONObject;

import runetopic.model.entity.player.Player;

public class DonationChecker implements Runnable {
    private static final String SERVER_ID = "your_server_id";
    private static final String SERVER_API_KEY = "your_secret_api_key";
    private final Player player;

    public DonationChecker(Player player) {
        this.player = player;
    }

    @Override
    public void run() {
        try {
            String playerName = player.getDisplayName();
            String apiUrl = "https://www.runetopic.com/store-callback?"
                    + "serverID=" + SERVER_ID + "&serverAPIKey=" + SERVER_API_KEY
                    + "&username=" + playerName;

            URL url = new URL(apiUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setRequestProperty("User-Agent", "Mozilla/5.0");

            int responseCode = conn.getResponseCode();
            if (responseCode == 200) {
                BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                StringBuilder response = new StringBuilder();
                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    response.append(inputLine);
                }
                in.close();

                JSONObject jsonResponse = new JSONObject(response.toString());

                if (jsonResponse.getBoolean("success")) {
                    int itemID = jsonResponse.getInt("item_id");
                    int quantity = jsonResponse.getInt("quantity");
                    player.sendMessage("Thank you for your donation! Check your inventory/bank for the rewards.");
                    player.getInventory().addItem(itemID, quantity);
                } else {
                    player.sendMessage("No unclaimed donations found for your account.");
                }
            } else {
                player.sendMessage("Unable to check donation status.. Please try again later.");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
                            

Usage/Execution Exaple

  • To check if a player has properly voted, you can use:
  • new Thread(new VoteChecker(player)).start();
  • To check if a player has an unclaimed donation waiting to be claimed, use:
  • new Thread(new DonationChecker(player)).start();

Expected JSON Response


{
  "success": true,
  "message": "Vote verified",
  "item_id": 4151,
  "quantity": 1
}
                            

If no vote/donation result is found, then you should see something like this:

{ "success": false, "message": "No unclaimed votes found" }