> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer.fortresstech.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer.fortresstech.io/_mcp/server.

# Webhook Events

> The events Fortress delivers by webhook, one page per event type

Every event shares the same [envelope](/webhooks/webhooks#the-event-envelope). Each event type has its own page
covering what goes in `data`, when it fires, and — just as importantly — the cases where it is
deliberately *not* sent.

Read the [Webhooks](/webhooks/webhooks) guide first for signature verification, retries, and idempotency.

> **Note**
>
> New event types are added over time and are opt-in per subscription. Route on `eventType` and ignore
> values you do not recognize; a subscription only receives the events it was provisioned for.

## Available

Delivered today. Subscribe and build against these.

| Event                                                                                          | Fires when                                                                                                                                 |
| ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| [`prospect.created`](/webhooks/webhook-events/webhooks/prospect-created)                       | A new prospect record is created in Fortress                                                                                               |
| [`message.received`](/webhooks/webhook-events/webhooks/message-received)                       | A new inbound message is received                                                                                                          |
| [`application.completed`](/webhooks/webhook-events/webhooks/application-completed)             | An application's status moves to APPROVED, CANCELED, DENIED, ABANDONED or WAITLIST                                                         |
| [`application.signed`](/webhooks/webhook-events/webhooks/application-signed)                   | Each time the last required adult in a household e-signs their application form                                                            |
| [`requirement.upload_received`](/webhooks/webhook-events/webhooks/requirement-upload-received) | A document is uploaded to a requirement                                                                                                    |
| [`requirement.upload_removed`](/webhooks/webhook-events/webhooks/requirement-upload-removed)   | A document is removed from a requirement                                                                                                   |
| [`agent.state_changed`](/webhooks/webhook-events/webhooks/agent-state-changed)                 | Staff enable or disable an agent (`cora` or `leslie`) for a property (`scope` `PROPERTY`), or change the CORA cadence policy of a property |
| [`compliance_review.opened`](/webhooks/webhook-events/webhooks/compliance-review-opened)       | Staff open a manual compliance review on an application                                                                                    |
| [`compliance_review.closed`](/webhooks/webhook-events/webhooks/compliance-review-closed)       | Staff close the manual compliance review on an application                                                                                 |

Every `requirement.*` event describes one [requirement](/ai-team-members/cora/overview#the-bundle-model); they fire for `DOCUMENT` slots only.

## Defined, not yet delivered

Documented so that you can build and test your receiver with the [trigger](/api-reference/webhooks/trigger-webhook-event). Real deliveries start when the publisher ships. Subscriptions may list these event types today.

| Event                                                                            | Fires when                                                                |
| -------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| [`subscription.created`](/webhooks/webhook-events/webhooks/subscription-created) | A resident subscription starts                                            |
| [`subscription.updated`](/webhooks/webhook-events/webhooks/subscription-updated) | A resident subscription changes plan or status                            |
| [`subscription.ended`](/webhooks/webhook-events/webhooks/subscription-ended)     | A resident subscription ends                                              |
| [`customer.updated`](/webhooks/webhook-events/webhooks/customer-updated)         | A customer with a live subscription changes a watched field               |
| [`lease.updated`](/webhooks/webhook-events/webhooks/lease-updated)               | The lease of a household with a live subscription changes a watched field |