---
allOf:
  - $ref: core-event-schema/event.yaml

description: |-
  This event type is used to request keys for end-to-end encryption. It is sent as an
  unencrypted `to-device`_ event.
properties:
  content:
    properties:
      body:
        description: |-
          Information about the requested key. Required when ``action`` is
          ``request``.
        properties:
          algorithm:
            type: string
            description: |-
              The encryption algorithm the requested key in this event is to be used
              with.
          room_id:
            type: string
            description: The room where the key is used.
          sender_key:
            type: string
            description: |-
              The Curve25519 key of the device which initiated the session originally.
          session_id:
            type: string
            description: The ID of the session that the key is for.
        required:
          - algorithm
          - room_id
          - session_id
          - sender_key
        type: object
        title: RequestedKeyInfo
      action:
        enum:
          - request
          - cancel_request
        type: string
      requesting_device_id:
        description: ID of the device requesting the key.
        type: string
      request_id:
        description: |-
          A random string uniquely identifying the request for a key. If the key is
          requested multiple times, it should be reused. It should also reused in order
          to cancel a request.
        type: string
    required:
      - action
      - requesting_device_id
      - request_id
    type: object
  type:
    enum:
      - m.room_key_request
    type: string
type: object