Get Chat Conversations
Changed onRetrieves a list of Chat conversations for the authenticated user's inbox, newest first: the most recently active conversation comes first. The unread, last_read_event_id and newest_event_id fields give your read state, computed from your latest read receipt and each conversation's latest notifying message. Request them with chat_conversation.fields=unread,last_read_event_id,newest_event_id.
The filters unread_only, type, is_archived, is_muted, participant_ids, participant_query, start_time and end_time are optional, and all filters must match (AND). participant_query keeps conversations where another participant's username, or a word of their display name, starts with the query, ignoring case and accents; with a leading @ it matches usernames only. It considers the 100 people who best match the query, uses only public profile information, and never matches group names, nicknames or messages. start_time and end_time apply to the time of each conversation's latest message.
Each page covers max_results conversations and returns those that match, so a page can hold fewer than max_results, or none, while meta.next_token is set and has_more is true: keep paging, passing meta.next_token as pagination_token. Once a page reaches a conversation whose latest message is older than start_time, has_more is false. A pagination_token only works with the same filters as the request that returned it; with other filters, the request fails with a 400.
When both are provided, start_time must be earlier than end_time.
Request
- Base URLhttps://api.x.com
- URLhttps://api.x.com/2/chat/conversations
- Auth
- OAuth 2Authorization code: https://api.x.com/2/oauth2/authorizeToken URL: https://api.x.com/2/oauth2/token scopes: dm.read, users.read
- or HTTP oauth
Query parameters
Conversations covered per page (1-1000, default 200). Filtered pages can return fewer.
meta.next_token from the previous page. Send the same filters with it, or the request fails.
Return only unread conversations. A page can be short; keep paging while has_more.
Only direct (1:1) or only group conversations. Omit for both.
true: only archived; false: only not archived. Omit for both.
true: only muted; false: only not muted. Omit for both.
Comma-separated numeric user IDs (1-10), all in the chat. Names or @handles: use participant_query.
Name or @username prefix (1-50 chars); keeps chats where any other participant matches it.
ISO 8601, e.g. 2026-10-16T00:00:00Z. Chats whose latest message is at or after this time.
ISO 8601, e.g. 2026-10-17T00:00:00Z. Chats whose latest message is before this time.
The fields available for a ChatConversation object.
A comma separated list of ChatConversation fields to display.
A comma separated list of fields to expand.
The fields available for a User object.
A comma separated list of User fields to display.
Response
The request has succeeded.
Changes
- breaking
added to the response body
oneOflist for the response status - breaking
added to the
/response propertyoneOflist for the response status - info
added the new optional
queryrequest parameterend_time - info
added the new optional
queryrequest parameteris_archived - info
added the new optional
queryrequest parameteris_muted - info
added the new optional
queryrequest parameterparticipant_ids - info
added the new optional
queryrequest parameterparticipant_query - info
added the new optional
queryrequest parameterstart_time - info
added the new optional
queryrequest parametertype - info
added the enum value
receives_your_chatto the propertyitems/of thequeryrequest parameteruser.fields - info
added
https://api.x.com/2/problems/dm-bad-attachmenthttps://api.x.com/2/problems/dm-bad-ctahttps://api.x.com/2/problems/dm-bad-custom-profilehttps://api.x.com/2/problems/dm-bad-mediahttps://api.x.com/2/problems/dm-bad-quick-replyhttps://api.x.com/2/problems/dm-bad-urlhttps://api.x.com/2/problems/dm-conversation-name-too-longhttps://api.x.com/2/problems/dm-conversation-not-foundhttps://api.x.com/2/problems/dm-duplicatehttps://api.x.com/2/problems/dm-inactive-devicehttps://api.x.com/2/problems/dm-not-deliveredhttps://api.x.com/2/problems/dm-not-foundhttps://api.x.com/2/problems/dm-not-ownerhttps://api.x.com/2/problems/dm-participant-not-addedhttps://api.x.com/2/problems/dm-participant-not-foundhttps://api.x.com/2/problems/dm-participant-restrictedhttps://api.x.com/2/problems/dm-participant-unavailablehttps://api.x.com/2/problems/dm-rate-limitedhttps://api.x.com/2/problems/dm-recipient-blocks-senderhttps://api.x.com/2/problems/dm-recipient-cannot-receivehttps://api.x.com/2/problems/dm-recipient-encrypted-unavailablehttps://api.x.com/2/problems/dm-recipient-not-acceptinghttps://api.x.com/2/problems/dm-recipient-not-foundhttps://api.x.com/2/problems/dm-recipient-restricts-groupshttps://api.x.com/2/problems/dm-recipient-unavailablehttps://api.x.com/2/problems/dm-request-in-progresshttps://api.x.com/2/problems/dm-safety-limitedhttps://api.x.com/2/problems/dm-safety-rejectedhttps://api.x.com/2/problems/dm-sender-blocks-recipienthttps://api.x.com/2/problems/dm-sender-declined-dmshttps://api.x.com/2/problems/dm-sender-dms-closedhttps://api.x.com/2/problems/dm-sender-encrypted-unavailablehttps://api.x.com/2/problems/dm-sender-not-in-conversationhttps://api.x.com/2/problems/dm-sender-not-permittedhttps://api.x.com/2/problems/dm-sender-not-verifiedhttps://api.x.com/2/problems/dm-sender-phone-requiredhttps://api.x.com/2/problems/dm-sender-read-onlyhttps://api.x.com/2/problems/dm-sender-unavailablehttps://api.x.com/2/problems/dm-text-emptyhttps://api.x.com/2/problems/dm-text-too-longhttps://api.x.com/2/problems/dm-too-few-participantshttps://api.x.com/2/problems/dm-too-many-participantshttps://api.x.com/2/problems/dm-unsupported-messagemapping keys to the response discriminator for the response status - info
added the optional property
///to the response with the status - info
added
https://api.x.com/2/problems/dm-bad-attachmenthttps://api.x.com/2/problems/dm-bad-ctahttps://api.x.com/2/problems/dm-bad-custom-profilehttps://api.x.com/2/problems/dm-bad-mediahttps://api.x.com/2/problems/dm-bad-quick-replyhttps://api.x.com/2/problems/dm-bad-urlhttps://api.x.com/2/problems/dm-conversation-name-too-longhttps://api.x.com/2/problems/dm-conversation-not-foundhttps://api.x.com/2/problems/dm-duplicatehttps://api.x.com/2/problems/dm-inactive-devicehttps://api.x.com/2/problems/dm-not-deliveredhttps://api.x.com/2/problems/dm-not-foundhttps://api.x.com/2/problems/dm-not-ownerhttps://api.x.com/2/problems/dm-participant-not-addedhttps://api.x.com/2/problems/dm-participant-not-foundhttps://api.x.com/2/problems/dm-participant-restrictedhttps://api.x.com/2/problems/dm-participant-unavailablehttps://api.x.com/2/problems/dm-rate-limitedhttps://api.x.com/2/problems/dm-recipient-blocks-senderhttps://api.x.com/2/problems/dm-recipient-cannot-receivehttps://api.x.com/2/problems/dm-recipient-encrypted-unavailablehttps://api.x.com/2/problems/dm-recipient-not-acceptinghttps://api.x.com/2/problems/dm-recipient-not-foundhttps://api.x.com/2/problems/dm-recipient-restricts-groupshttps://api.x.com/2/problems/dm-recipient-unavailablehttps://api.x.com/2/problems/dm-request-in-progresshttps://api.x.com/2/problems/dm-safety-limitedhttps://api.x.com/2/problems/dm-safety-rejectedhttps://api.x.com/2/problems/dm-sender-blocks-recipienthttps://api.x.com/2/problems/dm-sender-declined-dmshttps://api.x.com/2/problems/dm-sender-dms-closedhttps://api.x.com/2/problems/dm-sender-encrypted-unavailablehttps://api.x.com/2/problems/dm-sender-not-in-conversationhttps://api.x.com/2/problems/dm-sender-not-permittedhttps://api.x.com/2/problems/dm-sender-not-verifiedhttps://api.x.com/2/problems/dm-sender-phone-requiredhttps://api.x.com/2/problems/dm-sender-read-onlyhttps://api.x.com/2/problems/dm-sender-unavailablehttps://api.x.com/2/problems/dm-text-emptyhttps://api.x.com/2/problems/dm-text-too-longhttps://api.x.com/2/problems/dm-too-few-participantshttps://api.x.com/2/problems/dm-too-many-participantshttps://api.x.com/2/problems/dm-unsupported-messagediscriminator mapping keys to the/response property for the response status
- breaking
- breaking
for the
queryrequest parametermax_results, default value was changed from10to200 - breaking
added to the response body
oneOflist for the response status - breaking
added to the
/response propertyoneOflist for the response status - info
added the new optional
queryrequest parameterunread_only - info
for the
queryrequest parametermax_results, the max was increased from100.00to1000.00 - info
added the enum value
active_follower_countto the propertyitems/of thequeryrequest parameteruser.fields - info
added the enum value
admin_settingsto the propertyitems/of thequeryrequest parameterchat_conversation.fields - info
added the enum value
group_descriptionto the propertyitems/of thequeryrequest parameterchat_conversation.fields - info
added the enum value
group_description_key_versionto the propertyitems/of thequeryrequest parameterchat_conversation.fields - info
added the enum value
inviteto the propertyitems/of thequeryrequest parameterchat_conversation.fields - info
added the enum value
is_archivedto the propertyitems/of thequeryrequest parameterchat_conversation.fields - info
added the enum value
last_read_event_idto the propertyitems/of thequeryrequest parameterchat_conversation.fields - info
added the enum value
newest_event_idto the propertyitems/of thequeryrequest parameterchat_conversation.fields - info
added the enum value
pending_member_idsto the propertyitems/of thequeryrequest parameterchat_conversation.fields - info
added the enum value
subscriber_countto the propertyitems/of thequeryrequest parameteruser.fields - info
added the enum value
unreadto the propertyitems/of thequeryrequest parameterchat_conversation.fields - info
added
https://api.twitter.com/2/problems/duplicate-ruleshttps://api.twitter.com/2/problems/invalid-ruleshttps://api.x.com/2/problems/recipient-not-messageablemapping keys to the response discriminator for the response status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
///to the response with the status - info
added the optional property
///to the response with the status - info
added
https://api.twitter.com/2/problems/duplicate-ruleshttps://api.twitter.com/2/problems/invalid-ruleshttps://api.x.com/2/problems/recipient-not-messageablediscriminator mapping keys to the/response property for the response status
- breaking