Complete guide to using the Python Device Flow script for generating GitHub App user access tokens.
Check if Python is installed:
python3 --versionIf not installed:
- macOS:
brew install python3 - Ubuntu/Debian:
sudo apt install python3 python3-venv - Windows: Download from python.org
Your GitHub App must have:
- Device flow enabled (Settings → Optional features → Device flow)
- Callback URL set (e.g.,
http://localhost— required even though not used) - User permissions configured as needed
python3 -m venv .venvmacOS/Linux:
source .venv/bin/activateWindows:
.venv\Scripts\activatepip install -r requirements.txtpython device_flow.py --client-id YOUR_CLIENT_IDOr using the short flag:
python device_flow.py -c YOUR_CLIENT_IDexport GITHUB_CLIENT_ID=YOUR_CLIENT_ID
python device_flow.pypython device_flow.py --help==================================================
GitHub Device Flow - User Access Token
==================================================
Client ID: Iv23liXXXXXXXXXXXXXX
Requesting device code...
==================================================
ACTION REQUIRED
==================================================
1. Go to: https://github.com/login/device
2. Enter code: XXXX-XXXX
Waiting for authorisation...
==================================================
SUCCESS!
==================================================
Token Type: bearer
Scope:
Access Token: ghu_xxxxxxxxxxxx...xxxxxxxxxx
Testing token by fetching user info...
Authenticated as: your-username
Name: Your Name
Email: you@example.com
==================================================
FULL ACCESS TOKEN (for use in other applications):
==================================================
ghu_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
The script prints the full token as the last line of output, making it easy to capture for use in other scripts or store as an environment variable:
# Capture token into an environment variable
export GITHUB_USER_TOKEN=$(python device_flow.py -c YOUR_CLIENT_ID | tail -1)
# Use the token
curl -H "Authorization: Bearer $GITHUB_USER_TOKEN" https://api.github.com/userWhen done:
deactivateSee Common Issues for troubleshooting help.