TANITARDevelopers
WebhooksEvent catalogRewards

reward.grant-applied

Version 1 of the reward.grant-applied webhook event.

The reward.grant-applied event.

Event typereward.grant-applied
Schema version1
Routing keyevent.reward.grant-applied.v1
Produced byReward Management
Schemaurn:defendr:contract:reward:grant-applied:1

data fields

FieldTypeRequiredDescription
grantIdstringyes
outcome"applied", "rejected"yes
playerIdstringyes
walletScope"platform", "game"yes
gameSlugstring or nullyes
awardsarray of objectyes
awards[].currencyKeystringyes
awards[].amountintegeryes
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
reasonstringyes
transferIdstring or nullyes
rejectionobject or nullyes
rejection.codestringyes
rejection.reasonstringyes
settledAtstring (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"
          }
        }
      }
    }
  ]
}

On this page