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.
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"] + "%");