{
"event": "scene.failed",
"scene_id": "a1b2c3d4e5f6",
"status": "failed",
"timestamp": "2026-04-13T12:05:00.000Z",
"data": {
"error": "Processing failed."
}
}Scene failed
A scene failed. Its credits are refunded. 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.failed",
"scene_id": "a1b2c3d4e5f6",
"status": "failed",
"timestamp": "2026-04-13T12:05:00.000Z",
"data": {
"error": "Processing failed."
}
}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.failed "a1b2c3d4e5f6"
The scene's status.
failed When the event was made, UTC with milliseconds. Retries carry the same value.
"2026-04-13T12:05:00.000Z"
Show child attributes
Show child attributes
Response
Any 2xx acknowledges the event. The body is ignored.