TL;DR, Kurze Antwort
7 Min. LesezeitDie Antwortkontrollen von Bluesky stecken in einem app.bsky.feed.threadgate-Record, dessen Record Key zum Root-Post des Threads passt. Sein allow-Array nimmt bis zu 5 Regeln: mentionRule, followerRule, followingRule und listRule. Ein leeres Array heißt, dass niemand antworten kann, ein fehlendes Array heißt, dass jeder es kann. Derselbe Record hält bis zu 300 URIs versteckter Antworten. Quote-Posts steuert ein separater app.bsky.feed.postgate-Record, dessen disableRule das Einbetten abschaltet und dessen detachedEmbeddingUris bis zu 50 abgelöste Zitate hält.
Was ist ein Bluesky-Threadgate?
Als Bluesky-Threadgate bezeichnet man den Record app.bsky.feed.threadgate, der entscheidet, wer auf einen Thread antworten darf. Das Lexicon beschreibt ihn als „Record defining interaction gating rules for a thread (aka, reply controls).“ Antwortkontrollen sind auf Bluesky weder eine Einstellung deines Kontos noch ein Flag am Post. Sie sind dieser Record, gespeichert in deinem eigenen Repository.
Er ist ein eigener Record, kein Feld am Post. Dieses Design hat eine Folge, die viele übersehen: Du kannst Antwortkontrollen für einen Post, der schon live ist, hinzufügen, ändern oder löschen, weil sich der Post-Record selbst nie ändert.
Das Lexicon legt fest, wo der Record liegen muss: „The record key (rkey) of the threadgate record must match the record key of the thread's root post, and that record must be in the same repository.“ Ein Threadgate gehört zu einem Root-Post, im eigenen Repo des Autors, unter demselben rkey.
Welche Felder hat der Threadgate-Record?
Vier, und zwei davon sind Pflicht.
| Feld | Typ | Pflicht | Beschreibung im Lexicon |
|---|---|---|---|
post | at-uri | Ja | „Reference (AT-URI) to the post record.“ |
createdAt | datetime | Ja | Keine |
allow | Array, max. 5 | Nein | „List of rules defining who can reply to this post.“ |
hiddenReplies | Array aus at-uri, max. 300 | Nein | „List of hidden reply URIs.“ |
Ein vollständiger Record, der erwähnten Konten und einer Liste das Antworten erlaubt, sieht so aus:
{
"$type": "app.bsky.feed.threadgate",
"post": "at://did:plc:abc123/app.bsky.feed.post/3kxyzpost",
"allow": [
{ "$type": "app.bsky.feed.threadgate#mentionRule" },
{
"$type": "app.bsky.feed.threadgate#listRule",
"list": "at://did:plc:abc123/app.bsky.graph.list/3kxyzlist"
}
],
"createdAt": "2026-09-24T10:00:00.000Z"
}Du schreibst ihn mit com.atproto.repo.createRecord, setzt collection auf app.bsky.feed.threadgate und rkey auf den rkey des Posts, also das letzte Segment der AT-URI des Posts. Blueskys Seite zu Thread Gates zeigt denselben Schritt in ihrem TypeScript-Beispiel: const { rkey } = new AtUri(postUri).
Welche allow-Regeln kann ein Bluesky-Threadgate nutzen?
Vier Regeltypen, jeder ein Objekt in allow. Blueskys Dokumentation listet sie mit einzeiligen Definitionen:
| Regel | Wer antworten darf |
|---|---|
app.bsky.feed.threadgate#mentionRule | „Allow replies from actors mentioned in your post.“ |
app.bsky.feed.threadgate#followingRule | „Allow replies from actors you follow.“ |
app.bsky.feed.threadgate#followerRule | „Allow replies from actors following you.“ |
app.bsky.feed.threadgate#listRule | „Allow replies from actors on a list.“ |
Drei der vier haben gar keine Properties. listRule ist die Ausnahme: Ihr Feld list ist Pflicht und nimmt die AT-URI eines app.bsky.graph.list-Records.
Die Regeln addieren sich, statt einzuschränken. Blueskys Beispiel packt mentionRule, followingRule und listRule in ein Array mit den Kommentaren „allow mentioned users“, „allow followed users“ und „allow list members“, jede Regel öffnet die Antworten also für eine weitere Gruppe.
mentionRule hängt davon ab, wie der Post seine Erwähnungen kodiert. In einem Post-Record ist eine Erwähnung ein Facet app.bsky.richtext.facet#mention, und das Facet-Lexicon merkt an: „The text is usually a handle, including a '@' prefix, but the facet reference is a DID.“ Ein @handle, das als reiner Text ohne Facet getippt wird, ist im Record keine Erwähnung. Die Byte-Offsets des Facets richtig zu setzen, ist ein eigenes Problem, behandelt in der Notiz zu Bluesky-Facets mit byteStart und byteEnd.
Das Array allow ist auf 5 Einträge begrenzt, obwohl es nur vier Regeltypen gibt. Das Schema verbietet nicht, listRule zu wiederholen, der fünfte Platz bietet also Raum für eine zweite Liste.

Was ist der Unterschied zwischen einem leeren und einem fehlenden allow-Array?
Alles. Das Lexicon zieht die Grenze in einem Satz: „If value is an empty array, no one can reply. If value is undefined, anyone can reply.“
Wert von allow | Wer antworten darf |
|---|---|
| Fehlt | Jeder |
[] | Niemand |
| Eine oder mehrere Regeln | Jeder, auf den eine der Regeln zutrifft |
Blueskys Dokumentation formuliert das stattdessen auf Record-Ebene: „If a thread gate record is present but empty, then nobody can reply“ und „If a thread gate record is not present, then anybody can reply.“ Liest man beide Quellen zusammen, gibt es einen Fall, den die Doku-Seite auslässt. Ein Threadgate-Record kann ohne Feld allow existieren, etwa einer, der nur hiddenReplies auflistet. Nach dem Wortlaut des Lexicons ist dieser Thread weiterhin für alle offen. Wenn dein Code eine Antwort versteckt, indem er ein Threadgate anlegt, und dann jemand die Regel „Record vorhanden heißt gesperrt“ anwendet, dreht er die Logik um.
Kann man eine Antwort mitten im Thread sperren?
Nein. Der rkey des Threadgates muss zu „the thread's root post“ passen, es gibt also ein Threadgate pro Thread, angehängt an dessen ersten Post. Antworten weiter unten können keine eigenen Antwortkontrollen tragen.
AdaptlyPost
Jetzt 7 Tage kostenlos testen
Plattformübergreifende Analysen
Sozialer Posteingang
KI-gestützter Assistent
Das Array hiddenReplies liegt auf demselben Root-Record und ist auf 300 URIs begrenzt. Blueskys Ankündigung der Funktion zu App-Version 1.90 sagt „Only the original creator of the thread can hide replies“ und dass „All hidden replies will be placed behind a Hidden replies screen.“ Dort bleiben sie erreichbar, „but much less visible.“ Derselbe Beitrag warnt, dass versteckte Antworten, samt der Information, welche Posts der Autor versteckt hat, „are still public data.“ Alles in einem Threadgate-Record kann jeder lesen, der dein Repository liest.

Was ist der Postgate-Record?
Das Postgate ist das Gegenstück zum Threadgate für Quote-Posts. app.bsky.feed.postgate ist ein „Record defining interaction rules for a post“, und es folgt derselben Platzierungsregel: Sein rkey „must match the record key of the post, and that record must be in the same repository.“
| Feld | Typ | Pflicht | Beschreibung im Lexicon |
|---|---|---|---|
post | at-uri | Ja | „Reference (AT-URI) to the post record.“ |
createdAt | datetime | Ja | Keine |
embeddingRules | Array, max. 5 | Nein | „List of rules defining who can embed this post.“ |
detachedEmbeddingUris | Array aus at-uri, max. 50 | Nein | „List of AT-URIs embedding this post that the author has detached from.“ |
embeddingRules hat heute einen einzigen Regeltyp, app.bsky.feed.postgate#disableRule, beschrieben als „Disables embedding of this post.“ Das ist der Schalter hinter dem Abschalten von Quote-Posts.
Beachte, dass die Standardwerte des Postgates von denen des Threadgates abweichen. Für embeddingRules gilt: „If value is an empty array or is undefined, no particular rules apply and anyone can embed.“ Ein leeres Array sperrt in einem Threadgate die Antworten, lässt in einem Postgate aber Zitate offen. Um Zitate zu blockieren, brauchst du eine ausdrückliche disableRule.
Das Postgate unterscheidet sich auch im Geltungsbereich. Es muss zu „the record key of the post“ passen, nicht zum Root des Threads, also kann jeder Post, auch eine Antwort, sein eigenes Postgate tragen.
detachedEmbeddingUris hält die Zitate fest, von denen du dich schon gelöst hast. Blueskys Ankündigung zu 1.90 beschreibt es: „you can detach your original post from someone's quote post“ und „Like blocks, quote post removals are public data.“ Das Array fasst 50 URIs.
Woran erkennt ein Client, dass ein Post gesperrt ist?
An der Post-Ansicht, nicht durch Abrufen der Records. app.bsky.feed.defs#postView enthält ein Feld threadgate, das den Record zusammen mit den referenzierten Listen zurückgibt. Der Viewer-State für das angemeldete Konto ergänzt zwei Booleans, replyDisabled und embeddingDisabled, mit denen ein Client die Antwort- und Zitat-Buttons für diese Person ausgrauen kann.
Ein Scheduling-Tool hat einen zusätzlichen Schritt. Das Threadgate ist ein zweiter Record, also bedeutet ein geplanter Post mit Antwortkontrollen zwei Schreibvorgänge: den Post, dann das Gate unter demselben rkey. Die Notiz dazu, wie du Bluesky-Posts planst, behandelt die Posting-Seite, und beide Schreibvorgänge zählen gegen die Limits aus der Notiz zum Bluesky API Rate Limit.
Häufig gestellte Fragen
Wie verhindere ich über die API, dass jemand auf einen Bluesky-Post antwortet?
Erstelle einen app.bsky.feed.threadgate-Record mit dem rkey des Posts und "allow": []. Das Lexicon sagt „If value is an empty array, no one can reply.“
Kann ein Bluesky-Threadgate nur meinen Followern das Antworten erlauben?
Ja. Füge app.bsky.feed.threadgate#followerRule zu allow hinzu. Bluesky definiert die Regel als „Allow replies from actors following you.“
Wie viele Regeln kann ein Threadgate enthalten?
Fünf. Das Array allow hat im Lexicon eine maxLength von 5.
Kann ich die Antwortkontrollen ändern, nachdem ein Post veröffentlicht ist?
Ja. Das Threadgate ist ein separater Record, du kannst es also erstellen, aktualisieren oder löschen, ohne den Post selbst anzufassen.
Wie schalte ich Quote-Posts auf Bluesky über die API ab?
Erstelle einen app.bsky.feed.postgate-Record mit dem rkey des Posts und füge app.bsky.feed.postgate#disableRule zu embeddingRules hinzu. Ein leeres Array blockiert keine Zitate.
Sind versteckte Antworten privat?
Nein. Bluesky sagt, versteckte Antworten und die Information, welche Posts der Autor versteckt hat, „are still public data.“ Sie stehen im Array hiddenReplies des Threadgates, das jeder lesen kann.
AdaptlyPost
Jetzt 7 Tage kostenlos testen
Plattformübergreifende Analysen
Sozialer Posteingang
KI-gestützter Assistent
Wer kann Antworten in einem Bluesky-Thread verstecken?
Nur der Ersteller des Threads kann Antworten verstecken, so steht es in Blueskys Ankündigung zu Version 1.90. Die URIs der versteckten Antworten stehen im Array hiddenReplies des Threadgates, bis zu 300. Sie liegen hinter einem Bildschirm "Hidden replies" und bleiben dort erreichbar.
Schaltet ein leeres embeddingRules-Array Quote-Posts ab?
Das tut es nicht. In einem Postgate bedeutet ein leeres oder fehlendes embeddingRules, dass keine besonderen Regeln gelten und jeder den Post einbetten darf. Um Zitate zu blockieren, brauchst du app.bsky.feed.postgate#disableRule.
Wie löse ich einen Quote-Post von meinem Original-Post auf Bluesky?
Trage die AT-URI des Quote-Posts in das Array detachedEmbeddingUris des Postgates deines Posts ein. Das Array fasst bis zu 50 URIs. Bluesky weist darauf hin, dass entfernte Quote-Posts wie Blocks öffentliche Daten sind.
Kann ein Threadgate mehrere allow-Regeln kombinieren?
Die Regeln addieren sich. Jede Regel in allow öffnet die Antworten für eine weitere Gruppe, also können erwähnte Nutzer, gefolgte Nutzer und eine Liste im selben Array stehen. Das Array nimmt bis zu 5 Regeln auf, und listRule braucht die AT-URI eines app.bsky.graph.list-Records.
Setze das mit AdaptlyPost in die Praxis um
War dieser Artikel hilfreich?
Teilen Sie uns Ihre Meinung mit!
Sieh uns öfter bei Google
Ein Klick macht AdaptlyPost zu einer bevorzugten Quelle. Unsere Artikel stehen dann weiter oben in deinen Top-Meldungen, im KI-Modus und in den KI-Übersichten.
Bevor Sie gehen...
AdaptlyPost
Planen Sie Ihre Inhalte für alle Plattformen
Verwalten Sie alle Ihre Social-Media-Konten an einem Ort mit AdaptlyPost.
Plattformübergreifende Analysen
Sozialer Posteingang
KI-gestützter Assistent
Verwandte Glossarbegriffe


Wie LinkedIn initializeUpload aus einer Datei eine Bild-URN macht
Die Aktion LinkedIn initializeUpload liefert eine Bild-URN und eine Upload-URL. Hier der PUT, der Beitrag mit der URN und die Fehler an jedem Schritt.


Jeder /rest/-Aufruf braucht den LinkedIn-Version-Header in YYYYMM-Form
Der LinkedIn-Version-Header nimmt einen YYYYMM-Wert wie 202608. Ohne ihn liefert LinkedIn 400 VERSION_MISSING, eine abgeschaltete Version 426.


Warum 429 Retry-After in den meisten Social-Media-APIs fehlt
Mit 429 Retry-After sagt HTTP „warte“. X, Meta, LinkedIn, TikTok und YouTube dokumentieren kein Retry-After. Das senden sie stattdessen.
Verwandte Artikel


Warum dein Social-Media-Scheduler ständig Konten trennt
Wenn dein Social-Media-Scheduler ständig Konten trennt, ist ein Token abgelaufen oder vorzeitig ungültig. Laufzeiten für Meta, LinkedIn, X, TikTok.


Was Instagrams content_publishing_limit-Endpunkt zurückgibt
Instagrams Endpunkt content_publishing_limit liefert quota_usage plus einen config-Block mit quota_total 50 und quota_duration 86.400 Sekunden.


Das Facebook Long Lived Access Token und seine 60-Tage-Uhr
Ein Facebook Long Lived Access Token hält etwa 60 Tage, und das daraus abgeleitete Seiten-Token hat überhaupt kein Ablaufdatum. Der Tausch und die Fallen.

