CORA events
Every event uses the event envelope and is signed as described in Webhooks.
Testing your receiver
You do not have to wait for the real flow to test your receiver. Call
POST /v1/webhooks/trigger with the event you want and the organization and property to
test, for example
{ "eventType": "application.signed", "organizationId": "1a2b3c4d-5e6f-4a1b-8c2d-3e4f5a6b7c8d", "propertyId": "3a1e2b4c-5d6f-4a7b-8c9d-0e1f2a3b4c5d" }.
Fortress sends that event’s documented example payload only to the active cora subscriptions of that property that list
that event type in their eventTypes, never to other subscriptions, properties or organizations:
- The delivery uses the normal event envelope and
X-Fortress-*headers, with a fresheventIdandoccurredAt, and is signed with the subscription’s signing secret. Verify it exactly as you will verify real deliveries. - Fortress makes one attempt and does not retry. The
200response lists each subscription with the HTTP status your receiver answered, orfailedwhen no response was received or Fortress could not sign the delivery. The call returns once every delivery has finished; deliveries run in parallel within the gateway’s limit of about 29 seconds. - Any of the events above except
message.receivedcan be sent.message.receivedis delivered for real as soon as the applicant replies to a message CORA sent with Send message, so you can test it end to end with a real conversation instead of an example. A missing or invalid field, anothereventType, or an event Fortress has no example payload for yet returns400. An organization or property your API key does not own returns404withcode: NOT_FOUND, and a property none of whose activecorasubscriptions lists the event type returns404withcode: NO_SUBSCRIPTION. - Your API key needs the
webhookspermission withcreate. An all-organizations key works, as long as the property belongs to the organization you pass.
The payloads are examples, not real data. Their ids do not point to records in your organization, so do not act on
them. This includes data.organizationId and data.propertyId: they are the documented example values, not the ones
in your request. If your receiver checks the organization, verify the signature first and do not reject a test
delivery on that check.

