> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to Epic Games

The Epic Games connector lets your AI agent act in each user's Epic Games account. Each user signs in to Epic Games once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 7 tools.

**Authentication:** OAuth 2.0
**Categories:** Media
**Tools:** 7: 7 read, 0 write, 0 destructive
**Users sign in with:** OAuth
**OAuth app:** Your own Epic Games app
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=EPICGAMES)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Epic Games connection

   In **AgentKit > Connections**, create an Epic Games connection and copy its redirect URI. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Register an OAuth app

   Epic Games connections use your own OAuth app. Register one with Epic Games and add the redirect URI you copied.

   Then enter the app's Client ID and Client Secret on the Epic Games connection.

5. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'epicgames'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Epic Games:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'epicgames_userinfo_get',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "epicgames"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Epic Games:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="epicgames_userinfo_get",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'epicgames_blocklist_list',
  toolInput: {
    account_id: '<account_id>',
  },
  connector: 'epicgames',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="epicgames_blocklist_list",
    tool_input={
        "account_id": "<account_id>",
    },
    connection_name="epicgames",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `epicgames_blocklist_list`

List Block List · Read-only

List the accounts a player has blocked.
Returns entries with accountId and created.
Use epicgames_friends_get when the friends list is also needed.
Requires the basic_profile and friends_list scopes.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_id` (`string`, required): Epic Account ID of the player (32-character hex string). The access token must belong to this same account. Get it from epicgames_userinfo_get (the sub claim). Example: 9626f441055349ce8cb7d7d5a483eaa2.

Example input: `{"account_id":"<account_id>"}`

### `epicgames_ecom_entitlements_list`

List Entitlements · Read-only

List the direct entitlements a player holds, optionally filtered by sandbox or entitlement name.
Returns entitlement records with id, entitlementName, namespace, catalogItemId, entitlementType, grantDate, consumable, status, useCount and entitlementSource.
Use epicgames_ecom_ownership_check to test ownership of a specific catalog item.
Requires the Ecom feature to be enabled on the OAuth client's client policy.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_id` (`string`, required): Epic Account ID of the player (32-character hex string). The access token must belong to this same account. Get it from epicgames_userinfo_get (the sub claim). Example: 9626f441055349ce8cb7d7d5a483eaa2.
- `entitlement_name` (`string`, optional): Only return entitlements with this entitlement name. Leave empty to omit the filter. Example: 942e8a7133464f0ea83179030536505e.
- `include_redeemed` (`boolean`, optional): Set to true to include entitlements that have already been redeemed. Leave empty to use the service default.
- `sandbox_id` (`string`, optional): Sandbox (namespace) of the game title to list entitlements for. Leave empty to omit the filter. Example: 8894469f1120432095eff043a4529433.

Example input: `{"account_id":"<account_id>"}`

### `epicgames_ecom_offers_list`

List Offers · Read-only

List the offers defined for a sandbox as they apply to a player.
Returns an elements array of offers (id, title, description, priceInfo, items, offerType, purchaseLimit, purchasedCount) and a paging object with count, start and total.
Use epicgames_ecom_entitlements_list to see what the player already holds.
Requires the Ecom feature to be enabled on the OAuth client's client policy.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_id` (`string`, required): Epic Account ID of the player (32-character hex string). The access token must belong to this same account. Get it from epicgames_userinfo_get (the sub claim). Example: 9626f441055349ce8cb7d7d5a483eaa2.
- `sandbox_id` (`string`, required): Sandbox (namespace) whose offers to list. Example: 8894469f1120432095eff043a4529433.

Example input: `{"account_id":"<account_id>","sandbox_id":"<sandbox_id>"}`

### `epicgames_ecom_ownership_check`

Check Item Ownership · Read-only

Check whether a player owns an item in the Epic Games Store catalog, including items granted through bundles and editions.
Returns an array with namespace, itemId and an owned boolean for the item.
Use epicgames_ecom_entitlements_list to see the individual entitlement records instead.
Requires the Ecom feature to be enabled on the OAuth client's client policy.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_id` (`string`, required): Epic Account ID of the player (32-character hex string). The access token must belong to this same account. Get it from epicgames_userinfo_get (the sub claim). Example: 9626f441055349ce8cb7d7d5a483eaa2.
- `ns_catalog_item_id` (`string`, required): Catalog item to check, written as sandboxId:catalogItemId (namespace, a colon, then the catalog item ID). Example: fn:ff150af93c9a4fb99fee12f5db49fa5b.

Example input: `{"account_id":"<account_id>","ns_catalog_item_id":"<ns_catalog_item_id>"}`

### `epicgames_friends_get`

Get Friends and Block List · Read-only

Retrieve a player's friends list and block list in one call.
Returns a friends array (accountId, created, favorite, nickname) and a blockList array (accountId, created).
Use epicgames_friends_list for friends only, or epicgames_blocklist_list for the block list only.
Requires the basic_profile and friends_list scopes.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_id` (`string`, required): Epic Account ID of the player (32-character hex string). The access token must belong to this same account. Get it from epicgames_userinfo_get (the sub claim). Example: 9626f441055349ce8cb7d7d5a483eaa2.

Example input: `{"account_id":"<account_id>"}`

### `epicgames_friends_list`

List Friends · Read-only

List the friends of a player.
Returns friend entries with accountId, created, favorite and nickname.
Use epicgames_friends_get when the block list is also needed.
Requires the basic_profile and friends_list scopes.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_id` (`string`, required): Epic Account ID of the player (32-character hex string). The access token must belong to this same account. Get it from epicgames_userinfo_get (the sub claim). Example: 9626f441055349ce8cb7d7d5a483eaa2.

Example input: `{"account_id":"<account_id>"}`

### `epicgames_userinfo_get`

Get User Info · Read-only

Retrieve the profile of the connected Epic Games account from the OpenID Connect userInfo endpoint.
Returns the Epic Account ID (sub) and the profile claims released by the granted scopes.
Use this first to find the account_id that the friends and Ecom tools require.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

## Related

Other Media connectors ([all 31](/agentkit/connectors/?category=media)):

- [Reddit](/agentkit/connectors/reddit/): Scalekit connector, OAuth, 105 tools
- [Diarize](/agentkit/connectors/diarize/): Scalekit connector, Access token, 3 tools
- [YouTube](/agentkit/connectors/youtube/): Scalekit connector, OAuth, 45 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
