---
title: "Set up EOS"
description: "Connect your game to the correct EOS product, sandbox, and deployment."
seo:
  noindex: true
---

{/* Copyright (c) 2026 Betide Studio. All Rights Reserved. */}

Enter your EOS credentials in **Project Settings → Betide → Crossplay → EOS**. Use SDK credentials from your product in the [Epic Developer Portal](https://dev.epicgames.com/portal/).

| Field | Where it comes from |
| --- | --- |
| Product ID | Product Settings → General |
| Sandbox ID | The sandbox this build targets |
| Deployment ID | A deployment inside that sandbox |
| Client ID and Client Secret | Product Settings → Clients; an SDK client |
| Encryption Key | Your own random **64 hexadecimal characters** for storage encryption |

Replace the shared default encryption key before storing player data. Keep the same project key available to builds that must read those files.

## Allow the services you use

Assign the client a [client policy](https://dev.epicgames.com/docs/epic-online-services/eos-fundamentals/client-and-client-policy/client-policy-guide) with the required service permissions. An Epic-account login also needs an Epic Account Services application, linked client, and matching permissions. Unreleased environments must allow your test accounts access.

Select **Verify** in the EOS settings. It checks whether EOS accepts the credentials; it does not prove that every service is permitted. A result mentioning a blocked Device ID login means the credentials were accepted but that login method is disallowed by the client policy.

Restart the editor after changing the active credentials, then test [sign-in](/integrations/eos/identity).

## Choose one login owner

For a game using **Login With Crossplay** or a manual EOS login, set EOS **Auto Login Type** to **None**. If EOS settings own startup login, wait for it before requesting services. The Blueprint wait node has no failure-message pin; check the EOS log for details. Its disabled output means manual sign-in can be shown.

**Blueprint**

<BlueprintViewer title="Wait for configured EOS startup login" src="/blueprints/crossplay-eos-startup.txt" />

**C++**

Game module dependencies: `EIKBlueprints`, `EIKCore`, `BetideCore`.

```cpp
#include "Auth/EIK_WaitForAutoLogin_AsyncFunction.h"

void WaitForEosStartup(UObject *WorldContext, const FScriptDelegate &OnReady,
                       const FScriptDelegate &OnFailed, const FScriptDelegate &OnDisabled)
{
    auto *Request = UEIK_WaitForAutoLogin_AsyncFunction::WaitForAutoLogin(WorldContext);
    if (!Request)
        return;
    Request->OnSuccess.Add(OnReady);
    Request->OnFailure.Add(OnFailed);
    Request->OnDisabled.Add(OnDisabled);
    Request->Activate();
}
```

Bind `UFUNCTION` handlers: ready takes `(const FEIKAccountId&, const FEIKLoginResult&)`, failure takes `const FString&`, and disabled takes no arguments.

<Accordion>
  <AccordionItem title="Developer Authentication Tool and multiple PIE players">

Run Epic's [Developer Authentication Tool](https://dev.epicgames.com/docs/epic-online-services/accounts-and-social/eos-epic-account-services/developer-authentication-tool), sign in each test account, and name credentials **Context_1**, **Context_2**, and so on. Set **Developer Tool Url** to the tool's host and port, such as `localhost:6300`, and select **Developer Tool** auto-login.

Each active PIE instance uses its own credential. Do not also call manual login in that flow. The tool's credential names are unrelated to Unreal's world-context names. Use Account Portal, persistent auth, launcher exchange codes, or a supported platform credential for shipping.

  </AccordionItem>
  <AccordionItem title="Artifacts, servers, and packaged builds">

The main credential fields serve **Default Artifact Name**. Add entries under **Artifacts** for additional environments. `-EpicApp=` selects a named artifact; `-epicsandboxid=` and `-epicdeploymentid=` override those environment IDs. Set **Dedicated Server Artifact Name** when servers need a separate credential set and policy.

The SDK Client Secret is runtime configuration and ships with the client. Restrict its client policy accordingly. **BuildPatchTool** credentials are separate: enter them under **Betide → Tools** for uploads. Its client secret uses per-developer storage or `EIK_ONECLICK_CLIENT_SECRET` and does not belong in game configuration.

The plugin stages its EOS runtime into the `EIK` folder. Test the packaged build against the intended sandbox and deployment, not just PIE.

  </AccordionItem>
</Accordion>
