Polly speech marks need a separate request; Sume returns timings

Polly returns speech marks instead of audio when you ask for them: sentence, word and viseme metadata. Sume TTS returns words[] timings on the same job result.

4 min readSume
All posts

Amazon Polly's docs say that when you request speech marks, Polly "returns this metadata instead of synthesized speech": where a sentence or word starts and ends in the audio, plus visemes for lip-sync. So you make one call for the audio and another for the marks. On Sume TTS 1.0, one request with timestamps.words: true returns the audio and words[] timings together on the completed job.

Polly's description is from its speech marks page, read 2026-10-01; Sume's from the OpenAPI schema behind the API reference.

Which engines support speech marks on Polly?

The page says speech marks are available with the neural, long-form or standard engines. It does not list generative voices there, so check the engine before you plan on marks.

What does Sume return, and what does it not?

Timing metadata with synthesized speech, read 2026-10-01.
ItemAmazon PollySume TTS 1.0
Calls neededOne for audio, one for speech marksOne job
Word timingsWord speech markswords[] with start and end seconds
SentencesSentence speech markssegmentation.mode: sentence, gapless
VisemesViseme speech marks for lip-syncNot in the TTS contract

How do I do lip-sync without visemes?

Sume's lip-sync is a separate stage that takes audio, not mouth shapes. Use sentence segments to cut clips and feed each audio slice to the avatar or lip-sync step; see sentence segments to drive lip-sync clips.

What does the Sume request look like?

One call, wav output, word timings on.

curl -X POST https://api.sume.com/v1/tts-1.0/generate \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "transcript": "Highlight each word as it is spoken.",
    "avatar_handle": "@narrator",
    "output_format": { "container": "wav", "sample_rate": 44100, "encoding": "pcm_s16le" },
    "timestamps": { "words": true }
  }'

Sources

Related posts

More in Developers

All Developers posts

Written by Sume