Buildxact Webhooks

Buildxact's webhook surface lets partner and customer integrations receive real-time notifications when events occur inside the construction-management platform — including Estimate Accepted, Lead Created, and Lead Updated, plus additional event types reserved for Merchant and Manufacturer plan tiers. Webhooks are registered from the "My Business > API" panel of the Buildxact web app: provide a destination URL, choose events, store the signing secret used to verify payload authenticity, and inspect deliveries via the built-in Event Log. Payloads are JSON over HTTPS.

Buildxact Webhooks is one of 2 APIs that Buildxact publishes on the APIs.io network, described by an AsyncAPI event-driven specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include Webhooks, Events, Estimates, Leads, and Event-Driven. The published artifact set on APIs.io includes API documentation, an AsyncAPI specification, and 1 Naftiko capability spec.

AsyncAPI Specification

buildxact-webhooks-asyncapi.yml Raw ↑
asyncapi: 2.6.0
info:
  title: Buildxact Webhooks
  version: '1.0'
  description: >-
    Buildxact webhook delivery channel. Subscribers register a target URL
    inside the Buildxact web app ("My Business > API"), pick the events
    they want, and verify each payload with a signing secret. Some events
    are only available to Merchant and Manufacturer subscription tiers.
defaultContentType: application/json
servers:
  partner:
    url: '{webhookUrl}'
    protocol: https
    description: Subscriber's HTTPS endpoint that Buildxact POSTs events to.
    variables:
      webhookUrl:
        default: https://example.com/buildxact-webhook
        description: HTTPS URL the partner controls.
channels:
  estimate.accepted:
    description: Fired when a customer accepts an estimate.
    subscribe:
      operationId: onEstimateAccepted
      summary: Estimate Accepted
      message:
        $ref: '#/components/messages/EstimateAccepted'
  lead.created:
    description: Fired when a new lead is captured in Buildxact.
    subscribe:
      operationId: onLeadCreated
      summary: Lead Created
      message:
        $ref: '#/components/messages/LeadCreated'
  lead.updated:
    description: Fired when an existing lead is modified.
    subscribe:
      operationId: onLeadUpdated
      summary: Lead Updated
      message:
        $ref: '#/components/messages/LeadUpdated'
components:
  messages:
    EstimateAccepted:
      name: EstimateAccepted
      title: Estimate Accepted
      summary: Customer accepted an estimate.
      contentType: application/json
      headers:
        type: object
        properties:
          X-Buildxact-Signature:
            type: string
            description: HMAC signature computed with the webhook signing secret.
          X-Buildxact-Event:
            type: string
            example: estimate.accepted
      payload:
        $ref: '#/components/schemas/EstimateEvent'
    LeadCreated:
      name: LeadCreated
      title: Lead Created
      summary: A new lead was captured.
      contentType: application/json
      headers:
        type: object
        properties:
          X-Buildxact-Signature:
            type: string
          X-Buildxact-Event:
            type: string
            example: lead.created
      payload:
        $ref: '#/components/schemas/LeadEvent'
    LeadUpdated:
      name: LeadUpdated
      title: Lead Updated
      summary: An existing lead was modified.
      contentType: application/json
      headers:
        type: object
        properties:
          X-Buildxact-Signature:
            type: string
          X-Buildxact-Event:
            type: string
            example: lead.updated
      payload:
        $ref: '#/components/schemas/LeadEvent'
  schemas:
    EventEnvelope:
      type: object
      properties:
        eventId:
          type: string
        eventType:
          type: string
        tenantId:
          type: string
        occurredAt:
          type: string
          format: date-time
    EstimateEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            data:
              type: object
              properties:
                estimateId:
                  type: string
                jobId:
                  type: string
                customerId:
                  type: string
                totalIncMarkupTax:
                  type: number
                  format: double
                acceptedAt:
                  type: string
                  format: date-time
    LeadEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            data:
              type: object
              properties:
                leadId:
                  type: string
                customerName:
                  type: string
                customerEmail:
                  type: string
                  format: email
                projectAddress:
                  type: string
                source:
                  type: string
                status:
                  type: string
                createdAt:
                  type: string
                  format: date-time
                modifiedAt:
                  type: string
                  format: date-time