> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sequence.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Unreal Ecosystem Wallet Authentication

> Ecosystem Wallet Documentation for Sequence's Unreal SDK.

Start with an implicit session which is restricted to contracts built by Sequence.
Alternatively, you can choose to add a [Permissions](/sdk/unreal/wallets/ecosystem-wallet/permissions) object to each Sign In call, if you want to connect to an
explicit session directly.

### Get Ecosystem Config

Get configuration data from the Ecosystem. This includes data such as the name, description, enabled chains and auth providers.

<Tabs>
  <Tab title="Blueprint">
    <Frame>
      <img src="https://mintcdn.com/sequence-0fb8d9e6/WvKuNr45rjU1Dt9F/images/unreal/ecosystem/get_ecosystem_config.png?fit=max&auto=format&n=WvKuNr45rjU1Dt9F&q=85&s=4f87baedd0b55dcb2b76bcf3ec6ac8f2" width="1910" height="930" data-path="images/unreal/ecosystem/get_ecosystem_config.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<FEcosystemConfig> SuccessCallback = [this, OnSuccess](const FEcosystemConfig& Config)
    {
        // Ecosystem Name: Config.Name
        // Supported Chains: Config.SupportedChains
        // Auth Providers: Config.EnabledProviders
    };

    const FFailureCallback FailureCallback = [OnFailure](const FSequenceError& Error) { };

    USequenceConnect* Connect = NewObject<USequenceConnect>();
    Connect->GetEcosystemConfig(SuccessCallback, FailureCallback);
    ```
  </Tab>
</Tabs>

## Sign In with Email

<Tabs>
  <Tab title="Blueprint">
    <Frame>
      <img src="https://mintcdn.com/sequence-0fb8d9e6/o-cdQA6Z--auxAAK/images/unreal/ecosystem/sign_in_email.png?fit=max&auto=format&n=o-cdQA6Z--auxAAK&q=85&s=7ad8038be1091d6526a172a12aa2b1a5" width="967" height="500" data-path="images/unreal/ecosystem/sign_in_email.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<bool> SuccessCallback = [this, OnSuccess](bool Result) { };
    const FFailureCallback FailureCallback = [OnFailure](const FSequenceError& Error) { };

    USequenceConnect* Connect = NewObject<USequenceConnect>();
    Connect->SignInWithEmail(Email, Permissions, SuccessCallback, FailureCallback);
    ```
  </Tab>
</Tabs>

## Sign In with Google

<Tabs>
  <Tab title="Blueprint">
    <Frame>
      <img src="https://mintcdn.com/sequence-0fb8d9e6/o-cdQA6Z--auxAAK/images/unreal/ecosystem/sign_in_google.png?fit=max&auto=format&n=o-cdQA6Z--auxAAK&q=85&s=4cc223f816e50fd9c30b864b3f72f19f" width="967" height="500" data-path="images/unreal/ecosystem/sign_in_google.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<bool> SuccessCallback = [this, OnSuccess](bool Result) { };
    const FFailureCallback FailureCallback = [OnFailure](const FSequenceError& Error) { };

    USequenceConnect* Connect = NewObject<USequenceConnect>();
    Connect->SignInWithGoogle(Permissions, SuccessCallback, FailureCallback);
    ```
  </Tab>
</Tabs>

## Sign In with Apple

<Tabs>
  <Tab title="Blueprint">
    <Frame>
      <img src="https://mintcdn.com/sequence-0fb8d9e6/o-cdQA6Z--auxAAK/images/unreal/ecosystem/sign_in_apple.png?fit=max&auto=format&n=o-cdQA6Z--auxAAK&q=85&s=544e4a2c11ab71504fba1d44431cde7d" width="967" height="500" data-path="images/unreal/ecosystem/sign_in_apple.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<bool> SuccessCallback = [this, OnSuccess](bool Result) { };
    const FFailureCallback FailureCallback = [OnFailure](const FSequenceError& Error) { };

    USequenceConnect* Connect = NewObject<USequenceConnect>();
    Connect->SignInWithApple(Permissions, SuccessCallback, FailureCallback);
    ```
  </Tab>
</Tabs>

## Sign In with Passkey

<Tabs>
  <Tab title="Blueprint">
    <Frame>
      <img src="https://mintcdn.com/sequence-0fb8d9e6/o-cdQA6Z--auxAAK/images/unreal/ecosystem/sign_in_passkey.png?fit=max&auto=format&n=o-cdQA6Z--auxAAK&q=85&s=78659dbf6a2b855c719264538884d7f8" width="967" height="500" data-path="images/unreal/ecosystem/sign_in_passkey.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<bool> SuccessCallback = [this, OnSuccess](bool Result) { };
    const FFailureCallback FailureCallback = [OnFailure](const FSequenceError& Error) { };

    USequenceConnect* Connect = NewObject<USequenceConnect>();
    Connect->SignInWithPasskey(Permissions, SuccessCallback, FailureCallback);
    ```
  </Tab>
</Tabs>

## Sign In with Mnemonic

<Tabs>
  <Tab title="Blueprint">
    <Frame>
      <img src="https://mintcdn.com/sequence-0fb8d9e6/o-cdQA6Z--auxAAK/images/unreal/ecosystem/sign_in_mnemonic.png?fit=max&auto=format&n=o-cdQA6Z--auxAAK&q=85&s=39fcdd8e5e24ad8893f31f313819f39c" width="967" height="500" data-path="images/unreal/ecosystem/sign_in_mnemonic.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<bool> SuccessCallback = [this, OnSuccess](bool Result) { };
    const FFailureCallback FailureCallback = [OnFailure](const FSequenceError& Error) { };

    USequenceConnect* Connect = NewObject<USequenceConnect>();
    Connect->SignInWithMnemonic(Permissions, SuccessCallback, FailureCallback);
    ```
  </Tab>
</Tabs>
