Docs/APIs/Rock Paper Scissors

Rock Paper Scissors

Play Rock Paper Scissors game

OperationalCredits 1 per callp50 132msGamesStar

Overview

Perfect for building games, implementing random decision systems, or adding interactive elements to applications with emoji support and detailed results.

Endpoint

One host, one path per API. The block below shows this call in four languages; every one of them is the same HTTP request. Making requests covers the timeouts, retries and parameter rules that apply to all of them. The SDKs wrap the same call in a typed client.

GEThttps://api.apiverve.com/v1/rockpaperscissors
curl "https://api.apiverve.com/v1/rockpaperscissors?choice=rock&rounds=5" \
  -H "x-api-key: your_api_key_here"
const res = await fetch('https://api.apiverve.com/v1/rockpaperscissors?choice=rock&rounds=5', {
  headers: { 'x-api-key': 'your_api_key_here' },
});

if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);

const { data } = await res.json();
console.log(data);
import requests

res = requests.get(
    "https://api.apiverve.com/v1/rockpaperscissors?choice=rock&rounds=5",
    headers={"x-api-key": "your_api_key_here"},
    timeout=15,
)
res.raise_for_status()

print(res.json()["data"])
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://api.apiverve.com/v1/rockpaperscissors?choice=rock&rounds=5", nil)
	req.Header.Set("x-api-key", "your_api_key_here")

	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()

	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}

Replace your_api_key_here with the key from your dashboard. When the inputs arrive as a list rather than one at a time, batch requests run up to 200 of them through this same API in a single call.

Authentication

Send your key in the x-api-key header. That is the only auth step — there is no token exchange and no per-endpoint scope to configure. Authentication covers creating, rotating and revoking keys.

401 is the only auth verdict

A 401 means the key is missing, invalid or expired. A 403 means the key is valid but not permitted here — blocked by a key restriction or an IP allow-list. Running out of credits is a 429.

Parameters

Sent in the query string. Premium parameters are accepted on every plan but only take effect on plans that include them.

ParameterTypeDescription
choiceOptionalstringYour choice - omit for random
rockpaperscissorsrpsrandom
default random
roundsOptionalintegerNumber of rounds to play
default 1 · range 1–100

Response

Every API returns the same three top-level keys, so one response handler covers your whole integration: status, error and data. Only data changes shape. Response format covers the envelope, the other output formats and how premium fields are withheld.

Sample response
{
  "status": "ok",
  "error": null,
  "data": {
    "total_rounds": 5,
    "player_choice_mode": "manual",
    "games": [
      {
        "round": 1,
        "player_choice": "rock",
        "player_emoji": "🪨",
        "computer_choice": "paper",
        "computer_emoji": "📄",
        "outcome": "computer",
        "message": "Computer wins! undefined"
      },
      {
        "round": 2,
        "player_choice": "rock",
        "player_emoji": "🪨",
        "computer_choice": "rock",
        "computer_emoji": "🪨",
        "outcome": "tie",
        "message": "It's a tie! Both chose rock"
      },
      {
        "round": 3,
        "player_choice": "rock",
        "player_emoji": "🪨",
        "computer_choice": "rock",
        "computer_emoji": "🪨",
        "outcome": "tie",
        "message": "It's a tie! Both chose rock"
      },
      {
        "round": 4,
        "player_choice": "rock",
        "player_emoji": "🪨",
        "computer_choice": "paper",
        "computer_emoji": "📄",
        "outcome": "computer",
        "message": "Computer wins! undefined"
      },
      {
        "round": 5,
        "player_choice": "rock",
        "player_emoji": "🪨",
        "computer_choice": "scissors",
        "computer_emoji": "✂️",
        "outcome": "player",
        "message": "You win! Rock crushes scissors"
      }
    ],
    "results": {
      "player_wins": 1,
      "computer_wins": 2,
      "ties": 2,
      "player_win_percentage": 20,
      "computer_win_percentage": 40,
      "tie_percentage": 40
    },
    "overall_winner": "computer",
    "game_rules": {
      "rock_beats": "scissors",
      "paper_beats": "rock",
      "scissors_beats": "paper"
    }
  }
}

Response fields

Paths are relative to data. Premium fields are absent rather than zeroed on plans that do not include them, so check for presence instead of comparing to 0.

FieldTypeExampleDescription
total_roundsnumber5Total number of rounds played in the game
player_choice_modestring"manual"Mode of player selection: manual or random choice
gamesarray[5]Array of individual game rounds with details
roundnumber1Sequential round number in the game series
player_choicestring"rock"Player's hand choice: rock, paper, or scissors
player_emojistring"🪨"Emoji representation of player's choice
computer_choicestring"paper"Computer's hand choice: rock, paper, or scissors
computer_emojistring"📄"Emoji representation of computer's choice
outcomestring"computer"Round outcome: player, computer, or tie result
messagePremiumstring"Computer wins! undefined"Human-readable message describing round outcome
resultsobject{...}Statistical summary of all game rounds played
player_winsPremiumnumber1Count of rounds won by the player
computer_winsPremiumnumber2Count of rounds won by the computer
tiesPremiumnumber2Count of rounds resulting in a tie
player_win_percentagePremiumnumber20Percentage of rounds won by player
computer_win_percentagePremiumnumber40Percentage of rounds won by computer
tie_percentagePremiumnumber40Percentage of rounds resulting in tie
overall_winnerPremiumstring"computer"Overall game winner: player, computer, or tie
game_rulesobject{...}Object defining what each choice beats
rock_beatsstring"scissors"What rock beats in the game
paper_beatsstring"rock"What paper beats in the game
scissors_beatsstring"paper"What scissors beats in the game

Errors

Read the HTTP status first, then error for the specific reason. The body names the parameter that has to change. Error handling covers the full status list and which of them are worth retrying.

StatusMeaningWhat to do
400Input was rejectedRead error; it names the parameter.
401Key missing or invalidCheck the header name and the key value.
403Key valid, but not permittedA key restriction or IP allow-list; see key scoping.
429Rate limited, or out of creditsRead error to tell them apart; see rate limits.

Use cases

Game Development
Build Rock Paper Scissors game apps and interactive experiences with multi-round gameplay and statistics tracking
Decision Systems
Implement random decision-making systems using Rock Paper Scissors logic for conflict resolution and choice selection
Gaming Features
Create gaming features and tournaments with automated opponent moves, win/loss tracking, and performance analytics
Interactive Apps
Add interactive gaming elements to applications for user engagement and entertainment value

Other ways to use Rock Paper Scissors

Set up Rock Paper Scissors on APIVerve, or reach the same source a different way. Your APIVerve account and credits work on all of them — one key, one balance.

Give it to an AI agentConnect over MCP and your agent calls it as a native tool — Claude, Cursor, ChatGPT.VerveKitReference →

More in Games:

Was this page helpful?