AssemblyAI Sync API: one call, and Sume STT sync mode

AssemblyAI's Sync API returns a short-clip transcript in one POST. Sume STT mode sync waits up to 30 seconds, then returns the job id to poll if not done.

4 min readSume
All posts

AssemblyAI's Sync API is a single HTTP POST that returns a finished transcript for a short clip in the same response. Sume's closest match is mode: "sync" on STT 1.0: the request blocks for at most wait_timeout_seconds (max 30) and, if the transcript is not ready, returns the job so you can read it by id. It is a bounded wait on a job, not a separate endpoint.

AssemblyAI facts are from its launch post; Sume facts from the OpenAPI schema and docs, read 2026-10-01.

What does AssemblyAI say the Sync API does?

The post says to send a short audio clip in one HTTP request and get a finished Universal-3.5 Pro transcript back in the same response, "in ~134 ms" at p50 for a 2-second clip, with no polling, no WebSocket and no job to manage. That figure is AssemblyAI's own and says nothing about Sume.

What does Sume sync mode do?

One-call behavior compared, read 2026-10-01.
QuestionAssemblyAI Sync APISume STT 1.0 sync
TransportOne HTTP POSTOne HTTP POST with mode: "sync"
Result in the responseYes, for short clipsIf terminal within the wait; otherwise the current job state
Wait capNot stated in the postwait_timeout_seconds, max 30
Job id"No job to manage"Returned in the first response in every mode
Word timingsNot covered in the postAlways returned

What if the transcript is not ready in 30 seconds?

The response is still 2xx and carries the current queued or running state. Keep the job id and read it, as in the 30-second wait guide. The docs also say sync and subscribe are the same bounded wait and recommend async or webhook for new integrations.

How do I make the one call?

Send audio_url, set duration_seconds for the real clip length, and reuse the same Idempotency-Key on a retry. Billing is $0.01 per audio minute on the rate card.

const res = await fetch("https://api.sume.com/v1/stt-1.0/transcribe", {
  method: "POST",
  headers: {
    Authorization: "Bearer " + process.env.SUME_API_KEY,
    "Content-Type": "application/json",
    "Idempotency-Key": "dictation-0001",
  },
  body: JSON.stringify({
    audio_url: "https://media.sume.com/artifacts/example/clip.m4a",
    duration_seconds: 5,
    mode: "sync",
    wait_timeout_seconds: 30,
  }),
});
console.log(res.status, await res.json());

Sources

Related posts

More in Developers

All Developers posts

Written by Sume