# Step 1. We begin with creating a Configuration, which contains the username and password for authentication. import vrchatapi from vrchatapi.api import authentication_api from vrchatapi.exceptions import UnauthorizedException from vrchatapi.models.two_factor_auth_code import TwoFactorAuthCode from vrchatapi.models.two_factor_email_code import TwoFactorEmailCode configuration = vrchatapi.Configuration( username = 'username', password = 'password', ) # Step 2. VRChat consists of several API's (WorldsApi, UsersApi, FilesApi, NotificationsApi, FriendsApi, etc...) # Here we enter a context of the API Client and instantiate the Authentication API which is required for logging in. # Enter a context with an instance of the API client with vrchatapi.ApiClient(configuration) as api_client: # Set our User-Agent as per VRChat Usage Policy api_client.user_agent = "ExampleProgram/0.0.1 [email protected]" # Instantiate instances of API classes auth_api = authentication_api.AuthenticationApi(api_client) try: # Step 3. Calling getCurrentUser on Authentication API logs you in if the user isn't already logged in. current_user = auth_api.get_current_user() except UnauthorizedException as e: if e.status == 200: if "Email 2 Factor Authentication" in e.reason: # Step 3.5. Calling email verify2fa if the account has 2FA disabled auth_api.verify2_fa_email_code(two_factor_email_code=TwoFactorEmailCode(input("Email 2FA Code: "))) elif "2 Factor Authentication" in e.reason: # Step 3.5. Calling verify2fa if the account has 2FA enabled auth_api.verify2_fa(two_factor_auth_code=TwoFactorAuthCode(input("2FA Code: "))) current_user = auth_api.get_current_user() else: print("Exception when calling API: %s\n", e) except vrchatapi.ApiException as e: print("Exception when calling API: %s\n", e) print("Logged in as:", current_user.display_name)
Okay, cool, we can log in, but what now?
The openapi generator splits each section of the API into it's own class. As such, we need to import each section of the API we want to use seperately. Expanding on our log-in example:
import vrchatapi from vrchatapi.api import authentication_api from vrchatapi.exceptions import UnauthorizedException from vrchatapi.models.two_factor_auth_code import TwoFactorAuthCode from vrchatapi.models.two_factor_email_code import TwoFactorEmailCode # We import the class that corrisponds to the section of the API we want to use from vrchatapi.api.worlds_api import WorldsApi configuration = vrchatapi.Configuration( username = 'username', password = 'password', ) with vrchatapi.ApiClient(configuration) as api_client: api_client.user_agent = "ExampleProgram/0.0.1 [email protected]" auth_api = authentication_api.AuthenticationApi(api_client) try: current_user = auth_api.get_current_user() except UnauthorizedException as e: if e.status == 200: if "Email 2 Factor Authentication" in e.reason: auth_api.verify2_fa_email_code(two_factor_email_code=TwoFactorEmailCode(input("Email 2FA Code: "))) elif "2 Factor Authentication" in e.reason: auth_api.verify2_fa(two_factor_auth_code=TwoFactorAuthCode(input("2FA Code: "))) current_user = auth_api.get_current_user() else: print("Exception when calling API: %s\n", e) except vrchatapi.ApiException as e: print("Exception when calling API: %s\n", e) print("Logged in as:", current_user.display_name) # Now we are logged in, we can init and use the API class :) worlds_api = WorldsApi(api_client) # All API section classes require an ApiClient object to be passed! active_worlds = worlds_api.get_active_worlds()
Here is a list of all sections of the API:
authentication_api.AuthenticationApiavatars_api.AvatarsApieconomy_api.EconomyApifavorites_api.FavoritesApifiles_api.FilesApifriends_api.FriendsApigroups_api.GroupsApiinstances_api.InstancesApiinvite_api.InviteApinotifications_api.NotificationsApipermissions_api.PermissionsApiplayermoderation_api.PlayermoderationApisystem_api.SystemApiusers_api.UsersApiworlds_api.WorldsApi
But some requests don't require Authentication, so how do we use them without logging in?
import vrchatapi # We import the class that corrisponds to the section of the API we want to use from vrchatapi.api.worlds_api import WorldsApi # We don't add a configuration file/set a username and password with vrchatapi.ApiClient() as api_client: api_client.user_agent = "ExampleProgram/0.0.1 [email protected]" # We don't use the authentication API at all, since we don't need to world_api = WorldsApi(api_client) world = world_api.get_world("wrld_000000000-0000-0000-0000-000000000000") print(f"World `{world.name}` was made by `{world.author_name}` ({world.author_id})")