Developer documentation

Ship a skill game on Fiero

Build an HTML5 game, integrate the Fiero SDK, and submit it through this API. Fiero runs it through skill-certification and, once it clears, players compete on it for real prizes. This is an API-only developer surface — no dashboard; everything below is a plain HTTP call.

Overview

The lifecycle of a submission:

  1. Register a developer account and get a sandbox API key.
  2. Create a game record with its metadata (name, run clock, skill channels, mechanics).
  3. Upload your bundle (the built HTML5 game).
  4. Pre-check — run the §19 conformity checks and fix any gaps.
  5. Submit — a passing submission enters Fiero's review queue; a failing one comes back with the gaps.
  6. Fiero takes it through certification (statistical skill tests, human playtest, sign-off) and, once certified, flips it live for cash play.
The automatic step on submit is the mechanical / conformity gate (§19: declared skill, mechanics, run clock, bundle). The statistical skill gates (S1–S4), the human playtest, and the three go-live signatures happen inside Fiero's certification flow afterward — they need real match data.

Base URL & authentication

All endpoints are under:

https://dev.159-195-198-184.sslip.io/api

Authenticate every request (except POST /developers) with your API key, either header works:

Authorization: Bearer fk_sbx_xxxxxxxx…
# or
X-Api-Key: fk_sbx_xxxxxxxx…

Bodies are JSON (Content-Type: application/json) except the bundle upload, which is raw bytes.

Register a developer

POST/developerspublic

Creates your developer account and returns your first sandbox key. The raw key is shown once — store it.

curl -X POST https://dev.159-195-198-184.sslip.io/api/developers \
  -H 'content-type: application/json' \
  -d '{"email":"you@studio.com","name":"Your Studio"}'

# → 201
{
  "developer": { "id": "…", "email": "you@studio.com", "name": "Your Studio", "status": "active" },
  "apiKey": { "key": "fk_sbx_9f3c…", "prefix": "fk_sbx_9f3c", "environment": "sandbox", ... }
}

API keys

POST/keys  GET/keys  DELETE/keys/:id

Issue additional keys, list them (prefix only — never the raw key), or revoke one.

curl -X POST https://dev.159-195-198-184.sslip.io/api/keys \
  -H 'authorization: Bearer fk_sbx_…' -H 'content-type: application/json' \
  -d '{"label":"ci"}'

Create a game

POST/games

Registers a submission (status draft) with the game's declared manifest:

FieldTypeNotes
slugstringlowercase letters/digits/dashes, 3–40 chars (e.g. space-race)
namestringdisplay name
descriptionstring?optional
runClockSecint30–600s. A 120–180s timed score-attack qualifies for §19 fast-track.
skillChannelsstring[]1+ of speed, accuracy, pattern-recognition, planning
mechanicsobject{ hiddenInformation, prohibitedMechanics, summary } — see below
categorystring?e.g. arcade-reaction

mechanics.hiddenInformation — one of complete, symmetric, none (all pass), or imperfect-asymmetric (a chance-assigned information advantage — fails M6, routes to rejection). mechanics.prohibitedMechanics — must be empty; any of slots/reels/loot/wheels/dice-decided fails M8. mechanics.summary — a non-empty description of how the game plays (§12.1).

curl -X POST https://dev.159-195-198-184.sslip.io/api/games \
  -H 'authorization: Bearer fk_sbx_…' -H 'content-type: application/json' \
  -d '{
    "slug":"space-race","name":"Space Race","runClockSec":150,
    "skillChannels":["speed","accuracy"],
    "mechanics":{"hiddenInformation":"complete","prohibitedMechanics":[],
      "summary":"Deterministic asteroid field from the match seed; pure reaction dodging."},
    "category":"arcade-reaction"
  }'

Upload the bundle

POST/games/:id/bundle

Upload the built game as raw bytes — a single self-contained HTML file or a zip. Set the Content-Type to the file's type (text/html, application/zip, or application/gzip). Max 20 MB.

curl -X POST https://dev.159-195-198-184.sslip.io/api/games/SUBMISSION_ID/bundle \
  -H 'authorization: Bearer fk_sbx_…' \
  -H 'content-type: application/zip' \
  --data-binary @dist/space-race.zip

Pre-check conformity (§19 fast-track)

POST/games/:id/precheck

Runs the conformity checks without submitting — use it to see if your game qualifies and fix any gaps first. It's the same mechanical evaluation Fiero's Gate-1 certification uses, so a passing pre-check means your declared mechanics won't get the game rejected.

curl -X POST https://dev.159-195-198-184.sslip.io/api/games/SUBMISSION_ID/precheck \
  -H 'authorization: Bearer fk_sbx_…'

# → { "conformity": { "ok": true, "checks": [ { "id":"m6-hidden-info", "ok":true, ... } ], "gaps": [] } }

Checks: valid slug · display name · skill channels declared · run clock in range · M6 hidden-information · M8 no prohibited mechanics · §12.1 mechanics summary · bundle uploaded · §19 fast-track eligibility.

Submit

POST/games/:id/submit

Runs conformity and either advances the submission to pending_review (Fiero's queue) or returns it as conformity_failed with the gaps to fix. Resubmit after fixing.

curl -X POST https://dev.159-195-198-184.sslip.io/api/games/SUBMISSION_ID/submit \
  -H 'authorization: Bearer fk_sbx_…'
# → { "submission": { "status": "pending_review", "conformity": { "ok": true, ... } } }

Check status

GET/games  GET/games/:id  PATCH/games/:id

List your submissions, fetch one, or edit a draft / conformity_failed submission's metadata. Statuses: draft → conformity_failed | pending_review → in_certification | rejected → approved.

SDK integration

Your game runs inside a sandboxed iframe and talks to Fiero only through the Fiero SDK (postMessage bridge). The essentials the certification pipeline depends on:

The game is timing-independent and re-playable from its seed + action log — that's what lets Fiero prove skill and catch cheating by reconstruction.

Errors

StatusBody errorMeaning
400invalid_requestmalformed body (see issues)
400invalid_bundlebundle wrong type / too large / empty
401unauthorizedmissing or invalid API key
404not_foundsubmission not found (or not yours)
409developer_existsemail already registered
409invalid_transitione.g. editing a submitted game
415unsupported_media_typebundle Content-Type not allowed
429rate_limitedslow down (120 req/min)
Fiero Developer API · sandbox · this environment is for testing — no real money.