SisyFox GmbH · Customer Documentation
Version 1.2.1 · June 2026
The SisyFox Park Score Reporting system allows your park management software (e.g. Jumpilot) to receive live game scores from our attraction devices in real time.
We support two integration modes that can be used independently or in combination:
| Mode | Description |
|---|---|
| Post To Park | Our device actively pushes score data to your server via HTTP POST |
| Expose Endpoint | Our device exposes an HTTP endpoint that your server polls on a schedule |
The system is game-agnostic and works across all SisyFox attractions (Jumplings, FoxBall, etc.).
Our device sends score data to an endpoint on your server. You provide us with the URL and credentials, and we configure the device accordingly.
SisyFox Device ──POST──▶ https://your-server.com/api/attractions/points
Details:
Post Trigger Options:
| Option | Behavior | Recommended for |
|---|---|---|
OnStatusChange |
One POST is sent each time the game status changes (idle → playing → completed) |
Production |
Interval |
A POST is sent at a fixed interval regardless of status changes | Debugging / heartbeat |
Our device runs a lightweight HTTP server that your system can poll at any interval you choose.
Your Server ──GET──▶ http://<device-ip>:8080/points
Details:
8080)Both modes run simultaneously. This is useful during initial integration and testing, or if you prefer redundancy in production.
Both integration modes use the same JSON format — an array containing one entry per active player.
[
{
"deviceID": "jumplings-1",
"gameID": "Ninja Jump",
"roundID": "20260506_103319_734639760",
"playerID": 0,
"points": 12.50,
"rating": 1.00,
"status": "completed",
"timestamp": "2026-05-06T08:34:18.963Z"
},
{
"deviceID": "jumplings-1",
"gameID": "Ninja Jump",
"roundID": "20260506_103319_734639760",
"playerID": 1,
"points": 8.00,
"rating": 0.75,
"status": "completed",
"timestamp": "2026-05-06T08:34:18.963Z"
}
]
| Field | Type | Description |
|---|---|---|
deviceID |
String | Unique identifier of the attraction device |
gameID |
String | Name of the current game or mini-game |
roundID |
String | Unique ID of the current round — format: YYYYMMDD_HHMMSS_<random> |
playerID |
Int | Player slot index, zero-based |
points |
Float | Player score for the current round (see behavior below) |
rating |
Float | Player rating for the current round (see behavior below) |
status |
String | Current game status: idle, playing, or completed |
timestamp |
String | ISO-8601 UTC timestamp of when the data was generated |
| Status | Meaning |
|---|---|
idle |
No active session — the attraction is in attract mode or between rounds |
playing |
A round is currently in progress |
completed |
The round has ended and final scores are available |
The points and rating fields use -1.00 as a sentinel value to signal that no valid data is available yet. Your server should treat any negative value as "not yet final" and not persist it.
Points:
| Status | Value | Meaning |
|---|---|---|
idle |
-1.00 |
No active round |
playing |
-1.00 |
Round in progress, scores not final |
completed |
Actual value, e.g. 12.50 |
Final score for a real player |
completed |
-1.00 |
Player slot was not occupied by a real player (e.g. bot) |
Rating:
| Status | Value | Meaning |
|---|---|---|
idle |
-1.00 |
No active round |
playing |
-1.00 |
Round in progress, rating not final |
completed |
0.00 – 1.00 |
Final rating for a real player (0 = poor, 1 = excellent) |
completed |
-1.00 |
Player slot was not occupied by a real player |
How rating is calculated:
A typical round follows this sequence:
idle ──────────────────────────────────────┐
(points/rating: -1) │
│ │
│ game starts │
▼ │
playing │
(points/rating: -1) │
│ │
│ round ends │
▼ │
completed │
(points/rating: actual) │
│ │
│ attract mode / next round │
└─────────────────────────────────────────┘
If a round is cancelled mid-game (e.g. guests leave the attraction), the status transitions directly from playing back to idle — without passing through completed. Your server will not receive a completed status for that round and should handle this gracefully.
Our device exposes the endpoint on a fixed port. You reach it via the device's local IP address:
http://<device-ip>:8080/points
For stable operation we recommend assigning a static IP or a DHCP reservation for the device on your network.
Your server endpoint needs to be reachable from our device over the local network or internet. We support both local hostnames and public URLs:
| Option | Example |
|---|---|
| mDNS / local hostname | http://park-server.local:8080/api/attractions/points |
| Direct IP | http://192.168.1.10:8080/api/attractions/points |
| Public URL | https://your-park-system.com/api/attractions/points |
All settings are stored on the device at /var/sisyfox/park_config.json and can be adjusted through the in-game settings menu.
Esc to open the device menu.| Setting | Type | Description |
|---|---|---|
enableReporting |
Bool | Master switch — enables or disables the entire reporting system |
deviceID |
String | Unique identifier for this device (e.g. jumplings-1) |
reportingMode |
Enum | PostToPark, ExposeEndpoint, or Both |
parkServerUrl |
String | Your server's endpoint URL (Mode 1 only) |
attractionID |
String | Username for HTTP Basic Auth (Mode 1 only) |
password |
String | Password for HTTP Basic Auth (Mode 1 only) |
postMode |
Enum | OnStatusChange or Interval (Mode 1 only) |
postIntervalSeconds |
Float | POST interval in seconds — only used when postMode is Interval |
localPort |
Int | Port for our local HTTP server (Mode 2 only, default: 8080) |
To allow you to begin development and testing before receiving a physical device, we provide an online integration simulator that replicates the behavior of a real SisyFox attraction.
Simulator URL: https://simulate.sisyfox.com
The simulator exposes the same HTTP interface as a real device and generates realistic payloads with configurable players, scores, and game states. You can use it to:
/points endpoint (Mode 2)idle through playing to completedcompleted is never reached-1.00 sentinel values during idle and playingThe simulator UI is divided into three areas:
Players — Set the number of player slots, and randomize scores and ratings. Each player can be toggled between a real player (receives actual scores on completed) and a bot (always returns -1.00). The player count and score ranges adjust automatically based on the selected device type.
General — Select the device type (Jumplings or FoxBall), configure the device ID, game, and the URL of your server endpoint. The game list updates based on the selected device type. If your endpoint requires Basic Auth, enter the Attraction ID and Password here.
Round Simulation — Run a full automated round or an aborted round with configurable timing.
idle before the round startscompleted state is held before returning to idleOnStatusChange to POST only on status transitions, or Interval to POST repeatedly throughout the roundThe timeline indicator and progress bar reflect the current phase in real time.
FoxBall is a single-player attraction. There are no bot players — each round always has exactly one real player.
rating field as a normalised indicator of performance when exact score ranges matter.1.00; a low score yields a rating close to 0.00.Jumplings supports 3 to 5 players per round. Player slots that are not occupied by a real guest are filled by bots.
points and rating are both returned as -1.00 regardless of what the bot achieved in-game.1.00, last place receives 0.00, and intermediate placements are interpolated linearly based on the total number of real players in the round. For example, in a 4-player round: 1st = 1.00, 2nd = 0.67, 3rd = 0.33, 4th = 0.00.The simulator also exposes a live /points endpoint identical to Mode 2:
GET https://simulate.sisyfox.com/points
You can poll this endpoint directly from your server while a simulation is running to test your polling logic end-to-end.
For testing Mode 1 (Post To Park), we recommend running the simulator locally on your own network. This eliminates public internet latency and means your park server can receive POSTs from the simulator just as it would from a real device — no firewall rules or public endpoints required.
Download: sisyfox-score-simulator.zip
The ZIP contains everything you need. Setup requires Python 3.10 or newer — available at https://www.python.org/downloads/.
# 1. Unzip and open a terminal in the folder
# 2. Install dependencies
pip install -r requirements.txt
# 3. Start the simulator
python app.py
The simulator UI is then available at http://localhost:5000 and the expose endpoint at http://localhost:5000/points.
If your park server needs to reach the simulator's /points endpoint from another machine on the same network, use your machine's local IP address instead of localhost:
http://<your-local-ip>:5000/points
The hosted version at
https://simulate.sisyfox.comand the local version are functionally identical. Use the hosted version for a quick start or when your server has a public endpoint; use the local version when testing Mode 1 on a closed network.
The simulator is designed to closely replicate real device behavior, but there are a few minor differences to be aware of:
idle on OnStatusChange — When a full round completes and transitions back to idle, the OnStatusChange mode will trigger two consecutive POSTs with status: idle in quick succession (one at round start, one at round end). A real device handles this internally and will only send one. Your server should be able to handle duplicate idle payloads gracefully.idle corresponds to the attract video playing on screen. The simulator simply holds the idle state for the configured delay.You provide us with:
attractionID (username) and password you want us to useWe configure on the device:
reportingMode → PostToParkparkServerUrl → your endpointpostMode → OnStatusChange (recommended) or IntervalYou verify:
status: idle when the attraction is idlestatus: playing and points: -1.00 when a round startsstatus: completed and actual scores when a round endscompleted received after playing)You provide us with:
We configure on the device:
reportingMode → ExposeEndpointlocalPort (default: 8080)You verify:
http://<device-ip>:8080/pointsstatus: idle with points: -1.00 between roundsstatus: playing during a roundstatus: completed with actual scores after a round endsFor integration support, contact SisyFox GmbH.