Skip to content
Developer docs
⌘ K
Dashboard ↗

Webhook events

reward.delivered

Receive this event when Grizzlee records reward.delivered.

Example payload

This illustrative payload follows the current event validator. Amounts use minor units.

json
{
  "id": "00000000-0000-4000-8000-000000000001",
  "companyId": "company-example",
  "type": "reward.delivered",
  "data": {
    "partnerId": "partner-example",
    "partnerExternalId": "merchant-partner-001",
    "rewardId": "reward-example",
    "programId": "program-example",
    "customerId": "customer-example",
    "currency": "CAD",
    "rewardType": "cash",
    "deliveryMode": "merchant",
    "amountCents": 500,
    "originalCents": 500,
    "reversedCents": 0,
    "status": "approved",
    "reward": {
      "id": "reward-example",
      "companyId": "company-example",
      "orderId": "order-example",
      "programId": "program-example",
      "partnerId": "partner-example",
      "customerId": "customer-example",
      "currency": "CAD",
      "rewardType": "cash",
      "originalCents": 500,
      "reversedCents": 0,
      "status": "approved",
      "createdAt": "2026-10-11T12:00:00.000Z",
      "availableAt": "2026-10-11T12:00:00.000Z",
      "programSnapshot": {
        "name": "Example referral program",
        "kind": "referral",
        "currency": "CAD",
        "trigger": {
          "type": "order"
        },
        "rewardType": "cash",
        "attributionWindowDays": 1,
        "active": true
      },
      "explanation": "5% of CAD $100.00"
    },
    "delivery": {
      "id": "delivery-example",
      "companyId": "company-example",
      "rewardId": "reward-example",
      "partnerId": "partner-example",
      "status": "delivered",
      "amountCents": 500,
      "currency": "CAD",
      "rewardType": "cash",
      "createdAt": "2026-10-11T12:00:00.000Z"
    },
    "trigger": "order",
    "orderId": "order-example"
  },
  "createdAt": "2026-10-11T12:00:00.000Z"
}

Payload fields

FieldTypeRequiredDetails
partnerIdstringYes
partnerExternalIdstringYes
rewardIdstringYes
programIdstringYes
programVersionintegerNominimum 1
customerIdstringYes
currency"CAD", "USD", "EUR", "GBP"Yes
rewardType"cash", "credit", "offer"Yes
deliveryMode"merchant", "grizzlee_wallet"Yes
amountCentsintegerYesminimum 0. maximum 1000000000000
originalCentsintegerYesminimum 0. maximum 1000000000000
adjustedCentsintegerNominimum -1000000000000. maximum 1000000000000
reversedCentsintegerYesminimum 0. maximum 1000000000000
status"pending", "approved", "reversed"Yes
rewardobjectYes
incentiveAppliedCentsintegerNominimum 0. maximum 1000000000000
incentiveFlagobjectNo
deliveryobjectYes

reward

FieldTypeRequiredDetails
reward.idstringYes
reward.companyIdstringYes
reward.orderIdstringNo
reward.milestonestringNo
reward.milestoneReportReversedbooleanNo
reward.reportEventIdstringNo
reward.valueCentsintegerNominimum 0. maximum 1000000000000
reward.milestoneCountintegerNominimum 0
reward.milestoneRevokedbooleanNo
reward.programIdstringYes
reward.partnerIdstringYes
reward.customerIdstringYes
reward.currency"CAD", "USD", "EUR", "GBP"Yes
reward.rewardType"cash", "credit", "offer"Yes
reward.offerobjectNo
reward.originalCentsintegerYesminimum 0. maximum 1000000000000
reward.adjustedCentsintegerNominimum -1000000000000. maximum 1000000000000
reward.reversedCentsintegerYesminimum 0. maximum 1000000000000
reward.status"pending", "approved", "reversed"Yes
reward.selfReferralobjectNo
reward.fraudobjectNo
reward.rejectedAtstringNodate-time
reward.rejectionReasonstringNo
reward.statusBeforeReversal"pending", "approved"No
reward.deliveryMode"merchant", "grizzlee_wallet"No
reward.createdAtstringYesdate-time
reward.availableAtstringYesdate-time
reward.programSnapshotobjectYes
reward.programVersionintegerNominimum 1
reward.historicalBasis"total"No
reward.basisCentsintegerNominimum 0. maximum 1000000000000
reward.explanationstringYes
reward.explanationPartsarrayNo
reward.calculationobjectNo

reward.offer

FieldTypeRequiredDetails
reward.offer.termsobjectYes
reward.offer.expiresAtstring,nullYes

reward.offer.terms

FieldTypeRequiredDetails
reward.offer.terms.typestringYes

reward.selfReferral

FieldTypeRequiredDetails
reward.selfReferral.action"blocked", "review", "flagged"Yes
reward.selfReferral.signalsarrayYes

reward.fraud

FieldTypeRequiredDetails
reward.fraud.action"blocked", "review", "flagged"Yes
reward.fraud.rulesarrayYes

reward.fraud.rules[]

FieldTypeRequiredDetails
reward.fraud.rules.rule"duplicate_accounts", "rapid_repeats", "repeat_customer", "disposable_email"Yes
reward.fraud.rules.action"blocked", "review", "flagged"Yes
reward.fraud.rules.signalsarrayYes
reward.fraud.rules.countintegerNo

reward.programSnapshot

FieldTypeRequiredDetails
reward.programSnapshot.namestringYes
reward.programSnapshot.kind"referral", "affiliate", "both"Yes
reward.programSnapshot.trackingobjectNodefault {}
reward.programSnapshot.currency"CAD", "USD", "EUR", "GBP"Yes
reward.programSnapshot.destinationUrlstringNouri
reward.programSnapshot.displayobjectNo
reward.programSnapshot.triggerunionNo
reward.programSnapshot.compensationunionNo
reward.programSnapshot.milestoneRewardsobjectNo
reward.programSnapshot.fixedRefundMode"prorate", "full_refund_only"Nodefault "prorate"
reward.programSnapshot.durationunionNo
reward.programSnapshot.rewardType"cash", "credit", "offer"Yes
reward.programSnapshot.deliveryobjectNodefault {}
reward.programSnapshot.attributionWindowDaysunionYes
reward.programSnapshot.reviewRewardsbooleanNo
reward.programSnapshot.fraudChecksobjectNo
reward.programSnapshot.activebooleanYes
reward.programSnapshot.performanceobjectNo
reward.programSnapshot.limitsobjectNo
reward.programSnapshot.customTermsarrayNo
reward.programSnapshot.friendIncentiveobjectNo
reward.programSnapshot.partnerOfferobjectNo
reward.programSnapshot.orderCategoriesobjectNo

reward.programSnapshot.tracking

FieldTypeRequiredDetails
reward.programSnapshot.tracking.linksbooleanNodefault true
reward.programSnapshot.tracking.qrCodesbooleanNodefault true
reward.programSnapshot.tracking.attributionCodesbooleanNodefault true
reward.programSnapshot.tracking.providerPromoCodesbooleanNodefault false

reward.programSnapshot.display

FieldTypeRequiredDetails
reward.programSnapshot.display.enobjectNo
reward.programSnapshot.display.fr-CAobjectNo
reward.programSnapshot.display.hyobjectNo
reward.programSnapshot.display.ruobjectNo

reward.programSnapshot.display.en

FieldTypeRequiredDetails
reward.programSnapshot.display.en.publicNamestringNo
reward.programSnapshot.display.en.headlinestringNo
reward.programSnapshot.display.en.milestoneLabelobjectNo

reward.programSnapshot.display.en.milestoneLabel

FieldTypeRequiredDetails
reward.programSnapshot.display.en.milestoneLabel.onestringYes
reward.programSnapshot.display.en.milestoneLabel.otherstringYes

reward.programSnapshot.display.fr-CA

FieldTypeRequiredDetails
reward.programSnapshot.display.fr-CA.publicNamestringNo
reward.programSnapshot.display.fr-CA.headlinestringNo
reward.programSnapshot.display.fr-CA.milestoneLabelobjectNo

reward.programSnapshot.display.fr-CA.milestoneLabel

FieldTypeRequiredDetails
reward.programSnapshot.display.fr-CA.milestoneLabel.onestringYes
reward.programSnapshot.display.fr-CA.milestoneLabel.otherstringYes

reward.programSnapshot.display.hy

FieldTypeRequiredDetails
reward.programSnapshot.display.hy.publicNamestringNo
reward.programSnapshot.display.hy.headlinestringNo
reward.programSnapshot.display.hy.milestoneLabelobjectNo

reward.programSnapshot.display.hy.milestoneLabel

FieldTypeRequiredDetails
reward.programSnapshot.display.hy.milestoneLabel.onestringYes
reward.programSnapshot.display.hy.milestoneLabel.otherstringYes

reward.programSnapshot.display.ru

FieldTypeRequiredDetails
reward.programSnapshot.display.ru.publicNamestringNo
reward.programSnapshot.display.ru.headlinestringNo
reward.programSnapshot.display.ru.milestoneLabelobjectNo

reward.programSnapshot.display.ru.milestoneLabel

FieldTypeRequiredDetails
reward.programSnapshot.display.ru.milestoneLabel.onestringYes
reward.programSnapshot.display.ru.milestoneLabel.otherstringYes

reward.programSnapshot.trigger

Variant 1

FieldTypeRequiredDetails
reward.programSnapshot.trigger.type"order"Yes

Variant 2

FieldTypeRequiredDetails
reward.programSnapshot.trigger.type"milestone"Yes
reward.programSnapshot.trigger.milestonestringYes

reward.programSnapshot.compensation

Variant 1

FieldTypeRequiredDetails
reward.programSnapshot.compensation.type"percentage"Yes
reward.programSnapshot.compensation.rateBpsintegerYesminimum 1. maximum 10000
reward.programSnapshot.compensation.phasesarrayNo

reward.programSnapshot.compensation.phases[]

FieldTypeRequiredDetails
reward.programSnapshot.compensation.phases.afterMonthsintegerYesminimum 1. maximum 1200
reward.programSnapshot.compensation.phases.rateBpsintegerYesminimum 0. maximum 10000

Variant 2

FieldTypeRequiredDetails
reward.programSnapshot.compensation.type"fixed"Yes
reward.programSnapshot.compensation.amountCentsintegerYesminimum 0. maximum 1000000000000

reward.programSnapshot.milestoneRewards

FieldTypeRequiredDetails
reward.programSnapshot.milestoneRewards.eachReportobjectNo
reward.programSnapshot.milestoneRewards.atCountobjectNo

reward.programSnapshot.milestoneRewards.eachReport

FieldTypeRequiredDetails
reward.programSnapshot.milestoneRewards.eachReport.compensationunionYes
reward.programSnapshot.milestoneRewards.eachReport.limitintegerNominimum 1. maximum 10000

reward.programSnapshot.milestoneRewards.eachReport.compensation

Variant 1

FieldTypeRequiredDetails
reward.programSnapshot.milestoneRewards.eachReport.compensation.type"percentage"Yes
reward.programSnapshot.milestoneRewards.eachReport.compensation.rateBpsintegerYesminimum 1. maximum 10000
reward.programSnapshot.milestoneRewards.eachReport.compensation.phasesarrayNo

reward.programSnapshot.milestoneRewards.eachReport.compensation.phases[]

Variant 2

FieldTypeRequiredDetails
reward.programSnapshot.milestoneRewards.eachReport.compensation.type"fixed"Yes
reward.programSnapshot.milestoneRewards.eachReport.compensation.amountCentsintegerYesminimum 0. maximum 1000000000000

reward.programSnapshot.milestoneRewards.atCount

FieldTypeRequiredDetails
reward.programSnapshot.milestoneRewards.atCount.countintegerYesminimum 1. maximum 10000
reward.programSnapshot.milestoneRewards.atCount.amountCentsintegerYesminimum 0. maximum 1000000000000

reward.programSnapshot.duration

Variant 1

FieldTypeRequiredDetails
reward.programSnapshot.duration.type"only_order"Yes

Variant 2

FieldTypeRequiredDetails
reward.programSnapshot.duration.type"first_order"Yes

Variant 3

FieldTypeRequiredDetails
reward.programSnapshot.duration.type"first_n_orders"Yes
reward.programSnapshot.duration.countintegerYesminimum 1. maximum 10000

Variant 4

FieldTypeRequiredDetails
reward.programSnapshot.duration.type"days"Yes
reward.programSnapshot.duration.daysintegerYesminimum 1. maximum 36500

Variant 5

FieldTypeRequiredDetails
reward.programSnapshot.duration.type"months"Yes
reward.programSnapshot.duration.monthsintegerYesminimum 1. maximum 1200

Variant 6

FieldTypeRequiredDetails
reward.programSnapshot.duration.type"lifetime"Yes

reward.programSnapshot.delivery

FieldTypeRequiredDetails
reward.programSnapshot.delivery.cash"grizzlee_wallet", "merchant"Nodefault "grizzlee_wallet"
reward.programSnapshot.delivery.credit"grizzlee_wallet", "merchant"Nodefault "grizzlee_wallet"

reward.programSnapshot.attributionWindowDays

Variant 1

Type: integer.

Variant 2

Type: null.

reward.programSnapshot.fraudChecks

FieldTypeRequiredDetails
reward.programSnapshot.fraudChecks.selfReferralobjectNodefault {}
reward.programSnapshot.fraudChecks.duplicateAccountsobjectNodefault {}
reward.programSnapshot.fraudChecks.rapidRepeatsobjectNodefault {}
reward.programSnapshot.fraudChecks.repeatCustomerobjectNodefault {}
reward.programSnapshot.fraudChecks.disposableEmailobjectNodefault {}

reward.programSnapshot.fraudChecks.selfReferral

FieldTypeRequiredDetails
reward.programSnapshot.fraudChecks.selfReferral.action"block", "review", "flag", "off"Nodefault "block"

reward.programSnapshot.fraudChecks.duplicateAccounts

FieldTypeRequiredDetails
reward.programSnapshot.fraudChecks.duplicateAccounts.action"block", "review", "flag", "off"Nodefault "flag"
reward.programSnapshot.fraudChecks.duplicateAccounts.accountsintegerNominimum 2. maximum 200. default 3
reward.programSnapshot.fraudChecks.duplicateAccounts.windowDaysintegerNominimum 1. maximum 365. default 30
reward.programSnapshot.fraudChecks.duplicateAccounts.ipAccountsunionNodefault null

reward.programSnapshot.fraudChecks.duplicateAccounts.ipAccounts

Variant 1

Type: integer.

Variant 2

Type: null.

reward.programSnapshot.fraudChecks.rapidRepeats

FieldTypeRequiredDetails
reward.programSnapshot.fraudChecks.rapidRepeats.action"block", "review", "flag", "off"Nodefault "flag"
reward.programSnapshot.fraudChecks.rapidRepeats.referralsintegerNominimum 2. maximum 200. default 3
reward.programSnapshot.fraudChecks.rapidRepeats.windowMinutesintegerNominimum 1. maximum 10080. default 60
reward.programSnapshot.fraudChecks.rapidRepeats.ipReferralsunionNodefault null

reward.programSnapshot.fraudChecks.rapidRepeats.ipReferrals

Variant 1

Type: integer.

Variant 2

Type: null.

reward.programSnapshot.fraudChecks.repeatCustomer

FieldTypeRequiredDetails
reward.programSnapshot.fraudChecks.repeatCustomer.action"block", "review", "flag", "off"Nodefault "flag"

reward.programSnapshot.fraudChecks.disposableEmail

FieldTypeRequiredDetails
reward.programSnapshot.fraudChecks.disposableEmail.action"review", "flag", "off"Nodefault "flag"

reward.programSnapshot.performance

FieldTypeRequiredDetails
reward.programSnapshot.performance.metric"new_customers", "orders"Yes
reward.programSnapshot.performance.windowDaysintegerNominimum 1. maximum 3650
reward.programSnapshot.performance.tiersarrayYes

reward.programSnapshot.performance.tiers[]

FieldTypeRequiredDetails
reward.programSnapshot.performance.tiers.namestringYes
reward.programSnapshot.performance.tiers.minValueintegerYesminimum 1. maximum 1000000
reward.programSnapshot.performance.tiers.bonusBpsintegerYesminimum 0. maximum 10000

reward.programSnapshot.limits

FieldTypeRequiredDetails
reward.programSnapshot.limits.customerCapCentsintegerNominimum 0. maximum 1000000000000
reward.programSnapshot.limits.partnerCapCentsintegerNominimum 0. maximum 1000000000000

reward.programSnapshot.customTerms[]

Variant 1

FieldTypeRequiredDetails
reward.programSnapshot.customTerms.target"partner"Yes
reward.programSnapshot.customTerms.targetIdstringYes
reward.programSnapshot.customTerms.compensationunionNo
reward.programSnapshot.customTerms.milestoneRewardsobjectNo
reward.programSnapshot.customTerms.customerCapCentsunionNo
reward.programSnapshot.customTerms.partnerCapCentsunionNo

reward.programSnapshot.customTerms.compensation

Variant 1

FieldTypeRequiredDetails
reward.programSnapshot.customTerms.compensation.type"percentage"Yes
reward.programSnapshot.customTerms.compensation.rateBpsintegerYesminimum 1. maximum 10000
reward.programSnapshot.customTerms.compensation.phasesarrayNo

reward.programSnapshot.customTerms.compensation.phases[]

FieldTypeRequiredDetails
reward.programSnapshot.customTerms.compensation.phases.afterMonthsintegerYesminimum 1. maximum 1200
reward.programSnapshot.customTerms.compensation.phases.rateBpsintegerYesminimum 0. maximum 10000

Variant 2

FieldTypeRequiredDetails
reward.programSnapshot.customTerms.compensation.type"fixed"Yes
reward.programSnapshot.customTerms.compensation.amountCentsintegerYesminimum 0. maximum 1000000000000

reward.programSnapshot.customTerms.milestoneRewards

FieldTypeRequiredDetails
reward.programSnapshot.customTerms.milestoneRewards.eachReportobjectNo
reward.programSnapshot.customTerms.milestoneRewards.atCountobjectNo

reward.programSnapshot.customTerms.milestoneRewards.eachReport

FieldTypeRequiredDetails
reward.programSnapshot.customTerms.milestoneRewards.eachReport.compensationunionYes
reward.programSnapshot.customTerms.milestoneRewards.eachReport.limitintegerNominimum 1. maximum 10000

reward.programSnapshot.customTerms.milestoneRewards.eachReport.compensation

reward.programSnapshot.customTerms.milestoneRewards.atCount

FieldTypeRequiredDetails
reward.programSnapshot.customTerms.milestoneRewards.atCount.countintegerYesminimum 1. maximum 10000
reward.programSnapshot.customTerms.milestoneRewards.atCount.amountCentsintegerYesminimum 0. maximum 1000000000000

reward.programSnapshot.customTerms.customerCapCents

Variant 1

Type: integer.

Variant 2

Type: null.

reward.programSnapshot.customTerms.partnerCapCents

Variant 1

Type: integer.

Variant 2

Type: null.

Variant 2

FieldTypeRequiredDetails
reward.programSnapshot.customTerms.target"customer"Yes
reward.programSnapshot.customTerms.targetIdstringYes
reward.programSnapshot.customTerms.compensationunionNo
reward.programSnapshot.customTerms.milestoneRewardsobjectNo
reward.programSnapshot.customTerms.customerCapCentsunionNo

reward.programSnapshot.customTerms.compensation

Variant 1

FieldTypeRequiredDetails
reward.programSnapshot.customTerms.compensation.type"percentage"Yes
reward.programSnapshot.customTerms.compensation.rateBpsintegerYesminimum 1. maximum 10000
reward.programSnapshot.customTerms.compensation.phasesarrayNo

reward.programSnapshot.customTerms.compensation.phases[]

FieldTypeRequiredDetails
reward.programSnapshot.customTerms.compensation.phases.afterMonthsintegerYesminimum 1. maximum 1200
reward.programSnapshot.customTerms.compensation.phases.rateBpsintegerYesminimum 0. maximum 10000

Variant 2

FieldTypeRequiredDetails
reward.programSnapshot.customTerms.compensation.type"fixed"Yes
reward.programSnapshot.customTerms.compensation.amountCentsintegerYesminimum 0. maximum 1000000000000

reward.programSnapshot.customTerms.milestoneRewards

FieldTypeRequiredDetails
reward.programSnapshot.customTerms.milestoneRewards.eachReportobjectNo
reward.programSnapshot.customTerms.milestoneRewards.atCountobjectNo

reward.programSnapshot.customTerms.milestoneRewards.eachReport

FieldTypeRequiredDetails
reward.programSnapshot.customTerms.milestoneRewards.eachReport.compensationunionYes
reward.programSnapshot.customTerms.milestoneRewards.eachReport.limitintegerNominimum 1. maximum 10000

reward.programSnapshot.customTerms.milestoneRewards.eachReport.compensation

reward.programSnapshot.customTerms.milestoneRewards.atCount

FieldTypeRequiredDetails
reward.programSnapshot.customTerms.milestoneRewards.atCount.countintegerYesminimum 1. maximum 10000
reward.programSnapshot.customTerms.milestoneRewards.atCount.amountCentsintegerYesminimum 0. maximum 1000000000000

reward.programSnapshot.customTerms.customerCapCents

Variant 1

Type: integer.

Variant 2

Type: null.

reward.programSnapshot.friendIncentive

FieldTypeRequiredDetails
reward.programSnapshot.friendIncentive.typestringYes

reward.programSnapshot.partnerOffer

FieldTypeRequiredDetails
reward.programSnapshot.partnerOffer.typestringYes

reward.programSnapshot.orderCategories

FieldTypeRequiredDetails
reward.programSnapshot.orderCategories.includearrayNo
reward.programSnapshot.orderCategories.excludearrayNo

reward.explanationParts[]

FieldTypeRequiredDetails
reward.explanationParts.codestringYes
reward.explanationParts.paramsobjectNo

reward.calculation

FieldTypeRequiredDetails
reward.calculation.compensationunionYes
reward.calculation.milestoneRewardsobjectNo
reward.calculation.fixedRefundMode"prorate", "full_refund_only"No
reward.calculation.phaseAfterMonthsintegerNominimum 0
reward.calculation.tierobjectNo
reward.calculation.customTermsobjectNo
reward.calculation.uncappedCentsintegerYesminimum 0. maximum 1000000000000
reward.calculation.customerCapCentsintegerNominimum 0. maximum 1000000000000
reward.calculation.partnerCapCentsintegerNominimum 0. maximum 1000000000000

reward.calculation.compensation

Variant 1

FieldTypeRequiredDetails
reward.calculation.compensation.type"percentage"Yes
reward.calculation.compensation.rateBpsintegerYesminimum 1. maximum 10000
reward.calculation.compensation.phasesarrayNo

reward.calculation.compensation.phases[]

FieldTypeRequiredDetails
reward.calculation.compensation.phases.afterMonthsintegerYesminimum 1. maximum 1200
reward.calculation.compensation.phases.rateBpsintegerYesminimum 0. maximum 10000

Variant 2

FieldTypeRequiredDetails
reward.calculation.compensation.type"fixed"Yes
reward.calculation.compensation.amountCentsintegerYesminimum 0. maximum 1000000000000

reward.calculation.milestoneRewards

FieldTypeRequiredDetails
reward.calculation.milestoneRewards.eachReportobjectNo
reward.calculation.milestoneRewards.atCountobjectNo

reward.calculation.milestoneRewards.eachReport

FieldTypeRequiredDetails
reward.calculation.milestoneRewards.eachReport.compensationunionYes
reward.calculation.milestoneRewards.eachReport.limitintegerNominimum 1. maximum 10000

reward.calculation.milestoneRewards.eachReport.compensation

Variant 1

FieldTypeRequiredDetails
reward.calculation.milestoneRewards.eachReport.compensation.type"percentage"Yes
reward.calculation.milestoneRewards.eachReport.compensation.rateBpsintegerYesminimum 1. maximum 10000
reward.calculation.milestoneRewards.eachReport.compensation.phasesarrayNo

reward.calculation.milestoneRewards.eachReport.compensation.phases[]

Variant 2

FieldTypeRequiredDetails
reward.calculation.milestoneRewards.eachReport.compensation.type"fixed"Yes
reward.calculation.milestoneRewards.eachReport.compensation.amountCentsintegerYesminimum 0. maximum 1000000000000

reward.calculation.milestoneRewards.atCount

FieldTypeRequiredDetails
reward.calculation.milestoneRewards.atCount.countintegerYesminimum 1. maximum 10000
reward.calculation.milestoneRewards.atCount.amountCentsintegerYesminimum 0. maximum 1000000000000

reward.calculation.tier

FieldTypeRequiredDetails
reward.calculation.tier.namestringYes
reward.calculation.tier.minValuenumberYes
reward.calculation.tier.bonusBpsnumberYes
reward.calculation.tier.valuenumberYes

reward.calculation.customTerms

FieldTypeRequiredDetails
reward.calculation.customTerms.target"partner", "customer"Yes
reward.calculation.customTerms.targetIdstringYes

incentiveFlag

FieldTypeRequiredDetails
incentiveFlag.reasonstringYes
incentiveFlag.programIdstringNo
incentiveFlag.reservationIdstringNo
incentiveFlag.maxCentsunionYes
incentiveFlag.reportedCentsintegerYesminimum 0. maximum 1000000000000

incentiveFlag.maxCents

Variant 1

Type: integer.

Variant 2

Type: null.

delivery

FieldTypeRequiredDetails
delivery.idstringYes
delivery.companyIdstringYes
delivery.rewardIdstringYes
delivery.partnerIdstringYes
delivery.status"delivered"Yes
delivery.externalReferencestringNo
delivery.amountCentsintegerYesminimum 0. maximum 1000000000000
delivery.currency"CAD", "USD", "EUR", "GBP"Yes
delivery.rewardType"cash", "credit"Yes
delivery.deliveredAtstringNodate-time
delivery.failureReasonstringNo
delivery.nettedDebtCentsintegerNominimum 0. maximum 1000000000000
delivery.payoutIdstringNo
delivery.reversalOfIdstringNo
delivery.createdAtstringYesdate-time

Variant 1

FieldTypeRequiredDetails
trigger"order"No
orderIdstringYes
milestoneunionNo

Variant 2

FieldTypeRequiredDetails
trigger"milestone"Yes
milestonestringYes
orderIdunionNo

Payload schema

json
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "partnerId": {
          "type": "string",
          "minLength": 1
        },
        "partnerExternalId": {
          "type": "string",
          "minLength": 1
        },
        "rewardId": {
          "type": "string",
          "minLength": 1
        },
        "programId": {
          "type": "string",
          "minLength": 1
        },
        "programVersion": {
          "type": "integer",
          "minimum": 1
        },
        "customerId": {
          "type": "string",
          "minLength": 1
        },
        "currency": {
          "type": "string",
          "enum": [
            "CAD",
            "USD",
            "EUR",
            "GBP"
          ]
        },
        "rewardType": {
          "type": "string",
          "enum": [
            "cash",
            "credit",
            "offer"
          ]
        },
        "deliveryMode": {
          "type": "string",
          "enum": [
            "merchant",
            "grizzlee_wallet"
          ]
        },
        "amountCents": {
          "type": "integer",
          "minimum": 0,
          "maximum": 1000000000000
        },
        "originalCents": {
          "type": "integer",
          "minimum": 0,
          "maximum": 1000000000000
        },
        "adjustedCents": {
          "type": "integer",
          "minimum": -1000000000000,
          "maximum": 1000000000000
        },
        "reversedCents": {
          "type": "integer",
          "minimum": 0,
          "maximum": 1000000000000
        },
        "status": {
          "type": "string",
          "enum": [
            "pending",
            "approved",
            "reversed"
          ]
        },
        "reward": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "minLength": 1
            },
            "companyId": {
              "type": "string",
              "minLength": 1
            },
            "orderId": {
              "type": "string",
              "minLength": 1
            },
            "milestone": {
              "type": "string",
              "minLength": 1
            },
            "milestoneReportReversed": {
              "type": "boolean"
            },
            "reportEventId": {
              "type": "string",
              "minLength": 1
            },
            "valueCents": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000000000
            },
            "milestoneCount": {
              "type": "integer",
              "minimum": 0
            },
            "milestoneRevoked": {
              "type": "boolean"
            },
            "programId": {
              "type": "string",
              "minLength": 1
            },
            "partnerId": {
              "type": "string",
              "minLength": 1
            },
            "customerId": {
              "type": "string",
              "minLength": 1
            },
            "currency": {
              "type": "string",
              "enum": [
                "CAD",
                "USD",
                "EUR",
                "GBP"
              ]
            },
            "rewardType": {
              "type": "string",
              "enum": [
                "cash",
                "credit",
                "offer"
              ]
            },
            "offer": {
              "type": "object",
              "properties": {
                "terms": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "additionalProperties": true
                },
                "expiresAt": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "terms",
                "expiresAt"
              ],
              "additionalProperties": true
            },
            "originalCents": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000000000
            },
            "adjustedCents": {
              "type": "integer",
              "minimum": -1000000000000,
              "maximum": 1000000000000
            },
            "reversedCents": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000000000
            },
            "status": {
              "type": "string",
              "enum": [
                "pending",
                "approved",
                "reversed"
              ]
            },
            "selfReferral": {
              "type": "object",
              "properties": {
                "action": {
                  "type": "string",
                  "enum": [
                    "blocked",
                    "review",
                    "flagged"
                  ]
                },
                "signals": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "customer_id",
                      "email",
                      "phone",
                      "card",
                      "device",
                      "ip"
                    ]
                  }
                }
              },
              "required": [
                "action",
                "signals"
              ],
              "additionalProperties": true
            },
            "fraud": {
              "type": "object",
              "properties": {
                "action": {
                  "type": "string",
                  "enum": [
                    "blocked",
                    "review",
                    "flagged"
                  ]
                },
                "rules": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "rule": {
                        "type": "string",
                        "enum": [
                          "duplicate_accounts",
                          "rapid_repeats",
                          "repeat_customer",
                          "disposable_email"
                        ]
                      },
                      "action": {
                        "type": "string",
                        "enum": [
                          "blocked",
                          "review",
                          "flagged"
                        ]
                      },
                      "signals": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "enum": [
                            "email",
                            "phone",
                            "card",
                            "device",
                            "ip"
                          ]
                        }
                      },
                      "count": {
                        "type": "integer",
                        "exclusiveMinimum": 0
                      }
                    },
                    "required": [
                      "rule",
                      "action",
                      "signals"
                    ],
                    "additionalProperties": true
                  }
                }
              },
              "required": [
                "action",
                "rules"
              ],
              "additionalProperties": true
            },
            "rejectedAt": {
              "type": "string",
              "format": "date-time"
            },
            "rejectionReason": {
              "type": "string"
            },
            "statusBeforeReversal": {
              "type": "string",
              "enum": [
                "pending",
                "approved"
              ]
            },
            "deliveryMode": {
              "type": "string",
              "enum": [
                "merchant",
                "grizzlee_wallet"
              ]
            },
            "createdAt": {
              "type": "string",
              "format": "date-time"
            },
            "availableAt": {
              "type": "string",
              "format": "date-time"
            },
            "programSnapshot": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 100
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "referral",
                    "affiliate",
                    "both"
                  ]
                },
                "tracking": {
                  "type": "object",
                  "properties": {
                    "links": {
                      "type": "boolean",
                      "default": true
                    },
                    "qrCodes": {
                      "type": "boolean",
                      "default": true
                    },
                    "attributionCodes": {
                      "type": "boolean",
                      "default": true
                    },
                    "providerPromoCodes": {
                      "type": "boolean",
                      "default": false
                    }
                  },
                  "additionalProperties": false,
                  "default": {}
                },
                "currency": {
                  "type": "string",
                  "enum": [
                    "CAD",
                    "USD",
                    "EUR",
                    "GBP"
                  ]
                },
                "destinationUrl": {
                  "type": "string",
                  "maxLength": 2000,
                  "format": "uri"
                },
                "display": {
                  "type": "object",
                  "properties": {
                    "en": {
                      "type": "object",
                      "properties": {
                        "publicName": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 100
                        },
                        "headline": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 120
                        },
                        "milestoneLabel": {
                          "type": "object",
                          "properties": {
                            "one": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 40
                            },
                            "other": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 40
                            }
                          },
                          "required": [
                            "one",
                            "other"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "additionalProperties": false
                    },
                    "fr-CA": {
                      "type": "object",
                      "properties": {
                        "publicName": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 100
                        },
                        "headline": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 120
                        },
                        "milestoneLabel": {
                          "type": "object",
                          "properties": {
                            "one": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 40
                            },
                            "other": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 40
                            }
                          },
                          "required": [
                            "one",
                            "other"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "additionalProperties": false
                    },
                    "hy": {
                      "type": "object",
                      "properties": {
                        "publicName": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 100
                        },
                        "headline": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 120
                        },
                        "milestoneLabel": {
                          "type": "object",
                          "properties": {
                            "one": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 40
                            },
                            "other": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 40
                            }
                          },
                          "required": [
                            "one",
                            "other"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "additionalProperties": false
                    },
                    "ru": {
                      "type": "object",
                      "properties": {
                        "publicName": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 100
                        },
                        "headline": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 120
                        },
                        "milestoneLabel": {
                          "type": "object",
                          "properties": {
                            "one": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 40
                            },
                            "other": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 40
                            }
                          },
                          "required": [
                            "one",
                            "other"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                },
                "trigger": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "const": "order"
                        }
                      },
                      "required": [
                        "type"
                      ],
                      "additionalProperties": true
                    },
                    {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "const": "milestone"
                        },
                        "milestone": {
                          "type": "string",
                          "pattern": "^[a-z][a-z0-9_]{0,79}$"
                        }
                      },
                      "required": [
                        "type",
                        "milestone"
                      ],
                      "additionalProperties": true
                    }
                  ]
                },
                "compensation": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "const": "percentage"
                        },
                        "rateBps": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 10000
                        },
                        "phases": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "afterMonths": {
                                "type": "integer",
                                "minimum": 1,
                                "maximum": 1200
                              },
                              "rateBps": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 10000
                              }
                            },
                            "required": [
                              "afterMonths",
                              "rateBps"
                            ],
                            "additionalProperties": false
                          },
                          "minItems": 1,
                          "maxItems": 12
                        }
                      },
                      "required": [
                        "type",
                        "rateBps"
                      ],
                      "additionalProperties": true
                    },
                    {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "const": "fixed"
                        },
                        "amountCents": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 1000000000000
                        }
                      },
                      "required": [
                        "type",
                        "amountCents"
                      ],
                      "additionalProperties": true
                    }
                  ]
                },
                "milestoneRewards": {
                  "type": "object",
                  "properties": {
                    "eachReport": {
                      "type": "object",
                      "properties": {
                        "compensation": {
                          "anyOf": [
                            {
                              "type": "object",
                              "properties": {
                                "type": {
                                  "type": "string",
                                  "const": "percentage"
                                },
                                "rateBps": {
                                  "type": "integer",
                                  "minimum": 1,
                                  "maximum": 10000
                                },
                                "phases": {
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "afterMonths": {
                                        "type": "integer",
                                        "minimum": 1,
                                        "maximum": 1200
                                      },
                                      "rateBps": {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 10000
                                      }
                                    },
                                    "required": [
                                      "afterMonths",
                                      "rateBps"
                                    ],
                                    "additionalProperties": false
                                  },
                                  "minItems": 1,
                                  "maxItems": 12
                                }
                              },
                              "required": [
                                "type",
                                "rateBps"
                              ],
                              "additionalProperties": true
                            },
                            {
                              "type": "object",
                              "properties": {
                                "type": {
                                  "type": "string",
                                  "const": "fixed"
                                },
                                "amountCents": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 1000000000000
                                }
                              },
                              "required": [
                                "type",
                                "amountCents"
                              ],
                              "additionalProperties": true
                            }
                          ]
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 10000
                        }
                      },
                      "required": [
                        "compensation"
                      ],
                      "additionalProperties": true
                    },
                    "atCount": {
                      "type": "object",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 10000
                        },
                        "amountCents": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 1000000000000
                        }
                      },
                      "required": [
                        "count",
                        "amountCents"
                      ],
                      "additionalProperties": true
                    }
                  },
                  "additionalProperties": true
                },
                "fixedRefundMode": {
                  "type": "string",
                  "enum": [
                    "prorate",
                    "full_refund_only"
                  ],
                  "default": "prorate"
                },
                "duration": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "const": "only_order"
                        }
                      },
                      "required": [
                        "type"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "const": "first_order"
                        }
                      },
                      "required": [
                        "type"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "const": "first_n_orders"
                        },
                        "count": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 10000
                        }
                      },
                      "required": [
                        "type",
                        "count"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "const": "days"
                        },
                        "days": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 36500
                        }
                      },
                      "required": [
                        "type",
                        "days"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "const": "months"
                        },
                        "months": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 1200
                        }
                      },
                      "required": [
                        "type",
                        "months"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "const": "lifetime"
                        }
                      },
                      "required": [
                        "type"
                      ],
                      "additionalProperties": false
                    }
                  ]
                },
                "rewardType": {
                  "type": "string",
                  "enum": [
                    "cash",
                    "credit",
                    "offer"
                  ]
                },
                "delivery": {
                  "type": "object",
                  "properties": {
                    "cash": {
                      "type": "string",
                      "enum": [
                        "grizzlee_wallet",
                        "merchant"
                      ],
                      "default": "grizzlee_wallet"
                    },
                    "credit": {
                      "type": "string",
                      "enum": [
                        "grizzlee_wallet",
                        "merchant"
                      ],
                      "default": "grizzlee_wallet"
                    }
                  },
                  "additionalProperties": false,
                  "default": {}
                },
                "attributionWindowDays": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 365
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reviewRewards": {
                  "type": "boolean"
                },
                "fraudChecks": {
                  "type": "object",
                  "properties": {
                    "selfReferral": {
                      "type": "object",
                      "properties": {
                        "action": {
                          "type": "string",
                          "enum": [
                            "block",
                            "review",
                            "flag",
                            "off"
                          ],
                          "default": "block"
                        }
                      },
                      "additionalProperties": false,
                      "default": {}
                    },
                    "duplicateAccounts": {
                      "type": "object",
                      "properties": {
                        "action": {
                          "type": "string",
                          "enum": [
                            "block",
                            "review",
                            "flag",
                            "off"
                          ],
                          "default": "flag"
                        },
                        "accounts": {
                          "type": "integer",
                          "minimum": 2,
                          "maximum": 200,
                          "default": 3
                        },
                        "windowDays": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 365,
                          "default": 30
                        },
                        "ipAccounts": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 2,
                              "maximum": 200
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "default": null
                        }
                      },
                      "additionalProperties": false,
                      "default": {}
                    },
                    "rapidRepeats": {
                      "type": "object",
                      "properties": {
                        "action": {
                          "type": "string",
                          "enum": [
                            "block",
                            "review",
                            "flag",
                            "off"
                          ],
                          "default": "flag"
                        },
                        "referrals": {
                          "type": "integer",
                          "minimum": 2,
                          "maximum": 200,
                          "default": 3
                        },
                        "windowMinutes": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 10080,
                          "default": 60
                        },
                        "ipReferrals": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 2,
                              "maximum": 200
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "default": null
                        }
                      },
                      "additionalProperties": false,
                      "default": {}
                    },
                    "repeatCustomer": {
                      "type": "object",
                      "properties": {
                        "action": {
                          "type": "string",
                          "enum": [
                            "block",
                            "review",
                            "flag",
                            "off"
                          ],
                          "default": "flag"
                        }
                      },
                      "additionalProperties": false,
                      "default": {}
                    },
                    "disposableEmail": {
                      "type": "object",
                      "properties": {
                        "action": {
                          "type": "string",
                          "enum": [
                            "review",
                            "flag",
                            "off"
                          ],
                          "default": "flag"
                        }
                      },
                      "additionalProperties": false,
                      "default": {}
                    }
                  },
                  "additionalProperties": false
                },
                "active": {
                  "type": "boolean"
                },
                "performance": {
                  "type": "object",
                  "properties": {
                    "metric": {
                      "type": "string",
                      "enum": [
                        "new_customers",
                        "orders"
                      ]
                    },
                    "windowDays": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 3650
                    },
                    "tiers": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 40
                          },
                          "minValue": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 1000000
                          },
                          "bonusBps": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 10000
                          }
                        },
                        "required": [
                          "name",
                          "minValue",
                          "bonusBps"
                        ],
                        "additionalProperties": false
                      },
                      "minItems": 1,
                      "maxItems": 10
                    }
                  },
                  "required": [
                    "metric",
                    "tiers"
                  ],
                  "additionalProperties": false
                },
                "limits": {
                  "type": "object",
                  "properties": {
                    "customerCapCents": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 1000000000000
                    },
                    "partnerCapCents": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 1000000000000
                    }
                  },
                  "additionalProperties": false
                },
                "customTerms": {
                  "type": "array",
                  "items": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "target": {
                            "type": "string",
                            "const": "partner"
                          },
                          "targetId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 120
                          },
                          "compensation": {
                            "anyOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "type": {
                                    "type": "string",
                                    "const": "percentage"
                                  },
                                  "rateBps": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 10000
                                  },
                                  "phases": {
                                    "type": "array",
                                    "items": {
                                      "type": "object",
                                      "properties": {
                                        "afterMonths": {
                                          "type": "integer",
                                          "minimum": 1,
                                          "maximum": 1200
                                        },
                                        "rateBps": {
                                          "type": "integer",
                                          "minimum": 0,
                                          "maximum": 10000
                                        }
                                      },
                                      "required": [
                                        "afterMonths",
                                        "rateBps"
                                      ],
                                      "additionalProperties": false
                                    },
                                    "minItems": 1,
                                    "maxItems": 12
                                  }
                                },
                                "required": [
                                  "type",
                                  "rateBps"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "type": {
                                    "type": "string",
                                    "const": "fixed"
                                  },
                                  "amountCents": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 1000000000000
                                  }
                                },
                                "required": [
                                  "type",
                                  "amountCents"
                                ],
                                "additionalProperties": false
                              }
                            ]
                          },
                          "milestoneRewards": {
                            "type": "object",
                            "properties": {
                              "eachReport": {
                                "type": "object",
                                "properties": {
                                  "compensation": {
                                    "anyOf": [
                                      {
                                        "type": "object",
                                        "properties": {
                                          "type": {
                                            "type": "string",
                                            "const": "fixed"
                                          },
                                          "amountCents": {
                                            "type": "integer",
                                            "minimum": 0,
                                            "maximum": 1000000000000
                                          }
                                        },
                                        "required": [
                                          "type",
                                          "amountCents"
                                        ],
                                        "additionalProperties": false
                                      },
                                      {
                                        "type": "object",
                                        "properties": {
                                          "type": {
                                            "type": "string",
                                            "const": "percentage"
                                          },
                                          "rateBps": {
                                            "type": "integer",
                                            "minimum": 1,
                                            "maximum": 10000
                                          }
                                        },
                                        "required": [
                                          "type",
                                          "rateBps"
                                        ],
                                        "additionalProperties": false
                                      }
                                    ]
                                  },
                                  "limit": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 10000
                                  }
                                },
                                "required": [
                                  "compensation"
                                ],
                                "additionalProperties": false
                              },
                              "atCount": {
                                "type": "object",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 10000
                                  },
                                  "amountCents": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 1000000000000
                                  }
                                },
                                "required": [
                                  "count",
                                  "amountCents"
                                ],
                                "additionalProperties": false
                              }
                            },
                            "additionalProperties": false
                          },
                          "customerCapCents": {
                            "anyOf": [
                              {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 1000000000000
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "partnerCapCents": {
                            "anyOf": [
                              {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 1000000000000
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "target",
                          "targetId"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "target": {
                            "type": "string",
                            "const": "customer"
                          },
                          "targetId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 120
                          },
                          "compensation": {
                            "anyOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "type": {
                                    "type": "string",
                                    "const": "percentage"
                                  },
                                  "rateBps": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 10000
                                  },
                                  "phases": {
                                    "type": "array",
                                    "items": {
                                      "type": "object",
                                      "properties": {
                                        "afterMonths": {
                                          "type": "integer",
                                          "minimum": 1,
                                          "maximum": 1200
                                        },
                                        "rateBps": {
                                          "type": "integer",
                                          "minimum": 0,
                                          "maximum": 10000
                                        }
                                      },
                                      "required": [
                                        "afterMonths",
                                        "rateBps"
                                      ],
                                      "additionalProperties": false
                                    },
                                    "minItems": 1,
                                    "maxItems": 12
                                  }
                                },
                                "required": [
                                  "type",
                                  "rateBps"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "type": {
                                    "type": "string",
                                    "const": "fixed"
                                  },
                                  "amountCents": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 1000000000000
                                  }
                                },
                                "required": [
                                  "type",
                                  "amountCents"
                                ],
                                "additionalProperties": false
                              }
                            ]
                          },
                          "milestoneRewards": {
                            "type": "object",
                            "properties": {
                              "eachReport": {
                                "type": "object",
                                "properties": {
                                  "compensation": {
                                    "anyOf": [
                                      {
                                        "type": "object",
                                        "properties": {
                                          "type": {
                                            "type": "string",
                                            "const": "fixed"
                                          },
                                          "amountCents": {
                                            "type": "integer",
                                            "minimum": 0,
                                            "maximum": 1000000000000
                                          }
                                        },
                                        "required": [
                                          "type",
                                          "amountCents"
                                        ],
                                        "additionalProperties": false
                                      },
                                      {
                                        "type": "object",
                                        "properties": {
                                          "type": {
                                            "type": "string",
                                            "const": "percentage"
                                          },
                                          "rateBps": {
                                            "type": "integer",
                                            "minimum": 1,
                                            "maximum": 10000
                                          }
                                        },
                                        "required": [
                                          "type",
                                          "rateBps"
                                        ],
                                        "additionalProperties": false
                                      }
                                    ]
                                  },
                                  "limit": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 10000
                                  }
                                },
                                "required": [
                                  "compensation"
                                ],
                                "additionalProperties": false
                              },
                              "atCount": {
                                "type": "object",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 10000
                                  },
                                  "amountCents": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 1000000000000
                                  }
                                },
                                "required": [
                                  "count",
                                  "amountCents"
                                ],
                                "additionalProperties": false
                              }
                            },
                            "additionalProperties": false
                          },
                          "customerCapCents": {
                            "anyOf": [
                              {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 1000000000000
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "target",
                          "targetId"
                        ],
                        "additionalProperties": false
                      }
                    ]
                  },
                  "minItems": 1,
                  "maxItems": 100
                },
                "friendIncentive": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "additionalProperties": true
                },
                "partnerOffer": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "additionalProperties": true
                },
                "orderCategories": {
                  "type": "object",
                  "properties": {
                    "include": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "exclude": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "additionalProperties": true
                }
              },
              "required": [
                "name",
                "kind",
                "currency",
                "rewardType",
                "attributionWindowDays",
                "active"
              ],
              "additionalProperties": true
            },
            "programVersion": {
              "type": "integer",
              "minimum": 1
            },
            "historicalBasis": {
              "type": "string",
              "const": "total"
            },
            "basisCents": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000000000
            },
            "explanation": {
              "type": "string"
            },
            "explanationParts": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string",
                    "minLength": 1
                  },
                  "params": {
                    "type": "object",
                    "additionalProperties": {}
                  }
                },
                "required": [
                  "code"
                ],
                "additionalProperties": true
              }
            },
            "calculation": {
              "type": "object",
              "properties": {
                "compensation": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "const": "percentage"
                        },
                        "rateBps": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 10000
                        },
                        "phases": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "afterMonths": {
                                "type": "integer",
                                "minimum": 1,
                                "maximum": 1200
                              },
                              "rateBps": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 10000
                              }
                            },
                            "required": [
                              "afterMonths",
                              "rateBps"
                            ],
                            "additionalProperties": false
                          },
                          "minItems": 1,
                          "maxItems": 12
                        }
                      },
                      "required": [
                        "type",
                        "rateBps"
                      ],
                      "additionalProperties": true
                    },
                    {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "const": "fixed"
                        },
                        "amountCents": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 1000000000000
                        }
                      },
                      "required": [
                        "type",
                        "amountCents"
                      ],
                      "additionalProperties": true
                    }
                  ]
                },
                "milestoneRewards": {
                  "type": "object",
                  "properties": {
                    "eachReport": {
                      "type": "object",
                      "properties": {
                        "compensation": {
                          "anyOf": [
                            {
                              "type": "object",
                              "properties": {
                                "type": {
                                  "type": "string",
                                  "const": "percentage"
                                },
                                "rateBps": {
                                  "type": "integer",
                                  "minimum": 1,
                                  "maximum": 10000
                                },
                                "phases": {
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "afterMonths": {
                                        "type": "integer",
                                        "minimum": 1,
                                        "maximum": 1200
                                      },
                                      "rateBps": {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 10000
                                      }
                                    },
                                    "required": [
                                      "afterMonths",
                                      "rateBps"
                                    ],
                                    "additionalProperties": false
                                  },
                                  "minItems": 1,
                                  "maxItems": 12
                                }
                              },
                              "required": [
                                "type",
                                "rateBps"
                              ],
                              "additionalProperties": true
                            },
                            {
                              "type": "object",
                              "properties": {
                                "type": {
                                  "type": "string",
                                  "const": "fixed"
                                },
                                "amountCents": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 1000000000000
                                }
                              },
                              "required": [
                                "type",
                                "amountCents"
                              ],
                              "additionalProperties": true
                            }
                          ]
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 10000
                        }
                      },
                      "required": [
                        "compensation"
                      ],
                      "additionalProperties": true
                    },
                    "atCount": {
                      "type": "object",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 10000
                        },
                        "amountCents": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 1000000000000
                        }
                      },
                      "required": [
                        "count",
                        "amountCents"
                      ],
                      "additionalProperties": true
                    }
                  },
                  "additionalProperties": true
                },
                "fixedRefundMode": {
                  "type": "string",
                  "enum": [
                    "prorate",
                    "full_refund_only"
                  ]
                },
                "phaseAfterMonths": {
                  "type": "integer",
                  "minimum": 0
                },
                "tier": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "minValue": {
                      "type": "number"
                    },
                    "bonusBps": {
                      "type": "number"
                    },
                    "value": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "name",
                    "minValue",
                    "bonusBps",
                    "value"
                  ],
                  "additionalProperties": true
                },
                "customTerms": {
                  "type": "object",
                  "properties": {
                    "target": {
                      "type": "string",
                      "enum": [
                        "partner",
                        "customer"
                      ]
                    },
                    "targetId": {
                      "type": "string",
                      "minLength": 1
                    }
                  },
                  "required": [
                    "target",
                    "targetId"
                  ],
                  "additionalProperties": true
                },
                "uncappedCents": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 1000000000000
                },
                "customerCapCents": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 1000000000000
                },
                "partnerCapCents": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 1000000000000
                }
              },
              "required": [
                "compensation",
                "uncappedCents"
              ],
              "additionalProperties": true
            }
          },
          "required": [
            "id",
            "companyId",
            "programId",
            "partnerId",
            "customerId",
            "currency",
            "rewardType",
            "originalCents",
            "reversedCents",
            "status",
            "createdAt",
            "availableAt",
            "programSnapshot",
            "explanation"
          ],
          "additionalProperties": true
        },
        "incentiveAppliedCents": {
          "type": "integer",
          "minimum": 0,
          "maximum": 1000000000000
        },
        "incentiveFlag": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "minLength": 1
            },
            "programId": {
              "type": "string",
              "minLength": 1
            },
            "reservationId": {
              "type": "string",
              "minLength": 1
            },
            "maxCents": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 1000000000000
                },
                {
                  "type": "null"
                }
              ]
            },
            "reportedCents": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000000000
            }
          },
          "required": [
            "reason",
            "maxCents",
            "reportedCents"
          ],
          "additionalProperties": true
        },
        "delivery": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "minLength": 1
            },
            "companyId": {
              "type": "string",
              "minLength": 1
            },
            "rewardId": {
              "type": "string",
              "minLength": 1
            },
            "partnerId": {
              "type": "string",
              "minLength": 1
            },
            "status": {
              "type": "string",
              "const": "delivered"
            },
            "externalReference": {
              "type": "string",
              "minLength": 1
            },
            "amountCents": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000000000
            },
            "currency": {
              "type": "string",
              "enum": [
                "CAD",
                "USD",
                "EUR",
                "GBP"
              ]
            },
            "rewardType": {
              "type": "string",
              "enum": [
                "cash",
                "credit"
              ]
            },
            "deliveredAt": {
              "type": "string",
              "format": "date-time"
            },
            "failureReason": {
              "type": "string"
            },
            "nettedDebtCents": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000000000
            },
            "payoutId": {
              "type": "string",
              "minLength": 1
            },
            "reversalOfId": {
              "type": "string",
              "minLength": 1
            },
            "createdAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "required": [
            "id",
            "companyId",
            "rewardId",
            "partnerId",
            "status",
            "amountCents",
            "currency",
            "rewardType",
            "createdAt"
          ],
          "additionalProperties": true
        }
      },
      "required": [
        "partnerId",
        "partnerExternalId",
        "rewardId",
        "programId",
        "customerId",
        "currency",
        "rewardType",
        "deliveryMode",
        "amountCents",
        "originalCents",
        "reversedCents",
        "status",
        "reward",
        "delivery"
      ],
      "additionalProperties": true
    },
    {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "trigger": {
              "type": "string",
              "const": "order"
            },
            "orderId": {
              "type": "string",
              "minLength": 1
            },
            "milestone": {
              "not": {}
            }
          },
          "required": [
            "orderId"
          ],
          "additionalProperties": true
        },
        {
          "type": "object",
          "properties": {
            "trigger": {
              "type": "string",
              "const": "milestone"
            },
            "milestone": {
              "type": "string",
              "minLength": 1
            },
            "orderId": {
              "not": {}
            }
          },
          "required": [
            "trigger",
            "milestone"
          ],
          "additionalProperties": true
        }
      ]
    }
  ]
}

Handle delivery

Verify the signature over the raw body before parsing JSON. Check that the body ID matches Grizzlee-Event-Id. Process each ID once, since delivery can repeat.