WebhooksEvent catalogGamification
gamification.mission.completed
Version 1 of the gamification.mission.completed webhook event.
The gamification.mission.completed event.
| Event type | gamification.mission.completed |
| Schema version | 1 |
| Routing key | event.gamification.mission.completed.v1 |
| Produced by | Gamification |
| Schema | urn:defendr:contract:gamification:mission-completed:1 |
data fields
| Field | Type | Required | Description |
|---|---|---|---|
accountId | string | yes | |
playerId | string | yes | |
missionKey | string | yes | |
missionRevision | integer | yes | |
occurrence | integer | yes | |
periodStart | string or null (date-time) | yes | |
completedAt | string (date-time) | yes | |
rewards | array of object | yes | |
rewards[].rewardType | "xp", "battlePassXP", "chest", "currency", "badge" | yes | |
rewards[].amount | integer or null | no | |
rewards[].key | string or null | no | |
rewards[].settlement | "settled", "deferred", "rejected" | 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-000000000017
webhook-timestamp: 1800000000
webhook-signature: v1,kL7l8MR7rhOzAZ14dKOulqpa3ta5QJvK9rw67r9NfXk=
tanitar-event-type: gamification.mission.completed
tanitar-schema-version: 1
tanitar-delivery-attempt: 1
{"messageId":"evt_00000000-0000-4000-8000-000000000017","kind":"event","type":"gamification.mission.completed","schemaVersion":1,"occurredAt":"2027-01-15T10:00:00.000Z","producer":"gamification-service","accountId":"acc_11111111-1111-4111-8111-111111111111","correlationId":"corr_00000000-0000-4000-8000-000000000017","data":{"accountId":"acct_demo","playerId":"player_demo","missionKey":"core-win-valorant","missionRevision":1,"occurrence":1,"periodStart":null,"completedAt":"2026-09-08T00:00:00.000Z","rewards":[{"rewardType":"xp","amount":300,"key":null,"settlement":"settled"},{"rewardType":"battlePassXP","amount":75,"key":null,"settlement":"deferred"}]}}The same body, formatted:
{
"messageId": "evt_00000000-0000-4000-8000-000000000017",
"kind": "event",
"type": "gamification.mission.completed",
"schemaVersion": 1,
"occurredAt": "2027-01-15T10:00:00.000Z",
"producer": "gamification-service",
"accountId": "acc_11111111-1111-4111-8111-111111111111",
"correlationId": "corr_00000000-0000-4000-8000-000000000017",
"data": {
"accountId": "acct_demo",
"playerId": "player_demo",
"missionKey": "core-win-valorant",
"missionRevision": 1,
"occurrence": 1,
"periodStart": null,
"completedAt": "2026-09-08T00:00:00.000Z",
"rewards": [
{
"rewardType": "xp",
"amount": 300,
"key": null,
"settlement": "settled"
},
{
"rewardType": "battlePassXP",
"amount": 75,
"key": null,
"settlement": "deferred"
}
]
}
}JSON Schema
urn:defendr:contract:gamification:mission-completed:1
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:defendr:contract:gamification:mission-completed:1",
"title": "Gamification mission completed event payload",
"type": "object",
"additionalProperties": false,
"required": [
"accountId",
"playerId",
"missionKey",
"missionRevision",
"occurrence",
"periodStart",
"completedAt",
"rewards"
],
"properties": {
"accountId": {
"type": "string",
"minLength": 1
},
"playerId": {
"type": "string",
"minLength": 1
},
"missionKey": {
"type": "string",
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
"missionRevision": {
"type": "integer",
"minimum": 1
},
"occurrence": {
"type": "integer",
"minimum": 1
},
"periodStart": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"completedAt": {
"type": "string",
"format": "date-time"
},
"rewards": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"rewardType",
"settlement"
],
"properties": {
"rewardType": {
"enum": [
"xp",
"battlePassXP",
"chest",
"currency",
"badge"
]
},
"amount": {
"type": [
"integer",
"null"
],
"minimum": 1
},
"key": {
"type": [
"string",
"null"
],
"minLength": 1
},
"settlement": {
"enum": [
"settled",
"deferred",
"rejected"
]
}
}
}
}
}
}