Webhooks

questionnaire_updated

A questionnaire changed. Always delivered as JSON, regardless of the firm's webhook encoding preference.

postWebhookquestionnaire_updated

Payload

idinteger
questionnaire_namestring nullable
tax_yearinteger nullable
external_entity_idstring nullable
entity_idinteger
client_emailstring nullable
client_namestring nullable
entity_namestring nullable
entity_typestring nullable
client_phonestring nullable
client_timezonestring nullable
firm_role_summarystring

A formatted, human-readable summary of who holds which role on the entity, not structured data. Empty when no roles are assigned. Use GET /entities/{entity_id}/firm_role_assignments if you need the underlying ids.

linkstring uri nullable
completedboolean nullable
lockedboolean nullable
due_datestring date nullable
updated_atstring date-time nullable
current_section_namestring nullable
changesobject

Only the fields that changed, each mapped to {from, to}. Watched keys: completed, locked, due_date, updated_at_by_client, opened_timestamp, and status (whose values are section names). Empty on questionnaire_deleted.

Example payload

{
  "firm_role_summary": "Partner: Jane Doe, Manager: John Smith",
  "changes": {
    "locked": {
      "from": false,
      "to": true
    }
  }
}

Response

Return any 2xx to acknowledge. Returning 410 Gone deletes the subscription.

Changes

Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.