API Documentation
Public REST API for Scriptory. All endpoints are read-only and require no authentication.
Base URL
/api/v1Rate limit: 60 requests/minute per IP. All responses follow the format { success, data, pagination? }.
Scripts
GET
/api/v1/scriptsList all approved public scripts with pagination, sorting, and filtering.
Parameters
pagenumberPage number (default: 1)limitnumberResults per page (default: 20, max: 50)sortstring"recent", "trending", or "popular"gamestringFilter by Roblox universe IDnoKeystring"true" for scripts without key systemverifiedstring"true" for verified authors onlytagstringFilter by tagResponse
{
"success": true,
"data": [{
"id": "abc123",
"title": "Script Name",
"description": "...",
"author": "username",
"authorVerified": true,
"tags": ["farming", "GUI"],
"views": 1500,
"downloads": 300,
"thumbnail": "https://...",
"createdAt": "2026-03-14T..."
}],
"pagination": { "page": 1, "limit": 20, "total": 350 }
}GET
/api/v1/scripts/:idGet full details of a script including its code.
Parameters
idstringrequiredScript IDResponse
{
"success": true,
"data": {
"id": "abc123",
"title": "Script Name",
"description": "Full description...",
"code": "-- Lua code here",
"author": "username",
"authorVerified": true,
"tags": ["farming"],
"views": 1500,
"downloads": 300,
"images": ["https://..."],
"createdAt": "2026-03-14T...",
"updatedAt": "2026-03-14T..."
}
}GET
/api/v1/scripts/searchSearch scripts by title, description, or tags.
Parameters
qstringrequiredSearch querypagenumberPage number (default: 1)limitnumberResults per page (default: 20, max: 50)Response
{
"success": true,
"data": [{ "id": "...", "title": "...", ... }],
"pagination": { "page": 1, "limit": 20, "total": 42 }
}GET
/api/v1/scripts/trendingGet trending scripts ranked by recent views and downloads.
Parameters
limitnumberNumber of results (default: 20, max: 50)Response
{
"success": true,
"data": [{
"id": "...",
"title": "...",
"trendingScore": 245,
...
}]
}Users
GET
/api/v1/users/:usernameGet a user's public profile information.
Parameters
usernamestringrequiredUsernameResponse
{
"success": true,
"data": {
"username": "bestscripts",
"avatar": "https://...",
"bio": "Script developer",
"isVerified": true,
"scriptsCount": 12,
"followersCount": 340,
"followingCount": 5,
"joinedAt": "2026-01-15T..."
}
}GET
/api/v1/users/:username/scriptsGet all public scripts from a specific user.
Parameters
usernamestringrequiredUsernamepagenumberPage number (default: 1)limitnumberResults per page (default: 20, max: 50)Response
{
"success": true,
"data": [{ "id": "...", "title": "...", ... }],
"pagination": { "page": 1, "limit": 20, "total": 12 }
}Games
GET
/api/v1/games/:universeId/scriptsGet all scripts for a specific Roblox game.
Parameters
universeIdstringrequiredRoblox universe IDpagenumberPage number (default: 1)limitnumberResults per page (default: 20, max: 50)Response
{
"success": true,
"data": [{ "id": "...", "title": "...", ... }],
"pagination": { "page": 1, "limit": 20, "total": 85 }
}Errors
{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests. Try again in 30 seconds."
}
}400 Bad request / missing params404 Resource not found429 Rate limit exceeded500 Internal server error