Skip to main content

Unity Reference Docs

ModIO​

TypeNameDescription
AuthenticationServiceProviderExtensionsAuthenticationServiceProviderExtensions
BuildSettingsBuildSettingsBuild-specific configuration values. This can be setup directly from the inspector when editing the config settings file, or you can instantiate and use this at runtime with the Initialize method
CommentDetailsCommentDetails
CommentPageCommentPageA struct containing the ModComments and total number of remaining results that can be acquired with the SearchFilter used in the GetMods request.
DownloadReferenceDownloadReferenceUsed in ModIOUnity.DownloadTexture() to get the Texture. (DownloadReference is serializable with Unity's JsonUtility)
EntitlementEntitlementA struct representing all of the information available for an Entitlement.
InstalledModInstalledModStruct used to represent a mod that already exists on the current device. You can view the subscribed users to this mod as well as the directory and modprofile associated to it.
ModCommentModComment
ModDependenciesModDependenciesA struct representing all of the information available for a Mod's Dependencies.
ModIOUnityModIOUnityMain interface for the mod.io Unity plugin.
ModIOUnityAsyncModIOUnityAsyncMain async interface for the mod.io Unity plugin.
ModIOUnityEventsModIOUnityEvents
ModIdModIdA struct representing the globally unique identifier for a specific mod profile.
ModPageModPageA struct containing the ModProfiles and total number of remaining results that can be acquired with the SearchFilter used in the GetMods request.
ModProfileModProfileA struct representing all of the information available for a ModProfile.
ModProfileDetailsModProfileDetailsUse this class to fill out the details of a Mod Profile that you'd like to create or edit. If you're submitting this via CreateModProfile you must assign values to logo, name and summary, otherwise the submission will be rejected (All fields except modId are optional if submitting this via EditModProfile)
ModStatsModStatsDetailed stats about a Mod's ratings, downloads, subscribers, popularity etc
ModfileDetailsModfileDetails
MonetizationTeamAccountMonetizationTeamAccount
MultipartUploadMultipartUpload
MultipartUploadPartMultipartUploadPart
ProgressHandleProgressHandleA ProgressHandle can only be used to monitor the progress of an operation and cannot be used to cancel or suspend ongoing operations. The OperationType enum field specifies what type of operation this handle is for. The Progress field can be used to get the percentage (0.0 - 1.0) of the progress. The Completed and Failed fields can be used to determine if the operation is complete and whether or not it failed.
RatingRatingA struct representing all of the information available for a Rating.
ReportReportUsed in conjunction with ModIOUnity.Report() to send a report to the mod.io server for a specific mod.
ResultResultStruct returned from ModIO callbacks to inform the caller if the operation succeeded.
ResultAndResultAndConvenience wrapper for essentially a Tuple.
SearchFilterSearchFilterUsed to build a filter that is sent with requests for retrieving mods.
ServerSettingsServerSettingsDescribes the server settings to use for the ModIO Plugin. This can be setup directly from the inspector when editing the config settings file, or you can instantiate and use this at runtime with the Initialize method
SubscribedModSubscribedModRepresents the ModProfile of a mod the current user has subscribed to. Contains the status and a directory (if installed) and the associated ModProfile.
SubscribedModStatusExtensionsSubscribedModStatusExtensions
TagTagRepresents a Tag that can be assigned to a mod.
TagCategoryTagCategoryRepresents a particular category of tags.
TermsHashTermsHashThis is the hash that identifies the TOS. Used to validate the TOS requirement when attempting to authenticate a user.
TermsOfUseTermsOfUseTOS object received from a successful use of ModIOUnity.GetTermsOfUse This is used when attempting to authenticate via a third party. You must retrieve the TOS and input it along with an authentication request.
TermsOfUseLinkTermsOfUseLinkRepresents a url as part of the TOS. The 'required' field can be used to determine whether or not it is a TOS requirement to be displayed to the end user when viewing the TOS text.
TokenPackTokenPack
UISettingsUISettings
UserInstalledModUserInstalledModStruct used to represent a mod that already exists on the current device. You can view the subscribed users to this mod as well as the directory and modprofile associated to it.
UserProfileUserProfileRepresents a particular mod.io user with their username, DownloadReferences for getting their avatar, as well as their language and timezone.
WalletWalletA struct representing the user's wallet and current balance.

AuthenticationServiceProviderExtensions​

public static class AuthenticationServiceProviderExtensions
Method​

GetProviderName​

public static string GetProviderName(this AuthenticationServiceProvider provider)

GetTokenFieldName​

public static string GetTokenFieldName(this AuthenticationServiceProvider provider)

BuildSettings​

[System.Serializable]  public class BuildSettings

Build-specific configuration values. This can be setup directly from the inspector when editing the config settings file, or you can instantiate and use this at runtime with the Initialize method

See Also​

ServerSettings ModIOUnity.InitializeForUser

Field​

LogLevel logLevel​

LogLevel logLevel

Level to log at.

UserPortal userPortal​

UserPortal userPortal = UserPortal.None

Portal the game will be launched through.

UserPortal defaultPortal​

UserPortal defaultPortal = UserPortal.None

Default portal.

uint requestCacheLimitKB​

uint requestCacheLimitKB

Size limit for the request cache.

int writeSpeedInKbPerSecond​

int writeSpeedInKbPerSecond = 0

The speed at which will be maintained when performing write operations

int bytesPerWrite​

int bytesPerWrite = 0

The max number of bytes that will be written in one write operation

float writeSpeedReductionThreshold​

float writeSpeedReductionThreshold = .75f

The threshold as a percentage of the total budget of one interval, at which write operations will start to slow down.

bool disableWriteSpeedReduction​

bool disableWriteSpeedReduction = false
Method​

SetDefaultPortal​

public void SetDefaultPortal()

CommentDetails​

public class CommentDetails
Field​

long replyId​

long replyId

Id of the parent comment this comment is replying to (can be 0 if the comment is not a reply).

string content​

string content

Contents of the comment.


CommentPage​

[System.Serializable]  public struct CommentPage

A struct containing the ModComments and total number of remaining results that can be acquired with the SearchFilter used in the GetMods request.

See Also​

ModIOUnity.GetModComments ModIOUnityAsync.GetModComments

Field​

ModComment CommentObjects​

ModComment[] CommentObjects

The mod profiles retrieved from this pagination request

See Also​

ModIOUnity.GetModComments ModIOUnityAsync.GetModComments

long totalSearchResultsFound​

long totalSearchResultsFound

the total results that could be found. eg there may be a total of 1,000 comments but this CommentPage may only contain the first 100, depending on the SearchFilter pagination settings.

See Also​

SearchFilter SearchFilter.SetPageIndex SearchFilter.SetPageSize ModIOUnity.GetModComments ModIOUnityAsync.GetModComments


DownloadReference​

[System.Serializable]  public struct DownloadReference

Used in ModIOUnity.DownloadTexture() to get the Texture. (DownloadReference is serializable with Unity's JsonUtility)

See Also​

ModIOUnity.DownloadTexture ModIOUnityAsync.DownloadTexture

Field​

ModId modId​

ModId modId

string url​

string url

string filename​

string filename
Method​

IsValid​

public bool IsValid()

Check if there is a valid url for this image. You may want to check this before using the ModIOUnity.DownloadTexture method.

See Also​

ModIOUnity.DownloadTexture ModIOUnityAsync.DownloadTexture

Returns​

true if the url isn't null


Entitlement​

[Serializable]  public struct Entitlement

A struct representing all of the information available for an Entitlement.

See Also​

ModIOUnity.SyncEntitlements ModIOUnityAsync.SyncEntitlements

Field​

string transactionId​

string transactionId

int transactionState​

int transactionState

string skuId​

string skuId

bool entitlementConsumed​

bool entitlementConsumed

InstalledMod​

public struct InstalledMod

Struct used to represent a mod that already exists on the current device. You can view the subscribed users to this mod as well as the directory and modprofile associated to it.

See Also​

ModIOUnity.GetSystemInstalledMods ModProfile

Field​

List subscribedUsers​

List<long> subscribedUsers

The usernames of all the known users on this device that are subscribed to this mod

bool updatePending​

bool updatePending

Whether or not the mod has been marked for an update

string directory​

string directory

the directory of where this mod is installed

string metadata​

string metadata

The metadata for the version of the mod that is currently installed (Not to be mistaken with the metadata located inside of ModProfile.cs)

string version​

string version

the version of this installed mod

string changeLog​

string changeLog

the change log for this version of the installed mod

DateTime dateAdded​

DateTime dateAdded

The date that this version of the mod was submitted to mod.io

ModProfile modProfile​

ModProfile modProfile

The profile of this mod, including the summary and name

bool enabled​

bool enabled

Whether the mod has been marked as enabled or disabled by the user

See Also​

ModIOUnity.EnableMod ModIOUnity.DisableMod


ModComment​

public struct ModComment
Field​

long id​

long id

Unique id of the comment.

ModId modId​

ModId modId

Unique id of the parent mod. This is now deprecated and will be removed in future API versions, please use resource_id instead.

long resourceId​

long resourceId

Unique id of the resource.

long submittedBy​

long submittedBy

Unique id of the user who posted the comment.

long dateAdded​

long dateAdded

Unix timestamp of date comment was posted.

string threadPosition​

string threadPosition

Levels of nesting in a comment thread. You should order by this field, to maintain comment grouping. How it works:

  • The first comment will have the position '01'.
  • The second comment will have the position '02'.
  • If someone responds to the second comment the position will be '02.01'.
  • A maximum of 3 levels is supported.

long karma​

long karma

Karma received for the comment (can be positive or negative).

CommentDetails commentDetails​

CommentDetails commentDetails

UserProfile userProfile​

UserProfile userProfile

ModDependencies​

[Serializable]  public struct ModDependencies

A struct representing all of the information available for a Mod's Dependencies.

See Also​

ModIOUnity.GetModDependencies ModIOUnityAsync.GetModDependencies

Field​

ModId modId​

ModId modId

string modName​

string modName

string modNameId​

string modNameId

DateTime dateAdded​

DateTime dateAdded

int dependencyDepth​

int dependencyDepth

DownloadReference logoImage_320x180​

DownloadReference logoImage_320x180

DownloadReference logoImage_640x360​

DownloadReference logoImage_640x360

DownloadReference logoImage_1280x720​

DownloadReference logoImage_1280x720

DownloadReference logoImageOriginal​

DownloadReference logoImageOriginal

Modfile modfile​

Modfile modfile

ModIOUnity​

public static class ModIOUnity

Main interface for the mod.io Unity plugin.

Remarks​

Every ModIOUnity method with a callback has an asynchronous alternative in ModIOUnityAsync.

See Also​

ModIOUnityAsync

Method​

IsInitialized​

public static bool IsInitialized(bool attemptAutoInitializeIfNeeded
Returns​

true if the plugin has been initialized.

SetLoggingDelegate​

public static void SetLoggingDelegate(LogMessageDelegate loggingDelegate)

Use to send log messages to loggingDelegate instead of Unity.Debug.Log(string).

Parameters​

loggingDelegate The delegate for receiving log messages


ModIOUnity.SetLoggingDelegate((LogLevel logLevel, string logMessage) => {
if (logLevel == LogLevel.Error)
Debug.LogError($"mod.io plugin error: {logMessage}");
});

See Also​

LogMessageDelegate LogLevel

InitializeForUser​

public static Result InitializeForUser(string userProfileIdentifier,  ServerSettings serverSettings,  BuildSettings buildSettings,  UISettings uiSettings

Use if you have a pre-configured mod.io config ScriptableObject.

Parameters​

userProfileIdentifier

serverSettings Data used by the plugin to connect with the mod.io service. buildSettings Data used by the plugin to interact with the platform. uiSettings Data used by the plugin's default UI to decide what features to show


ServerSettings serverSettings = new ServerSettings {
serverURL = "https://api.test.mod.io/v1",
gameId = 1234,
gameKey = "1234567890abcdefghijklmnop"
};

See Also​

ServerSettings BuildSettings Result FetchUpdates Shutdown

InitializeForUser​

public static Result InitializeForUser(string userProfileIdentifier)

Shutdown​

public static void Shutdown(Action shutdownComplete)

Cancels all public operations, frees plugin resources and invokes any pending callbacks with a cancelled result code.

Remarks​

Result.IsCancelled() can be used to determine if it was cancelled due to a shutdown operation.

ModIOUnity.Shutdown(() => Debug.Log("Plugin shutdown complete"));
See Also​

Result

Ping​

public static void Ping(Action<Result> callback)

Pings the server. Result.Succeeded() will be true if a response was received.

RequestExternalAuthentication​

public static void RequestExternalAuthentication(Action<ResultAnd<ExternalAuthenticationToken>> callback)

Listen for an external login attempt. The callback argument contains an that includes the url and code to display to the user. ExternalAuthenticationToken.task will complete once the user enters the code.

Parameters​

callback The callback to handle the response, which includes the if the request was successful.

Remarks​

The request will time out after 15 minutes. You can cancel it at any time using token.Cancel().


ModIOUnity.RequestExternalAuthentication(async response =>
{
if (!response.result.Succeeded())
{
Debug.Log($"RequestExternalAuthentication failed: {response.result.message}");
return;
}

See Also​

Result ResultAnd ExternalAuthenticationToken

RequestAuthenticationEmail​

public static void RequestAuthenticationEmail(string emailaddress, Action<Result> callback)

Sends an email with a security code to the specified Email Address. The security code is then used to Authenticate the user session using ModIOUnity.SubmitEmailSecurityCode()

Remarks​

The callback will return a Result object. If the email is successfully sent Result.Succeeded() will equal true. If you haven't Initialized the plugin then Result.IsInitializationError() will equal true. If the string provided for the emailaddress is not .NET compliant Result.IsAuthenticationError() will equal true.

Parameters​

emailaddress the Email Address to send the security code to, eg "JohnDoe@gmail.com" callback Callback to invoke once the operation is complete

See Also​

SubmitEmailSecurityCode Result ModIOUnityAsync.RequestAuthenticationEmail


void Example()
{
ModIOUnity.RequestAuthenticationEmail("johndoe@gmail.com", RequestAuthenticationCallback);
}
void RequestAuthenticationCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Succeeded to send security code");
}
else
{
Debug.Log("Failed to send security code to that email address");
}
}

SubmitEmailSecurityCode​

public static void SubmitEmailSecurityCode(string securityCode, Action<Result> callback)

Attempts to Authenticate the current session by submitting a security code received by email from ModIOUnity.RequestAuthenticationEmail()

Remarks​

It is intended that this function is used after ModIOUnity.RequestAuthenticationEmail() is performed successfully.

Parameters​

securityCode The security code received from an authentication email callback Callback to invoke once the operation is complete

See Also​

RequestAuthenticationEmail Result ModIOUnityAsync.SubmitEmailSecurityCode


void Example(string userSecurityCode)
{
ModIOUnity.SubmitEmailSecurityCode(userSecurityCode, SubmitCodeCallback);
}
void SubmitCodeCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("You have successfully authenticated the user");
}
else
{
Debug.Log("Failed to authenticate the user");
}
}

GetTermsOfUse​

public static void GetTermsOfUse(Action<ResultAnd<TermsOfUse>> callback)

This retrieves the terms of use text to be shown to the user to accept/deny before authenticating their account via a third party provider, eg steam or google.

Remarks​

If the callback succeeds it will also provide a TermsOfUse struct that contains a TermsHash struct which you will need to provide when calling a third party authentication method such as ModIOUnity.AuthenticateUserViaSteam()

Parameters​

callback Callback to invoke once the operation is complete containing a result and a hash code to use for authentication via third party providers.

See Also​

TermsOfUse AuthenticateUserViaDiscord AuthenticateUserViaGoogle AuthenticateUserViaGOG AuthenticateUserViaItch AuthenticateUserViaOculus AuthenticateUserViaSteam AuthenticateUserViaSwitch AuthenticateUserViaXbox AuthenticateUserViaPlayStation ModIOUnityAsync.GetTermsOfUse


void Example()
{
ModIOUnity.GetTermsOfUse(GetTermsOfUseCallback);
}
void GetTermsOfUseCallback(ResultAnd<TermsOfUse> response)
{
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}

AuthenticateUserViaSteam​

public static void AuthenticateUserViaSteam(string steamToken,  string emailAddress,  TermsHash? hash,  Action<Result> callback)

Attempts to authenticate a user via the steam API.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

steamToken the user's steam token emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse() (Can be null if submitted once before) callback Callback to be invoked when the operation completes

See Also​

GetTermsOfUse ModIOUnityAsync.AuthenticateUserViaSteam


// First we get the Terms of Use to display to the user and cache the hash
void GetTermsOfUse_Example()
{
ModIOUnity.GetTermsOfUse(GetTermsOfUseCallback);
}
void GetTermsOfUseCallback(ResultAnd<TermsOfUse> response)
{
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
void Authenticate_Example()
{
ModIOUnity.AuthenticateUserViaSteam(steamToken, "johndoe@gmail.com", modIOTermsOfUse.hash, AuthenticationCallback);
}
void AuthenticationCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

AuthenticateUserViaEpic​

public static void AuthenticateUserViaEpic(string epicToken,  string emailAddress,  TermsHash? hash,  Action<Result> callback)

Attempts to authenticate a user via the epic API.

Parameters​

epicToken the user's epic token emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse() callback Callback to be invoked when the operation completes

See Also​

GetTermsOfUse ModIOUnityAsync.AuthenticateUserViaEpic

AuthenticateUserViaGOG​

public static void AuthenticateUserViaGOG(string gogToken, string emailAddress,  TermsHash? hash,  Action<Result> callback)

Attempts to authenticate a user via the GOG API.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

gogToken the user's gog token emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse() callback Callback to be invoked when the operation completes

See Also​

GetTermsOfUse ModIOUnityAsync.AuthenticateUserViaGOG


// First we get the Terms of Use to display to the user and cache the hash
void GetTermsOfUse_Example()
{
ModIOUnity.GetTermsOfUse(GetTermsOfUseCallback);
}
void GetTermsOfUseCallback(ResultAnd<TermsOfUse> response)
{
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
void Authenticate_Example()
{
ModIOUnity.AuthenticateUserViaGOG(gogToken, "johndoe@gmail.com", modIOTermsOfUse.hash, AuthenticationCallback);
}
void AuthenticationCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

AuthenticateUserViaPlayStation​

public static void AuthenticateUserViaPlayStation(string authCode, string emailAddress,  TermsHash? hash, PlayStationEnvironment environment,  Action<Result> callback)

Attempts to authenticate a user via the GOG API.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

authCode the user's auth code emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse() environment the PSN account environment callback Callback to be invoked when the operation completes

See Also​

GetTermsOfUse ModIOUnityAsync.AuthenticateUserViaGOG


// First we get the Terms of Use to display to the user and cache the hash
void GetTermsOfUse_Example()
{
ModIOUnity.GetTermsOfUse(GetTermsOfUseCallback);
}
void GetTermsOfUseCallback(ResultAnd<TermsOfUse> response)
{
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
void Authenticate_Example()
{
ModIOUnity.AuthenticateUserViaPlaystation(authCode, "johndoe@gmail.com", modIOTermsOfUse.hash, PlayStationEnvironment.np, AuthenticationCallback);
}
void AuthenticationCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

AuthenticateUserViaItch​

public static void AuthenticateUserViaItch(string itchioToken,  string emailAddress,  TermsHash? hash,  Action<Result> callback)

Attempts to authenticate a user via the Itch.io API.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

itchioToken the user's itch token emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse() callback Callback to be invoked when the operation completes

See Also​

GetTermsOfUse ModIOUnityAsync.AuthenticateUserViaItch


// First we get the Terms of Use to display to the user and cache the hash
void GetTermsOfUse_Example()
{
ModIOUnity.GetTermsOfUse(GetTermsOfUseCallback);
}
void GetTermsOfUseCallback(ResultAnd<TermsOfUse> response)
{
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
void Authenticate_Example()
{
ModIOUnity.AuthenticateUserViaItch(itchioToken, "johndoe@gmail.com", modIOTermsOfUse.hash, AuthenticationCallback);
}
void AuthenticationCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

AuthenticateUserViaXbox​

public static void AuthenticateUserViaXbox(string xboxToken,  string emailAddress,  TermsHash? hash,  Action<Result> callback)

Attempts to authenticate a user via the XBOX API.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

xboxToken the user's xbl token emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse() callback Callback to be invoked when the operation completes

See Also​

GetTermsOfUse ModIOUnityAsync.AuthenticateUserViaXbox


// First we get the Terms of Use to display to the user and cache the hash
void GetTermsOfUse_Example()
{
ModIOUnity.GetTermsOfUse(GetTermsOfUseCallback);
}
void GetTermsOfUseCallback(ResultAnd<TermsOfUse> response)
{
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
void Authenticate_Example()
{
ModIOUnity.AuthenticateUserViaXbox(xboxToken, "johndoe@gmail.com", modIOTermsOfUse.hash, AuthenticationCallback);
}
void AuthenticationCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

AuthenticateUserViaSwitch​

public static void AuthenticateUserViaSwitch(string SwitchNsaId,  string emailAddress,  TermsHash? hash,  Action<Result> callback)

Attempts to authenticate a user via the switch API.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

SwitchNsaId the user's switch NSA id token emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse() callback Callback to be invoked when the operation completes

See Also​

GetTermsOfUse ModIOUnityAsync.AuthenticateUserViaSwitch


// First we get the Terms of Use to display to the user and cache the hash
void GetTermsOfUse_Example()
{
ModIOUnity.GetTermsOfUse(GetTermsOfUseCallback);
}
void GetTermsOfUseCallback(ResultAnd<TermsOfUse> response)
{
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
void Authenticate_Example()
{
ModIOUnity.AuthenticateUserViaSwitch(switchToken, "johndoe@gmail.com", modIOTermsOfUse.hash, AuthenticationCallback);
}
void AuthenticationCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

AuthenticateUserViaDiscord​

public static void AuthenticateUserViaDiscord(string discordToken,  string emailAddress,  TermsHash? hash,  Action<Result> callback)

Attempts to authenticate a user via the Discord API.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

discordToken the user's discord token emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse() callback Callback to be invoked when the operation completes

See Also​

GetTermsOfUse ModIOUnityAsync.AuthenticateUserViaDiscord


// First we get the Terms of Use to display to the user and cache the hash
void GetTermsOfUse_Example()
{
ModIOUnity.GetTermsOfUse(GetTermsOfUseCallback);
}
void GetTermsOfUseCallback(ResultAnd<TermsOfUse> response)
{
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
void Authenticate_Example()
{
ModIOUnity.AuthenticateUserViaDiscord(discordToken, "johndoe@gmail.com", modIOTermsOfUse.hash, AuthenticationCallback);
}
void AuthenticationCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

AuthenticateUserViaGoogle​

public static void AuthenticateUserViaGoogle(string token,  string emailAddress,  TermsHash? hash,  Action<Result> callback)

Attempts to authenticate a user via the Google API.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

token google auth code or id token emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse() callback Callback to be invoked when the operation completes

See Also​

GetTermsOfUse ModIOUnityAsync.AuthenticateUserViaGoogle


// First we get the Terms of Use to display to the user and cache the hash
void GetTermsOfUse_Example()
{
ModIOUnity.GetTermsOfUse(GetTermsOfUseCallback);
}
void GetTermsOfUseCallback(ResultAnd<TermsOfUse> response)
{
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
void Authenticate_Example()
{
ModIOUnity.AuthenticateUserViaGoogle(token, "johndoe@gmail.com", modIOTermsOfUse.hash, AuthenticationCallback);
}
void AuthenticationCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

AuthenticateUserViaApple​

public static void AuthenticateUserViaApple(string authCode,  string emailAddress,  TermsHash? hash,  Action<Result> callback)

Attempts to authenticate a user via the Apple API.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

authCode Apple auth code emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse() callback Callback to be invoked when the operation completes

See Also​

GetTermsOfUse ModIOUnityAsync.AuthenticateUserViaApple


// First we get the Terms of Use to display to the user and cache the hash
void GetTermsOfUse_Example()
{
ModIOUnity.GetTermsOfUse(GetTermsOfUseCallback);
}
void GetTermsOfUseCallback(ResultAnd<TermsOfUse> response)
{
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
void Authenticate_Example()
{
ModIOUnity.AuthenticateUserViaApple(authCode, "johndoe@gmail.com", modIOTermsOfUse.hash, AuthenticationCallback);
}
void AuthenticationCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

AuthenticateUserViaOculus​

public static void AuthenticateUserViaOculus(OculusDevice oculusDevice, string nonce,  long userId, string oculusToken,  string emailAddress,  TermsHash? hash,  Action<Result> callback)

Attempts to authenticate a user via the Oculus API.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

oculusDevice the device your authenticating on nonce the nonce oculusToken the user's oculus token emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse() callback Callback to be invoked when the operation completes userId

See Also​

GetTermsOfUse ModIOUnityAsync.AuthenticateUserViaOculus


// First we get the Terms of Use to display to the user and cache the hash
void GetTermsOfUse_Example()
{
ModIOUnity.GetTermsOfUse(GetTermsOfUseCallback);
}
void GetTermsOfUseCallback(ResultAnd<TermsOfUse> response)
{
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
void Authenticate_Example()
{
ModIOUnity.AuthenticateUserViaOculus(oculusDevice.Quest,
nonce,
userId,
oculusToken,
"johndoe@gmail.com",
modIOTermsOfUse.hash, AuthenticationCallback);
}
void AuthenticationCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

AuthenticateUserViaOpenId​

public static void AuthenticateUserViaOpenId(string idToken,  string emailAddress,  TermsHash? hash,  Action<Result> callback)

Attempts to authenticate a user on behalf of an OpenID identity provider. To use this method of authentication, you must configure the OpenID config in your games authentication admin page. NOTE: The ability to authenticate players using your identity provider is a feature for advanced partners only. If you are interested in becoming an advanced partner, please contact us.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

idToken the user's id token emailAddress the user's email address hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse() callback Callback to be invoked when the operation completes

See Also​

GetTermsOfUse


// First we get the Terms of Use to display to the user and cache the hash
void GetTermsOfUse_Example()
{
ModIOUnity.GetTermsOfUse(GetTermsOfUseCallback);
}
void GetTermsOfUseCallback(ResultAnd<TermsOfUse> response)
{
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
void Authenticate_Example()
{
ModIOUnity.AuthenticateUserViaOpenId(idToken,
"johndoe@gmail.com",
modIOTermsOfUse.hash,
AuthenticationCallback);
}
void AuthenticationCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

IsAuthenticated​

public static void IsAuthenticated(Action<Result> callback)

Informs you if the current user session is authenticated or not.

Parameters​

callback

See Also​

Result ModIOUnityAsync.IsAuthenticated


void Example()
{
ModIOUnity.IsAuthenticated(IsAuthenticatedCallback);
}
void IsAuthenticatedCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("current session is authenticated");
}
else
{
Debug.Log("current session is not authenticated");
}
}

LogOutCurrentUser​

public static Result LogOutCurrentUser()

De-authenticates the current mod.io user for the current session and clears all user-specific data stored on the current device. Installed mods that do not have other local users subscribed will be uninstalled if ModIOUnity.EnableModManagement() has been used to enable the mod management system. (If ModManagement is enabled).

Remarks​

If you dont want to erase a user be sure to use ModIOUnity.Shutdown() instead. If you re-initialize the plugin after a shutdown the user will still be authenticated.

See Also​

EnableModManagement(ModIO.ModManagementEventDelegate) Result


//static async void Example()
{
Result result = await ModIOUnity.LogOutCurrentUser();
if(result.Succeeded())
{
Debug.Log("The current user has been logged and their local data removed");
}
else
{
Debug.Log("Failed to log out the current user");
}
}

GetTagCategories​

public static void GetTagCategories(Action<ResultAnd<TagCategory[]>> callback)

Gets the existing tags for the current game Id that can be used when searching/filtering mods.

Remarks​

Tags come in category groups, eg "Color" could be the name of the category and the tags themselves could be Green

Parameters​

callback the callback with the result and tags retrieved

See Also​

SearchFilter TagCategory Result ModIOUnityAsync.GetTagCategories


void Example()
{
ModIOUnity.GetTagCategories(GetTagsCallback);
}
void GetTagsCallback(ResultAnd<TagCategory[]> response)
{
if (response.result.Succeeded())
{
foreach(TagCategory category in response.value)
{
foreach(Tag tag in category.tags)
{
Debug.Log(tag.name + " tag is in the " + category.name + "category");
}
}
}
else
{
Debug.Log("failed to get game tags");
}
}

GetTagLocalized​

public static string GetTagLocalized(string tag)

Ensure you have called ModIOUnityAsync.FetchUpdates or ModIOUnityAsync.GetTagCategories before using this method. Note: All plugin functionality requires English tags. Localized tags can displayed to players.

Returns​

tag in the plugin's currently configured language if it exists, otherwise tag.

See Also​

ServerSettings.languageCode

GetTagLocalized​

public static string GetTagLocalized(string tag, string languageCode)

Ensure you have called ModIOUnityAsync.FetchUpdates or ModIOUnityAsync.GetTagCategories before using this method. Note: All plugin functionality requires English tags. Localized tags can displayed to players.

Returns​

tag in the provided languageCode if it exists, otherwise tag.

GetMods​

public static void GetMods(SearchFilter filter, Action<ResultAnd<ModPage>> callback)

Uses a SearchFilter to retrieve a specific Mod Page and returns the ModProfiles and total number of mods based on the Search Filter.

Remarks​

A ModPage contains a group of mods based on the pagination filters in SearchFilter. eg, if you use SearchFilter.SetPageIndex(0) and SearchFilter.SetPageSize(100) then ModPage.mods will contain mods from 1 to 100. But if you set SearchFilter.SetPageIndex(1) then it will have mods from 101 to 200, if that many exist. (note that 100 is the maximum page size).

Parameters​

filter The filter to apply when searching through mods (also contains pagination parameters) callback callback invoked with the Result and ModPage

See Also​

SearchFilter ModPage Result ModIOUnityAsync.GetMods


void Example()
{
SearchFilter filter = new SearchFilter();
filter.SetPageIndex(0);
filter.SetPageSize(10);
ModIOUnity.GetMods(filter, GetModsCallback);
}
void GetModsCallback(Result result, ModPage modPage)
{
if (result.Succeeded())
{
Debug.Log("ModPage has " + modPage.modProfiles.Length + " mods");
}
else
{
Debug.Log("failed to get mods");
}
}

GetMod​

public static void GetMod(ModId modId, Action<ResultAnd<ModProfile>> callback)

Requests a single ModProfile from the mod.io server by its ModId.

Remarks​

If there is a specific mod that you want to retrieve from the mod.io database you can use this method to get it.

Parameters​

modId the ModId of the ModProfile to get callback callback with the Result and ModProfile

See Also​

ModId ModProfile Result ModIOUnityAsync.GetMod


void Example()
{
ModId modId = new ModId(1234);
ModIOUnity.GetMod(modId, GetModCallback);
}
void GetModCallback(ResultAnd<ModProfile> response)
{
if (response.result.Succeeded())
{
Debug.Log("retrieved mod " + response.value.name);
}
else
{
Debug.Log("failed to get mod");
}
}

GetModSkipCache​

public static void GetModSkipCache(ModId modId, Action<ResultAnd<ModProfile>> callback)

GetModComments​

public static void GetModComments(ModId modId, SearchFilter filter, Action<ResultAnd<CommentPage>> callback)

Get all comments posted in the mods profile. Successful request will return an array of Comment Objects. We recommended reading the filtering documentation to return only the records you want.

Parameters​

filter The filter to apply when searching through comments (can only apply pagination parameters, Eg. page size and page index) callback callback invoked with the Result and CommentPage

See Also​

CommentPage ModComment SearchFilter ModId Result ResultAnd ModIOUnityAsync.GetModComments

GetModDependencies​

public static void GetModDependencies(ModId modId, Action<ResultAnd<ModDependencies[]>> callback)

Retrieves a list of ModDependenciesObjects that represent mods that depend on a mod.

Remarks​

This function returns only immediate mod dependencies, meaning that if you need the dependencies for the dependent mods, you will have to make multiple calls and watch for circular dependencies.

Parameters​

modId the ModId of the mod to get dependencies callback callback with the Result and an array of ModDependenciesObjects

See Also​

ModId Result ResultAnd ModDependenciesObject ModIOUnityAsync.GetModDependencies


void Example()
{
ModId modId = new ModId(1234);
ModIOUnity.GetModDependencies(modId, GetModCallback);
}
void GetModCallback(ResultAnd<ModDependenciesObject[]> response)
{
if (response.result.Succeeded())
{
ModDependenciesObject[] modDependenciesObjects = response.value;
Debug.Log("retrieved mods dependencies");
}
else
{
Debug.Log("failed to get mod dependencies");
}
}

GetCurrentUserRatings​

public static void GetCurrentUserRatings(Action<ResultAnd<Rating[]>> callback)

Get all mod rating's submitted by the authenticated user. Successful request will return an array of Rating Objects.

Parameters​

callback callback with the Result and an array of RatingObject

See Also​

ModId RatingObject ResultAnd


void Example()
{
ModIOUnity.GetCurrentUserRatings(GetCurrentUserRatingsCallback);
}
void GetCurrentUserRatingsCallback(ResultAnd<Rating[]> response)
{
if (response.result.Succeeded())
{
foreach(var ratingObject in response.value)
{
Debug.Log($"retrieved rating '{ratingObject.rating}' for {ratingObject.modId}");
}
}
else
{
Debug.Log("failed to get ratings");
}
}

GetCurrentUserRatingFor​

public static void GetCurrentUserRatingFor(ModId modId, Action<ResultAnd<ModRating>> callback)

Gets the rating that the current user has given for a specified mod. You must have an authenticated session for this to be successful.

Remarks​

Note that the rating can be 'None'

Parameters​

modId the id of the mod to check for a rating callback callback with the result and rating of the specified mod

See Also​

ModRating ModId ResultAnd


void Example()
{
ModId modId = new ModId(1234);
ModIOUnity.GetCurrentUserRatingFor(modId, GetRatingCallback);
}
void GetRatingCallback(ResultAnd<ModRating> response)
{
if (response.result.Succeeded())
{
Debug.Log($"retrieved rating: {response.value}");
}
else
{
Debug.Log("failed to get rating");
}
}

RateMod​

public static void RateMod(ModId modId, ModRating rating, Action<Result> callback)

Used to submit a rating for a specified mod.

Remarks​

This can be used to change/overwrite previous ratings of the current user.

Parameters​

modId the m=ModId of the mod being rated rating the rating to give the mod. Allowed values include ModRating.Positive, ModRating.Negative, ModRating.None callback callback with the result of the request

See Also​

ModRating Result ModId ModIOUnityAsync.RateMod


ModProfile mod;
void Example()
{
ModIOUnity.RateMod(mod.id, ModRating.Positive, RateModCallback);
}
void RateModCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Successfully rated mod");
}
else
{
Debug.Log("Failed to rate mod");
}
}

SubscribeToMod​

public static void SubscribeToMod(ModId modId, Action<Result> callback)

Adds the specified mod to the current user's subscriptions.

Remarks​

If mod management has been enabled via ModIOUnity.EnableModManagement() then the mod will be downloaded and installed.

Parameters​

modId ModId of the mod you want to subscribe to callback callback with the result of the request

See Also​

Result ModId EnableModManagement(ModIO.ModManagementEventDelegate) GetCurrentModManagementOperation ModIOUnityAsync.SubscribeToMod


ModProfile mod;
void Example()
{
ModIOUnity.SubscribeToMod(mod.id, SubscribeCallback);
}
void SubscribeCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Successfully subscribed to mod");
}
else
{
Debug.Log("Failed to subscribe to mod");
}
}

UnsubscribeFromMod​

public static void UnsubscribeFromMod(ModId modId, Action<Result> callback)

Removes the specified mod from the current user's subscriptions.

Remarks​

If mod management has been enabled via ModIOUnity.EnableModManagement() then the mod will be uninstalled at the next opportunity.

Parameters​

modId ModId of the mod you want to unsubscribe from callback callback with the result of the request

See Also​

Result ModId EnableModManagement(ModIO.ModManagementEventDelegate) GetCurrentModManagementOperation ModIOUnityAsync.UnsubscribeFromMod


ModProfile mod;
void Example()
{
ModIOUnity.UnsubscribeFromMod(mod.id, UnsubscribeCallback);
}
void UnsubscribeCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Successfully unsubscribed from mod");
}
else
{
Debug.Log("Failed to unsubscribe from mod");
}
}

GetSubscribedMods​

public static SubscribedMod[] GetSubscribedMods(out Result result)

Retrieves all of the subscribed mods for the current user.

Remarks​

Note that these are not installed mods only mods the user has opted as 'subscribed'. Also, ensure you have called ModIOUnity.FetchUpdates() at least once during this session in order to have an accurate collection of the user's subscriptions.

Parameters​

result an out parameter for whether or not the method succeeded

See Also​

Result SubscribedMod FetchUpdates

Returns​

an array of the user's subscribed mods


void Example()
{
SubscribedMod[] mods = ModIOUnity.GetSubscribedMods(out Result result);
if (result.Succeeded())
{
Debug.Log("use has " + mods.Length + " subscribed mods");
}
else
{
Debug.Log("failed to get user mods");
}
}

GetCurrentUser​

public static void GetCurrentUser(Action<ResultAnd<UserProfile>> callback, bool allowOfflineUser

Gets the current user's UserProfile struct. Containing their mod.io username, user id, language, timezone and download references for their avatar.

Remarks​

This requires the current session to have an authenticated user, otherwise Result.IsAuthenticationError() from the Result will equal true.

Parameters​

callback callback with the Result and the UserProfile allowOfflineUser True if we allow the last saved user data if the server cannot be reached. Note that Result will still be a NetworkError

See Also​

Result UserProfile IsAuthenticated ModIOUnityAsync.GetCurrentUser


void Example()
{
ModIOUnity.GetCurrentUser(GetUserCallback);
}
void GetUserCallback(ResultAnd<UserProfile> response)
{
if (response.result.Succeeded())
{
Debug.Log("Got user: " + response.value.username);
}
else
{
Debug.Log("failed to get user");
}
}

MuteUser​

public static void MuteUser(long userId, Action<Result> callback)

Mutes a user which effectively hides any content from that specified user

Remarks​

The userId can be found from the UserProfile. Such as ModProfile.creator.userId

Parameters​

userId The id of the user to be muted callback callback with the Result of the request

See Also​

UserProfile

UnmuteUser​

public static void UnmuteUser(long userId, Action<Result> callback)

Un-mutes a user which effectively reveals previously hidden content from that user

Remarks​

The userId can be found from the UserProfile. Such as ModProfile.creator.userId

Parameters​

userId The id of the user to be muted callback callback with the Result of the request

See Also​

UserProfile

GetMutedUsers​

public static void GetMutedUsers(Action<ResultAnd<UserProfile[]>> callback)

Gets an array of all the muted users that the current authenticated user has muted.

Remarks​

This has a cap of 1,000 users. It will not return more then that.

Parameters​

callback callback with the Result of the request

See Also​

UserProfile

FetchUpdates​

public static void FetchUpdates(Action<Result> callback)

This retrieves the user's ratings and subscriptions from the mod.io server and synchronises it with our local instance of the user's data. If mod management has been enabled via ModIOUnity.EnableModManagement() then it may begin to install/uninstall mods. It's recommended you use this method after initializing the plugin and after successfully authenticating the user.

Remarks​

This requires the current session to have an authenticated user, otherwise Result.IsAuthenticationError() from the Result will equal true.

Parameters​

callback callback with the Result of the operation

See Also​

Result EnableModManagement(ModIO.ModManagementEventDelegate) IsAuthenticated RequestAuthenticationEmail SubmitEmailSecurityCode AuthenticateUserViaDiscord AuthenticateUserViaGoogle AuthenticateUserViaGOG AuthenticateUserViaItch AuthenticateUserViaOculus AuthenticateUserViaSteam AuthenticateUserViaSwitch AuthenticateUserViaXbox ModIOUnityAsync.FetchUpdates


void Example()
{
ModIOUnity.FetchUpdates(FetchUpdatesCallback);
}
void FetchUpdatesCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("updated user subscriptions");
}
else
{
Debug.Log("failed to get user subscriptions");
}
}

EnableModManagement​

public static Result EnableModManagement(  ModManagementEventDelegate modManagementEventDelegate)

Enables the mod management system. When enabled it will automatically download, install, update and delete mods according to the authenticated user's subscriptions.

Remarks​

This requires the current session to have an authenticated user, otherwise Result.IsAuthenticationError() from the Result will equal true.

Parameters​

modManagementEventDelegate A delegate that gets called everytime the ModManagement system runs an event (can be null)

Returns​

A Result for whether or not mod management was enabled

See Also​

Result DisableModManagement IsAuthenticated


void Example()
{
Result result = ModIOUnity.EnableModManagement(ModManagementDelegate);
}
void ModManagementDelegate(ModManagementEventType eventType, ModId modId)
{
Debug.Log("a mod management event of type " + eventType.ToString() + " has been invoked");
}

DisableModManagement​

public static Result DisableModManagement()

Disables the mod management system and cancels any ongoing jobs for downloading or installing mods.


void Example()
{
Result result = ModIOUnity.DisableModManagement();
if (result.Succeeded())
{
Debug.Log("disabled mod management");
}
else
{
Debug.Log("failed to disable mod management");
}
}

GetCurrentModManagementOperation​

public static ProgressHandle GetCurrentModManagementOperation()

Returns a ProgressHandle with information on the current mod management operation.

Returns​

Optional ProgressHandle object containing information regarding the progress of the operation. Null if no operation is running

See Also​

ProgressHandle EnableModManagement


void Example()
{
ProgressHandle handle = ModIOUnity.GetCurrentModManagementOperation();
if (handle != null)
{
Debug.Log("current mod management operation is " + handle.OperationType.ToString());
}
else
{
Debug.Log("no current mod management operation");
}
}

GetSystemInstalledMods​

public static InstalledMod[] GetSystemInstalledMods(out Result result)

Gets an array of mods that are installed on the current device.

Remarks​

Note that these will not be subscribed by the current user. If you wish to get all of the current user's installed mods use ModIOUnity.GetSubscribedMods() and check the SubscribedMod.status equals SubscribedModStatus.Installed.

Parameters​

result an out Result to inform whether or not it was able to get installed mods

See Also​

InstalledMod GetSubscribedMods

Returns​

an array of InstalledMod for each existing mod installed on the current device (and not subscribed by the current user)


void Example()
{
InstalledMod[] mods = ModIOUnity.GetSystemInstalledMods(out Result result);
if (result.Succeeded())
{
Debug.Log("found " + mods.Length.ToString() + " mods installed");
}
else
{
Debug.Log("failed to get installed mods");
}
}

GetInstalledModsForUser​

public static UserInstalledMod[] GetInstalledModsForUser(out Result result, bool includeDisabledMods

Gets an array of mods that are installed for the current user.

Parameters​

result an out Result to inform whether or not it was able to get installed mods includeDisabledMods optional parameter. When true it will include mods that have been marked as disabled via the DisableMod method

See Also​

UserInstalledMod GetSubscribedMods ModIOUnity.DisableMod ModIOUnity.EnableMod

Returns​

an array of InstalledModUser for each existing mod installed for the user


void Example()
{
InstalledModUser[] mods = ModIOUnity.GetSystemInstalledModsUser(out Result result);
if (result.Succeeded())
{
Debug.Log("found " + mods.Length.ToString() + " mods installed");
}
else
{
Debug.Log("failed to get installed mods");
}
}

ForceUninstallMod​

public static Result ForceUninstallMod(ModId modId)

This informs the mod management system that this mod should be uninstalled if not subscribed by the current user. (such as a mod installed by a different user not currently active).

Remarks​

Normally if you wish to uninstall a mod you should unsubscribe and use ModIOUnity.EnableModManagement() and the process will be handled automatically. However, if you want to uninstall a mod that is subscribed to a different user session this method will mark the mod to be uninstalled to free up disk space. Alternatively you can use ModIOUnity.RemoveUserData() to remove a user from the local registry. If no other users are subscribed to the same mod it will be uninstalled automatically.

Parameters​

modId The ModId of the mod to uninstall

See Also​

Result SubscribeToMod UnsubscribeFromMod EnableModManagement LogOutCurrentUser


ModProfile mod;
void Example()
{
Result result = ModIOUnity.ForceUninstallMod(mod.id);
if (result.Succeeded())
{
Debug.Log("mod marked for uninstall");
}
else
{
Debug.Log("failed to mark mod for uninstall");
}
}

RetryDownload​

public static Result RetryDownload(ModId modId)

Clear the "download failed" state on a mod and allow DownloadManager to try downloading it again

Parameters​

modId

Returns​

IsModManagementBusy​

public static bool IsModManagementBusy()

Checks if the automatic management process is currently awake and performing a mod management operation, such as installing, downloading, uninstalling, updating.

Returns​

True if automatic mod management is currently performing an operation.

See Also​

EnableModManagement DisableModManagement GetCurrentModManagementOperation


void Example()
{
if (ModIOUnity.IsModManagementBusy())
{
Debug.Log("mod management is busy");
}
else
{
Debug.Log("mod management is not busy");
}
}

EnableMod​

public static bool EnableMod(ModId modId)

DisableMod​

public static bool DisableMod(ModId modId)

AddDependenciesToMod​

public static void AddDependenciesToMod(ModId modId, ICollection<ModId> dependencies, Action<Result> callback)

Adds the specified mods as dependencies to an existing mod.

Remarks​

If the dependencies already exist they will be ignored and the result will return success

Parameters​

modId ModId of the mod you want to add dependencies to dependencies The ModIds that you want to add (max 5 at a time) callback callback with the result of the request

See Also​

Result ModId ModIOUnity.RemoveDependenciesFromMod ModIOUnityAsync.RemoveDependenciesFromMod ModIOUnityAsync.AddDependenciesToMod


void Example()
{
var dependencies = new List<ModId>
{
(ModId)1001,
(ModId)1002,
(ModId)1003
};
ModIOUnity.AddDependenciesToMod(mod.id, dependencies, AddDependenciesCallback);
}
void AddDependenciesCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Successfully added dependencies to mod");
}
else
{
Debug.Log("Failed to add dependencies to mod");
}
}

RemoveDependenciesFromMod​

public static void RemoveDependenciesFromMod(ModId modId, ICollection<ModId> dependencies, Action<Result> callback)

Removes the specified mods as dependencies for another existing mod.

Remarks​

If the dependencies dont exist they will be ignored and the result will return success

Parameters​

modId ModId of the mod you want to remove dependencies from dependencies The ModIds that you want to remove (max 5 at a time) callback callback with the result of the request

See Also​

Result ModId ModIOUnity.AddDependenciesToMod ModIOUnityAsync.RemoveDependenciesFromMod ModIOUnityAsync.AddDependenciesToMod


void Example()
{
var dependencies = new List<ModId>
{
(ModId)1001,
(ModId)1002,
(ModId)1003
};
ModIOUnity.RemoveDependenciesFromMod(mod.id, dependencies, RemoveDependenciesCallback);
}
void RemoveDependenciesCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Successfully removed dependencies from mod");
}
else
{
Debug.Log("Failed to removed dependencies from mod");
}
}

DownloadNow​

public static void DownloadNow(ModId modId, Action<Result> callback)

Stops any current download and starts downloading the selected mod.

Parameters​

modId ModId of the mod you want to remove dependencies from callback callback with the result of the request

See Also​

Result ModId ModIOUnityAsync.DownloadNow


ModId modId;
void Example()
{
ModIOUnity.DownloadNow(modId, callback);
}
void RemoveDependenciesCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Successful");
}
else
{
Debug.Log("Failed");
}
}

GetModKvpMetadata​

public static void GetModKvpMetadata(long modId, Action<ResultAnd<Dictionary<string, string>>> callback)

Get all metadata stored by the game developer for this mod as searchable key value pairs. Successful request will return an array of Metadata KVP Objects.

See Also​

MetadataKvpObject ModIOUnity.GetModKvpMetadata ModIOUnityAsync.AddModKvpMetadata ModIOUnityAsync.DeleteModKvpMetadata


long modId;
void Example()
{
ModIOUnityAsync.GetModKvpMetadata(modId, (r)=>
{
if (r.result.Succeeded())
{
Debug.Log("Successfully received metadata for modId");
foreach(var kvp in r.value)
{
Debug.Log($"Key: {kvp.key}, Value: {kvp.value}");
}
}
else
{
Debug.Log("Failed to get metadata for modId.");
}
});
}

AddModKvpMetadata​

public static void AddModKvpMetadata(long modId, Dictionary<string, string> metadata, Action<Result> callback)

Add metadata for this mod as searchable key value pairs. Metadata is useful to define how a mod works, or other information you need to display and manage the mod. Successful request will return Message Object. For example: A mod might change gravity and the rate of fire of weapons, you could define these properties as key value pairs. We recommend the mod upload tool you create defines and submits metadata behind the scenes, because if these settings affect gameplay, invalid information may cause problems.

Metadata can also be stored as metadata_blob in the Mod Object.

See Also​

MetadataKvpObject ModIOUnity.AddModKvpMetadata ModIOUnityAsync.GetModKvpMetadata ModIOUnityAsync.DeleteModKvpMetadata


long modId;
Dictionary<string, string> metadata;
void Example()
{
Result result = await ModIOUnityAsync.AddModKvpMetadata(modId, metadata, (result)=>
{
if (result.Succeeded())
{
Debug.Log("Successfully added metadata.");
}
else
{
Debug.Log("Failed to add metadata.");
}
});
}

DeleteModKvpMetadata​

public static void DeleteModKvpMetadata(long modId, Dictionary<string, string> metadata, Action<Result> callback)

Delete key value pairs metadata defined for this mod. Successful request will return 204 No Content.

See Also​

MetadataKvpObject ModIOUnity.DeleteModKvpMetadata ModIOUnityAsync.AddModKvpMetadata ModIOUnityAsync.GetModKvpMetadata


long modId;
Dictionary<string, string> metadata;
void Example()
{
ModIOUnityAsync.DeleteModKvpMetadata(modId, metadata, (result)=>
{
if (result.Succeeded())
{
Debug.Log("Successfully deleted metadata");
}
else
{
Debug.Log("Failed to delete metadata.");
}
});
}

GenerateCreationToken​

public static CreationToken GenerateCreationToken()

Gets a token that can be used to create a new mod profile on the mod.io server.

Returns​

a CreationToken used in ModIOUnity.CreateModProfile()

See Also​

CreationToken ModProfileDetails Result ModId CreateModProfile EditModProfile


void Example()
{
CreationToken token = ModIOUnity.GenerateCreationToken();
}

CreateModProfile​

public static void CreateModProfile(CreationToken token,  ModProfileDetails modProfileDetails,  Action<ResultAnd<ModId>> callback)

Creates a new mod profile on the mod.io server based on the details provided from the ModProfileDetails object provided. Note that you must have a logo, name and summary assigned in ModProfileDetails in order for this to work.

Remarks​

Note that this will create a new profile on the server and can be viewed online through a browser.

Parameters​

token the token allowing a new unique profile to be created from ModIOUnity.GenerateCreationToken() modProfileDetails the mod profile details to apply to the mod profile being created callback a callback with the Result of the operation and the ModId of the newly created mod profile (if successful)

See Also​

GenerateCreationToken CreationToken ModProfileDetails Result ModId ModIOUnityAsync.CreateModProfile


ModId newMod;
Texture2D logo;
CreationToken token;
void Example()
{
token = ModIOUnity.GenerateCreationToken();
ModProfileDetails profile = new ModProfileDetails();
profile.name = "mod name";
profile.summary = "a brief summary about this mod being submitted"
profile.logo = logo;
ModIOUnity.CreateModProfile(token, profile, CreateProfileCallback);
}
void CreateProfileCallback(ResultAnd<ModId> response)
{
if (response.result.Succeeded())
{
newMod = response.value;
Debug.Log("created new mod profile with id " + response.value.ToString());
}
else
{
Debug.Log("failed to create new mod profile");
}
}

EditModProfile​

public static void EditModProfile(ModProfileDetails modProfile, Action<Result> callback)

This is used to edit or change data (except images) in an existing mod profile on the mod.io server. If you want to add or edit images, use UploadModMedia.

Remarks​

You need to assign the ModId of the mod you want to edit inside of the ModProfileDetails object included in the parameters

Parameters​

modProfile the mod profile details to apply to the mod profile being created callback a callback with the Result of the operation and the ModId of the newly created mod profile (if successful)

See Also​

ModProfileDetails Result ModIOUnityAsync.EditModProfile


ModId modId;
void Example()
{
ModProfileDetails profile = new ModProfileDetails();
profile.modId = modId;
profile.summary = "a new brief summary about this mod being edited";
ModIOUnity.EditModProfile(profile, EditProfileCallback);
}
void EditProfileCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("edited mod profile");
}
else
{
Debug.Log("failed to edit mod profile");
}
}

GetCurrentUploadHandle​

public static ProgressHandle GetCurrentUploadHandle()

This will return null if no upload operation is currently being performed.

Remarks​

Uploads are not handled by the mod management system, these are handled separately.

Returns​

A ProgressHandle informing the upload state and progress. Null if no upload operation is running.

See Also​

AddModfile ArchiveModProfile


void Example()
{
ProgressHandle handle = ModIOUnity.GetCurrentUploadHandle();
if (handle != null)
{
Debug.Log("Current upload progress is: " + handle.Progress.ToString());
}
}

UploadModfile​

public static void UploadModfile(ModfileDetails modfile, Action<Result> callback)

Used to upload a mod file to a mod profile on the mod.io server. A mod file is the actual archive of a mod. This method can be used to update a mod to a newer version (you can include changelog information in ModfileDetails).

Remarks​

If you want to upload images such as a new logo or gallery images, you can use UploadModMedia instead.

Parameters​

modfile the mod file and details to upload callback callback with the Result of the upload when the operation finishes

See Also​

Result ModfileDetails ArchiveModProfile GetCurrentUploadHandle ModIOUnityAsync.AddModfile UploadModMedia


ModId modId;
void Example()
{
ModfileDetails modfile = new ModfileDetails();
modfile.modId = modId;
modfile.directory = "files/mods/mod_123";
ModIOUnity.UploadModfile(modfile, UploadModCallback);
}
void UploadModCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("uploaded mod file");
}
else
{
Debug.Log("failed to upload mod file");
}
}

UploadModMedia​

public static void UploadModMedia(ModProfileDetails modProfileDetails, Action<Result> callback)

This is used to update the logo of a mod or the gallery images. This works very similar to EditModProfile except it only affects the images.

Parameters​

modProfileDetails this holds the reference to the images you wish to upload callback a callback with the Result of the operation

See Also​

ModProfileDetails Result EditModProfile ModIOUnityAsync.UploadModMedia


ModId modId;
Texture2D newTexture;
void Example()
{
ModProfileDetails profile = new ModProfileDetails();
profile.modId = modId;
profile.logo = newTexture;
ModIOUnity.UploadModMedia(profile, UploadProfileCallback);
}
void UploadProfileCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("uploaded new mod logo");
}
else
{
Debug.Log("failed to uploaded mod logo");
}
}

ReorderModMedia​

public static void ReorderModMedia(ModId modId, string[] orderedFilenames, Action<ResultAnd<ModProfile>> callback)

Reorder a mod's gallery images. orderedFilenames must represent every entry in (or any of the size-variant arrays) or the operation will fail. The provided callback is invoked with the updated ModProfile.

DeleteModMedia​

public static void DeleteModMedia(ModId modId, string[] filenames, Action<ResultAnd<ModProfile>> callback)

Delete gallery images from a mod. Filenames can be sourced from (or any of the size-variant arrays). The provided callback is invoked with the updated ModProfile.

ArchiveModProfile​

public static void ArchiveModProfile(ModId modId, Action<Result> callback)

Removes a mod from being visible on the mod.io server.

Remarks​

If you want to delete a mod permanently you can do so from a web browser.

Parameters​

modId the id of the mod to delete callback callback with the result of the operation

See Also​

Result CreateModProfile EditModProfile ModIOUnityAsync.ArchiveModProfile


ModId modId;
void Example()
{
ModIOUnity.ArchiveModProfile(modId, ArchiveModCallback);
}
void ArchiveModCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("archived mod profile");
}
else
{
Debug.Log("failed to archive mod profile");
}
}

GetCurrentUserCreations​

public static void GetCurrentUserCreations(SearchFilter filter, Action<ResultAnd<ModPage>> callback)

Get all mods the authenticated user added or is a team member of. Successful request will return an array of Mod Objects. We recommended reading the filtering documentation to return only the records you want.

AddTags​

public static void AddTags(ModId modId, string[] tags, Action<Result> callback)

Adds the provided tags to the specified mod id. In order for this to work the authenticated user must have permission to edit the specified mod. Only existing tags as part of the game Id will be added.

Parameters​

modId Id of the mod to add tags to tags array of tags to be added callback callback with the result of the operation

See Also​

Result DeleteTags ModIOUnityAsync.AddTags


ModId modId;
string[] tags;
void Example()
{
ModIOUnity.AddTags(modId, tags, AddTagsCallback);
}
void AddTagsCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("added tags");
}
else
{
Debug.Log("failed to add tags");
}
}

AddModComment​

public static void AddModComment(ModId modId, CommentDetails commentDetails, Action<ResultAnd<ModComment>> callback)

Adds a comment to a mod profile. Successfully adding a comment returns the Mod Comment object back.

Remarks​

Keep in mind you can use mentions in the comment content, such as "Hello there, @@<john-doe>"

Parameters​

modId Id of the mod to add the comment to commentDetails the new comment to be added callback callback with the result of the operation

See Also​

Result ResultAnd ModComment CommentDetails GetModComments DeleteModComment EditModComment ModIOUnityAsync.AddModComment


ModId modId;
void Example()
{
CommentDetails comment = new CommentDetails(0, "Hello world!");
ModIOUnity.AddModComment(modId, comment, AddCommentCallback);
}
void AddCommentCallback(ResultAnd<ModComment> response)
{
if (response.result.Succeeded())
{
Debug.Log("added comment");
}
else
{
Debug.Log("failed to add comment");
}
}

DeleteModComment​

public static void DeleteModComment(ModId modId, long commentId, Action<Result> callback)

Delete a comment from a mod profile. Successful request will return 204 No Content and fire a MOD_COMMENT_DELETED event.

Parameters​

modId Id of the mod to add the comment to commentId The id for the comment to be removed callback callback with the result of the operation

See Also​

Result ModComment CommentDetails DeleteModComment EditModComment ModIOUnityAsync.DeleteModComment


private ModId modId;
private long commentId;
void Example()
{
ModIOUnity.DeleteModComment(modId, commentId, DeleteCommentCallback);
}
void DeleteCommentCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("deleted comment");
}
else
{
Debug.Log("failed to delete comment");
}
}

UpdateModComment​

public static void UpdateModComment(ModId modId, string content, long commentId, Action<ResultAnd<ModComment>> callback)

Update a comment for the corresponding mod. Successful request will return the updated Comment Object.

Parameters​

modId Id of the mod the comment is on content Updated contents of the comment. commentId The id for the comment you wish to edit callback callback with the result of the operation

See Also​

ResultAnd ModComment ModIOUnityAsync.UpdateModComment


private string content = "This is a Comment";
long commentId = 12345;
ModId modId = (ModId)1234;
void UpdateMod()
{
ModIOUnity.UpdateModComment(modId, content, commentId, UpdateCallback);
}
void UpdateCallback(ResultAnd<ModComment> resultAnd)
{
if(resultAnd.result.Succeeded())
{
Debug.Log("Successfully Updated Comment!");
}
else
{
Debug.Log("Failed to Update Comment!");
}
}

DeleteTags​

public static void DeleteTags(ModId modId, string[] tags, Action<Result> callback)

Deletes the specified tags from the mod. In order for this to work the authenticated user must have permission to edit the specified mod.

Parameters​

modId the id of the mod for deleting tags tags array of tags to be deleted callback callback with the result of the operation

See Also​

Result AddTags ModIOUnityAsync.DeleteTags


ModId modId;
string[] tags;
void Example()
{
ModIOUnity.DeleteTags(modId, tags, DeleteTagsCallback);
}
void DeleteTagsCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("deleted tags");
}
else
{
Debug.Log("failed to delete tags");
}
}

GetMultipartUploadSessions​

public static void GetMultipartUploadSessions(ModId modId, SearchFilter filter, Action<ResultAnd<PaginatedResponse<MultipartUpload>>> callback)

Get all upload sessions belonging to the authenticated user for the corresponding mod. Successful request will return an array of Multipart Upload Part Objects. We recommended reading the filtering documentation to return only the records you want. The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. This function is optional and is provided to allow for more control over uploading large files for those who require it.

Parameters​

modId the id of the mod filter The filter to apply when searching through comments (can only apply pagination parameters, Eg. page size and page index) callback a callback with the Result of the operation

See Also​

SearchFilter ModIOUnityAsync.UploadModfile ModIOUnityAsync.GetMultipartUploadSessions


ModId modId;
SearchFilter filter;
private void Example()
{
ModIOUnity.GetMultipartUploadSessions(modId, filter, Callback);
}
void Callback(ResultAnd<MultipartUploadSessionsObject> response)
{
if (response.result.Succeeded())
{
Debug.Log("Received Upload Sessions");
}
else
{
Debug.Log("Failed to get Upload Sessions");
}
}

GetMultipartUploadParts​

public static void GetMultipartUploadParts(ModId modId, string uploadId, SearchFilter filter, Action<ResultAnd<PaginatedResponse<MultipartUploadPart>>> callback)

Get all uploaded parts for a corresponding upload session. Successful request will return an array of Multipart Upload Part Objects.We recommended reading the filtering documentation to return only the records you want. The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. This function is optional and is provided to allow for more control over uploading large files for those who require it.

Parameters​

modId the id of the mod uploadId A universally unique identifier (UUID) that represents the upload session. filter The filter to apply when searching through comments (can only apply pagination parameters, Eg. page size and page index) callback a callback with the Result of the operation

See Also​

SearchFilter ModIOUnityAsync.UploadModfile ModIOUnityAsync.GetMultipartUploadParts


ModId modId;
string uploadId;
SearchFilter filter;
private void Example()
{
ModIOUnity.GetMultipartUploadParts(modId, uploadId, filter, Callback);
}
void Callback(ResultAnd<MultipartUploadSessionsObject> response)
{
if (response.result.Succeeded())
{
Debug.Log("Received Upload Sessions Object");
}
else
{
Debug.Log("Failed to get Upload Sessions Object");
}
}

AddMultipartUploadParts​

public static void AddMultipartUploadParts(ModId modId, string uploadId, string contentRange, string digest, byte[] rawBytes, Action<Result> callback)

Add a new multipart upload part to an existing upload session. All parts must be exactly 50MB (Mebibyte) in size unless it is the final part which can be smaller. A successful request will return a single Multipart Upload Part Object. NOTE: Unlike other POST endpoints on this service, the body of this request should contain no form parameters and instead be the data described in the byte range of the Content-Range header of the request. The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. This function is optional and is provided to allow for more control over uploading large files for those who require it.

Parameters​

modId the id of the mod uploadId A universally unique identifier (UUID) that represents the upload session. contentRange The Content-Range of the file you are sending. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range digest Optional Digest for part integrity checks once the part has been uploaded. rawBytes Bytes for the file part to be uploaded callback a callback with the Result of the operation

See Also​

ModIOUnityAsync.UploadModfile ModIOUnityAsync.AddMultipartUploadParts


ModId modId;
string uploadId;
string contentRange;
string digest;
byte[] rawBytes;
private void Example()
{
ModIOUnity.AddMultipartUploadParts(modId, uploadId, contentRange, digest, rawBytes, Callback);
}
void Callback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Added a part to Upload Session");
}
else
{
Debug.Log("Failed to add a part to Upload Session");
}
}

CreateMultipartUploadSession​

public static void CreateMultipartUploadSession(ModId modId, string filename, string nonce

Create a new multipart upload session. A successful request will return a single Multipart Upload Object. NOTE: The multipart upload system is designed for uploading large files up to 20GB in size. If uploading files less than 100MB, we recommend using the Add Modfile endpoint. The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. This function is optional and is provided to allow for more control over uploading large files for those who require it.

Parameters​

modId the id of the mod nonce An optional nonce to provide to prevent duplicate upload sessions from being created concurrently. Maximum of 64 characters. filename The filename of the file once all the parts have been uploaded. The filename must include the .zip extension and cannot exceed 100 characters. callback a callback with the Result of the operation

See Also​

ModIOUnityAsync.UploadModfile ModIOUnityAsync.CreateMultipartUploadSession


ModId modId;
string filename;
string nonce;
private void Example()
{
ModIOUnity.CreateMultipartUploadSession(modId, filename, nonce, Callback);
}
void Callback(ResultAnd<MultipartUploadObject> response)
{
if (response.result.Succeeded())
{
Debug.Log("Created Upload Session");
}
else
{
Debug.Log("Failed to Create Upload Session");
}
}

DeleteMultipartUploadSession​

public static void DeleteMultipartUploadSession(ModId modId, string uploadId, Action<Result> callback)

Terminate an active multipart upload session, a successful request will return 204 No Content. The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. This function is optional and is provided to allow for more control over uploading large files for those who require it.

Parameters​

modId the id of the mod uploadId A universally unique identifier (UUID) that represents the upload session. callback a callback with the Result of the operation

See Also​

ModIOUnityAsync.DeleteMultipartUploadSession ModIOUnityAsync.UploadModfile


ModId modId;
string uploadId;
private void Example()
{
ModIOUnity.DeleteMultipartUploadSession(modId, uploadId, Callback);
}
void Callback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Deleted Upload Session");
}
else
{
Debug.Log("Failed to Delete Upload Session");
}
}

CompleteMultipartUploadSession​

public static void CompleteMultipartUploadSession(ModId modId, string uploadId, Action<Result> callback)

Complete an active multipart upload session, this endpoint assumes that you have already uploaded all individual parts. A successful request will return a 200 OK response code and return a single Multipart Upload Object. The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. This function is optional and is provided to allow for more control over uploading large files for those who require it.

Parameters​

modId the id of the mod uploadId A universally unique identifier (UUID) that represents the upload session. callback a callback with the Result of the operation

See Also​

ModIOUnityAsync.CompleteMultipartUploadSession ModIOUnityAsync.UploadModfile


ModId modId;
string uploadId;
private void Example()
{
ModIOUnity.CompleteMultipartUploadSession(modId, uploadId, Callback);
}
void Callback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Completed Session");
}
else
{
Debug.Log("Failed to complete session");
}
}

DownloadImage​

public static void DownloadImage(DownloadReference downloadReference,  Action<ResultAnd<byte[]>> callback)

Downloads a texture based on the specified download reference.

Remarks​

You can get download references from UserProfiles and ModProfiles

Parameters​

downloadReference download reference for the texture (eg UserObject.avatar_100x100) callback callback with the Result and Texture2D from the download

See Also​

Result DownloadReference Texture2D ModIOUnityAsync.DownloadTexture


ModProfile mod;
void Example()
{
ModIOUnity.DownloadTexture(mod.logoImage_320x180, DownloadTextureCallback);
}
void DownloadTextureCallback(ResultAnd<Texture2D> response)
{
if (response.result.Succeeded())
{
Debug.Log("downloaded the mod logo texture");
}
else
{
Debug.Log("failed to download the mod logo texture");
}
}

Report​

public static void Report(Report report, Action<Result> callback)

Reports a specified mod to mod.io.

Parameters​

report the object containing all of the details of the report you are sending callback callback with the Result of the report

See Also​

Report Result ModIOUnityAsync.Report


void Example()
{
Report report = new Report(new ModId(123),
ReportType.Generic,
"reporting this mod for a generic reason",
"JohnDoe",
"johndoe@mod.io");
ModIOUnity.Report(report, ReportCallback);
}
void ReportCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("successfully sent a report");
}
else
{
Debug.Log("failed to send a report");
}
}

SyncEntitlements​

public static void SyncEntitlements(Action<ResultAnd<Entitlement[]>> callback)

Convert an in-game consumable that a user has purchased on Steam, XBOX, or Psn into a users mod.io inventory. This endpoint will consume the entitlement on behalf of the user against the portal in which the entitlement resides (i.e. Steam, XBOX, Psn).

Parameters​

callback a callback with the Result of the operation

See Also​

Entitlement EntitlementObject ModIOUnityAsync.SyncEntitlements


private void Example()
{
ModIOUnity.SyncEntitlements();
}
void Callback(ResultAnd<Entitlement[]> response)
{
if (response.result.Succeeded())
{
Debug.Log("Sync Entitlements Success");
}
else
{
Debug.Log("Failed to Sync Entitlements");
}
}

PurchaseMod​

public static void PurchaseMod(ModId modId, int displayAmount, string idempotent, bool subscribeOnPurchase, Action<ResultAnd<CheckoutProcess>> callback)

Complete a marketplace purchase. A Successful request will return the newly created Checkout Process Object. Parameter|Type|Required|Description ---|---|---|---| transaction_id|integer|true|The id of the transaction to complete. mod_id|integer|true|The id of the mod associated to this transaction. display_amount|integer|true|The expected amount of the transaction to confirm the displayed amount matches the actual amount.

Parameters​

modId The id of the mod the user wants to purchase. displayAmount The amount that was shown to the user for the purchase. idempotent A unique string. Must be alphanumeric and cannot contain unique characters except for - subscribeOnPurchase Automatically subscribe to the mod after purchase callback callback with the result of the operation

See Also​

Result


string idempotent = $"aUniqueKey";
ModId modId = 1234;
int displayAmount = 12;
void Example()
{
ModIOUnity.PurchaseMod(modId, displayAmount, idempotent, Callback);
}
void Callback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Completed Purchase");
}
else
{
Debug.Log("failed to complete purchase");
}
}

GetPurchasedMods​

public static ModProfile[] GetPurchasedMods(out Result result)

Retrieves all of the purchased mods for the current user.

Parameters​

result an out parameter for whether or not the method succeeded

See Also​

Result FetchUpdates

Returns​

an array of the user's purchased mods


void Example()
{
ModProfile[] mods = ModIOUnity.GetPurchasedMods(out Result result);
if (result.Succeeded())
{
Debug.Log("user has " + mods.Length + " purchased mods");
}
else
{
Debug.Log("failed to get purchased mods");
}
}

GetUserWalletBalance​

public static void GetUserWalletBalance(Action<ResultAnd<Wallet>> callback)

Get user's wallet balance

Parameters​

callback callback with the result of the operation

See Also​

Result


void Example()
{
ModIOUnity.GetUserWalletBalance(filter, Callback);
}
void Callback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Get balance Success");
}
else
{
Debug.Log("failed to get balance");
}
}

GetGameTokenPacks​

public static void GetGameTokenPacks(Action<ResultAnd<TokenPack[]>> callback)

StartAnalyticsSession​

public static void StartAnalyticsSession(string sessionId, long[] modIds, bool startHeartbeat, Action<Result> callback)

Send Request to start tracking playtime analytics. Best used after a player has loaded into the game with their selected mods. Multiple sessions can be active, however the session ids must be unique.

Parameters​

sessionId Must be unique (guid) modIds Mods used for this session. startHeartbeat Starts a heartbeat coroutine that will ping the server around every 5 min callback callback with the result of the operation

See Also​

StartAnalyticsSession ModIOUnityAsync.StartAnalyticsSession ModIOUnity.SendAnalyticsHeartbeat ModIOUnityAsync.SendAnalyticsHeartbeat ModIOUnity.EndAnalyticsSession ModIOUnityAsync.EndAnalyticsSession


string[] modIds;
string sessionId;
void Example()
{
ModIOUnity.StartAnalyticsSession(sessionId, modIds, true, Callback);
}
void ReportCallback(ResultAnd<string> r)
{
if (r.result.Succeeded())
{
//Store the returned session id to end the session later.
sessionId = r.value;
Debug.Log("successful");
}
else
{
Debug.Log("failed");
}
}

SendAnalyticsHeartbeat​

public static void SendAnalyticsHeartbeat(string sessionId, Action<Result> callback)

Send Request to start tracking playtime analytics. Best used after a player has loaded into the game with their selected mods. Multiple sessions can be active, however the session ids must be unique.

Parameters​

sessionId Must be unique (guid) callback callback with the result of the operation

See Also​

StartAnalyticsSession ModIOUnityAsync.StartAnalyticsSession ModIOUnity.SendAnalyticsHeartbeat ModIOUnityAsync.SendAnalyticsHeartbeat ModIOUnity.EndAnalyticsSession ModIOUnityAsync.EndAnalyticsSession


string sessionId;
void Example()
{
ModIOUnity.StartAnalyticsSession(sessionId, Callback);
}
void ReportCallback(Result r)
{
if (r.result.Succeeded())
{
//Store the returned session id to end the session later.
sessionId = r.value;
Debug.Log("successful");
}
else
{
Debug.Log("failed");
}
}

EndAnalyticsSession​

public static void EndAnalyticsSession(string sessionId, Action<Result> callback)

Send Request to end the tracking of playtime analytics. Best used after a player has left an in game session.

Parameters​

sessionId Session id associated with the session you want to end. callback callback with the result of the operation

See Also​

StartAnalyticsSession ModIOUnityAsync.StartAnalyticsSession ModIOUnity.SendAnalyticsHeartbeat ModIOUnityAsync.SendAnalyticsHeartbeat ModIOUnity.EndAnalyticsSession ModIOUnityAsync.EndAnalyticsSession


string sessionId;
void Example()
{
ModIOUnity.EndAnalyticsSession(sessionId, Callback);
}
void ReportCallback(Result result)
{
if (result.Succeeded())
{
Debug.Log("successful");
}
else
{
Debug.Log("failed");
}
}

RequestUserDelegationToken​

public static void RequestUserDelegationToken(Action<ResultAnd<UserDelegationToken>> callback)

Requests a User Delegation Token on behalf of a authenticated user. This token should then be sent to your secure backend server where you can then use it for specific endpoints.

Parameters​

callback callback with the result of the operation

CreateTempModSet​

public static void CreateTempModSet(ModId[] modIds, Action<Result> callback)

Creates a Temp mod set

Parameters​

modIds Mods used for this set. callback callback with the result of the operation

See Also​

ModIOUnityAsync.CreateTempModSet ModIOUnity.DeleteTempModSet ModIOUnity.AddModsToTempModSet ModIOUnity.RemoveModsFromTempModSet ModIOUnity.GetTempSystemInstalledMods


ModId[] modIds;
void Example()
{
ModIOUnity.CreateTempModSet(modIds, callback);
}
void Callback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Successful");
}
else
{
Debug.Log("Failed");
}
}

DeleteTempModSet​

public static Result DeleteTempModSet()

Removes a Temp mod set

See Also​

ModIOUnity.CreateTempModSet ModIOUnity.AddModsToTempModSet ModIOUnity.RemoveModsFromTempModSet ModIOUnity.GetTempSystemInstalledMods


void Example()
{
ModIOUnity.DeleteTempModSet(callback);
}
void Callback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Successful");
}
else
{
Debug.Log("Failed");
}
}

AddModsToTempModSet​

public static void AddModsToTempModSet(ModId[] modIds, Action<Result> callback)

Adds mods to a Temp mod set

Parameters​

modIds Mods used for this set. callback callback with the result of the operation

See Also​

ModIOUnity.CreateTempModSet ModIOUnity.DeleteTempModSet ModIOUnityAsync.AddModsToTempModSet ModIOUnity.RemoveModsFromTempModSet ModIOUnity.GetTempSystemInstalledMods


ModId[] modIds;
void Example()
{
ModIOUnity.AddModToTempModSet(modIds, callback);
}
void Callback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Successful");
}
else
{
Debug.Log("Failed");
}
}

RemoveModsFromTempModSet​

public static Result RemoveModsFromTempModSet(IEnumerable<ModId> modIds)

Removes mods from a Temp mod set

Parameters​

modIds Mods used for this set.

See Also​

ModIOUnity.CreateTempModSet ModIOUnity.DeleteTempModSet ModIOUnity.AddModsToTempModSet ModIOUnity.GetTempSystemInstalledMods


ModId[] modIds;
void Example()
{
ModIOUnity.RemoveModsFromTempModSet(modIds, callback);
}
void Callback(Result result)
{
if (result.Succeeded())
{
Debug.Log("Successful");
}
else
{
Debug.Log("Failed");
}
}

GetTempSystemInstalledMods​

public static InstalledMod[] GetTempSystemInstalledMods(out Result result)

Gets an array of temp mods that are installed on the current device.

Remarks​

Note that these will not be subscribed by the current user. If you wish to get all of the current user's installed mods use ModIOUnity.GetSubscribedMods() and check the SubscribedMod.status equals SubscribedModStatus.Installed.

Parameters​

result an out Result to inform whether or not it was able to get temp installed mods

Returns​

an array of InstalledMod for each existing temp mod installed on the current device (and not subscribed by the current user)

See Also​

InstalledMod GetSubscribedMods ModIOUnity.CreateTempModSet ModIOUnity.DeleteTempModSet ModIOUnityAsync.AddModsToTempModSet ModIOUnity.RemoveModsFromTempModSet


void Example()
{
InstalledMod[] mods = ModIOUnity.GetTempSystemInstalledMods(out Result result);
if (result.Succeeded())
{
Debug.Log("found " + mods.Length.ToString() + " temp mods installed");
}
else
{
Debug.Log("failed to get temp installed mods");
}
}


ModIOUnityAsync​

public static class ModIOUnityAsync

Main async interface for the mod.io Unity plugin.

Remarks​

Every ModIOUnityAsync method has a callback alternative in ModIOUnity.

See Also​

ModIOUnity

Method​

Shutdown​

public static async Task Shutdown()

Cancels all public operations, frees plugin resources and invokes any pending callbacks with a cancelled result code.

Remarks​

Result.IsCancelled() can be used to determine if it was cancelled due to a shutdown operation.


await ModIOUnityAsync.Shutdown();
Debug.Log("Plugin shutdown complete");

See Also​

Result

Ping​

public static Task<Result> Ping()

Pings the server. Result.Succeeded() will be true if a response was received.

RequestExternalAuthentication​

public static async Task<ResultAnd<ExternalAuthenticationToken>> RequestExternalAuthentication()

Listen for an external login attempt. Returns an that includes the url and code to display to the user. ExternalAuthenticationToken.task will complete once the user enters the code.

Remarks​

The request will time out after 15 minutes. You can cancel it at any time using token.Cancel().


var response = await ModIOUnityAsync.RequestExternalAuthentication();
if (!response.result.Succeeded())
{
Debug.Log($"RequestExternalAuthentication failed: {response.result.message}");
return;
}

See Also​

Result ResultAnd ExternalAuthenticationToken

RequestAuthenticationEmail​

public static async Task<Result> RequestAuthenticationEmail(string emailaddress)

Sends an email with a security code to the specified Email Address. The security code is then used to Authenticate the user session using ModIOUnity.SubmitEmailSecurityCode()

Remarks​

The operation will return a Result object. If the email is successfully sent Result.Succeeded() will equal true. If you haven't Initialized the plugin then Result.IsInitializationError() will equal true. If the string provided for the emailaddress is not .NET compliant Result.IsAuthenticationError() will equal true.

Parameters​

emailaddress the Email Address to send the security code to, eg "JohnDoe@gmail.com"

See Also​

SubmitEmailSecurityCode Result


async void Example()
{
Result result = await ModIOUnityAsync.RequestAuthenticationEmail("johndoe@gmail.com");
if (result.Succeeded())
{
Debug.Log("Succeeded to send security code");
}
else
{
Debug.Log("Failed to send security code to that email address");
}
}

SubmitEmailSecurityCode​

public static async Task<Result> SubmitEmailSecurityCode(string securityCode)

Attempts to Authenticate the current session by submitting a security code received by email from ModIOUnity.RequestAuthenticationEmail()

Remarks​

It is intended that this function is used after ModIOUnity.RequestAuthenticationEmail() is performed successfully.

Parameters​

securityCode The security code received from an authentication email

See Also​

RequestAuthenticationEmail Result


async void Example(string userSecurityCode)
{
Result result = await ModIOUnityAsync.SubmitEmailSecurityCode(userSecurityCode);
if (result.Succeeded())
{
Debug.Log("You have successfully authenticated the user");
}
else
{
Debug.Log("Failed to authenticate the user");
}
}

GetTermsOfUse​

public static async Task<ResultAnd<TermsOfUse>> GetTermsOfUse()

This retrieves the terms of use text to be shown to the user to accept/deny before authenticating their account via a third party provider, eg steam or google.

Remarks​

If the operation succeeds it will also provide a TermsOfUse struct that contains a TermsHash struct which you will need to provide when calling a third party authentication method such as ModIOUnity.AuthenticateUserViaSteam()

See Also​

TermsOfUse AuthenticateUserViaDiscord AuthenticateUserViaGoogle AuthenticateUserViaGOG AuthenticateUserViaItch AuthenticateUserViaOculus AuthenticateUserViaSteam AuthenticateUserViaSwitch AuthenticateUserViaXbox AuthenticateUserViaPlayStation


async void Example()
{
ResultAnd<TermsOfUser> response = await ModIOUnityAsync.GetTermsOfUse();
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}

AuthenticateUserViaSteam​

public static async Task<Result> AuthenticateUserViaSteam(string steamToken,  string emailAddress,  TermsHash? hash)

Attempts to authenticate a user via the steam API.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

steamToken the user's steam token emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse()

See Also​

GetTermsOfUse


// First we get the Terms of Use to display to the user and cache the hash
async void GetTermsOfUse_Example()
{
ResultAnd<TermsOfUser> response = await ModIOUnityAsync.GetTermsOfUse();
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
async void Authenticate_Example()
{
Result result = await ModIOUnityAsync.AuthenticateUserViaSteam(steamToken, "johndoe@gmail.com", modIOTermsOfUse.hash);
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

AuthenticateUserViaEpic​

public static async Task<Result> AuthenticateUserViaEpic(string epicToken,  string emailAddress,  TermsHash? hash)

Attempts to authenticate a user via the epic API.

Parameters​

epicToken the user's epic token emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse()

See Also​

GetTermsOfUse ModIOUnity.AuthenticateUserViaEpic


// First we get the Terms of Use to display to the user and cache the hash
async void GetTermsOfUse_Example()
{
ResultAnd<TermsOfUser> response = await ModIOUnityAsync.GetTermsOfUse();
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
async void Authenticate_Example()
{
Result result = await ModIOUnityAsync.AuthenticateUserViaEpic(epicToken, "johndoe@gmail.com", modIOTermsOfUse.hash);
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

AuthenticateUserViaPlayStation​

public static async Task<Result> AuthenticateUserViaPlayStation(string authCode,  string emailAddress,  TermsHash? hash,  PlayStationEnvironment environment)

Attempts to authenticate a user via the steam API.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

authCode the user's authcode token emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse() environment the PSN account environment

See Also​

GetTermsOfUse


// First we get the Terms of Use to display to the user and cache the hash
async void GetTermsOfUse_Example()
{
ResultAnd<TermsOfUser> response = await ModIOUnityAsync.GetTermsOfUse();
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
async void Authenticate_Example()
{
Result result = await ModIOUnityAsync.AuthenticateUserViaPlayStation(authCode, "johndoe@gmail.com", modIOTermsOfUse.hash, PlayStationEnvironment.np);
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

AuthenticateUserViaGOG​

public static async Task<Result> AuthenticateUserViaGOG(string gogToken, string emailAddress,  TermsHash? hash)

Attempts to authenticate a user via the GOG API.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

gogToken the user's steam token emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse()

See Also​

GetTermsOfUse


// First we get the Terms of Use to display to the user and cache the hash
async void GetTermsOfUse_Example()
{
ResultAnd<TermsOfUser> response = await ModIOUnityAsync.GetTermsOfUse();
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
async void Authenticate_Example()
{
Result result = await ModIOUnityAsync.AuthenticateUserViaGOG(gogToken, "johndoe@gmail.com", modIOTermsOfUse.hash);
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

AuthenticateUserViaItch​

public static async Task<Result> AuthenticateUserViaItch(string itchioToken,  string emailAddress,  TermsHash? hash)

Attempts to authenticate a user via the Itch.io API.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

itchioToken the user's steam token emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse()

See Also​

GetTermsOfUse


// First we get the Terms of Use to display to the user and cache the hash
async void GetTermsOfUse_Example()
{
ResultAnd<TermsOfUser> response = await ModIOUnityAsync.GetTermsOfUse();
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
async void Authenticate_Example()
{
Result result = await ModIOUnityAsync.AuthenticateUserViaItch(itchioToken, "johndoe@gmail.com", modIOTermsOfUse.hash);
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

AuthenticateUserViaXbox​

public static async Task<Result> AuthenticateUserViaXbox(string xboxToken,  string emailAddress,  TermsHash? hash)

Attempts to authenticate a user via the XBOX API.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

xboxToken the user's steam token emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse()

See Also​

GetTermsOfUse


// First we get the Terms of Use to display to the user and cache the hash
async void GetTermsOfUse_Example()
{
ResultAnd<TermsOfUser> response = await ModIOUnityAsync.GetTermsOfUse();
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
async void Authenticate_Example()
{
Result result = await ModIOUnityAsync.AuthenticateUserViaItch(xboxToken, "johndoe@gmail.com", modIOTermsOfUse.hash);
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

AuthenticateUserViaSwitch​

public static async Task<Result> AuthenticateUserViaSwitch(string switchToken,  string emailAddress,  TermsHash? hash)

Attempts to authenticate a user via the switch API.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

switchToken the user's steam token emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse()

See Also​

GetTermsOfUse


// First we get the Terms of Use to display to the user and cache the hash
async void GetTermsOfUse_Example()
{
ResultAnd<TermsOfUser> response = await ModIOUnityAsync.GetTermsOfUse();
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
async void Authenticate_Example()
{
Result result = await ModIOUnityAsync.AuthenticateUserViaItch(switchToken, "johndoe@gmail.com", modIOTermsOfUse.hash);
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

AuthenticateUserViaDiscord​

public static async Task<Result> AuthenticateUserViaDiscord(string discordToken,  string emailAddress,  TermsHash? hash)

Attempts to authenticate a user via the discord API.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

discordToken the user's steam token emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse()

See Also​

GetTermsOfUse


// First we get the Terms of Use to display to the user and cache the hash
async void GetTermsOfUse_Example()
{
ResultAnd<TermsOfUser> response = await ModIOUnityAsync.GetTermsOfUse();
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
async void Authenticate_Example()
{
Result result = await ModIOUnityAsync.AuthenticateUserViaDiscord(discordToken, "johndoe@gmail.com", modIOTermsOfUse.hash);
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

AuthenticateUserViaGoogle​

public static async Task<Result> AuthenticateUserViaGoogle(string token,  string emailAddress,  TermsHash? hash)

Attempts to authenticate a user via the google API.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

token google auth code or id token emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse()

See Also​

GetTermsOfUse


// First we get the Terms of Use to display to the user and cache the hash
async void GetTermsOfUse_Example()
{
ResultAnd<TermsOfUser> response = await ModIOUnityAsync.GetTermsOfUse();
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
async void Authenticate_Example()
{
Result result = await ModIOUnityAsync.AuthenticateUserViaGoogle(token, "johndoe@gmail.com", modIOTermsOfUse.hash);
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

AuthenticateUserViaApple​

public static async Task<Result> AuthenticateUserViaApple(string authCode,  string emailAddress,  TermsHash? hash)

Attempts to authenticate a user via the Apple API.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

authCode Apple auth code emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse()

See Also​

GetTermsOfUse


// First we get the Terms of Use to display to the user and cache the hash
async void GetTermsOfUse_Example()
{
ResultAnd<TermsOfUser> response = await ModIOUnityAsync.GetTermsOfUse();
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
async void Authenticate_Example()
{
Result result = await ModIOUnityAsync.AuthenticateUserViaApple(authCode, "johndoe@gmail.com", modIOTermsOfUse.hash);
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

AuthenticateUserViaOculus​

public static async Task<Result> AuthenticateUserViaOculus(OculusDevice oculusDevice, string nonce,  long userId, string oculusToken,  string emailAddress,  TermsHash? hash)

Attempts to authenticate a user via the oculus API.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

oculusToken the user's oculus token oculusDevice the device you're authenticating on nonce the nonce userId the user id emailAddress the user's email address (Can be null) hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse()

See Also​

GetTermsOfUse


// First we get the Terms of Use to display to the user and cache the hash
async void GetTermsOfUse_Example()
{
ResultAnd<TermsOfUser> response = await ModIOUnityAsync.GetTermsOfUse();
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
async void Authenticate_Example()
{
Result result = await ModIOUnityAsync.AuthenticateUserViaOculus(OculusDevice.Quest,
nonce,
userId,
oculusToken,
"johndoe@gmail.com",
modIOTermsOfUse.hash);
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

AuthenticateUserViaOpenId​

public static async Task<Result> AuthenticateUserViaOpenId(string idToken,  string emailAddress,  TermsHash? hash)

Attempts to authenticate a user on behalf of an OpenID identity provider. To use this method of authentication, you must configure the OpenID config in your games authentication admin page. NOTE: The ability to authenticate players using your identity provider is a feature for advanced partners only. If you are interested in becoming an advanced partner, please contact us.

Remarks​

You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() method.

Parameters​

idToken the user's id token emailAddress the user's email address hash the TermsHash retrieved from ModIOUnity.GetTermsOfUse()

See Also​

GetTermsOfUse


// First we get the Terms of Use to display to the user and cache the hash
async void GetTermsOfUse_Example()
{
ResultAnd<TermsOfUser> response = await ModIOUnityAsync.GetTermsOfUse();
if (response.result.Succeeded())
{
Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse);
// Cache the terms of use (which has the hash for when we attempt to authenticate)
modIOTermsOfUse = response.value;
}
else
{
Debug.Log("Failed to retrieve the terms of use");
}
}
// Once we have the Terms of Use and hash we can attempt to authenticate
async void Authenticate_Example()
{
Result result = await ModIOUnityAsync.AuthenticateUserViaOpenId(idToken,
"johndoe@gmail.com",
modIOTermsOfUse.hash);
if (result.Succeeded())
{
Debug.Log("Successfully authenticated user");
}
else
{
Debug.Log("Failed to authenticate");
}
}

IsAuthenticated​

public static async Task<Result> IsAuthenticated()

Informs you if the current user session is authenticated or not.

See Also​

Result


async void Example()
{
Result result = await ModIOUnityAsync.IsAuthenticated();
if (result.Succeeded())
{
Debug.Log("current session is authenticated");
}
else
{
Debug.Log("current session is not authenticated");
}
}

GetTagCategories​

public static async Task<ResultAnd<TagCategory[]>> GetTagCategories()

Gets the existing tags for the current game Id that can be used when searching/filtering mods.

Remarks​

Tags come in category groups, eg "Color" could be the name of the category and the tags themselves could be Green

See Also​

SearchFilter TagCategory Result


async void Example()
{
ResultAnd<TagCategory[]> response = await ModIOUnityAsync.GetTagCategories();
if (response.result.Succeeded())
{
foreach(TagCategory category in response.value)
{
foreach(Tag tag in category.tags)
{
Debug.Log(tag.name + " tag is in the " + category.name + "category");
}
}
}
else
{
Debug.Log("failed to get game tags");
}
}

GetMods​

public static async Task<ResultAnd<ModPage>> GetMods(SearchFilter filter)

Uses a SearchFilter to retrieve a specific Mod Page and returns the ModProfiles and total number of mods based on the Search Filter.

Remarks​

A ModPage contains a group of mods based on the pagination filters in SearchFilter. eg, if you use SearchFilter.SetPageIndex(0) and SearchFilter.SetPageSize(100) then ModPage.mods will contain mods from 1 to 100. But if you set SearchFilter.SetPageIndex(1) then it will have mods from 101 to 200, if that many exist. (note that 100 is the maximum page size).

Parameters​

filter The filter to apply when searching through mods (also contains pagination parameters)

See Also​

SearchFilter ModPage Result


async void Example()
{
SearchFilter filter = new SearchFilter();
filter.SetPageIndex(0);
filter.SetPageSize(10);
ResultAnd<ModPage> response = await ModIOUnityAsync.GetMods(filter);
if (response.result.Succeeded())
{
Debug.Log("ModPage has " + response.value.modProfiles.Length + " mods");
}
else
{
Debug.Log("failed to get mods");
}
}

GetMod​

public static async Task<ResultAnd<ModProfile>> GetMod(ModId modId)

Requests a single ModProfile from the mod.io server by its ModId.

Remarks​

If there is a specific mod that you want to retrieve from the mod.io database you can use this method to get it.

Parameters​

modId the ModId of the ModProfile to get

See Also​

ModId ModProfile Result


async void Example()
{
ModId modId = new ModId(1234);
ResultAnd<ModProfile> response = await ModIOUnityAsync.GetMod(modId);
if (response.result.Succeeded())
{
Debug.Log("retrieved mod " + response.value.name);
}
else
{
Debug.Log("failed to get mod");
}
}

GetModSkipCache​

public static Task<ResultAnd<ModProfile>> GetModSkipCache(ModId modId)

GetModComments​

public static async Task<ResultAnd<CommentPage>> GetModComments(ModId modId, SearchFilter filter)

Get all comments posted in the mods profile. Successful request will return an array of Comment Objects. We recommended reading the filtering documentation to return only the records you want.

Parameters​

modId the ModId of the comments to get filter The filter to apply when searching through comments (can only apply pagination parameters, Eg. page size and page index)

See Also​

CommentPage ModComment SearchFilter ModId Result ResultAnd ModIOUnity.GetModComments

AddModComment​

public static async Task<ResultAnd<ModComment>> AddModComment(ModId modId, CommentDetails commentDetails)

Retrieves a list of ModDependenciesObjects that represent mods that depend on a mod.

Remarks​

This function returns only immediate mod dependencies, meaning that if you need the dependencies for the dependent mods, you will have to make multiple calls and watch for circular dependencies.

See Also​

ModId Result ResultAnd ModDependenciesObject ModIOUnity.GetModDependencies


async void Example()
{
ModId modId = new ModId(1234);
var resultAnd = await ModIOUnityAsync.GetModDependencies(modId);
if (resultAnd.result.Succeeded())
{
ModDependenciesObject[] modDependenciesObjects = resultAnd.value;
Debug.Log("retrieved mods dependencies");
}
else
{
Debug.Log("failed to get mod dependencies");
}
}

Parameters​

modId commentDetails

Returns​

DeleteModComment​

public static async Task<Result> DeleteModComment(ModId modId, long commentId)

Delete a comment from a mod profile. Successful request will return 204 No Content and fire a MOD_COMMENT_DELETED event.

Parameters​

modId Id of the mod to add the comment to commentId The id for the comment to be removed

See Also​

Result ModComment CommentDetails DeleteModComment ModIOUnity.DeleteModComment EditModComment


private ModId modId;
private long commentId;
void Example()
{
var result = await ModIOUnityAsync.DeleteModComment(modId, commentId);
if (result.Succeeded())
{
Debug.Log("deleted comment");
}
else
{
Debug.Log("failed to delete comment");
}
}

UpdateModComment​

public static async Task<ResultAnd<ModComment>> UpdateModComment(ModId modId, string content, long commentId)

Update a comment for the corresponding mod. Successful request will return the updated Comment Object.

Parameters​

modId Id of the mod the comment is on content Updated contents of the comment. commentId The id for the comment you wish to edit

See Also​

ResultAnd ModComment ModIOUnity.UpdateModComment


private string content = "This is a Comment";
long commentId = 12345;
ModId modId = (ModId)1234;
async void UpdateMod()
{
var response = await ModIOUnityAsync.UpdateModComment(modId, content, commentId);
if(response.result.Succeeded())
{
Debug.Log("Successfully Updated Comment!");
}
else
{
Debug.Log("Failed to Update Comment!");
}
}

GetModDependencies​

public static async Task<ResultAnd<ModDependencies[]>> GetModDependencies(ModId modId)

GetCurrentUserRatings​

public static async Task<ResultAnd<Rating[]>> GetCurrentUserRatings()

Get all mod rating's submitted by the authenticated user. Successful request will return an array of Rating Objects.

See Also​

ModId Rating ResultAnd


async void Example()
{
ResultAnd<Rating[]> response = await ModIOUnityAsync.GetCurrentUserRatings();
if (response.result.Succeeded())
{
foreach(var ratingObject in response.value)
{
Debug.Log($"retrieved rating {ratingObject.rating} for {ratingObject.modId}");
}
}
else
{
Debug.Log("failed to get ratings");
}
}

GetCurrentUserRatingFor​

public static async Task<ResultAnd<ModRating>> GetCurrentUserRatingFor(ModId modId)

Gets the rating that the current user has given for a specified mod. You must have an authenticated session for this to be successful.

Remarks​

Note that the rating can be 'None'

Parameters​

modId the id of the mod to check for a rating

See Also​

ModRating ModId ResultAnd


async void Example()
{
ModId modId = new ModId(1234);
ResultAnd<ModRating> response = await ModIOUnityAsync.GetCurrentUserRatingFor(modId);
if (response.result.Succeeded())
{
Debug.Log($"retrieved rating: {response.value}");
}
else
{
Debug.Log("failed to get rating");
}
}

RateMod​

public static async Task<Result> RateMod(ModId modId, ModRating rating)

Used to submit a rating for a specified mod.

Remarks​

This can be used to change/overwrite previous ratings of the current user.

Parameters​

modId the m=ModId of the mod being rated rating the rating to give the mod. Allowed values include ModRating.Positive, ModRating.Negative, ModRating.None

See Also​

ModRating Result ModId


ModProfile mod;
async void Example()
{
Result result = await ModIOUnityAsync.RateMod(mod.id, ModRating.Positive);
if (result.Succeeded())
{
Debug.Log("Successfully rated mod");
}
else
{
Debug.Log("Failed to rate mod");
}
}

SubscribeToMod​

public static async Task<Result> SubscribeToMod(ModId modId)

Adds the specified mod to the current user's subscriptions.

Remarks​

If mod management has been enabled via ModIOUnity.EnableModManagement() then the mod will be downloaded and installed.

Parameters​

modId ModId of the mod you want to subscribe to

See Also​

Result ModId ModIOUnity.EnableModManagement(ModIO.ModManagementEventDelegate) ModIOUnity.GetCurrentModManagementOperation


ModProfile mod;
async void Example()
{
Result result = await ModIOUnityAsync.SubscribeToMod(mod.id);
if (result.Succeeded())
{
Debug.Log("Successfully subscribed to mod");
}
else
{
Debug.Log("Failed to subscribe to mod");
}
}

UnsubscribeFromMod​

public static async Task<Result> UnsubscribeFromMod(ModId modId)

Removes the specified mod from the current user's subscriptions.

Remarks​

If mod management has been enabled via ModIOUnity.EnableModManagement() then the mod will be uninstalled at the next opportunity.

Parameters​

modId ModId of the mod you want to unsubscribe from

See Also​

Result ModId ModIOUnity.EnableModManagement(ModIO.ModManagementEventDelegate) ModIOUnity.GetCurrentModManagementOperation


ModProfile mod;
async void Example()
{
Result result = await ModIOUnityAsync.UnsubscribeFromMod(mod.id);
if (result.Succeeded())
{
Debug.Log("Successfully unsubscribed from mod");
}
else
{
Debug.Log("Failed to unsubscribe from mod");
}
}

GetCurrentUser​

public static async Task<ResultAnd<UserProfile>> GetCurrentUser(bool allowOfflineUser

Gets the current user's UserProfile struct. Containing their mod.io username, user id, language, timezone and download references for their avatar.

Remarks​

This requires the current session to have an authenticated user, otherwise Result.IsAuthenticationError() from the Result will equal true.

Parameters​

allowOfflineUser True if we allow the last saved user data if the server cannot be reached. Note that Result will still be a NetworkError

See Also​

Result UserProfile IsAuthenticated


async void Example()
{
ResultAnd<UserProfile> response = await ModIOUnityAsync.GetCurrentUser();
if (response.result.Succeeded())
{
Debug.Log("Got user: " + response.value.username);
}
else
{
Debug.Log("failed to get user");
}
}

DownloadNow​

public static async void DownloadNow(ModId modId)

Stops any current download and starts downloading the selected mod.

Parameters​

modId ModId of the mod you want to remove dependencies from

See Also​

Result ModId ModIOUnityAsync.DownloadNow


ModId modId;
void Example()
{
Result result = ModIOUnity.DownloadNow(modId);
if (result.Succeeded())
{
Debug.Log("Successful");
}
else
{
Debug.Log("Failed");
}
}

MuteUser​

public static async Task<Result> MuteUser(long userId)

Mutes a user which effectively hides any content from that specified user

Remarks​

The userId can be found from the UserProfile. Such as ModProfile.creator.userId

Parameters​

userId The id of the user to be muted

See Also​

UserProfile

UnmuteUser​

public static async Task<Result> UnmuteUser(long userId)

Un-mutes a user which effectively reveals previously hidden content from that user

Remarks​

The userId can be found from the UserProfile. Such as ModProfile.creator.userId

Parameters​

userId The id of the user to be muted

See Also​

UserProfile

GetMutedUsers​

public static async Task<ResultAnd<UserProfile[]>> GetMutedUsers()

Gets an array of all the muted users that the current authenticated user has muted.

Remarks​

This has a cap of 1,000 users. It will not return more then that.

See Also​

UserProfile

FetchUpdates​

public static async Task<Result> FetchUpdates()

This retrieves the user's ratings and subscriptions from the mod.io server and synchronises it with our local instance of the user's data. If mod management has been enabled via ModIOUnity.EnableModManagement() then it may begin to install/uninstall mods. It's recommended you use this method after initializing the plugin and after successfully authenticating the user.

Remarks​

This requires the current session to have an authenticated user, otherwise Result.IsAuthenticationError() from the Result will equal true.

See Also​

Result ModIOUnity.EnableModManagement(ModIO.ModManagementEventDelegate) IsAuthenticated RequestAuthenticationEmail SubmitEmailSecurityCode AuthenticateUserViaDiscord AuthenticateUserViaGoogle AuthenticateUserViaGOG AuthenticateUserViaItch AuthenticateUserViaOculus AuthenticateUserViaSteam AuthenticateUserViaSwitch AuthenticateUserViaXbox


async void Example()
{
Result result = await ModIOUnityAsync.FetchUpdates();
if (result.Succeeded())
{
Debug.Log("updated user subscriptions");
}
else
{
Debug.Log("failed to get user subscriptions");
}
}

AddDependenciesToMod​

public static async Task<Result> AddDependenciesToMod(ModId modId, ICollection<ModId> dependencies)

Adds the specified mods as dependencies to an existing mod.

Remarks​

If the dependencies already exist they will be ignored and the result will return success

Parameters​

modId ModId of the mod you want to add dependencies to dependencies The ModIds that you want to add (max 5 at a time)

See Also​

Result ModId ModIOUnity.AddDependenciesToMod ModIOUnity.RemoveDependenciesFromMod ModIOUnityAsync.RemoveDependenciesFromMod


async void Example()
{
var dependencies = new List<ModId>
{
(ModId)1001,
(ModId)1002,
(ModId)1003
};
Result result = await ModIOUnityAsync.AddDependenciesToMod(mod.id, dependencies);
if (result.Succeeded())
{
Debug.Log("Successfully added dependencies to mod");
}
else
{
Debug.Log("Failed to add dependencies to mod");
}
}

RemoveDependenciesFromMod​

public static async Task<Result> RemoveDependenciesFromMod(ModId modId, ICollection<ModId> dependencies)

Removes the specified mods as dependencies for another existing mod.

Remarks​

If the dependencies dont exist they will be ignored and the result will return success

Parameters​

modId ModId of the mod you want to remove dependencies from dependencies The ModIds that you want to remove (max 5 at a time)

See Also​

Result ModId dependencies ModIOUnity.AddDependenciesToMod ModIOUnity.RemoveDependenciesFromMod ModIOUnityAsync.AddDependenciesToMod


void Example()
{
var dependencies = new List<ModId>
{
(ModId)1001,
(ModId)1002,
(ModId)1003
};
Result result = await ModIOUnityAsync.RemoveDependenciesFromMod(mod.id, dependencies);
if (result.Succeeded())
{
Debug.Log("Successfully removed dependencies from mod");
}
else
{
Debug.Log("Failed to removed dependencies from mod");
}
}

GetModKvpMetadata​

public static async Task<ResultAnd<Dictionary<string, string>>> GetModKvpMetadata(long modId)

Get all metadata stored by the game developer for this mod as searchable key value pairs. Successful request will return an array of Metadata KVP Objects.

See Also​

MetadataKvpObject ModIOUnity.GetModKvpMetadata ModIOUnityAsync.AddModKvpMetadata ModIOUnityAsync.DeleteModKvpMetadata


long modId;
void Example()
{
ResultAnd<MetadataKvp[]> r = await ModIOUnityAsync.GetModKvpMetadata(modId);
if (r.result.Succeeded())
{
Debug.Log("Successfully received metadata for modId");
foreach(var kvp in r.value)
{
Debug.Log($"Key: {kvp.key}, Value: {kvp.value}");
}
}
else
{
Debug.Log("Failed to get metadata for modId.");
}
}

AddModKvpMetadata​

public static async Task<Result> AddModKvpMetadata(long modId, Dictionary<string, string> metadata)

Add metadata for this mod as searchable key value pairs. Metadata is useful to define how a mod works, or other information you need to display and manage the mod. Successful request will return Message Object. For example: A mod might change gravity and the rate of fire of weapons, you could define these properties as key value pairs. We recommend the mod upload tool you create defines and submits metadata behind the scenes, because if these settings affect gameplay, invalid information may cause problems.

Metadata can also be stored as metadata_blob in the Mod Object.

See Also​

MetadataKvpObject ModIOUnity.AddModKvpMetadata ModIOUnityAsync.GetModKvpMetadata ModIOUnityAsync.DeleteModKvpMetadata


long modId;
Dictionary<string, string> metadata
void Example()
{
Result result = await ModIOUnityAsync.AddModKvpMetadata(modId, metadata);
if (result.Succeeded())
{
Debug.Log("Successfully added metadata.");
}
else
{
Debug.Log("Failed to add metadata.");
}
}

DeleteModKvpMetadata​

public static async Task<Result> DeleteModKvpMetadata(long modId, Dictionary<string, string> metadata)

Delete key value pairs metadata defined for this mod. Successful request will return 204 No Content.

See Also​

MetadataKvpObject ModIOUnity.DeleteModKvpMetadata ModIOUnityAsync.AddModKvpMetadata ModIOUnityAsync.GetModKvpMetadata


long modId;
Dictionary<string, string> metadata;
void Example()
{
Result result = await ModIOUnityAsync.DeleteModKvpMetadata(modId, metadata);
if (result.Succeeded())
{
Debug.Log("Successfully deleted metadata");
}
else
{
Debug.Log("Failed to delete metadata.");
}
}

CreateModProfile​

public static async Task<ResultAnd<ModId>> CreateModProfile(CreationToken token,  ModProfileDetails modProfileDetails)

Creates a new mod profile on the mod.io server based on the details provided from the ModProfileDetails object provided. Note that you must have a logo, name and summary assigned in ModProfileDetails in order for this to work.

Remarks​

Note that this will create a new profile on the server and can be viewed online through a browser.

Parameters​

token the token allowing a new unique profile to be created from ModIOUnity.GenerateCreationToken() modProfileDetails the mod profile details to apply to the mod profile being created

See Also​

ModIOUnity.GenerateCreationToken CreationToken ModProfileDetails Result ModId


ModId newMod;
Texture2D logo;
CreationToken token;
async void Example()
{
token = ModIOUnity.GenerateCreationToken();
ModProfileDetails profile = new ModProfileDetails();
profile.name = "mod name";
profile.summary = "a brief summary about this mod being submitted"
profile.logo = logo;
ResultAnd<ModId> response = await ModIOUnityAsync.CreateModProfile(token, profile);
if (response.result.Succeeded())
{
newMod = response.value;
Debug.Log("created new mod profile with id " + response.value.ToString());
}
else
{
Debug.Log("failed to create new mod profile");
}
}

EditModProfile​

public static async Task<Result> EditModProfile(ModProfileDetails modprofile)

This is used to edit or change data in an existing mod profile on the mod.io server.

Remarks​

You need to assign the ModId of the mod you want to edit inside of the ModProfileDetails object included in the parameters

Parameters​

modprofile the mod profile details to apply to the mod profile being created

See Also​

ModProfileDetails Result


ModId modId;
async void Example()
{
ModProfileDetails profile = new ModProfileDetails();
profile.modId = modId;
profile.summary = "a new brief summary about this mod being edited"
Result result = await ModIOUnityAsync.EditModProfile(profile);
if (result.Succeeded())
{
Debug.Log("edited mod profile");
}
else
{
Debug.Log("failed to edit mod profile");
}
}

UploadModfile​

public static async Task<Result> UploadModfile(ModfileDetails modfile)

Used to upload a mod file to a mod profile on the mod.io server. A mod file is the actual archive of a mod. This method can be used to update a mod to a newer version (you can include changelog information in ModfileDetails).

Parameters​

modfile the mod file and details to upload

See Also​

Result ModfileDetails ArchiveModProfile ModIOUnity.GetCurrentUploadHandle


ModId modId;
async void Example()
{
ModfileDetails modfile = new ModfileDetails();
modfile.modId = modId;
modfile.directory = "files/mods/mod_123";
Result result = await ModIOUnityAsync.UploadModfile(modfile);
if (result.Succeeded())
{
Debug.Log("uploaded mod file");
}
else
{
Debug.Log("failed to upload mod file");
}
}

UploadModMedia​

public static Task<Result> UploadModMedia(ModProfileDetails modProfileDetails)

This is used to update the logo of a mod or the gallery images. This works very similar to EditModProfile except it only affects the images.

Parameters​

modProfileDetails this holds the reference to the images you wish to upload

See Also​

ModProfileDetails Result EditModProfile


ModId modId;
Texture2D newTexture;
async void Example()
{
ModProfileDetails profile = new ModProfileDetails();
profile.modId = modId;
profile.logo = newTexture;
Result result = await ModIOUnityAsync.UploadModMedia(profile);
if (result.Succeeded())
{
Debug.Log("uploaded new mod logo");
}
else
{
Debug.Log("failed to uploaded mod logo");
}
}

ReorderModMedia​

public static Task<ResultAnd<ModProfile>> ReorderModMedia(ModId modId, string[] orderedFilenames)

Reorder a mod's gallery images. orderedFilenames must represent every entry in (or any of the size-variant arrays) or the operation will fail. Returns the updated ModProfile.

DeleteModMedia​

public static Task<ResultAnd<ModProfile>> DeleteModMedia(ModId modId, string[] filenames)

Delete gallery images from a mod. Filenames can be sourced from (or any of the size-variant arrays). Returns the updated ModProfile.

ArchiveModProfile​

public static async Task<Result> ArchiveModProfile(ModId modId)

Removes a mod from being visible on the mod.io server.

Remarks​

If you want to delete a mod permanently you can do so from a web browser.

Parameters​

modId the id of the mod to delete

See Also​

Result CreateModProfile EditModProfile


ModId modId;
async void Example()
{
Result result = await ModIOUnityAsync.ArchiveModProfile(modId);
if (result.Succeeded())
{
Debug.Log("archived mod profile");
}
else
{
Debug.Log("failed to archive mod profile");
}
}

GetCurrentUserCreations​

public static async Task<ResultAnd<ModPage>> GetCurrentUserCreations(SearchFilter filter)

Get all mods the authenticated user added or is a team member of. Successful request will return an array of Mod Objects. We recommended reading the filtering documentation to return only the records you want.

AddTags​

public static async Task<Result> AddTags(ModId modId, string[] tags)

Adds the provided tags to the specified mod id. In order for this to work the authenticated user must have permission to edit the specified mod. Only existing tags as part of the game Id will be added.

Parameters​

modId Id of the mod to add tags to tags array of tags to be added

See Also​

Result DeleteTags ModIOUnityAsync.AddTags


ModId modId;
string[] tags;
async void Example()
{
Result result = await ModIOUnity.AddTags(modId, tags);
if (result.Succeeded())
{
Debug.Log("added tags");
}
else
{
Debug.Log("failed to add tags");
}
}

DeleteTags​

public static async Task<Result> DeleteTags(ModId modId, string[] tags)

Deletes the specified tags from the mod. In order for this to work the authenticated user must have permission to edit the specified mod.

Parameters​

modId the id of the mod for deleting tags tags array of tags to be deleted

See Also​

Result AddTags ModIOUnityAsync.DeleteTags


ModId modId;
string[] tags;
async void Example()
{
Result result = await ModIOUnity.DeleteTags(modId, tags);
if (result.Succeeded())
{
Debug.Log("deleted tags");
}
else
{
Debug.Log("failed to delete tags");
}
}

GetMultipartUploadParts​

public static async Task<ResultAnd<PaginatedResponse<MultipartUploadPart>>> GetMultipartUploadParts(ModId modId, string uploadId, SearchFilter filter)

Get all uploaded parts for a corresponding upload session. Successful request will return an array of Multipart Upload Part Objects.We recommended reading the filtering documentation to return only the records you want. The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. This function is optional and is provided to allow for more control over uploading large files for those who require it.

Parameters​

modId the id of the mod uploadId A universally unique identifier (UUID) that represents the upload session. filter The filter to apply when searching through comments (can only apply pagination parameters, Eg. page size and page index)

See Also​

SearchFilter ModIOUnity.GetMultipartUploadParts ModIOUnity.UploadModfile


ModId modId;
string uploadId;
private void Example()
{
var response = await ModIOUnityAsync.GetMultipartUploadParts(modId, uploadId);
if (response.result.Succeeded())
{
Debug.Log("Received Upload Sessions Object");
}
else
{
Debug.Log("Failed to get Upload Sessions Object");
}
}

GetMultipartUploadSessions​

public static async Task<ResultAnd<PaginatedResponse<MultipartUpload>>> GetMultipartUploadSessions(ModId modId, SearchFilter filter)

Get all upload sessions belonging to the authenticated user for the corresponding mod. Successful request will return an array of Multipart Upload Part Objects. We recommended reading the filtering documentation to return only the records you want. The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. This function is optional and is provided to allow for more control over uploading large files for those who require it.

Parameters​

modId the id of the mod filter The filter to apply when searching through comments (can only apply pagination parameters, Eg. page size and page index)

See Also​

SearchFilter ModIOUnity.GetMultipartUploadSessions ModIOUnity.UploadModfile


ModId modId;
private void Example()
{
var response = await ModIOUnity.GetMultipartUploadSessions(modId);
if (response.result.Succeeded())
{
Debug.Log("Received Upload Sessions");
}
else
{
Debug.Log("Failed to get Upload Sessions");
}
}

AddMultipartUploadParts​

public static async Task<Result> AddMultipartUploadParts(ModId modId, string uploadId, string contentRange, string digest, byte[] rawBytes)

Add a new multipart upload part to an existing upload session. All parts must be exactly 50MB (Mebibyte) in size unless it is the final part which can be smaller. A successful request will return a single Multipart Upload Part Object. NOTE: Unlike other POST endpoints on this service, the body of this request should contain no form parameters and instead be the data described in the byte range of the Content-Range header of the request. The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. This function is optional and is provided to allow for more control over uploading large files for those who require it.

Parameters​

modId the id of the mod uploadId A universally unique identifier (UUID) that represents the upload session. contentRange The Content-Range of the file you are sending. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range digest Optional Digest for part integrity checks once the part has been uploaded. rawBytes Bytes for the file part to be uploaded

See Also​

ModIOUnity.AddMultipartUploadParts ModIOUnity.UploadModfile


ModId modId;
string uploadId;
string contentRange;
string digest;
byte[] rawBytes;
private void Example()
{
var result = await ModIOUnity.AddMultipartUploadParts(modId, uploadId, contentRange, digest, rawBytes);
if (result.Succeeded())
{
Debug.Log("Added a part to Upload Session");
}
else
{
Debug.Log("Failed to add a part to Upload Session");
}
}

CreateMultipartUploadSession​

public static async Task<ResultAnd<MultipartUpload>> CreateMultipartUploadSession(ModId modId, string filename)

Create a new multipart upload session. A successful request will return a single Multipart Upload Object. NOTE: The multipart upload system is designed for uploading large files up to 20GB in size. If uploading files less than 100MB, we recommend using the Add Modfile endpoint. The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. This function is optional and is provided to allow for more control over uploading large files for those who require it.

Parameters​

modId the id of the mod nonce An optional nonce to provide to prevent duplicate upload sessions from being created concurrently. Maximum of 64 characters. filename The filename of the file once all the parts have been uploaded. The filename must include the .zip extension and cannot exceed 100 characters.

See Also​

ModIOUnity.CreateMultipartUploadSession ModIOUnity.UploadModfile


ModId modId;
string filename;
string nonce;
private void Example()
{
var response = await ModIOUnity.CreateMultipartUploadSession(modId, filename, nonce);
if (response.result.Succeeded())
{
Debug.Log("Created Upload Session");
}
else
{
Debug.Log("Failed to Create Upload Session");
}
}

DeleteMultipartUploadSession​

public static async Task<Result> DeleteMultipartUploadSession(ModId modId, string uploadId)

Terminate an active multipart upload session, a successful request will return 204 No Content. The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. This function is optional and is provided to allow for more control over uploading large files for those who require it.

Parameters​

modId the id of the mod uploadId A universally unique identifier (UUID) that represents the upload session.

See Also​

ModIOUnity.DeleteMultipartUploadSession ModIOUnity.UploadModfile


ModId modId;
string uploadId;
private void Example()
{
var result = await ModIOUnity.DeleteMultipartUploadSession(modId, uploadId);
if (result.Succeeded())
{
Debug.Log("Deleted Upload Session");
}
else
{
Debug.Log("Failed to Delete Upload Session");
}
}

CompleteMultipartUploadSession​

public static async Task<Result> CompleteMultipartUploadSession(ModId modId, string uploadId)

Complete an active multipart upload session, this endpoint assumes that you have already uploaded all individual parts. A successful request will return a 200 OK response code and return a single Multipart Upload Object. The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. This function is optional and is provided to allow for more control over uploading large files for those who require it.

Parameters​

modId the id of the mod uploadId A universally unique identifier (UUID) that represents the upload session.

See Also​

ModIOUnity.CompleteMultipartUploadSession ModIOUnity.UploadModfile


ModId modId;
string uploadId;
private void Example()
{
var result = await ModIOUnity.CompleteMultipartUploadSession(modId, uploadId);
if (result.Succeeded())
{
Debug.Log("Completed Session");
}
else
{
Debug.Log("Failed to complete session");
}
}

DownloadImage​

public static async Task<ResultAnd<byte[]>> DownloadImage(DownloadReference downloadReference)

Downloads a texture based on the specified download reference.

Remarks​

You can get download references from UserProfiles and ModProfiles

Parameters​

downloadReference download reference for the texture (eg UserObject.avatar_100x100)

See Also​

Result DownloadReference Texture2D


ModProfile mod;
async void Example()
{
ResultAnd<Texture2D> response = await ModIOUnityAsync.DownloadTexture(mod.logoImage_320x180);
if (response.result.Succeeded())
{
Debug.Log("downloaded the mod logo texture");
}
else
{
Debug.Log("failed to download the mod logo texture");
}
}

Report​

public static async Task<Result> Report(Report report)

Reports a specified mod to mod.io.

Parameters​

report the object containing all of the details of the report you are sending

See Also​

Report Result


async void Example()
{
Report report = new Report(new ModId(123),
ReportType.Generic,
"reporting this mod for a generic reason",
"JohnDoe",
"johndoe@mod.io");
Result result = await ModIOUnityAsync.Report(report);
if (result.Succeeded())
{
Debug.Log("successfully sent a report");
}
else
{
Debug.Log("failed to send a report");
}
}

SyncEntitlements​

public static async Task<ResultAnd<Entitlement[]>> SyncEntitlements()

Convert an in-game consumable that a user has purchased on Steam, XBOX, or Psn into a users mod.io inventory. This endpoint will consume the entitlement on behalf of the user against the portal in which the entitlement resides (i.e. Steam, XBOX, Psn).

See Also​

Entitlement EntitlementObject ModIOUnity.SyncEntitlements


private async void Example()
{
var response = await ModIOUnity.SyncEntitlements();
if (response.result.Succeeded())
{
Debug.Log("Sync Entitlements Success");
}
else
{
Debug.Log("Failed to Sync Entitlements");
}
}

PurchaseMod​

public static async Task<ResultAnd<CheckoutProcess>> PurchaseMod(ModId modId, int displayAmount, string idempotent, bool subscribeOnPurchase)

Complete a marketplace purchase. A Successful request will return the newly created Checkout Process Object. Parameter|Type|Required|Description ---|---|---|---| transaction_id|integer|true|The id of the transaction to complete. mod_id|integer|true|The id of the mod associated to this transaction. display_amount|integer|true|The expected amount of the transaction to confirm the displayed amount matches the actual amount.

Parameters​

modId The id of the mod the user wants to purchase. displayAmount The amount that was shown to the user for the purchase. idempotent A unique string. Must be alphanumeric and cannot contain unique characters except for -. subscribeOnPurchase Automatically subscribe to the mod after purchase

See Also​

Result


string idempotent = $"aUniqueKey";
ModId modId = 1234;
int displayAmount = 12;
async void Example()
{
var result = await ModIOUnity.PurchaseMod(modId, displayAmount, idempotent);
if (result.Succeeded())
{
Debug.Log("Completed Purchase");
}
else
{
Debug.Log("failed to complete purchase");
}
}

GetUserWalletBalance​

public static async Task<ResultAnd<Wallet>> GetUserWalletBalance()

Get user's wallet balance

See Also​

Result


void Example()
{
var result = await ModIOUnity.GetUserWalletBalance(Callback);
if (result.Succeeded())
{
Debug.Log("Get balance Success");
}
else
{
Debug.Log("failed to get balance");
}
}

GetGameTokenPacks​

public static async Task<ResultAnd<TokenPack[]>> GetGameTokenPacks()

StartAnalyticsSession​

public static async Task<Result> StartAnalyticsSession(string sessionId, long[] modIds, bool startHeartbeat)

Send Request to start tracking playtime analytics. Best used after a player has loaded into the game with their selected mods. Multiple sessions can be active, however the session ids must be unique.

Parameters​

sessionId Must be unique (guid) modIds Mods used for this session. startHeartbeat Starts a heartbeat coroutine that will ping the server around every 5 min

See Also​

StartAnalyticsSession ModIOUnityAsync.StartAnalyticsSession ModIOUnity.SendAnalyticsHeartbeat ModIOUnityAsync.SendAnalyticsHeartbeat ModIOUnity.EndAnalyticsSession ModIOUnityAsync.EndAnalyticsSession


string[] modIds;
string sessionId;
async void Example()
{
ResultAnd<string> r = await ModIOUnityAsync.StartAnalyticsSession(sessionId, modIds);
if (r.result.Succeeded())
{
//Store the returned session id to end the session later.
sessionId = r.value;
Debug.Log("successful");
}
else
{
Debug.Log("failed");
}
}

SendAnalyticsHeartbeat​

public static async Task<Result> SendAnalyticsHeartbeat(string sessionId)

Send Request to start tracking playtime analytics. Best used after a player has loaded into the game with their selected mods. Multiple sessions can be active, however the session ids must be unique.

Parameters​

sessionId Must be unique (guid)

See Also​

StartAnalyticsSession ModIOUnityAsync.StartAnalyticsSession ModIOUnity.SendAnalyticsHeartbeat ModIOUnityAsync.SendAnalyticsHeartbeat ModIOUnity.EndAnalyticsSession ModIOUnityAsync.EndAnalyticsSession


string sessionId;
async void Example()
{
Result r = await ModIOUnityAsync.SendAnalyticsHeartbeat(sessionId);
if (r.result.Succeeded())
{
Debug.Log("successful");
}
else
{
Debug.Log("failed");
}
}

EndAnalyticsSession​

public static async Task<Result> EndAnalyticsSession(string sessionId)

Send Request to end the tracking of playtime analytics. Best used after a player has left an in game session.

Parameters​

sessionId The session id

See Also​

StartAnalyticsSession ModIOUnityAsync.StartAnalyticsSession ModIOUnity.SendAnalyticsHeartbeat ModIOUnityAsync.SendAnalyticsHeartbeat ModIOUnity.EndAnalyticsSession ModIOUnityAsync.EndAnalyticsSession


string sessionId;
async void Example()
{
Result result = await ModIOUnityAsync.EndAnalyticsSession(sessionId);
if (result.Succeeded())
{
Debug.Log("successful");
}
else
{
Debug.Log("failed");
}
}

RequestUserDelegationToken​

public static async Task<ResultAnd<UserDelegationToken>> RequestUserDelegationToken()

Requests a User Delegation Token on behalf of a authenticated user. This token should then be sent to your secure backend server where you can then use it for specific endpoints.

CreateTempModSet​

public static async Task<Result> CreateTempModSet(ModId[] modIds)

Creates a Temp mod set

Parameters​

modIds Mods used for this set.

See Also​

ModIOUnity.CreateTempModSet ModIOUnityAsync.AddModsToTempModSet ModIOUnity.DeleteTempModSet ModIOUnity.RemoveModsFromTempModSet ModIOUnity.GetTempSystemInstalledMods


ModId[] modIds;
void Example()
{
Result result = await ModIOUnity.CreateTempModSet(modIds);
if (result.Succeeded())
{
Debug.Log("Successful");
}
else
{
Debug.Log("Failed");
}
}

AddModsToTempModSet​

public static async Task<Result> AddModsToTempModSet(ModId[] modIds)

Adds mods to a Temp mod set

Parameters​

modIds Mods used for this set.

See Also​

ModIOUnityAsync.CreateTempModSet ModIOUnity.AddModsToTempModSet ModIOUnity.DeleteTempModSet ModIOUnity.RemoveModsFromTempModSet ModIOUnity.GetTempSystemInstalledMods


ModId[] modIds;
void Example()
{
Result result = await ModIOUnity.AddModToTempModSet(modIds);
if (result.Succeeded())
{
Debug.Log("Successful");
}
else
{
Debug.Log("Failed");
}
}


ModIOUnityEvents​

public static class ModIOUnityEvents
Method​

TryGetCachedMod​

public static bool TryGetCachedMod(ModId modId, out ModProfile modProfile)

RemoveModManagementEventDelegate​

public static void RemoveModManagementEventDelegate(ModManagementEventDelegate modManagementEventDelegate)

ModId​

[System.Serializable, TypeConverter(typeof(ModIdConverter))]  public readonly struct ModId

A struct representing the globally unique identifier for a specific mod profile.

Field​

ModId Null​

ModId Null = new ModId(0L)

long id​

long id
Method​

Equals​

public bool Equals(ModId other)

Equals​

public override bool Equals(object obj)

GetHashCode​

public override int GetHashCode()

ToString​

public override string ToString()

ModPage​

[System.Serializable]  public struct ModPage

A struct containing the ModProfiles and total number of remaining results that can be acquired with the SearchFilter used in the GetMods request.

See Also​

ModIOUnity.GetMods ModIOUnityAsync.GetMods

Field​

ModProfile modProfiles​

ModProfile[] modProfiles

The mod profiles retrieved from this pagination request

See Also​

ModIOUnity.GetMods ModIOUnityAsync.GetMods

long totalSearchResultsFound​

long totalSearchResultsFound

the total results that could be found. eg there may be a total of 1,000 mod profiles but this ModPage may only contain the first 100, depending on the SearchFilter pagination settings.

See Also​

SearchFilter SearchFilter.SetPageIndex SearchFilter.SetPageSize ModIOUnity.GetMods ModIOUnityAsync.GetMods


ModProfile​

[Serializable]  public readonly struct ModProfile

A struct representing all of the information available for a ModProfile.

See Also​

ModIOUnity.GetMod ModIOUnityAsync.GetMod

Field​

ModId id​

ModId id

string tags​

string[] tags

ModStatus status​

ModStatus status

bool visible​

bool visible

string name​

string name

string summary​

string summary

string description​

string description

string homePageUrl​

string homePageUrl

string profilePageUrl​

string profilePageUrl

MaturityOptions maturityOptions​

MaturityOptions maturityOptions

DateTime dateAdded​

DateTime dateAdded

DateTime dateUpdated​

DateTime dateUpdated

DateTime dateLive​

DateTime dateLive

bool hasDependencies​

bool hasDependencies

DownloadReference galleryImagesOriginal​

DownloadReference[] galleryImagesOriginal

DownloadReference galleryImages320x180​

DownloadReference[] galleryImages320x180

DownloadReference galleryImages640x360​

DownloadReference[] galleryImages640x360

DownloadReference galleryImages1280x720​

DownloadReference[] galleryImages1280x720

DownloadReference logoImage320x180​

DownloadReference logoImage320x180

DownloadReference logoImage640x360​

DownloadReference logoImage640x360

DownloadReference logoImage1280x720​

DownloadReference logoImage1280x720

DownloadReference logoImageOriginal​

DownloadReference logoImageOriginal

UserProfile creator​

UserProfile creator

DownloadReference creatorAvatar50x50​

DownloadReference creatorAvatar50x50

DownloadReference creatorAvatar100x100​

DownloadReference creatorAvatar100x100

DownloadReference creatorAvatarOriginal​

DownloadReference creatorAvatarOriginal

string platformStatus​

string platformStatus

ModPlatform platforms​

ModPlatform[] platforms

long gameId​

long gameId

int communityOptions​

int communityOptions

string nameId​

string nameId

Modfile modfile​

Modfile modfile

RevenueType revenueType​

RevenueType revenueType

int price​

int price

int tax​

int tax

MonetizationOption MonetizationOption​

MonetizationOption MonetizationOption

int stock​

int stock

string metadata​

string metadata

The meta data for this mod, not to be confused with the meta data of the specific version

See Also​

InstalledMod

string latestVersion​

string latestVersion

The most recent version of the mod that exists

string latestChangelog​

string latestChangelog

the change log for the most recent version of this mod

DateTime latestDateFileAdded​

DateTime latestDateFileAdded

the date for when the most recent mod file was uploaded

KeyValuePair<string, string> metadataKeyValuePairs​

KeyValuePair<string, string>[] metadataKeyValuePairs

the KVP meta data for this mod profile. Not to be confused with the meta data blob or the meta data for the installed version of the mod

ModStats stats​

ModStats stats

long archiveFileSize​

long archiveFileSize

ModProfileDetails​

public class ModProfileDetails

Use this class to fill out the details of a Mod Profile that you'd like to create or edit. If you're submitting this via CreateModProfile you must assign values to logo, name and summary, otherwise the submission will be rejected (All fields except modId are optional if submitting this via EditModProfile)

See Also​

ModIOUnity.CreateModProfile ModIOUnity.EditModProfile

Field​

ModId? modId​

ModId? modId

Make sure to set this field when submitting a request to Edit a Mod Profile

Remarks​

Can be null

bool? visible​

bool? visible

Whether this mod will appear as public or hidden.

Remarks​

Can be null

byte[] logo

Image file which will represent your mods logo. Must be gif, jpg or png format and cannot exceed 8MB in filesize. Dimensions must be at least 512x288 and we recommend you supply a high resolution image with a 16 / 9 ratio. mod.io will use this image to make three thumbnails for the dimensions 320x180, 640x360 and 1280x720

Remarks​

Can be null if using EditModProfile

See Also​

ModIOUnity.EditModProfile

List images​

List<byte[]> images

Image files that will be included in the mod profile details.

Remarks​

Can be null

string imagesNames​

string[] imagesNames

(Optional) If set, images are named according to this array.

string name​

string name

Name of your mod

Remarks​

Can be null if using EditModProfile

See Also​

ModIOUnity.EditModProfile

string name_id​

string name_id

Path for the mod on mod.io. For example: https://gamename.mod.io/mod-name-id-here. If no name_id is specified the name will be used. For example: 'Stellaris Shader Mod' will become 'stellaris-shader-mod'. Cannot exceed 80 characters

Remarks​

Can be null

string summary​

string summary

Summary for your mod, giving a brief overview of what it's about. Cannot exceed 250 characters.

Remarks​

This field must be assigned when submitting a new Mod Profile Can be null if using EditModProfile

See Also​

ModIOUnity.EditModProfile

string description​

string description

Detailed description for your mod, which can include details such as 'About', 'Features', 'Install Instructions', 'FAQ', etc. HTML supported and encouraged

Remarks​

Can be null

string homepage_url​

string homepage_url

Official homepage for your mod. Must be a valid URL

Remarks​

Can be null

int? stock​

int? stock

This will create a cap on the number of subscribers for this mod. Set to 0 to allow for infinite subscribers.

Remarks​

Can be null

MaturityOptions? maturityOptions​

MaturityOptions? maturityOptions

This is a Bitwise enum so you can assign multiple values

See Also​

MaturityOptions

Remarks​

Can be null

string metadata​

string metadata

Your own custom metadata that can be uploaded with the mod profile. (This is for the entire mod profile, a unique metadata field can be assigned to each modfile as well)

See Also​

ModfileDetails

Remarks​

the metadata has a maximum size of 50,000 characters. Can be null

string tags​

string[] tags

The tags this mod profile has. Only tags that are supported by the parent game can be applied. An empty array will clear all tags, use null for no change. (Invalid tags will be ignored)

Remarks​

Can be null

CommunityOptions? communityOptions​

CommunityOptions? communityOptions = CommunityOptions.AllowCommenting

Select which interactions players can have with your mod. 0 = None 1 = Ability to comment (default) ? = Add the options you want together, to enable multiple options

Remarks​

Can be null

int? price​

int? price

The price of the mod NOTE: The value of this field will be ignored if the parent game's queue is enabled (see CurationOption in Game Object)

Remarks​

Can be null

MonetizationOption? monetizationOptions​

MonetizationOption? monetizationOptions

Monetization options enabled by the mod creator. You must set the team before setting monetization to live. In order for a marketplace mod to go live both MonetizationOption.Enabled and MonetizationOption.Live need to be set. NOTE: The value of this field will be ignored if the parent game's queue is enabled (see CurationOption in Game Object)

Remarks​

Can be null


ModStats​

[System.Serializable]  public struct ModStats

Detailed stats about a Mod's ratings, downloads, subscribers, popularity etc

Field​

long modId​

long modId

long popularityRankPosition​

long popularityRankPosition

long popularityRankTotalMods​

long popularityRankTotalMods

long downloadsToday​

long downloadsToday

long downloadsTotal​

long downloadsTotal

long subscriberTotal​

long subscriberTotal

long ratingsTotal​

long ratingsTotal

long ratingsPositive​

long ratingsPositive

long ratingsNegative​

long ratingsNegative

long ratingsPercentagePositive​

long ratingsPercentagePositive

float ratingsWeightedAggregate​

float ratingsWeightedAggregate

string ratingsDisplayText​

string ratingsDisplayText

long dateExpires​

long dateExpires

ModfileDetails​

public class ModfileDetails
Field​

ModId? modId​

ModId? modId

ModId of the mod that you wish to upload the modfile to. (Must be assigned)

string directory​

string directory

The directory containing all of the files that makeup the mod. The directory and all of its contents will be compressed and uploaded when submitted via ModIOUnity.AddModfile.

string changelog​

string changelog

the changelog for this file version of the mod.

string version​

string version

The version number of this modfile as a string (eg 0.2.11)

string metadata​

string metadata

Your own custom metadata that can be uploaded with the modfile.

Remarks​

the metadata has a maximum size of 50,000 characters.

string uploadId​

string uploadId = null

Required if the filedata parameter is omitted. The UUID of a completed multipart upload session.

bool active​

bool active = true

Default value is true. Flag this upload as the current release, this will change the modfile field on the parent mod to the id of this file after upload.

string platforms​

string[] platforms = null

If platform filtering enabled An array containing one or more platforms this file is targeting. Valid values can be found under the targeting a platform section.


MonetizationTeamAccount​

[System.Serializable]  public struct MonetizationTeamAccount
Field​

long Id​

long Id

string NameId​

string NameId

string Username​

string Username

int MonetizationStatus​

int MonetizationStatus

int MonetizationOptions​

int MonetizationOptions

int SplitPercentage​

int SplitPercentage

MultipartUpload​

[System.Serializable]  public struct MultipartUpload
Field​

string upload_id​

string upload_id

A universally unique identifier (UUID) that represents the upload session.

int status​

int status

The status of the upload session: 0 = Incomplete, 1 = Pending, 2 = Processing, 3 = Complete, 4 = Cancelled


MultipartUploadPart​

[System.Serializable]  public struct MultipartUploadPart
Field​

string upload_id​

string upload_id

A universally unique identifier (UUID) that represents the upload session.

int part_number​

int part_number

The part number this object represents.

int part_size​

int part_size

integer The size of this part in bytes.

int date_added​

int date_added

integer Unix timestamp of date the part was uploaded.


ProgressHandle​

public partial class ProgressHandle

A ProgressHandle can only be used to monitor the progress of an operation and cannot be used to cancel or suspend ongoing operations. The OperationType enum field specifies what type of operation this handle is for. The Progress field can be used to get the percentage (0.0 - 1.0) of the progress. The Completed and Failed fields can be used to determine if the operation is complete and whether or not it failed.

Property​

ModId modId​

public ModId modId

get set

The ModId of the mod that this operation pertains to.

ModManagementOperationType OperationType​

public ModManagementOperationType OperationType

get set

The type of operation being performed, eg. Download, Upload, Install

float Progress​

public float Progress

get set

The progress of the operation being performed, float range from 0.0f - 1.0f

long BytesPerSecond​

public long BytesPerSecond

get set

The average number of bytes being processed per second by the operation (Updated every 10 milliseconds)

Remarks​

Only applicable to Download and Upload operations

bool Completed​

public bool Completed

get set

Is set to True when the operation has finished

Remarks​

If an operation fails then Completed will still be True, therefore it is recommended to check Failed as well

bool Failed​

public bool Failed

get set

Is set to True if the operation encounters an error or is cancelled before completion

Method​

UiHashCode​

public int UiHashCode()

Rating​

[Serializable]  public struct Rating

A struct representing all of the information available for a Rating.

See Also​

ModIOUnity.GetCurrentUserRatings ModIOUnityAsync.GetCurrentUserRatings RatingObject

Field​

ModId modId​

ModId modId

ModRating rating​

ModRating rating

DateTime dateAdded​

DateTime dateAdded

Report​

public class Report

Used in conjunction with ModIOUnity.Report() to send a report to the mod.io server for a specific mod.

Field​

long? id​

long? id

string summary​

string summary

ReportType? type​

ReportType? type

ReportResourceType? resourceType​

ReportResourceType? resourceType

string user​

string user

string contactEmail​

string contactEmail
Method​

CanSend​

public bool CanSend()

Result​

public struct Result

Struct returned from ModIO callbacks to inform the caller if the operation succeeded.

Property​

string message​

public string message

A string message explaining the result error code in more detail (If one exists).

string apiMessage​

public string apiMessage

A string message explaining the result API error code in more detail (If one exists).

uint errorCode​

public uint errorCode

The error code for the result. 0 = Success

uint apiCode​

public uint apiCode

The API reference error code for the result. 0 = No API error

Method​

Succeeded​

public bool Succeeded()

IsCancelled​

public bool IsCancelled()

IsInitializationError​

public bool IsInitializationError()

IsAuthenticationError​

public bool IsAuthenticationError()

IsInvalidSecurityCode​

public bool IsInvalidSecurityCode()

IsInvalidEmailAddress​

public bool IsInvalidEmailAddress()

IsPermissionError​

public bool IsPermissionError()

IsNetworkError​

public bool IsNetworkError()

Checks if the result failed due to no internet connection

Returns​

true if the result failed due to no internet connection

IsStorageSpaceInsufficient​

public bool IsStorageSpaceInsufficient()

IsRateLimited​

public bool IsRateLimited()

ToString​

public override string ToString()

ResultAnd​

public class ResultAnd<T>

Convenience wrapper for essentially a Tuple.

Field​

Result result​

Result result

T value​

T value

SearchFilter​

[Serializable]  public class SearchFilter

Used to build a filter that is sent with requests for retrieving mods.

See Also​

ModIOUnity.GetMods ModIOUnityAsync.GetMods

Property​

RevenueType RevenueType​

public RevenueType RevenueType

get set

Choose if the filter should include/exclude free or paid mods.

Parameters​

type

IEnumerable GetTags​

public IEnumerable<string> GetTags

SortModsBy SortBy​

public SortModsBy SortBy
Method​

ShowSoldOut​

public void ShowSoldOut()

The search will now show sold out mods

DontShowSoldOut​

public void DontShowSoldOut()

The search will now not show sold out mods

ShowMatureContent​

public void ShowMatureContent(bool value)

GetShowMatureContent​

public bool GetShowMatureContent()

AddSearchPhrase​

public void AddSearchPhrase(string phrase, FilterType filterType

Adds a phrase into the filter to be used when filtering mods in a request.

Parameters​

phrase the string to be added to the filter filterType (Optional) type of filter to be used with the text, defaults to Full text search

ClearSearchPhrases​

public void ClearSearchPhrases()

ClearSearchPhrases​

public void ClearSearchPhrases(FilterType filterType)

GetSearchPhrase​

public string[] GetSearchPhrase(FilterType filterType)

AddTag​

public void AddTag(string tag)

Adds a tag to be used in filtering mods for a request.

Parameters​

tag the tag to be added to the filter

See Also​

Tag TagCategory

AddTags​

public void AddTags(IEnumerable<string> tags)

Adds multiple tags used in filtering mods for a request.

Parameters​

tags the tags to be added to the filter

See Also​

Tag TagCategory

ClearTags​

public void ClearTags()

SetSortBy​

public void SetSortBy(SortModsBy category)

Determines what category mods should be sorted and returned by. eg if the category SortModsBy.Downloads was used, then the results would be returned by the number of downloads. Depending on the Ascending or Descending setting, it will start or end with mods that have the highest or lowest number of downloads.

Parameters​

category the category to sort the request

See Also​

SetToAscending

SetToAscending​

public void SetToAscending(bool isAscending)

Determines the order of the results being returned. eg should results be filtered from highest to lowest, or lowest to highest.

Parameters​

isAscending

SetPageIndex​

public void SetPageIndex(int pageIndex)

The search will skip pageIndex * pageSize results and return (up to) the following results.

See Also​

SetPageSize

SetPageSize​

public void SetPageSize(int pageSize)

Limit the number of results returned (100 max). Use SetPageIndex to skip results and return later results.

See Also​

SetPageIndex

AddUser​

public void AddUser(long userId)

Adds a specific user to the filter, so that mods that were not created by the user (or other users added to the filter) will not be returned.

Parameters​

userId Id of the user to add

See Also​

UserProfile

GetUserIds​

public IReadOnlyList<long> GetUserIds()

AddPlatformStatus​

public void AddPlatformStatus(SearchFilterPlatformStatus status)

Adds a specific platform status to the filter to show mods that are either pending or both pending and live. This is primarily to be used in QA of mods.

Parameters​

status Platform verified status to show mods of

IsSearchFilterValid​

public bool IsSearchFilterValid(out Result result)

You can use this method to check if a search filter is setup correctly before using it in a GetMods request.

Parameters​

result

Returns​

true if the filter is valid

See Also​

ModIOUnity.GetMods ModIOUnityAsync.GetMods

GetPageIndex​

public int GetPageIndex()

Use this method to fetch the page index

Returns​

Returns the current value of the page index

GetPageSize​

public int GetPageSize()

Use this method to fetch the page size

Returns​

Returns the current value of the page size


ServerSettings​

[System.Serializable]  public struct ServerSettings

Describes the server settings to use for the ModIO Plugin. This can be setup directly from the inspector when editing the config settings file, or you can instantiate and use this at runtime with the Initialize method

See Also​

BuildSettings ModIOUnity.InitializeForUser ModIOUnityAsync.InitializeForUser

Field​

string serverURL​

string serverURL

URL for the mod.io server to connect to.

uint gameId​

uint gameId

Game Id as can be found on mod.io Web UI.

string gameKey​

string gameKey

mod.io Service API Key used by your game to connect.

string languageCode​

string languageCode

Language code for the localizing message responses. See https://docs.mod.io/restapi/docs/localization for possible values.

bool disableUploads​

bool disableUploads

Disables uploading mods and modfiles for this build.

bool useCommandLineArgumentOverrides​

bool useCommandLineArgumentOverrides

Enables the use of command line arguments to override server settings.

bool fallbackToEmailAuth​

bool fallbackToEmailAuth

SubscribedMod​

public struct SubscribedMod

Represents the ModProfile of a mod the current user has subscribed to. Contains the status and a directory (if installed) and the associated ModProfile.

Remarks​

Note this is not necessarily an installed mod. You will need to check the status to see whether or not it is installed.

See Also​

status SubscribedModStatus ModProfile ModIOUnity.GetSubscribedMods

Field​

SubscribedModStatus status​

SubscribedModStatus status

string directory​

string directory

ModProfile modProfile​

ModProfile modProfile

bool enabled​

bool enabled

Whether the mod has been marked as enabled or disabled by the user

See Also​

ModIOUnity.EnableMod ModIOUnity.DisableMod


SubscribedModStatusExtensions​

public static class SubscribedModStatusExtensions
Method​

IsSubscribed​

public static bool IsSubscribed(this SubscribedModStatus value)

Tag​

[System.Serializable]  public struct Tag

Represents a Tag that can be assigned to a mod.

See Also​

TagCategory ModIOUnity.GetTagCategories ModIOUnityAsync.GetTagCategories

Field​

string name​

string name

int totalUses​

int totalUses

TagCategory​

[System.Serializable]  public struct TagCategory

Represents a particular category of tags.

See Also​

ModIOUnity.GetTagCategories ModIOUnityAsync.GetTagCategories Tag

Field​

string name​

string name

Dictionary nameLocalized​

Dictionary<string, string> nameLocalized

Localized category name, keyed by language code.

Tag tags​

Tag[] tags

Dictionary<string, string> tagsLocalized​

Dictionary<string, string>[] tagsLocalized

Localized tags, keyed by language code. Order matches tags, however English value is also available using tagsLocalized["en"].

See Also​

ModIOUnity.GetTagLocalized(string) ModIOUnity.GetTagLocalized(string, string)

bool multiSelect​

bool multiSelect

bool hidden​

bool hidden

bool locked​

bool locked

TermsHash​

[Serializable]  public struct TermsHash

This is the hash that identifies the TOS. Used to validate the TOS requirement when attempting to authenticate a user.

See Also​

TermsOfUse ModIOUnity.GetTermsOfUse ModIOUnityAsync.GetTermsOfUse

Field​

string md5hash​

string md5hash

TermsOfUse​

[System.Serializable]  public struct TermsOfUse

TOS object received from a successful use of ModIOUnity.GetTermsOfUse This is used when attempting to authenticate via a third party. You must retrieve the TOS and input it along with an authentication request.

See Also​

ModIOUnity.GetTermsOfUse ModIOUnityAsync.GetTermsOfUse ModIOUnity.AuthenticateUserViaDiscord ModIOUnity.AuthenticateUserViaGoogle ModIOUnity.AuthenticateUserViaGOG ModIOUnity.AuthenticateUserViaItch ModIOUnity.AuthenticateUserViaOculus ModIOUnity.AuthenticateUserViaSteam ModIOUnity.AuthenticateUserViaSwitch ModIOUnity.AuthenticateUserViaXbox

Field​

string termsOfUse​

string termsOfUse

string agreeText​

string agreeText

string disagreeText​

string disagreeText
TermsOfUseLink[] links

TermsHash hash​

TermsHash hash

[Serializable]  public struct TermsOfUseLink

Represents a url as part of the TOS. The 'required' field can be used to determine whether or not it is a TOS requirement to be displayed to the end user when viewing the TOS text.

Field​

string apiName​

string apiName

string name​

string name

string url​

string url

bool required​

bool required

TokenPack​

public struct TokenPack
Field​

long id​

long id

string name​

string name

string description​

string description

long price​

long price

long amount​

long amount

Portal portals​

Portal[] portals
Struct​

Portal​

id​

portal​

sku​

Enums​

UISettings​

[System.Serializable]  public struct UISettings
Field​

bool ShowMonetizationUI​

bool ShowMonetizationUI

bool ShowEnabledModToggle​

bool ShowEnabledModToggle

UserInstalledMod​

public struct UserInstalledMod

Struct used to represent a mod that already exists on the current device. You can view the subscribed users to this mod as well as the directory and modprofile associated to it.

Field​

bool updatePending​

bool updatePending

Whether or not the mod has been marked for an update

string directory​

string directory

the directory of where this mod is installed

string metadata​

string metadata

The metadata for the version of the mod that is currently installed (Not to be mistaken with the metadata located inside of ModProfile.cs)

string version​

string version

the version of this installed mod

string changeLog​

string changeLog

the change log for this version of the installed mod

DateTime dateAdded​

DateTime dateAdded

The date that this version of the mod was submitted to mod.io

ModProfile modProfile​

ModProfile modProfile

The profile of this mod, including the summary and name

bool enabled​

bool enabled

Whether the mod has been marked as enabled or disabled by the user

See Also​

ModIOUnity.EnableMod ModIOUnity.DisableMod


UserProfile​

[System.Serializable]  public struct UserProfile

Represents a particular mod.io user with their username, DownloadReferences for getting their avatar, as well as their language and timezone.

Field​

string username​

string username

The display name of the user's mod.io account

long userId​

long userId

This is the unique Id of the user.

string portal_username​

string portal_username

The display name of the user's account they authenticated with. Eg if they authenticated with Steam it would be their Steam username.

DownloadReference avatar_original​

DownloadReference avatar_original

DownloadReference avatar_50x50​

DownloadReference avatar_50x50

DownloadReference avatar_100x100​

DownloadReference avatar_100x100

string timezone​

string timezone

string language​

string language

Wallet​

public class Wallet

A struct representing the user's wallet and current balance.

See Also​

ModIOUnity.GetUserWalletBalance ModIOUnityAsync.GetUserWalletBalance ;

Field​

string type​

string type

string currency​

string currency

int balance​

int balance

Enums​
AuthenticationServiceProvider​
Steam
Epic
GOG
Itchio
Oculus
Xbox
Switch
Discord
Google
PlayStation
OpenId
AppleId
None

AvatarSize​
Original
Thumbnail_50x50
Thumbnail_100x100

CommunityOptions​
None = 0x00
AllowCommenting = 0x01

FilterType​

Type of search to be used in the SearchFilter

See Also​

SearchFilter

FullTextSearch
NotEqualTo
Like
NotLike
In
NotIn
Max
Min
BitwiseAnd

GameMonetizationOptions​
All                  = 0b0000
Enabled              = 0b0001
EnableMarketplace    = 0b0010
EnablePartnerProgram = 0b0100
EnableScarcity       = 0b1000

LogLevel​

The logging level of the plugin. Used in BuildSettings to determine which log messages to ignore or display.

None = -1
Error = 0
Warning = 1
Message = 2
Verbose = 3

MaturityOptions​
None     = 0b0000
Alcohol  = 0b0001
Drugs    = 0b0010
Violence = 0b0100
Explicit = 0b1000

ModManagementEventType​
InstallStarted
Installed
InstallFailed
DownloadStarted
Downloaded
DownloadFailed
UninstallStarted
Uninstalled
UninstallFailed
UpdateStarted
Updated
UpdateFailed

ModManagementOperationType​
None_AlreadyInstalled
None_ErrorOcurred
Install
Download
Uninstall
Update
Upload

ModRating​
Positive = 1
Negative = -1
None = 0

ModStatus​
Accepted = 0
NotAccepted = 1
Deleted = 3

MonetizationOption​

Monetization options enabled by the creator. Multiple options can be combined.

See Also​

ModIOUnity.GetMods ModIOUnityAsync.GetMods

None = 0
Enabled = 1
Live = 2
EnablePartnerProgram = 4
EnableScarcity = 8

OculusDevice​
Rift
Quest

PlayStationEnvironment​
spint = 1
prodqa = 8
np = 256

ReportType​
Generic = 0
DMCA = 1
NotWorking = 2
RudeContent = 3
IllegalContent = 4
StolenContent = 5
FalseInformation = 6
Other = 7

RevenueType​

Finds all mods with or without a price. Default is Free.

See Also​

ModIOUnity.GetMods ModIOUnityAsync.GetMods

Free = 0
Paid = 1
FreeAndPaid = 2

SearchFilterPlatformStatus​
PendingOnly = 1
LiveAndPending = 2

SortModsBy​

Category to be used in the SearchFilter for determining how mods should be filtered in a request.

See Also​

SearchFilter ModIOUnity.GetMods ModIOUnityAsync.GetMods

Name
Price
Rating
Popular
Downloads
Subscribers
DateSubmitted

SubscribedModStatus​

The current state of a subscribed mod. Useful for checking whether or not a mod has been installed yet or if there was a problem trying to download/install it.

See Also​

SubscribedMod

Installed
WaitingToDownload
WaitingToInstall
WaitingToUpdate
WaitingToUninstall
Downloading
Installing
Uninstalling
Updating
ProblemOccurred
None

UserPortal​

Values representing the valid User Portals that mod.io works with. Used when setting up BuildSettings.

See Also​

BuildSettings

None = 0
Apple
Discord
EpicGamesStore
GOG
Google
itchio
Nintendo
Oculus
PlayStationNetwork
Steam
XboxLive

ModIO.Implementation.API.Objects​

TypeNameDescription
CheckoutProcessCheckoutProcess
ErrorError

CheckoutProcess​

public struct CheckoutProcess
Field​

int transactionId​

int transactionId

string grossAmount​

string grossAmount

string platformFee​

string platformFee

string tax​

string tax

long purchaseDate​

long purchaseDate

int netAmount​

int netAmount

int gatewayFee​

int gatewayFee

string transactionType​

string transactionType

object meta​

object meta

string walletType​

string walletType

int balance​

int balance

int deficit​

int deficit

string paymentMethodId​

string paymentMethodId

ModProfile modProfile​

ModProfile modProfile

Error​

[System.Serializable]  public struct Error
Field​

long code​

long code

long error_ref​

long error_ref

string message​

string message

Dictionary errors​

Dictionary<string, string> errors

Enums​

ModIO.Util​

TypeNameDescription
DownloadModToStreamOperationDownloadModToStreamOperation
EnumExtensionsEnumExtensions
ModioMainThreadHelperModioMainThreadHelperA slightly more robust and static friendly version of MonoDispatcher
MonoDispatcherMonoDispatcher
MonoSingletonMonoSingleton
SelfInstancingMonoSingletonSelfInstancingMonoSingleton
SimpleMessageHubSimpleMessageHub
SimpleMessageUnsubscribeTokenSimpleMessageUnsubscribeToken
SimplePoolSimplePool
SimpleSingletonSimpleSingleton
UtilityUtility

DownloadModToStreamOperation​

public class DownloadModToStreamOperation : IDisposable
Field​

ModId modId​

ModId modId

Stream archiveStream​

Stream archiveStream

bool closeStream​

bool closeStream

Task task​

Task task
Property​

OperationStatus Status​

public OperationStatus Status

get set

bool IsDownloading​

public bool IsDownloading

bool IsCompleted​

public bool IsCompleted

bool IsCancelled​

public bool IsCancelled

bool IsSucceeded​

public bool IsSucceeded

bool IsFailed​

public bool IsFailed

float DownloadProgress​

public float DownloadProgress

get set

string FailedMessage​

public string FailedMessage

get set

Method​

Cancel​

public void Cancel()

GetFiles​

public IEnumerable<ArchiveStreamFile> GetFiles()

Returns a new array of all file entries in the archive. Use for extracting files.

ExtractFileToStream​

public async Task ExtractFileToStream(ArchiveStreamFile file, Stream result, bool removeFromArchive

Extracts a file from the archive and optionally removes it. Use GetFiles to get a list of files in the archive.

ExtractFileToStream​

public async Task ExtractFileToStream(string path, Stream result, bool removeFromArchive

Extracts a file from the archive and optionally removes it. Use GetFiles to get a list of files in the archive.

Dispose​

public void Dispose()
Struct​

ArchiveStreamFile​

fileName​

path​

sizeCompressed​

sizeUncompressed​

Enums​
Enum​
RequestingModInfo
Downloading
Verifying
ProcessingArchive
Cancelled
Succeeded
Failed

EnumExtensions​

public static class EnumExtensions
Method​

ExtractBitFlagsFromEnum​

public static IEnumerable<string> ExtractBitFlagsFromEnum<T>(this T value) where T : Enum

ModioMainThreadHelper​

public class ModioMainThreadHelper : MonoBehaviour

A slightly more robust and static friendly version of MonoDispatcher

Method​

Run​

public static void Run(Action runOnMainThread)

The action will be called immediately if we're already on the Unity thread,

Parameters​

runOnMainThread

EnsureInstance​

public static void EnsureInstance()

Call this from the main thread before calling Run(action) later You could alternately put an instance in the scene yourself


MonoDispatcher​

public class MonoDispatcher : SelfInstancingMonoSingleton<MonoDispatcher>
Method​

MainThread​

public bool MainThread()

Run​

public void Run(Action action)

MonoSingleton​

public class MonoSingleton<T> : MonoBehaviour, ISimpleMonoSingleton where T : MonoBehaviour
Property​

bool HasInstance​

public static bool HasInstance

T Instance​

public static T Instance

get set

Method​

SetupSingleton​

public void SetupSingleton()

SingletonIsInstantiated​

public static bool SingletonIsInstantiated()

SelfInstancingMonoSingleton​

public class SelfInstancingMonoSingleton<T> : MonoBehaviour, ISimpleMonoSingleton where T : MonoBehaviour
Property​

T Instance​

public static T Instance

get set

Method​

SetupSingleton​

public void SetupSingleton()

SingletonIsInstantiated​

public static bool SingletonIsInstantiated()

SimpleMessageHub​

public class SimpleMessageHub : SelfInstancingMonoSingleton<SimpleMessageHub>
Method​

Subscribe​

public SimpleMessageUnsubscribeToken Subscribe<T>(Action<T> subscription) where T : class, ISimpleMessage

Publish​

public void Publish<T>(T message) where T : class, ISimpleMessage

PublishThreadSafe​

public void PublishThreadSafe<T>(T message) where T : class, ISimpleMessage

ClearSubscriptionType​

public void ClearSubscriptionType<T>()

SimpleMessageUnsubscribeToken​

public class SimpleMessageUnsubscribeToken
Method​

Unsubscribe​

public void Unsubscribe()

SimplePool​

public class SimplePool : SelfInstancingMonoSingleton<SimplePool>
Field​

Dictionary pool​

Dictionary<string, List<MonoBehaviour>> pool = new Dictionary<string, List<MonoBehaviour>>()
Method​

Get​

public T Get<T>(string name, Func<T> constructor) where T : MonoBehaviour

Return​

public void Return<T>(string id, T item) where T : MonoBehaviour

PrePool​

public void PrePool<T>(string name, Func<T> constructor, int num) where T : MonoBehaviour

SimpleSingleton​

public class SimpleSingleton<T> where T : new()
Property​

T Instance​

public static T Instance

get set

Method​

Instantiate​

public void Instantiate()

Utility​

public static class Utility
Method​

GenerateHumanReadableNumber​

public static string GenerateHumanReadableNumber(long number)

changes an int64 number into something more human readable such as "12.6K"

Parameters​

number the long to convert to readable string

Returns​

GenerateHumanReadableTimeStringFromSeconds​

public static string GenerateHumanReadableTimeStringFromSeconds(int seconds)

GenerateHumanReadableStringForBytes​

public static string GenerateHumanReadableStringForBytes(long bytes)

GetModStatusAsString​

public static string GetModStatusAsString(ProgressHandle handle)

GetModStatusAsString​

public static string GetModStatusAsString(SubscribedMod mod)

EncodeEncryptedSteamAppTicket​

public static string EncodeEncryptedSteamAppTicket(byte[] ticketData, uint ticketSize)

You can use this to convert your byte[] steam app ticket into a trimmed base64 encoded string to be used for the steam authentication.

Parameters​

ticketData the byte[] steam app ticket data ticketSize the desired length of the ticket to be trimmed to

See Also​

SetupSteamAuthenticationOption

Returns​

base 64 encoded string from the provided steam app ticket

FindEverythingInScene​

public static List<T> FindEverythingInScene<T>() where T : Component

Finds everything in a loaded scene. Slow.

ForceSetPlatformHeader​

public static void ForceSetPlatformHeader(RestApiPlatform platform)

Overrides the current platform setting in rest api calls

Parameters​

platform new rest api platform

DownloadModToStream​

public static DownloadModToStreamOperation DownloadModToStream(ModId modId, Stream archiveStream, bool closeStream

Downloads a mod's file archive into archiveStream. Use the returned DownloadModToStreamOperation to track status and extract files.

Parameters​

modId The id of the mod to download. archiveStream The stream the compressed archive will be downloaded into. closeStream Should the operation close archiveStream when it is disposed?

Returns​

Operation handle to access status and results.


async void DownloadModToMemory(ModId modId)
{
using MemoryStream archiveStream = new MemoryStream();

See Also​

DownloadModToStreamOperation.GetFiles DownloadModToStreamOperation.ArchiveStreamFile DownloadModToStreamOperation.ExtractFileToStream(DownloadModToStreamOperation.ArchiveStreamFile, Stream, bool)


Enums​