Revel Webhooks

Event-driven webhook channel that delivers POS events (order finalized, customer created/updated, stock changes, menu updates, timesheet changes, integration changes, reward cards, and ping) to partner HTTPS endpoints via POST. Payloads are signed with an HMAC-SHA1 X-Revel-Signature header.

AsyncAPI Specification

revel-webhooks-asyncapi.yml Raw ↑
asyncapi: 2.6.0
info:
  title: Revel Webhooks
  version: '2025.3.0'
  description: >-
    Revel Systems delivers event notifications to partner-registered HTTPS endpoints via webhooks.
    Each event type is delivered by HTTP POST with a JSON body. Requests carry an HMAC-SHA1 signature
    in the `X-Revel-Signature` header (computed from the request body and a shared secret) along with
    instance, event-type, and message identification headers. Endpoints must respond with a 2XX status
    within 10 seconds; failed deliveries are retried with exponential backoff over roughly 36 minutes.
  contact:
    name: Revel Systems Developer Support
    url: https://developer.revelsystems.com/revelsystems/docs/webhooks
  x-generated-from: documentation
  x-source-url: https://developer.revelsystems.com/revelsystems/docs/webhooks
  x-last-validated: '2026-06-03'
defaultContentType: application/json
channels:
  order.finalized:
    subscribe:
      operationId: onOrderFinalized
      summary: On Order Finalized
      description: Triggered when an order is completed. Payload is a full OrderAllInOne object including items, modifiers, taxes, payments, and history.
      message:
        $ref: '#/components/messages/OrderFinalized'
  customer.created:
    subscribe:
      operationId: onCustomerCreated
      summary: On Customer Created
      description: Triggered when a customer record is created.
      message:
        $ref: '#/components/messages/CustomerEvent'
  customer.updated:
    subscribe:
      operationId: onCustomerUpdated
      summary: On Customer Updated
      description: Triggered when a customer record is updated.
      message:
        $ref: '#/components/messages/CustomerEvent'
  rewardcard.created:
    subscribe:
      operationId: onRewardCardCreated
      summary: On Reward Card Created
      description: Triggered when a rewards card is created.
      message:
        $ref: '#/components/messages/RewardCardEvent'
  inout.stock:
    subscribe:
      operationId: onStockChanged
      summary: On Stock Changed
      description: Triggered when a product, ingredient, or modifier stock status changes.
      message:
        $ref: '#/components/messages/StockStatus'
  menu.updated:
    subscribe:
      operationId: onMenuUpdated
      summary: On Menu Updated
      description: Triggered when menu changes are pushed from the management console.
      message:
        $ref: '#/components/messages/MenuUpdated'
  timesheet.created:
    subscribe:
      operationId: onTimesheetCreated
      summary: On Timesheet Created
      description: Triggered when a timesheet entry is created.
      message:
        $ref: '#/components/messages/TimesheetEvent'
  timesheet.updated:
    subscribe:
      operationId: onTimesheetUpdated
      summary: On Timesheet Updated
      description: Triggered when a timesheet entry is updated.
      message:
        $ref: '#/components/messages/TimesheetEvent'
  timesheet.deleted:
    subscribe:
      operationId: onTimesheetDeleted
      summary: On Timesheet Deleted
      description: Triggered when a timesheet entry is deleted.
      message:
        $ref: '#/components/messages/TimesheetEvent'
  app.integration.changed:
    subscribe:
      operationId: onIntegrationChanged
      summary: On Integration Changed
      description: Triggered when integration access permissions are modified.
      message:
        $ref: '#/components/messages/IntegrationChanged'
  ping:
    subscribe:
      operationId: onPing
      summary: On Ping
      description: System test event used to verify endpoint readiness.
      message:
        $ref: '#/components/messages/Ping'
components:
  messageTraits:
    revelHeaders:
      headers:
        type: object
        properties:
          X-Revel-Signature:
            type: string
            description: HMAC-SHA1 signature of the request body computed with the shared secret.
          X-Revel-Instance:
            type: string
            description: Customer instance name.
          X-Revel-Event-Type:
            type: string
            description: Event category.
          X-Revel-Event-Id:
            type: string
          X-Revel-Message-Id:
            type: string
          X-Revel-Establishment-Id:
            type: string
            description: Establishment identifier (optional).
  messages:
    OrderFinalized:
      name: orderFinalized
      title: Order Finalized
      traits:
      - $ref: '#/components/messageTraits/revelHeaders'
      payload:
        type: object
        description: OrderAllInOne object with items, modifiers, taxes, payments, and order history.
        properties:
          event:
            type: string
            const: order.finalized
          id:
            type: integer
            example: 1
      examples:
      - name: OrderFinalizedDefaultExample
        summary: Default OrderFinalized example
        x-microcks-default: true
        payload:
          event: order.finalized
          id: 1
    CustomerEvent:
      name: customerEvent
      title: Customer Event
      traits:
      - $ref: '#/components/messageTraits/revelHeaders'
      payload:
        type: object
        description: Customer profile data with addresses, contact information, and loyalty details.
        properties:
          id: {type: integer, example: 1}
          first_name: {type: string, example: "Jane"}
          last_name: {type: string, example: "Doe"}
          email: {type: string, format: email, example: "[email protected]"}
      examples:
      - name: CustomerEventDefaultExample
        summary: Default CustomerEvent example
        x-microcks-default: true
        payload:
          id: 1
          first_name: "Jane"
          last_name: "Doe"
          email: "[email protected]"
    RewardCardEvent:
      name: rewardCardEvent
      title: Reward Card Event
      traits:
      - $ref: '#/components/messageTraits/revelHeaders'
      payload:
        type: object
        properties:
          id: {type: integer, example: 1}
          customer: {type: integer, example: 1}
      examples:
      - name: RewardCardEventDefaultExample
        summary: Default RewardCardEvent example
        x-microcks-default: true
        payload:
          id: 1
          customer: 1
    StockStatus:
      name: stockStatus
      title: Stock Status
      traits:
      - $ref: '#/components/messageTraits/revelHeaders'
      payload:
        type: object
        properties:
          id:
            type: integer
            description: Product or modifier ID.
            example: 1
          instock:
            type: boolean
            example: true
          type:
            type: string
            enum: [product, modifier]
            example: product
          barcode:
            type: string
            example: "0123456789012"
      examples:
      - name: StockStatusDefaultExample
        summary: Default StockStatus example
        x-microcks-default: true
        payload:
          id: 1
          instock: true
          type: product
          barcode: "0123456789012"
    MenuUpdated:
      name: menuUpdated
      title: Menu Updated
      traits:
      - $ref: '#/components/messageTraits/revelHeaders'
      payload:
        type: object
        properties:
          event:
            type: string
            const: menu.updated
      examples:
      - name: MenuUpdatedDefaultExample
        summary: Default MenuUpdated example
        x-microcks-default: true
        payload:
          event: menu.updated
    TimesheetEvent:
      name: timesheetEvent
      title: Timesheet Event
      traits:
      - $ref: '#/components/messageTraits/revelHeaders'
      payload:
        type: object
        description: Labor tracking detail including clock times, break duration, department, role, wage, and action type.
        properties:
          id: {type: integer, example: 1}
          employee: {type: integer, example: 1}
          establishment: {type: integer, example: 1}
          action: {type: string, example: "clock_in"}
      examples:
      - name: TimesheetEventDefaultExample
        summary: Default TimesheetEvent example
        x-microcks-default: true
        payload:
          id: 1
          employee: 1
          establishment: 1
          action: "clock_in"
    IntegrationChanged:
      name: integrationChanged
      title: Integration Changed
      traits:
      - $ref: '#/components/messageTraits/revelHeaders'
      payload:
        type: object
        properties:
          event:
            type: string
            const: app.integration.changed
      examples:
      - name: IntegrationChangedDefaultExample
        summary: Default IntegrationChanged example
        x-microcks-default: true
        payload:
          event: app.integration.changed
    Ping:
      name: ping
      title: Ping
      traits:
      - $ref: '#/components/messageTraits/revelHeaders'
      payload:
        type: object
        properties:
          event:
            type: string
            const: ping
      examples:
      - name: PingDefaultExample
        summary: Default Ping example
        x-microcks-default: true
        payload:
          event: ping