Add a thank-you video to Shopify's order status page with a Sume MP4

Render one thank-you MP4 on Sume, host it yourself, and surface it on Shopify's Thank you and Order status pages with a checkout UI extension.

5 min readSume
All posts

The page after payment is the one every buyer sees. A short thank-you clip there costs you one render, not one per order. The work is in two places: making an MP4 you can host, and getting Shopify to show it.

What Shopify lets you add

Shopify's Thank you and Order status guide says a UI extension can add custom content such as surveys, reviews, upsell offers, social sharing and download links. The two targets are purchase.thank-you and customer-account.order-status. On the Thank you page the order is not created yet but its id is available; on the Order status page the order is always available. Extensions can use fetch for network calls.

The component reference lists components such as s-image, s-heading, s-text and s-button. I did not find a video component on the pages I read, so the safe pattern is a poster s-image and an s-button that links to the MP4 or to a page that plays it. Recheck the reference before you build; it changes.

Render the clip once

Make a 6 to 8 second brand moment: your packshot as the first frame, a slow push-in, a closing beat. On Sume that is minimax-h3-max at 768p, $0.10 per second, so 8 seconds is $0.80. The generation is asynchronous: submit, poll the polling_url, then download the content. Send an Idempotency-Key so a retry returns the same job.

import os
import time
import requests

H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
job = requests.post(
    "https://api.sume.com/v1/videos",
    headers={**H, "Idempotency-Key": "thank-you-clip-001"},
    json={
        "model": "minimax-h3-max",
        "prompt": "Slow push-in on the product, soft light, no text",
        "duration": 8,
        "resolution": "768p",
        "frame_images": [{
            "type": "image_url",
            "image_url": {"url": "https://example.com/packshot.jpg"},
            "frame_type": "first_frame",
        }],
    },
    timeout=60,
).json()
for _ in range(60):
    s = requests.get(job["polling_url"], headers=H, timeout=60).json()
    if s["status"] in ("completed", "failed", "cancelled"):
        break
    time.sleep(30)
print(s["status"], s.get("unsigned_urls"))

Host it where the storefront can reach it

Do not point a storefront at a job URL. Download the finished file, put the MP4 on storage or a CDN you control, and give Shopify that public HTTPS address. Keep the Sume job id with the file for your records.

The extension side, in outline

  • Register the purchase.thank-you.block.render target for the Thank you page and the order-status target for the later page.
  • Render a heading, the poster image and a button whose link is your hosted MP4.
  • Merchants place block targets in the checkout editor, so the position is theirs to move.
  • No API in an extension can change an order, so keep the video generic, not order-specific.

Cost and cadence

One 8-second clip is $0.80 on Sume, and it serves every order until you change the campaign. Rerender for each season, and store each version under a dated name so the extension can point at it by configuration rather than a code edit.

Sources

Related posts

More in Integrations

All Integrations posts

Written by Sume