Initializes encryption keys for a Chat conversation. This is the first step before sending messages in a new 1:1 conversation.
For 1:1 conversations, provide the recipient’s user ID as the conversation_id. The server constructs the canonical conversation ID from the authenticated user and recipient.
The request body must contain the conversation key version and participant keys (the conversation key encrypted for each participant using their public key).
Workflow (1:1 conversation):
POST /chat/conversations/{id}/messagesAuthentication:
tweet.read, users.read, dm.writecurl --request POST \
--url https://api.x.com/2/chat/conversations/{id}/keys \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"conversation_key_version": "<string>",
"conversation_participant_keys": [
{
"encrypted_conversation_key": "<string>",
"public_key_version": "<string>",
"user_id": "<string>"
}
],
"action_signatures": [
{
"encoded_message_event_detail": "<string>",
"message_event_signature": {
"message_signing_key_info_list": [
{
"member_id": "<string>",
"public_key_version": "<string>",
"signing_public_key": "<string>"
}
],
"public_key_version": "<string>",
"signature": "<string>",
"signature_version": "<string>",
"signing_public_key": "<string>"
},
"message_id": "<string>",
"signature_payload": "<string>"
}
],
"base64_encoded_key_rotation": "<string>"
}
'{
"data": {
"sequence_id": "<string>"
},
"errors": [
{
"title": "<string>",
"type": "<string>",
"detail": "<string>",
"status": 123
}
]
}Documentation Index
Fetch the complete documentation index at: https://docs.x.com/llms.txt
Use this file to discover all available pages before exploring further.
The access token received from the authorization server in the OAuth 2.0 flow.
The recipient's user ID for a 1:1 conversation, or a group conversation ID (prefixed with 'g'). Identifies the conversation target. Accepts three formats: (1) a recipient user ID for 1:1 conversations (e.g., '1215441834412953600'), (2) a legacy 1:1 conversation ID with two user IDs separated by a dash (e.g., '1215441834412953600-1603419180975409153'), or (3) a group conversation ID prefixed with 'g' (e.g., 'g1234567890123456789'). The server constructs the canonical conversation ID from the authenticated user and recipient when a single user ID is provided.
^([0-9]{1,19}|[0-9]{1,19}-[0-9]{1,19}|g[0-9]{1,19})$"1215441834412953600"
Version of the conversation encryption key (typically a timestamp in milliseconds).
The conversation key encrypted for each participant using their public key.
Show child attributes
Cryptographic signatures for the key initialization action.
Show child attributes
Base64-encoded key rotation payload for ratchet tree key management.
The request has succeeded.
Show child attributes
1An HTTP Problem Details object, as defined in IETF RFC 7807 (https://tools.ietf.org/html/rfc7807).
Show child attributes
curl --request POST \
--url https://api.x.com/2/chat/conversations/{id}/keys \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"conversation_key_version": "<string>",
"conversation_participant_keys": [
{
"encrypted_conversation_key": "<string>",
"public_key_version": "<string>",
"user_id": "<string>"
}
],
"action_signatures": [
{
"encoded_message_event_detail": "<string>",
"message_event_signature": {
"message_signing_key_info_list": [
{
"member_id": "<string>",
"public_key_version": "<string>",
"signing_public_key": "<string>"
}
],
"public_key_version": "<string>",
"signature": "<string>",
"signature_version": "<string>",
"signing_public_key": "<string>"
},
"message_id": "<string>",
"signature_payload": "<string>"
}
],
"base64_encoded_key_rotation": "<string>"
}
'{
"data": {
"sequence_id": "<string>"
},
"errors": [
{
"title": "<string>",
"type": "<string>",
"detail": "<string>",
"status": 123
}
]
}