Verify Discord joins with your own app
Ten minutes in the Discord Developer Portal turns “join our Discord” from a trust exercise into a checked one.
- Takes about
- 10 min
- Unlocks
- Join our Discord
- Steps checked
- September 19, 2026
Discord is the only community platform that will answer the question every other social doable has to take on trust: is this person actually in your server?
Answering it needs a Discord application — and it needs to be yours, not ours. Symbiotic never holds an OAuth client on a merchant’s behalf, so your community relationship stays yours, your name is what shoppers see on the sign-in screen, and disconnecting takes nothing with it.
1. Create your Discord application
- Go to the Discord Developer Portal and sign in with the account that owns your server.
- Click New Application, name it after your store, and accept the terms.
- On General Information, copy the Application ID. That is the client id.
2. Add the redirect URL
Discord refuses any sign-in that comes back to a URL it does not recognise.
- In your application, open OAuth2.
- Under Redirects, click Add Redirect.
- Paste the URL shown in Symbiotic → Integrations → Discord. It ends in
/verify/discord/callback. - Save Changes. Copy it exactly — a trailing slash or
httpinstead ofhttpsis enough to break it.
3. Copy the client secret
Still on OAuth2, under Client Secret, click Reset Secret and copy the value.
Discord shows it once. So does Symbiotic — we store it encrypted and never display it again.
4. Get your server ID
- In Discord, open User Settings → Advanced and turn on Developer Mode.
- Right-click your server’s icon in the sidebar and choose Copy Server ID.
5. Connect it
- Symbiotic → Integrations → Discord.
- Paste the Application ID, the Client secret and the Server ID.
- Click Connect.
That’s it. The Join our Discord doable now shows a Confirm with Discord button once a shopper has claimed it.
What shoppers see
They tap Join, join your server, and tap I did it — exactly as before, and the discount lands exactly as before. Then an extra button appears: Confirm with Discord. Signing in takes two taps and asks for two permissions:
- identify — the account’s id, so you can tell two confirmations apart.
- guilds — the list of servers it is in, so we can check yours is one of them.
We read that list once, check for your server, and throw it away. Which other servers somebody is in is not our business and is not stored.
Confirming is an offer, never a gate
The reward is granted when the shopper claims it, whether they confirm or not. A shopper who refuses to sign in keeps their discount; the completion simply stays unconfirmed in your reports.
This is deliberate. Holding a discount hostage to a third-party sign-in punishes the shopper for your integration being down — and it turns a nice moment into a demand. What you get instead is an honest split in your own numbers: how many joins you paid for, and how many you can prove.
Troubleshooting
“Invalid OAuth2 redirect_uri.” The redirect in your Discord app doesn’t match the one in Symbiotic exactly. Compare them character by character.
Everyone comes back “not a member”. The server ID is wrong, or you copied a channel ID. Right-click the server icon, not a channel.
“Discord didn’t answer.” Your client secret was reset in the Developer Portal after you saved it here. Reset it again and paste the new one.
Telegram and WhatsApp
Neither offers anything equivalent — there is no way for an app to ask “is this person in my channel?” So those doables stay on trust, and the widget keeps telling shoppers so.