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

⚠️ IMPORTANT: You MUST include the Content-Type: application/json header, or the request will fail with "Missing fields".
POST /register

Create a new account. Requires a valid, unused invite code. Users receive 10 invite codes upon registration.

Body ParamTypeConstraints
username *string3-20 chars, a-z, A-Z, 0-9, - _
password *stringMin 6 chars
dob *stringYYYY-MM-DD (Must be 13+)
inviteCode *stringFormat: "FRUIT-XXXXXX"
captchaTokenstringOptional hCaptcha response
GET /url

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"
}
POST /login

Authenticate and receive a JWT token.

Body ParamType
username *string
password *string

Response:

{
  "token": "eyJhbG...",
  "id": 1,
  "username": "fruituser",
  "is_mod": 0,
  "is_verified": 1
}
GET /me/invites AUTH

Get the list of invite codes generated by the current user.

Users & Profile

GET /users/:identifier

Get public profile data. :identifier can be a User ID (int) or Username (string).

Returns: User details, recent projects, studios, achievements, followers count.

GET /me/stuff AUTH

Get private dashboard data: your projects, studios you own, studios joined, and studios followed.

POST /profile/update AUTH

Update profile. Must use multipart/form-data.

Form FieldTypeNote
display_namestringNon-unique display name
biostringProfile description
announcement_textstring"Working on" text
disable_rainbowboolean"true" or "false"
avatarfileImage (GIF requires Verified)
bannerfileImage
announcement_imagefileImage
POST /users/:id/follow AUTH

Toggles follow status. Returns { success: true, status: 'followed' | 'unfollowed' }.

POST /users/:id/block AUTH

Toggles block status. Blocking removes mutual follows.

GET /me/blocked AUTH

List all users you have blocked.

POST /me/status-update AUTH

Set online status.

Body ParamValue
status'online', 'offline', 'dnd'
POST /me/tag/:sid AUTH

Equip a Studio Tag next to your username. You must follow the studio (:sid) first.

Projects

POST /upload AUTH

Upload a new project. Limit: 7 uploads per hour. Must use multipart/form-data.

Form FieldTypeNote
title *string
sb3 *file.sb3 or .pmp files only
thumbnail *fileImage
descriptionstring
tagsstringComma separated (e.g. "Games, Art")
widthintDefault 480
heightintDefault 360
mod_typestring'turbowarp' (default)
GET /projects/:id

Get project metadata, author info, stats, and remix parent info. Increments view count.

GET /explore

Search and filter content.

Query ParamValues
type'projects' (default), 'users', 'studios'
searchstring (search keyword)
tagstring (filter by tag)
sort'trending', 'popular', 'loved', 'featured', 'newest'
offsetint (pagination offset)
PUT /projects/:id AUTH

Update project details. Must be owner. multipart/form-data.

Accepts: title, description, tags, width, height, mod_type, thumbnail (file), sb3 (file).

DELETE /projects/:id AUTH

Delete a project permanently. Must be owner.

POST /projects/:id/like AUTH

Toggle Like.

POST /projects/:id/favorite AUTH

Toggle Favorite.

Comments

POST /comments AUTH

Post a comment on a Project.

Body ParamConstraints
project_idTarget Project ID
contentMax 150 chars
parent_idOptional (for replying)
POST /users/:id/comments AUTH

Post a comment on a User Profile.

POST /studios/:id/comments AUTH

Post a comment in a Studio.

Body ParamDescription
contentMax 150 chars
parent_idReply ID
channel_idOptional (if using channels)
GET /projects/:id/comments

Get comments for a project. Query param offset supported.

GET /users/:id/comments

Get comments for a profile.

GET /studios/:id/comments

Get comments for a studio. Query params: offset, channel.

Studios

POST /studios AUTH

Create a new studio. Owner automatically gets "Host" role.

FieldType
title *string
descriptionstring
allow_public_adds"true" or "false"
studio_thumbfile
studio_bannerfile
PUT /studios/:id AUTH

Update studio settings. Requires 'manage_settings' permission. GIFs require 60 Hype.

PUT /studios/:id/tag AUTH

Customize Studio Tag appearance. Requires Hype (Color: 15, Font: 10).

BodyParams
tag_textstring
tag_colorhex code
tag_fontfont name
GET /studios/:id

Get studio details, projects, members, roles, channels, and hype stats.

POST /studios/:id/hype AUTH

Give Hype to a studio. Limit: 1 per day (2 if Verified).

POST /studios/:id/join AUTH

Join a studio directly.

POST /studios/:id/invite AUTH

Invite a user (must be mutual/follower). Body: { userId: 123 }.

POST /studios/accept-invite AUTH

Body: { inviteId: 5 }.

POST /studios/:id/add-project AUTH

Add a project. Body: { project_id: 123 }.

GET /studios/:id/roles

List all roles in studio.

POST /studios/:id/roles AUTH

Create role. Body: { name: "Moderator" }.

PUT /studios/:id/roles/:rid/perm AUTH

Toggle permission. Body: { perm: "manage_roles", value: true }.

POST /studios/:id/members/:uid/role AUTH

Assign role to member. Body: { role_id: 5 }.

POST /studios/:id/channels AUTH

Create channel. Body: { name: "art" }.

DELETE /studios/:id/channels/:cid AUTH

Delete channel.

System & News

GET /news

Get site news posts.

GET /news/:id/comments
POST /news/:id/comments AUTH

Comment on news post.

GET /banner

Get global system alert message.

GET /notifications AUTH

Get last 50 notifications.

POST /notifications/read AUTH

Mark all as read.

Moderation

POST /report AUTH

Submit a report.

BodyDescription
target_idID of content
target_type'project', 'user', 'comment'
reasonText explanation

ADMIN / MODERATOR ONLY ROUTES

Requires is_mod or is_owner in database.

GET /mod/stats
GET /mod/reports
GET /mod/logs
GET /mod/search?q=...
POST /mod/ban

Body: { id, reason, ip_ban: bool }

POST /mod/unban

Body: { id }

POST /mod/badge

Assign badge. Body: { id, badge: "is_verified", value: 1 }

POST /mod/news

Publish Site News. Body: { title, content }

POST /mod/achievements

Create achievement. Multipart: name, image (file).

POST /mod/achievements/:id/assign

Give achievement to user. Body: { user_id }

DELETE /mod/user/:id

HARD DELETE USER & ALL DATA

DELETE /mod/project/:id
DELETE /mod/reports/:id
DELETE /mod/reports (Clear All)