{
  "endpoint": "DiscussionHandler",
  "preferredHttpPath": "d",
  "alternateHttpPaths": [
    "HttpDiscussion"
  ],
  "summary": "Discussion-related APIs.",
  "description": "Like Polls, discussions can be standalone or implicitly associated with another entity.\n            Standalone discussions have a topic, implicit discussions are implicitly about the other entity.\n            Either type of discussion is associated with a list of messages.\n            If desired, a discussion message can be the root of a discussion, thereby creating a threaded discussion.\n            To create a subthread, use \u003Csee cref=\u0022M:PicMeApi.DiscussionApis.CreateDiscussionMessage(AmbientServices.Auth,AmbientServices.IFileSystem,AmbientServices.Database,PicMeApi.AuthData,AmbientServices.DataScope,AmbientServices.RecordTypeId,System.String,PicMeApi.CreateDiscussionMessageBody)\u0022 /\u003E, passing the message\u0027s global ID scope as the scope, the message\u0027s global ID type as the type, and the message\u0027s regular ID as the entity id.\n            Discussion messages can be listed up to 1000 at a time.\n            Message are stored with the most *recent* message first.",
  "apis": [
    {
      "name": "PatchDiscussionMessage",
      "httpMethod": "PATCH",
      "httpPathRegex": "^/dm/(?<scope>[^?/&]+)/(?<discussionOrEntityTypeId>[^?/&]+)/(?<discussionOrEntityId>[^?/&]+)/(?<discussionMessageId>[^?/&]+)",
      "subPathPattern": "/dm/{scope}/{discussionOrEntityTypeId}/{discussionOrEntityId}/{discussionMessageId}",
      "summary": "Patches a previously-posted discussion message.",
      "parameters": [
        {
          "name": "scope",
          "required": true,
          "type": "DataScope",
          "description": "The <see cref=\"T:AmbientServices.DataScope\" /> for the discussion or entity.  (Scopes are kind of like namespaces).  To avoid path parsing issues with empty path segments, use '::' when using the global scope.  When the scope is empty, ie. the discussion is a global (presumably public) discussion."
        },
        {
          "name": "discussionOrEntityTypeId",
          "required": true,
          "type": "RecordTypeId",
          "description": "The <see cref=\"T:AmbientServices.RecordTypeId\" /> of the entity indicated by <paramref name=\"discussionOrEntityId\" />."
        },
        {
          "name": "discussionOrEntityId",
          "required": true,
          "type": "String",
          "description": "A string that is either a <see cref=\"T:AmbientServices.DiscussionId\" /> or another entity ID for which selections can be made."
        },
        {
          "name": "discussionMessageId",
          "required": true,
          "type": "DiscussionMessageId",
          "description": "The <see cref=\"T:AmbientServices.DiscussionMessageId\" /> identifying the discussion message."
        },
        {
          "name": "body",
          "required": true,
          "type": "PatchDiscussionMessageBody",
          "description": "The <see cref=\"T:PicMeApi.PatchDiscussionMessageBody\" /> containing the partial new discussion message data."
        }
      ],
      "return": {
        "type": "PatchDiscussionMessageResponse",
        "description": "A <see cref=\"T:PicMeApi.PatchDiscussionMessageResponse\" /> containing the response."
      }
    },
    {
      "name": "DeleteDiscussionMessage",
      "httpMethod": "DELETE",
      "httpPathRegex": "^/dm/(?<scope>[^?/&]+)/(?<discussionOrEntityTypeId>[^?/&]+)/(?<discussionOrEntityId>[^?/&]+)/(?<discussionMessageId>[^?/&]+)",
      "subPathPattern": "/dm/{scope}/{discussionOrEntityTypeId}/{discussionOrEntityId}/{discussionMessageId}",
      "summary": "Deletes a discussion message.",
      "parameters": [
        {
          "name": "scope",
          "required": true,
          "type": "DataScope",
          "description": "The <see cref=\"T:AmbientServices.DataScope\" /> for the discussion or entity.  (Scopes are kind of like namespaces).  To avoid path parsing issues with empty path segments, use '::' when using the global scope.  When the scope is empty, ie. the discussion is a global (presumably public) discussion."
        },
        {
          "name": "discussionOrEntityTypeId",
          "required": true,
          "type": "RecordTypeId",
          "description": "The <see cref=\"T:AmbientServices.RecordTypeId\" /> of the entity indicated by <paramref name=\"discussionOrEntityId\" />."
        },
        {
          "name": "discussionOrEntityId",
          "required": true,
          "type": "String",
          "description": "A string that is either a <see cref=\"T:AmbientServices.DiscussionId\" /> or another entity ID for which selections can be made."
        },
        {
          "name": "discussionMessageId",
          "required": true,
          "type": "DiscussionMessageId",
          "description": "The <see cref=\"T:AmbientServices.DiscussionMessageId\" /> identifying the discussion message."
        }
      ],
      "return": {
        "type": "DeleteDiscussionMessageResponse",
        "description": "The <see cref=\"T:PicMeApi.DeleteDiscussionMessageResponse\" /> containing the response."
      }
    },
    {
      "name": "CreateDiscussionMessage",
      "httpMethod": "POST",
      "httpPathRegex": "^/dm/(?<scope>[^?/&]+)/(?<discussionOrEntityTypeId>[^?/&]+)/(?<discussionOrEntityId>[^?/&]+)",
      "subPathPattern": "/dm/{scope}/{discussionOrEntityTypeId}/{discussionOrEntityId}",
      "summary": "Creates a discussion message.",
      "description": "To create a thread of replies to another discussion message, use the root message's global ID scope as the scope, the root message's global ID type as the type, and the root message's regular ID as the entity id.",
      "parameters": [
        {
          "name": "scope",
          "required": true,
          "type": "DataScope",
          "description": "The <see cref=\"T:AmbientServices.DataScope\" /> for the discussion or entity.  (Scopes are kind of like namespaces).  To avoid path parsing issues with empty path segments, use '::' when using the global scope.  When the scope is empty, ie. the discussion is a global (presumably public) discussion."
        },
        {
          "name": "discussionOrEntityTypeId",
          "required": true,
          "type": "RecordTypeId",
          "description": "The <see cref=\"T:AmbientServices.RecordTypeId\" /> of the entity indicated by <paramref name=\"discussionOrEntityId\" />."
        },
        {
          "name": "discussionOrEntityId",
          "required": true,
          "type": "String",
          "description": "A string that is either a <see cref=\"T:AmbientServices.DiscussionId\" /> or another entity ID for which selections can be made."
        },
        {
          "name": "body",
          "required": true,
          "type": "CreateDiscussionMessageBody",
          "description": "The <see cref=\"T:PicMeApi.CreateDiscussionMessageBody\" /> from the body of the request."
        }
      ],
      "return": {
        "type": "CreateDiscussionMessageResponse",
        "description": "A <see cref=\"T:PicMeApi.CreateDiscussionMessageResponse\" /> with the response."
      }
    },
    {
      "name": "ListDiscussionMessages",
      "httpMethod": "GET",
      "httpPathRegex": "^/dm/(?<scope>[^?/&]+)/(?<discussionOrEntityTypeId>[^?/&]+)/(?<discussionOrEntityId>[^?/&]+)",
      "subPathPattern": "/dm/{scope}/{discussionOrEntityTypeId}/{discussionOrEntityId}",
      "summary": "Lists discussion messages in the specified discussion.",
      "parameters": [
        {
          "name": "scope",
          "required": true,
          "type": "DataScope",
          "description": "The <see cref=\"T:AmbientServices.DataScope\" /> for the discussion or entity.  (Scopes are kind of like namespaces).  To avoid path parsing issues with empty path segments, use '::' when using the global scope.  When the scope is empty, ie. the discussion is a global (presumably public) discussion."
        },
        {
          "name": "discussionOrEntityTypeId",
          "required": true,
          "type": "RecordTypeId",
          "description": "The <see cref=\"T:AmbientServices.RecordTypeId\" /> of the entity indicated by <paramref name=\"discussionOrEntityId\" />."
        },
        {
          "name": "discussionOrEntityId",
          "required": true,
          "type": "String",
          "description": "A string that is either a <see cref=\"T:AmbientServices.DiscussionId\" /> or another entity ID for which selections can be made."
        },
        {
          "name": "continuation",
          "required": false,
          "type": "String?",
          "description": "An optional continuation string from a previous call to continue listing."
        }
      ],
      "return": {
        "type": "ListDiscussionMessagesResponse",
        "description": "The <see cref=\"T:PicMeApi.ListDiscussionMessagesResponse\" /> containing the response."
      }
    },
    {
      "name": "PatchDiscussion",
      "httpMethod": "PATCH",
      "httpPathRegex": "^/d/i/(?<scope>[^?/&]+)/(?<discussionId>[^?/&]+)",
      "subPathPattern": "/d/i/{scope}/{discussionId}",
      "summary": "Patches a standalone discussion.",
      "parameters": [
        {
          "name": "scope",
          "required": true,
          "type": "DataScope",
          "description": "The <see cref=\"T:AmbientServices.DataScope\" /> for the discussion or entity.  (Scopes are kind of like namespaces).  To avoid path parsing issues with empty path segments, use '::' when using the global scope.  When the scope is empty, ie. the discussion is a global (presumably public) discussion."
        },
        {
          "name": "discussionId",
          "required": true,
          "type": "DiscussionId",
          "description": "The <see cref=\"T:AmbientServices.DiscussionId\" /> of the discussion being patched."
        },
        {
          "name": "body",
          "required": true,
          "type": "PatchDiscussionBody",
          "description": "The <see cref=\"T:PicMeApi.PatchDiscussionBody\" /> containing the partial new discussion data."
        }
      ],
      "return": {
        "type": "PatchDiscussionResponse",
        "description": "A <see cref=\"T:PicMeApi.PatchDiscussionResponse\" /> containing the response."
      }
    },
    {
      "name": "GetDiscussion",
      "httpMethod": "GET",
      "httpPathRegex": "^/d/i/(?<scope>[^?/&]+)/(?<discussionId>[^?/&]+)",
      "subPathPattern": "/d/i/{scope}/{discussionId}",
      "summary": "Gets the details for the specified standalone discussion.",
      "parameters": [
        {
          "name": "scope",
          "required": true,
          "type": "DataScope",
          "description": "The <see cref=\"T:AmbientServices.DataScope\" /> for the discussion or entity.  (Scopes are kind of like namespaces).  To avoid path parsing issues with empty path segments, use '::' when using the global scope.  When the scope is empty, ie. the discussion is a global (presumably public) discussion."
        },
        {
          "name": "discussionId",
          "required": true,
          "type": "DiscussionId",
          "description": "The <see cref=\"T:AmbientServices.DiscussionId\" /> for the desired discussion."
        }
      ],
      "return": {
        "type": "GetDiscussionResponse",
        "description": "The <see cref=\"T:PicMeApi.GetDiscussionResponse\" /> containing the response."
      }
    },
    {
      "name": "DeleteDiscussion",
      "httpMethod": "DELETE",
      "httpPathRegex": "^/d/i/(?<scope>[^?/&]+)/(?<discussionId>[^?/&]+)",
      "subPathPattern": "/d/i/{scope}/{discussionId}",
      "summary": "Deletes the specified standalone discussion.",
      "parameters": [
        {
          "name": "scope",
          "required": true,
          "type": "DataScope",
          "description": "The <see cref=\"T:AmbientServices.DataScope\" /> for the discussion or entity.  (Scopes are kind of like namespaces).  To avoid path parsing issues with empty path segments, use '::' when using the global scope.  When the scope is empty, ie. the discussion is a global (presumably public) discussion."
        },
        {
          "name": "discussionId",
          "required": true,
          "type": "DiscussionId",
          "description": "The <see cref=\"T:AmbientServices.DiscussionId\" /> for the desired discussion."
        }
      ],
      "return": {
        "type": "DeleteDiscussionResponse",
        "description": "A <see cref=\"T:PicMeApi.DeleteDiscussionResponse\" /> containing the response."
      }
    },
    {
      "name": "CreateDiscussion",
      "httpMethod": "POST",
      "httpPathRegex": "^/d/i/(?<scope>[^?/&]+)",
      "subPathPattern": "/d/i/{scope}",
      "summary": "Creates a standalone discussion.",
      "parameters": [
        {
          "name": "scope",
          "required": true,
          "type": "DataScope",
          "description": "The <see cref=\"T:AmbientServices.DataScope\" /> for the discussion or entity.  (Scopes are kind of like namespaces).  To avoid path parsing issues with empty path segments, use '::' when using the global scope.  When the scope is empty, ie. the discussion is a global (presumably public) discussion."
        },
        {
          "name": "body",
          "required": true,
          "type": "CreateDiscussionBody",
          "description": "The <see cref=\"T:PicMeApi.CreateDiscussionBody\" /> from the body of the request."
        }
      ],
      "return": {
        "type": "CreateDiscussionResponse",
        "description": "A <see cref=\"T:PicMeApi.CreateDiscussionResponse\" /> containing the response."
      }
    },
    {
      "name": "ListDiscussions",
      "httpMethod": "GET",
      "httpPathRegex": "^/d/i/(?<scope>[^?/&]+)",
      "subPathPattern": "/d/i/{scope}",
      "summary": "Lists standalone discussions that the user has rights to.",
      "parameters": [
        {
          "name": "scope",
          "required": true,
          "type": "DataScope",
          "description": "The <see cref=\"T:AmbientServices.DataScope\" /> for the discussion or entity.  (Scopes are kind of like namespaces).  To avoid path parsing issues with empty path segments, use '::' when using the global scope.  When the scope is empty, ie. the discussion is a global (presumably public) discussion."
        },
        {
          "name": "filterQuery",
          "required": false,
          "type": "DiscussionQuery?",
          "description": "An optional <see cref=\"T:PicMeApi.DiscussionQuery\" /> indicating attributes of the discussions to be listed."
        },
        {
          "name": "itemsPerPage",
          "required": false,
          "type": "Int32",
          "description": "The number of items to list per page."
        },
        {
          "name": "continuation",
          "required": false,
          "type": "String?",
          "description": "A string from the previous call that will allow the caller to continue listing where the previous call left off."
        },
        {
          "name": "forUserId",
          "required": false,
          "type": "UserId?",
          "description": "An optional <see cref=\"T:AmbientServices.UserId\" /> whose discussions will be listed.  If specified, the caller must be a root administrator."
        }
      ],
      "return": {
        "type": "ListDiscussionsResponse",
        "description": "A <see cref=\"T:PicMeApi.ListDiscussionsResponse\" /> containing the response."
      }
    }
  ],
  "types": [
    {
      "name": "DataScope",
      "summary": "A string that contains a data scope which distinguishes one set of data (records or indexes) from another.\n            It can be part or all of one or more record identifiers or paths, or any other unique string, but must not contain embedded NUL characters.",
      "type": "proxy",
      "representedBy": "String"
    },
    {
      "name": "RecordTypeId",
      "summary": "A struct that holds a record type identifier.\n            Record type identifiers uniquely identify a specific type of record, but take care, as they can be environment-specific (ie. the same type can have different record type identifiers in different environments).",
      "type": "proxy",
      "representedBy": "String"
    },
    {
      "name": "DiscussionMessageId",
      "summary": "A struct that holds a discussion message ID.",
      "type": "proxy",
      "representedBy": "String"
    },
    {
      "name": "PatchDiscussionMessageBody",
      "summary": "A record containing the structure of the body for the <see cref=\"M:PicMeApi.DiscussionApis.PatchDiscussionMessage(AmbientServices.Auth,AmbientServices.Database,PicMeApi.AuthData,AmbientServices.DataScope,AmbientServices.RecordTypeId,System.String,AmbientServices.DiscussionMessageId,PicMeApi.PatchDiscussionMessageBody)\" /> API.\n            Any parts of the structure may be left unspecified, which will cause the existing value to be retained.",
      "type": "composite",
      "members": [
        {
          "name": "text",
          "type": "Text?",
          "summary": "The <see cref=\"P:PicMeApi.PatchDiscussionMessageBody.Text\" /> of the message."
        }
      ]
    },
    {
      "name": "Text",
      "summary": "A struct that holds a string of text that should be indexed as words rather than as a single complete string because it is expected to be longer, possibly multi-line.",
      "type": "proxy",
      "representedBy": "String"
    },
    {
      "name": "PatchDiscussionMessageResponse",
      "summary": "The response for <see cref=\"M:PicMeApi.DiscussionApis.PatchDiscussionMessage(AmbientServices.Auth,AmbientServices.Database,PicMeApi.AuthData,AmbientServices.DataScope,AmbientServices.RecordTypeId,System.String,AmbientServices.DiscussionMessageId,PicMeApi.PatchDiscussionMessageBody)\" />.",
      "type": "composite",
      "members": [
        {
          "name": "message",
          "type": "DiscussionMessage"
        }
      ]
    },
    {
      "name": "DiscussionMessage",
      "summary": "A record that holds information about a discussion message.\n            Discussion messages should be scoped to a discussion or to some other entity (each of which has an implicit discussion).",
      "type": "composite",
      "members": [
        {
          "name": "discussionMessageId",
          "type": "DiscussionMessageId",
          "summary": "The ID of the discussion message."
        },
        {
          "name": "discussionMessageGlobalId",
          "type": "RecordGlobalId",
          "summary": "The Global ID of the discussion message."
        },
        {
          "name": "text",
          "type": "Text",
          "summary": "The text of the discussion message.  Text is assumed to be in Markdown format."
        },
        {
          "name": "creatorUserId",
          "type": "ActorId",
          "summary": "The <see cref=\"T:AmbientServices.ActorId\" /> of the user who created the discussion message."
        },
        {
          "name": "creationTime",
          "type": "DateTime",
          "summary": "The time the discussion message was created."
        },
        {
          "name": "modifierUserId",
          "type": "ActorId",
          "summary": "The <see cref=\"T:AmbientServices.ActorId\" /> of the user who modified the discussion message."
        },
        {
          "name": "modificationTime",
          "type": "DateTime",
          "summary": "The time the discussion message was last modified."
        }
      ]
    },
    {
      "name": "ActorId",
      "summary": "A struct that holds an actor identifier, which identifies either a single user or both an actor (actual) and effective (proxied) user.",
      "type": "proxy",
      "representedBy": "String"
    },
    {
      "name": "RecordGlobalId",
      "summary": "A structured replacement for <see cref=\"T:AmbientServices.RecordIdentifier\" /> that contains the same data, a type-qualified and parent-qualified global identifier for a database record.\n            Records may be children of other records, and this identifier contains the path to the parent in addition to the path to the child record.\n            An example of a record that is a child of another record is an upload within a collection.",
      "type": "proxy",
      "representedBy": "String"
    },
    {
      "name": "DeleteDiscussionMessageResponse",
      "summary": "A record containing the response after deleting a colleciton.",
      "type": "composite",
      "members": [
        {
          "name": "discussionMessageGlobalId",
          "type": "RecordGlobalId",
          "summary": "The <see cref=\"T:AmbientServices.RecordGlobalId\" /> for the discussion message."
        },
        {
          "name": "discussionMessageId",
          "type": "DiscussionMessageId",
          "summary": "The <see cref=\"P:PicMeApi.DeleteDiscussionMessageResponse.DiscussionMessageId\" /> for the discussion message to be deleted."
        }
      ]
    },
    {
      "name": "CreateDiscussionMessageBody",
      "summary": "A record containing the structure of the body for the <see cref=\"M:PicMeApi.DiscussionApis.CreateDiscussionMessage(AmbientServices.Auth,AmbientServices.IFileSystem,AmbientServices.Database,PicMeApi.AuthData,AmbientServices.DataScope,AmbientServices.RecordTypeId,System.String,PicMeApi.CreateDiscussionMessageBody)\" /> API.",
      "type": "composite",
      "members": [
        {
          "name": "text",
          "type": "Text",
          "summary": "The <see cref=\"P:PicMeApi.CreateDiscussionMessageBody.Text\" /> of the discussion message."
        }
      ]
    },
    {
      "name": "CreateDiscussionMessageResponse",
      "summary": "The response for <see cref=\"M:PicMeApi.DiscussionApis.CreateDiscussionMessage(AmbientServices.Auth,AmbientServices.IFileSystem,AmbientServices.Database,PicMeApi.AuthData,AmbientServices.DataScope,AmbientServices.RecordTypeId,System.String,PicMeApi.CreateDiscussionMessageBody)\" />.",
      "type": "composite",
      "members": [
        {
          "name": "discussionMessageId",
          "type": "DiscussionMessageId",
          "summary": "The <see cref=\"P:PicMeApi.CreateDiscussionMessageResponse.DiscussionMessageId\" /> for the discussion message."
        }
      ]
    },
    {
      "name": "ListDiscussionMessagesResponse",
      "summary": "A record containing the response from the <see cref=\"M:PicMeApi.DiscussionApis.ListDiscussionMessages(AmbientServices.Auth,AmbientServices.Database,AmbientServices.IFileSystem,PicMeApi.AuthData,AmbientServices.DataScope,AmbientServices.RecordTypeId,System.String,System.String)\" /> API.",
      "type": "composite",
      "members": [
        {
          "name": "entries",
          "type": "ListedDiscussionMessage[]",
          "summary": "An array of <see cref=\"T:PicMeApi.ListedDiscussionMessage\" /> objects, one for each discussion message."
        },
        {
          "name": "userInfo",
          "type": "UserInfo[]",
          "summary": "An array of <see cref=\"P:PicMeApi.ListDiscussionMessagesResponse.UserInfo\" /> for the users in the discussion."
        },
        {
          "name": "continuation",
          "type": "String?",
          "summary": "An optional string from the response to a previous call that can be used to continue the list with the next page of results."
        }
      ]
    },
    {
      "name": "UserInfo",
      "summary": "A record containing basic information about a collaborating user, usually a co-participant in some activity.",
      "type": "composite",
      "members": [
        {
          "name": "userId",
          "type": "UserId",
          "summary": "The <see cref=\"P:AmbientServices.UserInfo.UserId\" /> of this user."
        },
        {
          "name": "unavailable",
          "type": "Boolean",
          "summary": "Whether the user's information is available or not.  If not available, an anonymous placeholder name will be used."
        },
        {
          "name": "name",
          "type": "String",
          "summary": "The user's name."
        },
        {
          "name": "getProfilePicture",
          "type": "Uri?",
          "summary": "A <see cref=\"T:System.Uri\" /> that can be used to retrieve the user's profile picture if one is available, or null if no profile photo is available for this user."
        },
        {
          "name": "externalIds",
          "type": "ExternalEntityIdentifier[]?",
          "summary": "An optional array of <see cref=\"T:AmbientServices.ExternalEntityIdentifier\" /> identifying this user account in external systems."
        }
      ]
    },
    {
      "name": "ExternalEntityIdentifier",
      "summary": "A record that contains an external system identifier and an identifier for a specific item in that system.",
      "type": "composite",
      "members": [
        {
          "name": "externalSystemId",
          "type": "String",
          "summary": "A string that uniquely identifies an external system, often a reverse domain name like 'com.facebook' or 'com.venmo'."
        },
        {
          "name": "externalItemId",
          "type": "String",
          "summary": "A string that uniquely identifies an item in that external system."
        }
      ]
    },
    {
      "name": "ListedDiscussionMessage",
      "summary": "A record containing the data for one discussion message returned in a list of discussion messages.",
      "type": "composite",
      "members": [
        {
          "name": "message",
          "type": "DiscussionMessage",
          "summary": "The <see cref=\"T:AmbientServices.DiscussionMessage\" />."
        }
      ]
    },
    {
      "name": "DiscussionId",
      "summary": "A struct that holds a discussion id.",
      "type": "proxy",
      "representedBy": "String"
    },
    {
      "name": "PatchDiscussionBody",
      "summary": "A record containing the structure of the body for the <see cref=\"M:PicMeApi.DiscussionApis.PatchDiscussion(AmbientServices.Auth,AmbientServices.Database,PicMeApi.AuthData,AmbientServices.DataScope,AmbientServices.DiscussionId,PicMeApi.PatchDiscussionBody)\" /> API.\n            Any parts of the structure may be left unspecified, which will cause the existing value to be retained.",
      "type": "composite",
      "members": [
        {
          "name": "topic",
          "type": "Text?",
          "summary": "The topic of the discussion."
        }
      ]
    },
    {
      "name": "PatchDiscussionResponse",
      "summary": "The response for <see cref=\"M:PicMeApi.DiscussionApis.PatchDiscussion(AmbientServices.Auth,AmbientServices.Database,PicMeApi.AuthData,AmbientServices.DataScope,AmbientServices.DiscussionId,PicMeApi.PatchDiscussionBody)\" />.",
      "type": "composite",
      "members": [
        {
          "name": "discussion",
          "type": "Discussion"
        }
      ]
    },
    {
      "name": "Discussion",
      "summary": "A record that holds information about a discussion.",
      "type": "composite",
      "members": [
        {
          "name": "discussionId",
          "type": "DiscussionId",
          "summary": "The <see cref=\"P:AmbientServices.Discussion.DiscussionId\" /> of the discussion."
        },
        {
          "name": "discussionGlobalId",
          "type": "RecordGlobalId",
          "summary": "The Global ID of the discussion."
        },
        {
          "name": "topic",
          "type": "Text",
          "summary": "A string indicating the topic of the discussion."
        },
        {
          "name": "creatorUserId",
          "type": "ActorId",
          "summary": "The <see cref=\"T:AmbientServices.ActorId\" /> of the user who created the discussion message."
        },
        {
          "name": "creationTime",
          "type": "DateTime",
          "summary": "The time the discussion message was created."
        },
        {
          "name": "modifierUserId",
          "type": "ActorId",
          "summary": "The <see cref=\"T:AmbientServices.ActorId\" /> of the user who modified the discussion message."
        },
        {
          "name": "modificationTime",
          "type": "DateTime",
          "summary": "The time the discussion message was last modified."
        }
      ]
    },
    {
      "name": "GetDiscussionResponse",
      "summary": "A record ctonaining the discussion metadata for the specified discussion.",
      "type": "composite",
      "members": [
        {
          "name": "discussion",
          "type": "Discussion",
          "summary": "The <see cref=\"P:PicMeApi.GetDiscussionResponse.Discussion\" /> data from the _database."
        }
      ]
    },
    {
      "name": "DeleteDiscussionResponse",
      "summary": "A record containing the response after deleting a colleciton.",
      "type": "composite",
      "members": [
        {
          "name": "discussionId",
          "type": "DiscussionId",
          "summary": "The <see cref=\"P:PicMeApi.DeleteDiscussionResponse.DiscussionId\" /> for the discussion to be deleted."
        },
        {
          "name": "discussionGlobalId",
          "type": "RecordGlobalId",
          "summary": "The <see cref=\"T:AmbientServices.RecordGlobalId\" /> for the discussion."
        }
      ]
    },
    {
      "name": "CreateDiscussionBody",
      "summary": "A record containing the structure of the body for the <see cref=\"M:PicMeApi.DiscussionApis.CreateDiscussion(AmbientServices.Auth,AmbientServices.Database,PicMeApi.AuthData,AmbientServices.DataScope,PicMeApi.CreateDiscussionBody)\" /> API.",
      "type": "composite",
      "members": [
        {
          "name": "topic",
          "type": "Text",
          "summary": "The topic of the discussion."
        }
      ]
    },
    {
      "name": "CreateDiscussionResponse",
      "summary": "The response for <see cref=\"M:PicMeApi.DiscussionApis.CreateDiscussion(AmbientServices.Auth,AmbientServices.Database,PicMeApi.AuthData,AmbientServices.DataScope,PicMeApi.CreateDiscussionBody)\" />.",
      "type": "composite",
      "members": [
        {
          "name": "discussionId",
          "type": "DiscussionId",
          "summary": "The <see cref=\"P:PicMeApi.CreateDiscussionResponse.DiscussionId\" /> for the new standalone discussion."
        },
        {
          "name": "discussionGlobalId",
          "type": "RecordGlobalId",
          "summary": "The <see cref=\"T:AmbientServices.RecordGlobalId\" /> for the new standalone discussion."
        }
      ]
    },
    {
      "name": "DiscussionQuery",
      "summary": "A record that holds information about an upload query.",
      "type": "composite",
      "members": [
        {
          "name": "creationTime",
          "type": "DateTimeRange?",
          "summary": "An optional <see cref=\"T:AmbientServices.DateTimeRange\" /> indicating when the desired discussions were created."
        },
        {
          "name": "creatorUserId",
          "type": "ActorId?",
          "summary": "An optional <see cref=\"T:AmbientServices.ActorId\" /> who is the creator of the desired discussions."
        },
        {
          "name": "modificationTime",
          "type": "DateTimeRange?",
          "summary": "An optional <see cref=\"T:AmbientServices.DateTimeRange\" /> indicating when the desired discussions was modified."
        },
        {
          "name": "topic",
          "type": "String?",
          "summary": "An optional <see cref=\"T:AmbientServices.Text\" /> whose value should match the topic of the discussions."
        },
        {
          "name": "isEmpty",
          "type": "Boolean",
          "summary": "Checks to see if anything at all is specified in the query (an empty query will have no filters in it)."
        }
      ]
    },
    {
      "name": "DateTimeRange",
      "summary": "A struct that holds a date-time range.  Serialized as the ISO 8601 start and end dates separated by two dashes.",
      "type": "proxy",
      "representedBy": "String"
    },
    {
      "name": "UserId",
      "summary": "A struct that holds a user identifier.",
      "type": "proxy",
      "representedBy": "String"
    },
    {
      "name": "ListDiscussionsResponse",
      "summary": "A record containing the response from the <see cref=\"M:PicMeApi.DiscussionApis.ListDiscussions(AmbientServices.Auth,AmbientServices.Database,AmbientServices.IFileSystem,PicMeApi.AuthData,AmbientServices.DataScope,PicMeApi.DiscussionQuery,System.Int32,System.String,System.Nullable{AmbientServices.UserId})\" /> API.",
      "type": "composite",
      "members": [
        {
          "name": "discussions",
          "type": "ListedDiscussion[]",
          "summary": "An array of <see cref=\"T:PicMeApi.ListedDiscussion\" /> objects, one for each discussion the user has access to."
        },
        {
          "name": "continuation",
          "type": "String?",
          "summary": "An optional string from the response to a previous call that can be used to continue the list with the next page of results."
        }
      ]
    },
    {
      "name": "ListedDiscussion",
      "summary": "A record containing the data for a discussion returned in a list of discussions.",
      "type": "composite",
      "members": [
        {
          "name": "discussion",
          "type": "Discussion",
          "summary": "The <see cref=\"P:PicMeApi.ListedDiscussion.Discussion\" /> contining the discussion data."
        },
        {
          "name": "userRights",
          "type": "CollectionRights",
          "summary": "The <see cref=\"T:AmbientServices.CollectionRights\" /> indicating what rights the user has on the discussion."
        },
        {
          "name": "userParticipationRights",
          "type": "CollectionRights",
          "summary": "The <see cref=\"T:AmbientServices.CollectionRights\" /> indicating what rights the user has on the uploads within the discussion."
        }
      ]
    },
    {
      "name": "CollectionRights",
      "summary": "A multivalued enumeration of collection rights that indicate what rights a guest user has on a collection and it's related objects.\n            Do not change the names here.  They are converted to character representations based on the names here.",
      "type": "enum",
      "flags": true,
      "enumValues": [
        {
          "name": "None",
          "summary": "The user is not allowed any kind of access to the uploads.",
          "value": 0
        },
        {
          "name": "List",
          "summary": "The user is allowed to list the uploads.",
          "value": 1
        },
        {
          "name": "Read",
          "summary": "The user is allowed to read the uploads.",
          "value": 2
        },
        {
          "name": "Create",
          "summary": "The user is allowed to create the uploads.",
          "value": 4
        },
        {
          "name": "Update",
          "summary": "The user is allowed to update the uploads.",
          "value": 8
        },
        {
          "name": "Delete",
          "summary": "The user is allowed to delete the uploads.",
          "value": 16
        },
        {
          "name": "ShareWithOthers",
          "summary": "The user is allowed to share their other rights to the uploads with others.",
          "value": 32
        },
        {
          "name": "UploadEverything",
          "summary": "The user is allowed to do anything with the uploads.",
          "value": 255
        },
        {
          "name": "CollectionList",
          "summary": "The user is allowed to list the collection.",
          "value": 256
        },
        {
          "name": "CollectionRead",
          "summary": "The user is allowed to read the collection.",
          "value": 512
        },
        {
          "name": "CollectionCreate",
          "summary": "The user is allowed to create the collection.",
          "value": 1024
        },
        {
          "name": "CollectionUpdate",
          "summary": "The user is allowed to update the collection.",
          "value": 2048
        },
        {
          "name": "CollectionDelete",
          "summary": "The user is allowed to delete the collection.",
          "value": 4096
        },
        {
          "name": "CollectionShareWithOthers",
          "summary": "The user is allowed to share their other rights to the collection with others.",
          "value": 8192
        },
        {
          "name": "CollectionEverything",
          "summary": "The user is allowed to do anything with the collection.",
          "value": 65280
        },
        {
          "name": "SubcollectionList",
          "summary": "The user is allowed to list the subcollections.",
          "value": 65536
        },
        {
          "name": "SubcollectionRead",
          "summary": "The user is allowed to read the subcollections.",
          "value": 131072
        },
        {
          "name": "SubcollectionCreate",
          "summary": "The user is allowed to create the subcollections.",
          "value": 262144
        },
        {
          "name": "SubcollectionUpdate",
          "summary": "The user is allowed to update the subcollections.",
          "value": 524288
        },
        {
          "name": "SubcollectionDelete",
          "summary": "The user is allowed to delete the subcollections.",
          "value": 1048576
        },
        {
          "name": "SubcollectionShareWithOthers",
          "summary": "The user is allowed to share their other rights to the subcollections with others.",
          "value": 2097152
        },
        {
          "name": "SubcollectionEverything",
          "summary": "The user is allowed to do anything with the subcollections.",
          "value": 16711680
        },
        {
          "name": "Everything",
          "summary": "The user is allowed to do anything with the collection, its subfolders, and its uploads.",
          "value": -1
        }
      ]
    }
  ]
}