Skip to content
Developer docs
⌘ K
Dashboard ↗

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

FieldTypeRequiredDetails
type"order.completed"Yes
eventIdstringYes
orderIdstringYes
customerIdstringYes
customerDisplayNamestringNo
customerEmailstringNoemail
newCustomerbooleanNo
customerOrderNumberintegerNominimum 1. maximum 1000000
currency"CAD", "USD", "EUR", "GBP"Yes
totalCentsintegerNominimum 0. maximum 1000000000000
commissionableCentsintegerYesminimum 0. maximum 1000000000000
incentiveAppliedCentsintegerNominimum 0. maximum 1000000000000
categoriesarrayNo
occurredAtstringYesdate-time
partnersarrayYes
partnerIdstringNo
partnerExternalIdstringNo
referralSelectionobjectNo
reportedCustomerOrderNumberintegerNominimum 1
incentiveFlagobjectNo

partners[]

FieldTypeRequiredDetails
partners.partnerIdstringYes
partners.partnerExternalIdstringYes

referralSelection

FieldTypeRequiredDetails
referralSelection.winnerunionYes
referralSelection.skippedarrayYes

referralSelection.winner

Variant 1

FieldTypeRequiredDetails
referralSelection.winner.indexintegerNominimum 0
referralSelection.winner.type"receipt", "code"No
referralSelection.winner.providerPromoCodeIdstringNo
referralSelection.winner.programIdstringYes
referralSelection.winner.partnerIdstringYes
referralSelection.winner.occurredAtstringYesdate-time

Variant 2

Type: null.

referralSelection.skipped[]

FieldTypeRequiredDetails
referralSelection.skipped.indexintegerYesminimum 0
referralSelection.skipped.reason"expired", "invalid", "self_referral", "wrong_program", "program_inactive", "partner_inactive", "fraud", "customer_already_referred", "older"Yes

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.

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.