Penomoran versi

Kebijakan

Awalan /v1 hanya berubah jika format pengiriman data rusak. Menambahkan bidang ke muatan bukan perubahan yang merusak — urai dengan longgar dan abaikan yang tidak Anda kenal. Saat sesuatu harus dihilangkan, kami menandainya usang di sini dan tetap menjalankannya setidaknya 180 hari. GET /v1/meta/versions mengembalikan tabel ini.

Versi

VersiStatusPerubahan
2026-10-05saat initweet.edit: an edited post is delivered as tweet.edit, carrying the new version and edit_of, the version it replaces (it used to arrive as a new tweet.create)
account.status: the account became protected, suspended or unavailable (deactivated, deleted, not visible), or active again; d carries old, new and X's reason
a new account category in GET /v1/meta/event-types; subscriptions that take every type ([]) receive the two new types, explicit lists do not change
post events carry author as a full User (bio, avatar, banner, counts, verification, location, link, join date), the same object as a search.match author; a thin first frame carries the account as last read
every event's target carries name, the account's display name, beside id and screen_name
2026-10-04didukunga thin first frame carries author.screen_name and a url with the account's handle (it had neither)
post payloads carry kind_final; a thin first tweet.create can still turn out to be a quote, and the update that settles it is tweet.quote with kind_was: tweet
an update that changes a post's type reaches every key whose choice includes either type (it was filtered by the new type only, so a key taking tweet.create but not tweet.quote never learned its post was a quote)
tweet.delete ts is when the deletion was detected; it was the deleted post's own time
post payloads carry article for X Articles: title, preview, full text, cover and images
Target push_ready means every event type the subscription asks for is collected live
documented: system.hello targets is the count when the connection opened and replay_from echoes ?last_id=; close code 1012 and how to resume
a monitored account is its user id: POST /v1/monitor/targets and batch items take user_id instead of screen_name, and /v1/monitor/targets/{target} takes the user id, the current handle or a former handle
an account that changes its handle keeps being delivered, later events carry the new target.screen_name, and profile.screen_name / profile.name report the change; Target objects carry previous_screen_names
two keys asking for the same unknown account at once are both subscribed (the second request used to replace the first)
2026-09-26didukungthe WebSocket reads Authorization: Bearer like every REST endpoint; before this, only X-API-Key and ?api_key= were read there although the authentication guide listed all three, so a Bearer-only client was closed with 4001
a 4001 close reason names the problem: missing_api_key, invalid_api_key or key_revoked (documented)
2026-09-25didukunga subscription can be narrowed to chosen event types: event_types on POST /v1/monitor/targets and on batch add items, and PATCH /v1/monitor/targets/{screen_name}; null or [] means every type
Target objects carry event_types and event_types_all
the filter applies to the stream, webhooks and GET /v1/events alike; an open connection picks up a change on its next refresh
2026-09-17didukungevery key is served alike: the tier and priority fields, PATCH /v1/monitor/targets/{screen_name}, the batch patch op and the tier:ultra scope are gone; subscriptions cannot be narrowed by event type
keywords no longer take interval_s; how often a keyword is searched is decided on our side
keyword matches reach only the keys that watch the keyword; there is no operator broadcast
event envelope no longer carries src or lat; payloads no longer carry push_type, x_push_ts, ts_estimated, confirmed, deep
/v1/status reports component state only; /v1/meta/event-types reports category and second_frame
Authorization: Bearer accepted alongside X-API-Key
401 key_revoked distinguished from invalid_api_key
402 plan_limit replaces target_limit and keyword_limit
X-RateLimit-* headers and 429 rate_limited per key
Idempotency-Key on writes, ETag / If-None-Match on reads, If-Match on PATCH
POST /v1/monitor/targets:batch
GET /v1/monitor/targets/{screen_name} with queued / failed resolution state
cursor paging on /v1/monitor/targets and /v1/events
/v1/meta/* public metadata
PUT /v1/account/webhook keeps the secret when the URL is unchanged
2026-09-08didukungInitial v1: targets, keywords, stream, replay, webhooks, reads