Threads topic tag: 1 to 50 characters, no periods or ampersands

Meta's Threads API accepts a topic tag of 1 to 50 characters and rejects periods and ampersands. Validate the tag in code before you publish a Sume clip.

5 min readSume
All posts

A Threads topic tag must be 1 to 50 characters long, and periods and ampersands are not allowed. Check the tag in your own code before you call the Threads API, because a rejected tag fails the post after Sume has already rendered the clip.

Sume renders and trims the MP4. The tag is a field of your own Threads API call, so Sume does not set it.

What does Meta allow in a topic tag?

The Threads posts page states the length range and the two banned characters. Anything else on that page is a different limit.

Threads topic tag rules (read 2026-10-05)
RuleValueCheck in code
Length1 to 50 characters1 <= len(tag) <= 50
PeriodsNot allowedreject .
AmpersandsNot allowedreject &

How do I validate it before publishing?

This stdlib function returns a reason string, or None when the tag is fine. Run it on the tag before the render step, so a bad tag never costs a job.

def tag_problem(tag):
    if not 1 <= len(tag) <= 50:
        return "length must be 1 to 50 characters"
    for bad in (".", "&"):
        if bad in tag:
            return "tag contains %r" % bad
    return None

for t in ["sume clips", "a.b", "R&D", "x" * 51]:
    print(repr(t[:12]), tag_problem(t))

Where does Sume fit?

Render the clip first, then post. The trim call below cuts a 30 second range and conforms it to 1080 by 1920 at 30 frames per second. The docs list a public rate of $0.02 per trim job and require an Idempotency-Key.

Poll the job as the Jobs and results page describes, then pass the returned video_url to your Threads media container.

curl -X POST https://api.sume.com/v1/video-trim \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: threads-tag-001" \
  -d '{"video_url": "https://media.sume.com/artifacts/artf_demo/talk.mp4", "start": 0, "duration": 30, "output": {"width": 1080, "height": 1920, "fps": 30}}'

Sources

Related posts

More in Integrations

All Integrations posts

Written by Sume