API Documentation

Public REST API for Scriptory. All endpoints are read-only and require no authentication.

Base URL

/api/v1

Rate limit: 60 requests/minute per IP. All responses follow the format { success, data, pagination? }.

Scripts

GET/api/v1/scripts

List 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 ID
noKeystring"true" for scripts without key system
verifiedstring"true" for verified authors only
tagstringFilter by tag

Response

{
  "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/:id

Get full details of a script including its code.

Parameters

idstringrequiredScript ID

Response

{
  "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/search

Search scripts by title, description, or tags.

Parameters

qstringrequiredSearch query
pagenumberPage 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/trending

Get 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/:username

Get a user's public profile information.

Parameters

usernamestringrequiredUsername

Response

{
  "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/scripts

Get all public scripts from a specific user.

Parameters

usernamestringrequiredUsername
pagenumberPage 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/scripts

Get all scripts for a specific Roblox game.

Parameters

universeIdstringrequiredRoblox universe ID
pagenumberPage 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 params
404 Resource not found
429 Rate limit exceeded
500 Internal server error