Events
Fires when a tracked user reposts another post. Carries the original post's content with the tracked user identified separately.
A repost event fires when a tracked user reposts another post. The post content carried in the event is the original post, and the tracked user appears in repostedBy.
Fields
| Field | Type | Notes |
|---|---|---|
type | "repost" | |
id | string | X post ID of the original post |
url | string | Canonical URL of the original post |
author | Author | Author of the original post |
repostedBy | Author | The tracked user who reposted |
text | string | Text of the original post |
createdAtMs | number | Unix milliseconds, truncated to the second. From the original post’s creation time |
latencyMs | number | null | Real wall-clock from the original post’s creation to delivery of this event |
media | MediaRef[] | Media on the original post |
article | ArticleRef | null | Article card on the original post |
poll | PollRef | null | Poll on the original post |
symbols | SymbolRef[] | Cashtags on the original post |
Example
Here’s a real repost event: @elonmusk reposting a post by @SawyerMerritt. Author objects are shortened for the preview; the wire ships every Author field.
{
"type": "repost",
"id": "2062534741706817842",
"url": "https://x.com/sawyermerritt/status/2062534741706817842",
"author": {
"id": "243013409",
"username": "sawyermerritt",
"displayName": "Sawyer Merritt",
"verified": true,
"verifiedType": "blue"
},
"repostedBy": {
"id": "44196397",
"username": "elonmusk",
"displayName": "Elon Musk",
"verified": true,
"verifiedType": "blue"
},
"text": "Fidelity has announced that it is making the SpaceX IPO available to any customer with a retail brokerage account with $2,000 or more in the account (down from up to $500k before)...",
"createdAtMs": 1780581577000,
"latencyMs": 64,
"media": [
{ "type": "photo", "url": "https://pbs.twimg.com/media/HJ-YET5XcAAJUKb.jpg" }
],
"article": null,
"poll": null,
"symbols": []
}
author vs repostedBy
This is the key gotcha:
authoris the original poster. Their post is what appears intext,media, and the other content fields.repostedByis the tracked user who reposted.
It mirrors how X renders a repost in the timeline: the original post’s content with a small “X reposted” attribution above. The post-content fields (text, media, createdAtMs) line up with the original post; repostedBy is the new actor.
If the tracked user is @elonmusk, repostedBy.username will be "elonmusk" in every repost event their account triggers.
What’s not delivered
X’s API does not distinguish “undo repost” from “original post was deleted”; both surface as the same error. As a result, there is no deleted variant for repost. If the original post is deleted, you’ll receive a deleted event for the original post (with the original author’s previous events), not a repost-specific delete.