WebhooksEvent catalogRewards
reward.grant-applied
Version 1 of the reward.grant-applied webhook event.
The reward.grant-applied event.
| Event type | reward.grant-applied |
| Schema version | 1 |
| Routing key | event.reward.grant-applied.v1 |
| Produced by | Reward Management |
| Schema | urn:defendr:contract:reward:grant-applied:1 |
data fields
| Field | Type | Required | Description |
|---|---|---|---|
grantId | string | yes | |
outcome | "applied", "rejected" | yes | |
playerId | string | yes | |
walletScope | "platform", "game" | yes | |
gameSlug | string or null | yes | |
awards | array of object | yes | |
awards[].currencyKey | string | yes | |
awards[].amount | integer | yes | |
provenance | "gamification-mission", "gamification-battle-pass", "gamification-chest", "gamification-leaderboard", "tournament-award", "player-action", "operator-grant", "shop-purchase", "membership-grant", "reward-key", "unknown", "gamification-quiz" | yes | |
reason | string | yes | |
transferId | string or null | yes | |
rejection | object or null | yes | |
rejection.code | string | yes | |
rejection.reason | string | yes | |
settledAt | string (date-time) | yes |
Some fields are required only in particular states. The JSON Schema below is authoritative.
Example delivery
Signed with the example secret whsec_placeholder_example_webhooks_signing_secret, so you can check your verifier against it. See Verifying signatures.
POST /your/webhook/endpoint HTTP/1.1
content-type: application/json
webhook-id: whd_00000000-0000-4000-8000-000000000024
webhook-timestamp: 1800000000
webhook-signature: v1,+OI3VcO/JCXZ+DZpAb6qBXEZAjLf0CGfMwttn7PDj+g=
tanitar-event-type: reward.grant-applied
tanitar-schema-version: 1
tanitar-delivery-attempt: 1
{"messageId":"evt_00000000-0000-4000-8000-000000000024","kind":"event","type":"reward.grant-applied","schemaVersion":1,"occurredAt":"2027-01-15T10:00:00.000Z","producer":"reward-management-service","accountId":"acc_11111111-1111-4111-8111-111111111111","correlationId":"corr_00000000-0000-4000-8000-000000000024","data":{"grantId":"grant_demo","outcome":"applied","playerId":"player_demo","walletScope":"platform","gameSlug":null,"awards":[{"currencyKey":"red","amount":25}],"provenance":"gamification-mission","reason":"mission completion reward","transferId":"tr_demo","rejection":null,"settledAt":"2026-09-07T00:00:00.000Z"}}The same body, formatted:
{
"messageId": "evt_00000000-0000-4000-8000-000000000024",
"kind": "event",
"type": "reward.grant-applied",
"schemaVersion": 1,
"occurredAt": "2027-01-15T10:00:00.000Z",
"producer": "reward-management-service",
"accountId": "acc_11111111-1111-4111-8111-111111111111",
"correlationId": "corr_00000000-0000-4000-8000-000000000024",
"data": {
"grantId": "grant_demo",
"outcome": "applied",
"playerId": "player_demo",
"walletScope": "platform",
"gameSlug": null,
"awards": [
{
"currencyKey": "red",
"amount": 25
}
],
"provenance": "gamification-mission",
"reason": "mission completion reward",
"transferId": "tr_demo",
"rejection": null,
"settledAt": "2026-09-07T00:00:00.000Z"
}
}JSON Schema
urn:defendr:contract:reward:grant-applied:1
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:defendr:contract:reward:grant-applied:1",
"type": "object",
"additionalProperties": false,
"required": [
"grantId",
"outcome",
"playerId",
"walletScope",
"gameSlug",
"awards",
"provenance",
"reason",
"transferId",
"rejection",
"settledAt"
],
"properties": {
"grantId": {
"type": "string",
"minLength": 1
},
"outcome": {
"enum": [
"applied",
"rejected"
]
},
"playerId": {
"type": "string",
"minLength": 1
},
"walletScope": {
"enum": [
"platform",
"game"
]
},
"gameSlug": {
"type": [
"string",
"null"
]
},
"awards": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"currencyKey",
"amount"
],
"properties": {
"currencyKey": {
"type": "string",
"minLength": 1
},
"amount": {
"type": "integer"
}
}
}
},
"provenance": {
"$ref": "urn:defendr:contract:common:source-provenance:1"
},
"reason": {
"type": "string",
"minLength": 1
},
"transferId": {
"type": [
"string",
"null"
]
},
"rejection": {
"type": [
"object",
"null"
],
"additionalProperties": false,
"required": [
"code",
"reason"
],
"properties": {
"code": {
"type": "string",
"pattern": "^[A-Z0-9_]+$"
},
"reason": {
"type": "string",
"minLength": 1
}
}
},
"settledAt": {
"type": "string",
"format": "date-time"
}
},
"allOf": [
{
"if": {
"type": "object",
"required": [
"outcome"
],
"properties": {
"outcome": {
"const": "applied"
}
}
},
"then": {
"type": "object",
"properties": {
"awards": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"amount": {
"type": "integer",
"minimum": 1
}
}
}
},
"transferId": {
"type": "string",
"minLength": 1
},
"rejection": {
"type": "null"
}
}
}
},
{
"if": {
"type": "object",
"required": [
"outcome"
],
"properties": {
"outcome": {
"const": "rejected"
}
}
},
"then": {
"type": "object",
"properties": {
"transferId": {
"type": "null"
},
"rejection": {
"type": "object"
}
}
}
}
]
}