# PUT /contacts

Part of the SendHeron REST API. Base URL: `https://api.sendheron.com/api/v1`

Upsert a contact by email: create it, or merge the payload into the existing record.

```http
PUT https://api.sendheron.com/api/v1/contacts
Authorization: Bearer <YOUR_API_KEY>
```

**Required scopes:** `contacts:write`

**Success status:** `200`

**Body parameters**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `email` | string | yes | Match key for the upsert. |
| `firstName` | string | no | First name. |
| `lastName` | string | no | Last name. |
| `properties` | object | no | Custom fields, merged into any existing properties. |
| `tagNames` | string[] | no | Tags to attach by name. |

> This is the endpoint to reach for from a signup form or a sync job. It is idempotent on email.


---

Rate limits (global, all applied at once): 60 per minute, 150 per 5 minutes, 300 per hour, 2000 per day.
