{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/vonage/main/json-schema/vonage-member-schema.json",
  "title": "member",
  "x-generated": "2026-10-08",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/vonage-conversation-openapi.yml#/components/schemas/member",
  "type": "object",
  "properties": {
    "id": {
      "$ref": "#/$defs/member_id"
    },
    "conversation_id": {
      "$ref": "#/$defs/conversation_id"
    },
    "_embedded": {
      "type": "object",
      "properties": {
        "user": {
          "$ref": "#/$defs/user_lite"
        }
      }
    },
    "state": {
      "$ref": "#/$defs/member_state"
    },
    "timestamp": {
      "$ref": "#/$defs/member_timestamp"
    },
    "initiator": {
      "$ref": "#/$defs/member_initiator"
    },
    "channel": {
      "$ref": "#/$defs/channel"
    },
    "media": {
      "$ref": "#/$defs/media"
    },
    "knocking_id": {
      "type": "string",
      "description": "The ID of the original knocker request (if applicable)."
    },
    "invited_by": {
      "type": "string",
      "description": "The member ID of the member that invited this member to the conversation (if applicable)."
    },
    "_links": {
      "type": "object",
      "properties": {
        "href": {
          "$ref": "#/$defs/member_href"
        }
      }
    }
  },
  "$defs": {
    "channel": {
      "description": "A user who joins a conversation as a member can have one channel per membership. For more details see [channel concept docs](/voice/voice-api/concepts/in-app-calling)",
      "type": "object",
      "oneOf": [
        {
          "type": "object",
          "title": "App",
          "description": "Member is using app channel type",
          "properties": {
            "type": {
              "type": "string",
              "description": "Channel type",
              "enum": [
                "app"
              ]
            },
            "from": {
              "$ref": "#/$defs/member_channel_from"
            },
            "to": {
              "type": "object",
              "description": "Settings which control who this member can send messages to.",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "app"
                  ]
                },
                "user": {
                  "description": "The user ID of the member that this member can send messages to.",
                  "type": "string"
                }
              }
            }
          },
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "title": "Phone",
          "description": "Member is using phone channel type",
          "properties": {
            "type": {
              "type": "string",
              "description": "Channel type",
              "enum": [
                "phone"
              ]
            },
            "from": {
              "$ref": "#/$defs/member_channel_from"
            },
            "to": {
              "type": "object",
              "description": "Settings which control who this member can send messages to.",
              "properties": {
                "number": {
                  "type": "string",
                  "description": "The phone number of the member that this member can send messages to."
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "phone"
                  ]
                }
              }
            }
          },
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "title": "SMS",
          "properties": {
            "type": {
              "type": "string",
              "description": "Channel type",
              "enum": [
                "sms"
              ]
            },
            "from": {
              "$ref": "#/$defs/member_channel_from"
            },
            "to": {
              "type": "object",
              "properties": {
                "number": {
                  "type": "string"
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "sms"
                  ]
                }
              }
            }
          }
        },
        {
          "type": "object",
          "title": "MMS",
          "properties": {
            "type": {
              "type": "string",
              "description": "Channel type",
              "enum": [
                "mms"
              ]
            },
            "from": {
              "$ref": "#/$defs/member_channel_from"
            },
            "to": {
              "type": "object",
              "properties": {
                "number": {
                  "type": "string"
                }
              }
            }
          }
        },
        {
          "type": "object",
          "title": "WhatsApp",
          "properties": {
            "type": {
              "type": "string",
              "description": "Channel type",
              "enum": [
                "whatsapp"
              ]
            },
            "from": {
              "$ref": "#/$defs/member_channel_from"
            },
            "to": {
              "type": "object",
              "properties": {
                "number": {
                  "type": "string"
                }
              }
            }
          }
        },
        {
          "type": "object",
          "title": "Viber",
          "properties": {
            "type": {
              "type": "string",
              "description": "Channel type",
              "enum": [
                "viber"
              ]
            },
            "from": {
              "$ref": "#/$defs/member_channel_from"
            },
            "to": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                }
              }
            }
          }
        },
        {
          "type": "object",
          "title": "Messenger",
          "properties": {
            "type": {
              "type": "string",
              "description": "Channel type",
              "enum": [
                "messenger"
              ]
            },
            "from": {
              "$ref": "#/$defs/member_channel_from"
            },
            "to": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                }
              }
            }
          }
        }
      ]
    },
    "conversation_id": {
      "type": "string",
      "description": "The unique identifier for this conversation"
    },
    "media": {
      "type": "object",
      "description": "Details about the current media setting states",
      "properties": {
        "audio_settings": {
          "type": "object",
          "properties": {
            "enabled": {
              "description": "is audio currently enabled",
              "type": "boolean"
            },
            "earmuffed": {
              "description": "is audio currently earmuffed",
              "type": "boolean"
            },
            "muted": {
              "description": "is audio currently muted",
              "type": "boolean"
            }
          }
        },
        "audio": {
          "description": "Is an audio connection possible",
          "type": "boolean"
        }
      }
    },
    "member_channel_from": {
      "type": "object",
      "description": "Which channel types this member accepts messages from (if not set, all are accepted)",
      "properties": {
        "type": {
          "description": "Comma sperated list, can include channel types `app`, `phone`, `sms`, `mms`, `whatsapp` , `viber`, or `messenger`",
          "type": "string"
        }
      }
    },
    "member_href": {
      "type": "string",
      "format": "url",
      "description": "A link towards a member included in Conversation API"
    },
    "member_id": {
      "type": "string",
      "description": "Member ID"
    },
    "member_initiator": {
      "oneOf": [
        {
          "type": "object",
          "title": "Invited by User",
          "properties": {
            "joined": {
              "type": "object",
              "properties": {
                "is_system": {
                  "type": "boolean",
                  "description": "`false` if the user was invited by a user."
                },
                "user_id": {
                  "$ref": "#/$defs/user_id"
                },
                "member_id": {
                  "$ref": "#/$defs/member_id"
                }
              }
            }
          }
        },
        {
          "type": "object",
          "title": "Invited by Admin JWT",
          "properties": {
            "invited": {
              "type": "object",
              "properties": {
                "is_system": {
                  "type": "boolean",
                  "description": "`true` if the user was invited by an admin JWT."
                }
              }
            }
          }
        }
      ]
    },
    "member_state": {
      "type": "string",
      "description": "The state that the member is in. Possible values are `INVITED`, `JOINED`, `LEFT`, or `UNKNOWN`",
      "enum": [
        "INVITED",
        "JOINED",
        "LEFT",
        "UNKNOWN"
      ]
    },
    "member_timestamp": {
      "type": "object",
      "properties": {
        "invited": {
          "description": "The time that the member was invited to a conversation",
          "$ref": "#/$defs/timestamp"
        },
        "joined": {
          "description": "The time that the member joined the conversation",
          "$ref": "#/$defs/timestamp"
        },
        "left": {
          "description": "The time that the member left the conversation",
          "$ref": "#/$defs/timestamp"
        }
      }
    },
    "timestamp": {
      "type": "string"
    },
    "user_display_name": {
      "type": [
        "string",
        "null"
      ],
      "description": "A string to be displayed as user name. It does not need to be unique"
    },
    "user_id": {
      "type": "string",
      "description": "User ID"
    },
    "user_links": {
      "type": "object",
      "properties": {
        "self": {
          "type": "object",
          "properties": {
            "href": {
              "type": "string"
            }
          }
        }
      }
    },
    "user_lite": {
      "type": "object",
      "properties": {
        "id": {
          "$ref": "#/$defs/user_id"
        },
        "name": {
          "$ref": "#/$defs/user_name"
        },
        "display_name": {
          "$ref": "#/$defs/user_display_name"
        },
        "_links": {
          "$ref": "#/$defs/user_links"
        }
      }
    },
    "user_name": {
      "type": [
        "string",
        "null"
      ],
      "description": "Unique name for a user"
    }
  }
}