Webhook events
order.completed
Receive this event when Grizzlee records order.completed.
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": "order.completed",
"data": {
"type": "order.completed",
"eventId": "payment-example",
"orderId": "order-example",
"customerId": "customer-example",
"currency": "CAD",
"totalCents": 10000,
"commissionableCents": 10000,
"occurredAt": "2026-10-11T12:00:00.000Z",
"partners": [
{
"partnerId": "partner-example",
"partnerExternalId": "merchant-partner-001"
}
]
},
"createdAt": "2026-10-11T12:00:00.000Z"
}Payload fields
| Field | Type | Required | Details |
|---|---|---|---|
type | "order.completed" | Yes | |
eventId | string | Yes | |
orderId | string | Yes | |
customerId | string | Yes | |
customerDisplayName | string | No | |
customerEmail | string | No | |
newCustomer | boolean | No | |
customerOrderNumber | integer | No | minimum 1. maximum 1000000 |
currency | "CAD", "USD", "EUR", "GBP" | Yes | |
totalCents | integer | No | minimum 0. maximum 1000000000000 |
commissionableCents | integer | Yes | minimum 0. maximum 1000000000000 |
incentiveAppliedCents | integer | No | minimum 0. maximum 1000000000000 |
categories | array | No | |
occurredAt | string | Yes | date-time |
partners | array | Yes | |
partnerId | string | No | |
partnerExternalId | string | No | |
referralSelection | object | No | |
reportedCustomerOrderNumber | integer | No | minimum 1 |
incentiveFlag | object | No |
partners[]
| Field | Type | Required | Details |
|---|---|---|---|
partners.partnerId | string | Yes | |
partners.partnerExternalId | string | Yes |
referralSelection
| Field | Type | Required | Details |
|---|---|---|---|
referralSelection.winner | union | Yes | |
referralSelection.skipped | array | Yes |
referralSelection.winner
Variant 1
| Field | Type | Required | Details |
|---|---|---|---|
referralSelection.winner.index | integer | No | minimum 0 |
referralSelection.winner.type | "receipt", "code" | No | |
referralSelection.winner.providerPromoCodeId | string | No | |
referralSelection.winner.programId | string | Yes | |
referralSelection.winner.partnerId | string | Yes | |
referralSelection.winner.occurredAt | string | Yes | date-time |
Variant 2
Type: null.
referralSelection.skipped[]
| Field | Type | Required | Details |
|---|---|---|---|
referralSelection.skipped.index | integer | Yes | minimum 0 |
referralSelection.skipped.reason | "expired", "invalid", "self_referral", "wrong_program", "program_inactive", "partner_inactive", "fraud", "customer_already_referred", "older" | Yes |
incentiveFlag
| Field | Type | Required | Details |
|---|---|---|---|
incentiveFlag.reason | string | Yes | |
incentiveFlag.programId | string | No | |
incentiveFlag.reservationId | string | No | |
incentiveFlag.maxCents | union | Yes | |
incentiveFlag.reportedCents | integer | Yes | minimum 0. maximum 1000000000000 |
incentiveFlag.maxCents
Variant 1
Type: integer.
Variant 2
Type: null.
Payload schema
json
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "order.completed"
},
"eventId": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"orderId": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"customerId": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"customerDisplayName": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"customerEmail": {
"type": "string",
"format": "email",
"maxLength": 254
},
"newCustomer": {
"type": "boolean"
},
"customerOrderNumber": {
"type": "integer",
"minimum": 1,
"maximum": 1000000
},
"currency": {
"type": "string",
"enum": [
"CAD",
"USD",
"EUR",
"GBP"
]
},
"totalCents": {
"type": "integer",
"minimum": 0,
"maximum": 1000000000000
},
"commissionableCents": {
"type": "integer",
"minimum": 0,
"maximum": 1000000000000
},
"incentiveAppliedCents": {
"type": "integer",
"minimum": 0,
"maximum": 1000000000000
},
"categories": {
"type": "array",
"items": {
"type": "string"
}
},
"occurredAt": {
"type": "string",
"format": "date-time"
},
"partners": {
"type": "array",
"items": {
"type": "object",
"properties": {
"partnerId": {
"type": "string",
"minLength": 1
},
"partnerExternalId": {
"type": "string",
"minLength": 1
}
},
"required": [
"partnerId",
"partnerExternalId"
],
"additionalProperties": true
}
},
"partnerId": {
"type": "string",
"minLength": 1
},
"partnerExternalId": {
"type": "string",
"minLength": 1
},
"referralSelection": {
"type": "object",
"properties": {
"winner": {
"anyOf": [
{
"type": "object",
"properties": {
"index": {
"type": "integer",
"minimum": 0
},
"type": {
"type": "string",
"enum": [
"receipt",
"code"
]
},
"providerPromoCodeId": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"programId": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"partnerId": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"occurredAt": {
"type": "string",
"format": "date-time"
}
},
"required": [
"programId",
"partnerId",
"occurredAt"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"skipped": {
"type": "array",
"items": {
"type": "object",
"properties": {
"index": {
"type": "integer",
"minimum": 0
},
"reason": {
"type": "string",
"enum": [
"expired",
"invalid",
"self_referral",
"wrong_program",
"program_inactive",
"partner_inactive",
"fraud",
"customer_already_referred",
"older"
]
}
},
"required": [
"index",
"reason"
],
"additionalProperties": false
}
}
},
"required": [
"winner",
"skipped"
],
"additionalProperties": false
},
"reportedCustomerOrderNumber": {
"type": "integer",
"minimum": 1
},
"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": [
"type",
"eventId",
"orderId",
"customerId",
"currency",
"commissionableCents",
"occurredAt",
"partners"
],
"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.