{
  "apiVersion": "1.0.0",
  "swaggerVersion": "1.2",
  "basePath": "http://localhost:8080/matrix/client/api/v1",
  "resourcePath": "/presence",
  "produces": [
    "application/json"
  ],
  "consumes": [
    "application/json"
  ],
  "apis": [
    {
      "path": "/presence/{userId}/status",
      "operations": [
        {
          "method": "PUT",
          "summary": "Update this user's presence state.",
          "notes": "This can only be done by the logged in user.",
          "type": "void",
          "nickname": "update_presence",
          "parameters": [
            {
              "name": "body",
              "description": "The new presence state",
              "required": true,
              "type": "PresenceUpdate",
              "paramType": "body"
            },
            {
              "name": "userId",
              "description": "The user whose presence to set.",
              "required": true,
              "type": "string",
              "paramType": "path"
            }
          ]
        },
        {
          "method": "GET",
          "summary": "Get this user's presence state.",
          "notes": "Get this user's presence state.",
          "type": "PresenceUpdate",
          "nickname": "get_presence",
          "parameters": [
            {
              "name": "userId",
              "description": "The user whose presence to get.",
              "required": true,
              "type": "string",
              "paramType": "path"
            }
          ]
        }
      ]
    },
    {
      "path": "/presence/list/{userId}",
      "operations": [
        {
          "method": "GET",
          "summary": "Retrieve a list of presences for all of this user's friends.",
          "notes": "",
          "type": "array",
          "items": {
            "$ref": "Presence"
          },
          "nickname": "get_presence_list",
          "parameters": [
            {
              "name": "userId",
              "description": "The user whose presence list to get.",
              "required": true,
              "type": "string",
              "paramType": "path"
            }
          ]
        },
        {
          "method": "POST",
          "summary": "Add or remove users from this presence list.",
          "notes": "Add or remove users from this presence list.",
          "type": "void",
          "nickname": "modify_presence_list",
          "parameters": [
            {
              "name": "userId",
              "description": "The user whose presence list is being modified.",
              "required": true,
              "type": "string",
              "paramType": "path"
            },
            {
              "name": "body",
              "description": "The modifications to make to this presence list.",
              "required": true,
              "type": "PresenceListModifications",
              "paramType": "body"
            }
          ]
        }
      ]
    }
  ],
  "models": {
    "PresenceUpdate": {
      "id": "PresenceUpdate",
      "properties": {
        "state": {
          "type": "string",
          "description": "Enum: The presence state.",
          "enum": [
            "offline",
            "unavailable",
            "online",
            "free_for_chat"
          ]
        },
        "status_msg": {
          "type": "string",
          "description": "The user-defined message associated with this presence state."
        }
      },
      "subTypes": [
        "Presence"
      ]
    },
    "Presence": {
      "id": "Presence",
      "properties": {
        "mtime_age": {
          "type": "integer",
          "format": "int64",
          "description": "The last time this user's presence state changed, in milliseconds."
        },
        "user_id": {
          "type": "string",
          "description": "The fully qualified user ID"
        }
      }
    },
    "PresenceListModifications": {
      "id": "PresenceListModifications",
      "properties": {
        "invite": {
          "type": "array",
          "description": "A list of user IDs to add to the list.",
          "items": {
            "type": "string",
            "description": "A fully qualified user ID."
          }
        },
        "drop": {
          "type": "array",
          "description": "A list of user IDs to remove from the list.",
          "items": {
            "type": "string",
            "description": "A fully qualified user ID."
          }
        }
      }
    }
  }
}