challenge-completion for one flagship challenge, or only fire reward-claim for a particular reward asset.
Entity filters are optional. If you omit them, the webhook fires for all entities in the organisation.
Why filter by entity?
- Reduce handler load: only process events your downstream system cares about.
- Per-partner webhooks: point different webhook endpoints at different challenges (e.g. one challenge powers a partner’s co-marketing flow, the rest stay internal).
- Avoid accidental fan-out: when you subscribe to a broad event like
reward-distribution, filters stop you from processing unrelated rewards.
Configure a filter
Entity filters are set per subscription. In the admin panel, open a webhook config, select an event, and pick the entities from the dropdown: Via the Admin API, add anentityFilters map on the subscription:
Entity IDs must belong to entities visible to the token’s organisation. Filtering by an ID from a different org is rejected.
Event → entity mapping
Different events key off different entity types:| Event | Entity Type | eventSourceId on payload |
|---|---|---|
challenge-started, challenge-completion | Challenge | Challenge ID |
achievement-completion | Achievement | Achievement ID |
reward-claim, reward-redemption, reward-distribution | Reward | Reward ID |
action-participation | Action | Action ID |
auth.email, streak-extended | (not filterable — organisation-wide) | N/A |
Editing filters
Filters can be changed any time — changes take effect immediately for new events. Existing in-flight deliveries (already queued) finish using the filter state at the time they were enqueued.Related
Event Catalog
Every event Nudj can fire and the entities it attaches to.
Implementation Guide
Build your handler to trust the filtered event stream.

