Write API for studios

What this is

A studio keeps its Arena54 listings up to date from its own build or release tools. It follows the same rules as the site’s forms: a new game or event waits for a person to approve it, a change to a live one shows at once and is recorded, and a rejected one goes back into review when you change it.

A key that may write

  • In the dashboard, create a key and tick May write. A key made without it can only read, and that cannot be changed later.
  • Keep it on a server, for example as ARENA54_WRITE_KEY. A call that comes from a page is refused.
  • A test key checks your input and answers what would happen, with dry_run: true. It writes nothing. A live key writes.
  • You can write only to your own: a game under a studio or person page you submitted or claimed, and events you submitted.

Calls

MethodPathPurpose
POST/v1/gamesSubmit a game under one of your own studio or person pages. It waits for review
PATCH/v1/games/{slug}Change your own game. Send only the fields that change
POST/v1/eventsSubmit an event. It waits for review
PATCH/v1/events/{slug}Change your own event

Submit a game

Shell
curl -X POST "https://developers.arena54.com/api/v1/games" \
  -H "Authorization: Bearer $ARENA54_WRITE_KEY" \
  -d '{
    "creator": "your-studio-handle",
    "title": "Lagos Run",
    "tagline": "Dodge traffic on the Third Mainland Bridge",
    "description": "…",
    "genres": ["racing", "arcade"],
    "platforms": ["android", "ios"],
    "stage": "released",
    "release_year": 2026,
    "trailer_url": "https://…",
    "links": { "play": "https://…", "playStore": "https://…" }
  }'
201
{ "success": true, "data": { "slug": "lagos-run", "status": "pending", "url": "https://arena54.com/g/lagos-run",
  "note": "Waiting for review. It is not public until staff approve it." }, "meta": { "request_id": "req_…", "mode": "live" } }
  • Only creator and title are needed. Genres are up to three keys from /v1/genres; stage is released, early_access or in_development.
  • Pictures are not taken by the API. Add a cover and screenshots on the site, where they are checked and stored.
  • If the webhook listing.published is on, it tells you when the game is approved.

Change one

Shell
curl -X PATCH "https://developers.arena54.com/api/v1/games/lagos-run" \
  -H "Authorization: Bearer $ARENA54_WRITE_KEY" \
  -d '{ "stage": "released", "release_year": 2026 }'

Send only what changes; the rest stays. The answer carries the status it now has. The slug never changes.

Events

Shell
curl -X POST "https://developers.arena54.com/api/v1/events" \
  -H "Authorization: Bearer $ARENA54_WRITE_KEY" \
  -d '{ "title": "Lagos Game Jam", "kind": "jam", "starts_at": "2027-03-01", "ends_at": "2027-03-03",
        "online": false, "country_code": "NG", "city": "Lagos", "url": "https://…", "description": "…" }'

kind is jam, meetup, tournament, showcase or conference. Dates are days, as YYYY-MM-DD.

Refusals

CodeStatusWhen
write_not_allowed403The key can only read. Create one with “May write” ticked.
server_only403The call came from a page. A key that can write stays on a server.
not_yours403`creator` is not the handle of a page that is yours.
not_found404No game or event of yours has that slug.
invalid400A field is not acceptable. `fields` says which and why.
bad_json400The body is not a JSON object.
too_many_pending409You already have the most submissions allowed waiting for review.
limit429The plan’s writes for the day are used up.
closed503Submissions are paused, or the site is in read-only mode.
module_off503Writing through the API is switched off for now.
400
{ "success": false, "error": { "code": "invalid", "message": "Some fields are not acceptable. See `fields`." },
  "fields": { "title": "Add a title.", "release_year": "Enter a year like 2024." }, "meta": { … } }

Limits

Writes a day come from your plan, with the usual calls a minute per key. There is no delete: to take a listing down, use the site or write to us. See pricing.