# Humanmark for Discourse - Hardware-Backed Humanity Verification

**URL:** https://meta.discourse.org/t/humanmark-for-discourse-hardware-backed-humanity-verification/377637
**Category:** Plugin
**Created:** [August 6, 2025, 10:39pm UTC](https://meta.discourse.org/t/humanmark-for-discourse-hardware-backed-humanity-verification/377637 "2025-08-06T22:39:06Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![ericathumanmark](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ericathumanmark/32/516228_2.png) [@ericathumanmark](https://meta.discourse.org/u/ericathumanmark)
#### Post date: [August 6, 2025, 10:39pm UTC](https://meta.discourse.org/t/humanmark-for-discourse-hardware-backed-humanity-verification/377637/1 "2025-08-06T22:39:06Z")

</div>

| | | |
| --- | --- | --- |
| ℹ | **Summary** | Know what’s human in your Discourse forum - hardware-backed verification to distinguish human intent from automation |
| 🛠 | **Repository Link** | [https://github.com/humanmark/discourse-humanmark](https://github.com/humanmark/discourse-humanmark) |
| 📖 | **Install Guide** | [How to install plugins in Discourse](https://meta.discourse.org/t/install-plugins-in-discourse/19157) |

![verification-flow](https://global.discourse-cdn.com/meta/original/4X/c/7/b/c7b065f74c4fcfa46f5576da21a006e20fb4bdb0.gif)

### Features

**Know What’s Human** - Distinguish human intent from automation:

- Verify human presence before creating posts, topics, or private messages
- Hardware-backed verification using secure device authentication (fingerprint/face recognition, device passcode)
- No puzzles or behavioral tracking
- Support for anonymous users and Discourse’s anonymous mode

**Smart Bypass Rules** - Balance security with user experience:

- Skip verification for staff members and trusted users
- Set trust level thresholds for automatic bypass
- Configure reverification periods per content type (posts/topics/messages)
- Maintain smooth experience for established community members

**Privacy-First** :

- Zero data retention - completely stateless verification
- No accounts or personal information required
- Instant verification takes just seconds

**Advanced Integration** :

- Comprehensive rate limiting (per-user and per-IP)
- Four admin reports for monitoring verification metrics
- Event-driven architecture
- Dynamic enabling/disabling without server restart

### Configuration

1. **Get your API credentials** :

2. **Install the plugin** :

3. **Configure in Admin Panel** :

4. **Monitor with Admin Reports** :

### Settings

| Name | Description |
| --- | --- |
| **API Configuration** | |
| `humanmark_enabled` | Master on/off switch for the plugin |
| `humanmark_api_key` | Your public API key from Humanmark dashboard |
| `humanmark_api_secret` | Your private API secret (keep secure!) |
| `humanmark_domain` | Verification domain (must be allowlisted in your Humanmark account) |
| **Protection Settings** | |
| `humanmark_protect_posts` | Require verification for post creation |
| `humanmark_protect_topics` | Require verification for new topics |
| `humanmark_protect_messages` | Require verification for private messages |
| **Bypass Settings** | |
| `humanmark_bypass_staff` | Staff members skip verification |
| `humanmark_bypass_trust_level` | Minimum trust level to bypass (0-5, use 5 for no bypass) |
| **Rate Limiting** | |
| `humanmark_max_challenges_per_user_per_minute` | Per-user minute limit (1-20, default: 3) |
| `humanmark_max_challenges_per_user_per_hour` | Per-user hourly limit (1-100, default: 15) |
| `humanmark_max_challenges_per_ip_per_minute` | Per-IP minute limit (1-50, default: 10) |
| `humanmark_max_challenges_per_ip_per_hour` | Per-IP hourly limit (1-500, default: 50) |
| **Reverification Periods** | |
| `humanmark_reverify_period_posts` | Minutes before re-verification needed for posts (0-10080, default: 30) |
| `humanmark_reverify_period_topics` | Minutes before re-verification needed for topics (0-10080, default: 0) |
| `humanmark_reverify_period_messages` | Minutes before re-verification needed for messages (0-10080, default: 60) |
| **Other Settings** | |
| `humanmark_theme` | Widget appearance (light/dark/auto) |
| `humanmark_flow_retention_days` | Days to keep verification records (1-365, default: 30) |
| `humanmark_debug_mode` | Log sensitive debug information (default: false) |

**Note** : Currently in beta - select Discourse communities receive an increased allotment of verifications in the free tier. See [humanmark.dev/pricing](https://humanmark.dev/pricing) for pricing details.

---

<div class="post-metadata">

### Author: ![WorldIsMine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/worldismine/32/455660_2.png) [@WorldIsMine](https://meta.discourse.org/u/WorldIsMine)
#### Post date: [July 16, 2026, 2:00pm UTC](https://meta.discourse.org/t/humanmark-for-discourse-hardware-backed-humanity-verification/377637/4 "2026-07-16T14:00:20Z")

</div>

This is interesting. I have a question, will this prevent banned users from re-joining the community? For example:

1. Notorious troublemaker, keeps signing up
2. Joins again, passes Humanmark
3. Gets banned
4. Joins again
5. Using the same hardware, will he or will he not pass the verification under a new account?

Is theree a demo we can see somewhere?

---

<div class="post-metadata">

### Author: ![WorldIsMine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/worldismine/32/455660_2.png) [@WorldIsMine](https://meta.discourse.org/u/WorldIsMine)
#### Post date: [July 16, 2026, 2:04pm UTC](https://meta.discourse.org/t/humanmark-for-discourse-hardware-backed-humanity-verification/377637/5 "2026-07-16T14:04:10Z")

</div>

Ah nevermind, I understand now. No data retention so I guess no way to solve my problem 😃

---

<div class="post-metadata">

### Author: ![putty](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/putty/32/370902_2.png) [@putty](https://meta.discourse.org/u/putty)
#### Post date: [July 16, 2026, 2:24pm UTC](https://meta.discourse.org/t/humanmark-for-discourse-hardware-backed-humanity-verification/377637/6 "2026-07-16T14:24:06Z")

</div>

Sorry to derail, Eric.

Dave, have you tried banning their IP?
