Introduction
Welcome to the official fruitcore. API documentation. This API allows you to interact with the Fruitcore platform, including user accounts, projects, studios, and moderation systems.
Base URL:
https://exampleurl.com/api
Authentication:
Most endpoints require a JWT token obtained via Login. Send this token in the header.
Authorization: Bearer YOUR_TOKEN_HERE
Rate Limits:
- Global: 2000 requests / 15 mins
- Registration: 10 accounts / hour
- Uploads: 7 projects / hour
Authentication
Content-Type: application/json header, or the request will fail with "Missing fields".
Create a new account. Requires a valid, unused invite code. Users receive 10 invite codes upon registration.
| Body Param | Type | Constraints |
|---|---|---|
| username * | string | 3-20 chars, a-z, A-Z, 0-9, - _ |
| password * | string | Min 6 chars |
| dob * | string | YYYY-MM-DD (Must be 13+) |
| inviteCode * | string | Format: "FRUIT-XXXXXX" |
| captchaToken | string | Optional hCaptcha response |
We change our API URLS sometimes. Get the current API base URL string used by the server.
Response:
{
"url": "https://yada-yada-stupidstuff.trycloudflared.com/api"
}
Authenticate and receive a JWT token.
| Body Param | Type |
|---|---|
| username * | string |
| password * | string |
Response:
{
"token": "eyJhbG...",
"id": 1,
"username": "fruituser",
"is_mod": 0,
"is_verified": 1
}
Get the list of invite codes generated by the current user.
Users & Profile
Get public profile data. :identifier can be a User ID (int) or Username (string).
Returns: User details, recent projects, studios, achievements, followers count.
Get private dashboard data: your projects, studios you own, studios joined, and studios followed.
Update profile. Must use multipart/form-data.
| Form Field | Type | Note |
|---|---|---|
| display_name | string | Non-unique display name |
| bio | string | Profile description |
| announcement_text | string | "Working on" text |
| disable_rainbow | boolean | "true" or "false" |
| avatar | file | Image (GIF requires Verified) |
| banner | file | Image |
| announcement_image | file | Image |
Toggles follow status. Returns { success: true, status: 'followed' | 'unfollowed' }.
Toggles block status. Blocking removes mutual follows.
List all users you have blocked.
Set online status.
| Body Param | Value |
|---|---|
| status | 'online', 'offline', 'dnd' |
Equip a Studio Tag next to your username. You must follow the studio (:sid) first.
Projects
Upload a new project. Limit: 7 uploads per hour. Must use multipart/form-data.
| Form Field | Type | Note |
|---|---|---|
| title * | string | |
| sb3 * | file | .sb3 or .pmp files only |
| thumbnail * | file | Image |
| description | string | |
| tags | string | Comma separated (e.g. "Games, Art") |
| width | int | Default 480 |
| height | int | Default 360 |
| mod_type | string | 'turbowarp' (default) |
Get project metadata, author info, stats, and remix parent info. Increments view count.
Search and filter content.
| Query Param | Values |
|---|---|
| type | 'projects' (default), 'users', 'studios' |
| search | string (search keyword) |
| tag | string (filter by tag) |
| sort | 'trending', 'popular', 'loved', 'featured', 'newest' |
| offset | int (pagination offset) |
Update project details. Must be owner. multipart/form-data.
Accepts: title, description, tags, width, height, mod_type, thumbnail (file), sb3 (file).
Delete a project permanently. Must be owner.
Toggle Like.
Toggle Favorite.
Comments
Post a comment on a Project.
| Body Param | Constraints |
|---|---|
| project_id | Target Project ID |
| content | Max 150 chars |
| parent_id | Optional (for replying) |
Post a comment on a User Profile.
Post a comment in a Studio.
| Body Param | Description |
|---|---|
| content | Max 150 chars |
| parent_id | Reply ID |
| channel_id | Optional (if using channels) |
Get comments for a project. Query param offset supported.
Get comments for a profile.
Get comments for a studio. Query params: offset, channel.
Studios
Create a new studio. Owner automatically gets "Host" role.
| Field | Type |
|---|---|
| title * | string |
| description | string |
| allow_public_adds | "true" or "false" |
| studio_thumb | file |
| studio_banner | file |
Update studio settings. Requires 'manage_settings' permission. GIFs require 60 Hype.
Customize Studio Tag appearance. Requires Hype (Color: 15, Font: 10).
| Body | Params |
|---|---|
| tag_text | string |
| tag_color | hex code |
| tag_font | font name |
Get studio details, projects, members, roles, channels, and hype stats.
Give Hype to a studio. Limit: 1 per day (2 if Verified).
Join a studio directly.
Invite a user (must be mutual/follower). Body: { userId: 123 }.
Body: { inviteId: 5 }.
Add a project. Body: { project_id: 123 }.
List all roles in studio.
Create role. Body: { name: "Moderator" }.
Toggle permission. Body: { perm: "manage_roles", value: true }.
Assign role to member. Body: { role_id: 5 }.
Create channel. Body: { name: "art" }.
Delete channel.
System & News
Get site news posts.
Comment on news post.
Get global system alert message.
Get last 50 notifications.
Mark all as read.
Moderation
Submit a report.
| Body | Description |
|---|---|
| target_id | ID of content |
| target_type | 'project', 'user', 'comment' |
| reason | Text explanation |
ADMIN / MODERATOR ONLY ROUTES
Requires is_mod or is_owner in database.
Body: { id, reason, ip_ban: bool }
Body: { id }
Assign badge. Body: { id, badge: "is_verified", value: 1 }
Publish Site News. Body: { title, content }
Create achievement. Multipart: name, image (file).
Give achievement to user. Body: { user_id }
HARD DELETE USER & ALL DATA