Choosing event types
By default you receive every event type for each account you monitor. You can narrow that per account: one account can send you only its new verified followers while another sends you everything it posts. The choice belongs to the subscription, so it is made for each account separately.
What you can choose
Every event type below can be switched on or off on its own, for each account. Keyword matches (search.match) are not in this list: they come from keywords, not from accounts.
| Type | Category | Meaning |
|---|---|---|
tweet.create | Posts | The account posted something new |
tweet.reply | Posts | It replied to someone; reply_to carries the post being replied to, with its text and media |
tweet.retweet | Posts | It reposted someone; retweet_of carries the original post in full |
tweet.quote | Posts | It quoted someone; quoted carries the quoted post in full |
tweet.edit | Posts | It edited a post; the event carries the new version, and edit_of the version it replaces |
tweet.delete | Posts | A post the account had published is gone |
profile.name | Profile | Display name changed |
profile.screen_name | Profile | Handle changed |
profile.bio | Profile | Bio changed |
profile.location | Profile | Location changed |
profile.url | Profile | Profile link changed |
profile.avatar | Profile | Avatar changed; old and new are image URLs |
profile.banner | Profile | Banner changed; old and new are image URLs |
profile.pinned | Profile | Pinned post changed; tweet and old_tweet carry the posts themselves |
profile.verified | Profile | Verification badge appeared or disappeared |
follow.add | Follow graph | The account started following someone; user is that account's full profile |
follow.remove | Follow graph | The account stopped following someone |
followers.verified.add | Follow graph | A verified account started following it; user carries bio, counts, location, join date |
account.status | Account | The account became protected, suspended or unavailable, or active again |
Common choices
Send the value in the right-hand column as event_types. Types combine freely; list as many as you need.
| You want | event_types |
|---|---|
| Only new verified followers of the account | ["followers.verified.add"] |
| Only its original posts | ["tweet.create"] |
| Only its replies | ["tweet.reply"] |
| Everything it publishes: posts, replies, reposts, quotes and edits | ["tweet.create", … 5 types] |
| Its posts, and when it deletes one | ["tweet.create", "tweet.delete"] |
| Only profile changes (all nine profile types) | ["profile.name", … 9 types] |
| Only whom it follows and unfollows | ["follow.add", "follow.remove"] |
| Everything (the default) | null |
How to set it
Choose when you start monitoring the account, or change it at any time afterwards. Both calls need the targets:write scope.
curl -X POST https://api.xsignalfeed.com/v1/monitor/targets \ -H "Authorization: Bearer xsf_your_key" -H "Content-Type: application/json" \ -d '{"screen_name": "elonmusk", "event_types": ["followers.verified.add"]}'
curl -X PATCH https://api.xsignalfeed.com/v1/monitor/targets/elonmusk \ -H "Authorization: Bearer xsf_your_key" -H "Content-Type: application/json" \ -d '{"event_types": ["tweet.create", "tweet.reply"]}'
curl -X PATCH https://api.xsignalfeed.com/v1/monitor/targets/elonmusk \ -H "Authorization: Bearer xsf_your_key" -H "Content-Type: application/json" \ -d '{"event_types": null}'
The account's current choice is in its event_types field; event_types_all is true when nothing is filtered out.
{
"target": {
"id": "44196397",
"screen_name": "elonmusk",
"name": "Elon Musk",
"state": "subscribed",
"…": "…",
"event_types": [
"tweet.create",
"tweet.reply"
],
"event_types_all": false
}
}Rules
- Leaving
event_typesout when you start monitoring an account means every type. - Sending
event_typesreplaces the whole choice; it does not add to it. Sending the monitoring call again withoutevent_typeskeeps the current choice. nullor[]means every type. Choosing all the types in the list is stored the same way.- The choice applies equally to the stream, webhooks and
GET /v1/events. An open connection picks up a change on its next refresh, not instantly. - An
updatethat changes a post's type (it carrieskind_was) reaches you if either type is in your choice. If you taketweet.createbut nottweet.quote, you still get theupdatethat shows a post was a quote, so you can drop it; if you taketweet.quotebut nottweet.create, such a quote reaches you first as thatupdate. - Widen the choice and the added types reach you from then on. Events of those types from before the change are not guaranteed to be available through
GET /v1/events. - A key can also carry a key-wide list, set by us at your request (
event_typesinGET /v1/account). An event reaches you only if both lists allow it. - An unknown type is refused with
400 invalid_request;details.unknownnames it anddetails.allowedlists what you can use.GET /v1/meta/event-typesgives the full list. - Keywords are chosen per keyword, not here: watch or stop watching a keyword to get or stop its
search.matchevents.
What cannot be chosen
- New followers that are not verified are not offered as an event, so they cannot be chosen. Only verified new followers are (
followers.verified.add). - Choices are by event type only, not by content. Conditions such as "verified followers with more than 10,000 followers", "only posts with images" or "only in English" are applied on your side, using the fields in the payload (for example
user.followers,media,lang).