VoxBox

VoxBox API

Programmatic access to the VoxBox platform.

Base URL: https://voxbox.store

Contact: andromikulic@gmail.com

Authentication

POST /api/auth/sign-in

Log in with username/email and password.

Request

{
  "username": "your_username_or_email",
  "password": "your_password"
}

Response

{
  "accessToken": "your_access_jwt",
  "refreshToken": "your_refresh_jwt"
}

Note: Only the refresh token is used for authenticated requests.

Models

POST /api/model/upload

Upload a new model (requires authentication).

Headers

HeaderValueRequiredDetails
Cookiejwt=*refresh jwt*YesRefresh JWT used for authentication
Content-Typemultipart/form-dataYesRequired for file upload requests

Body

FieldTypeRequiredDetails
namestringYes2–64 characters
descriptionstringYesMax 512 characters
categoryenumYesCharacter, Environment, Prop, Vegetation, Vehicle, Random, Weapon, Architecture
licenseenumYesCC-0, CC-BY, CC-BY-SA, CC-BY-ND, CC-BY-NC, CC-BY-NC-SA, CC-BY-NC-ND
animatedboolean (string)Yes"true" | "false"
publicboolean (string)Yes"true" | "false"
videostringNoYouTube URL (optional)
voxFileYes.vox model file
coverFileYesImage file (thumbnail/preview)

cURL example


curl 'https://voxbox.store/api/model/upload'   -X POST   -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0'   -H 'Accept: */*'   -H 'Accept-Language: en-US,en;q=0.9'   -H 'Accept-Encoding: gzip, deflate, br, zstd'   -H 'Referer: https://voxbox.store/upload'   -H 'Content-Type: multipart/form-data; boundary=----geckoformboundaryda415da44f71c620b7e0b435ea1a4280'   -H 'Origin: https://voxbox.store'   -H 'DNT: 1'   -H 'Sec-GPC: 1'   -H 'Connection: keep-alive'   -H 'Cookie: jwt=*here goes your JWT*'   -H 'Sec-Fetch-Dest: empty'   -H 'Sec-Fetch-Mode: cors'   -H 'Sec-Fetch-Site: same-origin'   -H 'Priority: u=0'   --data-binary   $'------geckoformboundaryda415da44f71c620b7e0b435ea1a4280
Content-Disposition: form-data; name="name"

Test
------geckoformboundaryda415da44f71c620b7e0b435ea1a4280
Content-Disposition: form-data; name="description"

ttest
------geckoformboundaryda415da44f71c620b7e0b435ea1a4280
Content-Disposition: form-data; name="category"

Vehicle
------geckoformboundaryda415da44f71c620b7e0b435ea1a4280
Content-Disposition: form-data; name="animated"

true
------geckoformboundaryda415da44f71c620b7e0b435ea1a4280
Content-Disposition: form-data; name="cover"; filename="Screenshot 2026-04-30 at 10.11.15.png"
Content-Type: image/png

------geckoformboundaryda415da44f71c620b7e0b435ea1a4280
Content-Disposition: form-data; name="vox"; filename="axe.vox"
Content-Type: application/octet-stream

------geckoformboundaryda415da44f71c620b7e0b435ea1a4280
Content-Disposition: form-data; name="license"

CC-0
------geckoformboundaryda415da44f71c620b7e0b435ea1a4280
Content-Disposition: form-data; name="public"

false
------geckoformboundaryda415da44f71c620b7e0b435ea1a4280--
'

Response

{
  "id": "model_id",
  "status": "success"
}

PATCH /api/model/update

Update an existing model (new version if .vox is provided).

Headers

HeaderValueRequiredDetails
Cookiejwt=*refresh jwt*YesRefresh JWT used for authentication
Content-Typemultipart/form-dataYesRequired for file uploads

Body

FieldTypeRequiredDetails
idstringYesModel identifier
namestringNo2–64 characters
descriptionstringNoMax 512 characters
categoryenumNoCharacter, Environment, Prop, Vegetation, Vehicle, Random, Weapon, Architecture
licenseenumNoCC-0, CC-BY, CC-BY-SA, CC-BY-ND, CC-BY-NC, CC-BY-NC-SA, CC-BY-NC-ND
animatedboolean (string)No"true" | "false"
publicboolean (string)No"true" | "false"
videostringNoYouTube URL
voxFileNo.vox model file (creates new version if provided)
coverFileNoImage file (thumbnail/preview)

GET /api/model/search

Search and paginate models with filtering by category, license, rating, size, upload period, and more.

Headers

HeaderValueRequiredDetails
Cookiejwt=*refresh jwt*YesRefresh JWT used for authentication

Query Parameters

ParameterTypeRequiredDetails
sortOrderenumNoSort direction. ASC | DESC. Defaults to DESC.
pageintegerNoZero-indexed page number. Defaults to 0.
countintegerNoResults per page. Defaults to 32.
sortByenumNoColumn to sort by. name, uploadTime, size, rating. Defaults to uploadTime.
userIdstringNoFilter by model creator user ID.
usernamestringNoCase-insensitive substring match on the creator's username.
namestringNoCase-insensitive substring match on the model name.
categoriesenum[]NoOne or more categories. Accepts a single value or repeated keys. Character, Environment, Prop, Vegetation, Vehicle, Random, Weapon, Architecture
licensesenum[]NoOne or more licenses. Accepts a single value or repeated keys. CC-0, CC-BY, CC-BY-SA, CC-BY-ND, CC-BY-NC, CC-BY-NC-SA, CC-BY-NC-ND
animatedboolean (string)No"true" | "false"
sizeRangeDtoNoFile size range in MB. Clamped to configured max. Converted to bytes internally. Defaults to full range.
uploadPeriodRangeDtoNoUnix timestamp range (ms). Clamped to [0, now]. Defaults to full range.
ratingRangeDtoNoRating range clamped to configured min/max. Defaults to full range.

RangeDto: { start: number, end: number }

Example request

https://voxbox.store/api/model/search?uploadPeriod%5Bstart%5D=1776853156173&uploadPeriod%5Bend%5D=1778623200000&size%5Bstart%5D=1.9&size%5Bend%5D=6.9&rating%5Bstart%5D=2&rating%5Bend%5D=3.3&username=TestCreator&animated=true&categories%5B0%5D=Environment&categories%5B1%5D=Vehicle&name=TestName&sortBy=size&sortOrder=ASC&licenses%5B0%5D=CC-BY&licenses%5B1%5D=CC-BY-NC-ND

Response

{
  "data": [
    {
      "id": "fhs7808ysc",
      "userId": "jH1JS0P3WJ",
      "username": "mgerhardy",
      "name": "caveexpress npc mammoth",
      "description": "",
      "category": "Character",
      "video": null,
      "animated": false,
      "public": true,
      "license": "CC-0",
      "uploadTime": 1742541224241,
      "lastUpdateTime": 1742552094582,
      "voxFile": "caveexpress-npc-mamut.vox",
      "size": 895231,
      "price": 0,
      "totalRatings": 1,
      "rating": 5,
      "featured": false,
      "versions": [
        {
          "number": 1,
          "modelId": "fhs7808ysc",
          "uploadTime": 1742541224241,
          "endTime": null
        }
      ]
    }
  ],
  "count": 1
}

The count value is the total number of entities that match the query, not the amount of returned objects.

Copyright VoxBox 2026Contact:andromikulic@gmail.com