Braze 404 renders empty: a fallback while the Sume clip renders
Braze turns a 404 into an empty string. Sume returns 409 job_not_completed until a result exists. Map one to a fallback URL so no message goes out blank.

Why does a not-ready clip leave a blank spot in Braze?
Two documented behaviors meet. Sume's GET /v1/jobs/:id/result returns a 409 conflict, job_not_completed, until the job is ready; it never returns an empty result. Braze documents that a 404 from a Connected Content call renders an empty string, and that only a 2xx counts as success.
If your lookup passes the Sume status straight through, a clip that is still rendering becomes a hole in the message.
What maps to what?
| Source state | Bad pass-through | What your lookup should return |
|---|---|---|
| Sume job running or queued (result 409 job_not_completed) | 409 or 404, Braze inserts nothing useful | 200 with a fallback still URL |
| Sume job completed | n/a | 200 with the stored video_url |
| Sume job failed | 404 or 5xx, Braze retries or blanks | 200 with the fallback URL, then alert yourself |
| Unknown user key | 404, empty string | 200 with the fallback URL |
How do I read the state?
Read GET /v1/jobs/:id/status and stop on completed, failed or canceled. Do the fetch of /result only when the job is completed. The lookup itself should read your own store, not call Sume, so it stays inside Braze's 2 second budget; a job-state change updates the store through the webhook.
Redirects are not followed by Braze, so store the final https://media.sume.com URL, not a short link that redirects.
curl https://api.sume.com/v1/jobs/job_123/status \
-H "Authorization: Bearer $SUME_API_KEY"
curl -i https://api.sume.com/v1/jobs/job_123/result \
-H "Authorization: Bearer $SUME_API_KEY"
# 409 job_not_completed until the job is readyWhat fallback works well?
A still frame or a static banner at the same aspect ratio keeps the layout stable. The message can read right with the fallback and switch to the clip on the next send. The first post in this series covers the 2 second limit.
Sources
Related posts
More in Integrations
- Braze retries a 500: keep the Sume job submit idempotent
Braze sends 500 and 502 responses to retry logic, and a :retry option exists. Give every Sume submit a stable Idempotency-Key so a retry is not a second bill.
- Cloudflare Worker: keep the image model id in KV and swap it live
A Worker that proxies POST /v1/images and reads the Sume model id from Workers KV, so replacing gpt-image-1 is a wrangler command, not a deploy.
- GitHub Actions repository variable for the image model id: no commit
Keep the Sume image model id in a GitHub Actions repository variable, so a gpt-image-1 replacement is a settings change or one gh command, not a pull request.
- Intercom outbound message with a Sume avatar clip: email or in-app
Intercom's create-message API sends in_app, email or whatsapp with an HTML or plain body. It documents no video field, so link a Sume clip. How to set it up.
Written by Sume