UNPKG

cloudscript-server

Version:

A local environment for cloudscript development

7,441 lines 304 kB
/** Static object you add your CloudScript endpoints to */
declare var handlers: IPlayFabHandlers;
interface IPlayFabHandlers {
  [handlerId: string]: (args?: any, context?: IPlayFabContext) => any;
}

/** The playfab id for the user who called into CloudScript */
declare var currentPlayerId: string;

/**
 * Static object containing cloudscript logging functions
 * debug(message: string, exc?: any): void,
 * error(message: string, exc?: any): void,
 * info(message: string, exc?: any): void,
 */
declare var log: Logger;
interface Logger {
  debug(message: string, exc?: any): void;
  error(message: string, exc?: any): void;
  info(message: string, exc?: any): void;
}

/**
 * Static object containing cloudscript external request functions
 * request(url: string, method?: string, content?: string, contentType?: string): string
 */
declare var http: IPlayFabHttp;
interface IPlayFabHttp {
  request(
    url: string,
    method?: string,
    content?: string,
    contentType?: string,
    headers?: { [key: string]: string }
  ): string;
}

interface ITriggeredByTask {
  Name: string;
  Id: string;
}

interface IPlayFabContext {
  playStreamEvent: any; // PlayStreamModels.IBasePlayStreamEvent;
  playerProfile: IPlayFabPlayerProfile;
  triggeredByTask: ITriggeredByTask;
}

interface IPlayFabPlayerProfile {
  PlayerId: string;
  DisplayName: string;
}

declare var script: IPlayFabEnvironment;
interface IPlayFabEnvironment {
  revision: number;
  titleId: string;
}

interface IPlayFabError {
  cloudScriptErrorCode: string;
  stack: string;
  apiErrorInfo?: IApiErrorInfo;
}

interface IApiErrorInfo {
  api: string;
  request: any;
  result: any;
  apiError?: IApiError;
}

interface IApiError {
  code: number;
  status: string;
  error: string;
  errorCode: number;
  errorMessage: string;
  errorDetails?: { [index: string]: { message: string[] } };
}

/** Static object which allows access to PlayFab Classic Server API calls */
declare var server: IPlayFabServerAPI;
/** Static object which allows access to PlayFab Entity API calls */
declare var entity: IPlayFabEntityAPI;

/** ServerAPI.Models as interfaces */
declare namespace PlayFabServerModels {
  interface AdCampaignAttribution {
    /** UTC time stamp of attribution */
    AttributedAt: string;
    /** Attribution campaign identifier */
    CampaignId?: string;
    /** Attribution network name */
    Platform?: string;
  }

  interface AdCampaignAttributionModel {
    /** UTC time stamp of attribution */
    AttributedAt: string;
    /** Attribution campaign identifier */
    CampaignId?: string;
    /** Attribution network name */
    Platform?: string;
  }

  interface AddCharacterVirtualCurrencyRequest {
    /**
     * Amount to be added to the character balance of the specified virtual currency. Maximum VC balance is Int32
     * (2,147,483,647). Any increase over this value will be discarded.
     */
    Amount: number;
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId: string;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** PlayFab unique identifier of the user whose virtual currency balance is to be incremented. */
    PlayFabId: string;
    /** Name of the virtual currency which is to be incremented. */
    VirtualCurrency: string;
  }

  interface AddFriendRequest {
    /** Email address of the user being added. */
    FriendEmail?: string;
    /** The PlayFab identifier of the user being added. */
    FriendPlayFabId?: string;
    /** Title-specific display name of the user to being added. */
    FriendTitleDisplayName?: string;
    /** The PlayFab username of the user being added */
    FriendUsername?: string;
    /** PlayFab identifier of the player to add a new friend. */
    PlayFabId: string;
  }

  interface AddGenericIDRequest {
    /** Generic service identifier to add to the player account. */
    GenericId: GenericServiceId;
    /** PlayFabId of the user to link. */
    PlayFabId: string;
  }

  /**
   * This API will trigger a player_tag_added event and add a tag with the given TagName and PlayFabID to the corresponding
   * player profile. TagName can be used for segmentation and it is limited to 256 characters. Also there is a limit on the
   * number of tags a title can have.
   */
  interface AddPlayerTagRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
    /** Unique tag for player profile. */
    TagName: string;
  }

  interface AddPlayerTagResult {}

  interface AddSharedGroupMembersRequest {
    /** An array of unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabIds: string[];
    /** Unique identifier for the shared group. */
    SharedGroupId: string;
  }

  interface AddSharedGroupMembersResult {}

  interface AddUserVirtualCurrencyRequest {
    /**
     * Amount to be added to the user balance of the specified virtual currency. Maximum VC balance is Int32 (2,147,483,647).
     * Any increase over this value will be discarded.
     */
    Amount: number;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** PlayFab unique identifier of the user whose virtual currency balance is to be increased. */
    PlayFabId: string;
    /** Name of the virtual currency which is to be incremented. */
    VirtualCurrency: string;
  }

  interface AdvancedPushPlatformMsg {
    /**
     * Stops GoogleCloudMessaging notifications from including both notification and data properties and instead only sends the
     * data property.
     */
    GCMDataOnly?: boolean;
    /** The Json the platform should receive. */
    Json: string;
    /** The platform that should receive the Json. */
    Platform: PushNotificationPlatform;
  }

  /**
   * Note that data returned may be Personally Identifying Information (PII), such as email address, and so care should be
   * taken in how this data is stored and managed. Since this call will always return the relevant information for users who
   * have accessed the title, the recommendation is to not store this data locally.
   */
  interface AuthenticateSessionTicketRequest {
    /** Session ticket as issued by a PlayFab client login API. */
    SessionTicket: string;
  }

  interface AuthenticateSessionTicketResult {
    /** Indicates if token was expired at request time. */
    IsSessionTicketExpired?: boolean;
    /** Account info for the user whose session ticket was supplied. */
    UserInfo?: UserAccountInfo;
  }

  interface AwardSteamAchievementItem {
    /** Unique Steam achievement name. */
    AchievementName: string;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
    /** Result of the award attempt (only valid on response, not on request). */
    Result: boolean;
  }

  interface AwardSteamAchievementRequest {
    /** Array of achievements to grant and the users to whom they are to be granted. */
    Achievements: AwardSteamAchievementItem[];
  }

  interface AwardSteamAchievementResult {
    /** Array of achievements granted. */
    AchievementResults?: AwardSteamAchievementItem[];
  }

  interface AzureResourceSystemData {
    /** The timestamp of resource creation (UTC) */
    CreatedAt?: string;
    /** The identity that created the resource */
    CreatedBy?: string;
    /** The type of identity that created the resource */
    CreatedByType?: string;
    /** The type of identity that last modified the resource */
    LastModifiedAt?: string;
    /** The identity that last modified the resource */
    LastModifiedBy?: string;
    /** The type of identity that last modified the resource */
    LastModifiedByType?: string;
  }

  /** Contains information for a ban. */
  interface BanInfo {
    /** The active state of this ban. Expired bans may still have this value set to true but they will have no effect. */
    Active: boolean;
    /** The unique Ban Id associated with this ban. */
    BanId?: string;
    /** The time when this ban was applied. */
    Created?: string;
    /** The time when this ban expires. Permanent bans do not have expiration date. */
    Expires?: string;
    /** The IP address on which the ban was applied. May affect multiple players. */
    IPAddress?: string;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId?: string;
    /** The reason why this ban was applied. */
    Reason?: string;
  }

  /** Represents a single ban request. */
  interface BanRequest {
    /** The duration in hours for the ban. Leave this blank for a permanent ban. */
    DurationInHours?: number;
    /** IP address to be banned. May affect multiple players. */
    IPAddress?: string;
    /** MAC address to be banned. May affect multiple players. */
    MACAddress?: string;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
    /** The reason for this ban. Maximum 140 characters. */
    Reason?: string;
  }

  /**
   * The existence of each user will not be verified. When banning by IP or MAC address, multiple players may be affected, so
   * use this feature with caution. Returns information about the new bans.
   */
  interface BanUsersRequest {
    /** List of ban requests to be applied. Maximum 100. */
    Bans: BanRequest[];
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
  }

  interface BanUsersResult {
    /** Information on the bans that were applied */
    BanData?: BanInfo[];
  }

  /** A purchasable item from the item catalog */
  interface CatalogItem {
    /**
     * defines the bundle properties for the item - bundles are items which contain other items, including random drop tables
     * and virtual currencies
     */
    Bundle?: CatalogItemBundleInfo;
    /** if true, then an item instance of this type can be used to grant a character to a user. */
    CanBecomeCharacter: boolean;
    /** catalog version for this item */
    CatalogVersion?: string;
    /** defines the consumable properties (number of uses, timeout) for the item */
    Consumable?: CatalogItemConsumableInfo;
    /**
     * defines the container properties for the item - what items it contains, including random drop tables and virtual
     * currencies, and what item (if any) is required to open it via the UnlockContainerItem API
     */
    Container?: CatalogItemContainerInfo;
    /** game specific custom data */
    CustomData?: string;
    /** text description of item, to show in-game */
    Description?: string;
    /** text name for the item, to show in-game */
    DisplayName?: string;
    /**
     * If the item has IsLImitedEdition set to true, and this is the first time this ItemId has been defined as a limited
     * edition item, this value determines the total number of instances to allocate for the title. Once this limit has been
     * reached, no more instances of this ItemId can be created, and attempts to purchase or grant it will return a Result of
     * false for that ItemId. If the item has already been defined to have a limited edition count, or if this value is less
     * than zero, it will be ignored.
     */
    InitialLimitedEditionCount: number;
    /** BETA: If true, then only a fixed number can ever be granted. */
    IsLimitedEdition: boolean;
    /**
     * if true, then only one item instance of this type will exist and its remaininguses will be incremented instead.
     * RemainingUses will cap out at Int32.Max (2,147,483,647). All subsequent increases will be discarded
     */
    IsStackable: boolean;
    /** if true, then an item instance of this type can be traded between players using the trading APIs */
    IsTradable: boolean;
    /** class to which the item belongs */
    ItemClass?: string;
    /** unique identifier for this item */
    ItemId: string;
    /**
     * URL to the item image. For Facebook purchase to display the image on the item purchase page, this must be set to an HTTP
     * URL.
     */
    ItemImageUrl?: string;
    /** override prices for this item for specific currencies */
    RealCurrencyPrices?: { [key: string]: number };
    /** list of item tags */
    Tags?: string[];
    /** price of this item in virtual currencies and "RM" (the base Real Money purchase price, in USD pennies) */
    VirtualCurrencyPrices?: { [key: string]: number };
  }

  interface CatalogItemBundleInfo {
    /** unique ItemId values for all items which will be added to the player inventory when the bundle is added */
    BundledItems?: string[];
    /**
     * unique TableId values for all RandomResultTable objects which are part of the bundle (random tables will be resolved and
     * add the relevant items to the player inventory when the bundle is added)
     */
    BundledResultTables?: string[];
    /** virtual currency types and balances which will be added to the player inventory when the bundle is added */
    BundledVirtualCurrencies?: { [key: string]: number };
  }

  interface CatalogItemConsumableInfo {
    /** number of times this object can be used, after which it will be removed from the player inventory */
    UsageCount?: number;
    /**
     * duration in seconds for how long the item will remain in the player inventory - once elapsed, the item will be removed
     * (recommended minimum value is 5 seconds, as lower values can cause the item to expire before operations depending on
     * this item's details have completed)
     */
    UsagePeriod?: number;
    /**
     * all inventory item instances in the player inventory sharing a non-null UsagePeriodGroup have their UsagePeriod values
     * added together, and share the result - when that period has elapsed, all the items in the group will be removed
     */
    UsagePeriodGroup?: string;
  }

  /**
   * Containers are inventory items that can hold other items defined in the catalog, as well as virtual currency, which is
   * added to the player inventory when the container is unlocked, using the UnlockContainerItem API. The items can be
   * anything defined in the catalog, as well as RandomResultTable objects which will be resolved when the container is
   * unlocked. Containers and their keys should be defined as Consumable (having a limited number of uses) in their catalog
   * defintiions, unless the intent is for the player to be able to re-use them infinitely.
   */
  interface CatalogItemContainerInfo {
    /** unique ItemId values for all items which will be added to the player inventory, once the container has been unlocked */
    ItemContents?: string[];
    /**
     * ItemId for the catalog item used to unlock the container, if any (if not specified, a call to UnlockContainerItem will
     * open the container, adding the contents to the player inventory and currency balances)
     */
    KeyItemId?: string;
    /**
     * unique TableId values for all RandomResultTable objects which are part of the container (once unlocked, random tables
     * will be resolved and add the relevant items to the player inventory)
     */
    ResultTableContents?: string[];
    /** virtual currency types and balances which will be added to the player inventory when the container is unlocked */
    VirtualCurrencyContents?: { [key: string]: number };
  }

  interface CharacterInventory {
    /** The id of this character. */
    CharacterId?: string;
    /** The inventory of this character. */
    Inventory?: ItemInstance[];
  }

  interface CharacterLeaderboardEntry {
    /** PlayFab unique identifier of the character that belongs to the user for this leaderboard entry. */
    CharacterId?: string;
    /** Title-specific display name of the character for this leaderboard entry. */
    CharacterName?: string;
    /** Name of the character class for this entry. */
    CharacterType?: string;
    /** Title-specific display name of the user for this leaderboard entry. */
    DisplayName?: string;
    /** PlayFab unique identifier of the user for this leaderboard entry. */
    PlayFabId?: string;
    /** User's overall position in the leaderboard. */
    Position: number;
    /** Specific value of the user's statistic. */
    StatValue: number;
  }

  interface CharacterResult {
    /** The id for this character on this player. */
    CharacterId?: string;
    /** The name of this character. */
    CharacterName?: string;
    /** The type-string that was given to this character on creation. */
    CharacterType?: string;
  }

  type CloudScriptRevisionOption = "Live" | "Latest" | "Specific";

  interface ConsumeItemRequest {
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId?: string;
    /** Number of uses to consume from the item. */
    ConsumeCount: number;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Unique instance identifier of the item to be consumed. */
    ItemInstanceId: string;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface ConsumeItemResult {
    /** Unique instance identifier of the item with uses consumed. */
    ItemInstanceId?: string;
    /** Number of uses remaining on the item. */
    RemainingUses: number;
  }

  interface ContactEmailInfo {
    /** The email address */
    EmailAddress?: string;
    /** The name of the email info data */
    Name?: string;
    /** The verification status of the email */
    VerificationStatus?: EmailVerificationStatus;
  }

  interface ContactEmailInfoModel {
    /** The email address */
    EmailAddress?: string;
    /** The name of the email info data */
    Name?: string;
    /** The verification status of the email */
    VerificationStatus?: EmailVerificationStatus;
  }

  type ContinentCode = "AF" | "AN" | "AS" | "EU" | "NA" | "OC" | "SA";

  type CountryCode =
    | "AF"
    | "AX"
    | "AL"
    | "DZ"
    | "AS"
    | "AD"
    | "AO"
    | "AI"
    | "AQ"
    | "AG"
    | "AR"
    | "AM"
    | "AW"
    | "AU"
    | "AT"
    | "AZ"
    | "BS"
    | "BH"
    | "BD"
    | "BB"
    | "BY"
    | "BE"
    | "BZ"
    | "BJ"
    | "BM"
    | "BT"
    | "BO"
    | "BQ"
    | "BA"
    | "BW"
    | "BV"
    | "BR"
    | "IO"
    | "BN"
    | "BG"
    | "BF"
    | "BI"
    | "KH"
    | "CM"
    | "CA"
    | "CV"
    | "KY"
    | "CF"
    | "TD"
    | "CL"
    | "CN"
    | "CX"
    | "CC"
    | "CO"
    | "KM"
    | "CG"
    | "CD"
    | "CK"
    | "CR"
    | "CI"
    | "HR"
    | "CU"
    | "CW"
    | "CY"
    | "CZ"
    | "DK"
    | "DJ"
    | "DM"
    | "DO"
    | "EC"
    | "EG"
    | "SV"
    | "GQ"
    | "ER"
    | "EE"
    | "ET"
    | "FK"
    | "FO"
    | "FJ"
    | "FI"
    | "FR"
    | "GF"
    | "PF"
    | "TF"
    | "GA"
    | "GM"
    | "GE"
    | "DE"
    | "GH"
    | "GI"
    | "GR"
    | "GL"
    | "GD"
    | "GP"
    | "GU"
    | "GT"
    | "GG"
    | "GN"
    | "GW"
    | "GY"
    | "HT"
    | "HM"
    | "VA"
    | "HN"
    | "HK"
    | "HU"
    | "IS"
    | "IN"
    | "ID"
    | "IR"
    | "IQ"
    | "IE"
    | "IM"
    | "IL"
    | "IT"
    | "JM"
    | "JP"
    | "JE"
    | "JO"
    | "KZ"
    | "KE"
    | "KI"
    | "KP"
    | "KR"
    | "KW"
    | "KG"
    | "LA"
    | "LV"
    | "LB"
    | "LS"
    | "LR"
    | "LY"
    | "LI"
    | "LT"
    | "LU"
    | "MO"
    | "MK"
    | "MG"
    | "MW"
    | "MY"
    | "MV"
    | "ML"
    | "MT"
    | "MH"
    | "MQ"
    | "MR"
    | "MU"
    | "YT"
    | "MX"
    | "FM"
    | "MD"
    | "MC"
    | "MN"
    | "ME"
    | "MS"
    | "MA"
    | "MZ"
    | "MM"
    | "NA"
    | "NR"
    | "NP"
    | "NL"
    | "NC"
    | "NZ"
    | "NI"
    | "NE"
    | "NG"
    | "NU"
    | "NF"
    | "MP"
    | "NO"
    | "OM"
    | "PK"
    | "PW"
    | "PS"
    | "PA"
    | "PG"
    | "PY"
    | "PE"
    | "PH"
    | "PN"
    | "PL"
    | "PT"
    | "PR"
    | "QA"
    | "RE"
    | "RO"
    | "RU"
    | "RW"
    | "BL"
    | "SH"
    | "KN"
    | "LC"
    | "MF"
    | "PM"
    | "VC"
    | "WS"
    | "SM"
    | "ST"
    | "SA"
    | "SN"
    | "RS"
    | "SC"
    | "SL"
    | "SG"
    | "SX"
    | "SK"
    | "SI"
    | "SB"
    | "SO"
    | "ZA"
    | "GS"
    | "SS"
    | "ES"
    | "LK"
    | "SD"
    | "SR"
    | "SJ"
    | "SZ"
    | "SE"
    | "CH"
    | "SY"
    | "TW"
    | "TJ"
    | "TZ"
    | "TH"
    | "TL"
    | "TG"
    | "TK"
    | "TO"
    | "TT"
    | "TN"
    | "TR"
    | "TM"
    | "TC"
    | "TV"
    | "UG"
    | "UA"
    | "AE"
    | "GB"
    | "US"
    | "UM"
    | "UY"
    | "UZ"
    | "VU"
    | "VE"
    | "VN"
    | "VG"
    | "VI"
    | "WF"
    | "EH"
    | "YE"
    | "ZM"
    | "ZW";

  /**
   * If SharedGroupId is specified, the service will attempt to create a group with that identifier, and will return an error
   * if it is already in use. If no SharedGroupId is specified, a random identifier will be assigned.
   */
  interface CreateSharedGroupRequest {
    /** Unique identifier for the shared group (a random identifier will be assigned, if one is not specified). */
    SharedGroupId?: string;
  }

  interface CreateSharedGroupResult {
    /** Unique identifier for the shared group. */
    SharedGroupId?: string;
  }

  type Currency =
    | "AED"
    | "AFN"
    | "ALL"
    | "AMD"
    | "ANG"
    | "AOA"
    | "ARS"
    | "AUD"
    | "AWG"
    | "AZN"
    | "BAM"
    | "BBD"
    | "BDT"
    | "BGN"
    | "BHD"
    | "BIF"
    | "BMD"
    | "BND"
    | "BOB"
    | "BRL"
    | "BSD"
    | "BTN"
    | "BWP"
    | "BYR"
    | "BZD"
    | "CAD"
    | "CDF"
    | "CHF"
    | "CLP"
    | "CNY"
    | "COP"
    | "CRC"
    | "CUC"
    | "CUP"
    | "CVE"
    | "CZK"
    | "DJF"
    | "DKK"
    | "DOP"
    | "DZD"
    | "EGP"
    | "ERN"
    | "ETB"
    | "EUR"
    | "FJD"
    | "FKP"
    | "GBP"
    | "GEL"
    | "GGP"
    | "GHS"
    | "GIP"
    | "GMD"
    | "GNF"
    | "GTQ"
    | "GYD"
    | "HKD"
    | "HNL"
    | "HRK"
    | "HTG"
    | "HUF"
    | "IDR"
    | "ILS"
    | "IMP"
    | "INR"
    | "IQD"
    | "IRR"
    | "ISK"
    | "JEP"
    | "JMD"
    | "JOD"
    | "JPY"
    | "KES"
    | "KGS"
    | "KHR"
    | "KMF"
    | "KPW"
    | "KRW"
    | "KWD"
    | "KYD"
    | "KZT"
    | "LAK"
    | "LBP"
    | "LKR"
    | "LRD"
    | "LSL"
    | "LYD"
    | "MAD"
    | "MDL"
    | "MGA"
    | "MKD"
    | "MMK"
    | "MNT"
    | "MOP"
    | "MRO"
    | "MUR"
    | "MVR"
    | "MWK"
    | "MXN"
    | "MYR"
    | "MZN"
    | "NAD"
    | "NGN"
    | "NIO"
    | "NOK"
    | "NPR"
    | "NZD"
    | "OMR"
    | "PAB"
    | "PEN"
    | "PGK"
    | "PHP"
    | "PKR"
    | "PLN"
    | "PYG"
    | "QAR"
    | "RON"
    | "RSD"
    | "RUB"
    | "RWF"
    | "SAR"
    | "SBD"
    | "SCR"
    | "SDG"
    | "SEK"
    | "SGD"
    | "SHP"
    | "SLL"
    | "SOS"
    | "SPL"
    | "SRD"
    | "STD"
    | "SVC"
    | "SYP"
    | "SZL"
    | "THB"
    | "TJS"
    | "TMT"
    | "TND"
    | "TOP"
    | "TRY"
    | "TTD"
    | "TVD"
    | "TWD"
    | "TZS"
    | "UAH"
    | "UGX"
    | "USD"
    | "UYU"
    | "UZS"
    | "VEF"
    | "VND"
    | "VUV"
    | "WST"
    | "XAF"
    | "XCD"
    | "XDR"
    | "XOF"
    | "XPF"
    | "YER"
    | "ZAR"
    | "ZMW"
    | "ZWD";

  /**
   * This function will delete the specified character from the list allowed by the user, and will also delete any inventory
   * or VC currently held by that character. It will NOT delete any statistics associated for this character, in order to
   * preserve leaderboard integrity.
   */
  interface DeleteCharacterFromUserRequest {
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId: string;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
    /**
     * If true, the character's inventory will be transferred up to the owning user; otherwise, this request will purge those
     * items.
     */
    SaveCharacterInventory: boolean;
  }

  interface DeleteCharacterFromUserResult {}

  /**
   * Deletes all data associated with the player, including statistics, custom data, inventory, purchases, virtual currency
   * balances, characters and shared group memberships. Removes the player from all leaderboards and player search indexes.
   * Does not delete PlayStream event history associated with the player. Does not delete the publisher user account that
   * created the player in the title nor associated data such as username, password, email address, account linkages, or
   * friends list. Note, this API queues the player for deletion and returns immediately. It may take several minutes or more
   * before all player data is fully deleted. Until the player data is fully deleted, attempts to recreate the player with
   * the same user account in the same title will fail with the 'AccountDeleted' error. This API must be enabled for use as
   * an option in the game manager website. It is disabled by default.
   */
  interface DeletePlayerRequest {
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface DeletePlayerResult {}

  /** Represents the request to delete a push notification template. */
  interface DeletePushNotificationTemplateRequest {
    /** Id of the push notification template to be deleted. */
    PushNotificationTemplateId: string;
  }

  interface DeletePushNotificationTemplateResult {}

  interface DeleteSharedGroupRequest {
    /** Unique identifier for the shared group. */
    SharedGroupId: string;
  }

  interface DeregisterGameRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Unique identifier for the Game Server Instance that is being deregistered. */
    LobbyId: string;
  }

  interface DeregisterGameResponse {}

  type EmailVerificationStatus = "Unverified" | "Pending" | "Confirmed";

  interface EmptyResponse {}

  interface EmptyResult {}

  /** Combined entity type and ID structure which uniquely identifies a single entity. */
  interface EntityKey {
    /** Unique ID of the entity. */
    Id: string;
    /** Entity type. See https://docs.microsoft.com/gaming/playfab/features/data/entities/available-built-in-entity-types */
    Type?: string;
  }

  interface EntityTokenResponse {
    /** The entity id and type. */
    Entity?: EntityKey;
    /** The token used to set X-EntityToken for all entity based API calls. */
    EntityToken?: string;
    /** The time the token will expire, if it is an expiring token, in UTC. */
    TokenExpiration?: string;
  }

  interface EvaluateRandomResultTableRequest {
    /**
     * Specifies the catalog version that should be used to evaluate the Random Result Table. If unspecified, uses
     * default/primary catalog.
     */
    CatalogVersion?: string;
    /** The unique identifier of the Random Result Table to use. */
    TableId: string;
  }

  /**
   * Note that if the Random Result Table contains no entries, or does not exist for the catalog specified (the Primary
   * catalog if one is not specified), an InvalidDropTable error will be returned.
   */
  interface EvaluateRandomResultTableResult {
    /** Unique identifier for the item returned from the Random Result Table evaluation, for the given catalog. */
    ResultItemId?: string;
  }

  interface ExecuteCloudScriptResult {
    /** Number of PlayFab API requests issued by the CloudScript function */
    APIRequestsIssued: number;
    /** Information about the error, if any, that occurred during execution */
    Error?: ScriptExecutionError;
    ExecutionTimeSeconds: number;
    /** The name of the function that executed */
    FunctionName?: string;
    /** The object returned from the CloudScript function, if any */
    FunctionResult?: any;
    /**
     * Flag indicating if the FunctionResult was too large and was subsequently dropped from this event. This only occurs if
     * the total event size is larger than 350KB.
     */
    FunctionResultTooLarge?: boolean;
    /** Number of external HTTP requests issued by the CloudScript function */
    HttpRequestsIssued: number;
    /**
     * Entries logged during the function execution. These include both entries logged in the function code using log.info()
     * and log.error() and error entries for API and HTTP request failures.
     */
    Logs?: LogStatement[];
    /**
     * Flag indicating if the logs were too large and were subsequently dropped from this event. This only occurs if the total
     * event size is larger than 350KB after the FunctionResult was removed.
     */
    LogsTooLarge?: boolean;
    MemoryConsumedBytes: number;
    /**
     * Processor time consumed while executing the function. This does not include time spent waiting on API calls or HTTP
     * requests.
     */
    ProcessorTimeSeconds: number;
    /** The revision of the CloudScript that executed */
    Revision: number;
  }

  interface ExecuteCloudScriptServerRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The name of the CloudScript function to execute */
    FunctionName: string;
    /** Object that is passed in to the function as the first argument */
    FunctionParameter?: any;
    /**
     * Generate a 'player_executed_cloudscript' PlayStream event containing the results of the function execution and other
     * contextual information. This event will show up in the PlayStream debugger console for the player in Game Manager.
     */
    GeneratePlayStreamEvent?: boolean;
    /** The unique user identifier for the player on whose behalf the script is being run */
    PlayFabId: string;
    /**
     * Option for which revision of the CloudScript to execute. 'Latest' executes the most recently created revision, 'Live'
     * executes the current live, published revision, and 'Specific' executes the specified revision. The default value is
     * 'Specific', if the SpeificRevision parameter is specified, otherwise it is 'Live'.
     */
    RevisionSelection?: CloudScriptRevisionOption;
    /** The specivic revision to execute, when RevisionSelection is set to 'Specific' */
    SpecificRevision?: number;
  }

  interface FacebookInstantGamesPlayFabIdPair {
    /** Unique Facebook Instant Games identifier for a user. */
    FacebookInstantGamesId?: string;
    /** Unique PlayFab identifier for a user, or null if no PlayFab account is linked to the Facebook Instant Games identifier. */
    PlayFabId?: string;
  }

  interface FacebookPlayFabIdPair {
    /** Unique Facebook identifier for a user. */
    FacebookId?: string;
    /** Unique PlayFab identifier for a user, or null if no PlayFab account is linked to the Facebook identifier. */
    PlayFabId?: string;
  }

  interface FriendInfo {
    /** Available Facebook information (if the user and PlayFab friend are also connected in Facebook). */
    FacebookInfo?: UserFacebookInfo;
    /** PlayFab unique identifier for this friend. */
    FriendPlayFabId?: string;
    /** Available Game Center information (if the user and PlayFab friend are also connected in Game Center). */
    GameCenterInfo?: UserGameCenterInfo;
    /** The profile of the user, if requested. */
    Profile?: PlayerProfileModel;
    /** Available PSN information, if the user and PlayFab friend are both connected to PSN. */
    PSNInfo?: UserPsnInfo;
    /** Available Steam information (if the user and PlayFab friend are also connected in Steam). */
    SteamInfo?: UserSteamInfo;
    /** Tags which have been associated with this friend. */
    Tags?: string[];
    /** Title-specific display name for this friend. */
    TitleDisplayName?: string;
    /** PlayFab unique username for this friend. */
    Username?: string;
    /** Available Xbox information, if the user and PlayFab friend are both connected to Xbox Live. */
    XboxInfo?: UserXboxInfo;
  }

  type GameInstanceState = "Open" | "Closed";

  type GenericErrorCodes =
    | "Success"
    | "UnkownError"
    | "InvalidParams"
    | "AccountNotFound"
    | "AccountBanned"
    | "InvalidUsernameOrPassword"
    | "InvalidTitleId"
    | "InvalidEmailAddress"
    | "EmailAddressNotAvailable"
    | "InvalidUsername"
    | "InvalidPassword"
    | "UsernameNotAvailable"
    | "InvalidSteamTicket"
    | "AccountAlreadyLinked"
    | "LinkedAccountAlreadyClaimed"
    | "InvalidFacebookToken"
    | "AccountNotLinked"
    | "FailedByPaymentProvider"
    | "CouponCodeNotFound"
    | "InvalidContainerItem"
    | "ContainerNotOwned"
    | "KeyNotOwned"
    | "InvalidItemIdInTable"
    | "InvalidReceipt"
    | "ReceiptAlreadyUsed"
    | "ReceiptCancelled"
    | "GameNotFound"
    | "GameModeNotFound"
    | "InvalidGoogleToken"
    | "UserIsNotPartOfDeveloper"
    | "InvalidTitleForDeveloper"
    | "TitleNameConflicts"
    | "UserisNotValid"
    | "ValueAlreadyExists"
    | "BuildNotFound"
    | "PlayerNotInGame"
    | "InvalidTicket"
    | "InvalidDeveloper"
    | "InvalidOrderInfo"
    | "RegistrationIncomplete"
    | "InvalidPlatform"
    | "UnknownError"
    | "SteamApplicationNotOwned"
    | "WrongSteamAccount"
    | "TitleNotActivated"
    | "RegistrationSessionNotFound"
    | "NoSuchMod"
    | "FileNotFound"
    | "DuplicateEmail"
    | "ItemNotFound"
    | "ItemNotOwned"
    | "ItemNotRecycleable"
    | "ItemNotAffordable"
    | "InvalidVirtualCurrency"
    | "WrongVirtualCurrency"
    | "WrongPrice"
    | "NonPositiveValue"
    | "InvalidRegion"
    | "RegionAtCapacity"
    | "ServerFailedToStart"
    | "NameNotAvailable"
    | "InsufficientFunds"
    | "InvalidDeviceID"
    | "InvalidPushNotificationToken"
    | "NoRemainingUses"
    | "InvalidPaymentProvider"
    | "PurchaseInitializationFailure"
    | "DuplicateUsername"
    | "InvalidBuyerInfo"
    | "NoGameModeParamsSet"
    | "BodyTooLarge"
    | "ReservedWordInBody"
    | "InvalidTypeInBody"
    | "InvalidRequest"
    | "ReservedEventName"
    | "InvalidUserStatistics"
    | "NotAuthenticated"
    | "StreamAlreadyExists"
    | "ErrorCreatingStream"
    | "StreamNotFound"
    | "InvalidAccount"
    | "PurchaseDoesNotExist"
    | "InvalidPurchaseTransactionStatus"
    | "APINotEnabledForGameClientAccess"
    | "NoPushNotificationARNForTitle"
    | "BuildAlreadyExists"
    | "BuildPackageDoesNotExist"
    | "CustomAnalyticsEventsNotEnabledForTitle"
    | "InvalidSharedGroupId"
    | "NotAuthorized"
    | "MissingTitleGoogleProperties"
    | "InvalidItemProperties"
    | "InvalidPSNAuthCode"
    | "InvalidItemId"
    | "PushNotEnabledForAccount"
    | "PushServiceError"
    | "ReceiptDoesNotContainInAppItems"
    | "ReceiptContainsMultipleInAppItems"
    | "InvalidBundleID"
    | "JavascriptException"
    | "InvalidSessionTicket"
    | "UnableToConnectToDatabase"
    | "InternalServerError"
    | "InvalidReportDate"
    | "ReportNotAvailable"
    | "DatabaseThroughputExceeded"
    | "InvalidGameTicket"
    | "ExpiredGameTicket"
    | "GameTicketDoesNotMatchLobby"
    | "LinkedDeviceAlreadyClaimed"
    | "DeviceAlreadyLinked"
    | "DeviceNotLinked"
    | "PartialFailure"
    | "PublisherNotSet"
    | "ServiceUnavailable"
    | "VersionNotFound"
    | "RevisionNotFound"
    | "InvalidPublisherId"
    | "DownstreamServiceUnavailable"
    | "APINotIncludedInTitleUsageTier"
    | "DAULimitExceeded"
    | "APIRequestLimitExceeded"
    | "InvalidAPIEndpoint"
    | "BuildNotAvailable"
    | "ConcurrentEditError"
    | "ContentNotFound"
    | "CharacterNotFound"
    | "CloudScriptNotFound"
    | "ContentQuotaExceeded"
    | "InvalidCharacterStatistics"
    | "PhotonNotEnabledForTitle"
    | "PhotonApplicationNotFound"
    | "PhotonApplicationNotAssociatedWithTitle"
    | "InvalidEmailOrPassword"
    | "FacebookAPIError"
    | "InvalidContentType"
    | "KeyLengthExceeded"
    | "DataLengthExceeded"
    | "TooManyKeys"
    | "FreeTierCannotHaveVirtualCurrency"
    | "MissingAmazonSharedKey"
    | "AmazonValidationError"
    | "InvalidPSNIssuerId"
    | "PSNInaccessible"
    | "ExpiredAuthToken"
    | "FailedToGetEntitlements"
    | "FailedToConsumeEntitlement"
    | "TradeAcceptingUserNotAllowed"
    | "TradeInventoryItemIsAssignedToCharacter"
    | "TradeInventoryItemIsBundle"
    | "TradeStatusNotValidForCancelling"
    | "TradeStatusNotValidForAccepting"
    | "TradeDoesNotExist"
    | "TradeCancelled"
    | "TradeAlreadyFilled"
    | "TradeWaitForStatusTimeout"
    | "TradeInventoryItemExpired"
    | "TradeMissingOfferedAndAcceptedItems"
    | "TradeAcceptedItemIsBundle"
    | "TradeAcceptedItemIsStackable"
    | "TradeInventoryItemInvalidStatus"
    | "TradeAcceptedCatalogItemInvalid"
    | "TradeAllowedUsersInvalid"
    | "TradeInventoryItemDoesNotExist"
    | "TradeInventoryItemIsConsumed"
    | "TradeInventoryItemIsStackable"
    | "TradeAcceptedItemsMismatch"
    | "InvalidKongregateToken"
    | "FeatureNotConfiguredForTitle"
    | "NoMatchingCatalogItemForReceipt"
    | "InvalidCurrencyCode"
    | "NoRealMoneyPriceForCatalogItem"
    | "TradeInventoryItemIsNotTradable"
    | "TradeAcceptedCatalogItemIsNotTradable"
    | "UsersAlreadyFriends"
    | "LinkedIdentifierAlreadyClaimed"
    | "CustomIdNotLinked"
    | "TotalDataSizeExceeded"
    | "DeleteKeyConflict"
    | "InvalidXboxLiveToken"
    | "ExpiredXboxLiveToken"
    | "ResettableStatisticVersionRequired"
    | "NotAuthorizedByTitle"
    | "NoPartnerEnabled"
    | "InvalidPartnerResponse"
    | "APINotEnabledForGameServerAccess"
    | "StatisticNotFound"
    | "StatisticNameConflict"
    | "StatisticVersionClosedForWrites"
    | "StatisticVersionInvalid"
    | "APIClientRequestRateLimitExceeded"
    | "InvalidJSONContent"
    | "InvalidDropTable"
    | "StatisticVersionAlreadyIncrementedForScheduledInterval"
    | "StatisticCountLimitExceeded"
    | "StatisticVersionIncrementRateExceeded"
    | "ContainerKeyInvalid"
    | "CloudScriptExecutionTimeLimitExceeded"
    | "NoWritePermissionsForEvent"
    | "CloudScriptFunctionArgumentSizeExceeded"
    | "CloudScriptAPIRequestCountExceeded"
    | "CloudScriptAPIRequestError"
    | "CloudScriptHTTPRequestError"
    | "InsufficientGuildRole"
    | "GuildNotFound"
    | "OverLimit"
    | "EventNotFound"
    | "InvalidEventField"
    | "InvalidEventName"
    | "CatalogNotConfigured"
    | "OperationNotSupportedForPlatform"
    | "SegmentNotFound"
    | "StoreNotFound"
    | "InvalidStatisticName"
    | "TitleNotQualifiedForLimit"
    | "InvalidServiceLimitLevel"
    | "ServiceLimitLevelInTransition"
    | "CouponAlreadyRedeemed"
    | "GameServerBuildSizeLimitExceeded"
    | "GameServerBuildCountLimitExceeded"
    | "VirtualCurrencyCountLimitExceeded"
    | "VirtualCurrencyCodeExists"
    | "TitleNewsItemCountLimitExceeded"
    | "InvalidTwitchToken"
    | "TwitchResponseError"
    | "ProfaneDisplayName"
    | "UserAlreadyAdded"
    | "InvalidVirtualCurrencyCode"
    | "VirtualCurrencyCannotBeDeleted"
    | "IdentifierAlreadyClaimed"
    | "IdentifierNotLinked"
    | "InvalidContinuationToken"
    | "ExpiredContinuationToken"
    | "InvalidSegment"
    | "InvalidSessionId"
    | "SessionLogNotFound"
    | "InvalidSearchTerm"
    | "TwoFactorAuthenticationTokenRequired"
    | "GameServerHostCountLimitExceeded"
    | "PlayerTagCountLimitExceeded"
    | "RequestAlreadyRunning"
    | "ActionGroupNotFound"
    | "MaximumSegmentBulkActionJobsRunning"
    | "NoActionsOnPlayersInSegmentJob"
    | "DuplicateStatisticName"
    | "ScheduledTaskNameConflict"
    | "ScheduledTaskCreateConflict"
    | "InvalidScheduledTaskName"
    | "InvalidTaskSchedule"
    | "SteamNotEnabledForTitle"
    | "LimitNotAnUpgradeOption"
    | "NoSecretKeyEnabledForCloudScript"
    | "TaskNotFound"
    | "TaskInstanceNotFound"
    | "InvalidIdentityProviderId"
    | "MisconfiguredIdentityProvider"
    | "InvalidScheduledTaskType"
    | "BillingInformationRequired"
    | "LimitedEditionItemUnavailable"
    | "InvalidAdPlacementAndReward"
    | "AllAdPlacementViewsAlreadyConsumed"
    | "GoogleOAuthNotConfiguredForTitle"
    | "GoogleOAuthError"
    | "UserNotFriend"
    | "InvalidSignature"
    | "InvalidPublicKey"
    | "GoogleOAuthNoIdTokenIncludedInResponse"
    | "StatisticUpdateInProgress"
    | "LeaderboardVersionNotAvailable"
    | "StatisticAlreadyHasPrizeTable"
    | "PrizeTableHasOverlappingRanks"
    | "PrizeTableHasMissingRanks"
    | "PrizeTableRankStartsAtZero"
    | "InvalidStatistic"
    | "ExpressionParseFailure"
    | "ExpressionInvokeFailure"
    | "ExpressionTooLong"
    | "DataUpdateRateExceeded"
    | "RestrictedEmailDomain"
    | "EncryptionKeyDisabled"
    | "EncryptionKeyMissing"
    | "EncryptionKeyBroken"
    | "NoSharedSecretKeyConfigured"
    | "SecretKeyNotFound"
    | "PlayerSecretAlreadyConfigured"
    | "APIRequestsDisabledForTitle"
    | "InvalidSharedSecretKey"
    | "PrizeTableHasNoRanks"
    | "ProfileDoesNotExist"
    | "ContentS3OriginBucketNotConfigured"
    | "InvalidEnvironmentForReceipt"
    | "EncryptedRequestNotAllowed"
    | "SignedRequestNotAllowed"
    | "RequestViewConstraintParamsNotAllowed"
    | "BadPartnerConfiguration"
    | "XboxBPCertificateFailure"
    | "XboxXASSExchangeFailure"
    | "InvalidEntityId"
    | "StatisticValueAggregationOverflow"
    | "EmailMessageFromAddressIsMissing"
    | "EmailMessageToAddressIsMissing"
    | "SmtpServerAuthenticationError"
    | "SmtpServerLimitExceeded"
    | "SmtpServerInsufficientStorage"
    | "SmtpServerCommunicationError"
    | "SmtpServerGeneralFailure"
    | "EmailClientTimeout"
    | "EmailClientCanceledTask"
    | "EmailTemplateMissing"
    | "InvalidHostForTitleId"
    | "EmailConfirmationTokenDoesNotExist"
    | "EmailConfirmationTokenExpired"
    | "AccountDeleted"
    | "PlayerSecretNotConfigured"
    | "InvalidSignatureTime"
    | "NoContactEmailAddressFound"
    | "InvalidAuthToken"
    | "AuthTokenDoesNotExist"
    | "AuthTokenExpired"
    | "AuthTokenAlreadyUsedToResetPassword"
    | "MembershipNameTooLong"
    | "MembershipNotFound"
    | "GoogleServiceAccountInvalid"
    | "GoogleServiceAccountParseFailure"
    | "EntityTokenMissing"
    | "EntityTokenInvalid"
    | "EntityTokenExpired"
    | "EntityTokenRevoked"
    | "InvalidProductForSubscription"
    | "XboxInaccessible"
    | "SubscriptionAlreadyTaken"
    | "SmtpAddonNotEnabled"
    | "APIConcurrentRequestLimitExceeded"
    | "XboxRejectedXSTSExchangeRequest"
    | "VariableNotDefined"
    | "TemplateVersionNotDefined"
    | "FileTooLarge"
    | "TitleDeleted"
    | "TitleContainsUserAccounts"
    | "TitleDeletionPlayerCleanupFailure"
    | "EntityFileOperationPending"
    | "NoEntityFileOperationPending"
    | "EntityProfileVersionMismatch"
    | "TemplateVersionTooOld"
    | "MembershipDefinitionInUse"
    | "PaymentPageNotConfigured"
    | "FailedLoginAttemptRateLimitExceeded"
    | "EntityBlockedByGroup"
    | "RoleDoesNotExist"
    | "EntityIsAlreadyMember"
    | "DuplicateRoleId"
    | "GroupInvitationNotFound"
    | "GroupApplicationNotFound"
    | "OutstandingInvitationAcceptedInstead"
    | "OutstandingApplicationAcceptedInstead"
    | "RoleIsGroupDefaultMember"
    | "RoleIsGroupAdmin"
    | "RoleNameNotAvailable"
    | "GroupNameNotAvailable"
    | "EmailReportAlreadySent"
    | "EmailReportRecipientBlacklisted"
    | "EventNamespaceNotAllowed"
    | "EventEntityNotAllowed"
    | "InvalidEntityType"
    | "NullTokenResultFromAad"
    | "InvalidTokenResultFromAad"
    | "NoValidCertificateForAad"
    | "InvalidCertificateForAad"
    | "DuplicateDropTableId"
    | "MultiplayerServerError"
    | "MultiplayerServerTooManyRequests"
    | "MultiplayerServerNoContent"
    | "MultiplayerServerBadRequest"
    | "MultiplayerServerUnauthorized"
    | "MultiplayerServerForbidden"
    | "MultiplayerServerNotFound"
    | "MultiplayerServerConflict"
    | "MultiplayerServerInternalServerError"
    | "MultiplayerServerUnavailable"
    | "ExplicitContentDetected"
    | "PIIContentDetected"
    | "InvalidScheduledTaskParameter"
    | "PerEntityEventRateLimitExceeded"
    | "TitleDefaultLanguageNotSet"
    | "EmailTemplateMissingDefaultVersion"
    | "FacebookInstantGamesIdNotLinked"
    | "InvalidFacebookInstantGamesSignature"
    | "FacebookInstantGamesAuthNotConfiguredForTitle"
    | "EntityProfileConstraintValidationFailed"
    | "TelemetryIngestionKeyPending"
    | "TelemetryIngestionKeyNotFound"
    | "StatisticChildNameInvalid"
    | "DataIntegrityError"
    | "VirtualCurrencyCannotBeSetToOlderVersion"
    | "VirtualCurrencyMustBeWithinIntegerRange"
    | "EmailTemplateInvalidSyntax"
    | "EmailTemplateMissingCallback"
    | "PushNotificationTemplateInvalidPayload"
    | "InvalidLocalizedPushNotificationLanguage"
    | "MissingLocalizedPushNotificationMessage"
    | "PushNotificationTemplateMissingPlatformPayload"
    | "PushNotificationTemplatePayloadContainsInvalidJson"
    | "PushNotificationTemplateContainsInvalidIosPayload"
    | "PushNotificationTemplateContainsInvalidAndroidPayload"
    | "PushNotificationTemplateIosPayloadMissingNotificationBody"
    | "PushNotificationTemplateAndroidPayloadMissingNotificationBody"
    | "PushNotificationTemplateNotFound"
    | "PushNotificationTemplateMissingDefaultVersion"
    | "PushNotificationTemplateInvalidSyntax"
    | "PushNotificationTemplateNoCustomPayloadForV1"
    | "NoLeaderboardForStatistic"
    | "TitleNewsMissingDefaultLanguage"
    | "TitleNewsNotFound"
    | "TitleNewsDuplicateLanguage"
    | "TitleNewsMissingTitleOrBody"
    | "TitleNewsInvalidLanguage"
    | "EmailRecipientBlacklisted"
    | "InvalidGameCenterAuthRequest"
    | "GameCenterAuthenticationFailed"
    | "CannotEnablePartiesForTitle"
    | "PartyError"
    | "PartyRequests"
    | "PartyNoContent"
    | "PartyBadRequest"
    | "PartyUnauthorized"
    | "PartyForbidden"
    | "PartyNotFound"
    | "PartyConflict"
    | "PartyInternalServerError"
    | "PartyUnavailable"
    | "PartyTooManyRequests"
    | "PushNotificationTemplateMissingName"
    | "CannotEnableMultiplayerServersForTitle"
    | "WriteAttemptedDuringExport"
    | "MultiplayerServerTitleQuotaCoresExceeded"
    | "AutomationRuleNotFound"
    | "EntityAPIKeyLimitExceeded"
    | "EntityAPIKeyNotFound"
    | "EntityAPIKeyOrSecretInvalid"
    | "EconomyServiceUnavailable"
    | "EconomyServiceInternalError"
    | "QueryRateLimitExceeded"
    | "EntityAPIKeyCreationDisabledForEntity"
    | "ForbiddenByEntityPolicy"
    | "UpdateInventoryRateLimitExceeded"
    | "StudioCreationRateLimited"
    | "StudioCreationInProgress"
    | "DuplicateStudioName"
    | "StudioNotFound"
    | "StudioDeleted"
    | "StudioDeactivated"
    | "StudioActivated"
    | "TitleCreationRateLimited"
    | "TitleCreationInProgress"
    | "DuplicateTitleName"
    | "TitleActivationRateLimited"
    | "TitleActivationInProgress"
    | "TitleDeactivated"
    | "TitleActivated"
    | "CloudScriptAzureFunctionsExecutionTimeLimitExceeded"
    | "CloudScriptAzureFunctionsArgumentSizeExceeded"
    | "CloudScriptAzureFunctionsReturnSizeExceeded"
    | "CloudScriptAzureFunctionsHTTPRequestError"
    | "VirtualCurrencyBetaGetError"
    | "VirtualCurrencyBetaCreateError"
    | "VirtualCurrencyBetaInitialDepositSaveError"
    | "VirtualCurrencyBetaSaveError"
    | "VirtualCurrencyBetaDeleteError"
    | "VirtualCurrencyBetaRestoreError"
    | "VirtualCurrencyBetaSaveConflict"
    | "VirtualCurrencyBetaUpdateError"
    | "InsightsManagementDatabaseNotFound"
    | "InsightsManagementOperationNotFound"
    | "InsightsManagementErrorPendingOperationExists"
    | "InsightsManagementSetPerformanceLevelInvalidParameter"
    | "InsightsManagementSetStorageRetentionInvalidParameter"
    | "InsightsManagementGetStorageUsageInvalidParameter"
    | "InsightsManagementGetOperationStatusInvalidParameter"
    | "DuplicatePurchaseTransactionId"
    | "EvaluationModePlayerCountExceeded"
    | "GetPlayersInSegmentRateLimitExceeded"
    | "CloudScriptFunctionNameSizeExceeded"
    | "PaidInsightsFeaturesNotEnabled"
    | "CloudScriptAzureFunctionsQueueRequestError"
    | "EvaluationModeTitleCountExceeded"
    | "InsightsManagementTitleNotInFlight"
    | "LimitNotFound"
    | "LimitNotAvailableViaAPI"
    | "InsightsManagementSetStorageRetentionBelowMinimum"
    | "InsightsManagementSetStorageRetentionAboveMaximum"
    | "AppleNotEnabledForTitle"
    | "InsightsManagementNewActiveEventExportLimitInvalid"
    | "InsightsManagementSetPerformanceRateLimited"
    | "PartyRequestsThrottledFromRateLimiter"
    | "XboxServiceTooManyRequests"
    | "NintendoSwitchNotEnabledForTitle"
    | "RequestMultiplayerServersThrottledFromRateLimiter"
    | "TitleDataOverrideNotFound"
    | "DuplicateKeys"
    | "WasNotCreatedWithCloudRoot"
    | "LegacyMultiplayerServersDeprecated"
    | "VirtualCurrencyCurrentlyUnavailable"
    | "SteamUserNotFound"
    | "ElasticSearchOperationFailed"
    | "NotImplemented"
    | "PublisherNotFound"
    | "PublisherDeleted"
    | "ApiDisabledForMigration"
    | "ResourceNameUpdateNotAllowed"
    | "ApiNotEnabledForTitle"
    | "DuplicateTitleNameForPublisher"
    | "AzureTitleCreationInProgress"
    | "TitleConstraintsPublisherDeletion"
    | "InvalidPlayerAccountPoolId"
    | "PlayerAccountPoolNotFound"
    | "PlayerAccountPoolDeleted"
    | "TitleCleanupInProgress"
    | "AzureResourceConcurrentOperationInProgress"
    | "TitlePublisherUpdateNotAllowed"
    | "AzureResourceManagerNotSupportedInStamp"
    | "ApiNotIncludedInAzurePlayFabFeatureSet"
    | "GoogleServiceAccountFailedAuth"
    | "GoogleAPIServiceUnavailable"
    | "GoogleAPIServiceUnknownError"
    | "NoValidIdentityForAad"
    | "PlayerIdentityLinkNotFound"
    | "MatchmakingEntityInvalid"
    | "MatchmakingPlayerAttributesInvalid"
    | "MatchmakingQueueNotFound"
    | "MatchmakingMatchNotFound"
    | "MatchmakingTicketNotFound"
    | "MatchmakingAlreadyJoinedTicket"
    | "MatchmakingTicketAlreadyCompleted"
    | "MatchmakingQueueConfigInvalid"
    | "MatchmakingMemberProfileInvalid"
    | "NintendoSwitchDeviceIdNotLinked"
    | "MatchmakingNotEnabled"
    | "MatchmakingPlayerAttributesTooLarge"
    | "MatchmakingNumberOfPlayersInTicketTooLarge"
    | "MatchmakingAttributeInvalid"
    | "MatchmakingPlayerHasNotJoinedTicket"
    | "MatchmakingRateLimitExceeded"
    | "MatchmakingTicketMembershipLimitExceeded"
    | "MatchmakingUnauthorized"
    | "MatchmakingQueueLimitExceeded"
    | "MatchmakingRequestTypeMismatch"
    | "MatchmakingBadRequest"
    | "PubSubFeatureNotEnabledForTitle"
    | "PubSubTooManyRequests"
    | "PubSubConnectionNotFoundForEntity"
    | "PubSubConnectionHandleInvalid"
    | "PubSubSubscriptionLimitExceeded"
    | "TitleConfigNotFound"
    | "TitleConfigUpdateConflict"
    | "TitleConfigSerializationError"
    | "CatalogApiNotImplemented"
    | "CatalogEntityInvalid"
    | "CatalogTitleIdMissing"
    | "CatalogPlayerIdMissing"
    | "CatalogClientIdentityInvalid"
    | "CatalogOneOrMoreFilesInvalid"
    | "CatalogItemMetadataInvalid"
    | "CatalogItemIdInvalid"
    | "CatalogSearchParameterInvalid"
    | "CatalogFeatureDisabled"
    | "CatalogConfigInvalid"
    | "CatalogItemTypeInvalid"
    | "CatalogBadRequest"
    | "CatalogTooManyRequests"
    | "ExportInvalidStatusUpdate"
    | "ExportInvalidPrefix"
    | "ExportBlobContainerDoesNotExist"
    | "ExportNotFound"
    | "ExportCouldNotUpdate"
    | "ExportInvalidStorageType"
    | "ExportAmazonBucketDoesNotExist"
    | "ExportInvalidBlobStorage"
    | "ExportKustoException"
    | "ExportKustoConnectionFailed"
    | "ExportUnknownError"
    | "ExportCantEditPendingExport"
    | "ExportLimitExports"
    | "ExportLimitEvents"
    | "ExportInvalidPartitionStatusModification"
    | "ExportCouldNotCreate"
    | "ExportNoBackingDatabaseFound"
    | "ExportCouldNotDelete"
    | "ExportCannotDetermineEventQuery"
    | "ExportInvalidQuerySchemaModification"
    | "ExportQuerySchemaMissingRequiredColumns"
    | "ExportCannotParseQuery"
    | "ExportControlCommandsNotAllowed"
    | "ExportQueryMissingTableReference"
    | "ExplorerBasicInvalidQueryName"
    | "ExplorerBasicInvalidQueryDescription"
    | "ExplorerBasicInvalidQueryConditions"
    | "ExplorerBasicInvalidQueryStartDate"
    | "ExplorerBasicInvalidQueryEndDate"
    | "ExplorerBasicInvalidQueryGroupBy"
    | "ExplorerBasicInvalidQueryAggregateType"
    | "ExplorerBasicInvalidQueryAggregateProperty"
    | "ExplorerBasicLoadQueriesError"
    | "ExplorerBasicLoadQueryError"
    | "ExplorerBasicCreateQueryError"
    | "ExplorerBasicDeleteQueryError"
    | "ExplorerBasicUpdateQueryError"
    | "ExplorerBasicSavedQueriesLimit"
    | "ExplorerBasicSavedQueryNotFound"
    | "TenantShardMapperShardNotFound"
    | "TitleNotEnabledForParty"
    | "PartyVersionNotFound"
    | "MultiplayerServerBuildReferencedByMatchmakingQueue"
    | "MultiplayerServerBuildReferencedByBuildAlias"
    | "ExperimentationExperimentStopped"
    | "ExperimentationExperimentRunning"
    | "ExperimentationExperimentNotFound"
    | "ExperimentationExperimentNeverStarted"
    | "ExperimentationExperimentDeleted"
    | "ExperimentationClientTimeout"
    | "ExperimentationInvalidVariantConfiguration"
    | "ExperimentationInvalidVariableConfiguration"
    | "ExperimentInvalidId"
    | "ExperimentationNoScorecard"
    | "ExperimentationTreatmentAssignmentFailed"
    | "ExperimentationTreatmentAssignmentDisabled"
    | "ExperimentationInvalidDuration"
    | "ExperimentationMaxExperimentsReached"
    | "ExperimentationExperimentSchedulingInProgress"
    | "ExperimentationInvalidEndDate"
    | "ExperimentationInvalidStartDate"
    | "ExperimentationMaxDurationExceeded"
    | "ExperimentationExclusionGroupNotFound"
    | "ExperimentationExclusionGroupInsufficientCapacity"
    | "ExperimentationExclusionGroupCannotDelete"
    | "ExperimentationExclusionGroupInvalidTrafficAllocation"
    | "ExperimentationExclusionGroupInvalidName"
    | "MaxActionDepthExceeded"
    | "TitleNotOnUpdatedPricingPlan"
    | "SegmentManagementTitleNotInFlight"
    | "SegmentManagementNoExpressionTree"
    | "SegmentManagementTriggerActionCountOverLimit"
    | "SegmentManagementSegmentCountOverLimit"
    | "SegmentManagementInvalidSegmentId"
    | "SegmentManagementInvalidInput"
    | "SegmentManagementInvalidSegmentName"
    | "DeleteSegmentRateLimitExceeded"
    | "CreateSegmentRateLimitExceeded"
    | "UpdateSegmentRateLimitExceeded"
    | "GetSegmentsRateLimitExceeded"
    | "AsyncExportNotInFlight"
    | "AsyncExportNotFound"
    | "AsyncExportRateLimitExceeded"
    | "SnapshotNotFound"
    | "InventoryApiNotImplemented"
    | "LobbyDoesNotExist"
    | "LobbyRateLimitExceeded"
    | "LobbyPlayerAlreadyJoined"
    | "LobbyNotJoinable"
    | "LobbyMemberCannotRejoin"
    | "LobbyCurrentPlayersMoreThanMaxPlayers"
    | "LobbyPlayerNotPresent"
    | "LobbyBadRequest"
    | "LobbyPlayerMaxLobbyLimitExceeded"
    | "LobbyNewOwnerMustBeConnected"
    | "LobbyCurrentOwnerStillConnected"
    | "LobbyMemberIsNotOwner"
    | "EventSamplingInvalidRatio"
    | "EventSamplingInvalidEventNamespace"
    | "EventSamplingInvalidEventName"
    | "EventSamplingRatioNotFound"
    | "EventSinkConnectionInvalid"
    | "EventSinkConnectionUnauthorized"
    | "EventSinkRegionInvalid"
    | "OperationCanceled"
    | "InvalidDisplayNameRandomSuffixLength"
    | "AllowNonUniquePlayerDisplayNamesDisableNotAllowed";

  interface GenericPlayFabIdPair {
    /** Unique generic service identifier for a user. */
    GenericId?: GenericServiceId;
    /** Unique PlayFab identifier for a user, or null if no PlayFab account is linked to the given generic identifier. */
    PlayFabId?: string;
  }

  interface GenericServiceId {
    /** Name of the service for which the player has a unique identifier. */
    ServiceName: string;
    /** Unique identifier of the player in that service. */
    UserId: string;
  }

  /** Request has no paramaters. */
  interface GetAllSegmentsRequest {}

  interface GetAllSegmentsResult {
    /** Array of segments for this title. */
    Segments?: GetSegmentResult[];
  }

  interface GetCatalogItemsRequest {
    /** Which catalog is being requested. If null, uses the default catalog. */
    CatalogVersion?: string;
  }

  interface GetCatalogItemsResult {
    /** Array of items which can be purchased. */
    Catalog?: CatalogItem[];
  }

  /**
   * Data is stored as JSON key-value pairs. If the Keys parameter is provided, the data object returned will only contain
   * the data specific to the indicated Keys. Otherwise, the full set of custom user data will be returned.
   */
  interface GetCharacterDataRequest {
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId: string;
    /**
     * The version that currently exists according to the caller. The call will return the data for all of the keys if the
     * version in the system is greater than this.
     */
    IfChangedFromDataVersion?: number;
    /** Specific keys to search for in the custom user data. */
    Keys?: string[];
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface GetCharacterDataResult {
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId?: string;
    /** User specific data for this title. */
    Data?: { [key: string]: UserDataRecord };
    /**
     * Indicates the current version of the data that has been set. This is incremented with every set call for that type of
     * data (read-only, internal, etc). This version can be provided in Get calls to find updated data.
     */
    DataVersion: number;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId?: string;
  }

  /**
   * All items currently in the character inventory will be returned, irrespective of how they were acquired (via purchasing,
   * grants, coupons, etc.). Items that are expired, fully consumed, or are no longer valid are not considered to be in the
   * user's current inventory, and so will not be not included. Also returns their virtual currency balances.
   */
  interface GetCharacterInventoryRequest {
    /** Used to limit results to only those from a specific catalog version. */
    CatalogVersion?: string;
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId: string;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface GetCharacterInventoryResult {
    /** Unique identifier of the character for this inventory. */
    CharacterId?: string;
    /** Array of inventory items belonging to the character. */
    Inventory?: ItemInstance[];
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId?: string;
    /** Array of virtual currency balance(s) belonging to the character. */
    VirtualCurrency?: { [key: string]: number };
    /** Array of remaining times and timestamps for virtual currencies. */
    VirtualCurrencyRechargeTimes?: {
      [key: string]: VirtualCurrencyRechargeTime;
    };
  }

  interface GetCharacterLeaderboardRequest {
    /** Optional character type on which to filter the leaderboard entries. */
    CharacterType?: string;
    /** Maximum number of entries to retrieve. */
    MaxResultsCount: number;
    /** First entry in the leaderboard to be retrieved. */
    StartPosition: number;
    /** Unique identifier for the title-specific statistic for the leaderboard. */
    StatisticName: string;
  }

  /** Note that the Position of the character in the results is for the overall leaderboard. */
  interface GetCharacterLeaderboardResult {
    /** Ordered list of leaderboard entries. */
    Leaderboard?: CharacterLeaderboardEntry[];
  }

  /**
   * Character statistics are similar to user statistics in that they are numeric values which may only be updated by a
   * server operation, in order to minimize the opportunity for unauthorized changes. In addition to being available for use
   * by the title, the statistics are used for all leaderboard operations in PlayFab.
   */
  interface GetCharacterStatisticsRequest {
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId: string;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface GetCharacterStatisticsResult {
    /** Unique identifier of the character for the statistics. */
    CharacterId?: string;
    /** Character statistics for the requested user. */
    CharacterStatistics?: { [key: string]: number };
    /** PlayFab unique identifier of the user whose character statistics are being returned. */
    PlayFabId?: string;
  }

  interface GetContentDownloadUrlRequest {
    /** HTTP method to fetch item - GET or HEAD. Use HEAD when only fetching metadata. Default is GET. */
    HttpMethod?: string;
    /** Key of the content item to fetch, usually formatted as a path, e.g. images/a.png */
    Key: string;
    /**
     * True to download through CDN. CDN provides higher download bandwidth and lower latency. However, if you want the latest,
     * non-cached version of the content during development, set this to false. Default is true.
     */
    ThruCDN?: boolean;
  }

  interface GetContentDownloadUrlResult {
    /** URL for downloading content via HTTP GET or HEAD method. The URL will expire in approximately one hour. */
    URL?: string;
  }

  interface GetFriendLeaderboardRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Indicates whether Facebook friends should be included in the response. Default is true. */
    IncludeFacebookFriends?: boolean;
    /** Indicates whether Steam service friends should be included in the response. Default is true. */
    IncludeSteamFriends?: boolean;
    /** Maximum number of entries to retrieve. */
    MaxResultsCount: number;
    /** The player whose friend leaderboard to get */
    PlayFabId: string;
    /**
     * If non-null, this determines which properties of the resulting player profiles to return. For API calls from the client,
     * only the allowed client profile properties for the title may be requested. These allowed properties are configured in
     * the Game Manager "Client Profile Options" tab in the "Settings" section.
     */
    ProfileConstraints?: PlayerProfileViewConstraints;
    /** Position in the leaderboard to start this listing (defaults to the first entry). */
    StartPosition: number;
    /** Statistic used to rank friends for this leaderboard. */
    StatisticName: string;
    /** The version of the leaderboard to get. */
    Version?: number;
    /** Xbox token if Xbox friends should be included. Requires Xbox be configured on PlayFab. */
    XboxToken?: string;
  }

  interface GetFriendsListRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Indicates whether Facebook friends should be included in the response. Default is true. */
    IncludeFacebookFriends?: boolean;
    /** Indicates whether Steam service friends should be included in the response. Default is true. */
    IncludeSteamFriends?: boolean;
    /** PlayFab identifier of the player whose friend list to get. */
    PlayFabId: string;
    /**
     * If non-null, this determines which properties of the resulting player profiles to return. For API calls from the client,
     * only the allowed client profile properties for the title may be requested. These allowed properties are configured in
     * the Game Manager "Client Profile Options" tab in the "Settings" section.
     */
    ProfileConstraints?: PlayerProfileViewConstraints;
    /** Xbox token if Xbox friends should be included. Requires Xbox be configured on PlayFab. */
    XboxToken?: string;
  }

  /**
   * If any additional services are queried for the user's friends, those friends who also have a PlayFab account registered
   * for the title will be returned in the results. For Facebook, user has to have logged into the title's Facebook app
   * recently, and only friends who also plays this game will be included. For Xbox Live, user has to have logged into the
   * Xbox Live recently, and only friends who also play this game will be included.
   */
  interface GetFriendsListResult {
    /** Array of friends found. */
    Friends?: FriendInfo[];
  }

  interface GetLeaderboardAroundCharacterRequest {
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId: string;
    /** Optional character type on which to filter the leaderboard entries. */
    CharacterType?: string;
    /** Maximum number of entries to retrieve. */
    MaxResultsCount: number;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
    /** Unique identifier for the title-specific statistic for the leaderboard. */
    StatisticName: string;
  }

  /**
   * Note: When calling 'GetLeaderboardAround...' APIs, the position of the character defaults to 0 when the character does
   * not have the corresponding statistic.
   */
  interface GetLeaderboardAroundCharacterResult {
    /** Ordered list of leaderboard entries. */
    Leaderboard?: CharacterLeaderboardEntry[];
  }

  interface GetLeaderboardAroundUserRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Maximum number of entries to retrieve. */
    MaxResultsCount: number;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
    /**
     * If non-null, this determines which properties of the resulting player profiles to return. For API calls from the client,
     * only the allowed client profile properties for the title may be requested. These allowed properties are configured in
     * the Game Manager "Client Profile Options" tab in the "Settings" section.
     */
    ProfileConstraints?: PlayerProfileViewConstraints;
    /** Unique identifier for the title-specific statistic for the leaderboard. */
    StatisticName: string;
    /** The version of the leaderboard to get. */
    Version?: number;
  }

  /**
   * Note: When calling 'GetLeaderboardAround...' APIs, the position of the user defaults to 0 when the user does not have
   * the corresponding statistic.
   */
  interface GetLeaderboardAroundUserResult {
    /** Ordered listing of users and their positions in the requested leaderboard. */
    Leaderboard?: PlayerLeaderboardEntry[];
    /** The time the next scheduled reset will occur. Null if the leaderboard does not reset on a schedule. */
    NextReset?: string;
    /** The version of the leaderboard returned. */
    Version: number;
  }

  interface GetLeaderboardForUsersCharactersRequest {
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
    /** Unique identifier for the title-specific statistic for the leaderboard. */
    StatisticName: string;
  }

  /**
   * NOTE: The position of the character in the results is relative to the other characters for that specific user. This mean
   * the values will always be between 0 and one less than the number of characters returned regardless of the size of the
   * actual leaderboard.
   */
  interface GetLeaderboardForUsersCharactersResult {
    /** Ordered list of leaderboard entries. */
    Leaderboard?: CharacterLeaderboardEntry[];
  }

  interface GetLeaderboardRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Maximum number of entries to retrieve. */
    MaxResultsCount: number;
    /**
     * If non-null, this determines which properties of the resulting player profiles to return. For API calls from the client,
     * only the allowed client profile properties for the title may be requested. These allowed properties are configured in
     * the Game Manager "Client Profile Options" tab in the "Settings" section.
     */
    ProfileConstraints?: PlayerProfileViewConstraints;
    /** First entry in the leaderboard to be retrieved. */
    StartPosition: number;
    /** Unique identifier for the title-specific statistic for the leaderboard. */
    StatisticName: string;
    /** The version of the leaderboard to get. */
    Version?: number;
  }

  /** Note that the Position of the user in the results is for the overall leaderboard. */
  interface GetLeaderboardResult {
    /** Ordered listing of users and their positions in the requested leaderboard. */
    Leaderboard?: PlayerLeaderboardEntry[];
    /** The time the next scheduled reset will occur. Null if the leaderboard does not reset on a schedule. */
    NextReset?: string;
    /** The version of the leaderboard returned. */
    Version: number;
  }

  interface GetPlayerCombinedInfoRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Flags for which pieces of info to return for the user. */
    InfoRequestParameters: GetPlayerCombinedInfoRequestParams;
    /** PlayFabId of the user whose data will be returned */
    PlayFabId: string;
  }

  interface GetPlayerCombinedInfoRequestParams {
    /** Whether to get character inventories. Defaults to false. */
    GetCharacterInventories: boolean;
    /** Whether to get the list of characters. Defaults to false. */
    GetCharacterList: boolean;
    /** Whether to get player profile. Defaults to false. Has no effect for a new player. */
    GetPlayerProfile: boolean;
    /** Whether to get player statistics. Defaults to false. */
    GetPlayerStatistics: boolean;
    /** Whether to get title data. Defaults to false. */
    GetTitleData: boolean;
    /** Whether to get the player's account Info. Defaults to false */
    GetUserAccountInfo: boolean;
    /** Whether to get the player's custom data. Defaults to false */
    GetUserData: boolean;
    /** Whether to get the player's inventory. Defaults to false */
    GetUserInventory: boolean;
    /** Whether to get the player's read only data. Defaults to false */
    GetUserReadOnlyData: boolean;
    /** Whether to get the player's virtual currency balances. Defaults to false */
    GetUserVirtualCurrency: boolean;
    /** Specific statistics to retrieve. Leave null to get all keys. Has no effect if GetPlayerStatistics is false */
    PlayerStatisticNames?: string[];
    /** Specifies the properties to return from the player profile. Defaults to returning the player's display name. */
    ProfileConstraints?: PlayerProfileViewConstraints;
    /** Specific keys to search for in the custom data. Leave null to get all keys. Has no effect if GetTitleData is false */
    TitleDataKeys?: string[];
    /** Specific keys to search for in the custom data. Leave null to get all keys. Has no effect if GetUserData is false */
    UserDataKeys?: string[];
    /**
     * Specific keys to search for in the custom data. Leave null to get all keys. Has no effect if GetUserReadOnlyData is
     * false
     */
    UserReadOnlyDataKeys?: string[];
  }

  interface GetPlayerCombinedInfoResult {
    /** Results for requested info. */
    InfoResultPayload?: GetPlayerCombinedInfoResultPayload;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId?: string;
  }

  interface GetPlayerCombinedInfoResultPayload {
    /** Account information for the user. This is always retrieved. */
    AccountInfo?: UserAccountInfo;
    /** Inventories for each character for the user. */
    CharacterInventories?: CharacterInventory[];
    /** List of characters for the user. */
    CharacterList?: CharacterResult[];
    /**
     * The profile of the players. This profile is not guaranteed to be up-to-date. For a new player, this profile will not
     * exist.
     */
    PlayerProfile?: PlayerProfileModel;
    /** List of statistics for this player. */
    PlayerStatistics?: StatisticValue[];
    /** Title data for this title. */
    TitleData?: { [key: string]: string | null };
    /** User specific custom data. */
    UserData?: { [key: string]: UserDataRecord };
    /** The version of the UserData that was returned. */
    UserDataVersion: number;
    /** Array of inventory items in the user's current inventory. */
    UserInventory?: ItemInstance[];
    /** User specific read-only data. */
    UserReadOnlyData?: { [key: string]: UserDataRecord };
    /** The version of the Read-Only UserData that was returned. */
    UserReadOnlyDataVersion: number;
    /** Dictionary of virtual currency balance(s) belonging to the user. */
    UserVirtualCurrency?: { [key: string]: number };
    /** Dictionary of remaining times and timestamps for virtual currencies. */
    UserVirtualCurrencyRechargeTimes?: {
      [key: string]: VirtualCurrencyRechargeTime;
    };
  }

  /**
   * This API allows for access to details regarding a user in the PlayFab service, usually for purposes of customer support.
   * Note that data returned may be Personally Identifying Information (PII), such as email address, and so care should be
   * taken in how this data is stored and managed. Since this call will always return the relevant information for users who
   * have accessed the title, the recommendation is to not store this data locally.
   */
  interface GetPlayerProfileRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
    /**
     * If non-null, this determines which properties of the resulting player profiles to return. For API calls from the client,
     * only the allowed client profile properties for the title may be requested. These allowed properties are configured in
     * the Game Manager "Client Profile Options" tab in the "Settings" section.
     */
    ProfileConstraints?: Partial<PlayerProfileViewConstraints>;
  }

  interface GetPlayerProfileResult {
    /**
     * The profile of the player. This profile is not guaranteed to be up-to-date. For a new player, this profile will not
     * exist.
     */
    PlayerProfile?: PlayerProfileModel;
  }

  interface GetPlayerSegmentsResult {
    /** Array of segments the requested player currently belongs to. */
    Segments?: GetSegmentResult[];
  }

  /**
   * Initial request must contain at least a Segment ID. Subsequent requests must contain the Segment ID as well as the
   * Continuation Token. Failure to send the Continuation Token will result in a new player segment list being generated.
   * Each time the Continuation Token is passed in the length of the Total Seconds to Live is refreshed. If too much time
   * passes between requests to the point that a subsequent request is past the Total Seconds to Live an error will be
   * returned and paging will be terminated. This API is resource intensive and should not be used in scenarios which might
   * generate high request volumes. Only one request to this API at a time should be made per title. Concurrent requests to
   * the API may be rejected with the APIConcurrentRequestLimitExceeded error.
   */
  interface GetPlayersInSegmentRequest {
    /** Continuation token if retrieving subsequent pages of results. */
    ContinuationToken?: string;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Maximum number of profiles to load. Default is 1,000. Maximum is 10,000. */
    MaxBatchSize?: number;
    /**
     * Number of seconds to keep the continuation token active. After token expiration it is not possible to continue paging
     * results. Default is 300 (5 minutes). Maximum is 1,800 (30 minutes).
     */
    SecondsToLive?: number;
    /** Unique identifier for this segment. */
    SegmentId: string;
  }

  interface GetPlayersInSegmentResult {
    /** Continuation token to use to retrieve subsequent pages of results. If token returns null there are no more results. */
    ContinuationToken?: string;
    /** Array of player profiles in this segment. */
    PlayerProfiles?: PlayerProfile[];
    /** Count of profiles matching this segment. */
    ProfilesInSegment: number;
  }

  interface GetPlayersSegmentsRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface UpdateUserStatisticsRequest {
    PlayFabId: string;
    UserStatistics: UserStatistics;
  }

  interface GetUserStatisticsRequest {
    PlayFabId: string;
    StatisticNames?: string[];
  }
  interface GetUserStatisticsResult {
    UserStatistics: UserStatistics;
  }

  interface UpdatePlayerStatisticsRequest {
    PlayFabId: string;
    UserStatistics: StatisticUpdate[];
  }
  interface UpdatePlayerStatisticsResult {}

  interface GetPlayerStatisticsRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** user for whom statistics are being requested */
    PlayFabId: string;
    /** statistics to return */
    StatisticNames?: string[];
    /**
     * statistics to return, if StatisticNames is not set (only statistics which have a version matching that provided will be
     * returned)
     */
    StatisticNameVersions?: StatisticNameVersion[];
  }

  /** In addition to being available for use by the title, the statistics are used for all leaderboard operations in PlayFab. */
  interface GetPlayerStatisticsResult {
    /** PlayFab unique identifier of the user whose statistics are being returned */
    PlayFabId?: string;
    /** User statistics for the requested user. */
    Statistics?: StatisticValue[];
  }

  interface GetPlayerStatisticVersionsRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** unique name of the statistic */
    StatisticName?: string;
  }

  interface GetPlayerStatisticVersionsResult {
    /** version change history of the statistic */
    StatisticVersions?: PlayerStatisticVersion[];
  }

  /**
   * This API will return a list of canonical tags which includes both namespace and tag's name. If namespace is not
   * provided, the result is a list of all canonical tags. TagName can be used for segmentation and Namespace is limited to
   * 128 characters.
   */
  interface GetPlayerTagsRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Optional namespace to filter results by */
    Namespace?: string;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface GetPlayerTagsResult {
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
    /** Canonical tags (including namespace and tag's name) for the requested user */
    Tags: string[];
  }

  interface GetPlayFabIDsFromFacebookIDsRequest {
    /** Array of unique Facebook identifiers for which the title needs to get PlayFab identifiers. */
    FacebookIDs: string[];
  }

  /** For Facebook identifiers which have not been linked to PlayFab accounts, null will be returned. */
  interface GetPlayFabIDsFromFacebookIDsResult {
    /** Mapping of Facebook identifiers to PlayFab identifiers. */
    Data?: FacebookPlayFabIdPair[];
  }

  interface GetPlayFabIDsFromFacebookInstantGamesIdsRequest {
    /** Array of unique Facebook Instant Games identifiers for which the title needs to get PlayFab identifiers. */
    FacebookInstantGamesIds: string[];
  }

  /** For Facebook Instant Games identifiers which have not been linked to PlayFab accounts, null will be returned. */
  interface GetPlayFabIDsFromFacebookInstantGamesIdsResult {
    /** Mapping of Facebook Instant Games identifiers to PlayFab identifiers. */
    Data?: FacebookInstantGamesPlayFabIdPair[];
  }

  interface GetPlayFabIDsFromGenericIDsRequest {
    /**
     * Array of unique generic service identifiers for which the title needs to get PlayFab identifiers. Currently limited to a
     * maximum of 10 in a single request.
     */
    GenericIDs: GenericServiceId[];
  }

  /** For generic service identifiers which have not been linked to PlayFab accounts, null will be returned. */
  interface GetPlayFabIDsFromGenericIDsResult {
    /** Mapping of generic service identifiers to PlayFab identifiers. */
    Data?: GenericPlayFabIdPair[];
  }

  interface GetPlayFabIDsFromNintendoSwitchDeviceIdsRequest {
    /** Array of unique Nintendo Switch Device identifiers for which the title needs to get PlayFab identifiers. */
    NintendoSwitchDeviceIds: string[];
  }

  /** For Nintendo Switch Device identifiers which have not been linked to PlayFab accounts, null will be returned. */
  interface GetPlayFabIDsFromNintendoSwitchDeviceIdsResult {
    /** Mapping of Nintendo Switch Device identifiers to PlayFab identifiers. */
    Data?: NintendoSwitchPlayFabIdPair[];
  }

  interface GetPlayFabIDsFromPSNAccountIDsRequest {
    /** Id of the PSN issuer environment. If null, defaults to production environment. */
    IssuerId?: number;
    /** Array of unique PlayStation Network identifiers for which the title needs to get PlayFab identifiers. */
    PSNAccountIDs: string[];
  }

  /** For PlayStation Network identifiers which have not been linked to PlayFab accounts, null will be returned. */
  interface GetPlayFabIDsFromPSNAccountIDsResult {
    /** Mapping of PlayStation Network identifiers to PlayFab identifiers. */
    Data?: PSNAccountPlayFabIdPair[];
  }

  interface GetPlayFabIDsFromSteamIDsRequest {
    /** Array of unique Steam identifiers (Steam profile IDs) for which the title needs to get PlayFab identifiers. */
    SteamStringIDs?: string[];
  }

  /** For Steam identifiers which have not been linked to PlayFab accounts, null will be returned. */
  interface GetPlayFabIDsFromSteamIDsResult {
    /** Mapping of Steam identifiers to PlayFab identifiers. */
    Data?: SteamPlayFabIdPair[];
  }

  interface GetPlayFabIDsFromXboxLiveIDsRequest {
    /** The ID of Xbox Live sandbox. */
    Sandbox?: string;
    /** Array of unique Xbox Live account identifiers for which the title needs to get PlayFab identifiers. */
    XboxLiveAccountIDs: string[];
  }

  /** For XboxLive identifiers which have not been linked to PlayFab accounts, null will be returned. */
  interface GetPlayFabIDsFromXboxLiveIDsResult {
    /** Mapping of PlayStation Network identifiers to PlayFab identifiers. */
    Data?: XboxLiveAccountPlayFabIdPair[];
  }

  /**
   * This API is designed to return publisher-specific values which can be read, but not written to, by the client. This data
   * is shared across all titles assigned to a particular publisher, and can be used for cross-game coordination. Only titles
   * assigned to a publisher can use this API. For more information email helloplayfab@microsoft.com. Note that there may up
   * to a minute delay in between updating title data and this API call returning the newest value.
   */
  interface GetPublisherDataRequest {
    /** array of keys to get back data from the Publisher data blob, set by the admin tools */
    Keys: string[];
  }

  interface GetPublisherDataResult {
    /** a dictionary object of key / value pairs */
    Data?: { [key: string]: string | null };
  }

  interface GetRandomResultTablesRequest {
    /**
     * Specifies the catalog version that should be used to retrieve the Random Result Tables. If unspecified, uses
     * default/primary catalog.
     */
    CatalogVersion?: string;
    /** The unique identifier of the Random Result Table to use. */
    TableIDs: string[];
  }

  /**
   * Note that if a specified Random Result Table contains no entries, or does not exist in the catalog, an InvalidDropTable
   * error will be returned.
   */
  interface GetRandomResultTablesResult {
    /** array of random result tables currently available */
    Tables?: { [key: string]: RandomResultTableListing };
  }

  interface GetSegmentResult {
    /** Identifier of the segments AB Test, if it is attached to one. */
    ABTestParent?: string;
    /** Unique identifier for this segment. */
    Id: string;
    /** Segment name. */
    Name?: string;
  }

  interface GetServerCustomIDsFromPlayFabIDsRequest {
    /**
     * Array of unique PlayFab player identifiers for which the title needs to get server custom identifiers. Cannot contain
     * more than 25 identifiers.
     */
    PlayFabIDs: string[];
  }

  /** For a PlayFab account that isn't associated with a server custom identity, ServerCustomId will be null. */
  interface GetServerCustomIDsFromPlayFabIDsResult {
    /** Mapping of server custom player identifiers to PlayFab identifiers. */
    Data?: ServerCustomIDPlayFabIDPair[];
  }

  interface GetSharedGroupDataRequest {
    /** If true, return the list of all members of the shared group. */
    GetMembers?: boolean;
    /**
     * Specific keys to retrieve from the shared group (if not specified, all keys will be returned, while an empty array
     * indicates that no keys should be returned).
     */
    Keys?: string[];
    /** Unique identifier for the shared group. */
    SharedGroupId: string;
  }

  interface GetSharedGroupDataResult {
    /** Data for the requested keys. */
    Data?: { [key: string]: SharedGroupDataRecord };
    /** List of PlayFabId identifiers for the members of this group, if requested. */
    Members?: string[];
  }

  interface GetStoreItemsResult {
    /** The base catalog that this store is a part of. */
    CatalogVersion?: string;
    /** Additional data about the store. */
    MarketingData?: StoreMarketingModel;
    /** How the store was last updated (Admin or a third party). */
    Source?: SourceType;
    /** Array of items which can be purchased from this store. */
    Store?: StoreItem[];
    /** The ID of this store. */
    StoreId?: string;
  }

  /**
   * A store contains an array of references to items defined in one or more catalog versions of the game, along with the
   * prices for the item, in both real world and virtual currencies. These prices act as an override to any prices defined in
   * the catalog. In this way, the base definitions of the items may be defined in the catalog, with all associated
   * properties, while the pricing can be set for each store, as needed. This allows for subsets of goods to be defined for
   * different purposes (in order to simplify showing some, but not all catalog items to users, based upon different
   * characteristics), along with unique prices. Note that all prices defined in the catalog and store definitions for the
   * item are considered valid, and that a compromised client can be made to send a request for an item based upon any of
   * these definitions. If no price is specified in the store for an item, the price set in the catalog should be displayed
   * to the user.
   */
  interface GetStoreItemsServerRequest {
    /** Catalog version to store items from. Use default catalog version if null */
    CatalogVersion?: string;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /**
     * Optional identifier for the player to use in requesting the store information - if used, segment overrides will be
     * applied
     */
    PlayFabId?: string;
    /** Unqiue identifier for the store which is being requested */
    StoreId: string;
  }

  /**
   * This query retrieves the current time from one of the servers in PlayFab. Please note that due to clock drift between
   * servers, there is a potential variance of up to 5 seconds.
   */
  interface GetTimeRequest {}

  /** Time is always returned as Coordinated Universal Time (UTC). */
  interface GetTimeResult {
    /** Current server time when the request was received, in UTC */
    Time: string;
  }

  /**
   * This API is designed to return title specific values which can be read, but not written to, by the client. For example,
   * a developer could choose to store values which modify the user experience, such as enemy spawn rates, weapon strengths,
   * movement speeds, etc. This allows a developer to update the title without the need to create, test, and ship a new
   * build. If an override label is specified in the request, the overrides are applied automatically and returned with the
   * title data. Note that there may up to a minute delay in between updating title data and this API call returning the
   * newest value.
   */
  interface GetTitleDataRequest {
    /** Specific keys to search for in the title data (leave null to get all keys) */
    Keys?: string[];
    /**
     * Optional field that specifies the name of an override. This value is ignored when used by the game client; otherwise,
     * the overrides are applied automatically to the title data.
     */
    OverrideLabel?: string;
  }

  interface GetTitleDataResult {
    /** a dictionary object of key / value pairs */
    Data?: { [key: string]: string | null };
  }

  interface GetTitleNewsRequest {
    /** Limits the results to the last n entries. Defaults to 10 if not set. */
    Count?: number;
  }

  interface GetTitleNewsResult {
    /** Array of localized news items. */
    News?: TitleNewsItem[];
  }

  /**
   * This API allows for access to details regarding a user in the PlayFab service, usually for purposes of customer support.
   * Note that data returned may be Personally Identifying Information (PII), such as email address, and so care should be
   * taken in how this data is stored and managed. Since this call will always return the relevant information for users who
   * have accessed the title, the recommendation is to not store this data locally.
   */
  interface GetUserAccountInfoRequest {
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface GetUserAccountInfoResult {
    /** Account details for the user whose information was requested. */
    UserInfo?: UserAccountInfo;
  }

  /** Get all bans for a user, including inactive and expired bans. */
  interface GetUserBansRequest {
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface GetUserBansResult {
    /** Information about the bans */
    BanData?: BanInfo[];
  }

  /**
   * Data is stored as JSON key-value pairs. If the Keys parameter is provided, the data object returned will only contain
   * the data specific to the indicated Keys. Otherwise, the full set of custom user data will be returned.
   */
  interface GetUserDataRequest {
    /**
     * The version that currently exists according to the caller. The call will return the data for all of the keys if the
     * version in the system is greater than this.
     */
    IfChangedFromDataVersion?: number;
    /** Specific keys to search for in the custom user data. */
    Keys?: string[];
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface GetUserDataResult {
    /** User specific data for this title. */
    Data?: { [key: string]: UserDataRecord };
    /**
     * Indicates the current version of the data that has been set. This is incremented with every set call for that type of
     * data (read-only, internal, etc). This version can be provided in Get calls to find updated data.
     */
    DataVersion: number;
    /** PlayFab unique identifier of the user whose custom data is being returned. */
    PlayFabId?: string;
  }

  /**
   * All items currently in the user inventory will be returned, irrespective of how they were acquired (via purchasing,
   * grants, coupons, etc.). Items that are expired, fully consumed, or are no longer valid are not considered to be in the
   * user's current inventory, and so will not be not included.
   */
  interface GetUserInventoryRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface GetUserInventoryResult {
    /** Array of inventory items belonging to the user. */
    Inventory?: ItemInstance[];
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId?: string;
    /** Array of virtual currency balance(s) belonging to the user. */
    VirtualCurrency?: { [key: string]: number };
    /** Array of remaining times and timestamps for virtual currencies. */
    VirtualCurrencyRechargeTimes?: {
      [key: string]: VirtualCurrencyRechargeTime;
    };
  }

  /** Grants a character to the user of the type and name specified in the request. */
  interface GrantCharacterToUserRequest {
    /** Non-unique display name of the character being granted (1-40 characters in length). */
    CharacterName: string;
    /** Type of the character being granted; statistics can be sliced based on this value. */
    CharacterType: string;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface GrantCharacterToUserResult {
    /** Unique identifier tagged to this character. */
    CharacterId?: string;
  }

  /**
   * Result of granting an item to a user. Note, to retrieve additional information for an item such as Tags, Description
   * that are the same across all instances of the item, a call to GetCatalogItems is required. The ItemID of can be matched
   * to a catalog entry, which contains the additional information. Also note that Custom Data is only set when the User's
   * specific instance has updated the CustomData via a call to UpdateUserInventoryItemCustomData. Other fields such as
   * UnitPrice and UnitCurrency are only set when the item was granted via a purchase.
   */
  interface GrantedItemInstance {
    /** Game specific comment associated with this instance when it was added to the user inventory. */
    Annotation?: string;
    /** Array of unique items that were awarded when this catalog item was purchased. */
    BundleContents?: string[];
    /**
     * Unique identifier for the parent inventory item, as defined in the catalog, for object which were added from a bundle or
     * container.
     */
    BundleParent?: string;
    /** Catalog version for the inventory item, when this instance was created. */
    CatalogVersion?: string;
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId?: string;
    /**
     * A set of custom key-value pairs on the instance of the inventory item, which is not to be confused with the catalog
     * item's custom data.
     */
    CustomData?: { [key: string]: string | null };
    /** CatalogItem.DisplayName at the time this item was purchased. */
    DisplayName?: string;
    /** Timestamp for when this instance will expire. */
    Expiration?: string;
    /** Class name for the inventory item, as defined in the catalog. */
    ItemClass?: string;
    /** Unique identifier for the inventory item, as defined in the catalog. */
    ItemId?: string;
    /** Unique item identifier for this specific instance of the item. */
    ItemInstanceId?: string;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId?: string;
    /** Timestamp for when this instance was purchased. */
    PurchaseDate?: string;
    /** Total number of remaining uses, if this is a consumable item. */
    RemainingUses?: number;
    /** Result of this operation. */
    Result: boolean;
    /** Currency type for the cost of the catalog item. Not available when granting items. */
    UnitCurrency?: string;
    /** Cost of the catalog item in the given currency. Not available when granting items. */
    UnitPrice: number;
    /** The number of uses that were added or removed to this item in this call. */
    UsesIncrementedBy?: number;
  }

  /**
   * This function directly adds inventory items to the character's inventories. As a result of this operations, the user
   * will not be charged any transaction fee, regardless of the inventory item catalog definition. Please note that the
   * processing time for inventory grants and purchases increases fractionally the more items are in the inventory, and the
   * more items are in the grant/purchase operation.
   */
  interface GrantItemsToCharacterRequest {
    /** String detailing any additional information concerning this operation. */
    Annotation?: string;
    /** Catalog version from which items are to be granted. */
    CatalogVersion?: string;
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId: string;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Array of itemIds to grant to the user. */
    ItemIds?: string[];
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface GrantItemsToCharacterResult {
    /** Array of items granted to users. */
    ItemGrantResults?: GrantedItemInstance[];
  }

  /**
   * This function directly adds inventory items to the user's inventories. As a result of this operations, the user will not
   * be charged any transaction fee, regardless of the inventory item catalog definition. Please note that the processing
   * time for inventory grants and purchases increases fractionally the more items are in the inventory, and the more items
   * are in the grant/purchase operation.
   */
  interface GrantItemsToUserRequest {
    /** String detailing any additional information concerning this operation. */
    Annotation?: string;
    /** Catalog version from which items are to be granted. */
    CatalogVersion?: string;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Array of itemIds to grant to the user. */
    ItemIds: string[];
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  /** Please note that the order of the items in the response may not match the order of items in the request. */
  interface GrantItemsToUserResult {
    /** Array of items granted to users. */
    ItemGrantResults?: GrantedItemInstance[];
  }

  /**
   * This function directly adds inventory items to user inventories. As a result of this operations, the user will not be
   * charged any transaction fee, regardless of the inventory item catalog definition. Please note that the processing time
   * for inventory grants and purchases increases fractionally the more items are in the inventory, and the more items are in
   * the grant/purchase operation.
   */
  interface GrantItemsToUsersRequest {
    /** Catalog version from which items are to be granted. */
    CatalogVersion?: string;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Array of items to grant and the users to whom the items are to be granted. */
    ItemGrants: ItemGrant[];
  }

  /** Please note that the order of the items in the response may not match the order of items in the request. */
  interface GrantItemsToUsersResult {
    /** Array of items granted to users. */
    ItemGrantResults?: GrantedItemInstance[];
  }

  interface ItemGrant {
    /** String detailing any additional information concerning this operation. */
    Annotation?: string;
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId?: string;
    /**
     * Key-value pairs to be written to the custom data. Note that keys are trimmed of whitespace, are limited in size, and may
     * not begin with a '!' character or be null.
     */
    Data?: { [key: string]: string | null };
    /** Unique identifier of the catalog item to be granted to the user. */
    ItemId: string;
    /**
     * Optional list of Data-keys to remove from UserData. Some SDKs cannot insert null-values into Data due to language
     * constraints. Use this to delete the keys directly.
     */
    KeysToRemove?: string[];
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  /**
   * A unique instance of an item in a user's inventory. Note, to retrieve additional information for an item such as Tags,
   * Description that are the same across all instances of the item, a call to GetCatalogItems is required. The ItemID of can
   * be matched to a catalog entry, which contains the additional information. Also note that Custom Data is only set when
   * the User's specific instance has updated the CustomData via a call to UpdateUserInventoryItemCustomData. Other fields
   * such as UnitPrice and UnitCurrency are only set when the item was granted via a purchase.
   */
  interface ItemInstance {
    /** Game specific comment associated with this instance when it was added to the user inventory. */
    Annotation?: string;
    /** Array of unique items that were awarded when this catalog item was purchased. */
    BundleContents?: string[];
    /**
     * Unique identifier for the parent inventory item, as defined in the catalog, for object which were added from a bundle or
     * container.
     */
    BundleParent?: string;
    /** Catalog version for the inventory item, when this instance was created. */
    CatalogVersion?: string;
    /**
     * A set of custom key-value pairs on the instance of the inventory item, which is not to be confused with the catalog
     * item's custom data.
     */
    CustomData?: { [key: string]: string | null };
    /** CatalogItem.DisplayName at the time this item was purchased. */
    DisplayName?: string;
    /** Timestamp for when this instance will expire. */
    Expiration?: string;
    /** Class name for the inventory item, as defined in the catalog. */
    ItemClass?: string;
    /** Unique identifier for the inventory item, as defined in the catalog. */
    ItemId?: string;
    /** Unique item identifier for this specific instance of the item. */
    ItemInstanceId?: string;
    /** Timestamp for when this instance was purchased. */
    PurchaseDate?: string;
    /** Total number of remaining uses, if this is a consumable item. */
    RemainingUses?: number;
    /** Currency type for the cost of the catalog item. Not available when granting items. */
    UnitCurrency?: string;
    /** Cost of the catalog item in the given currency. Not available when granting items. */
    UnitPrice: number;
    /** The number of uses that were added or removed to this item in this call. */
    UsesIncrementedBy?: number;
  }

  interface LinkedPlatformAccountModel {
    /** Linked account email of the user on the platform, if available */
    Email?: string;
    /** Authentication platform */
    Platform?: LoginIdentityProvider;
    /** Unique account identifier of the user on the platform */
    PlatformUserId?: string;
    /** Linked account username of the user on the platform, if available */
    Username?: string;
  }

  interface LinkPSNAccountRequest {
    /** Authentication code provided by the PlayStation Network. */
    AuthCode: string;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** If another user is already linked to the account, unlink the other user and re-link. */
    ForceLink?: boolean;
    /** Id of the PSN issuer environment. If null, defaults to production environment. */
    IssuerId?: number;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
    /** Redirect URI supplied to PSN when requesting an auth code */
    RedirectUri: string;
  }

  interface LinkPSNAccountResult {}

  interface LinkServerCustomIdRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** If another user is already linked to the custom ID, unlink the other user and re-link. */
    ForceLink?: boolean;
    /** Unique PlayFab identifier. */
    PlayFabId: string;
    /** Unique server custom identifier for this player. */
    ServerCustomId: string;
  }

  interface LinkServerCustomIdResult {}

  interface LinkXboxAccountRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** If another user is already linked to the account, unlink the other user and re-link. */
    ForceLink?: boolean;
    /** Unique PlayFab identifier for a user, or null if no PlayFab account is linked to the Xbox Live identifier. */
    PlayFabId: string;
    /** Token provided by the Xbox Live SDK/XDK method GetTokenAndSignatureAsync("POST", "https://playfabapi.com/", ""). */
    XboxToken: string;
  }

  interface LinkXboxAccountResult {}

  /** Returns a list of every character that currently belongs to a user. */
  interface ListUsersCharactersRequest {
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface ListUsersCharactersResult {
    /** The requested list of characters. */
    Characters?: CharacterResult[];
  }

  /** Contains the localized push notification content. */
  interface LocalizedPushNotificationProperties {
    /** Message of the localized push notification template. */
    Message?: string;
    /** Subject of the localized push notification template. */
    Subject?: string;
  }

  interface LocationModel {
    /** City name. */
    City?: string;
    /** The two-character continent code for this location */
    ContinentCode?: ContinentCode;
    /** The two-character ISO 3166-1 country code for the country associated with the location */
    CountryCode?: CountryCode;
    /** Latitude coordinate of the geographic location. */
    Latitude?: number;
    /** Longitude coordinate of the geographic location. */
    Longitude?: number;
  }

  type LoginIdentityProvider =
    | "Unknown"
    | "PlayFab"
    | "Custom"
    | "GameCenter"
    | "GooglePlay"
    | "Steam"
    | "XBoxLive"
    | "PSN"
    | "Kongregate"
    | "Facebook"
    | "IOSDevice"
    | "AndroidDevice"
    | "Twitch"
    | "WindowsHello"
    | "GameServer"
    | "CustomServer"
    | "NintendoSwitch"
    | "FacebookInstantGames"
    | "OpenIdConnect"
    | "Apple"
    | "NintendoSwitchAccount";

  interface LoginWithServerCustomIdRequest {
    /** Automatically create a PlayFab account if one is not currently linked to this ID. */
    CreateAccount?: boolean;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Flags for which pieces of info to return for the user. */
    InfoRequestParameters?: GetPlayerCombinedInfoRequestParams;
    /** Player secret that is used to verify API request signatures (Enterprise Only). */
    PlayerSecret?: string;
    /** The backend server identifier for this player. */
    ServerCustomId?: string;
  }

  /**
   * If this is the first time a user has signed in with the Steam ID and CreateAccount is set to true, a new PlayFab account
   * will be created and linked to the Steam account. In this case, no email or username will be associated with the PlayFab
   * account. Otherwise, if no PlayFab account is linked to the Steam account, an error indicating this will be returned, so
   * that the title can guide the user through creation of a PlayFab account. Steam users that are not logged into the Steam
   * Client app will only have their Steam username synced, other data, such as currency and country will not be available
   * until they login while the Client is open.
   */
  interface LoginWithSteamIdRequest {
    /** Automatically create a PlayFab account if one is not currently linked to this ID. */
    CreateAccount?: boolean;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Flags for which pieces of info to return for the user. */
    InfoRequestParameters?: GetPlayerCombinedInfoRequestParams;
    /** Unique Steam identifier for a user */
    SteamId: string;
  }

  /**
   * If this is the first time a user has signed in with the Xbox ID and CreateAccount is set to true, a new PlayFab account
   * will be created and linked to the Xbox Live account. In this case, no email or username will be associated with the
   * PlayFab account. Otherwise, if no PlayFab account is linked to the Xbox Live account, an error indicating this will be
   * returned, so that the title can guide the user through creation of a PlayFab account.
   */
  interface LoginWithXboxIdRequest {
    /** Automatically create a PlayFab account if one is not currently linked to this ID. */
    CreateAccount?: boolean;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Flags for which pieces of info to return for the user. */
    InfoRequestParameters?: GetPlayerCombinedInfoRequestParams;
    /** The id of Xbox Live sandbox. */
    Sandbox: string;
    /** Unique Xbox identifier for a user */
    XboxId: string;
  }

  /**
   * If this is the first time a user has signed in with the Xbox Live account and CreateAccount is set to true, a new
   * PlayFab account will be created and linked to the Xbox Live account. In this case, no email or username will be
   * associated with the PlayFab account. Otherwise, if no PlayFab account is linked to the Xbox Live account, an error
   * indicating this will be returned, so that the title can guide the user through creation of a PlayFab account.
   */
  interface LoginWithXboxRequest {
    /** Automatically create a PlayFab account if one is not currently linked to this ID. */
    CreateAccount?: boolean;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Flags for which pieces of info to return for the user. */
    InfoRequestParameters?: GetPlayerCombinedInfoRequestParams;
    /** Token provided by the Xbox Live SDK/XDK method GetTokenAndSignatureAsync("POST", "https://playfabapi.com/", ""). */
    XboxToken: string;
  }

  interface LogStatement {
    /** Optional object accompanying the message as contextual information */
    Data?: any;
    /** 'Debug', 'Info', or 'Error' */
    Level?: string;
    Message?: string;
  }

  interface MembershipModel {
    /** Whether this membership is active. That is, whether the MembershipExpiration time has been reached. */
    IsActive: boolean;
    /** The time this membership expires */
    MembershipExpiration: string;
    /** The id of the membership */
    MembershipId?: string;
    /**
     * Membership expirations can be explicitly overridden (via game manager or the admin api). If this membership has been
     * overridden, this will be the new expiration time.
     */
    OverrideExpiration?: string;
    /** The list of subscriptions that this player has for this membership */
    Subscriptions?: SubscriptionModel[];
  }

  interface ModifyCharacterVirtualCurrencyResult {
    /** Balance of the virtual currency after modification. */
    Balance: number;
    /** Name of the virtual currency which was modified. */
    VirtualCurrency?: string;
  }

  /**
   * This function can both add and remove uses of an inventory item. If the number of uses drops below zero, the item will
   * be removed from active inventory.
   */
  interface ModifyItemUsesRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Unique instance identifier of the item to be modified. */
    ItemInstanceId: string;
    /** PlayFab unique identifier of the user whose item is being modified. */
    PlayFabId: string;
    /** Number of uses to add to the item. Can be negative to remove uses. */
    UsesToAdd: number;
  }

  interface ModifyItemUsesResult {
    /** Unique instance identifier of the item with uses consumed. */
    ItemInstanceId?: string;
    /** Number of uses remaining on the item. */
    RemainingUses: number;
  }

  interface ModifyUserVirtualCurrencyResult {
    /** Balance of the virtual currency after modification. */
    Balance: number;
    /**
     * Amount added or subtracted from the user's virtual currency. Maximum VC balance is Int32 (2,147,483,647). Any increase
     * over this value will be discarded.
     */
    BalanceChange: number;
    /** User currency was subtracted from. */
    PlayFabId?: string;
    /** Name of the virtual currency which was modified. */
    VirtualCurrency?: string;
  }

  /**
   * Transfers an item from a character to another character that is owned by the same user. This will remove the item from
   * the character's inventory (until and unless it is moved back), and will enable the other character to make use of the
   * item instead.
   */
  interface MoveItemToCharacterFromCharacterRequest {
    /** Unique identifier of the character that currently has the item. */
    GivingCharacterId: string;
    /** Unique PlayFab assigned instance identifier of the item */
    ItemInstanceId: string;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
    /** Unique identifier of the character that will be receiving the item. */
    ReceivingCharacterId: string;
  }

  interface MoveItemToCharacterFromCharacterResult {}

  /**
   * Transfers an item from a user to a character she owns. This will remove the item from the user's inventory (until and
   * unless it is moved back), and will enable the character to make use of the item instead.
   */
  interface MoveItemToCharacterFromUserRequest {
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId: string;
    /** Unique PlayFab assigned instance identifier of the item */
    ItemInstanceId: string;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface MoveItemToCharacterFromUserResult {}

  /**
   * Transfers an item from a character to the owning user. This will remove the item from the character's inventory (until
   * and unless it is moved back), and will enable the user to make use of the item instead.
   */
  interface MoveItemToUserFromCharacterRequest {
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId: string;
    /** Unique PlayFab assigned instance identifier of the item */
    ItemInstanceId: string;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface MoveItemToUserFromCharacterResult {}

  interface NintendoSwitchPlayFabIdPair {
    /** Unique Nintendo Switch Device identifier for a user. */
    NintendoSwitchDeviceId?: string;
    /** Unique PlayFab identifier for a user, or null if no PlayFab account is linked to the Nintendo Switch Device identifier. */
    PlayFabId?: string;
  }

  interface NotifyMatchmakerPlayerLeftRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Unique identifier of the Game Instance the user is leaving. */
    LobbyId: string;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface NotifyMatchmakerPlayerLeftResult {
    /** State of user leaving the Game Server Instance. */
    PlayerState?: PlayerConnectionState;
  }

  type PlayerConnectionState =
    | "Unassigned"
    | "Connecting"
    | "Participating"
    | "Participated";

  interface PlayerLeaderboardEntry {
    /** Title-specific display name of the user for this leaderboard entry. */
    DisplayName?: string;
    /** PlayFab unique identifier of the user for this leaderboard entry. */
    PlayFabId?: string;
    /** User's overall position in the leaderboard. */
    Position: number;
    /** The profile of the user, if requested. */
    Profile?: PlayerProfileModel;
    /** Specific value of the user's statistic. */
    StatValue: number;
  }

  interface PlayerLinkedAccount {
    /** Linked account's email */
    Email?: string;
    /** Authentication platform */
    Platform?: LoginIdentityProvider;
    /** Platform user identifier */
    PlatformUserId?: string;
    /** Linked account's username */
    Username?: string;
  }

  interface PlayerLocation {
    /** City of the player's geographic location. */
    City?: string;
    /** The two-character continent code for this location */
    ContinentCode: ContinentCode;
    /** The two-character ISO 3166-1 country code for the country associated with the location */
    CountryCode: CountryCode;
    /** Latitude coordinate of the player's geographic location. */
    Latitude?: number;
    /** Longitude coordinate of the player's geographic location. */
    Longitude?: number;
  }

  interface PlayerProfile {
    /** Array of ad campaigns player has been attributed to */
    AdCampaignAttributions?: AdCampaignAttribution[];
    /** Image URL of the player's avatar. */
    AvatarUrl?: string;
    /** Banned until UTC Date. If permanent ban this is set for 20 years after the original ban date. */
    BannedUntil?: string;
    /** Array of contact email addresses associated with the player */
    ContactEmailAddresses?: ContactEmailInfo[];
    /** Player record created */
    Created?: string;
    /** Player Display Name */
    DisplayName?: string;
    /** Last login */
    LastLogin?: string;
    /** Array of third party accounts linked to this player */
    LinkedAccounts?: PlayerLinkedAccount[];
    /** Dictionary of player's locations by type. */
    Locations?: { [key: string]: PlayerLocation };
    /** Player account origination */
    Origination?: LoginIdentityProvider;
    /** List of player variants for experimentation */
    PlayerExperimentVariants?: string[];
    /** PlayFab Player ID */
    PlayerId?: string;
    /** Array of player statistics */
    PlayerStatistics?: PlayerStatistic[];
    /** Publisher this player belongs to */
    PublisherId?: string;
    /** Array of configured push notification end points */
    PushNotificationRegistrations?: PushNotificationRegistration[];
    /** Dictionary of player's statistics using only the latest version's value */
    Statistics?: { [key: string]: number };
    /** List of player's tags for segmentation. */
    Tags?: string[];
    /** Title ID this profile applies to */
    TitleId?: string;
    /** A sum of player's total purchases in USD across all currencies. */
    TotalValueToDateInUSD?: number;
    /** Dictionary of player's total purchases by currency. */
    ValuesToDate?: { [key: string]: number };
    /** Dictionary of player's virtual currency balances */
    VirtualCurrencyBalances?: { [key: string]: number };
  }

  interface PlayerProfileModel {
    /** List of advertising campaigns the player has been attributed to */
    AdCampaignAttributions?: AdCampaignAttributionModel[];
    /** URL of the player's avatar image */
    AvatarUrl?: string;
    /** If the player is currently banned, the UTC Date when the ban expires */
    BannedUntil?: string;
    /** List of all contact email info associated with the player account */
    ContactEmailAddresses?: ContactEmailInfoModel[];
    /** Player record created */
    Created?: string;
    /** Player display name */
    DisplayName?: string;
    /**
     * List of experiment variants for the player. Note that these variants are not guaranteed to be up-to-date when returned
     * during login because the player profile is updated only after login. Instead, use the LoginResult.TreatmentAssignment
     * property during login to get the correct variants and variables.
     */
    ExperimentVariants?: string[];
    /** UTC time when the player most recently logged in to the title */
    LastLogin?: string;
    /** List of all authentication systems linked to this player account */
    LinkedAccounts?: LinkedPlatformAccountModel[];
    /** List of geographic locations from which the player has logged in to the title */
    Locations?: LocationModel[];
    /** List of memberships for the player, along with whether are expired. */
    Memberships?: MembershipModel[];
    /** Player account origination */
    Origination?: LoginIdentityProvider;
    /** PlayFab player account unique identifier */
    PlayerId?: string;
    /** Publisher this player belongs to */
    PublisherId?: string;
    /** List of configured end points registered for sending the player push notifications */
    PushNotificationRegistrations?: PushNotificationRegistrationModel[];
    /** List of leaderboard statistic values for the player */
    Statistics?: StatisticModel[];
    /** List of player's tags for segmentation */
    Tags?: TagModel[];
    /** Title ID this player profile applies to */
    TitleId?: string;
    /**
     * Sum of the player's purchases made with real-money currencies, converted to US dollars equivalent and represented as a
     * whole number of cents (1/100 USD). For example, 999 indicates nine dollars and ninety-nine cents.
     */
    TotalValueToDateInUSD?: number;
    /** List of the player's lifetime purchase totals, summed by real-money currency */
    ValuesToDate?: ValueToDateModel[];
  }

  interface PlayerProfileViewConstraints {
    /** Whether to show player's avatar URL. Defaults to false */
    ShowAvatarUrl: boolean;
    /** Whether to show the banned until time. Defaults to false */
    ShowBannedUntil: boolean;
    /** Whether to show campaign attributions. Defaults to false */
    ShowCampaignAttributions: boolean;
    /** Whether to show contact email addresses. Defaults to false */
    ShowContactEmailAddresses: boolean;
    /** Whether to show the created date. Defaults to false */
    ShowCreated: boolean;
    /** Whether to show the display name. Defaults to false */
    ShowDisplayName: boolean;
    /** Whether to show player's experiment variants. Defaults to false */
    ShowExperimentVariants: boolean;
    /** Whether to show the last login time. Defaults to false */
    ShowLastLogin: boolean;
    /** Whether to show the linked accounts. Defaults to false */
    ShowLinkedAccounts: boolean;
    /** Whether to show player's locations. Defaults to false */
    ShowLocations: boolean;
    /** Whether to show player's membership information. Defaults to false */
    ShowMemberships: boolean;
    /** Whether to show origination. Defaults to false */
    ShowOrigination: boolean;
    /** Whether to show push notification registrations. Defaults to false */
    ShowPushNotificationRegistrations: boolean;
    /** Reserved for future development */
    ShowStatistics: boolean;
    /** Whether to show tags. Defaults to false */
    ShowTags: boolean;
    /** Whether to show the total value to date in usd. Defaults to false */
    ShowTotalValueToDateInUsd: boolean;
    /** Whether to show the values to date. Defaults to false */
    ShowValuesToDate: boolean;
  }

  interface PlayerStatistic {
    /** Statistic ID */
    Id?: string;
    /** Statistic name */
    Name?: string;
    /** Current statistic value */
    StatisticValue: number;
    /** Statistic version (0 if not a versioned statistic) */
    StatisticVersion: number;
  }

  interface PlayerStatisticVersion {
    /** time when the statistic version became active */
    ActivationTime: string;
    /** time when the statistic version became inactive due to statistic version incrementing */
    DeactivationTime?: string;
    /** time at which the statistic version was scheduled to become active, based on the configured ResetInterval */
    ScheduledActivationTime?: string;
    /** time at which the statistic version was scheduled to become inactive, based on the configured ResetInterval */
    ScheduledDeactivationTime?: string;
    /** name of the statistic when the version became active */
    StatisticName?: string;
    /** version of the statistic */
    Version: number;
  }

  interface PSNAccountPlayFabIdPair {
    /** Unique PlayFab identifier for a user, or null if no PlayFab account is linked to the PlayStation Network identifier. */
    PlayFabId?: string;
    /** Unique PlayStation Network identifier for a user. */
    PSNAccountId?: string;
  }

  interface PushNotificationPackage {
    /** Numerical badge to display on App icon (iOS only) */
    Badge: number;
    /** This must be a JSON formatted object. For use with developer-created custom Push Notification plugins */
    CustomData?: string;
    /** Icon file to display with the message (Not supported for iOS) */
    Icon?: string;
    /** Content of the message (all platforms) */
    Message: string;
    /** Sound file to play with the message (all platforms) */
    Sound?: string;
    /** Title/Subject of the message. Not supported for iOS */
    Title: string;
  }

  type PushNotificationPlatform =
    | "ApplePushNotificationService"
    | "GoogleCloudMessaging";

  interface PushNotificationRegistration {
    /** Notification configured endpoint */
    NotificationEndpointARN?: string;
    /** Push notification platform */
    Platform?: PushNotificationPlatform;
  }

  interface PushNotificationRegistrationModel {
    /** Notification configured endpoint */
    NotificationEndpointARN?: string;
    /** Push notification platform */
    Platform?: PushNotificationPlatform;
  }

  interface RandomResultTableListing {
    /** Catalog version this table is associated with */
    CatalogVersion?: string;
    /** Child nodes that indicate what kind of drop table item this actually is. */
    Nodes: ResultTableNode[];
    /** Unique name for this drop table */
    TableId: string;
  }

  /**
   * Coupon codes can be created for any item, or set of items, in the catalog for the title. This operation causes the
   * coupon to be consumed, and the specific items to be awarded to the user. Attempting to re-use an already consumed code,
   * or a code which has not yet been created in the service, will result in an error.
   */
  interface RedeemCouponRequest {
    /** Catalog version of the coupon. */
    CatalogVersion?: string;
    /** Optional identifier for the Character that should receive the item. If null, item is added to the player */
    CharacterId?: string;
    /** Generated coupon code to redeem. */
    CouponCode: string;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface RedeemCouponResult {
    /** Items granted to the player as a result of redeeming the coupon. */
    GrantedItems?: ItemInstance[];
  }

  /**
   * This function is used by a Game Server Instance to validate with the PlayFab service that a user has been registered as
   * connected to the server. The Ticket is provided to the client either as a result of a call to StartGame or Matchmake,
   * each of which return a Ticket specific to the Game Server Instance. This function will fail in any case where the Ticket
   * presented is not valid for the specific Game Server Instance making the call. Note that data returned may be Personally
   * Identifying Information (PII), such as email address, and so care should be taken in how this data is stored and
   * managed. Since this call will always return the relevant information for users who have accessed the title, the
   * recommendation is to not store this data locally.
   */
  interface RedeemMatchmakerTicketRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Unique identifier of the Game Server Instance that is asking for validation of the authorization ticket. */
    LobbyId: string;
    /** Server authorization ticket passed back from a call to Matchmake or StartGame. */
    Ticket: string;
  }

  interface RedeemMatchmakerTicketResult {
    /** Error value if the ticket was not validated. */
    Error?: string;
    /** Boolean indicating whether the ticket was validated by the PlayFab service. */
    TicketIsValid: boolean;
    /** User account information for the user validated. */
    UserInfo?: UserAccountInfo;
  }

  interface RefreshGameServerInstanceHeartbeatRequest {
    /** Unique identifier of the Game Server Instance for which the heartbeat is updated. */
    LobbyId: string;
  }

  interface RefreshGameServerInstanceHeartbeatResult {}

  type Region =
    | "USCentral"
    | "USEast"
    | "EUWest"
    | "Singapore"
    | "Japan"
    | "Brazil"
    | "Australia";

  interface RegisterGameRequest {
    /** Unique identifier of the build running on the Game Server Instance. */
    Build: string;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /**
     * Game Mode the Game Server instance is running. Note that this must be defined in the Game Modes tab in the PlayFab Game
     * Manager, along with the Build ID (the same Game Mode can be defined for multiple Build IDs).
     */
    GameMode: string;
    /** Previous lobby id if re-registering an existing game. */
    LobbyId?: string;
    /**
     * Region in which the Game Server Instance is running. For matchmaking using non-AWS region names, set this to any AWS
     * region and use Tags (below) to specify your custom region.
     */
    Region: Region;
    /** IPV4 address of the game server instance. */
    ServerIPV4Address?: string;
    /** IPV6 address (if any) of the game server instance. */
    ServerIPV6Address?: string;
    /** Port number for communication with the Game Server Instance. */
    ServerPort: string;
    /** Public DNS name (if any) of the server */
    ServerPublicDNSName?: string;
    /** Tags for the Game Server Instance */
    Tags?: { [key: string]: string | null };
  }

  interface RegisterGameResponse {
    /**
     * Unique identifier generated for the Game Server Instance that is registered. If LobbyId is specified in request and the
     * game still exists in PlayFab, the LobbyId in request is returned. Otherwise a new lobby id will be returned.
     */
    LobbyId?: string;
  }

  interface RemoveFriendRequest {
    /** PlayFab identifier of the friend account which is to be removed. */
    FriendPlayFabId: string;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface RemoveGenericIDRequest {
    /** Generic service identifier to be removed from the player. */
    GenericId: GenericServiceId;
    /** PlayFabId of the user to remove. */
    PlayFabId: string;
  }

  /**
   * This API will trigger a player_tag_removed event and remove a tag with the given TagName and PlayFabID from the
   * corresponding player profile. TagName can be used for segmentation and it is limited to 256 characters
   */
  interface RemovePlayerTagRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
    /** Unique tag for player profile. */
    TagName: string;
  }

  interface RemovePlayerTagResult {}

  interface RemoveSharedGroupMembersRequest {
    /** An array of unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabIds: string[];
    /** Unique identifier for the shared group. */
    SharedGroupId: string;
  }

  interface RemoveSharedGroupMembersResult {}

  interface ReportPlayerServerRequest {
    /** Optional additional comment by reporting player. */
    Comment?: string;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Unique PlayFab identifier of the reported player. */
    ReporteeId: string;
    /** PlayFabId of the reporting player. */
    ReporterId: string;
  }

  /**
   * Players are currently limited to five reports per day. Attempts by a single user account to submit reports beyond five
   * will result in Updated being returned as false.
   */
  interface ReportPlayerServerResult {
    /** The number of remaining reports which may be filed today by this reporting player. */
    SubmissionsRemaining: number;
  }

  interface ResultTableNode {
    /** Either an ItemId, or the TableId of another random result table */
    ResultItem: string;
    /** Whether this entry in the table is an item or a link to another table */
    ResultItemType: ResultTableNodeType;
    /** How likely this is to be rolled - larger numbers add more weight */
    Weight: number;
  }

  type ResultTableNodeType = "ItemId" | "TableId";

  /**
   * Setting the active state of all non-expired bans for a user to Inactive. Expired bans with an Active state will be
   * ignored, however. Returns information about applied updates only.
   */
  interface RevokeAllBansForUserRequest {
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface RevokeAllBansForUserResult {
    /** Information on the bans that were revoked. */
    BanData?: BanInfo[];
  }

  /**
   * Setting the active state of all bans requested to Inactive regardless of whether that ban has already expired. BanIds
   * that do not exist will be skipped. Returns information about applied updates only.
   */
  interface RevokeBansRequest {
    /** Ids of the bans to be revoked. Maximum 100. */
    BanIds: string[];
  }

  interface RevokeBansResult {
    /** Information on the bans that were revoked */
    BanData?: BanInfo[];
  }

  interface RevokeInventoryItem {
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId?: string;
    /** Unique PlayFab assigned instance identifier of the item */
    ItemInstanceId: string;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  /**
   * In cases where the inventory item in question is a "crate", and the items it contained have already been dispensed, this
   * will not revoke access or otherwise remove the items which were dispensed.
   */
  interface RevokeInventoryItemRequest {
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId?: string;
    /** Unique PlayFab assigned instance identifier of the item */
    ItemInstanceId: string;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  /**
   * In cases where the inventory item in question is a "crate", and the items it contained have already been dispensed, this
   * will not revoke access or otherwise remove the items which were dispensed.
   */
  interface RevokeInventoryItemsRequest {
    /** Array of player items to revoke, between 1 and 25 items. */
    Items: RevokeInventoryItem[];
  }

  interface RevokeInventoryItemsResult {
    /** Collection of any errors that occurred during processing. */
    Errors?: RevokeItemError[];
  }

  interface RevokeInventoryResult {}

  interface RevokeItemError {
    /** Specific error that was encountered. */
    Error?: GenericErrorCodes;
    /** Item information that failed to be revoked. */
    Item?: RevokeInventoryItem;
  }

  /** Represents the save push notification template request. */
  interface SavePushNotificationTemplateRequest {
    /** Android JSON for the notification template. */
    AndroidPayload?: string;
    /** Id of the push notification template. */
    Id?: string;
    /** IOS JSON for the notification template. */
    IOSPayload?: string;
    /** Dictionary of localized push notification templates with the language as the key. */
    LocalizedPushNotificationTemplates?: {
      [key: string]: LocalizedPushNotificationProperties;
    };
    /** Name of the push notification template. */
    Name: string;
  }

  /** Represents the save push notification template result. */
  interface SavePushNotificationTemplateResult {
    /** Id of the push notification template that was saved. */
    PushNotificationTemplateId?: string;
  }

  interface ScriptExecutionError {
    /**
     * Error code, such as CloudScriptNotFound, JavascriptException, CloudScriptFunctionArgumentSizeExceeded,
     * CloudScriptAPIRequestCountExceeded, CloudScriptAPIRequestError, or CloudScriptHTTPRequestError
     */
    Error?: string;
    /** Details about the error */
    Message?: string;
    /** Point during the execution of the script at which the error occurred, if any */
    StackTrace?: string;
  }

  /**
   * PlayFab accounts which have valid email address or username will be able to receive a password reset email using this
   * API.The email sent must be an account recovery email template. The username or email can be passed in to send the email
   */
  interface SendCustomAccountRecoveryEmailRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** User email address attached to their account */
    Email?: string;
    /** The email template id of the account recovery email template to send. */
    EmailTemplateId: string;
    /** The user's username requesting an account recovery. */
    Username?: string;
  }

  interface SendCustomAccountRecoveryEmailResult {}

  /**
   * Sends an email for only players that have contact emails associated with them. Takes in an email template ID
   * specifyingthe email template to send.
   */
  interface SendEmailFromTemplateRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The email template id of the email template to send. */
    EmailTemplateId: string;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface SendEmailFromTemplateResult {}

  /** Represents the request for sending a push notification template to a recipient. */
  interface SendPushNotificationFromTemplateRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Id of the push notification template. */
    PushNotificationTemplateId: string;
    /** PlayFabId of the push notification recipient. */
    Recipient: string;
  }

  interface SendPushNotificationRequest {
    /**
     * Allows you to provide precisely formatted json to target devices. This is an advanced feature, allowing you to deliver
     * to custom plugin logic, fields, or functionality not natively supported by PlayFab.
     */
    AdvancedPlatformDelivery?: AdvancedPushPlatformMsg[];
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Text of message to send. */
    Message?: string;
    /**
     * Defines all possible push attributes like message, title, icon, etc. Some parameters are device specific - please see
     * the PushNotificationPackage documentation for details.
     */
    Package?: PushNotificationPackage;
    /** PlayFabId of the recipient of the push notification. */
    Recipient: string;
    /** Subject of message to send (may not be displayed in all platforms) */
    Subject?: string;
    /** Target Platforms that should receive the Message or Package. If omitted, we will send to all available platforms. */
    TargetPlatforms?: PushNotificationPlatform[];
  }

  interface SendPushNotificationResult {}

  interface ServerCustomIDPlayFabIDPair {
    /** Unique PlayFab identifier. */
    PlayFabId?: string;
    /** Unique server custom identifier for this player. */
    ServerCustomId?: string;
  }

  interface ServerLoginResult {
    /**
     * If LoginTitlePlayerAccountEntity flag is set on the login request the title_player_account will also be logged in and
     * returned.
     */
    EntityToken?: EntityTokenResponse;
    /** Results for requested info. */
    InfoResultPayload?: GetPlayerCombinedInfoResultPayload;
    /** The time of this user's previous login. If there was no previous login, then it's DateTime.MinValue */
    LastLoginTime?: string;
    /** True if the account was newly created on this login. */
    NewlyCreated: boolean;
    /** Player's unique PlayFabId. */
    PlayFabId?: string;
    /** Unique token authorizing the user and game at the server level, for the current session. */
    SessionTicket?: string;
    /** Settings specific to this user. */
    SettingsForUser?: UserSettings;
    /** The experimentation treatments for this user at the time of login. */
    TreatmentAssignment?: TreatmentAssignment;
  }

  /**
   * This operation is not additive. It will completely replace the tag list for the specified user. Please note that only
   * users in the PlayFab friends list can be assigned tags. Attempting to set a tag on a friend only included in the friends
   * list from a social site integration (such as Facebook or Steam) will return the AccountNotFound error.
   */
  interface SetFriendTagsRequest {
    /** PlayFab identifier of the friend account to which the tag(s) should be applied. */
    FriendPlayFabId: string;
    /** PlayFab identifier of the player whose friend is to be updated. */
    PlayFabId: string;
    /** Array of tags to set on the friend account. */
    Tags: string[];
  }

  interface SetGameServerInstanceDataRequest {
    /** Custom data to set for the specified game server instance. */
    GameServerData: string;
    /** Unique identifier of the Game Instance to be updated, in decimal format. */
    LobbyId: string;
  }

  interface SetGameServerInstanceDataResult {}

  interface SetGameServerInstanceStateRequest {
    /** Unique identifier of the Game Instance to be updated, in decimal format. */
    LobbyId: string;
    /** State to set for the specified game server instance. */
    State: GameInstanceState;
  }

  interface SetGameServerInstanceStateResult {}

  interface SetGameServerInstanceTagsRequest {
    /** Unique identifier of the Game Server Instance to be updated. */
    LobbyId: string;
    /**
     * Tags to set for the specified Game Server Instance. Note that this is the complete list of tags to be associated with
     * the Game Server Instance.
     */
    Tags: { [key: string]: string | null };
  }

  interface SetGameServerInstanceTagsResult {}

  /**
   * APIs that require signatures require that the player have a configured Player Secret Key that is used to sign all
   * requests. Players that don't have a secret will be blocked from making API calls until it is configured. To create a
   * signature header add a SHA256 hashed string containing UTF8 encoded JSON body as it will be sent to the server, the
   * current time in UTC formatted to ISO 8601, and the players secret formatted as 'body.date.secret'. Place the resulting
   * hash into the header X-PlayFab-Signature, along with a header X-PlayFab-Timestamp of the same UTC timestamp used in the
   * signature.
   */
  interface SetPlayerSecretRequest {
    /** Player secret that is used to verify API request signatures (Enterprise Only). */
    PlayerSecret?: string;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface SetPlayerSecretResult {}

  /**
   * This API is designed to store publisher-specific values which can be read, but not written to, by the client. This data
   * is shared across all titles assigned to a particular publisher, and can be used for cross-game coordination. Only titles
   * assigned to a publisher can use this API. This operation is additive. If a Key does not exist in the current dataset, it
   * will be added with the specified Value. If it already exists, the Value for that key will be overwritten with the new
   * Value. For more information email helloplayfab@microsoft.com
   */
  interface SetPublisherDataRequest {
    /**
     * key we want to set a value on (note, this is additive - will only replace an existing key's value if they are the same
     * name.) Keys are trimmed of whitespace. Keys may not begin with the '!' character.
     */
    Key: string;
    /** new value to set. Set to null to remove a value */
    Value?: string;
  }

  interface SetPublisherDataResult {}

  /**
   * This API is designed to store title specific values which can be read, but not written to, by the client. For example, a
   * developer could choose to store values which modify the user experience, such as enemy spawn rates, weapon strengths,
   * movement speeds, etc. This allows a developer to update the title without the need to create, test, and ship a new
   * build. This operation is additive. If a Key does not exist in the current dataset, it will be added with the specified
   * Value. If it already exists, the Value for that key will be overwritten with the new Value.
   */
  interface SetTitleDataRequest {
    /** Id of azure resource */
    AzureResourceId?: string;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /**
     * key we want to set a value on (note, this is additive - will only replace an existing key's value if they are the same
     * name.) Keys are trimmed of whitespace. Keys may not begin with the '!' character.
     */
    Key: string;
    /** System Data of the Azure Resource */
    SystemData?: AzureResourceSystemData;
    /**
     * Unique identifier for the title, found in the Settings &gt; Game Properties section of the PlayFab developer site when a
     * title has been selected.
     */
    TitleId?: string;
    /** new value to set. Set to null to remove a value */
    Value?: string;
  }

  interface SetTitleDataResult {
    /** Id of azure resource */
    AzureResourceId?: string;
  }

  interface SharedGroupDataRecord {
    /** Timestamp for when this data was last updated. */
    LastUpdated: string;
    /** PlayFabId of the user to last update this value. */
    LastUpdatedBy?: string;
    /** Indicates whether this data can be read by all users (public) or only members of the group (private). */
    Permission?: UserDataPermission;
    /** Data stored for the specified group data key. */
    Value?: string;
  }

  type SourceType =
    | "Admin"
    | "BackEnd"
    | "GameClient"
    | "GameServer"
    | "Partner"
    | "Custom"
    | "API";

  interface StatisticModel {
    /** Statistic name */
    Name?: string;
    /** Statistic value */
    Value: number;
    /** Statistic version (0 if not a versioned statistic) */
    Version: number;
  }

  interface StatisticNameVersion {
    /** unique name of the statistic */
    StatisticName: string;
    /** the version of the statistic to be returned */
    Version: number;
  }

  interface StatisticUpdate {
    /** unique name of the statistic */
    StatisticName: string;
    /** statistic value for the player */
    Value: number;
    /**
     * for updates to an existing statistic value for a player, the version of the statistic when it was loaded. Null when
     * setting the statistic value for the first time.
     */
    Version?: number;
  }

  interface UserStatistics {
    [key: string]: number;
  }

  interface StatisticValue {
    /** unique name of the statistic */
    StatisticName?: string;
    /** statistic value for the player */
    Value: number;
    /** for updates to an existing statistic value for a player, the version of the statistic when it was loaded */
    Version: number;
  }

  interface SteamPlayFabIdPair {
    /** Unique PlayFab identifier for a user, or null if no PlayFab account is linked to the Steam identifier. */
    PlayFabId?: string;
    /** Unique Steam identifier for a user. */
    SteamStringId?: string;
  }

  /** A store entry that list a catalog item at a particular price */
  interface StoreItem {
    /** Store specific custom data. The data only exists as part of this store; it is not transferred to item instances */
    CustomData?: any;
    /** Intended display position for this item. Note that 0 is the first position */
    DisplayPosition?: number;
    /**
     * Unique identifier of the item as it exists in the catalog - note that this must exactly match the ItemId from the
     * catalog
     */
    ItemId: string;
    /** Override prices for this item for specific currencies */
    RealCurrencyPrices?: { [key: string]: number };
    /** Override prices for this item in virtual currencies and "RM" (the base Real Money purchase price, in USD pennies) */
    VirtualCurrencyPrices?: { [key: string]: number };
  }

  /** Marketing data about a specific store */
  interface StoreMarketingModel {
    /** Tagline for a store. */
    Description?: string;
    /** Display name of a store as it will appear to users. */
    DisplayName?: string;
    /** Custom data about a store. */
    Metadata?: any;
  }

  interface SubscriptionModel {
    /** When this subscription expires. */
    Expiration: string;
    /** The time the subscription was orignially purchased */
    InitialSubscriptionTime: string;
    /** Whether this subscription is currently active. That is, if Expiration &gt; now. */
    IsActive: boolean;
    /** The status of this subscription, according to the subscription provider. */
    Status?: SubscriptionProviderStatus;
    /** The id for this subscription */
    SubscriptionId?: string;
    /** The item id for this subscription from the primary catalog */
    SubscriptionItemId?: string;
    /** The provider for this subscription. Apple or Google Play are supported today. */
    SubscriptionProvider?: string;
  }

  type SubscriptionProviderStatus =
    | "NoError"
    | "Cancelled"
    | "UnknownError"
    | "BillingError"
    | "ProductUnavailable"
    | "CustomerDidNotAcceptPriceChange"
    | "FreeTrial"
    | "PaymentPending";

  interface SubtractCharacterVirtualCurrencyRequest {
    /** Amount to be subtracted from the user balance of the specified virtual currency. */
    Amount: number;
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId: string;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
    /** Name of the virtual currency which is to be decremented. */
    VirtualCurrency: string;
  }

  interface SubtractUserVirtualCurrencyRequest {
    /** Amount to be subtracted from the user balance of the specified virtual currency. */
    Amount: number;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** PlayFab unique identifier of the user whose virtual currency balance is to be decreased. */
    PlayFabId: string;
    /** Name of the virtual currency which is to be decremented. */
    VirtualCurrency: string;
  }

  interface TagModel {
    /** Full value of the tag, including namespace */
    TagValue?: string;
  }

  type TitleActivationStatus =
    | "None"
    | "ActivatedTitleKey"
    | "PendingSteam"
    | "ActivatedSteam"
    | "RevokedSteam";

  interface TitleNewsItem {
    /** News item body. */
    Body?: string;
    /** Unique identifier of news item. */
    NewsId?: string;
    /** Date and time when the news item was posted. */
    Timestamp: string;
    /** Title of the news item. */
    Title?: string;
  }

  interface TreatmentAssignment {
    /** List of the experiment variables. */
    Variables?: Variable[];
    /** List of the experiment variants. */
    Variants?: string[];
  }

  interface UnlinkPSNAccountRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface UnlinkPSNAccountResult {}

  interface UnlinkServerCustomIdRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Unique PlayFab identifier. */
    PlayFabId: string;
    /** Unique server custom identifier for this player. */
    ServerCustomId: string;
  }

  interface UnlinkServerCustomIdResult {}

  interface UnlinkXboxAccountRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Unique PlayFab identifier for a user, or null if no PlayFab account is linked to the Xbox Live identifier. */
    PlayFabId: string;
  }

  interface UnlinkXboxAccountResult {}

  /** Specify the container and optionally the catalogVersion for the container to open */
  interface UnlockContainerInstanceRequest {
    /**
     * Specifies the catalog version that should be used to determine container contents. If unspecified, uses catalog
     * associated with the item instance.
     */
    CatalogVersion?: string;
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId?: string;
    /** ItemInstanceId of the container to unlock. */
    ContainerItemInstanceId: string;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /**
     * ItemInstanceId of the key that will be consumed by unlocking this container. If the container requires a key, this
     * parameter is required.
     */
    KeyItemInstanceId?: string;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  /** Specify the type of container to open and optionally the catalogVersion for the container to open */
  interface UnlockContainerItemRequest {
    /**
     * Specifies the catalog version that should be used to determine container contents. If unspecified, uses default/primary
     * catalog.
     */
    CatalogVersion?: string;
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId?: string;
    /** Catalog ItemId of the container type to unlock. */
    ContainerItemId: string;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  /** The items and vc found within the container. These will be added and stacked in your inventory as appropriate. */
  interface UnlockContainerItemResult {
    /** Items granted to the player as a result of unlocking the container. */
    GrantedItems?: ItemInstance[];
    /** Unique instance identifier of the container unlocked. */
    UnlockedItemInstanceId?: string;
    /** Unique instance identifier of the key used to unlock the container, if applicable. */
    UnlockedWithItemInstanceId?: string;
    /** Virtual currency granted to the player as a result of unlocking the container. */
    VirtualCurrency?: { [key: string]: number };
  }

  interface UpdateAvatarUrlRequest {
    /** URL of the avatar image. If empty, it removes the existing avatar URL. */
    ImageUrl: string;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  /** Represents a single update ban request. */
  interface UpdateBanRequest {
    /** The updated active state for the ban. Null for no change. */
    Active?: boolean;
    /** The id of the ban to be updated. */
    BanId: string;
    /** The updated expiration date for the ban. Null for no change. */
    Expires?: string;
    /** The updated IP address for the ban. Null for no change. */
    IPAddress?: string;
    /** The updated MAC address for the ban. Null for no change. */
    MACAddress?: string;
    /** Whether to make this ban permanent. Set to true to make this ban permanent. This will not modify Active state. */
    Permanent?: boolean;
    /** The updated reason for the ban to be updated. Maximum 140 characters. Null for no change. */
    Reason?: string;
  }

  /**
   * For each ban, only updates the values that are set. Leave any value to null for no change. If a ban could not be found,
   * the rest are still applied. Returns information about applied updates only.
   */
  interface UpdateBansRequest {
    /** List of bans to be updated. Maximum 100. */
    Bans: UpdateBanRequest[];
  }

  interface UpdateBansResult {
    /** Information on the bans that were updated */
    BanData?: BanInfo[];
  }

  /**
   * This function performs an additive update of the arbitrary JSON object containing the custom data for the user. In
   * updating the custom data object, keys which already exist in the object will have their values overwritten, while keys
   * with null values will be removed. No other key-value pairs will be changed apart from those specified in the call.
   */
  interface UpdateCharacterDataRequest {
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId: string;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /**
     * Key-value pairs to be written to the custom data. Note that keys are trimmed of whitespace, are limited in size, and may
     * not begin with a '!' character or be null.
     */
    Data?: { [key: string]: string | null };
    /**
     * Optional list of Data-keys to remove from UserData. Some SDKs cannot insert null-values into Data due to language
     * constraints. Use this to delete the keys directly.
     */
    KeysToRemove?: string[];
    /** Permission to be applied to all user data keys written in this request. Defaults to "private" if not set. */
    Permission?: UserDataPermission;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface UpdateCharacterDataResult {
    /**
     * Indicates the current version of the data that has been set. This is incremented with every set call for that type of
     * data (read-only, internal, etc). This version can be provided in Get calls to find updated data.
     */
    DataVersion: number;
  }

  /**
   * Character statistics are similar to user statistics in that they are numeric values which may only be updated by a
   * server operation, in order to minimize the opportunity for unauthorized changes. In addition to being available for use
   * by the title, the statistics are used for all leaderboard operations in PlayFab.
   */
  interface UpdateCharacterStatisticsRequest {
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId: string;
    /** Statistics to be updated with the provided values. */
    CharacterStatistics?: { [key: string]: number };
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface UpdateCharacterStatisticsResult {}

  /**
   * This operation is additive. Statistics not currently defined will be added, while those already defined will be updated
   * with the given values. All other user statistics will remain unchanged.
   */
  interface UpdatePlayerStatisticsRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /**
     * Indicates whether the statistics provided should be set, regardless of the aggregation method set on the statistic.
     * Default is false.
     */
    ForceUpdate?: boolean;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
    /** Statistics to be updated with the provided values */
    Statistics: StatisticUpdate[];
  }

  interface UpdatePlayerStatisticsResult {}

  /**
   * Note that in the case of multiple calls to write to the same shared group data keys, the last write received by the
   * PlayFab service will determine the value available to subsequent read operations. For scenarios requiring coordination
   * of data updates, it is recommended that titles make use of user data with read permission set to public, or a
   * combination of user data and shared group data.
   */
  interface UpdateSharedGroupDataRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /**
     * Key-value pairs to be written to the custom data. Note that keys are trimmed of whitespace, are limited in size, and may
     * not begin with a '!' character or be null.
     */
    Data?: { [key: string]: string | null };
    /**
     * Optional list of Data-keys to remove from UserData. Some SDKs cannot insert null-values into Data due to language
     * constraints. Use this to delete the keys directly.
     */
    KeysToRemove?: string[];
    /** Permission to be applied to all user data keys in this request. */
    Permission?: UserDataPermission;
    /** Unique identifier for the shared group. */
    SharedGroupId: string;
  }

  interface UpdateSharedGroupDataResult {}

  /**
   * This function performs an additive update of the arbitrary JSON object containing the custom data for the user. In
   * updating the custom data object, keys which already exist in the object will have their values overwritten, while keys
   * with null values will be removed. No other key-value pairs will be changed apart from those specified in the call.
   */
  interface UpdateUserDataRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /**
     * Key-value pairs to be written to the custom data. Note that keys are trimmed of whitespace, are limited in size, and may
     * not begin with a '!' character or be null.
     */
    Data?: { [key: string]: string | null };
    /**
     * Optional list of Data-keys to remove from UserData. Some SDKs cannot insert null-values into Data due to language
     * constraints. Use this to delete the keys directly.
     */
    KeysToRemove?: string[];
    /** Permission to be applied to all user data keys written in this request. Defaults to "private" if not set. */
    Permission?: UserDataPermission;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface UpdateUserDataResult {
    /**
     * Indicates the current version of the data that has been set. This is incremented with every set call for that type of
     * data (read-only, internal, etc). This version can be provided in Get calls to find updated data.
     */
    DataVersion: number;
  }

  /**
   * This function performs an additive update of the arbitrary JSON object containing the custom data for the user. In
   * updating the custom data object, keys which already exist in the object will have their values overwritten, keys with
   * null values will be removed. No other key-value pairs will be changed apart from those specified in the call.
   */
  interface UpdateUserInternalDataRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /**
     * Key-value pairs to be written to the custom data. Note that keys are trimmed of whitespace, are limited in size, and may
     * not begin with a '!' character or be null.
     */
    Data?: { [key: string]: string | null };
    /**
     * Optional list of Data-keys to remove from UserData. Some SDKs cannot insert null-values into Data due to language
     * constraints. Use this to delete the keys directly.
     */
    KeysToRemove?: string[];
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  /**
   * This function performs an additive update of the arbitrary JSON object containing the custom data for the item instance
   * which belongs to the specified user. In updating the custom data object, keys which already exist in the object will
   * have their values overwritten, while keys with null values will be removed. No other key-value pairs will be changed
   * apart from those specified in the call.
   */
  interface UpdateUserInventoryItemDataRequest {
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId?: string;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /**
     * Key-value pairs to be written to the custom data. Note that keys are trimmed of whitespace, are limited in size, and may
     * not begin with a '!' character or be null.
     */
    Data?: { [key: string]: string | null };
    /** Unique PlayFab assigned instance identifier of the item */
    ItemInstanceId: string;
    /**
     * Optional list of Data-keys to remove from UserData. Some SDKs cannot insert null-values into Data due to language
     * constraints. Use this to delete the keys directly.
     */
    KeysToRemove?: string[];
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
  }

  interface UserAccountInfo {
    /** User Android device information, if an Android device has been linked */
    AndroidDeviceInfo?: UserAndroidDeviceInfo;
    /** Sign in with Apple account information, if an Apple account has been linked */
    AppleAccountInfo?: UserAppleIdInfo;
    /** Timestamp indicating when the user account was created */
    Created: string;
    /** Custom ID information, if a custom ID has been assigned */
    CustomIdInfo?: UserCustomIdInfo;
    /** User Facebook information, if a Facebook account has been linked */
    FacebookInfo?: UserFacebookInfo;
    /** Facebook Instant Games account information, if a Facebook Instant Games account has been linked */
    FacebookInstantGamesIdInfo?: UserFacebookInstantGamesIdInfo;
    /** User Gamecenter information, if a Gamecenter account has been linked */
    GameCenterInfo?: UserGameCenterInfo;
    /** User Google account information, if a Google account has been linked */
    GoogleInfo?: UserGoogleInfo;
    /** User iOS device information, if an iOS device has been linked */
    IosDeviceInfo?: UserIosDeviceInfo;
    /** User Kongregate account information, if a Kongregate account has been linked */
    KongregateInfo?: UserKongregateInfo;
    /** Nintendo Switch account information, if a Nintendo Switch account has been linked */
    NintendoSwitchAccountInfo?: UserNintendoSwitchAccountIdInfo;
    /** Nintendo Switch device information, if a Nintendo Switch device has been linked */
    NintendoSwitchDeviceIdInfo?: UserNintendoSwitchDeviceIdInfo;
    /** OpenID Connect information, if any OpenID Connect accounts have been linked */
    OpenIdInfo?: UserOpenIdInfo[];
    /** Unique identifier for the user account */
    PlayFabId?: string;
    /** Personal information for the user which is considered more sensitive */
    PrivateInfo?: UserPrivateAccountInfo;
    /** User PSN account information, if a PSN account has been linked */
    PsnInfo?: UserPsnInfo;
    /** User Steam information, if a Steam account has been linked */
    SteamInfo?: UserSteamInfo;
    /** Title-specific information for the user account */
    TitleInfo?: UserTitleInfo;
    /** User Twitch account information, if a Twitch account has been linked */
    TwitchInfo?: UserTwitchInfo;
    /** User account name in the PlayFab service */
    Username?: string;
    /** User XBox account information, if a XBox account has been linked */
    XboxInfo?: UserXboxInfo;
  }

  interface UserAndroidDeviceInfo {
    /** Android device ID */
    AndroidDeviceId?: string;
  }

  interface UserAppleIdInfo {
    /** Apple subject ID */
    AppleSubjectId?: string;
  }

  interface UserCustomIdInfo {
    /** Custom ID */
    CustomId?: string;
  }

  /**
   * Indicates whether a given data key is private (readable only by the player) or public (readable by all players). When a
   * player makes a GetUserData request about another player, only keys marked Public will be returned.
   */
  type UserDataPermission = "Private" | "Public";

  interface UserDataRecord {
    /** Timestamp for when this data was last updated. */
    LastUpdated: string;
    /**
     * Indicates whether this data can be read by all users (public) or only the user (private). This is used for GetUserData
     * requests being made by one player about another player.
     */
    Permission?: UserDataPermission;
    /** Data stored for the specified user data key. */
    Value?: string;
  }

  interface UserFacebookInfo {
    /** Facebook identifier */
    FacebookId?: string;
    /** Facebook full name */
    FullName?: string;
  }

  interface UserFacebookInstantGamesIdInfo {
    /** Facebook Instant Games ID */
    FacebookInstantGamesId?: string;
  }

  interface UserGameCenterInfo {
    /** Gamecenter identifier */
    GameCenterId?: string;
  }

  interface UserGoogleInfo {
    /** Email address of the Google account */
    GoogleEmail?: string;
    /** Gender information of the Google account */
    GoogleGender?: string;
    /** Google ID */
    GoogleId?: string;
    /** Locale of the Google account */
    GoogleLocale?: string;
    /** Name of the Google account user */
    GoogleName?: string;
  }

  interface UserIosDeviceInfo {
    /** iOS device ID */
    IosDeviceId?: string;
  }

  interface UserKongregateInfo {
    /** Kongregate ID */
    KongregateId?: string;
    /** Kongregate Username */
    KongregateName?: string;
  }

  interface UserNintendoSwitchAccountIdInfo {
    /** Nintendo Switch account subject ID */
    NintendoSwitchAccountSubjectId?: string;
  }

  interface UserNintendoSwitchDeviceIdInfo {
    /** Nintendo Switch Device ID */
    NintendoSwitchDeviceId?: string;
  }

  interface UserOpenIdInfo {
    /** OpenID Connection ID */
    ConnectionId?: string;
    /** OpenID Issuer */
    Issuer?: string;
    /** OpenID Subject */
    Subject?: string;
  }

  type UserOrigination =
    | "Organic"
    | "Steam"
    | "Google"
    | "Amazon"
    | "Facebook"
    | "Kongregate"
    | "GamersFirst"
    | "Unknown"
    | "IOS"
    | "LoadTest"
    | "Android"
    | "PSN"
    | "GameCenter"
    | "CustomId"
    | "XboxLive"
    | "Parse"
    | "Twitch"
    | "ServerCustomId"
    | "NintendoSwitchDeviceId"
    | "FacebookInstantGamesId"
    | "OpenIdConnect"
    | "Apple"
    | "NintendoSwitchAccount";

  interface UserPrivateAccountInfo {
    /** user email address */
    Email?: string;
  }

  interface UserPsnInfo {
    /** PSN account ID */
    PsnAccountId?: string;
    /** PSN online ID */
    PsnOnlineId?: string;
  }

  interface UserSettings {
    /** Boolean for whether this player is eligible for gathering device info. */
    GatherDeviceInfo: boolean;
    /** Boolean for whether this player should report OnFocus play-time tracking. */
    GatherFocusInfo: boolean;
    /** Boolean for whether this player is eligible for ad tracking. */
    NeedsAttribution: boolean;
  }

  interface UserSteamInfo {
    /** what stage of game ownership the user is listed as being in, from Steam */
    SteamActivationStatus?: TitleActivationStatus;
    /** the country in which the player resides, from Steam data */
    SteamCountry?: string;
    /** currency type set in the user Steam account */
    SteamCurrency?: Currency;
    /** Steam identifier */
    SteamId?: string;
    /** Steam display name */
    SteamName?: string;
  }

  interface UserTitleInfo {
    /** URL to the player's avatar. */
    AvatarUrl?: string;
    /**
     * timestamp indicating when the user was first associated with this game (this can differ significantly from when the user
     * first registered with PlayFab)
     */
    Created: string;
    /** name of the user, as it is displayed in-game */
    DisplayName?: string;
    /**
     * timestamp indicating when the user first signed into this game (this can differ from the Created timestamp, as other
     * events, such as issuing a beta key to the user, can associate the title to the user)
     */
    FirstLogin?: string;
    /** boolean indicating whether or not the user is currently banned for a title */
    isBanned?: boolean;
    /** timestamp for the last user login for this title */
    LastLogin?: string;
    /** source by which the user first joined the game, if known */
    Origination?: UserOrigination;
    /** Title player account entity for this user */
    TitlePlayerAccount?: EntityKey;
  }

  interface UserTwitchInfo {
    /** Twitch ID */
    TwitchId?: string;
    /** Twitch Username */
    TwitchUserName?: string;
  }

  interface UserXboxInfo {
    /** XBox user ID */
    XboxUserId?: string;
  }

  interface ValueToDateModel {
    /** ISO 4217 code of the currency used in the purchases */
    Currency?: string;
    /**
     * Total value of the purchases in a whole number of 1/100 monetary units. For example, 999 indicates nine dollars and
     * ninety-nine cents when Currency is 'USD')
     */
    TotalValue: number;
    /**
     * Total value of the purchases in a string representation of decimal monetary units. For example, '9.99' indicates nine
     * dollars and ninety-nine cents when Currency is 'USD'.
     */
    TotalValueAsDecimal?: string;
  }

  interface Variable {
    /** Name of the variable. */
    Name: string;
    /** Value of the variable. */
    Value?: string;
  }

  interface VirtualCurrencyRechargeTime {
    /**
     * Maximum value to which the regenerating currency will automatically increment. Note that it can exceed this value
     * through use of the AddUserVirtualCurrency API call. However, it will not regenerate automatically until it has fallen
     * below this value.
     */
    RechargeMax: number;
    /** Server timestamp in UTC indicating the next time the virtual currency will be incremented. */
    RechargeTime: string;
    /** Time remaining (in seconds) before the next recharge increment of the virtual currency. */
    SecondsToRecharge: number;
  }

  interface WriteEventResponse {
    /**
     * The unique identifier of the event. The values of this identifier consist of ASCII characters and are not constrained to
     * any particular format.
     */
    EventId?: string;
  }

  /**
   * This API is designed to write a multitude of different event types into PlayStream. It supports a flexible JSON schema,
   * which allowsfor arbitrary key-value pairs to describe any character-based event. The created event will be locked to the
   * authenticated title.
   */
  interface WriteServerCharacterEventRequest {
    /** Custom event properties. Each property consists of a name (string) and a value (JSON object). */
    Body?: { [key: string]: any };
    /** Unique PlayFab assigned ID for a specific character owned by a user */
    CharacterId: string;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /**
     * The name of the event, within the namespace scoped to the title. The naming convention is up to the caller, but it
     * commonly follows the subject_verb_object pattern (e.g. player_logged_in).
     */
    EventName: string;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
    /** The time (in UTC) associated with this event. The value defaults to the current time. */
    Timestamp?: string;
  }

  /**
   * This API is designed to write a multitude of different event types into PlayStream. It supports a flexible JSON schema,
   * which allowsfor arbitrary key-value pairs to describe any player-based event. The created event will be locked to the
   * authenticated title.
   */
  interface WriteServerPlayerEventRequest {
    /** Custom data properties associated with the event. Each property consists of a name (string) and a value (JSON object). */
    Body?: { [key: string]: any };
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /**
     * The name of the event, within the namespace scoped to the title. The naming convention is up to the caller, but it
     * commonly follows the subject_verb_object pattern (e.g. player_logged_in).
     */
    EventName: string;
    /** Unique PlayFab assigned ID of the user on whom the operation will be performed. */
    PlayFabId: string;
    /** The time (in UTC) associated with this event. The value defaults to the current time. */
    Timestamp?: string;
  }

  /**
   * This API is designed to write a multitude of different event types into PlayStream. It supports a flexible JSON schema,
   * which allowsfor arbitrary key-value pairs to describe any title-based event. The created event will be locked to the
   * authenticated title.
   */
  interface WriteTitleEventRequest {
    /** Custom event properties. Each property consists of a name (string) and a value (JSON object). */
    Body?: { [key: string]: any };
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /**
     * The name of the event, within the namespace scoped to the title. The naming convention is up to the caller, but it
     * commonly follows the subject_verb_object pattern (e.g. player_logged_in).
     */
    EventName: string;
    /** The time (in UTC) associated with this event. The value defaults to the current time. */
    Timestamp?: string;
  }

  interface XboxLiveAccountPlayFabIdPair {
    /** Unique PlayFab identifier for a user, or null if no PlayFab account is linked to the Xbox Live identifier. */
    PlayFabId?: string;
    /** Unique Xbox Live identifier for a user. */
    XboxLiveAccountId?: string;
  }
}

/** Server interface methods */
interface IPlayFabServerAPI {
  /**
   * Increments the character's balance of the specified virtual currency by the stated amount
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/addcharactervirtualcurrency
   */
  AddCharacterVirtualCurrency(
    request: PlayFabServerModels.AddCharacterVirtualCurrencyRequest
  ): PlayFabServerModels.ModifyCharacterVirtualCurrencyResult;

  /**
   * Adds the Friend user to the friendlist of the user with PlayFabId. At least one of
   * FriendPlayFabId,FriendUsername,FriendEmail, or FriendTitleDisplayName should be initialized.
   * https://docs.microsoft.com/rest/api/playfab/server/friend-list-management/addfriend
   */
  AddFriend(
    request: PlayFabServerModels.AddFriendRequest
  ): PlayFabServerModels.EmptyResponse;

  /**
   * Adds the specified generic service identifier to the player's PlayFab account. This is designed to allow for a PlayFab
   * ID lookup of any arbitrary service identifier a title wants to add. This identifier should never be used as
   * authentication credentials, as the intent is that it is easily accessible by other players.
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/addgenericid
   */
  AddGenericID(
    request: PlayFabServerModels.AddGenericIDRequest
  ): PlayFabServerModels.EmptyResult;

  /**
   * Adds a given tag to a player profile. The tag's namespace is automatically generated based on the source of the tag.
   * https://docs.microsoft.com/rest/api/playfab/server/playstream/addplayertag
   */
  AddPlayerTag(
    request: PlayFabServerModels.AddPlayerTagRequest
  ): PlayFabServerModels.AddPlayerTagResult;

  /**
   * Adds users to the set of those able to update both the shared data, as well as the set of users in the group. Only users
   * in the group (and the server) can add new members. Shared Groups are designed for sharing data between a very small
   * number of players, please see our guide:
   * https://docs.microsoft.com/gaming/playfab/features/social/groups/using-shared-group-data
   * https://docs.microsoft.com/rest/api/playfab/server/shared-group-data/addsharedgroupmembers
   */
  AddSharedGroupMembers(
    request: PlayFabServerModels.AddSharedGroupMembersRequest
  ): PlayFabServerModels.AddSharedGroupMembersResult;

  /**
   * Increments the user's balance of the specified virtual currency by the stated amount
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/adduservirtualcurrency
   */
  AddUserVirtualCurrency(
    request: PlayFabServerModels.AddUserVirtualCurrencyRequest
  ): PlayFabServerModels.ModifyUserVirtualCurrencyResult;

  /**
   * Validated a client's session ticket, and if successful, returns details for that user
   * https://docs.microsoft.com/rest/api/playfab/server/authentication/authenticatesessionticket
   */
  AuthenticateSessionTicket(
    request: PlayFabServerModels.AuthenticateSessionTicketRequest
  ): PlayFabServerModels.AuthenticateSessionTicketResult;

  /**
   * Awards the specified users the specified Steam achievements
   * https://docs.microsoft.com/rest/api/playfab/server/platform-specific-methods/awardsteamachievement
   */
  AwardSteamAchievement(
    request: PlayFabServerModels.AwardSteamAchievementRequest
  ): PlayFabServerModels.AwardSteamAchievementResult;

  /**
   * Bans users by PlayFab ID with optional IP address, or MAC address for the provided game.
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/banusers
   */
  BanUsers(
    request: PlayFabServerModels.BanUsersRequest
  ): PlayFabServerModels.BanUsersResult;

  /**
   * Consume uses of a consumable item. When all uses are consumed, it will be removed from the player's inventory.
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/consumeitem
   */
  ConsumeItem(
    request: PlayFabServerModels.ConsumeItemRequest
  ): PlayFabServerModels.ConsumeItemResult;

  /**
   * Requests the creation of a shared group object, containing key/value pairs which may be updated by all members of the
   * group. When created by a server, the group will initially have no members. Shared Groups are designed for sharing data
   * between a very small number of players, please see our guide:
   * https://docs.microsoft.com/gaming/playfab/features/social/groups/using-shared-group-data
   * https://docs.microsoft.com/rest/api/playfab/server/shared-group-data/createsharedgroup
   */
  CreateSharedGroup(
    request: PlayFabServerModels.CreateSharedGroupRequest
  ): PlayFabServerModels.CreateSharedGroupResult;

  /**
   * Deletes the specific character ID from the specified user.
   * https://docs.microsoft.com/rest/api/playfab/server/characters/deletecharacterfromuser
   */
  DeleteCharacterFromUser(
    request: PlayFabServerModels.DeleteCharacterFromUserRequest
  ): PlayFabServerModels.DeleteCharacterFromUserResult;

  /**
   * Removes a user's player account from a title and deletes all associated data
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/deleteplayer
   */
  DeletePlayer(
    request: PlayFabServerModels.DeletePlayerRequest
  ): PlayFabServerModels.DeletePlayerResult;

  /**
   * Deletes push notification template for title
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/deletepushnotificationtemplate
   */
  DeletePushNotificationTemplate(
    request: PlayFabServerModels.DeletePushNotificationTemplateRequest
  ): PlayFabServerModels.DeletePushNotificationTemplateResult;

  /**
   * Deletes a shared group, freeing up the shared group ID to be reused for a new group. Shared Groups are designed for
   * sharing data between a very small number of players, please see our guide:
   * https://docs.microsoft.com/gaming/playfab/features/social/groups/using-shared-group-data
   * https://docs.microsoft.com/rest/api/playfab/server/shared-group-data/deletesharedgroup
   */
  DeleteSharedGroup(
    request: PlayFabServerModels.DeleteSharedGroupRequest
  ): PlayFabServerModels.EmptyResponse;

  /**
   * Inform the matchmaker that a Game Server Instance is removed.
   * https://docs.microsoft.com/rest/api/playfab/server/matchmaking/deregistergame
   */
  DeregisterGame(
    request: PlayFabServerModels.DeregisterGameRequest
  ): PlayFabServerModels.DeregisterGameResponse;

  /**
   * Returns the result of an evaluation of a Random Result Table - the ItemId from the game Catalog which would have been
   * added to the player inventory, if the Random Result Table were added via a Bundle or a call to UnlockContainer.
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/evaluaterandomresulttable
   */
  EvaluateRandomResultTable(
    request: PlayFabServerModels.EvaluateRandomResultTableRequest
  ): PlayFabServerModels.EvaluateRandomResultTableResult;

  /**
   * Executes a CloudScript function, with the 'currentPlayerId' variable set to the specified PlayFabId parameter value.
   * https://docs.microsoft.com/rest/api/playfab/server/server-side-cloud-script/executecloudscript
   */
  ExecuteCloudScript(
    request: PlayFabServerModels.ExecuteCloudScriptServerRequest
  ): PlayFabServerModels.ExecuteCloudScriptResult;

  /**
   * Retrieves an array of player segment definitions. Results from this can be used in subsequent API calls such as
   * GetPlayersInSegment which requires a Segment ID. While segment names can change the ID for that segment will not change.
   * https://docs.microsoft.com/rest/api/playfab/server/playstream/getallsegments
   */
  GetAllSegments(
    request: PlayFabServerModels.GetAllSegmentsRequest
  ): PlayFabServerModels.GetAllSegmentsResult;

  /**
   * Lists all of the characters that belong to a specific user. CharacterIds are not globally unique; characterId must be
   * evaluated with the parent PlayFabId to guarantee uniqueness.
   * https://docs.microsoft.com/rest/api/playfab/server/characters/getalluserscharacters
   */
  GetAllUsersCharacters(
    request: PlayFabServerModels.ListUsersCharactersRequest
  ): PlayFabServerModels.ListUsersCharactersResult;

  /**
   * Retrieves the specified version of the title's catalog of virtual goods, including all defined properties
   * https://docs.microsoft.com/rest/api/playfab/server/title-wide-data-management/getcatalogitems
   */
  GetCatalogItems(
    request: PlayFabServerModels.GetCatalogItemsRequest
  ): PlayFabServerModels.GetCatalogItemsResult;

  /**
   * Retrieves the title-specific custom data for the user which is readable and writable by the client
   * https://docs.microsoft.com/rest/api/playfab/server/character-data/getcharacterdata
   */
  GetCharacterData(
    request: PlayFabServerModels.GetCharacterDataRequest
  ): PlayFabServerModels.GetCharacterDataResult;

  /**
   * Retrieves the title-specific custom data for the user's character which cannot be accessed by the client
   * https://docs.microsoft.com/rest/api/playfab/server/character-data/getcharacterinternaldata
   */
  GetCharacterInternalData(
    request: PlayFabServerModels.GetCharacterDataRequest
  ): PlayFabServerModels.GetCharacterDataResult;

  /**
   * Retrieves the specified character's current inventory of virtual goods
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/getcharacterinventory
   */
  GetCharacterInventory(
    request: PlayFabServerModels.GetCharacterInventoryRequest
  ): PlayFabServerModels.GetCharacterInventoryResult;

  /**
   * Retrieves a list of ranked characters for the given statistic, starting from the indicated point in the leaderboard
   * https://docs.microsoft.com/rest/api/playfab/server/characters/getcharacterleaderboard
   */
  GetCharacterLeaderboard(
    request: PlayFabServerModels.GetCharacterLeaderboardRequest
  ): PlayFabServerModels.GetCharacterLeaderboardResult;

  /**
   * Retrieves the title-specific custom data for the user's character which can only be read by the client
   * https://docs.microsoft.com/rest/api/playfab/server/character-data/getcharacterreadonlydata
   */
  GetCharacterReadOnlyData(
    request: PlayFabServerModels.GetCharacterDataRequest
  ): PlayFabServerModels.GetCharacterDataResult;

  /**
   * Retrieves the details of all title-specific statistics for the specific character
   * https://docs.microsoft.com/rest/api/playfab/server/characters/getcharacterstatistics
   */
  GetCharacterStatistics(
    request: PlayFabServerModels.GetCharacterStatisticsRequest
  ): PlayFabServerModels.GetCharacterStatisticsResult;

  /**
   * This API retrieves a pre-signed URL for accessing a content file for the title. A subsequent HTTP GET to the returned
   * URL will attempt to download the content. A HEAD query to the returned URL will attempt to retrieve the metadata of the
   * content. Note that a successful result does not guarantee the existence of this content - if it has not been uploaded,
   * the query to retrieve the data will fail. See this post for more information:
   * https://community.playfab.com/hc/community/posts/205469488-How-to-upload-files-to-PlayFab-s-Content-Service. Also,
   * please be aware that the Content service is specifically PlayFab's CDN offering, for which standard CDN rates apply.
   * https://docs.microsoft.com/rest/api/playfab/server/content/getcontentdownloadurl
   */
  GetContentDownloadUrl(
    request: PlayFabServerModels.GetContentDownloadUrlRequest
  ): PlayFabServerModels.GetContentDownloadUrlResult;

  /**
   * Retrieves a list of ranked friends of the given player for the given statistic, starting from the indicated point in the
   * leaderboard
   * https://docs.microsoft.com/rest/api/playfab/server/player-data-management/getfriendleaderboard
   */
  GetFriendLeaderboard(
    request: PlayFabServerModels.GetFriendLeaderboardRequest
  ): PlayFabServerModels.GetLeaderboardResult;

  /**
   * Retrieves the current friends for the user with PlayFabId, constrained to users who have PlayFab accounts. Friends from
   * linked accounts (Facebook, Steam) are also included. You may optionally exclude some linked services' friends.
   * https://docs.microsoft.com/rest/api/playfab/server/friend-list-management/getfriendslist
   */
  GetFriendsList(
    request: PlayFabServerModels.GetFriendsListRequest
  ): PlayFabServerModels.GetFriendsListResult;

  /**
   * Retrieves a list of ranked users for the given statistic, starting from the indicated point in the leaderboard
   * https://docs.microsoft.com/rest/api/playfab/server/player-data-management/getleaderboard
   */
  GetLeaderboard(
    request: PlayFabServerModels.GetLeaderboardRequest
  ): PlayFabServerModels.GetLeaderboardResult;

  /**
   * Retrieves a list of ranked characters for the given statistic, centered on the requested user
   * https://docs.microsoft.com/rest/api/playfab/server/characters/getleaderboardaroundcharacter
   */
  GetLeaderboardAroundCharacter(
    request: PlayFabServerModels.GetLeaderboardAroundCharacterRequest
  ): PlayFabServerModels.GetLeaderboardAroundCharacterResult;

  /**
   * Retrieves a list of ranked users for the given statistic, centered on the currently signed-in user
   * https://docs.microsoft.com/rest/api/playfab/server/player-data-management/getleaderboardarounduser
   */
  GetLeaderboardAroundUser(
    request: PlayFabServerModels.GetLeaderboardAroundUserRequest
  ): PlayFabServerModels.GetLeaderboardAroundUserResult;

  /**
   * Retrieves a list of all of the user's characters for the given statistic.
   * https://docs.microsoft.com/rest/api/playfab/server/characters/getleaderboardforusercharacters
   */
  GetLeaderboardForUserCharacters(
    request: PlayFabServerModels.GetLeaderboardForUsersCharactersRequest
  ): PlayFabServerModels.GetLeaderboardForUsersCharactersResult;

  /**
   * Returns whatever info is requested in the response for the user. Note that PII (like email address, facebook id) may be
   * returned. All parameters default to false.
   * https://docs.microsoft.com/rest/api/playfab/server/player-data-management/getplayercombinedinfo
   */
  GetPlayerCombinedInfo(
    request: PlayFabServerModels.GetPlayerCombinedInfoRequest
  ): PlayFabServerModels.GetPlayerCombinedInfoResult;

  /**
   * Retrieves the player's profile
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/getplayerprofile
   */
  GetPlayerProfile(
    request: PlayFabServerModels.GetPlayerProfileRequest
  ): PlayFabServerModels.GetPlayerProfileResult;

  /**
   * List all segments that a player currently belongs to at this moment in time.
   * https://docs.microsoft.com/rest/api/playfab/server/playstream/getplayersegments
   */
  GetPlayerSegments(
    request: PlayFabServerModels.GetPlayersSegmentsRequest
  ): PlayFabServerModels.GetPlayerSegmentsResult;

  /**
   * Allows for paging through all players in a given segment. This API creates a snapshot of all player profiles that match
   * the segment definition at the time of its creation and lives through the Total Seconds to Live, refreshing its life span
   * on each subsequent use of the Continuation Token. Profiles that change during the course of paging will not be reflected
   * in the results. AB Test segments are currently not supported by this operation. NOTE: This API is limited to being
   * called 30 times in one minute. You will be returned an error if you exceed this threshold.
   * https://docs.microsoft.com/rest/api/playfab/server/playstream/getplayersinsegment
   */
  GetPlayersInSegment(
    request: PlayFabServerModels.GetPlayersInSegmentRequest
  ): PlayFabServerModels.GetPlayersInSegmentResult;

  /**
   * Retrieves the current version and values for the indicated statistics, for the local player.
   * https://docs.microsoft.com/rest/api/playfab/server/player-data-management/getplayerstatistics
   */
  GetPlayerStatistics(
    request: PlayFabServerModels.GetPlayerStatisticsRequest
  ): PlayFabServerModels.GetPlayerStatisticsResult;

  GetUserStatistics(
    request: PlayFabServerModels.GetUserStatisticsRequest
  ): PlayFabServerModels.GetUserStatisticsResult;

  /**
   * Retrieves the information on the available versions of the specified statistic.
   * https://docs.microsoft.com/rest/api/playfab/server/player-data-management/getplayerstatisticversions
   */
  GetPlayerStatisticVersions(
    request: PlayFabServerModels.GetPlayerStatisticVersionsRequest
  ): PlayFabServerModels.GetPlayerStatisticVersionsResult;

  /**
   * Get all tags with a given Namespace (optional) from a player profile.
   * https://docs.microsoft.com/rest/api/playfab/server/playstream/getplayertags
   */
  GetPlayerTags(
    request: PlayFabServerModels.GetPlayerTagsRequest
  ): PlayFabServerModels.GetPlayerTagsResult;

  /**
   * Retrieves the unique PlayFab identifiers for the given set of Facebook identifiers.
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/getplayfabidsfromfacebookids
   */
  GetPlayFabIDsFromFacebookIDs(
    request: PlayFabServerModels.GetPlayFabIDsFromFacebookIDsRequest
  ): PlayFabServerModels.GetPlayFabIDsFromFacebookIDsResult;

  /**
   * Retrieves the unique PlayFab identifiers for the given set of Facebook Instant Games identifiers.
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/getplayfabidsfromfacebookinstantgamesids
   */
  GetPlayFabIDsFromFacebookInstantGamesIds(
    request: PlayFabServerModels.GetPlayFabIDsFromFacebookInstantGamesIdsRequest
  ): PlayFabServerModels.GetPlayFabIDsFromFacebookInstantGamesIdsResult;

  /**
   * Retrieves the unique PlayFab identifiers for the given set of generic service identifiers. A generic identifier is the
   * service name plus the service-specific ID for the player, as specified by the title when the generic identifier was
   * added to the player account.
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/getplayfabidsfromgenericids
   */
  GetPlayFabIDsFromGenericIDs(
    request: PlayFabServerModels.GetPlayFabIDsFromGenericIDsRequest
  ): PlayFabServerModels.GetPlayFabIDsFromGenericIDsResult;

  /**
   * Retrieves the unique PlayFab identifiers for the given set of Nintendo Switch Device identifiers.
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/getplayfabidsfromnintendoswitchdeviceids
   */
  GetPlayFabIDsFromNintendoSwitchDeviceIds(
    request: PlayFabServerModels.GetPlayFabIDsFromNintendoSwitchDeviceIdsRequest
  ): PlayFabServerModels.GetPlayFabIDsFromNintendoSwitchDeviceIdsResult;

  /**
   * Retrieves the unique PlayFab identifiers for the given set of PlayStation Network identifiers.
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/getplayfabidsfrompsnaccountids
   */
  GetPlayFabIDsFromPSNAccountIDs(
    request: PlayFabServerModels.GetPlayFabIDsFromPSNAccountIDsRequest
  ): PlayFabServerModels.GetPlayFabIDsFromPSNAccountIDsResult;

  /**
   * Retrieves the unique PlayFab identifiers for the given set of Steam identifiers. The Steam identifiers are the profile
   * IDs for the user accounts, available as SteamId in the Steamworks Community API calls.
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/getplayfabidsfromsteamids
   */
  GetPlayFabIDsFromSteamIDs(
    request: PlayFabServerModels.GetPlayFabIDsFromSteamIDsRequest
  ): PlayFabServerModels.GetPlayFabIDsFromSteamIDsResult;

  /**
   * Retrieves the unique PlayFab identifiers for the given set of XboxLive identifiers.
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/getplayfabidsfromxboxliveids
   */
  GetPlayFabIDsFromXboxLiveIDs(
    request: PlayFabServerModels.GetPlayFabIDsFromXboxLiveIDsRequest
  ): PlayFabServerModels.GetPlayFabIDsFromXboxLiveIDsResult;

  /**
   * Retrieves the key-value store of custom publisher settings
   * https://docs.microsoft.com/rest/api/playfab/server/title-wide-data-management/getpublisherdata
   */
  GetPublisherData(
    request: PlayFabServerModels.GetPublisherDataRequest
  ): PlayFabServerModels.GetPublisherDataResult;

  /**
   * Retrieves the configuration information for the specified random results tables for the title, including all ItemId
   * values and weights
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/getrandomresulttables
   */
  GetRandomResultTables(
    request: PlayFabServerModels.GetRandomResultTablesRequest
  ): PlayFabServerModels.GetRandomResultTablesResult;

  /**
   * Retrieves the associated PlayFab account identifiers for the given set of server custom identifiers.
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/getservercustomidsfromplayfabids
   */
  GetServerCustomIDsFromPlayFabIDs(
    request: PlayFabServerModels.GetServerCustomIDsFromPlayFabIDsRequest
  ): PlayFabServerModels.GetServerCustomIDsFromPlayFabIDsResult;

  /**
   * Retrieves data stored in a shared group object, as well as the list of members in the group. The server can access all
   * public and private group data. Shared Groups are designed for sharing data between a very small number of players,
   * please see our guide: https://docs.microsoft.com/gaming/playfab/features/social/groups/using-shared-group-data
   * https://docs.microsoft.com/rest/api/playfab/server/shared-group-data/getsharedgroupdata
   */
  GetSharedGroupData(
    request: PlayFabServerModels.GetSharedGroupDataRequest
  ): PlayFabServerModels.GetSharedGroupDataResult;

  /**
   * Retrieves the set of items defined for the specified store, including all prices defined, for the specified player
   * https://docs.microsoft.com/rest/api/playfab/server/title-wide-data-management/getstoreitems
   */
  GetStoreItems(
    request: PlayFabServerModels.GetStoreItemsServerRequest
  ): PlayFabServerModels.GetStoreItemsResult;

  /**
   * Retrieves the current server time
   * https://docs.microsoft.com/rest/api/playfab/server/title-wide-data-management/gettime
   */
  GetTime(
    request: PlayFabServerModels.GetTimeRequest
  ): PlayFabServerModels.GetTimeResult;

  /**
   * Retrieves the key-value store of custom title settings
   * https://docs.microsoft.com/rest/api/playfab/server/title-wide-data-management/gettitledata
   */
  GetTitleData(
    request: PlayFabServerModels.GetTitleDataRequest
  ): PlayFabServerModels.GetTitleDataResult;

  /**
   * Retrieves the key-value store of custom internal title settings
   * https://docs.microsoft.com/rest/api/playfab/server/title-wide-data-management/gettitleinternaldata
   */
  GetTitleInternalData(
    request: PlayFabServerModels.GetTitleDataRequest
  ): PlayFabServerModels.GetTitleDataResult;

  /**
   * Retrieves the title news feed, as configured in the developer portal
   * https://docs.microsoft.com/rest/api/playfab/server/title-wide-data-management/gettitlenews
   */
  GetTitleNews(
    request: PlayFabServerModels.GetTitleNewsRequest
  ): PlayFabServerModels.GetTitleNewsResult;

  /**
   * Retrieves the relevant details for a specified user
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/getuseraccountinfo
   */
  GetUserAccountInfo(
    request: PlayFabServerModels.GetUserAccountInfoRequest
  ): PlayFabServerModels.GetUserAccountInfoResult;

  /**
   * Gets all bans for a user.
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/getuserbans
   */
  GetUserBans(
    request: PlayFabServerModels.GetUserBansRequest
  ): PlayFabServerModels.GetUserBansResult;

  /**
   * Retrieves the title-specific custom data for the user which is readable and writable by the client
   * https://docs.microsoft.com/rest/api/playfab/server/player-data-management/getuserdata
   */
  GetUserData(
    request: PlayFabServerModels.GetUserDataRequest
  ): PlayFabServerModels.GetUserDataResult;

  /**
   * Retrieves the title-specific custom data for the user which cannot be accessed by the client
   * https://docs.microsoft.com/rest/api/playfab/server/player-data-management/getuserinternaldata
   */
  GetUserInternalData(
    request: PlayFabServerModels.GetUserDataRequest
  ): PlayFabServerModels.GetUserDataResult;

  /**
   * Retrieves the specified user's current inventory of virtual goods
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/getuserinventory
   */
  GetUserInventory(
    request: PlayFabServerModels.GetUserInventoryRequest
  ): PlayFabServerModels.GetUserInventoryResult;

  /**
   * Retrieves the publisher-specific custom data for the user which is readable and writable by the client
   * https://docs.microsoft.com/rest/api/playfab/server/player-data-management/getuserpublisherdata
   */
  GetUserPublisherData(
    request: PlayFabServerModels.GetUserDataRequest
  ): PlayFabServerModels.GetUserDataResult;

  /**
   * Retrieves the publisher-specific custom data for the user which cannot be accessed by the client
   * https://docs.microsoft.com/rest/api/playfab/server/player-data-management/getuserpublisherinternaldata
   */
  GetUserPublisherInternalData(
    request: PlayFabServerModels.GetUserDataRequest
  ): PlayFabServerModels.GetUserDataResult;

  /**
   * Retrieves the publisher-specific custom data for the user which can only be read by the client
   * https://docs.microsoft.com/rest/api/playfab/server/player-data-management/getuserpublisherreadonlydata
   */
  GetUserPublisherReadOnlyData(
    request: PlayFabServerModels.GetUserDataRequest
  ): PlayFabServerModels.GetUserDataResult;

  /**
   * Retrieves the title-specific custom data for the user which can only be read by the client
   * https://docs.microsoft.com/rest/api/playfab/server/player-data-management/getuserreadonlydata
   */
  GetUserReadOnlyData(
    request: PlayFabServerModels.GetUserDataRequest
  ): PlayFabServerModels.GetUserDataResult;

  /**
   * Grants the specified character type to the user. CharacterIds are not globally unique; characterId must be evaluated
   * with the parent PlayFabId to guarantee uniqueness.
   * https://docs.microsoft.com/rest/api/playfab/server/characters/grantcharactertouser
   */
  GrantCharacterToUser(
    request: PlayFabServerModels.GrantCharacterToUserRequest
  ): PlayFabServerModels.GrantCharacterToUserResult;

  /**
   * Adds the specified items to the specified character's inventory
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/grantitemstocharacter
   */
  GrantItemsToCharacter(
    request: PlayFabServerModels.GrantItemsToCharacterRequest
  ): PlayFabServerModels.GrantItemsToCharacterResult;

  /**
   * Adds the specified items to the specified user's inventory
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/grantitemstouser
   */
  GrantItemsToUser(
    request: PlayFabServerModels.GrantItemsToUserRequest
  ): PlayFabServerModels.GrantItemsToUserResult;

  /**
   * Adds the specified items to the specified user inventories
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/grantitemstousers
   */
  GrantItemsToUsers(
    request: PlayFabServerModels.GrantItemsToUsersRequest
  ): PlayFabServerModels.GrantItemsToUsersResult;

  /**
   * Links the PlayStation Network account associated with the provided access code to the user's PlayFab account
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/linkpsnaccount
   */
  LinkPSNAccount(
    request: PlayFabServerModels.LinkPSNAccountRequest
  ): PlayFabServerModels.LinkPSNAccountResult;

  /**
   * Links the custom server identifier, generated by the title, to the user's PlayFab account.
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/linkservercustomid
   */
  LinkServerCustomId(
    request: PlayFabServerModels.LinkServerCustomIdRequest
  ): PlayFabServerModels.LinkServerCustomIdResult;

  /**
   * Links the Xbox Live account associated with the provided access code to the user's PlayFab account
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/linkxboxaccount
   */
  LinkXboxAccount(
    request: PlayFabServerModels.LinkXboxAccountRequest
  ): PlayFabServerModels.LinkXboxAccountResult;

  /**
   * Securely login a game client from an external server backend using a custom identifier for that player. Server Custom ID
   * and Client Custom ID are mutually exclusive and cannot be used to retrieve the same player account.
   * https://docs.microsoft.com/rest/api/playfab/server/authentication/loginwithservercustomid
   */
  LoginWithServerCustomId(
    request: PlayFabServerModels.LoginWithServerCustomIdRequest
  ): PlayFabServerModels.ServerLoginResult;

  /**
   * Signs the user in using an Steam ID, returning a session identifier that can subsequently be used for API calls which
   * require an authenticated user
   * https://docs.microsoft.com/rest/api/playfab/server/authentication/loginwithsteamid
   */
  LoginWithSteamId(
    request: PlayFabServerModels.LoginWithSteamIdRequest
  ): PlayFabServerModels.ServerLoginResult;

  /**
   * Signs the user in using a Xbox Live Token from an external server backend, returning a session identifier that can
   * subsequently be used for API calls which require an authenticated user
   * https://docs.microsoft.com/rest/api/playfab/server/authentication/loginwithxbox
   */
  LoginWithXbox(
    request: PlayFabServerModels.LoginWithXboxRequest
  ): PlayFabServerModels.ServerLoginResult;

  /**
   * Signs the user in using an Xbox ID and Sandbox ID, returning a session identifier that can subsequently be used for API
   * calls which require an authenticated user
   * https://docs.microsoft.com/rest/api/playfab/server/authentication/loginwithxboxid
   */
  LoginWithXboxId(
    request: PlayFabServerModels.LoginWithXboxIdRequest
  ): PlayFabServerModels.ServerLoginResult;

  /**
   * Modifies the number of remaining uses of a player's inventory item
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/modifyitemuses
   */
  ModifyItemUses(
    request: PlayFabServerModels.ModifyItemUsesRequest
  ): PlayFabServerModels.ModifyItemUsesResult;

  /**
   * Moves an item from a character's inventory into another of the users's character's inventory.
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/moveitemtocharacterfromcharacter
   */
  MoveItemToCharacterFromCharacter(
    request: PlayFabServerModels.MoveItemToCharacterFromCharacterRequest
  ): PlayFabServerModels.MoveItemToCharacterFromCharacterResult;

  /**
   * Moves an item from a user's inventory into their character's inventory.
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/moveitemtocharacterfromuser
   */
  MoveItemToCharacterFromUser(
    request: PlayFabServerModels.MoveItemToCharacterFromUserRequest
  ): PlayFabServerModels.MoveItemToCharacterFromUserResult;

  /**
   * Moves an item from a character's inventory into the owning user's inventory.
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/moveitemtouserfromcharacter
   */
  MoveItemToUserFromCharacter(
    request: PlayFabServerModels.MoveItemToUserFromCharacterRequest
  ): PlayFabServerModels.MoveItemToUserFromCharacterResult;

  /**
   * Informs the PlayFab match-making service that the user specified has left the Game Server Instance
   * https://docs.microsoft.com/rest/api/playfab/server/matchmaking/notifymatchmakerplayerleft
   */
  NotifyMatchmakerPlayerLeft(
    request: PlayFabServerModels.NotifyMatchmakerPlayerLeftRequest
  ): PlayFabServerModels.NotifyMatchmakerPlayerLeftResult;

  /**
   * Adds the virtual goods associated with the coupon to the user's inventory. Coupons can be generated via the
   * Economy-&gt;Catalogs tab in the PlayFab Game Manager.
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/redeemcoupon
   */
  RedeemCoupon(
    request: PlayFabServerModels.RedeemCouponRequest
  ): PlayFabServerModels.RedeemCouponResult;

  /**
   * Validates a Game Server session ticket and returns details about the user
   * https://docs.microsoft.com/rest/api/playfab/server/matchmaking/redeemmatchmakerticket
   */
  RedeemMatchmakerTicket(
    request: PlayFabServerModels.RedeemMatchmakerTicketRequest
  ): PlayFabServerModels.RedeemMatchmakerTicketResult;

  /**
   * Set the state of the indicated Game Server Instance. Also update the heartbeat for the instance.
   * https://docs.microsoft.com/rest/api/playfab/server/matchmaking/refreshgameserverinstanceheartbeat
   */
  RefreshGameServerInstanceHeartbeat(
    request: PlayFabServerModels.RefreshGameServerInstanceHeartbeatRequest
  ): PlayFabServerModels.RefreshGameServerInstanceHeartbeatResult;

  /**
   * Inform the matchmaker that a new Game Server Instance is added.
   * https://docs.microsoft.com/rest/api/playfab/server/matchmaking/registergame
   */
  RegisterGame(
    request: PlayFabServerModels.RegisterGameRequest
  ): PlayFabServerModels.RegisterGameResponse;

  /**
   * Removes the specified friend from the the user's friend list
   * https://docs.microsoft.com/rest/api/playfab/server/friend-list-management/removefriend
   */
  RemoveFriend(
    request: PlayFabServerModels.RemoveFriendRequest
  ): PlayFabServerModels.EmptyResponse;

  /**
   * Removes the specified generic service identifier from the player's PlayFab account.
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/removegenericid
   */
  RemoveGenericID(
    request: PlayFabServerModels.RemoveGenericIDRequest
  ): PlayFabServerModels.EmptyResult;

  /**
   * Remove a given tag from a player profile. The tag's namespace is automatically generated based on the source of the tag.
   * https://docs.microsoft.com/rest/api/playfab/server/playstream/removeplayertag
   */
  RemovePlayerTag(
    request: PlayFabServerModels.RemovePlayerTagRequest
  ): PlayFabServerModels.RemovePlayerTagResult;

  /**
   * Removes users from the set of those able to update the shared data and the set of users in the group. Only users in the
   * group can remove members. If as a result of the call, zero users remain with access, the group and its associated data
   * will be deleted. Shared Groups are designed for sharing data between a very small number of players, please see our
   * guide: https://docs.microsoft.com/gaming/playfab/features/social/groups/using-shared-group-data
   * https://docs.microsoft.com/rest/api/playfab/server/shared-group-data/removesharedgroupmembers
   */
  RemoveSharedGroupMembers(
    request: PlayFabServerModels.RemoveSharedGroupMembersRequest
  ): PlayFabServerModels.RemoveSharedGroupMembersResult;

  /**
   * Submit a report about a player (due to bad bahavior, etc.) on behalf of another player, so that customer service
   * representatives for the title can take action concerning potentially toxic players.
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/reportplayer
   */
  ReportPlayer(
    request: PlayFabServerModels.ReportPlayerServerRequest
  ): PlayFabServerModels.ReportPlayerServerResult;

  /**
   * Revoke all active bans for a user.
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/revokeallbansforuser
   */
  RevokeAllBansForUser(
    request: PlayFabServerModels.RevokeAllBansForUserRequest
  ): PlayFabServerModels.RevokeAllBansForUserResult;

  /**
   * Revoke all active bans specified with BanId.
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/revokebans
   */
  RevokeBans(
    request: PlayFabServerModels.RevokeBansRequest
  ): PlayFabServerModels.RevokeBansResult;

  /**
   * Revokes access to an item in a user's inventory
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/revokeinventoryitem
   */
  RevokeInventoryItem(
    request: PlayFabServerModels.RevokeInventoryItemRequest
  ): PlayFabServerModels.RevokeInventoryResult;

  /**
   * Revokes access for up to 25 items across multiple users and characters.
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/revokeinventoryitems
   */
  RevokeInventoryItems(
    request: PlayFabServerModels.RevokeInventoryItemsRequest
  ): PlayFabServerModels.RevokeInventoryItemsResult;

  /**
   * Saves push notification template for title
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/savepushnotificationtemplate
   */
  SavePushNotificationTemplate(
    request: PlayFabServerModels.SavePushNotificationTemplateRequest
  ): PlayFabServerModels.SavePushNotificationTemplateResult;

  /**
   * Forces an email to be sent to the registered contact email address for the user's account based on an account recovery
   * email template
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/sendcustomaccountrecoveryemail
   */
  SendCustomAccountRecoveryEmail(
    request: PlayFabServerModels.SendCustomAccountRecoveryEmailRequest
  ): PlayFabServerModels.SendCustomAccountRecoveryEmailResult;

  /**
   * Sends an email based on an email template to a player's contact email
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/sendemailfromtemplate
   */
  SendEmailFromTemplate(
    request: PlayFabServerModels.SendEmailFromTemplateRequest
  ): PlayFabServerModels.SendEmailFromTemplateResult;

  /**
   * Sends an iOS/Android Push Notification to a specific user, if that user's device has been configured for Push
   * Notifications in PlayFab. If a user has linked both Android and iOS devices, both will be notified.
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/sendpushnotification
   */
  SendPushNotification(
    request: PlayFabServerModels.SendPushNotificationRequest
  ): PlayFabServerModels.SendPushNotificationResult;

  /**
   * Sends an iOS/Android Push Notification template to a specific user, if that user's device has been configured for Push
   * Notifications in PlayFab. If a user has linked both Android and iOS devices, both will be notified.
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/sendpushnotificationfromtemplate
   */
  SendPushNotificationFromTemplate(
    request: PlayFabServerModels.SendPushNotificationFromTemplateRequest
  ): PlayFabServerModels.SendPushNotificationResult;

  /**
   * Updates the tag list for a specified user in the friend list of another user
   * https://docs.microsoft.com/rest/api/playfab/server/friend-list-management/setfriendtags
   */
  SetFriendTags(
    request: PlayFabServerModels.SetFriendTagsRequest
  ): PlayFabServerModels.EmptyResponse;

  /**
   * Sets the custom data of the indicated Game Server Instance
   * https://docs.microsoft.com/rest/api/playfab/server/matchmaking/setgameserverinstancedata
   */
  SetGameServerInstanceData(
    request: PlayFabServerModels.SetGameServerInstanceDataRequest
  ): PlayFabServerModels.SetGameServerInstanceDataResult;

  /**
   * Set the state of the indicated Game Server Instance.
   * https://docs.microsoft.com/rest/api/playfab/server/matchmaking/setgameserverinstancestate
   */
  SetGameServerInstanceState(
    request: PlayFabServerModels.SetGameServerInstanceStateRequest
  ): PlayFabServerModels.SetGameServerInstanceStateResult;

  /**
   * Set custom tags for the specified Game Server Instance
   * https://docs.microsoft.com/rest/api/playfab/server/matchmaking/setgameserverinstancetags
   */
  SetGameServerInstanceTags(
    request: PlayFabServerModels.SetGameServerInstanceTagsRequest
  ): PlayFabServerModels.SetGameServerInstanceTagsResult;

  /**
   * Sets the player's secret if it is not already set. Player secrets are used to sign API requests. To reset a player's
   * secret use the Admin or Server API method SetPlayerSecret.
   * https://docs.microsoft.com/rest/api/playfab/server/authentication/setplayersecret
   */
  SetPlayerSecret(
    request: PlayFabServerModels.SetPlayerSecretRequest
  ): PlayFabServerModels.SetPlayerSecretResult;

  /**
   * Updates the key-value store of custom publisher settings
   * https://docs.microsoft.com/rest/api/playfab/server/title-wide-data-management/setpublisherdata
   */
  SetPublisherData(
    request: PlayFabServerModels.SetPublisherDataRequest
  ): PlayFabServerModels.SetPublisherDataResult;

  /**
   * Updates the key-value store of custom title settings
   * https://docs.microsoft.com/rest/api/playfab/server/title-wide-data-management/settitledata
   */
  SetTitleData(
    request: PlayFabServerModels.SetTitleDataRequest
  ): PlayFabServerModels.SetTitleDataResult;

  /**
   * Updates the key-value store of custom title settings
   * https://docs.microsoft.com/rest/api/playfab/server/title-wide-data-management/settitleinternaldata
   */
  SetTitleInternalData(
    request: PlayFabServerModels.SetTitleDataRequest
  ): PlayFabServerModels.SetTitleDataResult;

  /**
   * Decrements the character's balance of the specified virtual currency by the stated amount. It is possible to make a VC
   * balance negative with this API.
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/subtractcharactervirtualcurrency
   */
  SubtractCharacterVirtualCurrency(
    request: PlayFabServerModels.SubtractCharacterVirtualCurrencyRequest
  ): PlayFabServerModels.ModifyCharacterVirtualCurrencyResult;

  /**
   * Decrements the user's balance of the specified virtual currency by the stated amount. It is possible to make a VC
   * balance negative with this API.
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/subtractuservirtualcurrency
   */
  SubtractUserVirtualCurrency(
    request: PlayFabServerModels.SubtractUserVirtualCurrencyRequest
  ): PlayFabServerModels.ModifyUserVirtualCurrencyResult;

  /**
   * Unlinks the related PSN account from the user's PlayFab account
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/unlinkpsnaccount
   */
  UnlinkPSNAccount(
    request: PlayFabServerModels.UnlinkPSNAccountRequest
  ): PlayFabServerModels.UnlinkPSNAccountResult;

  /**
   * Unlinks the custom server identifier from the user's PlayFab account.
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/unlinkservercustomid
   */
  UnlinkServerCustomId(
    request: PlayFabServerModels.UnlinkServerCustomIdRequest
  ): PlayFabServerModels.UnlinkServerCustomIdResult;

  /**
   * Unlinks the related Xbox Live account from the user's PlayFab account
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/unlinkxboxaccount
   */
  UnlinkXboxAccount(
    request: PlayFabServerModels.UnlinkXboxAccountRequest
  ): PlayFabServerModels.UnlinkXboxAccountResult;

  /**
   * Opens a specific container (ContainerItemInstanceId), with a specific key (KeyItemInstanceId, when required), and
   * returns the contents of the opened container. If the container (and key when relevant) are consumable (RemainingUses &gt;
   * 0), their RemainingUses will be decremented, consistent with the operation of ConsumeItem.
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/unlockcontainerinstance
   */
  UnlockContainerInstance(
    request: PlayFabServerModels.UnlockContainerInstanceRequest
  ): PlayFabServerModels.UnlockContainerItemResult;

  /**
   * Searches Player or Character inventory for any ItemInstance matching the given CatalogItemId, if necessary unlocks it
   * using any appropriate key, and returns the contents of the opened container. If the container (and key when relevant)
   * are consumable (RemainingUses &gt; 0), their RemainingUses will be decremented, consistent with the operation of
   * ConsumeItem.
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/unlockcontaineritem
   */
  UnlockContainerItem(
    request: PlayFabServerModels.UnlockContainerItemRequest
  ): PlayFabServerModels.UnlockContainerItemResult;

  /**
   * Update the avatar URL of the specified player
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/updateavatarurl
   */
  UpdateAvatarUrl(
    request: PlayFabServerModels.UpdateAvatarUrlRequest
  ): PlayFabServerModels.EmptyResponse;

  /**
   * Updates information of a list of existing bans specified with Ban Ids.
   * https://docs.microsoft.com/rest/api/playfab/server/account-management/updatebans
   */
  UpdateBans(
    request: PlayFabServerModels.UpdateBansRequest
  ): PlayFabServerModels.UpdateBansResult;

  /**
   * Updates the title-specific custom data for the user's character which is readable and writable by the client
   * https://docs.microsoft.com/rest/api/playfab/server/character-data/updatecharacterdata
   */
  UpdateCharacterData(
    request: PlayFabServerModels.UpdateCharacterDataRequest
  ): PlayFabServerModels.UpdateCharacterDataResult;

  /**
   * Updates the title-specific custom data for the user's character which cannot be accessed by the client
   * https://docs.microsoft.com/rest/api/playfab/server/character-data/updatecharacterinternaldata
   */
  UpdateCharacterInternalData(
    request: PlayFabServerModels.UpdateCharacterDataRequest
  ): PlayFabServerModels.UpdateCharacterDataResult;

  /**
   * Updates the title-specific custom data for the user's character which can only be read by the client
   * https://docs.microsoft.com/rest/api/playfab/server/character-data/updatecharacterreadonlydata
   */
  UpdateCharacterReadOnlyData(
    request: PlayFabServerModels.UpdateCharacterDataRequest
  ): PlayFabServerModels.UpdateCharacterDataResult;

  /**
   * Updates the values of the specified title-specific statistics for the specific character
   * https://docs.microsoft.com/rest/api/playfab/server/characters/updatecharacterstatistics
   */
  UpdateCharacterStatistics(
    request: PlayFabServerModels.UpdateCharacterStatisticsRequest
  ): PlayFabServerModels.UpdateCharacterStatisticsResult;

  /**
   * Updates the values of the specified title-specific statistics for the user
   * https://docs.microsoft.com/rest/api/playfab/server/player-data-management/updateplayerstatistics
   */
  UpdatePlayerStatistics(
    request: PlayFabServerModels.UpdatePlayerStatisticsRequest
  ): PlayFabServerModels.UpdatePlayerStatisticsResult;

  UpdateUserStatistics(
    request: PlayFabServerModels.UpdateUserStatisticsRequest
  ): PlayFabServerModels.UpdatePlayerStatisticsResult;

  /**
   * Adds, updates, and removes data keys for a shared group object. If the permission is set to Public, all fields updated
   * or added in this call will be readable by users not in the group. By default, data permissions are set to Private.
   * Regardless of the permission setting, only members of the group (and the server) can update the data. Shared Groups are
   * designed for sharing data between a very small number of players, please see our guide:
   * https://docs.microsoft.com/gaming/playfab/features/social/groups/using-shared-group-data
   * https://docs.microsoft.com/rest/api/playfab/server/shared-group-data/updatesharedgroupdata
   */
  UpdateSharedGroupData(
    request: PlayFabServerModels.UpdateSharedGroupDataRequest
  ): PlayFabServerModels.UpdateSharedGroupDataResult;

  /**
   * Updates the title-specific custom data for the user which is readable and writable by the client
   * https://docs.microsoft.com/rest/api/playfab/server/player-data-management/updateuserdata
   */
  UpdateUserData(
    request: PlayFabServerModels.UpdateUserDataRequest
  ): PlayFabServerModels.UpdateUserDataResult;

  /**
   * Updates the title-specific custom data for the user which cannot be accessed by the client
   * https://docs.microsoft.com/rest/api/playfab/server/player-data-management/updateuserinternaldata
   */
  UpdateUserInternalData(
    request: PlayFabServerModels.UpdateUserInternalDataRequest
  ): PlayFabServerModels.UpdateUserDataResult;

  /**
   * Updates the key-value pair data tagged to the specified item, which is read-only from the client.
   * https://docs.microsoft.com/rest/api/playfab/server/player-item-management/updateuserinventoryitemcustomdata
   */
  UpdateUserInventoryItemCustomData(
    request: PlayFabServerModels.UpdateUserInventoryItemDataRequest
  ): PlayFabServerModels.EmptyResponse;

  /**
   * Updates the publisher-specific custom data for the user which is readable and writable by the client
   * https://docs.microsoft.com/rest/api/playfab/server/player-data-management/updateuserpublisherdata
   */
  UpdateUserPublisherData(
    request: PlayFabServerModels.UpdateUserDataRequest
  ): PlayFabServerModels.UpdateUserDataResult;

  /**
   * Updates the publisher-specific custom data for the user which cannot be accessed by the client
   * https://docs.microsoft.com/rest/api/playfab/server/player-data-management/updateuserpublisherinternaldata
   */
  UpdateUserPublisherInternalData(
    request: PlayFabServerModels.UpdateUserInternalDataRequest
  ): PlayFabServerModels.UpdateUserDataResult;

  /**
   * Updates the publisher-specific custom data for the user which can only be read by the client
   * https://docs.microsoft.com/rest/api/playfab/server/player-data-management/updateuserpublisherreadonlydata
   */
  UpdateUserPublisherReadOnlyData(
    request: PlayFabServerModels.UpdateUserDataRequest
  ): PlayFabServerModels.UpdateUserDataResult;

  /**
   * Updates the title-specific custom data for the user which can only be read by the client
   * https://docs.microsoft.com/rest/api/playfab/server/player-data-management/updateuserreadonlydata
   */
  UpdateUserReadOnlyData(
    request: PlayFabServerModels.UpdateUserDataRequest
  ): PlayFabServerModels.UpdateUserDataResult;

  /**
   * Writes a character-based event into PlayStream.
   * https://docs.microsoft.com/rest/api/playfab/server/analytics/writecharacterevent
   */
  WriteCharacterEvent(
    request: PlayFabServerModels.WriteServerCharacterEventRequest
  ): PlayFabServerModels.WriteEventResponse;

  /**
   * Writes a player-based event into PlayStream.
   * https://docs.microsoft.com/rest/api/playfab/server/analytics/writeplayerevent
   */
  WritePlayerEvent(
    request: PlayFabServerModels.WriteServerPlayerEventRequest
  ): PlayFabServerModels.WriteEventResponse;

  /**
   * Writes a title-based event into PlayStream.
   * https://docs.microsoft.com/rest/api/playfab/server/analytics/writetitleevent
   */
  WriteTitleEvent(
    request: PlayFabServerModels.WriteTitleEventRequest
  ): PlayFabServerModels.WriteEventResponse;
}

/** AuthenticationAPI.Models as interfaces */
declare namespace PlayFabAuthenticationModels {
  /** Combined entity type and ID structure which uniquely identifies a single entity. */
  interface EntityKey {
    /** Unique ID of the entity. */
    Id: string;
    /** Entity type. See https://docs.microsoft.com/gaming/playfab/features/data/entities/available-built-in-entity-types */
    Type?: string;
  }

  interface EntityLineage {
    /** The Character Id of the associated entity. */
    CharacterId?: string;
    /** The Group Id of the associated entity. */
    GroupId?: string;
    /** The Master Player Account Id of the associated entity. */
    MasterPlayerAccountId?: string;
    /** The Namespace Id of the associated entity. */
    NamespaceId?: string;
    /** The Title Id of the associated entity. */
    TitleId?: string;
    /** The Title Player Account Id of the associated entity. */
    TitlePlayerAccountId?: string;
  }

  /**
   * This API must be called with X-SecretKey, X-Authentication or X-EntityToken headers. An optional EntityKey may be
   * included to attempt to set the resulting EntityToken to a specific entity, however the entity must be a relation of the
   * caller, such as the master_player_account of a character. If sending X-EntityToken the account will be marked as freshly
   * logged in and will issue a new token. If using X-Authentication or X-EntityToken the header must still be valid and
   * cannot be expired or revoked.
   */
  interface GetEntityTokenRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The entity to perform this action on. */
    Entity?: EntityKey;
  }

  interface GetEntityTokenResponse {
    /** The entity id and type. */
    Entity?: EntityKey;
    /** The token used to set X-EntityToken for all entity based API calls. */
    EntityToken?: string;
    /** The time the token will expire, if it is an expiring token, in UTC. */
    TokenExpiration?: string;
  }

  type IdentifiedDeviceType = "Unknown" | "XboxOne" | "Scarlett";

  type LoginIdentityProvider =
    | "Unknown"
    | "PlayFab"
    | "Custom"
    | "GameCenter"
    | "GooglePlay"
    | "Steam"
    | "XBoxLive"
    | "PSN"
    | "Kongregate"
    | "Facebook"
    | "IOSDevice"
    | "AndroidDevice"
    | "Twitch"
    | "WindowsHello"
    | "GameServer"
    | "CustomServer"
    | "NintendoSwitch"
    | "FacebookInstantGames"
    | "OpenIdConnect"
    | "Apple"
    | "NintendoSwitchAccount";

  /** Given an entity token, validates that it hasn't expired or been revoked and will return details of the owner. */
  interface ValidateEntityTokenRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Client EntityToken */
    EntityToken: string;
  }

  interface ValidateEntityTokenResponse {
    /** The entity id and type. */
    Entity?: EntityKey;
    /** The authenticated device for this entity, for the given login */
    IdentifiedDeviceType?: IdentifiedDeviceType;
    /** The identity provider for this entity, for the given login */
    IdentityProvider?: LoginIdentityProvider;
    /** The ID issued by the identity provider, e.g. a XUID on Xbox Live */
    IdentityProviderIssuedId?: string;
    /** The lineage of this profile. */
    Lineage?: EntityLineage;
  }
}
/** DataAPI.Models as interfaces */
declare namespace PlayFabDataModels {
  /** Aborts the pending upload of the requested files. */
  interface AbortFileUploadsRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The entity to perform this action on. */
    Entity: EntityKey;
    /** Names of the files to have their pending uploads aborted. */
    FileNames: string[];
    /**
     * The expected version of the profile, if set and doesn't match the current version of the profile the operation will not
     * be performed.
     */
    ProfileVersion?: number;
  }

  interface AbortFileUploadsResponse {
    /** The entity id and type. */
    Entity?: EntityKey;
    /** The current version of the profile, can be used for concurrency control during updates. */
    ProfileVersion: number;
  }

  /** Deletes the requested files from the entity's profile. */
  interface DeleteFilesRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The entity to perform this action on. */
    Entity: EntityKey;
    /** Names of the files to be deleted. */
    FileNames: string[];
    /**
     * The expected version of the profile, if set and doesn't match the current version of the profile the operation will not
     * be performed.
     */
    ProfileVersion?: number;
  }

  interface DeleteFilesResponse {
    /** The entity id and type. */
    Entity?: EntityKey;
    /** The current version of the profile, can be used for concurrency control during updates. */
    ProfileVersion: number;
  }

  /** Combined entity type and ID structure which uniquely identifies a single entity. */
  interface EntityKey {
    /** Unique ID of the entity. */
    Id: string;
    /** Entity type. See https://docs.microsoft.com/gaming/playfab/features/data/entities/available-built-in-entity-types */
    Type?: string;
  }

  /**
   * Finalizes the upload of the requested files. Verifies that the files have been successfully uploaded and moves the file
   * pointers from pending to live.
   */
  interface FinalizeFileUploadsRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The entity to perform this action on. */
    Entity: EntityKey;
    /** Names of the files to be finalized. Restricted to a-Z, 0-9, '(', ')', '_', '-' and '.' */
    FileNames: string[];
    /** The current version of the profile, can be used for concurrency control during updates. */
    ProfileVersion: number;
  }

  interface FinalizeFileUploadsResponse {
    /** The entity id and type. */
    Entity?: EntityKey;
    /** Collection of metadata for the entity's files */
    Metadata?: { [key: string]: GetFileMetadata };
    /** The current version of the profile, can be used for concurrency control during updates. */
    ProfileVersion: number;
  }

  interface GetFileMetadata {
    /** Checksum value for the file, can be used to check if the file on the server has changed. */
    Checksum?: string;
    /** Download URL where the file can be retrieved */
    DownloadUrl?: string;
    /** Name of the file */
    FileName?: string;
    /** Last UTC time the file was modified */
    LastModified: string;
    /** Storage service's reported byte count */
    Size: number;
  }

  /**
   * Returns URLs that may be used to download the files for a profile for a limited length of time. Only returns files that
   * have been successfully uploaded, files that are still pending will either return the old value, if it exists, or
   * nothing.
   */
  interface GetFilesRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The entity to perform this action on. */
    Entity: EntityKey;
  }

  interface GetFilesResponse {
    /** The entity id and type. */
    Entity?: EntityKey;
    /** Collection of metadata for the entity's files */
    Metadata?: { [key: string]: GetFileMetadata };
    /** The current version of the profile, can be used for concurrency control during updates. */
    ProfileVersion: number;
  }

  /** Gets JSON objects from an entity profile and returns it. */
  interface GetObjectsRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The entity to perform this action on. */
    Entity: EntityKey;
    /**
     * Determines whether the object will be returned as an escaped JSON string or as a un-escaped JSON object. Default is JSON
     * object.
     */
    EscapeObject?: boolean;
  }

  interface GetObjectsResponse {
    /** The entity id and type. */
    Entity?: EntityKey;
    /** Requested objects that the calling entity has access to */
    Objects?: { [key: string]: ObjectResult };
    /** The current version of the profile, can be used for concurrency control during updates. */
    ProfileVersion: number;
  }

  interface InitiateFileUploadMetadata {
    /** Name of the file. */
    FileName?: string;
    /** Location the data should be sent to via an HTTP PUT operation. */
    UploadUrl?: string;
  }

  /**
   * Returns URLs that may be used to upload the files for a profile 5 minutes. After using the upload calls
   * FinalizeFileUploads must be called to move the file status from pending to live.
   */
  interface InitiateFileUploadsRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The entity to perform this action on. */
    Entity: EntityKey;
    /** Names of the files to be set. Restricted to a-Z, 0-9, '(', ')', '_', '-' and '.' */
    FileNames: string[];
    /**
     * The expected version of the profile, if set and doesn't match the current version of the profile the operation will not
     * be performed.
     */
    ProfileVersion?: number;
  }

  interface InitiateFileUploadsResponse {
    /** The entity id and type. */
    Entity?: EntityKey;
    /** The current version of the profile, can be used for concurrency control during updates. */
    ProfileVersion: number;
    /** Collection of file names and upload urls */
    UploadDetails?: InitiateFileUploadMetadata[];
  }

  interface ObjectResult {
    /** Un-escaped JSON object, if EscapeObject false or default. */
    DataObject?: any;
    /** Escaped string JSON body of the object, if EscapeObject is true. */
    EscapedDataObject?: string;
    /** Name of the object. Restricted to a-Z, 0-9, '(', ')', '_', '-' and '.' */
    ObjectName?: string;
  }

  type OperationTypes = "Created" | "Updated" | "Deleted" | "None";

  interface SetObject {
    /**
     * Body of the object to be saved. If empty and DeleteObject is true object will be deleted if it exists, or no operation
     * will occur if it does not exist. Only one of Object or EscapedDataObject fields may be used.
     */
    DataObject?: any;
    /** Flag to indicate that this object should be deleted. Both DataObject and EscapedDataObject must not be set as well. */
    DeleteObject?: boolean;
    /**
     * Body of the object to be saved as an escaped JSON string. If empty and DeleteObject is true object will be deleted if it
     * exists, or no operation will occur if it does not exist. Only one of DataObject or EscapedDataObject fields may be used.
     */
    EscapedDataObject?: string;
    /** Name of object. Restricted to a-Z, 0-9, '(', ')', '_', '-' and '.'. */
    ObjectName: string;
  }

  interface SetObjectInfo {
    /** Name of the object */
    ObjectName?: string;
    /** Optional reason to explain why the operation was the result that it was. */
    OperationReason?: string;
    /** Indicates which operation was completed, either Created, Updated, Deleted or None. */
    SetResult?: OperationTypes;
  }

  /**
   * Sets JSON objects on the requested entity profile. May include a version number to be used to perform optimistic
   * concurrency operations during update. If the current version differs from the version in the request the request will be
   * ignored. If no version is set on the request then the value will always be updated if the values differ. Using the
   * version value does not guarantee a write though, ConcurrentEditError may still occur if multiple clients are attempting
   * to update the same profile.
   */
  interface SetObjectsRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The entity to perform this action on. */
    Entity: EntityKey;
    /**
     * Optional field used for concurrency control. By specifying the previously returned value of ProfileVersion from
     * GetProfile API, you can ensure that the object set will only be performed if the profile has not been updated by any
     * other clients since the version you last loaded.
     */
    ExpectedProfileVersion?: number;
    /** Collection of objects to set on the profile. */
    Objects: SetObject[];
  }

  interface SetObjectsResponse {
    /** New version of the entity profile. */
    ProfileVersion: number;
    /** New version of the entity profile. */
    SetResults?: SetObjectInfo[];
  }
}
/** EventsAPI.Models as interfaces */
declare namespace PlayFabEventsModels {
  /** Combined entity type and ID structure which uniquely identifies a single entity. */
  interface EntityKey {
    /** Unique ID of the entity. */
    Id: string;
    /** Entity type. See https://docs.microsoft.com/gaming/playfab/features/data/entities/available-built-in-entity-types */
    Type?: string;
  }

  interface EventContents {
    /**
     * The optional custom tags associated with the event (e.g. build number, external trace identifiers, etc.). Before an
     * event is written, this collection and the base request custom tags will be merged, but not overriden. This enables the
     * caller to specify static tags and per event tags.
     */
    CustomTags?: { [key: string]: string | null };
    /** Entity associated with the event. If null, the event will apply to the calling entity. */
    Entity?: EntityKey;
    /** The namespace in which the event is defined. Allowed namespaces can vary by API. */
    EventNamespace: string;
    /** The name of this event. */
    Name: string;
    /**
     * The original unique identifier associated with this event before it was posted to PlayFab. The value might differ from
     * the EventId value, which is assigned when the event is received by the server.
     */
    OriginalId?: string;
    /**
     * The time (in UTC) associated with this event when it occurred. If specified, this value is stored in the
     * OriginalTimestamp property of the PlayStream event.
     */
    OriginalTimestamp?: string;
    /** Arbitrary data associated with the event. Only one of Payload or PayloadJSON is allowed. */
    Payload?: any;
    /**
     * Arbitrary data associated with the event, represented as a JSON serialized string. Only one of Payload or PayloadJSON is
     * allowed.
     */
    PayloadJSON?: string;
  }

  interface WriteEventsRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Collection of events to write to PlayStream. */
    Events: EventContents[];
  }

  interface WriteEventsResponse {
    /**
     * The unique identifiers assigned by the server to the events, in the same order as the events in the request. Only
     * returned if FlushToPlayStream option is true.
     */
    AssignedEventIds?: string[];
  }
}
/** GroupsAPI.Models as interfaces */
declare namespace PlayFabGroupsModels {
  /**
   * Accepts an outstanding invitation to to join a group if the invited entity is not blocked by the group. Nothing is
   * returned in the case of success.
   */
  interface AcceptGroupApplicationRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /**
     * Type of the entity to accept as. Must be the same entity as the claimant or an entity that is a child of the claimant
     * entity.
     */
    Entity: EntityKey;
    /** The identifier of the group */
    Group: EntityKey;
  }

  /**
   * Accepts an outstanding invitation to join the group if the invited entity is not blocked by the group. Only the invited
   * entity or a parent in its chain (e.g. title) may accept the invitation on the invited entity's behalf. Nothing is
   * returned in the case of success.
   */
  interface AcceptGroupInvitationRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The entity to perform this action on. */
    Entity?: EntityKey;
    /** The identifier of the group */
    Group: EntityKey;
  }

  /**
   * Adds members to a group or role. Existing members of the group will added to roles within the group, but if the user is
   * not already a member of the group, only title claimants may add them to the group, and others must use the group
   * application or invite system to add new members to a group. Returns nothing if successful.
   */
  interface AddMembersRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The identifier of the group */
    Group: EntityKey;
    /** List of entities to add to the group. Only entities of type title_player_account and character may be added to groups. */
    Members: EntityKey[];
    /**
     * Optional: The ID of the existing role to add the entities to. If this is not specified, the default member role for the
     * group will be used. Role IDs must be between 1 and 64 characters long.
     */
    RoleId?: string;
  }

  /**
   * Creates an application to join a group. Calling this while a group application already exists will return the same
   * application instead of an error and will not refresh the time before the application expires. By default, if the entity
   * has an invitation to join the group outstanding, this will accept the invitation to join the group instead and return an
   * error indicating such, rather than creating a duplicate application to join that will need to be cleaned up later.
   * Returns information about the application or an error indicating an invitation was accepted instead.
   */
  interface ApplyToGroupRequest {
    /** Optional, default true. Automatically accept an outstanding invitation if one exists instead of creating an application */
    AutoAcceptOutstandingInvite?: boolean;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The entity to perform this action on. */
    Entity?: EntityKey;
    /** The identifier of the group */
    Group: EntityKey;
  }

  /** Describes an application to join a group */
  interface ApplyToGroupResponse {
    /** Type of entity that requested membership */
    Entity?: EntityWithLineage;
    /** When the application to join will expire and be deleted */
    Expires: string;
    /** ID of the group that the entity requesting membership to */
    Group?: EntityKey;
  }

  /**
   * Blocks a list of entities from joining a group. Blocked entities may not create new applications to join, be invited to
   * join, accept an invitation, or have an application accepted. Failure due to being blocked does not clean up existing
   * applications or invitations to the group. No data is returned in the case of success.
   */
  interface BlockEntityRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The entity to perform this action on. */
    Entity: EntityKey;
    /** The identifier of the group */
    Group: EntityKey;
  }

  /**
   * Changes the role membership of a list of entities from one role to another in in a single operation. The destination
   * role must already exist. This is equivalent to adding the entities to the destination role and removing from the origin
   * role. Returns nothing if successful.
   */
  interface ChangeMemberRoleRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /**
     * The ID of the role that the entities will become a member of. This must be an existing role. Role IDs must be between 1
     * and 64 characters long.
     */
    DestinationRoleId?: string;
    /** The identifier of the group */
    Group: EntityKey;
    /**
     * List of entities to move between roles in the group. All entities in this list must be members of the group and origin
     * role.
     */
    Members: EntityKey[];
    /** The ID of the role that the entities currently are a member of. Role IDs must be between 1 and 64 characters long. */
    OriginRoleId: string;
  }

  /**
   * Creates a new group, as well as administration and member roles, based off of a title's group template. Returns
   * information about the group that was created.
   */
  interface CreateGroupRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The entity to perform this action on. */
    Entity?: EntityKey;
    /** The name of the group. This is unique at the title level by default. */
    GroupName: string;
  }

  interface CreateGroupResponse {
    /** The ID of the administrator role for the group. */
    AdminRoleId?: string;
    /** The server date and time the group was created. */
    Created: string;
    /** The identifier of the group */
    Group: EntityKey;
    /** The name of the group. */
    GroupName?: string;
    /** The ID of the default member role for the group. */
    MemberRoleId?: string;
    /** The current version of the profile, can be used for concurrency control during updates. */
    ProfileVersion: number;
    /** The list of roles and names that belong to the group. */
    Roles?: { [key: string]: string | null };
  }

  /**
   * Creates a new role within an existing group, with no members. Both the role ID and role name must be unique within the
   * group, but the name can be the same as the ID. The role ID is set at creation and cannot be changed. Returns information
   * about the role that was created.
   */
  interface CreateGroupRoleRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The identifier of the group */
    Group: EntityKey;
    /**
     * The ID of the role. This must be unique within the group and cannot be changed. Role IDs must be between 1 and 64
     * characters long.
     */
    RoleId: string;
    /**
     * The name of the role. This must be unique within the group and can be changed later. Role names must be between 1 and
     * 100 characters long
     */
    RoleName: string;
  }

  interface CreateGroupRoleResponse {
    /** The current version of the group profile, can be used for concurrency control during updates. */
    ProfileVersion: number;
    /** ID for the role */
    RoleId?: string;
    /** The name of the role */
    RoleName?: string;
  }

  /**
   * Deletes a group and all roles, invitations, join requests, and blocks associated with it. Permission to delete is only
   * required the group itself to execute this action. The group and data cannot be cannot be recovered once removed, but any
   * abuse reports about the group will remain. No data is returned in the case of success.
   */
  interface DeleteGroupRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** ID of the group or role to remove */
    Group: EntityKey;
  }

  /** Returns information about the role */
  interface DeleteRoleRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The identifier of the group */
    Group: EntityKey;
    /** The ID of the role to delete. Role IDs must be between 1 and 64 characters long. */
    RoleId?: string;
  }

  interface EmptyResponse {}

  /** Combined entity type and ID structure which uniquely identifies a single entity. */
  interface EntityKey {
    /** Unique ID of the entity. */
    Id: string;
    /** Entity type. See https://docs.microsoft.com/gaming/playfab/features/data/entities/available-built-in-entity-types */
    Type?: string;
  }

  interface EntityMemberRole {
    /** The list of members in the role */
    Members?: EntityWithLineage[];
    /** The ID of the role. */
    RoleId?: string;
    /** The name of the role */
    RoleName?: string;
  }

  /** Entity wrapper class that contains the entity key and the entities that make up the lineage of the entity. */
  interface EntityWithLineage {
    /** The entity key for the specified entity */
    Key?: EntityKey;
    /** Dictionary of entity keys for related entities. Dictionary key is entity type. */
    Lineage?: { [key: string]: EntityKey };
  }

  /** Returns the ID, name, role list and other non-membership related information about a group. */
  interface GetGroupRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The identifier of the group */
    Group?: EntityKey;
    /** The full name of the group */
    GroupName?: string;
  }

  interface GetGroupResponse {
    /** The ID of the administrator role for the group. */
    AdminRoleId?: string;
    /** The server date and time the group was created. */
    Created: string;
    /** The identifier of the group */
    Group: EntityKey;
    /** The name of the group. */
    GroupName?: string;
    /** The ID of the default member role for the group. */
    MemberRoleId?: string;
    /** The current version of the profile, can be used for concurrency control during updates. */
    ProfileVersion: number;
    /** The list of roles and names that belong to the group. */
    Roles?: { [key: string]: string | null };
  }

  /** Describes an application to join a group */
  interface GroupApplication {
    /** Type of entity that requested membership */
    Entity?: EntityWithLineage;
    /** When the application to join will expire and be deleted */
    Expires: string;
    /** ID of the group that the entity requesting membership to */
    Group?: EntityKey;
  }

  /** Describes an entity that is blocked from joining a group. */
  interface GroupBlock {
    /** The entity that is blocked */
    Entity?: EntityWithLineage;
    /** ID of the group that the entity is blocked from */
    Group: EntityKey;
  }

  /** Describes an invitation to a group. */
  interface GroupInvitation {
    /** When the invitation will expire and be deleted */
    Expires: string;
    /** The group that the entity invited to */
    Group?: EntityKey;
    /** The entity that created the invitation */
    InvitedByEntity?: EntityWithLineage;
    /** The entity that is invited */
    InvitedEntity?: EntityWithLineage;
    /** ID of the role in the group to assign the user to. */
    RoleId?: string;
  }

  /** Describes a group role */
  interface GroupRole {
    /** ID for the role */
    RoleId?: string;
    /** The name of the role */
    RoleName?: string;
  }

  /** Describes a group and the roles that it contains */
  interface GroupWithRoles {
    /** ID for the group */
    Group?: EntityKey;
    /** The name of the group */
    GroupName?: string;
    /** The current version of the profile, can be used for concurrency control during updates. */
    ProfileVersion: number;
    /** The list of roles within the group */
    Roles?: GroupRole[];
  }

  /**
   * Invites a player to join a group, if they are not blocked by the group. An optional role can be provided to
   * automatically assign the player to the role if they accept the invitation. By default, if the entity has an application
   * to the group outstanding, this will accept the application instead and return an error indicating such, rather than
   * creating a duplicate invitation to join that will need to be cleaned up later. Returns information about the new
   * invitation or an error indicating an existing application to join was accepted.
   */
  interface InviteToGroupRequest {
    /** Optional, default true. Automatically accept an application if one exists instead of creating an invitation */
    AutoAcceptOutstandingApplication?: boolean;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The entity to perform this action on. */
    Entity: EntityKey;
    /** The identifier of the group */
    Group: EntityKey;
    /**
     * Optional. ID of an existing a role in the group to assign the user to. The group's default member role is used if this
     * is not specified. Role IDs must be between 1 and 64 characters long.
     */
    RoleId?: string;
  }

  /** Describes an invitation to a group. */
  interface InviteToGroupResponse {
    /** When the invitation will expire and be deleted */
    Expires: string;
    /** The group that the entity invited to */
    Group?: EntityKey;
    /** The entity that created the invitation */
    InvitedByEntity?: EntityWithLineage;
    /** The entity that is invited */
    InvitedEntity?: EntityWithLineage;
    /** ID of the role in the group to assign the user to. */
    RoleId?: string;
  }

  /**
   * Checks to see if an entity is a member of a group or role within the group. A result indicating if the entity is a
   * member of the group is returned, or a permission error if the caller does not have permission to read the group's member
   * list.
   */
  interface IsMemberRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The entity to perform this action on. */
    Entity: EntityKey;
    /** The identifier of the group */
    Group: EntityKey;
    /**
     * Optional: ID of the role to check membership of. Defaults to any role (that is, check to see if the entity is a member
     * of the group in any capacity) if not specified.
     */
    RoleId?: string;
  }

  interface IsMemberResponse {
    /** A value indicating whether or not the entity is a member. */
    IsMember: boolean;
  }

  /**
   * Lists all outstanding requests to join a group. Returns a list of all requests to join, as well as when the request will
   * expire. To get the group applications for a specific entity, use ListMembershipOpportunities.
   */
  interface ListGroupApplicationsRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The identifier of the group */
    Group: EntityKey;
  }

  interface ListGroupApplicationsResponse {
    /** The requested list of applications to the group. */
    Applications?: GroupApplication[];
  }

  /** Lists all entities blocked from joining a group. A list of blocked entities is returned */
  interface ListGroupBlocksRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The identifier of the group */
    Group: EntityKey;
  }

  interface ListGroupBlocksResponse {
    /** The requested list blocked entities. */
    BlockedEntities?: GroupBlock[];
  }

  /**
   * Lists all outstanding invitations for a group. Returns a list of entities that have been invited, as well as when the
   * invitation will expire. To get the group invitations for a specific entity, use ListMembershipOpportunities.
   */
  interface ListGroupInvitationsRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The identifier of the group */
    Group: EntityKey;
  }

  interface ListGroupInvitationsResponse {
    /** The requested list of group invitations. */
    Invitations?: GroupInvitation[];
  }

  /**
   * Gets a list of members and the roles they belong to within the group. If the caller does not have permission to view the
   * role, and the member is in no other role, the member is not displayed. Returns a list of entities that are members of
   * the group.
   */
  interface ListGroupMembersRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** ID of the group to list the members and roles for */
    Group: EntityKey;
  }

  interface ListGroupMembersResponse {
    /** The requested list of roles and member entity IDs. */
    Members?: EntityMemberRole[];
  }

  /**
   * Lists all outstanding group applications and invitations for an entity. Anyone may call this for any entity, but data
   * will only be returned for the entity or a parent of that entity. To list invitations or applications for a group to
   * check if a player is trying to join, use ListGroupInvitations and ListGroupApplications.
   */
  interface ListMembershipOpportunitiesRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The entity to perform this action on. */
    Entity?: EntityKey;
  }

  interface ListMembershipOpportunitiesResponse {
    /** The requested list of group applications. */
    Applications?: GroupApplication[];
    /** The requested list of group invitations. */
    Invitations?: GroupInvitation[];
  }

  /**
   * Lists the groups and roles that an entity is a part of, checking to see if group and role metadata and memberships
   * should be visible to the caller. If the entity is not in any roles that are visible to the caller, the group is not
   * returned in the results, even if the caller otherwise has permission to see that the entity is a member of that group.
   */
  interface ListMembershipRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The entity to perform this action on. */
    Entity?: EntityKey;
  }

  interface ListMembershipResponse {
    /** The list of groups */
    Groups?: GroupWithRoles[];
  }

  type OperationTypes = "Created" | "Updated" | "Deleted" | "None";

  /**
   * Removes an existing application to join the group. This is used for both rejection of an application as well as
   * withdrawing an application. The applying entity or a parent in its chain (e.g. title) may withdraw the application, and
   * any caller with appropriate access in the group may reject an application. No data is returned in the case of success.
   */
  interface RemoveGroupApplicationRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The entity to perform this action on. */
    Entity: EntityKey;
    /** The identifier of the group */
    Group: EntityKey;
  }

  /**
   * Removes an existing invitation to join the group. This is used for both rejection of an invitation as well as rescinding
   * an invitation. The invited entity or a parent in its chain (e.g. title) may reject the invitation by calling this
   * method, and any caller with appropriate access in the group may rescind an invitation. No data is returned in the case
   * of success.
   */
  interface RemoveGroupInvitationRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The entity to perform this action on. */
    Entity: EntityKey;
    /** The identifier of the group */
    Group: EntityKey;
  }

  /**
   * Removes members from a group. A member can always remove themselves from a group, regardless of permissions. Returns
   * nothing if successful.
   */
  interface RemoveMembersRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The identifier of the group */
    Group: EntityKey;
    /** List of entities to remove */
    Members: EntityKey[];
    /** The ID of the role to remove the entities from. */
    RoleId?: string;
  }

  /** Unblocks a list of entities from joining a group. No data is returned in the case of success. */
  interface UnblockEntityRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The entity to perform this action on. */
    Entity: EntityKey;
    /** The identifier of the group */
    Group: EntityKey;
  }

  /**
   * Updates data about a group, such as the name or default member role. Returns information about whether the update was
   * successful. Only title claimants may modify the administration role for a group.
   */
  interface UpdateGroupRequest {
    /** Optional: the ID of an existing role to set as the new administrator role for the group */
    AdminRoleId?: string;
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /**
     * Optional field used for concurrency control. By specifying the previously returned value of ProfileVersion from the
     * GetGroup API, you can ensure that the group data update will only be performed if the group has not been updated by any
     * other clients since the version you last loaded.
     */
    ExpectedProfileVersion?: number;
    /** The identifier of the group */
    Group: EntityKey;
    /** Optional: the new name of the group */
    GroupName?: string;
    /** Optional: the ID of an existing role to set as the new member role for the group */
    MemberRoleId?: string;
  }

  interface UpdateGroupResponse {
    /** Optional reason to explain why the operation was the result that it was. */
    OperationReason?: string;
    /** New version of the group data. */
    ProfileVersion: number;
    /** Indicates which operation was completed, either Created, Updated, Deleted or None. */
    SetResult?: OperationTypes;
  }

  /** Updates the role name. Returns information about whether the update was successful. */
  interface UpdateGroupRoleRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /**
     * Optional field used for concurrency control. By specifying the previously returned value of ProfileVersion from the
     * GetGroup API, you can ensure that the group data update will only be performed if the group has not been updated by any
     * other clients since the version you last loaded.
     */
    ExpectedProfileVersion?: number;
    /** The identifier of the group */
    Group: EntityKey;
    /** ID of the role to update. Role IDs must be between 1 and 64 characters long. */
    RoleId?: string;
    /** The new name of the role */
    RoleName: string;
  }

  interface UpdateGroupRoleResponse {
    /** Optional reason to explain why the operation was the result that it was. */
    OperationReason?: string;
    /** New version of the role data. */
    ProfileVersion: number;
    /** Indicates which operation was completed, either Created, Updated, Deleted or None. */
    SetResult?: OperationTypes;
  }
}
/** ProfilesAPI.Models as interfaces */
declare namespace PlayFabProfilesModels {
  type EffectType = "Allow" | "Deny";

  /** An entity object and its associated meta data. */
  interface EntityDataObject {
    /** Un-escaped JSON object, if DataAsObject is true. */
    DataObject?: any;
    /** Escaped string JSON body of the object, if DataAsObject is default or false. */
    EscapedDataObject?: string;
    /** Name of this object. */
    ObjectName?: string;
  }

  /** Combined entity type and ID structure which uniquely identifies a single entity. */
  interface EntityKey {
    /** Unique ID of the entity. */
    Id: string;
    /** Entity type. See https://docs.microsoft.com/gaming/playfab/features/data/entities/available-built-in-entity-types */
    Type?: string;
  }

  interface EntityLineage {
    /** The Character Id of the associated entity. */
    CharacterId?: string;
    /** The Group Id of the associated entity. */
    GroupId?: string;
    /** The Master Player Account Id of the associated entity. */
    MasterPlayerAccountId?: string;
    /** The Namespace Id of the associated entity. */
    NamespaceId?: string;
    /** The Title Id of the associated entity. */
    TitleId?: string;
    /** The Title Player Account Id of the associated entity. */
    TitlePlayerAccountId?: string;
  }

  interface EntityPermissionStatement {
    /** The action this statement effects. May be 'Read', 'Write' or '*' for both read and write. */
    Action: string;
    /** A comment about the statement. Intended solely for bookkeeping and debugging. */
    Comment?: string;
    /** Additional conditions to be applied for entity resources. */
    Condition?: any;
    /** The effect this statement will have. It may be either Allow or Deny */
    Effect: EffectType;
    /** The principal this statement will effect. */
    Principal: any;
    /** The resource this statements effects. Similar to 'pfrn:data--title![Title ID]/Profile/*' */
    Resource: string;
  }

  interface EntityProfileBody {
    /** Avatar URL for the entity. */
    AvatarUrl?: string;
    /** The creation time of this profile in UTC. */
    Created: string;
    /**
     * The display name of the entity. This field may serve different purposes for different entity types. i.e.: for a title
     * player account it could represent the display name of the player, whereas on a character it could be character's name.
     */
    DisplayName?: string;
    /** The entity id and type. */
    Entity?: EntityKey;
    /** The chain of responsibility for this entity. Use Lineage. */
    EntityChain?: string;
    /** The experiment variants of this profile. */
    ExperimentVariants?: string[];
    /** The files on this profile. */
    Files?: { [key: string]: EntityProfileFileMetadata };
    /** The language on this profile. */
    Language?: string;
    /** Leaderboard metadata for the entity. */
    LeaderboardMetadata?: string;
    /** The lineage of this profile. */
    Lineage?: EntityLineage;
    /** The objects on this profile. */
    Objects?: { [key: string]: EntityDataObject };
    /**
     * The permissions that govern access to this entity profile and its properties. Only includes permissions set on this
     * profile, not global statements from titles and namespaces.
     */
    Permissions?: EntityPermissionStatement[];
    /** The statistics on this profile. */
    Statistics?: { [key: string]: EntityStatisticValue };
    /**
     * The version number of the profile in persistent storage at the time of the read. Used for optional optimistic
     * concurrency during update.
     */
    VersionNumber: number;
  }

  /** An entity file's meta data. To get a download URL call File/GetFiles API. */
  interface EntityProfileFileMetadata {
    /** Checksum value for the file, can be used to check if the file on the server has changed. */
    Checksum?: string;
    /** Name of the file */
    FileName?: string;
    /** Last UTC time the file was modified */
    LastModified: string;
    /** Storage service's reported byte count */
    Size: number;
  }

  interface EntityStatisticChildValue {
    /** Child name value, if child statistic */
    ChildName?: string;
    /** Child statistic metadata */
    Metadata?: string;
    /** Child statistic value */
    Value: number;
  }

  interface EntityStatisticValue {
    /** Child statistic values */
    ChildStatistics?: { [key: string]: EntityStatisticChildValue };
    /** Statistic metadata */
    Metadata?: string;
    /** Statistic name */
    Name?: string;
    /** Statistic value */
    Value?: number;
    /** Statistic version */
    Version: number;
  }

  /**
   * Given an entity type and entity identifier will retrieve the profile from the entity store. If the profile being
   * retrieved is the caller's, then the read operation is consistent, if not it is an inconsistent read. An inconsistent
   * read means that we do not guarantee all committed writes have occurred before reading the profile, allowing for a stale
   * read. If consistency is important the Version Number on the result can be used to compare which version of the profile
   * any reader has.
   */
  interface GetEntityProfileRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /**
     * Determines whether the objects will be returned as an escaped JSON string or as a un-escaped JSON object. Default is
     * JSON string.
     */
    DataAsObject?: boolean;
    /** The entity to perform this action on. */
    Entity?: EntityKey;
  }

  interface GetEntityProfileResponse {
    /** Entity profile */
    Profile?: EntityProfileBody;
  }

  /**
   * Given a set of entity types and entity identifiers will retrieve all readable profiles properties for the caller.
   * Profiles that the caller is not allowed to read will silently not be included in the results.
   */
  interface GetEntityProfilesRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /**
     * Determines whether the objects will be returned as an escaped JSON string or as a un-escaped JSON object. Default is
     * JSON string.
     */
    DataAsObject?: boolean;
    /** Entity keys of the profiles to load. Must be between 1 and 25 */
    Entities: EntityKey[];
  }

  interface GetEntityProfilesResponse {
    /** Entity profiles */
    Profiles?: EntityProfileBody[];
  }

  /**
   * Retrieves the title access policy that is used before the profile's policy is inspected during a request. If never
   * customized this will return the default starter policy built by PlayFab.
   */
  interface GetGlobalPolicyRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
  }

  interface GetGlobalPolicyResponse {
    /** The permissions that govern access to all entities under this title or namespace. */
    Permissions?: EntityPermissionStatement[];
  }

  /** Given a master player account id (PlayFab ID), returns all title player accounts associated with it. */
  interface GetTitlePlayersFromMasterPlayerAccountIdsRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** Master player account ids. */
    MasterPlayerAccountIds: string[];
    /** Id of title to get players from. */
    TitleId?: string;
  }

  interface GetTitlePlayersFromMasterPlayerAccountIdsResponse {
    /** Optional id of title to get players from, required if calling using a master_player_account. */
    TitleId?: string;
    /** Dictionary of master player ids mapped to title player entity keys and id pairs */
    TitlePlayerAccounts?: { [key: string]: EntityKey };
  }

  type OperationTypes = "Created" | "Updated" | "Deleted" | "None";

  /**
   * This will set the access policy statements on the given entity profile. This is not additive, any existing statements
   * will be replaced with the statements in this request.
   */
  interface SetEntityProfilePolicyRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The entity to perform this action on. */
    Entity: EntityKey;
    /** The statements to include in the access policy. */
    Statements?: EntityPermissionStatement[];
  }

  interface SetEntityProfilePolicyResponse {
    /**
     * The permissions that govern access to this entity profile and its properties. Only includes permissions set on this
     * profile, not global statements from titles and namespaces.
     */
    Permissions?: EntityPermissionStatement[];
  }

  /**
   * Updates the title access policy that is used before the profile's policy is inspected during a request. Policies are
   * compiled and cached for several minutes so an update here may not be reflected in behavior for a short time.
   */
  interface SetGlobalPolicyRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The permissions that govern access to all entities under this title or namespace. */
    Permissions?: EntityPermissionStatement[];
  }

  interface SetGlobalPolicyResponse {}

  /**
   * Given an entity profile, will update its language to the one passed in if the profile's version is equal to the one
   * passed in.
   */
  interface SetProfileLanguageRequest {
    /** The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). */
    CustomTags?: { [key: string]: string | null };
    /** The entity to perform this action on. */
    Entity?: EntityKey;
    /** The expected version of a profile to perform this update on */
    ExpectedVersion?: number;
    /** The language to set on the given entity. Deletes the profile's language if passed in a null string. */
    Language?: string;
  }

  interface SetProfileLanguageResponse {
    /** The type of operation that occured on the profile's language */
    OperationResult?: OperationTypes;
    /** The updated version of the profile after the language update */
    VersionNumber?: number;
  }
}

/** Entity interface methods */
interface IPlayFabEntityAPI {
  /**
   * Method to exchange a legacy AuthenticationTicket or title SecretKey for an Entity Token or to refresh a still valid
   * Entity Token.
   * https://docs.microsoft.com/rest/api/playfab/authentication/authentication/getentitytoken
   */
  GetEntityToken(
    request: PlayFabAuthenticationModels.GetEntityTokenRequest
  ): PlayFabAuthenticationModels.GetEntityTokenResponse;

  /**
   * Method for a server to validate a client provided EntityToken. Only callable by the title entity.
   * https://docs.microsoft.com/rest/api/playfab/authentication/authentication/validateentitytoken
   */
  ValidateEntityToken(
    request: PlayFabAuthenticationModels.ValidateEntityTokenRequest
  ): PlayFabAuthenticationModels.ValidateEntityTokenResponse;

  /**
   * Abort pending file uploads to an entity's profile.
   * https://docs.microsoft.com/rest/api/playfab/data/file/abortfileuploads
   */
  AbortFileUploads(
    request: PlayFabDataModels.AbortFileUploadsRequest
  ): PlayFabDataModels.AbortFileUploadsResponse;

  /**
   * Delete files on an entity's profile.
   * https://docs.microsoft.com/rest/api/playfab/data/file/deletefiles
   */
  DeleteFiles(
    request: PlayFabDataModels.DeleteFilesRequest
  ): PlayFabDataModels.DeleteFilesResponse;

  /**
   * Finalize file uploads to an entity's profile.
   * https://docs.microsoft.com/rest/api/playfab/data/file/finalizefileuploads
   */
  FinalizeFileUploads(
    request: PlayFabDataModels.FinalizeFileUploadsRequest
  ): PlayFabDataModels.FinalizeFileUploadsResponse;

  /**
   * Retrieves file metadata from an entity's profile.
   * https://docs.microsoft.com/rest/api/playfab/data/file/getfiles
   */
  GetFiles(
    request: PlayFabDataModels.GetFilesRequest
  ): PlayFabDataModels.GetFilesResponse;

  /**
   * Retrieves objects from an entity's profile.
   * https://docs.microsoft.com/rest/api/playfab/data/object/getobjects
   */
  GetObjects(
    request: PlayFabDataModels.GetObjectsRequest
  ): PlayFabDataModels.GetObjectsResponse;

  /**
   * Initiates file uploads to an entity's profile.
   * https://docs.microsoft.com/rest/api/playfab/data/file/initiatefileuploads
   */
  InitiateFileUploads(
    request: PlayFabDataModels.InitiateFileUploadsRequest
  ): PlayFabDataModels.InitiateFileUploadsResponse;

  /**
   * Sets objects on an entity's profile.
   * https://docs.microsoft.com/rest/api/playfab/data/object/setobjects
   */
  SetObjects(
    request: PlayFabDataModels.SetObjectsRequest
  ): PlayFabDataModels.SetObjectsResponse;

  /**
   * Write batches of entity based events to PlayStream. The namespace of the Event must be 'custom' or start with 'custom.'.
   * https://docs.microsoft.com/rest/api/playfab/events/playstream-events/writeevents
   */
  WriteEvents(
    request: PlayFabEventsModels.WriteEventsRequest
  ): PlayFabEventsModels.WriteEventsResponse;

  /**
   * Write batches of entity based events to as Telemetry events (bypass PlayStream). The namespace must be 'custom' or start
   * with 'custom.'
   * https://docs.microsoft.com/rest/api/playfab/events/playstream-events/writetelemetryevents
   */
  WriteTelemetryEvents(
    request: PlayFabEventsModels.WriteEventsRequest
  ): PlayFabEventsModels.WriteEventsResponse;

  /**
   * Accepts an outstanding invitation to to join a group
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/acceptgroupapplication
   */
  AcceptGroupApplication(
    request: PlayFabGroupsModels.AcceptGroupApplicationRequest
  ): PlayFabGroupsModels.EmptyResponse;

  /**
   * Accepts an invitation to join a group
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/acceptgroupinvitation
   */
  AcceptGroupInvitation(
    request: PlayFabGroupsModels.AcceptGroupInvitationRequest
  ): PlayFabGroupsModels.EmptyResponse;

  /**
   * Adds members to a group or role.
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/addmembers
   */
  AddMembers(
    request: PlayFabGroupsModels.AddMembersRequest
  ): PlayFabGroupsModels.EmptyResponse;

  /**
   * Applies to join a group
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/applytogroup
   */
  ApplyToGroup(
    request: PlayFabGroupsModels.ApplyToGroupRequest
  ): PlayFabGroupsModels.ApplyToGroupResponse;

  /**
   * Blocks a list of entities from joining a group.
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/blockentity
   */
  BlockEntity(
    request: PlayFabGroupsModels.BlockEntityRequest
  ): PlayFabGroupsModels.EmptyResponse;

  /**
   * Changes the role membership of a list of entities from one role to another.
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/changememberrole
   */
  ChangeMemberRole(
    request: PlayFabGroupsModels.ChangeMemberRoleRequest
  ): PlayFabGroupsModels.EmptyResponse;

  /**
   * Creates a new group.
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/creategroup
   */
  CreateGroup(
    request: PlayFabGroupsModels.CreateGroupRequest
  ): PlayFabGroupsModels.CreateGroupResponse;

  /**
   * Creates a new group role.
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/createrole
   */
  CreateRole(
    request: PlayFabGroupsModels.CreateGroupRoleRequest
  ): PlayFabGroupsModels.CreateGroupRoleResponse;

  /**
   * Deletes a group and all roles, invitations, join requests, and blocks associated with it.
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/deletegroup
   */
  DeleteGroup(
    request: PlayFabGroupsModels.DeleteGroupRequest
  ): PlayFabGroupsModels.EmptyResponse;

  /**
   * Deletes an existing role in a group.
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/deleterole
   */
  DeleteRole(
    request: PlayFabGroupsModels.DeleteRoleRequest
  ): PlayFabGroupsModels.EmptyResponse;

  /**
   * Gets information about a group and its roles
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/getgroup
   */
  GetGroup(
    request: PlayFabGroupsModels.GetGroupRequest
  ): PlayFabGroupsModels.GetGroupResponse;

  /**
   * Invites a player to join a group
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/invitetogroup
   */
  InviteToGroup(
    request: PlayFabGroupsModels.InviteToGroupRequest
  ): PlayFabGroupsModels.InviteToGroupResponse;

  /**
   * Checks to see if an entity is a member of a group or role within the group
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/ismember
   */
  IsMember(
    request: PlayFabGroupsModels.IsMemberRequest
  ): PlayFabGroupsModels.IsMemberResponse;

  /**
   * Lists all outstanding requests to join a group
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/listgroupapplications
   */
  ListGroupApplications(
    request: PlayFabGroupsModels.ListGroupApplicationsRequest
  ): PlayFabGroupsModels.ListGroupApplicationsResponse;

  /**
   * Lists all entities blocked from joining a group
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/listgroupblocks
   */
  ListGroupBlocks(
    request: PlayFabGroupsModels.ListGroupBlocksRequest
  ): PlayFabGroupsModels.ListGroupBlocksResponse;

  /**
   * Lists all outstanding invitations for a group
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/listgroupinvitations
   */
  ListGroupInvitations(
    request: PlayFabGroupsModels.ListGroupInvitationsRequest
  ): PlayFabGroupsModels.ListGroupInvitationsResponse;

  /**
   * Lists all members for a group
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/listgroupmembers
   */
  ListGroupMembers(
    request: PlayFabGroupsModels.ListGroupMembersRequest
  ): PlayFabGroupsModels.ListGroupMembersResponse;

  /**
   * Lists all groups and roles for an entity
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/listmembership
   */
  ListMembership(
    request: PlayFabGroupsModels.ListMembershipRequest
  ): PlayFabGroupsModels.ListMembershipResponse;

  /**
   * Lists all outstanding invitations and group applications for an entity
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/listmembershipopportunities
   */
  ListMembershipOpportunities(
    request: PlayFabGroupsModels.ListMembershipOpportunitiesRequest
  ): PlayFabGroupsModels.ListMembershipOpportunitiesResponse;

  /**
   * Removes an application to join a group
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/removegroupapplication
   */
  RemoveGroupApplication(
    request: PlayFabGroupsModels.RemoveGroupApplicationRequest
  ): PlayFabGroupsModels.EmptyResponse;

  /**
   * Removes an invitation join a group
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/removegroupinvitation
   */
  RemoveGroupInvitation(
    request: PlayFabGroupsModels.RemoveGroupInvitationRequest
  ): PlayFabGroupsModels.EmptyResponse;

  /**
   * Removes members from a group.
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/removemembers
   */
  RemoveMembers(
    request: PlayFabGroupsModels.RemoveMembersRequest
  ): PlayFabGroupsModels.EmptyResponse;

  /**
   * Unblocks a list of entities from joining a group
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/unblockentity
   */
  UnblockEntity(
    request: PlayFabGroupsModels.UnblockEntityRequest
  ): PlayFabGroupsModels.EmptyResponse;

  /**
   * Updates non-membership data about a group.
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/updategroup
   */
  UpdateGroup(
    request: PlayFabGroupsModels.UpdateGroupRequest
  ): PlayFabGroupsModels.UpdateGroupResponse;

  /**
   * Updates metadata about a role.
   * https://docs.microsoft.com/rest/api/playfab/groups/groups/updaterole
   */
  UpdateRole(
    request: PlayFabGroupsModels.UpdateGroupRoleRequest
  ): PlayFabGroupsModels.UpdateGroupRoleResponse;

  /**
   * Gets the global title access policy
   * https://docs.microsoft.com/rest/api/playfab/profiles/account-management/getglobalpolicy
   */
  GetGlobalPolicy(
    request: PlayFabProfilesModels.GetGlobalPolicyRequest
  ): PlayFabProfilesModels.GetGlobalPolicyResponse;

  /**
   * Retrieves the entity's profile.
   * https://docs.microsoft.com/rest/api/playfab/profiles/account-management/getprofile
   */
  GetProfile(
    request: PlayFabProfilesModels.GetEntityProfileRequest
  ): PlayFabProfilesModels.GetEntityProfileResponse;

  /**
   * Retrieves the entity's profile.
   * https://docs.microsoft.com/rest/api/playfab/profiles/account-management/getprofiles
   */
  GetProfiles(
    request: PlayFabProfilesModels.GetEntityProfilesRequest
  ): PlayFabProfilesModels.GetEntityProfilesResponse;

  /**
   * Retrieves the title player accounts associated with the given master player account.
   * https://docs.microsoft.com/rest/api/playfab/profiles/account-management/gettitleplayersfrommasterplayeraccountids
   */
  GetTitlePlayersFromMasterPlayerAccountIds(
    request: PlayFabProfilesModels.GetTitlePlayersFromMasterPlayerAccountIdsRequest
  ): PlayFabProfilesModels.GetTitlePlayersFromMasterPlayerAccountIdsResponse;

  /**
   * Sets the global title access policy
   * https://docs.microsoft.com/rest/api/playfab/profiles/account-management/setglobalpolicy
   */
  SetGlobalPolicy(
    request: PlayFabProfilesModels.SetGlobalPolicyRequest
  ): PlayFabProfilesModels.SetGlobalPolicyResponse;

  /**
   * Updates the entity's language. The precedence hierarchy for communication to the player is Title Player Account
   * language, Master Player Account language, and then title default language if the first two aren't set or supported.
   * https://docs.microsoft.com/rest/api/playfab/profiles/account-management/setprofilelanguage
   */
  SetProfileLanguage(
    request: PlayFabProfilesModels.SetProfileLanguageRequest
  ): PlayFabProfilesModels.SetProfileLanguageResponse;

  /**
   * Sets the profiles access policy
   * https://docs.microsoft.com/rest/api/playfab/profiles/account-management/setprofilepolicy
   */
  SetProfilePolicy(
    request: PlayFabProfilesModels.SetEntityProfilePolicyRequest
  ): PlayFabProfilesModels.SetEntityProfilePolicyResponse;
}