Skip to main content
Documentation - Discord Docs

Search documentation

Type to search this documentation.

On this pageOverview

Public Client Integration

If you have Public Client enabled on your Discord app, you can use the following code to authenticate your players with the external provider directly from the client — no backend required. Before using this method, you must configure your identity provider in the Developer Portal.

C++
// filepath: your_game/auth_manager.cpp
void AuthenticateUser(std::shared_ptr<discordpp::Client> client) {
    // Get your external auth token (Steam, OIDC, etc.)
    std::string externalToken = GetExternalAuthToken();

    // Get provisional token from Discord
    client->GetProvisionalToken(DISCORD_APPLICATION_ID,
        discordpp::AuthenticationExternalAuthType::OIDC,
        externalToken,
        [client](discordpp::ClientResult result, std::string accessToken, std::string refreshToken, discordpp::AuthorizationTokenType tokenType, int32_t expiresIn, std::string scope) {
        if (result.Successful()) {
            std::cout << "🔓 Provisional token received! Establishing connection...\n";
            client->UpdateToken(discordpp::AuthorizationTokenType::Bearer, accessToken, [client](discordpp::ClientResult result) {
                client->Connect();
            });
        } else {
            std::cerr << "❌ Provisional token request failed: " << result.Error() << std::endl;
        }
    });
}

Once authentication is complete, you can use the access token as you would a full Discord user's access token. See Managing Provisional Accounts for token refresh, storage, and display names.

Common error codes and solutions when creating a provisional account:

Code Meaning Solution
530000 Application not configured Contact Discord support to enable provisional accounts for your application
530001 Expired ID token Request a new token from your identity provider
530004 Token too old Request a new token (tokens over 1 week old are rejected)
530006 Username generation failed Retry the operation (temporary error)
530007 Invalid client secret Verify or regenerate your client secret in the Developer Portal
530010 User account non-provisional User already linked to Discord account - use standard OAuth2 flow

If you are using OIDC, you may encounter more specific errors:

Code Meaning Solution
530002 Invalid issuer Verify the iss claim in your ID token exactly matches the issuer URL in your OIDC configuration
530003 Invalid audience Verify the aud claim in your ID token includes the client ID in your OIDC configuration
530008 OIDC configuration not found Verify your issuer URL is correct, accessible over HTTPS, and serves a valid discovery document without HTTP redirects
530009 OIDC JWKS not found Verify your JWKS endpoint is accessible over HTTPS without HTTP redirects
530020 Invalid OIDC JWT token Verify your ID token is properly signed and uses a supported algorithm
530027 Missing kid header Ensure your ID token includes a kid (Key ID) header in the JWT header identifying the signing key

Need help? Join the Discord Developers Server and share questions in the #social-sdk-dev-help channel for support from the community.

If you encounter a bug while working with the Social SDK, please report it here: https://dis.gd/social-sdk-bug-report


Date Changes
July 14, 2026 Split the provisional accounts guide into its own section
March 17, 2025 Initial release
Suggest an edit

Propose a replacement for this page. The site team reviews it before applying any changes.

Export
Documentation menu