Getting Started

This guide walks you through connecting your game to Real Rate — from creating an account to submitting your first game result via the API.

Overview

Real Rate tracks player ratings across competitive game titles. Your game submits results to our API; we handle Elo calculations, leaderboards, and player profiles. Integration requires only two API calls — one to register a player and one to submit a game result.

Create account & title
Generate API key
Register players
Submit games
Step 1

Create an Account

Go to the registration page and create a user account. This account is your management portal — it is separate from the API credentials your application will use.

Once registered you will be taken to the Manage page where you can create and configure titles.

Step 2

Create a Title

A title represents your game. From the Manage page, click New Title and fill in:

  • Name — the display name of your game.
  • Identifier — a short, URL-safe slug (e.g. my-game). This is used in every API call and cannot be changed later.
  • Game Types — the competitive modes you want to track separately (e.g. 1v1, team). Each game type maintains its own rating ladder. You can add more game types later from the title settings page.
💡 Players can exist across multiple game types in the same title. Each combination of player + game type has its own rating starting at 1000.
Step 3

Get an API Key

Open your title's settings page and scroll to API Clients. Enter a name for your client (e.g. Production Server) and click Generate Key.

You will be shown three values — copy them now, as the key cannot be retrieved again:

  • Client ID — the UUID that identifies your API client.
  • API Key — the secret credential for that client.
  • Authorization Header Value — the pre-built value to use directly in requests (see Step 4).

If a key is ever compromised, click Revoke next to it and generate a new one. Each title can have multiple API clients — useful for separating environments.

Step 4

Set Up Your Environment

All protected API endpoints require an Authorization header. The value is the Authorization Header Value copied from Step 3. Store it as an environment variable in your server:

# .env / server environment
REALRATE_AUTH=Basic <your-authorization-header-value>

Then include it in every API request:

# Example using curl
curl -X POST https://realrate.gg/player \
  -H "Authorization: $REALRATE_AUTH" \
  -H "Content-Type: application/json" \
  -d '{ "name": "PlayerOne", "title": "my-game" }'
Never expose your authorization header in client-side code. All Real Rate API calls should be made from your server.
Step 5

Register Players

Before submitting a game, every participant must be registered as a player in Real Rate. Call POST /player for each player in your game:

POST /player
Authorization: $REALRATE_AUTH
Content-Type: application/json

{
  "name": "PlayerOne",
  "title": "my-game"
}

The response includes the player's id — a UUID you will use when submitting games. There are two strategies for managing these IDs:

Let Real Rate generate IDs

Omit the id field when registering a player. Real Rate assigns a UUID and returns it. Persist this ID on your side to use in future game submissions.

// Request — no id field
{
  "name": "PlayerOne",
  "title": "my-game"
}

// Response — save this id
{
  "id": "3fa85f64-...",
  "name": "PlayerOne",
  "title": "my-game"
}
Provide your own IDs

If your game already has persistent UUIDs for players, pass them in the id field. Real Rate will use them, making it easy to correlate records without a separate lookup.

// Request — supply your own UUID
{
  "id": "your-existing-uuid",
  "name": "PlayerOne",
  "title": "my-game"
}

You only need to register a player once. Subsequent game submissions use the player ID directly — no re-registration required.

Step 6

Submit Games

After a match concludes, call POST /game to record the result and trigger rating updates:

1v1 match

POST /game
Authorization: $REALRATE_AUTH
Content-Type: application/json

{
  "id": "unique-game-uuid",
  "title": "my-game",
  "gameType": "1v1",
  "winner": "winner-player-uuid",
  "loser":  "loser-player-uuid"
}

Team match

POST /game
Authorization: $REALRATE_AUTH
Content-Type: application/json

{
  "id": "unique-game-uuid",
  "title": "my-game",
  "gameType": "team",
  "winners": ["player-uuid-1", "player-uuid-2"],
  "losers":  ["player-uuid-3", "player-uuid-4"]
}
FieldRequiredDescription
id Required A unique UUID for this game. Use the same UUID to prevent duplicate submissions.
title Required Your title identifier (e.g. my-game).
gameType Required The game type identifier (e.g. 1v1).
winner / loser 1v1 Single player UUIDs for 1v1 matches.
winners / losers Team Arrays of player UUIDs for team matches.

On success, the response includes each player's rating change. If a game ID is submitted twice, the request is rejected — use a deterministic UUID (e.g. derived from your internal match ID) to make retries safe.