API
API Tokens
Your login token is the same as your API token. To reset/reroll your API token, contact support.
API Wrappers
Domains
a.acrylix.vip - API base url
s.acrylix.vip - direct downloads
wv.acrylix.vip - webviews
Errors
Errors are returned in JSON format with a message key. The status code is usually 400.
{
"message": "..."
}
RankEnum
This enum represents all possible user ranks.
Rust:
#[derive(Serialize)]
pub enum Rank {
Regular,
Premium,
Admin
}
TypeScript:
enum Rank {
Regular = "Regular",
Premium = "Premium",
Admin = "Admin"
}
Endpoints
Getting Global Account Features
Send a GET request to /accounts/features.
Example:
await fetch("https://a.acrylix.vip/accounts/features")
Example Response:
{
"invite_keys_required": false
}
Getting Info About Your Account
Send a GET request to /accounts/fetch with your authorization token.
Example:
await fetch("https://a.acrylix.vip/accounts/fetch", {
headers: {
"authorization": "...",
},
method: "GET"
})
Example Response:
{
"id": "519e7c61-5380-49f2-93a5-a9dfe62e5b5d",
"rank": "Admin", // RankEnum
"username": "test"
}
Getting a List of Your Uploads
Send a GET request to /uploads/list with your authorization token.
- By default, this returns the first 10 cached items. Use
?show_all=trueto get all uploads. - Use
?folder_id=<folder_id>&show_all=trueto list files within a folder.
Example:
await fetch("https://a.acrylix.vip/uploads/list", {
headers: {
"authorization": "...",
},
method: "GET"
})
Example Response:
{
"files": [
{
"id": "naEOtsJ7XcKlN7vxzCbgRVbzM1vW4unlYo",
"is_folder": false,
"name": "output.m3u8"
},
{
"id": "naWJiGPhT8bJ5q8LKkn9Tu8ddj62scwYOu",
"is_folder": false,
"name": "output9.ts"
}
],
"folders": [
{
"id": "flrzyXSSBe94TL7ytMV4Jo9y5FUydSezsu",
"is_folder": true,
"name": "Testing"
}
],
"total_folders": 1,
"total_files": 2
}
Uploading a File
Send a POST request to /uploads/create. You must provide the original file name in the ?original_filename= query parameter
Text input is always sanitized and is limited to English characters, _, -, numbers and spaces only and maximum length of 150 characters.
Under 40 Megabytes (Single request upload)
Send the file data directly in the request body.
Example:
await fetch("https://a.acrylix.vip/uploads/create?original_filename=test", {
headers: {
"authorization": "...",
},
body: "Data here",
method: "POST"
})
Example Response:
{
"file_id": "eu5v2mPhgQjIL7otmMiyVWf9jjsegKQd5f",
"raw_url": "https://s.acrylix.vip/eu5v2mPhgQjIL7otmMiyVWf9jjsegKQd5f",
"webview_url": "https://wv.acrylix.vip/eu5v2mPhgQjIL7otmMiyVWf9jjsegKQd5f"
}
Above 40 Megabytes (Chunked/streamed upload)
-
Start Chunking: Send a
POSTrequest with?use_chunking=true.await fetch("https://a.acrylix.vip/uploads/create?original_filename=test&use_chunking=true", { headers: { "authorization": "...", }, method: "POST" })This will return a
continuation_id. -
Upload Chunks: Send the data in 40MB chunks. You need to include the
continuation_idin thex-continuation-idheader.await fetch("https://a.acrylix.vip/uploads/create?original_filename=test&use_chunking=true", { headers: { "authorization": "...", "x-continuation-id": "...", }, body: "your data here", method: "POST" }) -
Finish Chunking: Send a final request with
&final_chunk=true.await fetch("https://a.acrylix.vip/uploads/create?original_filename=test&use_chunking=true&final_chunk=true", { headers: { "authorization": "...", "x-continuation-id": "...", }, method: "POST" })This will return the file information:
{ "file_id": "eu5v2mPhgQjIL7otmMiyVWf9jjsegKQd5f", "raw_url": "https://s.acrylix.vip/eu5v2mPhgQjIL7otmMiyVWf9jjsegKQd5f", "webview_url": "https://wv.acrylix.vip/eu5v2mPhgQjIL7otmMiyVWf9jjsegKQd5f" }
Example:
const request = await fetch("https://a.acrylix.vip/uploads/create?original_filename=test&use_chunking=true", {
headers: {
"authorization": "...",
},
method: "POST"
})
const { continuation_id } = await request.json()
console.log("Got continuation_id", continuation_id)
const data = ["First", "Second", "Third"]
for (const chunk of data) {
const request = await fetch("https://a.acrylix.vip/uploads/create?original_filename=test&use_chunking=true", {
headers: {
"authorization": "...",
"x-continuation-id": continuation_id
},
body: chunk,
method: "POST"
})
if (request.status !== 200) {
throw new Error("Upload failed: " + await request.json())
}
console.log("Uploaded chunk", chunk)
}
const final_request = await fetch("https://a.acrylix.vip/uploads/create?original_filename=test&use_chunking=true&final_chunk=true", {
headers: {
"authorization": "...",
"x-continuation-id": continuation_id
},
method: "POST"
})
console.log(await final_request.json())
Deleting a File
Send a POST request to /uploads/delete with the file ID in the ?id= query parameter.
Example Response:
{
"success": true
}
Creating a Folder
Send a POST request to /folders/create with the folder name in the ?folder_name= query parameter.
const request = await fetch("https://a.acrylix.vip/folders/create?folder_name=Folder Name Here", {
headers: {
"authorization": "...",
},
method: "POST"
})
Deleting a Folder
Send a POST request to /folders/delete with the folder ID in the ?id= query parameter.
const request = await fetch("https://a.acrylix.vip/folders/delete?id=id_here", {
headers: {
"authorization": "...",
},
method: "POST"
})
Moving a File Into a Folder
Send a POST request to /folders/move_file with the file_id and folder_id in the JSON body. Set folder_id to null to move the file to the root.
const request = await fetch("https://a.acrylix.vip/folders/move_file", {
headers: {
"authorization": "...",
},
body: JSON.stringify({
file_id: "...",
folder_id: "..." /* or null */
})
method: "POST"
})
Downloading a File
Download the file directly from https://s.acrylix.vip/[FILE_ID_HERE].[FILE_EXTENSION_HERE].
Getting a Webview
Send a GET request to https://wv.acrylix.vip/[FILE_ID_HERE].
Transparency Reports
Send a GET request to /transparency-reports/list. Use the id query parameter to get a single report and page for pagination.
Example Response:
{
"data": [
{
"creation_date": "Wed, 05 Nov 2025 18:34:03 GMT",
"cur_date": "Wed, 05 Nov 2025 19:04:13 GMT",
"id": "cmhmd9ph30004pb013r616qnk",
"is_illegal": "No",
"removal_basis": "Other",
"removal_reason": "This was a test account that's no longer needed.",
"target_type": "Account Terminated"
}
]
}
Note: The is_illegal field is not a boolean and shouldn’t be treated as such.