CoreAPI

Core methods that used for initialize tunnel

GetUserInfoAsync

Gets user info, like Name, UserId, DevicesLimit etc.

Example:
    C#:
        var sdk = new SDK();
        var loginRequest = new LoginRequest
        {
            CarrierId = CARRIERID,
            DeviceId = DEVICEID,
            DeviceName = Environment.MachineName,
            Method = AuthenticationMethod.Anonymous,
            Token = null,
        };
    
        var loginResponse = await sdk.LoginAsync(loginRequest).ConfigureAwait(false);
        var userInfoResponse = await sdk.GetUserInfoAsync(loginResponse.AccessToken).ConfigureAwait(false);
        if (userInfoResponse.Result.Equals(ResponseResult.Ok))
        {
            Console.WriteLine(userInfoResponse.Name);
        }
    C++:
        auto sdk = gcnew SDK();
        auto loginResponse = sdk->Login(carrierId, deviceId, Environment::MachineName, AuthenticationMethod::Anonymous, nullptr);
        auto getUserInfoResponse = sdk->GetUserInfo(loginResponse->AccessToken);

LoginAsync

Logins to the backend for fetch AccessToken, for instance.

Example:
    C#:
        var sdk = new SDK();
        var loginRequest = new LoginRequest
        {
            CarrierId = CARRIERID,
            DeviceId = DEVICEID,
            DeviceName = Environment.MachineName,
            Method = AuthenticationMethod.Anonymous,
            Token = null,
        };
    
        var loginResponse = await sdk.LoginAsync(loginRequest).ConfigureAwait(false);
        if (loginResponse.Result.Equals(ResponseResult.Ok))
        {
            Console.WriteLine(loginResponse.AccessToken);
        }
    C++:
        auto sdk = gcnew SDK();
        auto loginResponse = sdk->Login(carrierId, deviceId, Environment::MachineName, AuthenticationMethod::Anonymous, nullptr);

LogoutAsync

Logouts from backend.

Example:
    C#:
        var sdk = new SDK();
        var loginRequest = new LoginRequest
        {
            CarrierId = CARRIERID,
            DeviceId = DEVICEID,
            DeviceName = Environment.MachineName,
            Method = AuthenticationMethod.Anonymous,
            Token = null,
        };
    
        var loginResponse = await sdk.LoginAsync(loginRequest).ConfigureAwait(false);
        var logoutResponse = await sdk.LogoutAsync(loginResponse.AccessToken).ConfigureAwait(false);
        Console.WriteLine(logoutResponse.Result);
    C++:
        auto sdk = gcnew SDK();
        auto loginResponse = sdk->Login(carrierId, deviceId, Environment::MachineName, AuthenticationMethod::Anonymous, nullptr);
        auto logoutResponse = sdk->Logout(loginResponse->AccessToken);

GetRemainingTrafficAsync

Gets user`s remaining traffic (for free users).

Example:
    C#:
        var sdk = new SDK();
        var loginRequest = new LoginRequest
        {
            CarrierId = CARRIERID,
            DeviceId = DEVICEID,
            DeviceName = Environment.MachineName,
            Method = AuthenticationMethod.Anonymous,
            Token = null,
        };
    
        var loginResponse = await sdk.LoginAsync(loginRequest).ConfigureAwait(false);
        var getRemainingTrafficResponse = await sdk.GetRemainingTrafficAsync(loginResponse.AccessToken).ConfigureAwait(false);
        if (getRemainingTrafficResponse.Result.Equals(ResponseResult.Ok))
        {
            Console.WriteLine(getRemainingTrafficResponse.TrafficRemaining);
        }
    C++:
        auto sdk = gcnew SDK();
        auto loginResponse = sdk->Login(carrierId, deviceId, Environment::MachineName, AuthenticationMethod::Anonymous, nullptr);
        auto getRemainingTrafficResponse = sdk->GetRemainingTraffic(loginResponse->AccessToken);

GetRemoteConfig

Gets client configuration from backend (fireshield configuration for instance).

Example:
    C#:
        var sdk = new SDK();
        var loginRequest = new LoginRequest
        {
            CarrierId = CARRIERID,
            DeviceId = DEVICEID,
            DeviceName = Environment.MachineName,
            Method = AuthenticationMethod.Anonymous,
            Token = null,
        };
    
        var loginResponse = await sdk.LoginAsync(loginRequest).ConfigureAwait(false);
        var carrier = new Carrier(loginResponse);
        var getRemoteConfigRequest = new GetRemoteConfigRequest
        {
            Carrier = carrier,
            DeviceId = DEVICEID,
        };
    
        var getRemoteConfigResponse = await sdk.GetRemoteConfigAsync(getRemoteConfigRequest).ConfigureAwait(false);
        if (getRemoteConfigResponse.Result.Equals(ResponseResult.Ok))
        {
            Console.WriteLine(getRemoteConfigResponse.PatchData);
        }
    C++:
        auto sdk = gcnew SDK();
        auto loginResponse = sdk->Login(carrierId, deviceId, Environment::MachineName, AuthenticationMethod::Anonymous, nullptr);
        auto carrier = gcnew Carrier(loginResponse);
        auto getRemoteConfigResponse = sdk->GetRemoteConfig(carrier, deviceId);

GetNodes

Gets VPN countries list.

Example:
    C#:
        var sdk = new SDK();
        var loginRequest = new LoginRequest
        {
            CarrierId = CARRIERID,
            DeviceId = DEVICEID,
            DeviceName = Environment.MachineName,
            Method = AuthenticationMethod.Anonymous,
            Token = null,
        };
    
        var loginResponse = await sdk.LoginAsync(loginRequest).ConfigureAwait(false);
        var carrier = new Carrier(loginResponse);
        var getNodesRequest = new GetNodesRequest
        {
            Carrier = carrier,
            Protocol = Core.Model.Enums.Protocol.HydraTcp,
        };
    
        var getNodesResponse = sdk.GetNodes(getNodesRequest);
        if (getNodesResponse.Result.Equals(ResponseResult.Ok))
        {
            var country = getNodesResponse.VpnCountries.FirstOrDefault();
            Console.WriteLine(country?.CountryCode);
        }
    C++:
        auto sdk = gcnew SDK();
        auto loginResponse = sdk->Login(carrierId, deviceId, Environment::MachineName, AuthenticationMethod::Anonymous, nullptr);
        auto carrier = gcnew Carrier(loginResponse);
        auto nodes = sdk->GetNodes(protocol, carrier);

GetLocations

Use GetLocations for multi-hop, custom dns and vpn profiles functionalities instead of GetNodes

Example:
    C#:
        var sdk = new SDK();
        var loginRequest = new LoginRequest
        {
            CarrierId = CARRIERID,
            DeviceId = DEVICEID,
            DeviceName = Environment.MachineName,
            Method = AuthenticationMethod.Anonymous,
            Token = null,
        };
    
        var loginResponse = await sdk.LoginAsync(loginRequest).ConfigureAwait(false);
        var carrier = new Carrier(loginResponse);
    
        var getLocationsResponse = sdk.GetLocations(Core.Model.Enums.Protocol.HydraTcp, carrier);
        if (getLocationsResponse.Result.Equals(ResponseResult.Ok))
        {
            var location = getLocationsResponse.Locations.FirstOrDefault();
            Console.WriteLine(location?.Name);
        }
    C++:
        auto sdk = gcnew SDK();
        auto loginResponse = sdk->Login(carrierId, deviceId, Environment::MachineName, AuthenticationMethod::Anonymous, nullptr);
        auto carrier = gcnew Carrier(loginResponse);
        auto locations = sdk->GetLocations(protocol, carrier);

GetCredentialsAsync

Gets credentials for VPN tunnel, including HydraCertificate, OpenVpnCertificate, UserName and UserPassword etc.

Example:
    C#:
        var sdk = new SDK();
        var loginRequest = new LoginRequest
        {
            CarrierId = CARRIERID,
            DeviceId = DEVICEID,
            DeviceName = Environment.MachineName,
            Method = AuthenticationMethod.Anonymous,
            Token = null,
        };
    
        var loginResponse = await sdk.LoginAsync(loginRequest).ConfigureAwait(false);
        var carrier = new Carrier(loginResponse);
        var getNodesRequest = new GetNodesRequest
        {
            Carrier = carrier,
            Protocol = Core.Model.Enums.Protocol.HydraTcp,
        };
    
        var getNodesResponse = sdk.GetNodes(getNodesRequest);
    
        var getCredentialsRequest = new GetCredentialsRequest
        {
            VpnNode = getNodesResponse.VpnCountries.FirstOrDefault(),
            WithSertificate = true,
            Protocol = Core.Model.Enums.Protocol.HydraTcp,
            AppVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version?.ToString(),
        };
    
        var getCredentialsResponse = await sdk.GetCredentialsAsync(getCredentialsRequest).ConfigureAwait(false);
        if (getCredentialsResponse.Result.Equals(ResponseResult.Ok))
        {
            Console.WriteLine(getCredentialsResponse.Credentials);
        }
    C++:
        auto sdk = gcnew SDK();
        auto loginResponse = sdk->Login(carrierId, deviceId, Environment::MachineName, AuthenticationMethod::Anonymous, nullptr);
        auto carrier = gcnew Carrier(loginResponse);
        auto nodes = sdk->GetNodes(protocol, carrier);
        auto firstNode = nodes->Locations[0];
        auto getCredentialsResponse = sdk->GetCredentials(firstNode, true, protocol, appVersion);

StartVpn

All protocols work on the Wintun adapter, which is created anew each time.

Example:
    C#:
        var sdk = new SDK();
        var loginRequest = new LoginRequest
        {
            CarrierId = CARRIERID,
            DeviceId = DEVICEID,
            DeviceName = Environment.MachineName,
            Method = AuthenticationMethod.Anonymous,
            Token = null,
        };
    
        var loginResponse = await sdk.LoginAsync(loginRequest).ConfigureAwait(false);
        var carrier = new Carrier(loginResponse);
        var getNodesRequest = new GetNodesRequest
        {
            Carrier = carrier,
            Protocol = Core.Model.Enums.Protocol.HydraTcp,
        };
    
        var getNodesResponse = sdk.GetNodes(getNodesRequest);
    
        var getCredentialsRequest = new GetCredentialsRequest
        {
            VpnNode = getNodesResponse.VpnCountries.FirstOrDefault(),
            WithSertificate = true,
            Protocol = Core.Model.Enums.Protocol.HydraTcp,
            AppVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version?.ToString(),
        };
    
        var getCredentialsResponse = await sdk.GetCredentialsAsync(getCredentialsRequest).ConfigureAwait(false);
    
        var startVpnRequest = new StartVpnRequest
        {
            Credentials = getCredentialsResponse.Credentials,
            DeviceId = DEVICEID,
            EnableKillSwitch = false,
            EnableTunnelLogging = false,
            VpnNode = getNodesResponse.VpnCountries.FirstOrDefault(),
        };
    
        var startVpnResponse = sdk.StartVpn(startVpnRequest);
        if (startVpnResponse.Result == ResponseResult.Ok)
        {
            Console.WriteLine(startVpnResponse.Message);
        }
    C++:
        auto sdk = gcnew SDK();
        auto loginResponse = sdk->Login(carrierId, deviceId, Environment::MachineName, AuthenticationMethod::Anonymous, nullptr);
        auto carrier = gcnew Carrier(loginResponse);
        auto nodes = sdk->GetNodes(protocol, carrier);
        auto firstNode = nodes->Locations[0];
        auto getCredentialsResponse = sdk->GetCredentials(firstNode, true, protocol, appVersion);
        auto request = gcnew StartVpnRequest();
        request->Credentials = getCredentialsResponse->Credentials;
        request->DeviceId = deviceId;
        request->EnableKillSwitch = false;
        request->EnableTunnelLogging = true;
        request->VpnNode = firstNode;
        auto result = sdk->StartVpn(request);

StopVpnAsync

Stops VPN.

Example:
    C#:
        var sdk = new SDK();
        var stopVpnResponse = sdk.StopVpn();
        Console.WriteLine(stopVpnResponse.ExitCode);
    C++:
        auto sdk = gcnew SDK();
        auto result = sdk->StopVpn();

Last updated