API Reference
/
POST /v1/uploads/splat-images
POST /api/v1/uploads/splat-images
Create short-lived signed upload URLs for a Scene thumbnail, a JPEG depth map, or both. Upload these images before committing the Scene.
POST
https://moshpit.studio/api/v1/uploads/splat-images
Auth
All three headers are required:
Authorization: Bearer msk_YOUR_SECRET_KEY
X-Moshpit-Public-Key: mpk_YOUR_PUBLIC_KEY
X-Moshpit-External-User-Id: YOUR_HOST_USER_IDProvision the external user first with PUT /api/v1/external-user.
REST API access
REST API access is included on Free, Pro, and Enterprise. Storage, Scene counts, and integration limits still apply.
Body
Send thumbnail, depth, or both:
JSON
{
"thumbnail": {
"contentType": "image/webp",
"fileSize": 482193
},
"depth": {
"contentType": "image/jpeg",
"fileSize": 718244
}
}Thumbnails accept image/jpeg, image/png, or image/webp. Depth maps accept
image/jpeg. Each image may be at most 8 MB, and both images together may be
at most 16 MB.
Success response
The response contains one object for each requested image:
JSON
{
"status": "success",
"thumbnail": {
"uploadUrl": "https://...",
"fileUrl": "https://cdn.example.com/splat-images/external-user/thumbnail.webp",
"expiresAt": "2026-05-20T12:05:00.000Z"
},
"depth": {
"uploadUrl": "https://...",
"fileUrl": "https://cdn.example.com/splat-images/external-user/depth.jpg",
"expiresAt": "2026-05-20T12:05:00.000Z"
}
}Upload each requested image within five minutes:
PUT {uploadUrl}
Content-Type: image/webp
Content-Length: 482193
Cache-Control: public, max-age=31536000, immutableUse the content type and byte count from the matching request object. Send the
Cache-Control header exactly as shown because it is part of the signed upload
request.
Then pass the returned URLs to
POST /api/v1/splats:
JSON
{
"title": "Lobby scan",
"splatUrl": "https://cdn.example.com/splats/external-user/scene.sog",
"imageUrl": "{thumbnail.fileUrl}",
"thumbnailDepthUrl": "{depth.fileUrl}"
}imageUrl is required when you provide thumbnailDepthUrl. All URLs must
belong to the same external user as the Scene upload.
Error responses
| Status | Cause |
|---|---|
| 400 | Missing external user, invalid JSON, no image requested, unsupported type, or size limit |
| 401 | Missing or invalid Bearer / public-key combination, including an inactive or unknown external user |
| 403 | The integration owner's plan does not include REST API access |
| 500 | Moshpit could not create a signed upload URL |