Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.getpara.com/llms.txt

Use this file to discover all available pages before exploring further.

In v3, your partner record is the source of truth for how your integration looks and behaves — authentication methods, theme, external wallets, links, and more. You manage it in the Developer Portal, and the SDK reads it at runtime. Most settings no longer need to live in your app code. What you’ll learn
  • Where Para reads each setting from, and how the layers combine
  • What you can override in code with configOverrides, and what is partner-authoritative
  • How the SDK enforces resolved configuration with PartnerConfigError
  • Which paraModalConfig props are deprecated and what replaces them

Where configuration comes from

Para resolves each setting from three layers. A higher layer only overrides the specific fields it sets — everything else falls through to the layer below.
SDK configOverrides   (code, per-instance)        ← highest priority

Partner record        (Developer Portal)          ← the source of truth

Deprecated ParaModal props (paraModalConfig.*)     ← fallback for un-migrated apps
This is a per-field merge, not all-or-nothing. If your partner record sets an OAuth allowlist but you override only the theme in code, you get your code theme and the partner’s OAuth allowlist.

The partner record (source of truth)

The partner record is fetched from your API key when the SDK initializes. Configure it in the Developer Portal. It governs:
  • Authentication — OAuth methods, email/phone toggles, 2FA, guest mode, auth layout
  • Branding & theme — colors, font, border radius, logo, “hide wallet” language
  • External wallets — supported wallets, connection mode, WalletConnect project ID, app description
  • App identity & links — display name, homepage/social/support URLs, RPC URL
  • Other — supported wallet types, account links, balance display
Because it lives on the partner record, you can change any of these in the portal without redeploying your app.

Overriding in code with configOverrides

For per-instance overrides, pass configOverrides to ParaProvider. This is the supported, non-deprecated way to override partner config from code — useful when one API key powers multiple brand contexts, or for pointing rpcUrl at a local node during development.
<ParaProvider
  paraClientConfig={{ apiKey: process.env.NEXT_PUBLIC_PARA_API_KEY || "" }}
  configOverrides={{
    themeConfig: {
      foregroundColor: "#007AFF",
      backgroundColor: "#FFFFFF",
    },
    authConfig: {
      oAuthMethods: ["GOOGLE", "APPLE"],
    },
  }}
>
  {children}
</ParaProvider>
configOverrides is typed as Partial<SdkOverridableAppConfig> — the compiler only lets you override fields that are safe to set per-instance.

What you can override

AreaOverridable fields
themeConfigAll theme fields (colors, font, border radius, mix ratio, cssOverrides)
authConfigoAuthMethods, disableEmailLogin, disablePhoneLogin, twoFactorAuthEnabled, isGuestModeEnabled
modalConfighideWallets, authLayout, hideLogo, disableAddFundsPrompt
externalWalletConfigwallets, connectionOnly, includeWalletVerification, createLinkedEmbeddedForExternalWallets, walletConnectProjectId, appDescription
rpcUrlThe chain RPC URL (handy for local dev)

What is partner-authoritative (cannot be overridden)

These are excluded from SdkOverridableAppConfig at the type level — the SDK cannot weaken them, and they live only on the partner record:
FieldWhy
authConfig.supportedAuthMethodsSecurity posture
supportedWalletTypesSecurity/policy boundary
supportedAccountLinksSecurity/policy boundary
balancesConfigPartner-level setting
partnerLinks (homepage/social/support URLs)One per project
appNameOne per project
farcasterConfigRead only by the backend (email templates)

Enforcement: PartnerConfigError

The SDK enforces the resolved auth and wallet configuration at its entry points (sign-up/login, OAuth, 2FA setup, guest wallet creation), not just in the modal. If you trigger something that is explicitly disabled, the call throws a PartnerConfigError with a stable .code.
import { PartnerConfigError } from "@getpara/react-sdk";

try {
  await para.createGuestWallets();
} catch (e) {
  if (e instanceof PartnerConfigError && e.code === "GUEST_MODE_DISABLED") {
    // Guest mode is turned off for this partner — handle gracefully.
  }
}
codeThrown when
EMAIL_LOGIN_DISABLEDauthConfig.disableEmailLogin is true
PHONE_LOGIN_DISABLEDauthConfig.disablePhoneLogin is true
OAUTH_METHOD_NOT_ALLOWEDAn OAuth method isn’t in the resolved oAuthMethods allowlist (.detail holds the method)
TWO_FACTOR_DISABLEDauthConfig.twoFactorAuthEnabled is explicitly false
GUEST_MODE_DISABLEDauthConfig.isGuestModeEnabled is explicitly false
Unset means “not configured”, not “disabled.” A field that has never been set stays permissive; the gate only fires on an explicit choice (a true disable flag, an explicit false opt-in flag, or a defined OAuth allowlist). This keeps upgrades non-breaking: restrictions take effect once you configure them in the portal or with configOverrides, not before.
The default <ParaModal /> hides disabled options, so you typically only hit PartnerConfigError from custom UI or direct SDK calls, or when a deprecated fallback conflicts with higher-priority resolved config.

Deprecated: configuring via paraModalConfig props

These paraModalConfig props still work, but they’re the lowest-priority fallback and are deprecated — they’ll be removed in the next major release. Each emits a one-time console warning. Configure them on the partner record (Developer Portal) instead, or use configOverrides for per-instance overrides.
Deprecated paraModalConfig propConfigure instead via
oAuthMethodsPortal authentication / configOverrides.authConfig.oAuthMethods
disableEmailLogin, disablePhoneLoginPortal authentication / configOverrides.authConfig.*
twoFactorAuthEnabledPortal authentication / configOverrides.authConfig.twoFactorAuthEnabled
isGuestModeEnabledPortal authentication / configOverrides.authConfig.isGuestModeEnabled
authLayoutPortal authentication / configOverrides.modalConfig.authLayout
hideWalletsPortal / configOverrides.modalConfig.hideWallets
themePortal branding / configOverrides.themeConfig
logoPortal branding / configOverrides.modalConfig.logo
supportedAccountLinksPortal (partner-authoritative)
balancesPortal (partner-authoritative)
Because props are the lowest layer, a value you set in code is overridden by the same setting on the partner record. If a prop seems to have no effect, check whether the partner record sets it.
See the Migration Guide for step-by-step migration of each prop.

Next steps