Engagement & recognition
Reward the work your users already do in your product.
- XP and 50 levels
- Credits and badges
- Collectible cards in five rarities
- Leaderboards
Give your users XP, levels, rewards, collectible cards, live team games and a loyalty program. Your backend sends one event when a user does something; we handle the rules, the balances and the real-time updates.
For SaaS and software teams building CRMs, HR tools, contact centers, e-commerce platforms and more.
Say your product is a CRM, and one of your users closes a deal.
Your CRM sends us one event: โclosed_dealโ. That's the only line of integration this takes.
+50 XP and 10 credits. She reaches level 8, and a Legendary โGolden Ticketโ card drops into her collection.
On the office TV, her team's car jumps forward in this week's sales race. Everyone sees it live.
After a month of deals she trades her credits for a half day off โ from a catalog you define.
Building for merchants instead? Your e-commerce platform reports each purchase with its amount. Every shopper earns points, climbs from Silver to Gold and redeems a free pastry in a widget your merchants embed with one script tag.
Reward the work your users already do in your product.
Activity in your product moves a game on a shared screen.
Let your merchants run a points-and-perks program for their shoppers.
Even your AI can do it.
Integrate my application with the Gamification Engine (https://gamification.one), a REST API that turns what users do into XP, levels, credits, collectible cards, team-game progress and loyalty tiers.
Connection
- Read the base URL and API key from configuration: GAMIFICATION_API_BASE and GAMIFICATION_API_KEY. The key is a server-side secret: never send it to a browser or mobile app, never commit it.
- Send it as the X-Api-Key header on every request. Bodies are JSON with camelCase fields; enum values are numbers.
- Errors are RFC 7807 problem+json: 400 invalid input, 401 bad key, 404 unknown participant or action, 409 a rule said no (for example a daily cap was reached).
1. Define the reward-worthy actions (a one-time setup script; a 409 means the key already exists)
POST /api/actions
{"key": "closed_deal", "name": "Closed a deal", "xpReward": 50, "creditReward": 10}
Rewards per amount, e.g. 2 XP + 1 credit per euro spent, at most 5 times a day:
{"key": "purchase", "name": "Purchase", "xpReward": 0, "creditReward": 0, "rewardMode": 1, "xpPerUnit": 2, "creditsPerUnit": 1, "dailyCap": 5}
Look through my codebase, propose the actions that fit it with their rewards, and wait for my confirmation before creating them.
2. Register users as participants (idempotent: a known externalUserId returns the existing participant)
POST /api/participants
{"externalUserId": "<my user id>", "displayName": "Jane Doe", "email": "jane@example.com", "type": 0}
type 0 = employee, 1 = customer. Call it when a user is created, plus a one-off backfill for existing users.
3. Send an event whenever one of those actions happens
POST /api/events
{"externalUserId": "<my user id>", "actionKey": "closed_deal"}
Add "amount": 49.90 for per-amount actions. The response says what the event caused: xpAwarded, creditsAwarded, totalXp, totalCredits, levelBefore, levelAfter, leveledUp, drop (a collectible card, or null) and gameScoreUpdates. A 404 for the participant means they were never registered: register them, then send the event once more.
How to build it
- One small client in my backend, in the language and HTTP library my project already uses, with configurable base URL and timeouts.
- Send events after my own transaction commits. A gamification failure must never break the user's action: log it instead of failing the request. Events are not deduplicated, so don't retry blindly after a timeout.
- Where my UI has a natural place for it, show level-ups and card drops; ask me before adding new screens.
- Add tests with the HTTP calls mocked.
Optional, ask me first
- Leaderboard: GET /api/participants/leaderboard (?type=Customer ranks customers).
- Customer loyalty widget: my backend mints a short-lived token with POST /api/participants/{id}/tokens and renders
<script src="{GAMIFICATION_API_BASE}/widget/loyalty-widget.js" data-api-base="{GAMIFICATION_API_BASE}" data-token="{token}" data-target="#loyalty"></script>
and the site's origin is registered once with POST /api/widget-origins {"origin": "https://shop.example.com"}.
One call, one API key, your own isolated tenant.
closed_deal is 50 XP and 10 credits. purchase pays 2 XP and 1 credit per euro, with a daily cap.
Every event returns the XP, credits, level-up, card drop and game progress it caused โ in the same response.
# Send an event when someone does something reward-worthy
curl -X POST https://api.example.com/api/events \
-H "X-Api-Key: $GAMIFICATION_KEY" \
-H "Content-Type: application/json" \
-d '{
"externalUserId": "rep-42",
"actionKey": "closed_deal"
}'
{
"actionKey": "closed_deal",
"xpAwarded": 50,
"creditsAwarded": 10,
"totalXp": 1250,
"totalCredits": 240,
"levelBefore": 7,
"levelAfter": 8,
"leveledUp": true,
"drop": { "name": "Golden Ticket", "rarity": 4, "newQuantity": 1 },
"completedSets": [],
"gameScoreUpdates": [
{ "sessionName": "Friday Sales Race", "teamName": "Blue Bolts",
"teamScore": 250, "targetScore": 300, "sessionFinished": false }
]
}
Five rarities from Common to Legendary. Define cards and sets โ three scissors and a comb make a haircut โ and completion is detected the moment the last card lands.
A catalog you define โ a day off, a team lunch, a free coffee. Redemptions land in a fulfilment queue; cancel one and the credits or cards go back exactly where they came from.
Your users open one link on the office TV. Cars move the second a deal closes in your product, the session finishes itself when a team hits the target, and a score multiplier makes the last week of the quarter count double.
Your backend mints a short-lived token per customer; the widget shows their balance, tier progress and perks, and lets them redeem on your site. Your API key never touches the browser.
Points look simple until you need level curves, balance audits, refunds, expiry, abuse limits, real-time updates and an admin panel. It's all here, built to be embedded in your product.
One tenant per customer of yours, each with its own API key, rules and data.
Browsers get a short-lived token that sees one person โ never your key.
SignalR pushes game progress the moment an event lands.
400s name the field, 409s give a sentence you can show a user.
Catalogs, rules, tiers, sessions and the fulfilment queue.
Fixed or per-unit rewards, per-event maximums and daily caps.
.NET 10 and PostgreSQL, with 290+ automated tests.
Every credit earned, spent, refunded or expired is on the statement.
Pricing is being finalised โ tell us what you're building and we'll set you up.
Register a tenant, define one action, post one event. Watch the level-up come back in the response.