# Contacts

| Method | Path | Purpose |
|---|---|---|
| GET | `/contacts/:id/export` | Everything kept about one contact, as JSON |
| DELETE | `/contacts/:id` | Delete the contact and everything about them |

For a person's access, portability and erasure requests. `:id` is the
contact's id, as the inbox and webhooks show it. Both calls are recorded in
the workspace's **Activity**. See [Retention and deletion](https://vatio.ai/docs/data) for what
each one covers.

## Export

```http
GET /api/developer/v1/:slug/contacts/:id/export
Authorization: Bearer TOKEN
```

```json
{
  "exported_at": "2026-10-09T21:14:03Z",
  "workspace": "acme",
  "contact": {
    "id": 4211,
    "environment": "live",
    "name": "Ana Pérez",
    "email": "ana@example.com",
    "phone_number": "+56911112222",
    "opted_out_at": null,
    "created_at": "2026-09-30T12:01:44Z",
    "channels": [{ "channel": "whatsapp", "handle": "+56 9 1111 2222" }],
    "memories": [{ "kind": "note", "body": "Prefers mornings", "created_at": "2026-10-01T09:12:00Z" }]
  },
  "conversations": [
    {
      "id": 9120,
      "agent": "support",
      "source": "whatsapp",
      "environment": "live",
      "started_at": "2026-09-30T12:01:44Z",
      "messages": [
        { "role": "user", "from_a_person": false, "content": "Hi", "attachments": [], "sent_at": "2026-09-30T12:01:44Z" }
      ]
    }
  ]
}
```

`from_a_person` is `true` on a reply somebody wrote from the inbox or the
channel's own app instead of the agent.

## Delete

```http
DELETE /api/developer/v1/:slug/contacts/:id
Authorization: Bearer TOKEN
```

```json
{ "erased": true, "contact_id": 4211, "chats": 3, "messages": 58 }
```

There is no undo. A contact that does not exist, or belongs to another
workspace, answers `404`.
