Skip to content
Developer docs
⌘ K
Dashboard ↗

Webhook events

reward.approved

Receive this event when Grizzlee records reward.approved.

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.approved",
  "data": {
    "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",
    "deliveryMode": "merchant",
    "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",
    "partnerExternalId": "merchant-partner-001",
    "rewardId": "reward-example",
    "amountCents": 500,
    "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"
    },
    "trigger": "order"
  },
  "createdAt": "2026-10-11T12:00:00.000Z"
}

Payload fields

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

offer

FieldTypeRequiredDetails
offer.termsobjectYes
offer.expiresAtstring,nullYes

offer.terms

FieldTypeRequiredDetails
offer.terms.typestringYes

selfReferral

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

fraud

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

fraud.rules[]

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

programSnapshot

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

programSnapshot.tracking

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

programSnapshot.display

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

programSnapshot.display.en

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

programSnapshot.display.en.milestoneLabel

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

programSnapshot.display.fr-CA

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

programSnapshot.display.fr-CA.milestoneLabel

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

programSnapshot.display.hy

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

programSnapshot.display.hy.milestoneLabel

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

programSnapshot.display.ru

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

programSnapshot.display.ru.milestoneLabel

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

programSnapshot.trigger

Variant 1

FieldTypeRequiredDetails
programSnapshot.trigger.type"order"Yes

Variant 2

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

programSnapshot.compensation

Variant 1

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

programSnapshot.compensation.phases[]

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

Variant 2

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

programSnapshot.milestoneRewards

FieldTypeRequiredDetails
programSnapshot.milestoneRewards.eachReportobjectNo
programSnapshot.milestoneRewards.atCountobjectNo

programSnapshot.milestoneRewards.eachReport

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

programSnapshot.milestoneRewards.eachReport.compensation

Variant 1

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

programSnapshot.milestoneRewards.eachReport.compensation.phases[]

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

Variant 2

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

programSnapshot.milestoneRewards.atCount

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

programSnapshot.duration

Variant 1

FieldTypeRequiredDetails
programSnapshot.duration.type"only_order"Yes

Variant 2

FieldTypeRequiredDetails
programSnapshot.duration.type"first_order"Yes

Variant 3

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

Variant 4

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

Variant 5

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

Variant 6

FieldTypeRequiredDetails
programSnapshot.duration.type"lifetime"Yes

programSnapshot.delivery

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

programSnapshot.attributionWindowDays

Variant 1

Type: integer.

Variant 2

Type: null.

programSnapshot.fraudChecks

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

programSnapshot.fraudChecks.selfReferral

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

programSnapshot.fraudChecks.duplicateAccounts

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

programSnapshot.fraudChecks.duplicateAccounts.ipAccounts

Variant 1

Type: integer.

Variant 2

Type: null.

programSnapshot.fraudChecks.rapidRepeats

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

programSnapshot.fraudChecks.rapidRepeats.ipReferrals

Variant 1

Type: integer.

Variant 2

Type: null.

programSnapshot.fraudChecks.repeatCustomer

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

programSnapshot.fraudChecks.disposableEmail

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

programSnapshot.performance

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

programSnapshot.performance.tiers[]

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

programSnapshot.limits

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

programSnapshot.customTerms[]

Variant 1

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

programSnapshot.customTerms.compensation

Variant 1

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

programSnapshot.customTerms.compensation.phases[]

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

Variant 2

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

programSnapshot.customTerms.milestoneRewards

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

programSnapshot.customTerms.milestoneRewards.eachReport

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

programSnapshot.customTerms.milestoneRewards.eachReport.compensation

Variant 1

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

Variant 2

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

programSnapshot.customTerms.milestoneRewards.atCount

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

programSnapshot.customTerms.customerCapCents

Variant 1

Type: integer.

Variant 2

Type: null.

programSnapshot.customTerms.partnerCapCents

Variant 1

Type: integer.

Variant 2

Type: null.

Variant 2

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

programSnapshot.customTerms.compensation

Variant 1

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

programSnapshot.customTerms.compensation.phases[]

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

Variant 2

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

programSnapshot.customTerms.milestoneRewards

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

programSnapshot.customTerms.milestoneRewards.eachReport

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

programSnapshot.customTerms.milestoneRewards.eachReport.compensation

Variant 1

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

Variant 2

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

programSnapshot.customTerms.milestoneRewards.atCount

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

programSnapshot.customTerms.customerCapCents

Variant 1

Type: integer.

Variant 2

Type: null.

programSnapshot.friendIncentive

FieldTypeRequiredDetails
programSnapshot.friendIncentive.typestringYes

programSnapshot.partnerOffer

FieldTypeRequiredDetails
programSnapshot.partnerOffer.typestringYes

programSnapshot.orderCategories

FieldTypeRequiredDetails
programSnapshot.orderCategories.includearrayNo
programSnapshot.orderCategories.excludearrayNo

explanationParts[]

FieldTypeRequiredDetails
explanationParts.codestringYes
explanationParts.paramsobjectNo

calculation

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

calculation.compensation

Variant 1

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

calculation.compensation.phases[]

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

Variant 2

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

calculation.milestoneRewards

FieldTypeRequiredDetails
calculation.milestoneRewards.eachReportobjectNo
calculation.milestoneRewards.atCountobjectNo

calculation.milestoneRewards.eachReport

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

calculation.milestoneRewards.eachReport.compensation

Variant 1

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

calculation.milestoneRewards.eachReport.compensation.phases[]

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

Variant 2

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

calculation.milestoneRewards.atCount

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

calculation.tier

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

calculation.customTerms

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

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.

Variant 1

FieldTypeRequiredDetails
trigger"order"No
orderIdstringYes
milestoneunionNo

Variant 2

FieldTypeRequiredDetails
trigger"milestone"Yes
milestonestringYes
orderIdunionNo

Payload schema

json
{
  "allOf": [
    {
      "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
        },
        "partnerExternalId": {
          "type": "string",
          "minLength": 1
        },
        "rewardId": {
          "type": "string",
          "minLength": 1
        },
        "amountCents": {
          "type": "integer",
          "minimum": 0,
          "maximum": 1000000000000
        },
        "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
        }
      },
      "required": [
        "id",
        "companyId",
        "programId",
        "partnerId",
        "customerId",
        "currency",
        "rewardType",
        "originalCents",
        "reversedCents",
        "status",
        "deliveryMode",
        "createdAt",
        "availableAt",
        "programSnapshot",
        "explanation",
        "partnerExternalId",
        "rewardId",
        "amountCents",
        "reward"
      ],
      "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.