{
  "apiVersion": "1.0.0",
  "swaggerVersion": "1.2",
  "basePath": "http://localhost:8008/_matrix/client/api/v1",
  "resourcePath": "/events",
  "produces": [
    "application/json"
  ],
  "apis": [
    {
      "path": "/events",
      "operations": [
        {
          "method": "GET",
          "summary": "Listen on the event stream",
          "notes": "This can only be done by the logged in user. This will block until an event is received, or until the timeout is reached.",
          "type": "PaginationChunk",
          "nickname": "get_event_stream",
          "parameters": [
            {
              "name": "from",
              "description": "The token to stream from.",
              "required": false,
              "type": "string",
              "paramType": "query"
            },
            {
              "name": "timeout",
              "description": "The maximum time in milliseconds to wait for an event.",
              "required": false,
              "type": "integer",
              "paramType": "query"
            }
          ]
        }
      ],
      
      "responseMessages": [
        {
          "code": 400,
          "message": "Bad pagination token."
        }
      ]
    },
    {
      "path": "/events/{eventId}",
      "operations": [
        {
          "method": "GET",
          "summary": "Get information about a single event.",
          "notes": "Get information about a single event.",
          "type": "Event",
          "nickname": "get_event",
          "parameters": [
            {
              "name": "eventId",
              "description": "The event ID to get.",
              "required": true,
              "type": "string",
              "paramType": "path"
            }
          ],
          "responseMessages": [
            {
              "code": 404,
              "message": "Event not found."
            }
          ]
        }
      ]
    },
    {
      "path": "/initialSync",
      "operations": [
        {
          "method": "GET",
          "summary": "Get this user's current state.",
          "notes": "Get this user's current state.",
          "type": "InitialSyncResponse",
          "nickname": "initial_sync",
          "parameters": [
            {
              "name": "limit",
              "description": "The maximum number of messages to return for each room.",
              "type": "integer",
              "paramType": "query",
              "required": false
            }
          ]
        }
      ]
    },
    {
      "path": "/publicRooms",
      "operations": [
        {
          "method": "GET",
          "summary": "Get a list of publicly visible rooms.",
          "type": "PublicRoomsPaginationChunk",
          "nickname": "get_public_room_list"
        }
      ]
    }
  ],
  "models": {
    "PaginationChunk": {
      "id": "PaginationChunk",
      "properties": {
        "start": {
          "type": "string",
          "description": "A token which correlates to the first value in \"chunk\" for paginating.",
          "required": true
        },
        "end": {
          "type": "string",
          "description": "A token which correlates to the last value in \"chunk\" for paginating.",
          "required": true
        },
        "chunk": {
          "type": "array",
          "description": "An array of events.",
          "required": true,
          "items": {
            "$ref": "Event"
          }
        }
      }
    },
    "Event": {
      "id": "Event",
      "properties": {
        "event_id": {
          "type": "string",
          "description": "An ID which uniquely identifies this event.",
          "required": true
        },
        "room_id": {
          "type": "string",
          "description": "The room in which this event occurred.",
          "required": true
        }
      }
    },
    "PublicRoomInfo": {
      "id": "PublicRoomInfo",
      "properties": {
        "aliases": {
          "type": "array",
          "description": "A list of room aliases for this room.",
          "items": {
            "$ref": "string"
          }
        },
        "name": {
          "type": "string",
          "description": "The name of the room, as given by the m.room.name state event."
        },
        "room_id": {
          "type": "string",
          "description": "The room ID for this public room.",
          "required": true
        },
        "topic": {
          "type": "string",
          "description": "The topic of this room, as given by the m.room.topic state event."
        }
      }
    },
    "PublicRoomsPaginationChunk": {
      "id": "PublicRoomsPaginationChunk",
      "properties": {
        "start": {
          "type": "string",
          "description": "A token which correlates to the first value in \"chunk\" for paginating.",
          "required": true
        },
        "end": {
          "type": "string",
          "description": "A token which correlates to the last value in \"chunk\" for paginating.",
          "required": true
        },
        "chunk": {
          "type": "array",
          "description": "A list of public room data.",
          "required": true,
          "items": {
            "$ref": "PublicRoomInfo"
          }
        }
      }
    },
    "InitialSyncResponse": {
      "id": "InitialSyncResponse",
      "properties": {
        "end": {
          "type": "string",
          "description": "A streaming token which can be used with /events to continue from this snapshot of data.",
          "required": true
        },
        "presence": {
          "type": "array",
          "description": "A list of presence events.",
          "items": {
            "$ref": "Event"
          },
          "required": false
        },
        "rooms": {
          "type": "array",
          "description": "A list of initial sync room data.",
          "required": false,
          "items": {
            "$ref": "InitialSyncRoomData"
          }
        }
      }
    },
    "InitialSyncRoomData": {
      "id": "InitialSyncRoomData",
      "properties": {
        "membership": {
          "type": "string",
          "description": "This user's membership state in this room.",
          "required": true
        },
        "room_id": {
          "type": "string",
          "description": "The ID of this room.",
          "required": true
        },
        "messages": {
          "type": "PaginationChunk",
          "description": "The most recent messages for this room, governed by the limit parameter.",
          "required": false
        },
        "state": {
          "type": "array",
          "description": "A list of state events representing the current state of the room.",
          "required": false,
          "items": {
            "$ref": "Event"
          }
        }
      }
    }
  }
}
