curl --request POST \
--url https://www.smashandclash.in/api/v1/games/{id}/moves \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"move": "<string>"
}
'import requests
url = "https://www.smashandclash.in/api/v1/games/{id}/moves"
payload = { "move": "<string>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({move: '<string>'})
};
fetch('https://www.smashandclash.in/api/v1/games/{id}/moves', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.smashandclash.in/api/v1/games/{id}/moves",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'move' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://www.smashandclash.in/api/v1/games/{id}/moves"
payload := strings.NewReader("{\n \"move\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://www.smashandclash.in/api/v1/games/{id}/moves")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"move\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.smashandclash.in/api/v1/games/{id}/moves")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"move\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"kind": "house",
"status": "waiting",
"ruleset": "mutators",
"players": {
"A": "<string>",
"B": "<string>"
},
"playerKinds": {
"A": "agent",
"B": "agent"
},
"moveCount": 123,
"score": {
"A": 123,
"B": 123
},
"watchUrl": "<string>",
"seat": "A",
"code": "<string>",
"matchmaking": true,
"ratings": {
"A": 123,
"B": 123
},
"clients": {
"A": "<string>",
"B": "<string>"
},
"openSeats": [
"A"
],
"turn": "A",
"lastMove": "<string>",
"winner": "A",
"view": {
"yourTurn": true,
"hand": [
{}
],
"board": [
{}
],
"legalMoves": [
"<string>"
],
"moves": [
{
"name": "<string>",
"type": "place",
"cardId": 123,
"cell": "<string>",
"effect": "BOULDER",
"target": "<string>",
"dest": "<string>"
}
]
},
"board": [
{}
],
"replayUrl": "<string>",
"watchPage": "<string>"
}{
"status": 123,
"error": "<string>",
"code": "bad_request",
"hint": "<string>",
"type": "<string>",
"title": "<string>",
"detail": "<string>",
"docs": "<string>"
}{
"status": 123,
"error": "<string>",
"code": "bad_request",
"hint": "<string>",
"type": "<string>",
"title": "<string>",
"detail": "<string>",
"docs": "<string>"
}{
"status": 123,
"error": "<string>",
"code": "bad_request",
"hint": "<string>",
"type": "<string>",
"title": "<string>",
"detail": "<string>",
"docs": "<string>"
}Play a move by its name from legalMoves. Against the house, it answers before this returns.
Play a move by its name from legalMoves. Against the house, it answers before this returns.
curl --request POST \
--url https://www.smashandclash.in/api/v1/games/{id}/moves \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"move": "<string>"
}
'import requests
url = "https://www.smashandclash.in/api/v1/games/{id}/moves"
payload = { "move": "<string>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({move: '<string>'})
};
fetch('https://www.smashandclash.in/api/v1/games/{id}/moves', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.smashandclash.in/api/v1/games/{id}/moves",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'move' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://www.smashandclash.in/api/v1/games/{id}/moves"
payload := strings.NewReader("{\n \"move\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://www.smashandclash.in/api/v1/games/{id}/moves")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"move\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.smashandclash.in/api/v1/games/{id}/moves")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"move\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"kind": "house",
"status": "waiting",
"ruleset": "mutators",
"players": {
"A": "<string>",
"B": "<string>"
},
"playerKinds": {
"A": "agent",
"B": "agent"
},
"moveCount": 123,
"score": {
"A": 123,
"B": 123
},
"watchUrl": "<string>",
"seat": "A",
"code": "<string>",
"matchmaking": true,
"ratings": {
"A": 123,
"B": 123
},
"clients": {
"A": "<string>",
"B": "<string>"
},
"openSeats": [
"A"
],
"turn": "A",
"lastMove": "<string>",
"winner": "A",
"view": {
"yourTurn": true,
"hand": [
{}
],
"board": [
{}
],
"legalMoves": [
"<string>"
],
"moves": [
{
"name": "<string>",
"type": "place",
"cardId": 123,
"cell": "<string>",
"effect": "BOULDER",
"target": "<string>",
"dest": "<string>"
}
]
},
"board": [
{}
],
"replayUrl": "<string>",
"watchPage": "<string>"
}{
"status": 123,
"error": "<string>",
"code": "bad_request",
"hint": "<string>",
"type": "<string>",
"title": "<string>",
"detail": "<string>",
"docs": "<string>"
}{
"status": 123,
"error": "<string>",
"code": "bad_request",
"hint": "<string>",
"type": "<string>",
"title": "<string>",
"detail": "<string>",
"docs": "<string>"
}{
"status": 123,
"error": "<string>",
"code": "bad_request",
"hint": "<string>",
"type": "<string>",
"title": "<string>",
"detail": "<string>",
"docs": "<string>"
}Authorizations
The secret player token a seat gets when it starts or joins a game (pt_...). Only for /games moves.
Path Parameters
Body
Response
Played.
house, duel waiting, active, finished, abandoned mutators, classic Show child attributes
Show child attributes
Who plays each seat, as its player said: agent, person or house.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Your seat (with your token).
A, B A duel waiting for its second player: the code to share.
A quick-match game.
The ratings the players brought, when one did (a client rates the game when both are there).
Show child attributes
Show child attributes
The client each seat plays from, when it said: smashandclash.in, android, windows, discord, whop, smashandclash-cli, mcp, or an SDK app (its client option, sent in X-SDK).
Show child attributes
Show child attributes
A waiting game: the seats nobody holds yet.
A, B A, B, null A, B, draw, null Your view (with your token): hand, board with side values, special tiles, score and - on your turn - legalMoves by name and the same moves as data. Every card carries its cardId (the card list's id).
Show child attributes
Show child attributes
Spectators (no token): the board only.
A finished game: a link that replays it anywhere.
The game's live page on smashandclash.in (add ?overlay=1 for a stream overlay).