Use with Discord APIs
Overview
Section titled “Overview”The Discord Social SDK provides client-side functionality for integrating Discord social features into your game. However, if you use a game backend, you should interact with Discord's HTTP APIs for server-side operations when possible.
Prerequisites
Section titled “Prerequisites”Before you begin, make sure you have:
- A Discord application created in the Developer Portal
- Access to your application's bot token
- Required OAuth2 scopes configured
Authentication Types
Section titled “Authentication Types”Bot Token Authentication
Section titled “Bot Token Authentication”For server-to-server communication:
curl -X GET https://discord.com/api/v10/users/@me \
-H "Authorization: Bot YOUR_BOT_TOKEN"Bearer Token Authentication
Section titled “Bearer Token Authentication”For authenticated user actions:
curl -X GET https://discord.com/api/v10/users/@me \
-H "Authorization: Bearer USER_ACCESS_TOKEN"Common API Operations
Section titled “Common API Operations”OAuth2 Token Exchange
Section titled “OAuth2 Token Exchange”Exchange an authorization code for an access token:
# filepath: /your/backend/auth.py
import requests
def exchange_code(code, redirect_uri):
data = {
'client_id': 'YOUR_CLIENT_ID',
'client_secret': 'YOUR_CLIENT_SECRET',
'grant_type': 'authorization_code',
'code': code,
'redirect_uri': redirect_uri
}
response = requests.post('https://discord.com/api/v10/oauth2/token', data=data)
return response.json()User Information
Section titled “User Information”Get information about the authenticated user:
def get_user_info(access_token):
headers = {'Authorization': f'Bearer {access_token}'}
response = requests.get('https://discord.com/api/v10/users/@me', headers=headers)
return response.json()Using the OpenAPI Specification
Section titled “Using the OpenAPI Specification”You can use the Discord OpenAPI Spec to generate a client in your preferred backend language to make it easier to call the various APIs. A good tool for that is https://openapi-generator.tech/.
In python for example, that might look like this:
import openapi_client
import os
from pprint import pprint
configuration = openapi_client.Configuration(host = "https://discord.com/api/v10")
configuration.api_key['BotToken'] = 'Bot ' + os.environ["API_KEY"]
with openapi_client.ApiClient(configuration) as api_client:
api_instance = openapi_client.DefaultApi(api_client)
request = openapi_client.CreateLobbyRequest()
request.metadata={'foo':'bar'}
pprint(api_instance.create_lobby(request))Best Practices
Section titled “Best Practices”- Token Security
- Never expose bot tokens in client-side code
- Store tokens securely
- Rate Limiting
- Respect Discord's rate limits
- Implement exponential backoff
- Cache responses when appropriate
- Error Handling
- Handle HTTP errors gracefully
- Implement retry logic for transient failures
- Log API errors for debugging
Next Steps
Section titled “Next Steps”Now that you've set up Rich Presence, you might want to explore:
Managing Game Invites
Allow players to invite friends to join their game session or party.
Managing Lobbies
Bring players together in a shared lobby with invites, text chat, and voice comms.
Design Guidelines for Rich Presence
Best practices for Rich Presence UI/UX.
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
Change Log
Section titled “Change Log”| Date | Changes |
|---|---|
| March 17, 2025 | Initial Release |