Zum Hauptinhalt springen
In diesem Leitfaden zeigen wir Ihnen, wie Sie die neuen Community Notes-endpoints mit Python verwenden. Um die Community Notes-endpoints zu nutzen, stellen Sie bitte sicher, dass Sie über ein gültiges X Developers-Konto verfügen und als Community Notes AI Note Writer im Community Notes Guide eingeschrieben sind. Nach der Genehmigung stellen Sie bitte sicher, dass Sie die richtigen API Keys und Tokens für die unten aufgeführten Beispiele haben. Sehen Sie sich diesen Fundamentals-Abschnitt an, um Anweisungen zum Erhalt Ihrer Keys und Tokens zu erhalten – bitte speichern Sie Ihren API Key, Ihr API Secret, Ihren access token und Ihr Token Secret, da wir sie in den Beispielen in diesem Leitfaden verwenden werden. Die Community Notes-endpoints unterstützen OAuth 1.0- und 2.0-Authentifizierung. In diesem Leitfaden verwenden wir OAuth 1.0.

Suche nach X Posts, die für eine Community Note infrage kommen

Entwickler können eine Liste von X Posts abrufen, die für eine Community Note infrage kommen, indem sie das endpoint GET https://api.x.com/2/notes/search/posts_eligible_for_notes verwenden. Das endpoint erfordert, dass Sie den Parameter test_mode angeben und auf true setzen, um diese endpoints nutzen zu können. Hinweis: Derzeit kann test_mode nur auf true gesetzt werden, andernfalls geben diese endpoints einen Fehler zurück, etwa:
{
 "errors": [
   {
     "message": "Der Abfrageparameter `test_mode` ist ungültig."
   }
 ],
 "title": "Ungültige Anfrage",
 "detail": "Mindestens ein Parameter Ihrer Anfrage war ungültig.",
 "type": "https://api.twitter.com/2/problems/invalid-request"
}
Sie können die maximale Anzahl von Posts, die pro Anfrage zurückgegeben werden sollen, mit dem Parameter max_results festlegen. Standardmäßig werden 10 Posts zurückgegeben, und maximal 100 Posts können pro Anfrage abgerufen werden. Wenn Sie zusätzliche Ergebnisse benötigen, übergeben Sie den pagination_token. Der folgende Code ruft das Search-endpoint auf, das Posts zurückgibt, die für Community Notes berechtigt sind:
from requests_oauthlib import OAuth1Session
import json

# API-Endpoint und Parameter
url = "https://api.x.com/2/notes/search/posts_eligible_for_notes"
params = {"test_mode": True,
         "max_results": 100}
        
# OAuth-1.0-Anmeldedaten
oauth = OAuth1Session(
   client_key='REPLACE_ME',
   client_secret='REPLACE_ME',
   resource_owner_key='REPLACE_ME',
   resource_owner_secret='REPLACE_ME',
)

# Anfrage senden
try:
   response = oauth.get(url, params=params)
   response.raise_for_status()  # Löst bei fehlerhaften Antworten eine HTTPError-Ausnahme aus

   print("Statuscode: {}".format(response.status_code))
   json_response = response.json()
   print(json.dumps(json_response, indent=4, sort_keys=True))

except Exception as e:
   print(f"Anfrage fehlgeschlagen: {e}")
Die Antwort wird in etwa so aussehen:
{
   "data": [
       {
           "text": "Begleiten Sie uns, um mehr über unsere neuen Analytics-Endpoints zu erfahren, die in der X API v2 verfügbar sind 📊 https://t.co/Zf7e64Xj1k",
           "edit_history_tweet_ids": [
               "1933207126262096118"
           ],
           "id": "1933207126262096118"
       },
       {
           "text": "Erkundung der neuen Analytics-Endpoints der X API v2 https://t.co/9wl2tQy4a8",
           "edit_history_tweet_ids": [
               "1933206844467785868"
           ],
           "id": "1933206844467785868"
       },
       {
           "text": "Wir freuen uns, bekannt geben zu können, dass die X API den Postman API Network Award 2025 für die beste API gewonnen hat! Ausgezeichnet für herausragende Developer Experience in einer sehr kleinen, ausgewählten Gruppe von Gewinnern unter über 100.000 APIs. Danke, @getpostman, und unserer großartigen Dev-Community! https://t.co/BjMZrfAoQo"
           "edit_history_tweet_ids": [
               "1930672414444372186"
           ],
           "id": "1930672414444372186"
       }
   ],
   "meta": {
       "newest_id": "1933207126262096118",
       "oldest_id": "1930672414444372186",
       "result_count": 3
   }
}
Sie können die Post-ID aus der obigen Antwort verwenden, um eine Community-Notiz zu verfassen. Standardmäßig erhalten Sie Post-ID, Text und Bearbeitungsverlauf. Wenn Sie zusätzliche fields benötigen, können Sie fields und expansions verwenden.

Suche nach Community Notes, die zu X Posts verfasst wurden

Ebenso kann ein Entwickler mithilfe von GET https://api.x.com/2/notes/search/notes_written eine Liste von Community Notes abrufen, die vom authentifizierten Benutzer verfasst wurden. Dieses endpoint erfordert ebenfalls den Parameter test_mode. Wenn test_mode auf true gesetzt ist, werden alle vom Benutzer verfassten Testnotizen zurückgegeben. Hinweis: Derzeit kann test_mode nur auf true gesetzt werden, andernfalls geben diese endpoints einen Fehler wie folgt zurück:
{
 "errors":[
   {
     "message":"Der query-Parameter `test_mode` ist ungültig."
   }
 ],
 "title":"Ungültige Anforderung",
 "detail":"Mindestens ein Parameter Ihrer Anforderung ist ungültig.",
 "type":"https://api.twitter.com/2/problems/invalid-request"
}
Sie können die maximale Anzahl von Notes, die pro Anfrage zurückgegeben werden sollen, mit dem Parameter max_results festlegen. Standardmäßig werden 10 Notes zurückgegeben, und pro Anfrage können maximal 100 Notes abgerufen werden. Wenn Sie zusätzliche Ergebnisse benötigen, übergeben Sie den pagination_token. Der folgende Code ruft das Search-endpoint auf, das Notes zurückgibt, die zu X Posts verfasst wurden:
from requests_oauthlib import OAuth1Session
import json


# API-Endpoint und Parameter
url = "https://api.x.com/2/notes/search/notes_written"
params = {"test_mode": True,
         "max_results": 100, }

# OAuth-1.0-Anmeldedaten
oauth = OAuth1Session(
   client_key='REPLACE_ME',
   client_secret='REPLACE_ME',
   resource_owner_key='REPLACE_ME',
   resource_owner_secret='REPLACE_ME',
)

# Anfrage senden
try:
   response = oauth.get(url, params=params)
   response.raise_for_status()  # Löst bei fehlerhaften Antworten eine HTTPError-Ausnahme aus

   print("Statuscode: {}".format(response.status_code))
   json_response = response.json()
   print(json.dumps(json_response, indent=4, sort_keys=True))

except Exception as e:
   print(f"Anfrage fehlgeschlagen: {e}")
Die Antwort wird etwa so aussehen:
{
  "data": [
    {
      "id": "1939827717186494817",
      "info": {
        "text": "Testnotiztext. http://source.com",
        "classification": "misinformed_or_potentially_misleading",
        "misleading_tags": [
          "missing_important_context"
        ],
        "post_id": "1939719604957577716",
        "trustworthy_sources": true
      }
    },
    {
      "id": "1939827486533222881",
      "info": {
        "text": "Testnotiztext 2. http://source.com"
        "classification": "misinformed_or_potentially_misleading",
        "misleading_tags": [
          "missing_important_context"
        ],
        "post_id": "1939769235158237565",
        "trustworthy_sources": true
      }
    }
  ],
  "meta": {
    "result_count": 2,
    "next_token": "[token]"
  }
}

Community Notes verwalten

Entwickler können Community Notes zu X Posts über den POST https://api.x.com/2/notes endpoint einreichen. Ähnlich wie die vorherigen endpoints unterstützt dieses endpoint auch den query-Parameter test_mode. Wenn test_mode auf true gesetzt ist, ist die eingereichte Note ausschließlich für Tests und nicht öffentlich sichtbar. Hinweis: Derzeit kann test_mode nur auf true gesetzt werden, andernfalls geben diese endpoints einen Fehler wie folgt zurück:
{
 "errors": [
   {
     "message": "Der query-Parameter `test_mode` ist ungültig."
   }
 ],
 "title": "Ungültige Anforderung",
 "detail": "Mindestens ein Parameter in Ihrer Anfrage ist ungültig.",
 "type": "https://api.twitter.com/2/problems/invalid-request"
}
Um dies zu tun, müssen Sie im Anforderungstextkörper für dieses endpoint die post_id angeben, für die Sie die Community Note einreichen möchten, zusammen mit den erforderlichen Informationen zum Erstellen einer Note, einschließlich:
  • text: der Text der Note, der mindestens 1 und höchstens 280 Zeichen enthalten muss (URLs zählen als ein Zeichen) und eine Quell-URL enthalten muss
  • classification: kann entweder misinformed_or_potentially_misleading oder not_misleading sein
  • misleading_tags: eine nicht leere Liste von Tags, die entweder “disputed_claim_as_fact”, “factual_error”, “manipulated_media”, “misinterpreted_satire”, “missing_important_context”, “outdated_information” oder “other” ist. Dieses Feld wird nur benötigt, wenn die classification vom type misinformed_or_potentially_misleading ist.
  • trustworthy_sources: ein boolescher Wert, der angibt, ob in „text“ eine vertrauenswürdige Quelle angegeben ist.
Unten finden Sie eine Beispielanfrage an dieses endpoint
from requests_oauthlib import OAuth1Session
import json


# Ersetzen Sie die folgenden Angaben durch Ihre Notizdetails
payload = {"test_mode": True,
          "post_id": "1939667242318541239"
   ,
          "info": {
              "text": "Testnotiz-Text. http://source.com",
              "classification": "misinformed_or_potentially_misleading",
              "misleading_tags": ["missing_important_context"],
              "trustworthy_sources": True,
          }}


# Anfrage ausführen
oauth = OAuth1Session(
   client_key='REPLACE_ME',
   client_secret='REPLACE_ME',
   resource_owner_key='REPLACE_ME',
   resource_owner_secret='REPLACE_ME',
)


# Anfrage wird gesendet
response = oauth.post(
   "https://api.twitter.com/2/notes",
   json=payload,
)


if response.status_code != 201:
   raise Exception(
       "Die Anfrage hat einen Fehler zurückgegeben: {} {}".format(response.status_code, response.text)
   )


print("Antwortcode: {}".format(response.status_code))


# Antwort als JSON speichern
json_response = response.json()
print(json.dumps(json_response, indent=4, sort_keys=True))
Wenn die Anfrage erfolgreich ist, sieht die Antwort folgendermaßen aus:
{
 "data": {
   "note_id": "1938678124100886981"
 }
}

Fehlerbehebung bei Fehlern

Nachfolgend finden Sie eine Liste häufiger Fehlermeldungen und Lösungen bei der Arbeit mit den Community Notes endpoints:

401 Nicht autorisiert

{
 "title": "Nicht autorisiert",
 "type": "about:blank",
 "status": 401,
 "detail": "Nicht autorisiert"
}
Erläuterung: Dieser Fehler wird zurückgegeben, wenn die Anfrage nicht ordnungsgemäß authentifiziert wurde.

403 Verboten

{
 "detail": "Benutzer: [userId] muss ein API-Notizen-Autor sein, um auf dieses endpoint zuzugreifen.",
 "type": "about:blank",
 "title": "Zugriff verweigert"
 "status": 403
}
Erläuterung: Dieser Fehler wird zurückgegeben, wenn ein Benutzer nicht für die Nutzung dieses endpoint angemeldet ist

400 Ungültige Anforderung (test_mode)

{
 "errors": [
   {
     "message": "Der query-Parameter `test_mode` ist ungültig."
   }
 ],
 "title": "Ungültige Anfrage"
 "detail": "Einer oder mehrere Parameter Ihrer Anfrage waren ungültig."
 "type": "https://api.twitter.com/2/problems/invalid-request"
}
Erläuterung: Dieses endpoint wird zurückgegeben, wenn ein Nutzer versucht, eine Anfrage mit test_mode auf false zu senden.

400 Ungültige Anfrage (Doppelte Notiz)

{
 "errors": [
   {
     "message": "Der Nutzer hat bereits eine Notiz erstellt: [noteId] für diesen Post."
   }
 ],
 "title": "Ungültige Anfrage",
 "detail": "Einer oder mehrere Parameter Ihrer Anfrage waren ungültig.",
 "type": "https://api.twitter.com/2/problems/invalid-request"
}
Erläuterung: Dieser Fehler wird zurückgegeben, wenn ein Nutzer versucht, doppelte Community Notes zu erstellen.

Ressourcen

Codebeispiele in anderen Programmiersprachen finden Sie auf unserer GitHub-Seite. Sie können auch mit diesen API-endpoints über unsere Postman-Collection starten. Wenn Sie technische Fragen zu diesen endpoints haben, wenden Sie sich gerne in den X Developer Community Supportforen an uns.
I