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.

post/v1/splats/uploads

Request

Headers

Idempotency-Keystring

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

Example:upload-garden-scan-2026-01-01

Request body

contentLengthinteger nullable

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

sourceFormat'ply' | 'sog' | 'ssog' | 'lcc' required

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.

titlestring

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

descriptionstring

Optional display description for the splat.

softwareToolsstring[]

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.

Example request

{
  "contentLength": 125829120,
  "sourceFormat": "ply",
  "title": "Garden scan",
  "description": "Back garden scan captured at dusk.",
  "uploadClient": {
    "id": "lcc-studio",
    "version": "1.2.3"
  },
  "softwareTools": [
    "lcc-studio"
  ]
}

Response

Existing upload session for the idempotency key

idstring required

Resumable upload session id.

status'created' | 'uploading' | 'processing' | 'completed' | 'canceled' required

Lifecycle state of the resumable upload session. processing means the bytes have been committed and the splat is being finalized.

contentLengthinteger nullable required

Total source file size declared when creating the upload, or null when the client did not provide one.

sourceFormat'ply' | 'sog' | 'ssog' | 'lcc' required

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.

titlestring required

Display title that will be used for the created splat.

descriptionstring required

Display description that will be used for the created splat.

softwareToolsstring[]

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.

partSizeinteger required

Server-chosen target size in bytes for each uploaded part. Use this to split the file into multipart upload ranges; the final part may be smaller.

expiresAtstring date-time required

When this upload session expires.

Example response

{
  "id": "upl_0123456789abcdef01234567",
  "status": "created",
  "sourceFormat": "ply",
  "title": "garden-scan",
  "softwareTools": [
    "lcc-studio"
  ],
  "partSize": 67108864,
  "uploadedParts": [
    {
      "partNumber": 1,
      "etag": "\"abc123\"",
      "size": 67108864
    }
  ],
  "expiresAt": "2026-01-01T00:00:00.000Z"
}

Changes

No recorded changes to this operation across all 1 revision of this API.