v2 · public · read-only

scriptly.to API

A free, public REST API for everything on scriptly.to. Search the script library, pull raw Luau source straight into a loadstring, look up creator profiles, follow trending lists, and embed scripts in your own sites and bots — all with one HTTPS call.

No API key, no signup, no rate-limit hoops. JSON in, JSON out. Built for executor UIs, script hubs, Discord bots, browser extensions, and anything else that wants to ship the scriptly catalogue.

Quickstart

Hit the base URL https://scriptly.to/api/v2 over HTTPS. Every endpoint returns JSON with the same envelope. Try it from your terminal, a browser, or in-game Luau:

curl https://scriptly.to/api/v2/scripts?sort=trending&limit=10

Response shape

Every successful response is wrapped in { data, page?, meta }. List endpoints include a page block. Errors return { error: { code, message }, meta } with a non-2xx status. CORS is open (*) so you can call it from any browser origin.

{
  "data": [ /* result(s) */ ],
  "page": { "page": 1, "limit": 25, "total": 842, "has_more": true },
  "meta": { "version": "2", "generated_at": "2026-06-08T12:00:00Z" }
}

Attribution

If you display data from this API, please show a visible "Powered by scriptly.to" near it and link to scriptly.to. That's the only thing we ask in return for keeping the API free and open.

Rate limits

Reads are edge-cached for 60 seconds, so most apps will never hit a limit. Every response includes X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers. Aggressive scraping from a single IP may be throttled. Need higher volume or a bulk export? Email help@scriptly.to.

Errors

Errors return a non-2xx status with a consistent envelope so you can branch on error.code instead of parsing strings.

{
  "error": { "code": "not_found", "message": "Script not found" },
  "meta": { "version": "2", "generated_at": "2026-06-08T12:00:00Z" }
}
CodeStatusMeaning
invalid_query400Malformed or out-of-range query parameters.
invalid_slug400Slug param is empty or longer than 80 characters.
invalid_handle400Username contains characters outside [a-zA-Z0-9_.-] or is too long.
invalid_url400oEmbed url parameter is not a valid http(s) URL.
missing_param400A required query parameter (e.g. q, url) was omitted.
unsupported400Resource type or format isn't supported by this endpoint.
not_found404No script, user, game, or collection with that identifier.
rate_limited429Too many requests from this IP. Back off until X-RateLimit-Reset.
internal500Something went wrong on our side. Safe to retry.

Scripts

GET
/scriptsTry it

Search and list scripts. Combine filters for game, tags, key system, verified state, and universal scripts.

ParamDescription
qFree-text search across titles, descriptions, and tags.
gameFilter by game name (e.g. blox-fruits).
tagFilter by tag. Repeatable: ?tag=auto-farm&tag=esp.
verifiedtrue | false — only verified creators.
keytrue | false — toggle key-system scripts.
universaltrue | false — works across multiple games.
sortnew | top | trending | safest | relevance
pagePage number (1+).
limitItems per page (1–50, default 25).

Example request

curl https://scriptly.to/api/v2/scripts?sort=trending&verified=true&limit=10

Example response

{
  "data": [
    {
      "slug": "infinite-yield",
      "title": "Infinite Yield",
      "tags": ["admin", "universal"],
      "verified": true,
      "views": 124530,
      "rating": { "avg": 4.7, "count": 312 },
      "works_now": { "score": 96, "works": 48, "broken": 2, "window_days": 14 },
      "url": "https://scriptly.to/script/infinite-yield",
      "raw_url": "https://scriptly.to/api/v2/scripts/infinite-yield/raw"
    }
  ],
  "page": { "page": 1, "limit": 10, "total": 842, "has_more": true },
  "meta": { "version": "2", "generated_at": "2026-06-08T12:00:00Z" }
}
GET
/scripts/{slug}Try it

Full detail for a single script: owner, rating, works-now %, reactions, version history, share URLs.

Example request

curl https://scriptly.to/api/v2/scripts/infinite-yield

Example response

{
  "data": {
    "slug": "infinite-yield",
    "title": "Infinite Yield",
    "description": "Universal admin command bar.",
    "current_version": "v8.3.0",
    "owner": { "username": "edge", "verified": true },
    "rating": { "avg": 4.7, "count": 312 },
    "works_now": { "score": 96, "works": 48, "broken": 2, "window_days": 14 },
    "reactions": { "fire": 124, "mind_blown": 33 },
    "raw_url": "https://scriptly.to/api/v2/scripts/infinite-yield/raw"
  },
  "meta": { "version": "2", "generated_at": "2026-06-08T12:00:00Z" }
}
GET
/scripts/{slug}/rawTry it

Raw Luau source as text/plain. Drop straight into a loadstring. Counts toward the script's copy total.

Example request

curl https://scriptly.to/api/v2/scripts/infinite-yield/raw

Example response

-- text/plain response
loadstring(game:HttpGet("https://raw.githubusercontent.com/.../source.lua"))()
-- ... full script body ...
GET
/scripts/{slug}/versionsTry it

Version history for a script (newest first).

Example request

curl https://scriptly.to/api/v2/scripts/infinite-yield/versions

Example response

{
  "data": [
    { "version": "v8.3.0", "notes": "Fix Hydroxide detection.", "created_at": "2026-05-12T..." },
    { "version": "v8.2.0", "notes": "New :fly command.",       "created_at": "2026-04-04T..." }
  ]
}
GET
/scripts/latestTry it

Most recently published scripts.

Example request

curl https://scriptly.to/api/v2/scripts/latest

Example response

{ "data": [ /* newest first */ ] }
GET
/scripts/randomTry it

A single random live script. Great for surprise-me buttons or executor splash screens.

Example request

curl https://scriptly.to/api/v2/scripts/random

Example response

{ "data": { "slug": "...", "title": "...", "raw_url": "..." } }
GET
/scripts/searchTry it

Dedicated search endpoint. Same shape as /scripts, but q is required.

ParamDescription
qSearch query (required).
pagePage number (1+).
limitItems per page (1–50, default 25).

Example request

curl https://scriptly.to/api/v2/scripts/search?q=admin&limit=10

Example response

{ "data": [ /* matching scripts */ ], "page": { "page": 1, "limit": 10, "has_more": true } }
GET
/scripts/{slug}/versions/{version}/rawTry it

Raw Luau source for a specific historical version of a script.

Example request

curl https://scriptly.to/api/v2/scripts/infinite-yield/versions/v8.2.0/raw

Example response

-- text/plain response for the requested version
-- ... script body ...

Games

GET
/gamesTry it

Top games ranked by script count and views. Build game-picker UIs from this.

Example request

curl https://scriptly.to/api/v2/games?limit=50

Example response

{
  "data": [
    { "slug": "blox-fruits", "name": "Blox Fruits", "script_count": 412, "views": 1284221 }
  ]
}
GET
/games/{slug}Try it

Game detail with up to 25 top scripts for that game.

Example request

curl https://scriptly.to/api/v2/games/blox-fruits

Example response

{
  "data": {
    "slug": "blox-fruits",
    "name": "Blox Fruits",
    "image_url": "https://...",
    "scripts": [ /* up to 25 script objects */ ]
  }
}
GET
/games/{slug}/scriptsTry it

Paginated scripts for a specific game. Use this when /games/{slug}'s 25-script cap isn't enough.

ParamDescription
pagePage number (1+).
limitItems per page (1–50, default 25).

Example request

curl https://scriptly.to/api/v2/games/blox-fruits/scripts?page=1&limit=25

Example response

{ "data": [ /* scripts */ ], "page": { "page": 1, "limit": 25, "has_more": true } }

Creators

GET
/users/{handle}Try it

Public creator profile with bio, role badges, follower count, and recent uploads.

Example request

curl https://scriptly.to/api/v2/users/edge

Example response

{
  "data": {
    "username": "edge",
    "avatar_url": "https://...",
    "roles": ["verified", "pro"],
    "followers": 1284,
    "recent_scripts": [ /* up to 10 */ ]
  }
}
GET
/users/{handle}/scriptsTry it

Paginated scripts uploaded by a creator.

Example request

curl https://scriptly.to/api/v2/users/edge/scripts?page=1&limit=25

Example response

{ "data": [ /* scripts */ ], "page": { "page": 1, "limit": 25, "has_more": true } }
GET
/users/{handle}/collectionsTry it

Public collections curated by a creator.

Example request

curl https://scriptly.to/api/v2/users/edge/collections

Example response

{
  "data": [
    { "slug": "my-favs", "name": "My Favs", "script_count": 12, "visibility": "public" }
  ]
}

Collections

GET
/collections/{slug}Try it

A public collection with its ordered list of scripts.

Example request

curl https://scriptly.to/api/v2/collections/best-admin-scripts

Example response

{
  "data": {
    "slug": "best-admin-scripts",
    "name": "Best Admin Scripts",
    "owner": { "username": "edge" },
    "scripts": [ /* ordered script objects */ ]
  }
}

Discovery & meta

GET
/tagsTry it

Top tags with usage counts. Use to power filter UIs.

Example request

curl https://scriptly.to/api/v2/tags

Example response

{ "data": [ { "tag": "auto-farm", "count": 412 }, { "tag": "esp", "count": 287 } ] }
GET
/statsTry it

Global counts: scripts, creators, copies, views.

Example request

curl https://scriptly.to/api/v2/stats

Example response

{ "data": { "scripts": 12482, "creators": 3120, "copies": 1284221, "views": 18420019 } }
GET
/oembedTry it

oEmbed JSON for a scriptly script URL. Drop into Discord, Slack, Notion, or any oEmbed consumer.

Example request

curl https://scriptly.to/api/v2/oembed?url=https://scriptly.to/script/infinite-yield

Example response

{
  "version": "1.0",
  "type": "rich",
  "title": "Infinite Yield",
  "provider_name": "scriptly.to",
  "html": "<iframe src=\"https://scriptly.to/embed/infinite-yield\" ...></iframe>"
}
GET
/healthTry it

Health check. Returns 200 when the API is up.

Example request

curl https://scriptly.to/api/v2/health

Example response

{ "data": { "status": "ok" } }
GET
/openapi.jsonTry it

Machine-readable OpenAPI 3.1 spec. Import into Postman, Insomnia, or generate a client.

Example request

curl https://scriptly.to/api/v2/openapi.json

Example response

{ "openapi": "3.1.0", "info": { "title": "scriptly.to Public API", "version": "2.0.0" } }

Script object

The canonical shape returned wherever a script appears.

{
  "slug": "infinite-yield",
  "title": "Infinite Yield",
  "description": "...",
  "tags": ["admin", "universal"],
  "key_system": false,
  "verified": true,
  "universal": true,
  "views": 124530,
  "copies": 8421,
  "saves": 312,
  "safe_score": 96,
  "current_version": "v8.3.0",
  "game": { "name": "Universal", "url": null, "image_url": null },
  "rating": { "avg": 4.7, "count": 312 },
  "works_now": { "score": 96, "works": 48, "broken": 2, "window_days": 14 },
  "reactions": { "fire": 124, "mind_blown": 33 },
  "owner": { "username": "edge", "avatar_url": "...", "roles": ["verified"], "verified": true },
  "created_at": "2024-01-01T00:00:00Z",
  "updated_at": "2026-05-12T00:00:00Z",
  "url": "https://scriptly.to/script/infinite-yield",
  "raw_url": "https://scriptly.to/api/v2/scripts/infinite-yield/raw",
  "embed_url": "https://scriptly.to/embed/infinite-yield",
  "og_image_url": "https://scriptly.to/api/og/script/infinite-yield.png"
}