Script API
Read-only public JSON API for public script posts.
Base URL and auth
The public Script API is hosted on zenoblox.com. It is read-only and does not require an API key.
https://zenoblox.com/apiCORS is open (Access-Control-Allow-Origin: *) so browser apps can fetch from other origins. Dashboard, search, comments, and billing routes are not part of this public API — do not call them from third-party apps.
List public scripts
/api/scriptsReturns recent public, approved, non-draft script posts. Codes and blogs never appear here.
| Name | Type | Description |
|---|---|---|
limit | number | Results per page. Default 12, minimum 1, maximum 25. |
cursor | string | The id of the last item from the previous page. |
sort | string | newest (default) or views. |
hasKey | boolean | true or false to filter key-system scripts. |
gameId | string | Roblox place ID attached to the post. |
Example request:
const res = await fetch( "https://zenoblox.com/api/scripts?limit=5&sort=newest" ); const { data, nextCursor, hasMore } = await res.json(); for (const script of data) { console.log(script.title, script.url); }
Response shape:
{
"data": [
{
"id": "6ab414f0e773cf1fd7565f27",
"title": "RIVALS: ArchHub Enhancements",
"slug": "rivals-archhub-enhancements-4xci",
"url": "https://zenoblox.com/script/rivals-archhub-enhancements-4xci",
"thumbnail": "https://zencript.b-cdn.net/posts/thumb_HZfekLNo2chNdHCGb2FNsUuCeUn1_1790186735325_4xci.jpg",
"game": { "placeId": "17625359962", "title": "RIVALS" },
"views": 60,
"likes": 0,
"comments": 0,
"createdAt": "2026-09-23T18:05:36.394Z",
"isPatched": false,
"hasKeySystem": false,
"isMobileFriendly": false,
"author": {
"username": "kaelvyr",
"displayName": "Kaelvyr",
"isVerified": false
}
}
],
"nextCursor": "6ab414b8e773cf1fd7565f26",
"hasMore": true
}Get a script
/api/scripts/{slug}slug is the post slug or the post id. Private, unlisted, followers-only, draft, trashed, pending, declined, non-script, and deactivated-author posts return 404. The payload adds a stripped description and script widgets only — never liked-by arrays or account secrets.
const res = await fetch("https://zenoblox.com/api/scripts/rivals-archhub-enhancements-4xci"); const script = await res.json();
description is plain text from text widgets, capped at 2000 characters.
{
"id": "6ab414f0e773cf1fd7565f27",
"title": "RIVALS: ArchHub Enhancements",
"slug": "rivals-archhub-enhancements-4xci",
"url": "https://zenoblox.com/script/rivals-archhub-enhancements-4xci",
"thumbnail": "https://zencript.b-cdn.net/posts/thumb_HZfekLNo2chNdHCGb2FNsUuCeUn1_1790186735325_4xci.jpg",
"game": { "placeId": "17625359962", "title": "RIVALS" },
"views": 60,
"likes": 0,
"comments": 0,
"createdAt": "2026-09-23T18:05:36.394Z",
"isPatched": false,
"hasKeySystem": false,
"isMobileFriendly": false,
"author": {
"username": "kaelvyr",
"displayName": "Kaelvyr",
"isVerified": false
},
"description": "Plain-text excerpt from text widgets, capped at 2000 characters.",
"scripts": [
{
"title": "Script",
"source": "lua",
"content": "loadstring(game:HttpGet(\"https://rawscripts.net/raw/RIVALS-ArchHub-enhancements-229363\"))()"
}
]
}scripts[].source is lua for inline code or url when the widget stores an https link.
Errors
| Name | Type | Description |
|---|---|---|
400 | bad_request | Missing or invalid slug. |
404 | not_found | No public script at that slug. |
429 | rate_limited | More than 60 requests in 60 seconds from one IP. Retry-After: 60. |
502 / 500 | server_error | Upstream or internal failure. |
{ "error": "Not found", "code": "not_found" }Rate limits
60 requests per IP per 60 seconds, enforced in memory on the public host (and on the API origin). Responses include RateLimit-Limit, RateLimit-Remaining, and RateLimit-Reset. Successful GETs are cache-friendly: Cache-Control: public, max-age=30, s-maxage=60, stale-while-revalidate=120.
Do not scrape the whole catalog. Use the cursor. Bursting past the limit is fair-use abuse.
Attribution
If you display ZenoBlox scripts in your app, link each item back to url (the zenoblox.com/script/… page). Do not strip author names. A visible “via ZenoBlox” credit is required when the data is the main content of a hub or bot.
