Public API

Free JSON API for live executor status, uptime and Roblox version changes. Read only, no key needed, CORS enabled so you can call it straight from a browser.

Basics

Base URL: https://robloxexecutors.com/api/v1

Rate limit: 60 requests per minute per IP. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. Responses are cached for about 30 seconds, so polling faster than that gains nothing.

Building something bigger? Partner keys raise the limit to 600 requests per minute. Send yours as an X-API-Key header.

Enums come back in upper case (WORKING, WINDOWS); query params accept any case. Uptime is the percent of tracked time an executor spent working. Update time is how long it took to go from update pending back to working after a Roblox release.

Errors look like this, with a matching HTTP status:

{ "error": { "code": "not_found", "message": "Executor not found" } }

OpenAPI spec: https://robloxexecutors.com/api/v1/openapi.json. Load it into Postman, Insomnia or a client generator.

Endpoints

GET/api/v1/status

One-call overview: latest Roblox version per platform, executor counts by status, and when the last status change happened. Good for widgets and Discord bots.

{
  "roblox": [{ "platform": "WINDOWS", "version": "version-abc123", "versionName": "0.695.0.6950812", "detectedAt": "..." }],
  "executors": {
    "total": 24,
    "byStatus": { "WORKING": 15, "UPDATE_PENDING": 6, "DOWN": 3, "DISCONTINUED": 0 },
    "byPlatform": { "WINDOWS": { "WORKING": 9, ... }, ... }
  },
  "lastStatusChangeAt": "2026-10-17T08:41:00.000Z"
}

GET/api/v1/executors

Every listed executor with per-platform status, uptime and update times.

platform
windows, mac, android, ios. Comma separate for several. Also trims the platforms array to these.
status
working, update_pending, down, discontinued. Matches executors with any platform in that status.
featured
true to return featured executors only.
{
  "executors": [{
    "slug": "example",
    "name": "Example",
    "priceModel": "FREE",
    "keySystem": true,
    "sunc": 98,
    "platforms": [{
      "platform": "WINDOWS",
      "status": "WORKING",
      "workingVersion": "version-abc123",
      "executorVersion": "v2.1.4",
      "statusChangedAt": "...",
      "uptime": { "24h": 100, "7d": 96.42, "30d": 91.8 },
      "updateTime": { "medianSeconds": 5400, "lastSeconds": 3120, "samples": 4 }
    }]
  }],
  "count": 1
}

GET/api/v1/executors/{slug}

One executor with its description, stats, last 10 status changes and latest posts.

GET/api/v1/executors/{slug}/history

Full status history for one executor, newest first.

platform
Filter to one or more platforms.
limit
Items per page, default 50, max 100.
cursor
Pass nextCursor from the previous response to get the next page.

GET/api/v1/events

Site-wide feed of status changes, newest first. Poll this to post updates to Discord.

platform
Filter by platform.
status
Filter by the new status, e.g. working for "back up" alerts.
limit
Items per page, default 50, max 100.
cursor
Pass nextCursor from the previous response to get the next page.
{
  "events": [{
    "id": "cm...",
    "platform": "WINDOWS",
    "fromStatus": "UPDATE_PENDING",
    "toStatus": "WORKING",
    "robloxVersion": "version-abc123",
    "note": null,
    "source": "admin",
    "createdAt": "...",
    "executor": { "slug": "example", "name": "Example", "logoUrl": null }
  }],
  "nextCursor": "cm..."
}

GET/api/v1/roblox-version

Latest Roblox client version per platform. Windows, Mac and iOS are picked up within about a minute of release; Android is added by hand when it ships.

history
true to also return the last 20 versions per platform.

GET/api/v1/posts

Published news, executor updates and guides.

type
news, update, guide.
executor
Only posts about this executor slug.
limit
Default 20, max 100.
cursor
Pagination cursor.

GET/api/v1/posts/{slug}

One post including its markdown body.

Webhooks

Rather than polling, get status changes pushed to you the moment they happen. Webhooks can post straight into a Discord channel as embeds, or send signed JSON to your own server. Filter by platform, executor or new status. Webhooks are set up by us for now, so get in touch with the URL you want them sent to.

JSON webhooks receive a POST with up to 50 events per request, in the same shape as /events:

{
  "type": "status.changed",
  "webhookId": "cm...",
  "sentAt": "2026-10-17T09:30:00.000Z",
  "events": [{ "id": "cm...", "platform": "WINDOWS", "fromStatus": "UPDATE_PENDING", "toStatus": "WORKING", ... }]
}

Every request is signed. Check X-Webhook-Signature against an HMAC-SHA256 of timestamp + "." + raw body using your secret, and reject old timestamps:

import crypto from "node:crypto";

function verify(req, rawBody, secret) {
  const ts = req.headers["x-webhook-timestamp"];
  if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false; // older than 5 min
  const expected = "sha256=" + crypto.createHmac("sha256", secret).update(ts + "." + rawBody).digest("hex");
  const given = req.headers["x-webhook-signature"] ?? "";
  return given.length === expected.length && crypto.timingSafeEqual(Buffer.from(given), Buffer.from(expected));
}

Reply with any 2xx within 10 seconds. Failed deliveries retry with backoff for about 8 hours. Delivery is at least once, so de-duplicate on the event id. A URL that answers 404 or 410, or fails 50 times in a row, is switched off.

Example

const res = await fetch("https://robloxexecutors.com/api/v1/executors?platform=windows&status=working");
const { executors } = await res.json();
for (const e of executors) console.log(e.name, e.platforms[0].uptime["7d"] + "%");