# Contacts

> Keep a record of the people you email, with custom properties and subscription status.

Contacts are the people your project emails. Each contact has an email address, optional profile fields, custom properties, and an email subscription status. Deliveries to a known address are linked to its contact, so you can see a person's full email history.

## Contact fields

| Field | Type | Description |
| --- | --- | --- |
| `email` | string · required | Unique within your project. |
| `userId` | string · optional | Your own identifier for the person, up to 255 characters. |
| `firstName` | string · optional | First name, for personalization. |
| `lastName` | string · optional | Last name, for personalization. |
| `phoneNumber` | string · optional | Contact phone number. |
| `properties` | object · optional | Values for the custom properties you have defined. |
| `emailStatus` | string | `subscribed` or `unsubscribed`. New contacts are subscribed. |

## Custom properties

Define custom properties in the dashboard under **Contacts → Custom fields** — for example `plan` or `signupSource` — then set them with the `properties` object. Sending a property that is not defined returns `400`, which keeps your data consistent.

## Subscription status

A contact who unsubscribes is marked `unsubscribed`, and email to that address is suppressed. Your application can update the status with [Update a contact](/docs/api/contacts/update), for example when a user changes their preferences in your app.

## Keep contacts in sync

- [Create a contact](/docs/api/contacts/create) Add people when they sign up.
- [Update a contact](/docs/api/contacts/update) Keep names, properties, and status current.
- [Contact webhooks](/docs/webhooks/event-types#contact-events) Hear about changes made in the dashboard.

Contact allowances depend on your plan. Creating a contact beyond your allowance returns `429` with code `contact_limit_exceeded`.

---

Source: https://connect.nxiom.com/docs/learn/contacts
