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.

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)

  1. Start Chunking: Send a POST request 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.

  2. Upload Chunks: Send the data in 40MB chunks. You need to include the continuation_id in the x-continuation-id header.

    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"
    })
    
  3. 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.