Test a Sume STT webhook locally: webhook_url must be public HTTPS

Sume rejects localhost, private-network and non-HTTPS webhook_url values. Put a tunnel in front of your dev server, or poll while you build.

5 min readSume
All posts

You cannot give Sume http://localhost:3000 as a webhook. The webhook_url on an STT request must be a public HTTPS callback; localhost, private-network and non-HTTPS URLs are rejected. To test a receiver on your laptop, put a tunnel in front of it that gives you a public HTTPS address, or skip webhooks while you build and poll the job status instead.

Either route reaches the same place: a terminal event for the job.

What does Sume accept?

Per the Sume OpenAPI spec, the URL is stored for terminal job callback delivery. Delivery is terminal only, so you receive job.completed, job.failed or job.canceled, and there are no progress or partial callbacks.

webhook_url acceptance, Sume spec read 2026-10-04
URLAccepted?
https://hooks.example.com/sumeYes, public HTTPS
http://hooks.example.com/sumeNo, not HTTPS
https://localhost:3000/hookNo, localhost
https://10.0.0.5/hookNo, private network

How do you develop against it?

Pick the lightest option that matches what you are testing.

  • Testing signature checks: use a tunnel so the real sume-v1 signature reaches your code.
  • Testing only your own handler logic: post a saved payload to it with curl, no Sume call needed.
  • Testing the pipeline end to end without a tunnel: poll the status route and add the webhook later.

What does the request look like?

Read the tunnel address from the environment so the same script works on any machine:

import os, requests

H = {"Authorization": "Bearer " + os.environ["SUME_API_KEY"]}

r = requests.post("https://api.sume.com/v1/stt-1.0/transcribe",
    headers=H, timeout=60,
    json={
        "audio_url": os.environ["AUDIO_URL"],
        "mode": "webhook",
        "webhook_url": os.environ["PUBLIC_HOOK_URL"],
    })
print(r.status_code, r.json()["data"]["job"]["id"] if r.ok else r.text[:200])

What if your receiver misses the call?

A tunnel that is down when the job finishes is the common failure. You do not need to rerun the job; see redelivering a missed webhook. For the wider pattern, read keeping a TTS pipeline portable.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume