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.

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.
| Rule | Value | Check in code |
|---|---|---|
| Length | 1 to 50 characters | 1 <= len(tag) <= 50 |
| Periods | Not allowed | reject . |
| Ampersands | Not allowed | reject & |
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
- TikTok import get_transcript: TikTok only, plan the Instagram fallback
get_transcript on media-imports is TikTok only; Instagram imports return no transcript. Fallback: video_inspect transcribe at $0.01 a minute.
- TruGen and Avatario avatar IDs in LiveKit vs a Sume avatar handle
In LiveKit, TruGen and Avatario pick a face with an avatar_id. Sume uses a stable avatar_handle you create yourself. Here is how they differ.
- Truth Social 15-minute video limit and Sume's 900-second trim cap
Truth Social accepts videos up to 15 minutes and 450 MB. Sume video trim outputs top out at 900 seconds, so one trim job fits. How to cut a longer source.
- Truth Social 450 MB video limit: average bitrate for 15 minutes
A 450 MB cap over a 900-second clip leaves about 4 Mbps for video plus audio. Worked ceilings for 5, 10 and 15 minutes, and a Python check before upload.
Written by Sume