{"openapi":"3.1.0","info":{"title":"RoScripts API","version":"1.0.0","description":"Public read API for the RoScripts catalogue of Roblox scripts. No key is required: anonymous calls are rate-limited by IP, and an API key raises the rate limits and the page-size cap. Every script carries a `loadstring` URL for direct execution.","contact":{"name":"RoScripts","url":"https://roscripts.io"}},"servers":[{"url":"https://api.roscripts.io/v1"}],"security":[{},{"bearerAuth":[]}],"paths":{"/scripts":{"get":{"summary":"List / fetch scripts","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"max","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"description":"Capped at 20 for anonymous callers, 100 with an API key."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque keyset cursor (from meta.nextCursor) for stable deep pagination."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["views","likeCount","dislikeCount","createdAt","updatedAt","score","accuracy"],"default":"updatedAt"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"desc"}},{"name":"mode","in":"query","schema":{"type":"string","enum":["free","paid"]}},{"name":"key","in":"query","schema":{"type":"string","enum":["0","1"]},"description":"Filter by key-system."},{"name":"universal","in":"query","schema":{"type":"string","enum":["0","1"]}},{"name":"verified","in":"query","schema":{"type":"string","enum":["0","1"]},"description":"Verified-creator scripts only."},{"name":"patched","in":"query","schema":{"type":"string","enum":["0","1"]}},{"name":"owner","in":"query","schema":{"type":"string"}},{"name":"placeId","in":"query","schema":{"type":"integer"}},{"name":"game","in":"query","schema":{"type":"string"}},{"name":"tag","in":"query","schema":{"type":"string"}},{"name":"ui","in":"query","schema":{"type":"string"},"description":"UI library (e.g. Rayfield)."},{"name":"source","in":"query","schema":{"type":"string","enum":["direct","sirius"]}},{"name":"minViews","in":"query","schema":{"type":"integer"}},{"name":"hasThumbnail","in":"query","schema":{"type":"string","enum":["0","1"]}},{"name":"exclude","in":"query","schema":{"type":"string"},"description":"Exclude a script id from results."},{"name":"updatedSince","in":"query","schema":{"type":"string"},"description":"Unix seconds or ISO 8601. Returns only scripts updated since then."},{"name":"fields","in":"query","schema":{"type":"string"},"description":"Comma-separated sparse fieldset."},{"name":"q","in":"query","schema":{"type":"string"},"description":"Free-text query; routes /scripts through search when present."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScriptList"}}}}}}},"/scripts/search":{"get":{"summary":"Search scripts","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"max","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"description":"Capped at 20 for anonymous callers, 100 with an API key."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque keyset cursor (from meta.nextCursor) for stable deep pagination."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["views","likeCount","dislikeCount","createdAt","updatedAt","score","accuracy"],"default":"updatedAt"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"desc"}},{"name":"mode","in":"query","schema":{"type":"string","enum":["free","paid"]}},{"name":"key","in":"query","schema":{"type":"string","enum":["0","1"]},"description":"Filter by key-system."},{"name":"universal","in":"query","schema":{"type":"string","enum":["0","1"]}},{"name":"verified","in":"query","schema":{"type":"string","enum":["0","1"]},"description":"Verified-creator scripts only."},{"name":"patched","in":"query","schema":{"type":"string","enum":["0","1"]}},{"name":"owner","in":"query","schema":{"type":"string"}},{"name":"placeId","in":"query","schema":{"type":"integer"}},{"name":"game","in":"query","schema":{"type":"string"}},{"name":"tag","in":"query","schema":{"type":"string"}},{"name":"ui","in":"query","schema":{"type":"string"},"description":"UI library (e.g. Rayfield)."},{"name":"source","in":"query","schema":{"type":"string","enum":["direct","sirius"]}},{"name":"minViews","in":"query","schema":{"type":"integer"}},{"name":"hasThumbnail","in":"query","schema":{"type":"string","enum":["0","1"]}},{"name":"exclude","in":"query","schema":{"type":"string"},"description":"Exclude a script id from results."},{"name":"updatedSince","in":"query","schema":{"type":"string"},"description":"Unix seconds or ISO 8601. Returns only scripts updated since then."},{"name":"fields","in":"query","schema":{"type":"string"},"description":"Comma-separated sparse fieldset."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScriptList"}}}}}}},"/scripts/trending":{"get":{"summary":"Trending scripts","parameters":[{"name":"max","in":"query","schema":{"type":"integer"}},{"name":"placeId","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScriptList"}}}}}}},"/scripts/{ref}":{"get":{"summary":"Get a script by id, slug, or shortId","parameters":[{"name":"ref","in":"path","required":true,"schema":{"type":"string"}},{"name":"related","in":"query","schema":{"type":"string","enum":["0","1"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScriptDetail"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/scripts/{ref}/raw":{"get":{"summary":"Raw Lua source (free, keyless scripts only)","parameters":[{"name":"ref","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lua source","content":{"text/plain":{"schema":{"type":"string"}}}},"402":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/scripts/{ref}/versions":{"get":{"summary":"Version history","parameters":[{"name":"ref","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/scripts/batch":{"post":{"summary":"Resolve many scripts at once","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"refs":{"type":"array","items":{"type":"string"}}},"required":["refs"]}}}},"responses":{"200":{"description":"OK"}}}},"/games":{"get":{"summary":"Game directory","parameters":[{"name":"page","in":"query","schema":{"type":"integer"}},{"name":"max","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK"}}}},"/games/{placeId}":{"get":{"summary":"Game info","parameters":[{"name":"placeId","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK"},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/games/{placeId}/scripts":{"get":{"summary":"Scripts for a game","parameters":[{"name":"placeId","in":"path","required":true,"schema":{"type":"integer"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"max","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"description":"Capped at 20 for anonymous callers, 100 with an API key."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque keyset cursor (from meta.nextCursor) for stable deep pagination."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["views","likeCount","dislikeCount","createdAt","updatedAt","score","accuracy"],"default":"updatedAt"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"desc"}},{"name":"mode","in":"query","schema":{"type":"string","enum":["free","paid"]}},{"name":"key","in":"query","schema":{"type":"string","enum":["0","1"]},"description":"Filter by key-system."},{"name":"universal","in":"query","schema":{"type":"string","enum":["0","1"]}},{"name":"verified","in":"query","schema":{"type":"string","enum":["0","1"]},"description":"Verified-creator scripts only."},{"name":"patched","in":"query","schema":{"type":"string","enum":["0","1"]}},{"name":"owner","in":"query","schema":{"type":"string"}},{"name":"placeId","in":"query","schema":{"type":"integer"}},{"name":"game","in":"query","schema":{"type":"string"}},{"name":"tag","in":"query","schema":{"type":"string"}},{"name":"ui","in":"query","schema":{"type":"string"},"description":"UI library (e.g. Rayfield)."},{"name":"source","in":"query","schema":{"type":"string","enum":["direct","sirius"]}},{"name":"minViews","in":"query","schema":{"type":"integer"}},{"name":"hasThumbnail","in":"query","schema":{"type":"string","enum":["0","1"]}},{"name":"exclude","in":"query","schema":{"type":"string"},"description":"Exclude a script id from results."},{"name":"updatedSince","in":"query","schema":{"type":"string"},"description":"Unix seconds or ISO 8601. Returns only scripts updated since then."},{"name":"fields","in":"query","schema":{"type":"string"},"description":"Comma-separated sparse fieldset."},{"name":"q","in":"query","schema":{"type":"string"},"description":"Free-text query; routes /scripts through search when present."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScriptList"}}}}}}},"/owners/{username}":{"get":{"summary":"Creator profile","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/owners/{username}/scripts":{"get":{"summary":"Scripts by a creator","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"max","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"description":"Capped at 20 for anonymous callers, 100 with an API key."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque keyset cursor (from meta.nextCursor) for stable deep pagination."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["views","likeCount","dislikeCount","createdAt","updatedAt","score","accuracy"],"default":"updatedAt"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"desc"}},{"name":"mode","in":"query","schema":{"type":"string","enum":["free","paid"]}},{"name":"key","in":"query","schema":{"type":"string","enum":["0","1"]},"description":"Filter by key-system."},{"name":"universal","in":"query","schema":{"type":"string","enum":["0","1"]}},{"name":"verified","in":"query","schema":{"type":"string","enum":["0","1"]},"description":"Verified-creator scripts only."},{"name":"patched","in":"query","schema":{"type":"string","enum":["0","1"]}},{"name":"owner","in":"query","schema":{"type":"string"}},{"name":"placeId","in":"query","schema":{"type":"integer"}},{"name":"game","in":"query","schema":{"type":"string"}},{"name":"tag","in":"query","schema":{"type":"string"}},{"name":"ui","in":"query","schema":{"type":"string"},"description":"UI library (e.g. Rayfield)."},{"name":"source","in":"query","schema":{"type":"string","enum":["direct","sirius"]}},{"name":"minViews","in":"query","schema":{"type":"integer"}},{"name":"hasThumbnail","in":"query","schema":{"type":"string","enum":["0","1"]}},{"name":"exclude","in":"query","schema":{"type":"string"},"description":"Exclude a script id from results."},{"name":"updatedSince","in":"query","schema":{"type":"string"},"description":"Unix seconds or ISO 8601. Returns only scripts updated since then."},{"name":"fields","in":"query","schema":{"type":"string"},"description":"Comma-separated sparse fieldset."},{"name":"q","in":"query","schema":{"type":"string"},"description":"Free-text query; routes /scripts through search when present."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScriptList"}}}}}}},"/suggest":{"get":{"summary":"Autocomplete","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"}}}},"/trending/searches":{"get":{"summary":"Trending search queries","responses":{"200":{"description":"OK"}}}},"/stats":{"get":{"summary":"Catalogue stats","responses":{"200":{"description":"OK"}}}},"/health":{"get":{"summary":"Health check","responses":{"200":{"description":"OK"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"rk_live_..."}},"schemas":{"Game":{"type":"object","properties":{"placeId":{"type":"integer"},"name":{"type":"string"},"image":{"type":["string","null"]}}},"Owner":{"type":"object","properties":{"username":{"type":"string"},"verified":{"type":"boolean"},"pro":{"type":"boolean"},"avatar":{"type":["string","null"]}}},"Script":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"shortId":{"type":["string","null"]},"title":{"type":"string"},"description":{"type":"string"},"scriptType":{"type":"string","enum":["free","paid"]},"verified":{"type":"boolean"},"key":{"type":"boolean"},"keyLink":{"type":["string","null"]},"universal":{"type":"boolean"},"patched":{"type":"boolean"},"views":{"type":"integer"},"viewsTotal":{"type":"integer"},"likeCount":{"type":"integer"},"dislikeCount":{"type":"integer"},"excellentCount":{"type":"integer"},"saveCount":{"type":"integer"},"commentCount":{"type":"integer"},"score":{"type":"number"},"game":{"$ref":"#/components/schemas/Game"},"image":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"ui":{"type":["string","null"]},"owner":{"$ref":"#/components/schemas/Owner"},"loadstring":{"type":["string","null"],"description":"Direct-execution URL: loadstring(game:HttpGet(...))()"},"rawUrl":{"type":["string","null"]},"marketplaceUrl":{"type":["string","null"]},"discordUrl":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"Meta":{"type":"object","properties":{"page":{"type":"integer"},"max":{"type":"integer"},"count":{"type":"integer"},"total":{"type":["integer","null"]},"totalPages":{"type":["integer","null"]},"nextPage":{"type":["integer","null"]},"nextCursor":{"type":["string","null"]}}},"ScriptList":{"type":"object","properties":{"result":{"type":"object","properties":{"scripts":{"type":"array","items":{"$ref":"#/components/schemas/Script"}}}},"meta":{"$ref":"#/components/schemas/Meta"}}},"ScriptDetail":{"type":"object","properties":{"result":{"type":"object","properties":{"script":{"$ref":"#/components/schemas/Script"},"related":{"type":"array","items":{"$ref":"#/components/schemas/Script"}}}}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object"}}}}}}}}