{
  "endpoint": "PollHandler",
  "preferredHttpPath": "p",
  "alternateHttpPaths": [
    "HttpPoll"
  ],
  "summary": "Poll-related APIs.",
  "description": "Polls come in two forms, standalone and implicitly associated with another entity.  \n            Standalone polls have a title, description, and a set of choices, each with an ID value and a display value.  \n            Implicit polls are available for any entity--they don\u0027t have a fixed set of choices, a title, or a description, but otherwise function the same.  \n            Poll \u0022selections\u0022 can be made on either type of poll.  \n            Selections are a string (often just a character) that is either the choice ID (if a standalone poll), or whatever you want it to be for implicit polls.  \n            Unicode characters are supported too, so we can use \u00220\u0022 and \u00221\u0022 for like and dislike, or we can use \uD83D\uDC4D and \uD83D\uDC4E directly.   \n            Poll selection details and summaries are available for both standalone polls and other entities.  \n            The poll summary contains a list of all the choices that have been made and how many users have selected that choice (so this can be used to show the number of likes, dislikes, loves, laughs, etc.).  \n            Poll details contain a list of each user that\u0027s made a selection, the choice they selected, and when they selected it (they can change their mind, but that removes any previous entry), so this can be used to show a list of who reacted with what reaction and when they did so.",
  "apis": [
    {
      "name": "PutMyPollSelection",
      "httpMethod": "PUT",
      "httpPathRegex": "^/poll/(?<scope>[^?/&]+)/(?<pollOrEntityTypeId>[^?/&]+)/(?<pollOrEntityId>[^?/&]+)/myselection",
      "subPathPattern": "/poll/{scope}/{pollOrEntityTypeId}/{pollOrEntityId}/myselection",
      "summary": "Submits a poll selection for the currently-authenticated user.",
      "description": "Poll selections can be made on a standalone poll, or an another scoped entity.\n            When using a poll for reactions on photos, for example, the scope is the <see cref=\"T:PicMeModel.CollectionId\" />, and the entity ID is the <see cref=\"T:PicMeModel.UploadId\" />.",
      "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": "pollOrEntityTypeId",
          "required": true,
          "type": "RecordTypeId",
          "description": "The <see cref=\"T:AmbientServices.RecordTypeId\" /> of the entity indicated by <paramref name=\"pollOrEntityId\" />."
        },
        {
          "name": "pollOrEntityId",
          "required": true,
          "type": "String",
          "description": "A string that is either a <see cref=\"T:AmbientServices.PollId\" /> or another entity ID for which selections can be made."
        },
        {
          "name": "selectedChoiceId",
          "required": true,
          "type": "String",
          "description": "The choice ID string selected by the user (empty string indicates a reaction retraction).  Must not contain any of the following characters: colon, slash, backslash."
        }
      ],
      "return": {
        "type": "PutPollSelectionResponse",
        "description": "A <see cref=\"T:PicMeApi.PutPollSelectionResponse\" /> containing the response."
      }
    },
    {
      "name": "DeleteMyPollSelection",
      "httpMethod": "DELETE",
      "httpPathRegex": "^/poll/(?<scope>[^?/&]+)/(?<pollOrEntityTypeId>[^?/&]+)/(?<pollOrEntityId>[^?/&]+)/myselection",
      "subPathPattern": "/poll/{scope}/{pollOrEntityTypeId}/{pollOrEntityId}/myselection",
      "summary": "Deletes a poll selection for the currently-authenticated user.",
      "description": "Poll selections can be made on a standalone poll, or an another scoped entity.\n            When using a poll for reactions on photos, for example, the scope is the <see cref=\"T:PicMeModel.CollectionId\" />, and the entity ID is the <see cref=\"T:PicMeModel.UploadId\" />.",
      "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": "pollOrEntityTypeId",
          "required": true,
          "type": "RecordTypeId",
          "description": "The <see cref=\"T:AmbientServices.RecordTypeId\" /> of the entity indicated by <paramref name=\"pollOrEntityId\" />."
        },
        {
          "name": "pollOrEntityId",
          "required": true,
          "type": "String",
          "description": "A string that is either a <see cref=\"T:AmbientServices.PollId\" /> or another entity ID for which selections can be made."
        }
      ],
      "return": {
        "type": "PutPollSelectionResponse",
        "description": "A <see cref=\"T:PicMeApi.PutPollSelectionResponse\" /> containing the response."
      }
    },
    {
      "name": "GetMyPollSelection",
      "httpMethod": "GET",
      "httpPathRegex": "^/poll/(?<scope>[^?/&]+)/(?<pollOrEntityTypeId>[^?/&]+)/(?<pollOrEntityId>[^?/&]+)/myselection",
      "subPathPattern": "/poll/{scope}/{pollOrEntityTypeId}/{pollOrEntityId}/myselection",
      "summary": "Gets any poll selection for the currently-authenticated user.",
      "description": "Poll selections can be made on a standalone poll, or an another scoped entity.\n            When using a poll for reactions on photos, for example, the scope is the <see cref=\"T:PicMeModel.CollectionId\" />, and the entity ID is the <see cref=\"T:PicMeModel.UploadId\" />.",
      "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": "pollOrEntityTypeId",
          "required": true,
          "type": "RecordTypeId",
          "description": "The <see cref=\"T:AmbientServices.RecordTypeId\" /> of the entity indicated by <paramref name=\"pollOrEntityId\" />."
        },
        {
          "name": "pollOrEntityId",
          "required": true,
          "type": "String",
          "description": "A string that is either a <see cref=\"T:AmbientServices.PollId\" /> or another entity ID for which selections can be made."
        }
      ],
      "return": {
        "type": "GetPollSelectionResponse",
        "description": "A <see cref=\"T:PicMeApi.GetPollSelectionResponse\" /> containing the response."
      }
    },
    {
      "name": "ListPollSelections",
      "httpMethod": "GET",
      "httpPathRegex": "^/poll/(?<scope>[^?/&]+)/(?<pollOrEntityTypeId>[^?/&]+)/(?<pollOrEntityId>[^?/&]+)/selections",
      "subPathPattern": "/poll/{scope}/{pollOrEntityTypeId}/{pollOrEntityId}/selections",
      "summary": "Lists the poll selection details.",
      "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": "pollOrEntityTypeId",
          "required": true,
          "type": "RecordTypeId",
          "description": "The <see cref=\"T:AmbientServices.RecordTypeId\" /> of the entity indicated by <paramref name=\"pollOrEntityId\" />."
        },
        {
          "name": "pollOrEntityId",
          "required": true,
          "type": "String",
          "description": "A string that is either a <see cref=\"T:AmbientServices.PollId\" /> or another entity ID for which selections can be made."
        },
        {
          "name": "continuation",
          "required": false,
          "type": "String?",
          "description": "An optional string returned from a previous call that will continue listing from where the previous call left off."
        }
      ],
      "return": {
        "type": "ListPollSelectionsResponse",
        "description": "A <see cref=\"T:PicMeApi.ListPollSelectionsResponse\" /> containing the response."
      }
    },
    {
      "name": "ListPollResultSummary",
      "httpMethod": "GET",
      "httpPathRegex": "^/poll/(?<scope>[^?/&]+)/(?<pollOrEntityTypeId>[^?/&]+)/(?<pollOrEntityId>[^?/&]+)/summary",
      "subPathPattern": "/poll/{scope}/{pollOrEntityTypeId}/{pollOrEntityId}/summary",
      "summary": "Lists the poll results summary.",
      "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": "pollOrEntityTypeId",
          "required": true,
          "type": "RecordTypeId",
          "description": "The <see cref=\"T:AmbientServices.RecordTypeId\" /> of the entity indicated by <paramref name=\"pollOrEntityId\" />."
        },
        {
          "name": "pollOrEntityId",
          "required": true,
          "type": "String",
          "description": "A string that is either a <see cref=\"T:AmbientServices.PollId\" /> or another entity ID for which selections can be made."
        }
      ],
      "return": {
        "type": "ListPollResultSummaryResponse",
        "description": "A <see cref=\"T:PicMeApi.ListPollResultSummaryResponse\" /> containing the response."
      }
    },
    {
      "name": "PatchPoll",
      "httpMethod": "PATCH",
      "httpPathRegex": "^/poll/i/(?<scope>[^?/&]+)/(?<pollId>[^?/&]+)",
      "subPathPattern": "/poll/i/{scope}/{pollId}",
      "summary": "Patches a standalone poll.",
      "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": "pollId",
          "required": true,
          "type": "PollId",
          "description": "The <see cref=\"T:AmbientServices.PollId\" /> of the poll being patched."
        },
        {
          "name": "body",
          "required": true,
          "type": "PatchPollBody",
          "description": "The <see cref=\"T:PicMeApi.PatchPollBody\" /> containing the partial new poll data."
        }
      ],
      "return": {
        "type": "PatchPollResponse",
        "description": "A <see cref=\"T:PicMeApi.PatchPollResponse\" /> containing the response."
      }
    },
    {
      "name": "DeletePoll",
      "httpMethod": "DELETE",
      "httpPathRegex": "^/poll/i/(?<scope>[^?/&]+)/(?<pollId>[^?/&]+)",
      "subPathPattern": "/poll/i/{scope}/{pollId}",
      "summary": "Deletes the specified standalone poll.",
      "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": "pollId",
          "required": true,
          "type": "PollId",
          "description": "The <see cref=\"T:AmbientServices.PollId\" /> of the poll being patched."
        }
      ],
      "return": {
        "type": "DeletePollResponse",
        "description": "A <see cref=\"T:PicMeApi.DeletePollResponse\" /> containing the response."
      }
    },
    {
      "name": "CreatePoll",
      "httpMethod": "POST",
      "httpPathRegex": "^/poll/i/(?<scope>[^?/&]+)",
      "subPathPattern": "/poll/i/{scope}",
      "summary": "Creates a standalone poll.",
      "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": "CreatePollBody",
          "description": "The <see cref=\"T:PicMeApi.CreatePollBody\" /> from the body of the request."
        }
      ],
      "return": {
        "type": "CreatePollResponse",
        "description": "A <see cref=\"T:PicMeApi.CreatePollResponse\" /> containing the response."
      }
    },
    {
      "name": "ListPolls",
      "httpMethod": "GET",
      "httpPathRegex": "^/poll/i/(?<scope>[^?/&]+)",
      "subPathPattern": "/poll/i/{scope}",
      "summary": "Lists standalone polls 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": "filter",
          "required": false,
          "type": "PollQuery?",
          "description": "An optional <see cref=\"T:PicMeApi.PollQuery\" /> indicating attributes of the polls 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 polls will be listed.  If specified, the caller must be a root administrator."
        }
      ],
      "return": {
        "type": "ListPollsResponse",
        "description": "A <see cref=\"T:PicMeApi.ListPollsResponse\" /> 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.",
      "description": "<pitch>Namespace key that partitions records and indexes so child records of one entity are stored and queried independently from those of another; use <see cref=\"P:AmbientServices.DataScope.Global\" /> when no scoping is needed.</pitch>\n<pledge>Cannot contain embedded NUL characters; the empty scope equals <see cref=\"P:AmbientServices.DataScope.Global\" />; a <see cref=\"T:AmbientServices.RecordGlobalId\" /> can be converted to a scope via its <see cref=\"M:AmbientServices.RecordGlobalId.AsScope\" /> method to parent child records under it.</pledge>",
      "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).",
      "description": "<pitch>Compact, path-safe token that names a record type in the database file system; survives .NET class renames without breaking stored S3 paths.</pitch>\n<pledge>Never empty and never contains a slash; the default zero-value is <see cref=\"P:AmbientServices.RecordTypeId.Unknown\" />; <see cref=\"P:AmbientServices.RecordTypeId.Raw\" /> returns the bare code, <see cref=\"P:AmbientServices.RecordTypeId.Encoded\" /> returns a percent-encoded form safe for embedding in S3 paths.</pledge>",
      "type": "proxy",
      "representedBy": "String"
    },
    {
      "name": "PutPollSelectionResponse",
      "summary": "A record containing the response to <see cref=\"M:PicMeApi.PollApis.PutMyPollSelection(AmbientServices.Auth,AmbientServices.IFileSystem,AmbientServices.Database,PicMeApi.AuthData,AmbientServices.DataScope,AmbientServices.RecordTypeId,System.String,System.String)\" />."
    },
    {
      "name": "GetPollSelectionResponse",
      "summary": "A record containing the response to <see cref=\"M:PicMeApi.PollApis.GetMyPollSelection(AmbientServices.Auth,AmbientServices.Database,PicMeApi.AuthData,AmbientServices.DataScope,AmbientServices.RecordTypeId,System.String)\" />.",
      "type": "composite",
      "members": [
        {
          "name": "selection",
          "type": "PollSelection?",
          "summary": "The selection made by the user, or null if the user has not made a selection yet."
        }
      ]
    },
    {
      "name": "PollSelection",
      "summary": "A record containing the details for a poll selection.",
      "type": "composite",
      "members": [
        {
          "name": "choiceId",
          "type": "String",
          "summary": "The short string indicating the choice made by this user.  If the string is empty, it represents a user that previously voted and then removed their vote selection."
        },
        {
          "name": "userInfo",
          "type": "ActorInfo",
          "summary": "The <see cref=\"T:AmbientServices.ActorInfo\" /> of the user who made the choice."
        },
        {
          "name": "choiceTime",
          "type": "DateTime",
          "summary": "The <see cref=\"T:System.DateTime\" /> (in UTC) indicating when the specified user made the specified choice."
        }
      ]
    },
    {
      "name": "ActorInfo",
      "summary": "A record containing basic information about a collaborating actor, usually a co-participant in some activity.",
      "description": "<pitch>Same as <see cref=\"T:AmbientServices.UserInfo\" /> but keyed by <see cref=\"T:AmbientServices.ActorId\" /> to support proxy-user scenarios in participant display.</pitch>",
      "type": "composite",
      "members": [
        {
          "name": "userId",
          "type": "ActorId",
          "summary": "The <see cref=\"P:AmbientServices.ActorInfo.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 there is no profile picture 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.",
      "description": "<pitch>Opaque cross-system reference pairing a system name (e.g. \"com.facebook\") with a system-specific item ID; used to link database records to their counterparts in external platforms.</pitch>",
      "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": "ActorId",
      "summary": "A struct that holds an actor identifier, which identifies either a single user or both an actor (actual) and effective (proxied) user.",
      "description": "<pitch>Extends <see cref=\"T:AmbientServices.UserId\" /> to represent proxy scenarios; serialized as <c>userId</c> for normal users or <c>actual\\effective</c> for admin-acting-as-user, enabling audit trails that distinguish who acted from who was affected.</pitch>\n<pledge>May not contain slashes; backslash separates actual from effective in proxy form; <see cref=\"P:AmbientServices.ActorId.EffectiveUserId\" /> is always set; <see cref=\"P:AmbientServices.ActorId.ActingUserId\" /> is null for non-proxy actors.</pledge>",
      "type": "proxy",
      "representedBy": "String"
    },
    {
      "name": "ListPollSelectionsResponse",
      "summary": "A record containing the response to <see cref=\"M:PicMeApi.PollApis.ListPollSelections(AmbientServices.Auth,AmbientServices.Database,PicMeApi.AuthData,AmbientServices.DataScope,AmbientServices.RecordTypeId,System.String,System.String)\" />.",
      "type": "composite",
      "members": [
        {
          "name": "selections",
          "type": "PollSelection[]",
          "summary": "The <see cref=\"T:PicMeApi.PollSelection\" />s for each poll choice (choices not included should be assumed to be zero)."
        },
        {
          "name": "continuation",
          "type": "String?",
          "summary": "A string that can be used to get more results in case there were a lot of poll results."
        }
      ]
    },
    {
      "name": "ListPollResultSummaryResponse",
      "summary": "A record containing the response to <see cref=\"M:PicMeApi.PollApis.ListPollResultSummary(AmbientServices.Auth,AmbientServices.Database,PicMeApi.AuthData,AmbientServices.DataScope,AmbientServices.RecordTypeId,System.String)\" />.",
      "type": "composite",
      "members": [
        {
          "name": "results",
          "type": "PollSummaryEntry[]",
          "summary": "The <see cref=\"T:PicMeApi.PollSummaryEntry\" /> for each poll choice (choices not included should be assumed to be zero)."
        }
      ]
    },
    {
      "name": "PollSummaryEntry",
      "summary": "A record containing the summary (ie. counts) for one poll choice.",
      "type": "composite",
      "members": [
        {
          "name": "choiceId",
          "type": "String",
          "summary": "The short string indicating a choice made by the users counted in <see cref=\"P:PicMeApi.PollSummaryEntry.Count\" />.  If the string is empty, it represents a user that previously voted and then removed their vote selection."
        },
        {
          "name": "count",
          "type": "Int32",
          "summary": "The number of users making that choice."
        }
      ]
    },
    {
      "name": "PollId",
      "summary": "A struct that holds a Compact poll id.",
      "description": "<pitch>Strongly-typed, JSON-serializable identifier for a poll, with conversion helpers to and from raw strings and local record paths.</pitch>",
      "type": "proxy",
      "representedBy": "String"
    },
    {
      "name": "PatchPollBody",
      "summary": "A record containing the structure of the body for the <see cref=\"M:PicMeApi.PollApis.PatchPoll(AmbientServices.Auth,AmbientServices.Database,PicMeApi.AuthData,AmbientServices.DataScope,AmbientServices.PollId,PicMeApi.PatchPollBody)\" /> API.\n            Any parts of the structure may be left unspecified, which will cause the existing value to be retained.",
      "type": "composite",
      "members": [
        {
          "name": "name",
          "type": "String?",
          "summary": "The name of the poll."
        },
        {
          "name": "description",
          "type": "Text?",
          "summary": "A description or instructions for the poll."
        },
        {
          "name": "choices",
          "type": "PollChoice[]?",
          "summary": "An array containing the available choices for the poll.  Note that changing the available choices will rename them for any votes already cast."
        },
        {
          "name": "startDate",
          "type": "DateTime?",
          "summary": "An optional <see cref=\"T:System.DateTime\" /> indicating the UTC time after which votes in the poll should start being accepted."
        },
        {
          "name": "endDate",
          "type": "DateTime?",
          "summary": "An optional <see cref=\"T:System.DateTime\" /> indicating the UTC time after which votes in the poll should end being accepted."
        }
      ]
    },
    {
      "name": "PollChoice",
      "summary": "A record containing information about a possible poll choice",
      "description": "<pitch>Represents one selectable option in a poll, pairing a compact storage key with a display string shown to users.</pitch>",
      "type": "composite",
      "members": [
        {
          "name": "choiceId",
          "type": "String",
          "summary": "A unique short string (often a single character) use to store and index the choice made by a user."
        },
        {
          "name": "choiceDisplay",
          "type": "String",
          "summary": "The unique string to display to the user that corresponds to this choice."
        }
      ]
    },
    {
      "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.",
      "description": "<pitch>String wrapper that signals the database indexer to tokenize by word rather than index the whole string; for longer content like descriptions where exact full-string matching is not needed.</pitch>\n<pledge>\n  <see cref=\"M:AmbientServices.Text.GetIndexWords\" /> splits on whitespace, punctuation, and symbols, lowercases each token, and handles CJK characters individually; each token is yielded separately for the caller to index.</pledge>",
      "type": "proxy",
      "representedBy": "String"
    },
    {
      "name": "PatchPollResponse",
      "summary": "The response for <see cref=\"M:PicMeApi.PollApis.PatchPoll(AmbientServices.Auth,AmbientServices.Database,PicMeApi.AuthData,AmbientServices.DataScope,AmbientServices.PollId,PicMeApi.PatchPollBody)\" />.",
      "type": "composite",
      "members": [
        {
          "name": "poll",
          "type": "Poll"
        }
      ]
    },
    {
      "name": "Poll",
      "summary": "A record containing the database schema for a standalone poll.",
      "description": "<pitch>Database record for a standalone poll, holding its identity, metadata, scheduling window, name, description, and list of choices.</pitch>",
      "type": "composite",
      "members": [
        {
          "name": "pollId",
          "type": "PollId",
          "summary": "The <see cref=\"P:PicMeModel.Poll.PollId\" /> for the poll.  Ignored as an input."
        },
        {
          "name": "pollGlobalId",
          "type": "RecordGlobalId",
          "summary": "The <see cref=\"T:AmbientServices.RecordGlobalId\" /> for the poll.  Ignored as an input."
        },
        {
          "name": "creatorUserId",
          "type": "ActorId",
          "summary": "The <see cref=\"T:AmbientServices.ActorId\" /> of the user that created the poll.  Ignored as an input."
        },
        {
          "name": "creationTime",
          "type": "DateTime",
          "summary": "The <see cref=\"T:System.DateTime\" /> when the poll was created.  Ignored as an input."
        },
        {
          "name": "modifierUserId",
          "type": "ActorId",
          "summary": "The <see cref=\"T:AmbientServices.ActorId\" /> of the user that modified the poll.  Ignored as an input."
        },
        {
          "name": "modificationTime",
          "type": "DateTime",
          "summary": "The <see cref=\"T:System.DateTime\" /> when this poll record was modified.  Ignored as an input."
        },
        {
          "name": "startDate",
          "type": "DateTime?",
          "summary": "An optional <see cref=\"T:System.DateTime\" /> that polling starts."
        },
        {
          "name": "endDate",
          "type": "DateTime?",
          "summary": "An optional <see cref=\"T:System.DateTime\" /> that polling ends."
        },
        {
          "name": "name",
          "type": "String",
          "summary": "The poll's name (indexed as a whole)."
        },
        {
          "name": "description",
          "type": "Text",
          "summary": "A description or instructions for the poll."
        },
        {
          "name": "choices",
          "type": "PollChoice[]",
          "summary": "The poll's choices."
        }
      ]
    },
    {
      "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.",
      "description": "<pitch>Structured, three-part form of a globally unique database record key (scope + type + local ID); preferred over flat <see cref=\"T:AmbientServices.RecordIdentifier\" /> when individual parts are needed.</pitch>\n<pledge>Default (all-empty) is <see cref=\"P:AmbientServices.RecordGlobalId.Empty\" />; <see cref=\"M:AmbientServices.RecordGlobalId.AsScope\" /> converts this ID into a parent scope for child records; <see cref=\"P:AmbientServices.RecordGlobalId.Raw\" /> and <see cref=\"P:AmbientServices.RecordGlobalId.AsS3PathSegment\" /> provide encoded string forms for file-system paths.</pledge>",
      "type": "proxy",
      "representedBy": "String"
    },
    {
      "name": "DeletePollResponse",
      "summary": "A record containing the response after deleting a colleciton.",
      "type": "composite",
      "members": [
        {
          "name": "pollId",
          "type": "PollId",
          "summary": "The <see cref=\"P:PicMeApi.DeletePollResponse.PollId\" /> for the poll to be deleted."
        },
        {
          "name": "pollGlobalId",
          "type": "RecordGlobalId",
          "summary": "The <see cref=\"T:AmbientServices.RecordGlobalId\" /> for the poll."
        }
      ]
    },
    {
      "name": "CreatePollBody",
      "summary": "A record containing the structure of the body for the <see cref=\"M:PicMeApi.PollApis.CreatePoll(AmbientServices.Auth,AmbientServices.Database,PicMeApi.AuthData,AmbientServices.DataScope,PicMeApi.CreatePollBody)\" /> API.",
      "type": "composite",
      "members": [
        {
          "name": "name",
          "type": "String",
          "summary": "The name of the poll."
        },
        {
          "name": "description",
          "type": "Text",
          "summary": "A description or instructions for the poll."
        },
        {
          "name": "choices",
          "type": "PollChoice[]",
          "summary": "An array containing the available choices for the poll."
        },
        {
          "name": "startDate",
          "type": "DateTime?",
          "summary": "An optional <see cref=\"T:System.DateTime\" /> indicating the UTC time after which votes in the poll should start being accepted."
        },
        {
          "name": "endDate",
          "type": "DateTime?",
          "summary": "An optional <see cref=\"T:System.DateTime\" /> indicating the UTC time after which votes in the poll should end being accepted."
        }
      ]
    },
    {
      "name": "CreatePollResponse",
      "summary": "The response for <see cref=\"M:PicMeApi.PollApis.CreatePoll(AmbientServices.Auth,AmbientServices.Database,PicMeApi.AuthData,AmbientServices.DataScope,PicMeApi.CreatePollBody)\" />.",
      "type": "composite",
      "members": [
        {
          "name": "pollId",
          "type": "PollId",
          "summary": "The <see cref=\"P:PicMeApi.CreatePollResponse.PollId\" /> for the new standalone poll."
        },
        {
          "name": "pollGlobalId",
          "type": "RecordGlobalId",
          "summary": "The <see cref=\"T:AmbientServices.RecordGlobalId\" /> for the new standalone poll."
        }
      ]
    },
    {
      "name": "PollQuery",
      "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 polls were created."
        },
        {
          "name": "creatorUserId",
          "type": "ActorId?",
          "summary": "An optional <see cref=\"T:AmbientServices.ActorId\" /> who is the creator of the desired polls."
        },
        {
          "name": "modificationTime",
          "type": "DateTimeRange?",
          "summary": "An optional <see cref=\"T:AmbientServices.DateTimeRange\" /> indicating when the desired polls was modified."
        },
        {
          "name": "name",
          "type": "String?",
          "summary": "An optional string whose value should match the name of the polls."
        },
        {
          "name": "description",
          "type": "Text?",
          "summary": "An optional <see cref=\"T:AmbientServices.Text\" /> whose value should match the description of the polls."
        },
        {
          "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.",
      "description": "<pitch>Open-ended UTC date-time interval stored as a single field; call <see cref=\"M:AmbientServices.DateTimeRange.IsInRange(System.DateTime)\" /> to test membership; either bound may be null (unbounded).</pitch>\n<pledge>Serialized as <c>start--end</c> with ISO 8601 dates; null bounds produce empty strings on either side; <see cref=\"M:AmbientServices.DateTimeRange.IsInRange(System.DateTime)\" /> uses exclusive lower bound and inclusive upper bound.</pledge>",
      "type": "proxy",
      "representedBy": "String"
    },
    {
      "name": "UserId",
      "summary": "A struct that holds a user identifier.",
      "description": "<pitch>Compact, URL-safe user identifier; use as the key for user-scoped database records and as a <see cref=\"T:AmbientServices.DataScope\" /> to partition records per-user.</pitch>\n<pledge>May not contain slashes or backslashes; <see cref=\"P:AmbientServices.UserId.Anonymous\" /> is the empty-string sentinel for unauthenticated users; <see cref=\"M:AmbientServices.UserId.New\" /> generates a globally unique ID from <see cref=\"T:AmbientServices.GenericIdentifier\" />.</pledge>",
      "type": "proxy",
      "representedBy": "String"
    },
    {
      "name": "ListPollsResponse",
      "summary": "A record containing the response from the <see cref=\"M:PicMeApi.PollApis.ListPolls(AmbientServices.Auth,AmbientServices.Database,AmbientServices.IFileSystem,PicMeApi.AuthData,AmbientServices.DataScope,PicMeApi.PollQuery,System.Int32,System.String,System.Nullable{AmbientServices.UserId})\" /> API.",
      "type": "composite",
      "members": [
        {
          "name": "polls",
          "type": "ListedPoll[]",
          "summary": "An array of <see cref=\"T:PicMeApi.ListedPoll\" /> objects, one for each poll 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": "ListedPoll",
      "summary": "A record containing the data for a poll returned in a list of polls.",
      "type": "composite",
      "members": [
        {
          "name": "poll",
          "type": "Poll",
          "summary": "The <see cref=\"P:PicMeApi.ListedPoll.Poll\" /> contining the poll data."
        },
        {
          "name": "userRights",
          "type": "CollectionRights",
          "summary": "The <see cref=\"T:AmbientServices.CollectionRights\" /> indicating what rights the user has on the poll."
        },
        {
          "name": "userParticipationRights",
          "type": "CollectionRights",
          "summary": "The <see cref=\"T:AmbientServices.CollectionRights\" /> indicating what rights the user has on the uploads within the poll."
        }
      ]
    },
    {
      "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.",
      "description": "<pitch>Three-tier flags enum packing upload, collection, and subcollection <see cref=\"T:AmbientServices.Rights\" /> into a single integer; use <see cref=\"T:AmbientServices.CollectionRightsExtensions\" /> to extract per-tier rights.</pitch>",
      "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
        }
      ]
    }
  ]
}