Developers

UplinkOS developer API

Check your apps and send new versions from your own tools. This API manages your own UplinkOS apps only. To read or run a server, use the Server API.

#Your key

  • Make it on the API key page once you are approved. Keys start with upk_.
  • It is shown once, so copy it somewhere safe. Uplink only keeps a hash of it.
  • Making a new key stops the old one right away.
  • Keep it on your own computer or server. Never put it in your app's web page, because anyone could read it there.
  • Studio does not need a key.

#Signing in

Send your key in the Authorization header on every request.

Terminal
curl https://uplinkrblx.xyz/api/v1/me \
  -H "Authorization: Bearer upk_your_key"

#Endpoints

Base address: https://uplinkrblx.xyz/api/v1

MethodPathWhat it does
GET/meYour developer account and key details
GET/optionsCategories, data kinds, age ratings, repository hosts and upload limits
POST/uploads?name=app.zipUpload a code file or archive (raw bytes, up to 25 MB). Answers with a file token
GET/uploadsFiles you uploaded that are not part of a version yet
GET/storeEvery app in the UplinkOS App Store
GET/appsYour apps
GET/apps/:idOne of your apps and its versions
POST/appsSubmit a new app for review
POST/apps/:id/submissionsSend a new version of an app for review
DELETE/apps/:id/submissions/pendingWithdraw the version waiting for review

#Upload your code

Send a .zip, .tar.gz, .tar or single code files. Put the token you get back in files when you send the version. Unused uploads are deleted after 24 hours.

Terminal
curl -X POST "https://uplinkrblx.xyz/api/v1/uploads?name=weather-1.1.0.zip" \
  -H "Authorization: Bearer upk_your_key" \
  -H "Content-Type: application/octet-stream" \
  --data-binary @weather-1.1.0.zip
Answer
{
  "file": {
    "token": "9f2c…",
    "name": "weather-1.1.0.zip",
    "kind": "zip",
    "size": 482113,
    "files": 37
  }
}

#Send a new version

The body has the same fields as the submit form on the portal. Send files, repoUrl, or both. icon is optional on updates and is a data: URL.

Terminal
curl -X POST https://uplinkrblx.xyz/api/v1/apps/12/submissions \
  -H "Authorization: Bearer upk_your_key" \
  -H "Content-Type: application/json" \
  -d @version.json
version.json
{
  "name": "Weather",
  "tagline": "Live ER:LC weather",
  "description": "At least 50 characters about what the app does and how to use it.",
  "category": "Utilities",
  "version": "1.1.0",
  "whatsNew": "Faster radar",
  "appUrl": "https://weather.example.com",
  "files": ["9f2c…"],
  "repoUrl": "https://github.com/you/weather",
  "repoRef": "v1.1.0",
  "repoAccess": "public",
  "framework": "Vanilla JS",
  "buildNotes": "",
  "license": "MIT",
  "screenshots": ["https://example.com/shot.png"],
  "supportUrl": "https://discord.gg/example",
  "privacyUrl": "https://example.com/privacy",
  "data": ["none"],
  "dataNote": "",
  "external": "",
  "ageRating": "everyone",
  "money": "free",
  "team": "",
  "testNotes": "Open the app and pick a postal.",
  "confirmOwn": true,
  "confirmRules": true,
  "confirmSame": true
}

#Errors and limits

  • Errors look like {"error":{"code":"…","message":"…"}}.
  • 401 means the key is missing, wrong, replaced or revoked. 403 means your developer access was revoked.
  • 60 requests a minute per key (see the x-ratelimit headers) and 10 submissions an hour. Going over answers 429 with retry-after.
  • Every call is logged with its time, path and result, and kept for 30 days.