Gebeurtenissen

Envelop

Elke gebeurtenis heeft dezelfde envelop; d bevat de typespecifieke payload die hieronder wordt beschreven.

VeldTypeBetekenis
vintEnvelopversie. Vandaag 1
tstringGebeurtenistype, uit de tabel hieronder
opcreate | update | deletecreate, update (verrijking van hetzelfde id) of delete
idstringStabiele identiteit. Ontdubbel hierop
tsint (ms)Wanneer het op X gebeurde, in ms sinds de epoch. X geeft geen tijdstip voor profielwijzigingen, volgen en ontvolgen, nieuwe geverifieerde volgers en verwijderde berichten: bij die gebeurtenissen is het het moment waarop wij het detecteerden
sidstringStreampositie voor replay; aanwezig op de stream en in de historie
target.idstringNumeriek X-id van het gevolgde account (voor search.match: van de auteur van het bericht)
target.screen_namestringHandle van het gevolgde account
target.namestringDe weergavenaam van het account
dobjectTypespecifieke payload

Gebeurtenistypen

TypeCategorieBetekenis
tweet.createBerichtenHet account plaatste iets nieuws
tweet.replyBerichtenHet reageerde op iemand; reply_to bevat het bericht waarop werd gereageerd, met tekst en media
tweet.retweetBerichtenHet repostte iemand; retweet_of bevat het oorspronkelijke bericht volledig
tweet.quoteBerichtenHet citeerde iemand; quoted bevat het geciteerde bericht volledig
tweet.editBerichtenHet bewerkte een bericht; de gebeurtenis bevat de nieuwe versie, en edit_of de versie die ze vervangt
tweet.deleteBerichtenEen bericht dat het account had gepubliceerd is verdwenen
profile.nameProfielWeergavenaam gewijzigd
profile.screen_nameProfielHandle gewijzigd
profile.bioProfielBio gewijzigd
profile.locationProfielLocatie gewijzigd
profile.urlProfielProfiellink gewijzigd
profile.avatarProfielAvatar gewijzigd; old en new zijn afbeeldings-URL's
profile.bannerProfielBanner gewijzigd; old en new zijn afbeeldings-URL's
profile.pinnedProfielVastgezet bericht gewijzigd; tweet en old_tweet bevatten de berichten zelf
profile.verifiedProfielVerificatiebadge verschenen of verdwenen
follow.addVolgrelatiesHet account is iemand gaan volgen; user is het volledige profiel van dat account
follow.removeVolgrelatiesHet account volgt iemand niet meer
followers.verified.addVolgrelatiesEen geverifieerd account is het gaan volgen; user bevat bio, aantallen, locatie en registratiedatum
account.statusAccountHet account werd beschermd, geschorst of niet beschikbaar, of weer actief
search.matchZoekenIemand plaatste iets dat overeenkomt met een van uw trefwoorden; keyword zegt welk, author is diens volledige profiel

X geeft geen tijdstempel voor "is iemand gaan volgen" of "heeft een volger gekregen", dus voor die gebeurtenissen is ts het moment waarop wij de wijziging opmerkten.

U hoeft niet elk type van elk account te ontvangen. Gebeurtenistypen kiezen laat zien hoe u er maar een paar ontvangt, bijvoorbeeld alleen nieuwe geverifieerde volgers.

Payloads

Vijf payloadvormen dekken alle achttien typen.

Tweet-payload

De d van tweet.create, tweet.reply, tweet.retweet en tweet.quote, en de basis van search.match.

VeldTypeBetekenis
tweet_idstringHet id van het bericht, als string
kindtweet | reply | retweet | quoteWat voor soort bericht het is
textstringVolledige tekst (inclusief lange berichten)
langstring | nullTaal die X heeft gedetecteerd
authorUserHet account dat het plaatste, als volledige User — hetzelfde object als de auteur van een search.match: handle, naam, bio, avatar, banner, tellers, verificatie, locatie, link en aanmelddatum. Op een mager eerste frame is het het account zoals laatst gelezen; de update bevat het zoals gelezen met het bericht
reply_toBrief+ | nullVoor reacties: het bericht waarop wordt gereageerd — een Brief plus screen_name, tweet_id en user_id van de auteur ervan
retweet_ofBrief | nullVoor reposts: het oorspronkelijke bericht
quotedBrief | nullVoor citaten: het geciteerde bericht
mediastring[]Kale afbeeldings-URL's, één per media-item
media_itemsMedia[]Elk media-item met type, videovarianten en afmetingen
urlsstring[]Uitgevouwen links in het bericht
articleArticle | nullBij posts die naar een X-artikel linken: het artikel
counts{reply, rt, like, quote, bookmark}Aantal reacties, reposts, likes, citaten en bladwijzers op het moment dat we het lazen
viewsint | nullAantal weergaven, wanneer X dat vrijgeeft
urlstringCanonieke link naar het bericht
fullboolfalse op een eerste, mager create-frame; true zodra de gebeurtenis het hele bericht bevat
kind_finalbooltrue als kind vaststaat. false alleen op een mager eerste frame waarvan kind tweet is: het bericht kan nog een citaat blijken, en de update op hetzelfde id beslist
kind_wastweet | null (update only)Alleen op de update die het soort bericht vastlegt, en alleen als het eerste frame iets anders zei: het soort dat dat frame had (tweet voor een bericht dat een citaat bleek)
edit_ofBrief | nullBij tweet.edit: de versie die deze vervangt (haar id, en tekst en auteur als we die hadden)
voorbeeld
{
  "v": 1,
  "t": "tweet.create",
  "op": "create",
  "id": "tweet:2097879002992070835",
  "ts": 1789012345678,
  "sid": "1789012346012-0",
  "target": {
    "id": "1652541",
    "screen_name": "Reuters",
    "name": "Reuters"
  },
  "d": {
    "tweet_id": "2097879002992070835",
    "kind": "tweet",
    "text": "Ash-covered shoes and a president in crisis…",
    "lang": "en",
    "author": {
      "id": "1652541",
      "screen_name": "Reuters",
      "name": "Reuters",
      "bio": "Top and breaking news, pictures and videos from Reuters.",
      "avatar": "https://pbs.twimg.com/profile_images/1874154135869616128/nJDmubGJ_normal.jpg",
      "banner": "https://pbs.twimg.com/profile_banners/1652541/1573687397",
      "followers": 25900000,
      "following": 1150,
      "tweets": 1080000,
      "location": "Around the world",
      "url": "https://www.reuters.com",
      "verified": true,
      "verified_type": "Business",
      "protected": false,
      "created_at": "2007-03-20T17:46:05Z",
      "category": null
    },
    "reply_to": null,
    "retweet_of": null,
    "quoted": null,
    "media": [
      "https://pbs.twimg.com/media/….jpg"
    ],
    "media_items": [
      {
        "type": "photo",
        "url": "https://pbs.twimg.com/media/….jpg",
        "expanded_url": "https://x.com/Reuters/status/2097879002992070835/photo/1",
        "width": 1200,
        "height": 675
      }
    ],
    "urls": [
      "https://reut.rs/…"
    ],
    "counts": {
      "reply": 12,
      "rt": 40,
      "like": 131,
      "quote": 3,
      "bookmark": 9
    },
    "views": 20411,
    "url": "https://x.com/Reuters/status/2097879002992070835",
    "full": true,
    "kind_final": true
  }
}

Een eerste create-frame is bewust mager: het bevat het id, de auteur (author, het account zoals het laatst gelezen is) en de tekst, mogelijk ingekort, zodat het kan vertrekken zodra het bericht gezien wordt; url wijst al naar het bericht. Op dat moment is een citaat niet altijd te onderscheiden van een origineel bericht, dus zo'n frame zegt tweet.create met kind_final: false. De update die volgt op hetzelfde id bevat de volledige payload hierboven en het vastgestelde type: tweet.quote met kind_was: "tweet" als het een citaat was.

hetzelfde bericht zoals het eerst werd afgeleverd, vóór verrijking
{
  "v": 1,
  "t": "tweet.create",
  "op": "create",
  "id": "tweet:2097879002992070835",
  "ts": 1789012345678,
  "sid": "1789012346012-0",
  "target": {
    "id": "1652541",
    "screen_name": "Reuters",
    "name": "Reuters"
  },
  "d": {
    "tweet_id": "2097879002992070835",
    "kind": "tweet",
    "text": "Ash-covered shoes and a president in crisis…",
    "author": {
      "id": "1652541",
      "screen_name": "Reuters",
      "name": "Reuters",
      "bio": "Top and breaking news, pictures and videos from Reuters.",
      "avatar": "https://pbs.twimg.com/profile_images/1874154135869616128/nJDmubGJ_normal.jpg",
      "banner": "https://pbs.twimg.com/profile_banners/1652541/1573687397",
      "followers": 25900000,
      "following": 1150,
      "tweets": 1080000,
      "location": "Around the world",
      "url": "https://www.reuters.com",
      "verified": true,
      "verified_type": "Business",
      "protected": false,
      "created_at": "2007-03-20T17:46:05Z",
      "category": null
    },
    "url": "https://x.com/Reuters/status/2097879002992070835",
    "full": false,
    "kind_final": false
  }
}

Delete-payload

De d van tweet.delete. Wordt alleen verstuurd voor een bericht dat we hadden gezien en dat nu weg is. De ts is wanneer de verwijdering werd gedetecteerd; de tijd van het bericht zelf staat in het eerdere create-frame.

VeldTypeBetekenis
tweet_idstringHet id van het verwijderde bericht
urlstringWaar het vroeger stond
voorbeeld
{
  "v": 1,
  "t": "tweet.delete",
  "op": "delete",
  "id": "tweet:2097879002992070835:delete",
  "ts": 1789012345678,
  "sid": "…",
  "target": {
    "id": "1652541",
    "screen_name": "Reuters",
    "name": "Reuters"
  },
  "d": {
    "tweet_id": "2097879002992070835",
    "url": "https://x.com/Reuters/status/2097879002992070835"
  }
}

Profielwijziging-payload

De d van elke profile.*-gebeurtenis. op is hiervoor update.

VeldTypeBetekenis
fieldstringWelk profielveld is gewijzigd; hetzelfde woord als na profile. in het type
oldanyDe vorige waarde
newanyDe nieuwe waarde
tweetBrief (pinned only)Voor profile.pinned: het nieuw vastgezette bericht
old_tweetBrief (pinned only)Voor profile.pinned: het eerder vastgezette bericht, als we het hadden
voorbeeld
{
  "v": 1,
  "t": "profile.bio",
  "op": "update",
  "id": "profile:1652541:bio:9c1d2e3f4a5b",
  "ts": 1789012400000,
  "sid": "…",
  "target": {
    "id": "1652541",
    "screen_name": "Reuters",
    "name": "Reuters"
  },
  "d": {
    "field": "bio",
    "old": "Top news and analysis from around the world.",
    "new": "Top news, analysis and video from around the world."
  }
}

Follow-payload

De d van follow.add, follow.remove en followers.verified.add.

VeldTypeBetekenis
userUserHet andere account, als volledige User
voorbeeld
{
  "v": 1,
  "t": "follow.add",
  "op": "create",
  "id": "follow:44196397:12:add:496948",
  "ts": 1789012400000,
  "sid": "…",
  "target": {
    "id": "44196397",
    "screen_name": "elonmusk",
    "name": "Elon Musk"
  },
  "d": {
    "user": {
      "id": "12",
      "screen_name": "jack",
      "name": "jack",
      "bio": "…",
      "avatar": "https://pbs.twimg.com/profile_images/…",
      "banner": null,
      "followers": 6400000,
      "following": 4200,
      "tweets": 29000,
      "location": "",
      "url": null,
      "verified": true,
      "verified_type": "blue",
      "protected": false,
      "created_at": "2006-03-21T20:50:14Z",
      "category": null
    }
  }
}

Accountstatus-payload

De d van account.status. Een status is active, protected (berichten alleen zichtbaar voor goedgekeurde volgers), suspended (door X) of unavailable (gedeactiveerd, verwijderd of om een andere reden niet zichtbaar). ts is wanneer wij de wijziging detecteerden.

VeldTypeBetekenis
oldactive | protected | suspended | unavailableDe status ervoor
newactive | protected | suspended | unavailableDe status nu
reasonstring | nullDe bewoording van X, als die er is (bijvoorbeeld Suspended)
voorbeeld
{
  "v": 1,
  "t": "account.status",
  "op": "update",
  "id": "account:9000002:status:active>suspended:497010",
  "ts": 1789236000000,
  "sid": "…",
  "target": {
    "id": "9000002",
    "screen_name": "some_account",
    "name": "Some Account"
  },
  "d": {
    "old": "active",
    "new": "suspended",
    "reason": "Suspended"
  }
}

De d van search.match: een Tweet-payload plus drie velden over de treffer. De target van de envelop is de auteur van het bericht, die niet een van uw targets hoeft te zijn.

VeldTypeBetekenis
keyword.idintId van het trefwoord dat overeenkwam
keyword.querystringDe query ervan
keyword.labelstring | nullHet label ervan, als u er een hebt ingesteld
authorUserHet volledige profiel van de auteur
author_is_targetbooltrue als de auteur ook een account is dat op dit systeem wordt gevolgd
…TweetPayloadElk veld van de Tweet-payload
voorbeeld
{
  "v": 1,
  "t": "search.match",
  "op": "create",
  "id": "search:12:2097900000000000000",
  "ts": 1789012500000,
  "sid": "…",
  "target": {
    "id": "9000001",
    "screen_name": "some_trader",
    "name": "Some Trader"
  },
  "d": {
    "tweet_id": "2097900000000000000",
    "kind": "tweet",
    "text": "$SOL breaking out…",
    "lang": "en",
    "author": {
      "id": "9000001",
      "screen_name": "some_trader",
      "name": "Some Trader",
      "bio": "…",
      "followers": 1200,
      "verified": false,
      "…": "…"
    },
    "keyword": {
      "id": 12,
      "query": "($SOL OR \"Solana\") -filter:retweets",
      "label": "solana"
    },
    "author_is_target": false,
    "media": [],
    "media_items": [],
    "urls": [],
    "url": "https://x.com/some_trader/status/2097900000000000000",
    "full": true
  }
}