メインコンテンツまでスキップ

SuperSplat API (1.0.0)

Download OpenAPI specification:Download

Use this API to upload Gaussian splat scenes and list the scenes owned by the authenticated user.

Typical upload flow:

  1. Create a resumable upload session with a source format and optional display metadata.
  2. Request signed URLs for the part numbers you want to upload, then PUT the bytes to those URLs.
  3. Complete the upload with the uploaded part ETags. The splat is created immediately and may remain in processing while processing finishes.

Account

Caller identity.

Get the authenticated caller

Returns the authenticated caller identity.

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "id": "123",
  • "username": "artist"
}

Splats

List and inspect splats owned by the authenticated user.

List splats owned by the authenticated caller

Returns a paginated list of splats owned by the authenticated user. The response uses visibility; there is no separate listed boolean in this API.

Authorizations:
bearerAuth
query Parameters
limit
integer [ 1 .. 128 ]
Default: 50
Examples: limit=50

Maximum number of splats to return.

skip
integer [ 0 .. 100000 ]
Default: 0
Examples: skip=0

Number of splats to skip.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

Get a splat owned by the authenticated caller

Returns a single splat owned by the authenticated user. Newly completed uploads may return status: "processing" until processing finishes.

Authorizations:
bearerAuth
path Parameters
splatId
required
string [ 1 .. 100 ] characters
Examples: a1b2c3d4

Opaque public splat id.

Responses

Response samples

Content type
application/json
{
  • "id": "a1b2c3d4",
  • "title": "garden-scan",
  • "description": "",
  • "status": "processing",
  • "visibility": "unlisted",
  • "format": null,
  • "size": 0,
  • "createdAt": "2026-01-01T00:00:00.000Z",
  • "updatedAt": "2026-01-01T00:00:00.000Z",
  • "completedAt": null
}

Uploads

Create and complete resumable splat uploads.

Create a resumable splat upload

Starts a multipart upload and returns a resumable upload session. title is optional; when omitted, PlayCanvas assigns a default title. New splats are unlisted by default. Use softwareTools to explicitly attribute catalogue software IDs to the created splat.

Authorizations:
bearerAuth
header Parameters
Idempotency-Key
string [ 1 .. 200 ] characters
Examples: upload-garden-scan-2026-01-01

Optional key for retrying create-upload requests safely. Reusing the same key returns the existing upload session.

Request Body schema: application/json
required
integer or null

Total source file size in bytes. Optional but strongly recommended; when provided, PlayCanvas can reject over-limit uploads before S3 multipart upload starts.

sourceFormat
required
string
Enum: "ply" "sog" "ssog" "lcc"

Format of the file being uploaded. Use ply for raw Gaussian splat PLY files, sog for SOG files, ssog for SSOG archives exported by SuperSplat, and lcc for LCC archives.

title
string [ 1 .. 100 ] characters

Optional display title for the splat. If omitted, PlayCanvas assigns a default title.

description
string <= 5000 characters

Optional display description for the splat.

object (UploadClient)

Optional application details for the client creating the upload.

softwareTools
Array of strings <= 6 items unique [ items [ 1 .. 64 ] characters ^[a-z0-9][a-z0-9-]{0,63}$ ]

Optional software catalogue IDs to attribute to the created splat. Use the software catalogue endpoint to discover currently supported IDs; this field is not an OpenAPI enum because the catalogue may grow over time.

Responses

Request samples

Content type
application/json
Example

Create an upload session with a known file size.

{
  • "sourceFormat": "ply",
  • "contentLength": 125829120,
  • "title": "Garden scan"
}

Response samples

Content type
application/json
{
  • "id": "upl_0123456789abcdef01234567",
  • "status": "created",
  • "contentLength": 125829120,
  • "sourceFormat": "ply",
  • "title": "Garden scan",
  • "description": "",
  • "partSize": 67108864,
  • "uploadedParts": [ ],
  • "expiresAt": "2026-01-01T00:00:00.000Z"
}

Get a resumable upload session

Returns upload session state and any parts already observed by the server. Use this to resume an interrupted upload.

Authorizations:
bearerAuth
path Parameters
uploadId
required
string [ 1 .. 200 ] characters
Examples: upl_0123456789abcdef01234567

Opaque resumable upload session id.

Responses

Response samples

Content type
application/json
{
  • "id": "upl_0123456789abcdef01234567",
  • "status": "uploading",
  • "contentLength": 125829120,
  • "sourceFormat": "ply",
  • "title": "Garden scan",
  • "description": "",
  • "partSize": 67108864,
  • "uploadedParts": [
    ],
  • "expiresAt": "2026-01-01T00:00:00.000Z"
}

Create signed URLs for upload parts

Returns signed URLs for the requested part numbers. Upload each file part to its URL with HTTP PUT, then keep the returned ETag for completion.

Authorizations:
bearerAuth
path Parameters
uploadId
required
string [ 1 .. 200 ] characters
Examples: upl_0123456789abcdef01234567

Opaque resumable upload session id.

Request Body schema: application/json
required
parts
required
Array of integers [ 1 .. 100 ] items [ items [ 1 .. 10000 ] ]

One-based part numbers to create signed upload URLs for. Calculate these by splitting the source file using the upload session partSize, and request only the parts you are ready to upload.

Responses

Request samples

Content type
application/json
{
  • "parts": [
    ]
}

Response samples

Content type
application/json
{}

Complete a resumable upload and publish the splat

Completes the multipart upload and creates a splat. Use the returned splatId to fetch the splat representation; it can remain processing while PlayCanvas prepares the final viewer assets.

Authorizations:
bearerAuth
path Parameters
uploadId
required
string [ 1 .. 200 ] characters
Examples: upl_0123456789abcdef01234567

Opaque resumable upload session id.

Request Body schema: application/json
required
required
Array of objects [ 1 .. 10000 ] items

Uploaded parts to commit. Include each uploaded part number and its S3 ETag.

Array ([ 1 .. 10000 ] items)
partNumber
required
integer [ 1 .. 10000 ]

One-based part number in the multipart upload.

etag
required
string non-empty

ETag returned by S3 after uploading this part.

Responses

Request samples

Content type
application/json
{
  • "parts": [
    ]
}

Response samples

Content type
application/json
{}