{
"event": "scene.completed",
"scene_id": "a1b2c3d4e5f6",
"status": "complete",
"timestamp": "2026-04-13T12:05:00.000Z",
"data": {
"viewer_url": "https://splat-3d.com/tour/a1b2c3d4e5f6",
"num_gaussians": 1940000,
"psnr": 24.28,
"ssim": 0.8123,
"training_time_seconds": 233.7
}
}Scene completed
A scene finished processing. Sent as a POST to the scene’s webhook_url, with Content-Type: application/json and User-Agent: Splat-Webhook/1.0. Answer any 2xx to acknowledge it. Any other status, or a network error, is retried: 3 attempts in all, 1 s then 2 s apart, with the same body and signature. Redirects are followed and the last response counts: a 301, 302 or 303 turns the POST into a GET without the body, so register the final URL. Only scenes created with a webhook_url send events; a retrain’s new version sends none, a cancel sends none, and a launch that fails at /process, which answers with an error, sends none. A scene reported failed whose job then finishes sends scene.completed after scene.failed, so read GET /v1/scenes/{id} for the current state.
{
"event": "scene.completed",
"scene_id": "a1b2c3d4e5f6",
"status": "complete",
"timestamp": "2026-04-13T12:05:00.000Z",
"data": {
"viewer_url": "https://splat-3d.com/tour/a1b2c3d4e5f6",
"num_gaussians": 1940000,
"psnr": 24.28,
"ssim": 0.8123,
"training_time_seconds": 233.7
}
}Headers
Sent only when the scene was created with a webhook_secret. Format t=<unix seconds>,v1=<hex>: v1 is the HMAC-SHA256, keyed with your webhook_secret, of <t>.<raw request body>. To verify, compute it over the body bytes as received (not JSON you re-serialized), compare it with v1 in constant time, and refuse a t older than 5 minutes, which stops replays. Retries carry the same t.
Body
scene.completed "a1b2c3d4e5f6"
The scene's status.
complete When the event was made, UTC with milliseconds. Retries carry the same value.
"2026-04-13T12:05:00.000Z"
A metric the pipeline did not report, or reported as zero, is null.
Show child attributes
Show child attributes
Response
Any 2xx acknowledges the event. The body is ignored.