ButterflyMX · AsyncAPI Specification

Butterflymx Webhooks

Version

View Spec View on GitHub access-controlphysical-accesssmart-intercomproptechproperty-managementmultifamilybuilding-automationvisitor-managementiotsmart-locksoauth2webhooksAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-08'
method: searched
source: https://apidocs.butterflymx.com/docs/webhooks
spec_type: WebhookCatalog
asyncapi_published: false
asyncapi_note: >-
  ButterflyMX has a real event surface but publishes NO AsyncAPI document — no /asyncapi.yaml on any host,
  nothing in the GitHub organization, no event-catalog page. This file captures the webhook surface exactly
  as the provider documents it. No AsyncAPI was authored on their behalf.
model: >-
  Webhooks are not a standalone resource. They are created as "integrations" against either a building or a
  tenant, with an `integrator` of `webhook`, a `configuration` (url + method) and a list of event
  `bindings`.
scopes:
- scope: building
  endpoint: /v4/buildings/{building_id}/integrations
  configured_by: Building admin (e.g. property manager)
  event_coverage: Entire building
  use_cases:
  - Security dashboards
  - Delivery monitoring
- scope: tenant
  endpoint: /v4/tenants/{tenant_id}/integrations
  configured_by: Tenant (resident or unit owner)
  event_coverage: Events tied to the tenant's unit only
  use_cases:
  - Personal apps
  - Smart-home automations
events:
- resource_type: call
  action: create
  description: New video call placed.
  note: >-
    Required by partners integrating the ButterflyMX mobile SDK — the SDK does not initiate connections by
    itself, so the call webhook is how an application learns an incoming call exists.
- resource_type: door_release
  action: create
  description: Door unlocked (via app, PIN, or QR).
payload:
  shape: '{"event": {"resource_type": "...", "action": "...", "data": {...}}}'
  example_door_release:
    event:
      resource_type: door_release
      action: create
      data:
        id: 123456789
        logged_at: '2025-04-24T10:24:35Z'
        access_point: 22177636
        entry_method: Swipe to open
        release_status: Unlocked
        name: John Tenant
        image_url: https://cdn.butterflymx.com/snapshot.png
subscription_request_example:
  data:
    type: integrations
    attributes:
      integrator: webhook
      configuration:
        url: https://your-webhook-url.com/building-events
        method: post
      bindings:
      - resource_type: door_release
        actions:
        - create
      - resource_type: call
        actions:
        - create
management:
  list:
  - GET /v4/buildings/{building_id}/integrations
  - GET /v4/tenants/{tenant_id}/integrations
  create:
  - POST /v4/buildings/{building_id}/integrations
  - POST /v4/tenants/{tenant_id}/integrations
  show:
  - GET /v4/buildings/{building_id}/integrations/{id}
  - GET /v4/tenants/{tenant_id}/integrations/{id}
  update:
  - PUT /v4/buildings/{building_id}/integrations/{id}
  - PUT /v4/tenants/{tenant_id}/integrations/{id}
  delete:
  - DELETE /v4/buildings/{building_id}/integrations/{id}
  - DELETE /v4/tenants/{tenant_id}/integrations/{id}
delivery:
  ack_window_seconds: 5
  ack_note: Respond with 200 OK within 5 seconds to avoid a retry.
  retries: documented as occurring, but the retry schedule and cap are not published
  duplicate_delivery: >-
    The provider states the consumer must safely handle duplicate deliveries; there is no delivery-id or
    dedupe key in the documented payload.
security:
  signature: >-
    NOT provided by default. The docs describe signature verification as "optional" and put the burden on
    the integrator ("Implement IP filtering or shared secret verification"). No signing algorithm, header
    name, or secret-rotation process is documented.
  transport: HTTPS endpoint supplied by the subscriber
testing:
  tool: https://webhook.site
  reference_receiver: https://github.com/runslikebutter/webhooks-demo-app
gaps:
- No AsyncAPI or machine-readable event schema.
- No webhook signature contract — the only documented integrity control is DIY IP filtering.
- No event-id or delivery-id in the payload, yet duplicate delivery is expected.
- Only two event types (`call.create`, `door_release.create`) for a platform with many more state changes.
x-evidence:
- url: https://apidocs.butterflymx.com/docs/webhooks.md
  http_status: 200
  fetched: '2026-08-08'