Docs
search Esc

Getting Access

Become an approved UbuntuPlay developer to sign game releases, publish plugins, and distribute through the Marketplace.

1. Apply for a Developer Account

  1. Go to the Developer Portal signup page.

  2. Create a Better Auth account with your email and password.

  3. Fill in your profile: name, organisation, website, and a short description of what you plan to build.

  4. Submit the application. New accounts start in pending status until reviewed.

lightbulb
Skip the queue with an invite tokenHub administrators can generate invite tokens. If you have one, paste it during signup to be auto-approved as active.

2. Account States

StatusMeaningCan sign / publish?
pendingAwaiting admin reviewNo
activeApproved developerYes
suspendedAdministrative suspensionNo

3. Create an API Key

Once active, generate a key from the Dev Portal or via the API:

HTTP
POST /hub/api/dev/api-keys
Content-Type: application/json
Cookie: better-auth.session_token=<your-session>

{
  "name": "My Laptop",
  "scopes": ["sign:game", "publish:plugin"]
}

The response contains the raw key once. Store it securely:

JSON
{
  "ok": true,
  "key": "updev_abc123...",
  "keyId": "key_...",
  "warning": "Copy this key now — it will not be shown again."
}

4. Authenticate Requests

There are two ways to call developer endpoints:

Session cookie (browser / portal)

When calling from the Dev Portal, the Better Auth session cookie is sent automatically.

API key (scripts, CI, game builders)

Pass the key in the X-Api-Key header for game signing and plugin publishing:

BASH
curl -X POST https://ubuntuplay.fly.dev/hub/api/dev/sign \
  -H "X-Api-Key: updev_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"manifest": {"type": "game_add", "version": "1.0.0", "files": [...]}}'

5. First Request — Check Your Profile

Profile and portal endpoints such as GET /hub/api/dev/me use your session cookie (they do not accept X-Api-Key). From a script, sign in first and reuse the cookie:

BASH
curl -c cookies.txt -X POST https://ubuntuplay.fly.dev/api/auth/sign-in/email \
  -H "Content-Type: application/json" \
  -d '{"email": "you@example.com", "password": "…"}'

curl -b cookies.txt https://ubuntuplay.fly.dev/hub/api/dev/me
key
Key scopessign:game is required for POST /hub/api/dev/sign. publish:plugin is required for plugin submissions. New keys default to sign:game if no scopes are supplied.