Sage · AsyncAPI Specification

Sage Webhooks

Version 1.0.0

AsyncAPI 2.6 description of the documented webhook / event surface across Sage developer products. Sage's webhook story is fragmented across product lines and only a subset of products publish a webhook capability. This spec captures only the surfaces that Sage actually documents publicly; products without a documented webhook capability are listed at the bottom of this description. Documented webhook surfaces modelled here: - Sage Intacct - Outbound webhooks (REST API) https://developer.sage.com/intacct/docs/developer-portal/guides/webhooks https://developer.sage.com/intacct/docs/developer-portal/webhooks-triggers/ https://developer.sage.com/intacct/docs/1/sage-intacct-rest-api/webhooks-and-triggers Outbound webhooks fire when objects in Sage Intacct are created or updated. The 2025 R2 release added a Platform event queue trigger that queues payloads in storage for delivery. - Sage Intacct - Smart Events (legacy Platform Services) https://developer.intacct.com/api/customization-services/smart-events/ https://developer.intacct.com/customization-services/smart-event-walkthrough/ Smart Events fire on Add, Set and Delete operations against Intacct objects (for example ARINVOICE, SODOCUMENT). The HTTP POST action delivers a payload to an external URL. - Sage People - Webhooks https://developer.sage.com/people/guides/webhooks/ Sage People webhooks notify subscribers when an Employee record is created or updated. The documented payload contains the Employee identifier; subscribers fetch the full record from the People API. - Sage Construction Management - Webhooks https://api-ext.sagecm.intacct.com/Documentation/GettingStarted Sage Construction Management can call a configured URL after a feature action (such as Company create). One webhook path can serve all features, or a different path can be configured per feature. A customer-defined security signature is delivered in the request header. - Sage Payments Out - Provider webhook notifications https://developer.sage.com/payments-out/provider-api/reference/provider-webhook-notifications-api/ https://developer.sage.com/payments-out/guides/provider/understand-provider-messaging-webhooks/ Provider-facing webhook notifications API used by payment providers integrating with the Sage Payments Out platform. Products WITHOUT a documented native webhook surface (as of the source documentation reviewed): - Sage Accounting / Business Cloud Accounting - no native webhook surface is documented on developer.sage.com; integrators use polling or a third-party iPaaS to derive change events. - Sage 50 Accounts - no documented webhook surface. - Sage 200 - no documented webhook surface. - Sage X3 - no documented webhook surface (GraphQL and SOAP only). Caveats: - Sage does not publish a single canonical, machine-readable webhook event catalogue. Payload field names and JSON Schemas are not published in full for most of the surfaces above. Where the schema is not publicly specified, message payloads in this spec are modelled as open `object` types and the description records that fact, rather than fabricating field names. - All channel paths are subscriber-hosted endpoints that the customer configures inside the relevant Sage product UI or via the relevant management API. The paths shown are illustrative placeholders.

View Spec View on GitHub AccountingBusiness ManagementCloud SoftwareERPPayrollHRAsyncAPIWebhooksEvents

Channels

/sage/intacct/webhook
publish receiveIntacctEvent
Receive a Sage Intacct outbound webhook or Smart Event POST
Subscriber endpoint that receives Sage Intacct outbound webhook events and Smart Event HTTP POST deliveries. Intacct delivers one event per HTTP POST request. Subscribers should respond with a 2xx status code; Intacct outbound webhooks retry automatically on delivery failure.
/sage/people/webhook
publish receivePeopleEvent
Receive a Sage People Employee webhook
Subscriber endpoint that receives Sage People Employee webhook events. Documented coverage is limited to the Employee object; the payload delivers the Id of the affected Employee and subscribers fetch the full record from the Sage People API.
/sage/cm/webhook
publish receiveConstructionManagementEvent
Receive a Sage Construction Management feature webhook
Subscriber endpoint that receives Sage Construction Management webhook events. The administrator selects which feature(s) drive deliveries to this path (Company, Lead, Project, Estimate, Prime Contract, Job Cost Code, Labor Timecards, Equipment Timecards, Misc. Expenses, Project Financial). The customer-defined security signature is delivered in the request header and must be validated by the subscriber.
/sage/payments-out/webhook
publish receivePaymentsOutProviderNotification
Receive a Sage Payments Out provider webhook notification
Provider endpoint that receives Sage Payments Out provider webhook notifications. The notification surface is documented as part of the Provider API and is targeted at payment providers integrating with Sage Payments Out.

Messages

IntacctObjectAdded
Sage Intacct object Add event
An object was created in Sage Intacct
IntacctObjectUpdated
Sage Intacct object Set event
An object was updated in Sage Intacct
IntacctObjectDeleted
Sage Intacct object Delete event
An object was deleted in Sage Intacct
PeopleEmployeeCreated
Sage People Employee created
A new Employee record was created in Sage People
PeopleEmployeeUpdated
Sage People Employee updated
An existing Employee record was updated in Sage People
ConstructionManagementFeatureEvent
Sage Construction Management feature event
A configured feature action occurred in Sage Construction Management
PaymentsOutProviderNotification
Sage Payments Out provider notification
Provider webhook notification from Sage Payments Out

Servers

https
intacctSubscriber {webhookUrl}
Customer-hosted HTTPS endpoint that receives outbound webhook POSTs from Sage Intacct (REST outbound webhooks, Platform event queue triggers, or Smart Events with an HTTP POST action). The full URL is configured in the Intacct tenant.
https
peopleSubscriber {webhookUrl}
Customer-hosted HTTPS endpoint that receives Sage People webhook POSTs. The endpoint is registered on a Webhook object that references a Named Credential in the Sage People tenant.
https
constructionManagementSubscriber {webhookUrl}
Customer-hosted HTTPS endpoint that receives Sage Construction Management webhook POSTs. One path can serve every feature, or a different path can be configured per feature in the Sage Construction Management settings.
https
paymentsOutSubscriber {webhookUrl}
Provider-hosted HTTPS endpoint registered with Sage Payments Out to receive provider webhook notifications.

AsyncAPI Specification

Raw ↑
asyncapi: 2.6.0
info:
  title: Sage Webhooks
  version: '1.0.0'
  description: |-
    AsyncAPI 2.6 description of the documented webhook / event surface across
    Sage developer products. Sage's webhook story is fragmented across product
    lines and only a subset of products publish a webhook capability. This spec
    captures only the surfaces that Sage actually documents publicly; products
    without a documented webhook capability are listed at the bottom of this
    description.

    Documented webhook surfaces modelled here:

      - Sage Intacct - Outbound webhooks (REST API)
        https://developer.sage.com/intacct/docs/developer-portal/guides/webhooks
        https://developer.sage.com/intacct/docs/developer-portal/webhooks-triggers/
        https://developer.sage.com/intacct/docs/1/sage-intacct-rest-api/webhooks-and-triggers
        Outbound webhooks fire when objects in Sage Intacct are created or
        updated. The 2025 R2 release added a Platform event queue trigger that
        queues payloads in storage for delivery.

      - Sage Intacct - Smart Events (legacy Platform Services)
        https://developer.intacct.com/api/customization-services/smart-events/
        https://developer.intacct.com/customization-services/smart-event-walkthrough/
        Smart Events fire on Add, Set and Delete operations against Intacct
        objects (for example ARINVOICE, SODOCUMENT). The HTTP POST action
        delivers a payload to an external URL.

      - Sage People - Webhooks
        https://developer.sage.com/people/guides/webhooks/
        Sage People webhooks notify subscribers when an Employee record is
        created or updated. The documented payload contains the Employee
        identifier; subscribers fetch the full record from the People API.

      - Sage Construction Management - Webhooks
        https://api-ext.sagecm.intacct.com/Documentation/GettingStarted
        Sage Construction Management can call a configured URL after a feature
        action (such as Company create). One webhook path can serve all
        features, or a different path can be configured per feature. A
        customer-defined security signature is delivered in the request header.

      - Sage Payments Out - Provider webhook notifications
        https://developer.sage.com/payments-out/provider-api/reference/provider-webhook-notifications-api/
        https://developer.sage.com/payments-out/guides/provider/understand-provider-messaging-webhooks/
        Provider-facing webhook notifications API used by payment providers
        integrating with the Sage Payments Out platform.

    Products WITHOUT a documented native webhook surface (as of the source
    documentation reviewed):

      - Sage Accounting / Business Cloud Accounting - no native webhook surface
        is documented on developer.sage.com; integrators use polling or a
        third-party iPaaS to derive change events.
      - Sage 50 Accounts - no documented webhook surface.
      - Sage 200 - no documented webhook surface.
      - Sage X3 - no documented webhook surface (GraphQL and SOAP only).

    Caveats:
      - Sage does not publish a single canonical, machine-readable webhook
        event catalogue. Payload field names and JSON Schemas are not
        published in full for most of the surfaces above. Where the schema is
        not publicly specified, message payloads in this spec are modelled as
        open `object` types and the description records that fact, rather
        than fabricating field names.
      - All channel paths are subscriber-hosted endpoints that the customer
        configures inside the relevant Sage product UI or via the relevant
        management API. The paths shown are illustrative placeholders.
  contact:
    name: Sage Developer Support
    url: https://developer.sage.com/support/
  license:
    name: Sage Developer Terms
    url: https://developer.sage.com/

defaultContentType: application/json

servers:
  intacctSubscriber:
    url: '{webhookUrl}'
    protocol: https
    description: |-
      Customer-hosted HTTPS endpoint that receives outbound webhook POSTs from
      Sage Intacct (REST outbound webhooks, Platform event queue triggers, or
      Smart Events with an HTTP POST action). The full URL is configured in
      the Intacct tenant.
    variables:
      webhookUrl:
        default: https://example.com/sage/intacct/webhook
        description: Fully-qualified HTTPS URL of the subscriber endpoint.
    security:
      - intacctSignature: []
  peopleSubscriber:
    url: '{webhookUrl}'
    protocol: https
    description: |-
      Customer-hosted HTTPS endpoint that receives Sage People webhook POSTs.
      The endpoint is registered on a Webhook object that references a Named
      Credential in the Sage People tenant.
    variables:
      webhookUrl:
        default: https://example.com/sage/people/webhook
        description: Fully-qualified HTTPS URL of the subscriber endpoint.
    security:
      - namedCredential: []
  constructionManagementSubscriber:
    url: '{webhookUrl}'
    protocol: https
    description: |-
      Customer-hosted HTTPS endpoint that receives Sage Construction
      Management webhook POSTs. One path can serve every feature, or a
      different path can be configured per feature in the Sage Construction
      Management settings.
    variables:
      webhookUrl:
        default: https://example.com/sage/cm/webhook
        description: Fully-qualified HTTPS URL of the subscriber endpoint.
    security:
      - cmSignature: []
  paymentsOutSubscriber:
    url: '{webhookUrl}'
    protocol: https
    description: |-
      Provider-hosted HTTPS endpoint registered with Sage Payments Out to
      receive provider webhook notifications.
    variables:
      webhookUrl:
        default: https://example.com/sage/payments-out/webhook
        description: Fully-qualified HTTPS URL of the subscriber endpoint.

channels:
  /sage/intacct/webhook:
    description: |-
      Subscriber endpoint that receives Sage Intacct outbound webhook events
      and Smart Event HTTP POST deliveries. Intacct delivers one event per
      HTTP POST request. Subscribers should respond with a 2xx status code;
      Intacct outbound webhooks retry automatically on delivery failure.
    bindings:
      http:
        type: request
        method: POST
        bindingVersion: '0.3.0'
    publish:
      operationId: receiveIntacctEvent
      summary: Receive a Sage Intacct outbound webhook or Smart Event POST
      description: |-
        Sage Intacct posts a JSON body to the subscriber endpoint when a
        configured object operation occurs (Add, Set, Delete) or when an
        outbound webhook subscription fires for a Create or Update on a
        subscribed object type. Sage Intacct does not publish a single
        canonical JSON Schema for the outbound payload across all object
        types; the payload shape depends on the subscribed object and on the
        Smart Event configuration (XML or HTTP POST body authored by the
        Intacct administrator).
      message:
        oneOf:
          - $ref: '#/components/messages/IntacctObjectAdded'
          - $ref: '#/components/messages/IntacctObjectUpdated'
          - $ref: '#/components/messages/IntacctObjectDeleted'
  /sage/people/webhook:
    description: |-
      Subscriber endpoint that receives Sage People Employee webhook events.
      Documented coverage is limited to the Employee object; the payload
      delivers the Id of the affected Employee and subscribers fetch the
      full record from the Sage People API.
    bindings:
      http:
        type: request
        method: POST
        bindingVersion: '0.3.0'
    publish:
      operationId: receivePeopleEvent
      summary: Receive a Sage People Employee webhook
      description: |-
        Sage People posts a notification to the subscriber endpoint when a
        new Employee is created or an existing Employee is updated.
      message:
        oneOf:
          - $ref: '#/components/messages/PeopleEmployeeCreated'
          - $ref: '#/components/messages/PeopleEmployeeUpdated'
  /sage/cm/webhook:
    description: |-
      Subscriber endpoint that receives Sage Construction Management webhook
      events. The administrator selects which feature(s) drive deliveries to
      this path (Company, Lead, Project, Estimate, Prime Contract, Job Cost
      Code, Labor Timecards, Equipment Timecards, Misc. Expenses, Project
      Financial). The customer-defined security signature is delivered in
      the request header and must be validated by the subscriber.
    bindings:
      http:
        type: request
        method: POST
        bindingVersion: '0.3.0'
    publish:
      operationId: receiveConstructionManagementEvent
      summary: Receive a Sage Construction Management feature webhook
      description: |-
        Sage Construction Management posts to the configured URL after a
        feature action is performed in the application (for example, adding
        a Company). The set of features that can drive webhook deliveries
        mirrors the public API Reference feature list.
      message:
        $ref: '#/components/messages/ConstructionManagementFeatureEvent'
  /sage/payments-out/webhook:
    description: |-
      Provider endpoint that receives Sage Payments Out provider webhook
      notifications. The notification surface is documented as part of the
      Provider API and is targeted at payment providers integrating with
      Sage Payments Out.
    bindings:
      http:
        type: request
        method: POST
        bindingVersion: '0.3.0'
    publish:
      operationId: receivePaymentsOutProviderNotification
      summary: Receive a Sage Payments Out provider webhook notification
      description: |-
        Sage Payments Out posts a provider webhook notification to the
        registered provider endpoint. The exact set of notification types
        and their JSON Schemas are documented inside the Provider API
        reference and are not fully reproduced here.
      message:
        $ref: '#/components/messages/PaymentsOutProviderNotification'

components:
  securitySchemes:
    intacctSignature:
      type: httpApiKey
      in: header
      name: X-Sage-Signature
      description: |-
        Sage Intacct delivers a signature on outbound webhook calls so the
        subscriber can verify the call originated from Intacct. Sage does
        not publish the exact header name or algorithm in a single public
        location; the header name shown here is a placeholder for the
        documented "signature on the call" mechanism and should be
        configured to match the live Intacct delivery in production
        integrations.
    namedCredential:
      type: userPassword
      description: |-
        Sage People webhooks authenticate to the subscriber endpoint using
        the credentials defined on a Named Credential (Custom Metadata
        Type) referenced by the Webhook object configured in the tenant.
    cmSignature:
      type: httpApiKey
      in: header
      name: X-Sage-CM-Signature
      description: |-
        Sage Construction Management delivers a customer-defined security
        signature in the request header for every webhook invocation. The
        signature value is configured by the administrator in the Webhook
        tab and must be validated by the subscriber to authenticate the
        call from Sage Construction Management. The header name shown is a
        placeholder; the documented behaviour is "the signature will be in
        the header whenever the webhook is called."
  messages:
    IntacctObjectAdded:
      name: IntacctObjectAdded
      title: Sage Intacct object Add event
      summary: An object was created in Sage Intacct
      description: |-
        Delivered when a subscribed Intacct object is created. Smart Events
        document the Add condition as "checked whenever a new record is
        created." Outbound webhooks document object Create as a delivery
        trigger.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/IntacctEventEnvelope'
    IntacctObjectUpdated:
      name: IntacctObjectUpdated
      title: Sage Intacct object Set event
      summary: An object was updated in Sage Intacct
      description: |-
        Delivered when a subscribed Intacct object is updated. Smart Events
        document the Set condition as "checked whenever a record is
        changed." Outbound webhooks document object Update as a delivery
        trigger.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/IntacctEventEnvelope'
    IntacctObjectDeleted:
      name: IntacctObjectDeleted
      title: Sage Intacct object Delete event
      summary: An object was deleted in Sage Intacct
      description: |-
        Delivered when a subscribed Intacct object is deleted. Smart Events
        document the Delete condition as "checked whenever a record is
        deleted." Delete coverage in REST outbound webhooks is not
        guaranteed for every object type.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/IntacctEventEnvelope'
    PeopleEmployeeCreated:
      name: PeopleEmployeeCreated
      title: Sage People Employee created
      summary: A new Employee record was created in Sage People
      description: |-
        Delivered when a new Employee is created. The documented payload
        contains the Id of the new Employee; subscribers fetch the full
        record from the Sage People API.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/PeopleEmployeeEvent'
    PeopleEmployeeUpdated:
      name: PeopleEmployeeUpdated
      title: Sage People Employee updated
      summary: An existing Employee record was updated in Sage People
      description: |-
        Delivered when an existing Employee is updated. The documented
        payload contains the Id of the updated Employee; subscribers fetch
        the current record from the Sage People API.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/PeopleEmployeeEvent'
    ConstructionManagementFeatureEvent:
      name: ConstructionManagementFeatureEvent
      title: Sage Construction Management feature event
      summary: A configured feature action occurred in Sage Construction Management
      description: |-
        Delivered when an action occurs against a feature that has been
        subscribed to webhook delivery. Sage does not publish a single
        canonical event-type enum; the example given in the Getting Started
        guide is Company creation triggering an external system update.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/ConstructionManagementEventEnvelope'
    PaymentsOutProviderNotification:
      name: PaymentsOutProviderNotification
      title: Sage Payments Out provider notification
      summary: Provider webhook notification from Sage Payments Out
      description: |-
        Delivered to the provider endpoint registered with Sage Payments
        Out. The exact set of notification types and their JSON Schemas are
        documented in the Provider Webhook Messaging API reference.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/PaymentsOutProviderEnvelope'
  schemas:
    IntacctEventEnvelope:
      type: object
      description: |-
        Open envelope for a Sage Intacct outbound webhook or Smart Event
        HTTP POST body. Sage does not publish a single canonical JSON
        Schema for the outbound payload across object types and operations;
        the actual body depends on the subscribed object (for example
        ARINVOICE, SODOCUMENT) and on any administrator-authored template
        in the Smart Event definition. Additional properties are therefore
        permitted and no specific property names are fabricated here.
      additionalProperties: true
    PeopleEmployeeEvent:
      type: object
      description: |-
        Sage People Employee event payload. The documented behaviour is
        that the Id of the affected Employee is sent to the specified
        endpoint; the remainder of the payload is not publicly specified.
      additionalProperties: true
      properties:
        Id:
          type: string
          description: Identifier of the affected Sage People Employee record.
    ConstructionManagementEventEnvelope:
      type: object
      description: |-
        Open envelope for a Sage Construction Management webhook delivery.
        Sage Construction Management does not publish a JSON Schema for the
        outbound body in the public Getting Started documentation; the
        envelope is therefore modelled as open and no field names are
        fabricated.
      additionalProperties: true
    PaymentsOutProviderEnvelope:
      type: object
      description: |-
        Open envelope for a Sage Payments Out provider webhook notification.
        The Provider Webhook Messaging API reference defines the concrete
        notification types and schemas; until those schemas are mirrored
        into this AsyncAPI document the payload is modelled as open.
      additionalProperties: true