POST /api/v1/partner/events
Fires a lifecycle event for a contact. Events are the primary way to trigger review campaigns — when something meaningful happens in your system (a loan closes, a matter resolves, an appointment completes), you fire an event and eEndorsements handles the rest. The event is queued immediately and the review campaign logic runs asynchronously. A contact must already exist, or you can identify one by email and let the API create it on the fly.Authentication
x-api-key header — see Authentication.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
contact_id | UUID | One of contact_id or email | The eEndorsements contact ID returned from the Contacts API. |
email | string | One of contact_id or email | Email address of the contact. If no contact with this email exists, one is created automatically. |
event_type | string | Yes | The lifecycle event that occurred. Can be any string — see Event types for conventions. |
professional_id | UUID | No | The eEndorsements professional to associate with this review request. Overrides any professional_id set on the contact. |
metadata | object | No | Arbitrary key/value pairs attached to the event. Useful for passing context (loan number, matter ID, appointment date) into campaign templates or for filtering in reporting. |
Example request — by contact ID
Example request — by email
If you have not yet created a contact explicitly, you can identify by email. A contact is created automatically if one does not already exist.Example response
| Field | Type | Description |
|---|---|---|
id | UUID | Unique identifier for this event record. |
status | string | Always "queued" on success. Campaign processing happens asynchronously. |
Event types
event_type is a free-form string. Use dot-separated namespaces to keep things readable. Common conventions:
| Example value | When to fire |
|---|---|
loan.funded | Mortgage or lending workflow — loan closes and funds. |
loan.closed | Loan process completes (use when “funded” isn’t the right milestone). |
matter.closed | Legal or professional services — case or matter is resolved. |
appointment.completed | Healthcare, wellness, or services — appointment or visit finishes. |
transaction.closed | Real estate — transaction closes. |
custom.event | Any other milestone you define. |
Metadata
Themetadata object accepts any flat or nested JSON. It is attached to the event record and can be referenced in campaign templates and reporting filters. There is no enforced schema.
Idempotency
Events are not deduplicated by default — each call creates a new event record. If you need to prevent duplicate campaigns, use the Contacts API with a stableexternal_id to manage contacts, and design your integration to fire events only once per milestone.
