Rewards API
The rewards API for consumer apps
Trophy is the rewards API for consumer apps, adding redeemable bonus points, discount codes, and custom prizes to your app with a few API calls. Award rewards automatically when users hit milestones, let them redeem rewards when they are ready, and fulfill custom rewards from your own systems with webhooks.
Quickstart
Quickstart: award and redeem a reward
Configure a reward and its triggers in the Trophy dashboard (or via MCP), then send metric events as usual. Show users the rewards they earned and redeem them from your app.
import { TrophyApiClient } from "@trophyso/node";
const trophy = new TrophyApiClient({ apiKey: process.env.TROPHY_API_KEY });
// 1. Track the metric that powers your reward trigger
const eventResponse = await trophy.metrics.event("workouts", {
user: { id: "user-123" },
value: 1,
});
console.log("Rewards awarded:", eventResponse.rewards);
// 2. List the user's rewards that are waiting to be redeemed
const unredeemed = await trophy.users.rewards("user-123", {
redeemed: false,
});
// 3. Redeem a reward when the user taps redeem
const redemption = await trophy.rewards.redeem("welcome-bonus", {
user: { id: "user-123" },
});
console.log("Redeemed:", redemption.redemptions);
console.log("Points granted:", redemption.points);Buy vs. build
Why use Trophy's rewards API?
A rewards system needs to award each prize exactly once, keep it safe until the user redeems it, and pay it out reliably. Getting that right in-house takes longer than it looks.
Integration Time
Reliability
Fulfillment
Ongoing Maintenance
Analytics
Endpoints
Rewards endpoints
Use Trophy's rewards API to show users the rewards they've earned and redeem them from your app. Rewards are awarded automatically from metric events, streaks, achievements, and leaderboards.
Send a metric event to track user activity. The response includes any rewards the event awarded.
Path Parameters
keystringrequiredUnique reference of the metric as set when created.
Request Body
userUserrequiredThe user that triggered the event (must include id).
valuenumberrequiredThe value to add to the user's current total for the given metric.
Response
eventIdstringUnique identifier for the created event.
totalnumberThe user's new total for this metric.
rewardsUserReward[]Rewards awarded by this event. Empty when nothing was awarded or the event was replayed.
import { TrophyApiClient } from '@trophyso/node';
const trophy = new TrophyApiClient({
apiKey: 'YOUR_API_KEY'
});
// Track a user event
const response = await trophy.metrics.event("workouts", {
user: {
id: "user-123"
},
value: 1
});
// Rewards awarded by this event:
// [{
// id: "e1a9c0d4-...",
// redeemed: false,
// reward: { key: "streak-bonus", type: "points", points: 50 },
// trigger: { type: "streak", streakLengthThreshold: 7 }
// }]
console.log(response.rewards);Get a user's rewards, with the reward and the trigger that awarded it.
Path Parameters
idstringrequiredID of the user.
Query Parameters
redeemedbooleanOnly return rewards that have or have not been redeemed.
startDatestringInclusive start of the awarded-at range (YYYY-MM-DD).
endDatestringInclusive end of the awarded-at range (YYYY-MM-DD).
skipintegerNumber of rewards to skip (default: 0).
limitintegerMaximum number of rewards to return (default and max: 100).
Response
idstringID of the reward redemption.
redeemedbooleanWhether the reward has been redeemed.
rewardRewardThe reward, including its type and points.
triggerTriggerThe trigger that awarded the reward.
import { TrophyApiClient } from '@trophyso/node';
const trophy = new TrophyApiClient({
apiKey: 'YOUR_API_KEY'
});
// List rewards waiting to be redeemed
const rewards = await trophy.users
.rewards("user-123", { redeemed: false });
// Response:
// [{
// id: "e1a9c0d4-...",
// awardedAt: "2026-10-20T09:15:00Z",
// redeemed: false,
// reward: {
// key: "welcome-bonus",
// name: "Welcome bonus",
// type: "points",
// points: 100
// },
// trigger: {...}
// }]Redeem all of a user's unredeemed awards for a reward. Points rewards grant points, and every redemption sends a reward.redeemed webhook.
Path Parameters
keystringrequiredKey of the reward to redeem.
Request Body
userUserrequiredThe user redeeming the reward (must include id).
Response
rewardRewardThe reward that was redeemed.
redemptionsRedemption[]The awards redeemed by this request, oldest first.
pointsPointsPoints granted by a points reward, keyed by points system.
leaderboardsLeaderboardsPoints leaderboards the user’s rank changed on.
import { TrophyApiClient } from '@trophyso/node';
const trophy = new TrophyApiClient({
apiKey: 'YOUR_API_KEY'
});
// Redeem when the user taps "Redeem"
const redemption = await trophy.rewards
.redeem("welcome-bonus", {
user: { id: "user-123" }
});
// Response:
// {
// reward: { key: "welcome-bonus", ... },
// redemptions: [{
// id: "e1a9c0d4-...",
// redeemedAt: "2026-10-28T12:00:00Z"
// }],
// points: { xp: { total: 350, added: 100 } },
// leaderboards: {}
// }Built for production workloads
Reliable infrastructure designed for performance at scale.
- Uptime SLA
- 99.99%
- p95 API Latency
- 200ms
- Monthly API Requests
- 150M
- Users Tracked
- 1M+
FAQ
Frequently asked questions
Have a different question and can’t find the answer you’re looking for? Send us an email.
Get started