Skip to content

Events

Quote

View as MarkdownPlain text source(opens in new tab)

Fires when a tracked user quotes another post. Carries the quote itself plus the quoted post's content.

A quote event fires when a tracked user quotes another post. It carries the quoter’s own post plus the quoted post’s content and author.

Fields

FieldTypeNotes
type"quote"
idstringX post ID of the quote
urlstringCanonical URL of the quote
authorAuthorThe tracked user who quoted
textstringQuote text. URLs are expanded; HTML entities are decoded
createdAtMsnumberUnix milliseconds, truncated to the second
latencyMsnumber | nullReal wall-clock from X creation to delivery
mediaMediaRef[]Media on the quote itself
articleArticleRef | nullArticle card on the quote
pollPollRef | nullPoll on the quote
symbolsSymbolRef[]Cashtags on the quote (picker-selected only)
quotedAuthorAuthorAuthor of the quoted post
quotedPostIdstringID of the quoted post
quotedTextstringQuoted post text
quotedMediaMediaRef[]Media on the quoted post
quotedArticleArticleRef | nullArticle card on the quoted post
quotedPollPollRef | nullPoll on the quoted post
quotedSymbolsSymbolRef[]Cashtags on the quoted post
quotedQuoteAuthorUsernamestring | nullWhen the quoted post is itself a quote, the username being quoted (L3 attribution). null otherwise
quotedQuotePostUrlstring | nullWhen the quoted post is itself a quote, the URL of the L3 post. null otherwise

Example

Here’s a real quote event: @elonmusk quoting @SpaceX. Author objects are shortened for the preview; the wire ships every Author field.

{
  "type": "quote",
  "id": "2062796377055187258",
  "url": "https://x.com/elonmusk/status/2062796377055187258",
  "author": {
    "id": "44196397",
    "username": "elonmusk",
    "displayName": "Elon Musk",
    "verified": true,
    "verifiedType": "blue"
  },
  "text": "29 more Starlink satellites...",
  "createdAtMs": 1780643955000,
  "latencyMs": 41,
  "media": [],
  "article": null,
  "poll": null,
  "symbols": [],
  "quotedAuthor": {
    "id": "34743251",
    "username": "spacex",
    "displayName": "SpaceX",
    "verified": true,
    "verifiedType": "business"
  },
  "quotedPostId": "2062585343388319851",
  "quotedText": "Falcon 9 launches and deploys 29 @Starlink satellites from Florida",
  "quotedMedia": [
    { "type": "photo", "url": "https://pbs.twimg.com/media/HJ_GWp2WEAAHkE2.jpg" },
    { "type": "photo", "url": "https://pbs.twimg.com/media/HJ_GYftWgAE2iIB.jpg" },
    { "type": "photo", "url": "https://pbs.twimg.com/media/HJ_GZhIXQAAeVJx.jpg" },
    { "type": "photo", "url": "https://pbs.twimg.com/media/HJ_GaijWEAAdi5q.jpg" }
  ],
  "quotedArticle": null,
  "quotedPoll": null,
  "quotedSymbols": [],
  "quotedQuoteAuthorUsername": null,
  "quotedQuotePostUrl": null
}

Quote vs reply

In a quote, the quoted post is referenced and shown alongside the quoter’s text. In a reply, the parent is the post being responded to. Quotes use quoted* fields; replies use replyTo* fields. A user cannot both reply and quote in the same post.

When the quoted post is itself a quote

If the quoted post is itself a quote of another post, quotedQuoteAuthorUsername and quotedQuotePostUrl carry the L3 attribution. The L3 post’s text and media are not included; we only attribute, not fetch.

  • post: the user posted an original
  • reply: the user replied to a post
  • deleted with deletedKind: "quote": a previously delivered quote was deleted