> ## Documentation Index
> Fetch the complete documentation index at: https://developer.fitprotracker.com/llms.txt
> Use this file to discover all available pages before exploring further.

# contact.deleted

> A contact was removed or deactivated at a location.

A `contact.deleted` event fires when a contact is removed from active use at a location. FPT uses **soft delete** — the record is flagged inactive rather than physically removed — so the contact's history and associated data remain intact for audit purposes.

<Warning>
  **The contact still exists in FPT after this event.** The `IsActive` flag is set to false, and the contact is hidden from the active-contacts grid in the FPT admin. If your integration deletes the matching record on your end, you may want to instead mark it as inactive — it's possible for a contact to be reactivated later (in which case you'd see a fresh `contact.created` event for the same `contactId`).
</Warning>

## Payload

```json theme={null}
{
  "eventId":        "9f1c7e2a8c4d4b1b9e3f5a6d7c8b9a0e",
  "eventType":     "contact.deleted",
  "eventTimestamp": "2026-06-10T23:45:00.123Z",
  "locationId":    1234,
  "organizationId": 5678,
  "apiVersion":    "2026-05-29",
  "data": {
    "contactId": 9876,
    "operation": "delete"
  }
}
```

### Fields in `data`

| Field       | Type     | Description                            |
| ----------- | -------- | -------------------------------------- |
| `contactId` | `number` | The contact that was just deactivated. |
| `operation` | `string` | Always `"delete"` for this event type. |

## What triggers it

* Staff explicitly deletes a contact from the FPT admin
* Bulk deactivation flows (e.g., importing a new contact list and marking old contacts inactive)
* Location transfers (the contact appears to "leave" this location — though in that case you may also see it appear at another `locationId` via `contact.created`)

## What does NOT fire this

* **Membership cancellation** alone doesn't delete the contact — the contact stays active with `contactGroupId` flipped to a non-member group. You'd see `contact.status_changed` for that, not `contact.deleted`.
* **Hard deletes** from the database (very rare in FPT's data model) are not surfaced as `contact.deleted` events.

## What you might do with this

* **Soft-deactivate** the matching record on your side (mark inactive, archive, hide — but don't delete physically; reactivation is possible)
* **Stop active campaigns** targeting the contact in your marketing system
* **Notify the sales team** that the lead is no longer pursuing
* **Reporting** — track churn rate, deactivation reasons (if known)

## Common gotcha

<AccordionGroup>
  <Accordion title="Are deleted contacts gone forever?">
    No — they're flagged inactive but the row remains. Staff can reactivate from the admin, which fires a fresh `contact.created` event for the same `contactId`. Don't assume "deleted = gone."
  </Accordion>

  <Accordion title="Will I receive any more events for a deleted contact?">
    Generally no, while it remains inactive. If it's reactivated, future events will start arriving again. If it's deleted then reactivated then deleted again, expect two `contact.deleted` events with the same `contactId` but different `eventId`s.
  </Accordion>
</AccordionGroup>
